am db2d6a20: Merge "Update enter and send icons for LXX_Dark" into lmp-preview-dev

* commit 'db2d6a202125bff92be495408babbb0c86bfb398':
  Update enter and send icons for LXX_Dark
diff --git a/java/proguard.flags b/java/proguard.flags
index f7b7f28..35b3ac3 100644
--- a/java/proguard.flags
+++ b/java/proguard.flags
@@ -17,7 +17,8 @@
 
 # Keep classes that are used as a parameter type of methods that are also marked as keep
 # to preserve changing those methods' signature.
--keep class com.android.inputmethod.latin.utils.LanguageModelParam
 -keep class com.android.inputmethod.latin.AssetFileAddress
--keep class com.android.inputmethod.latin.makedict.ProbabilityInfo
 -keep class com.android.inputmethod.latin.Dictionary
+-keep class com.android.inputmethod.latin.PrevWordsInfo
+-keep class com.android.inputmethod.latin.makedict.ProbabilityInfo
+-keep class com.android.inputmethod.latin.utils.LanguageModelParam
diff --git a/java/res/drawable-hdpi/emoji_category_tab_selected_lxx_dark.9.png b/java/res/drawable-hdpi/emoji_category_tab_selected_lxx_dark.9.png
deleted file mode 100644
index ca981f4..0000000
--- a/java/res/drawable-hdpi/emoji_category_tab_selected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/emoji_category_tab_unselected_lxx_dark.9.png b/java/res/drawable-hdpi/emoji_category_tab_unselected_lxx_dark.9.png
deleted file mode 100644
index 10b1dd2..0000000
--- a/java/res/drawable-hdpi/emoji_category_tab_unselected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/emoji_category_tab_selected_lxx_dark.9.png b/java/res/drawable-mdpi/emoji_category_tab_selected_lxx_dark.9.png
deleted file mode 100644
index a08735c..0000000
--- a/java/res/drawable-mdpi/emoji_category_tab_selected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/emoji_category_tab_unselected_lxx_dark.9.png b/java/res/drawable-mdpi/emoji_category_tab_unselected_lxx_dark.9.png
deleted file mode 100644
index 4cf8f5c..0000000
--- a/java/res/drawable-mdpi/emoji_category_tab_unselected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/emoji_category_tab_selected_lxx_dark.9.png b/java/res/drawable-xhdpi/emoji_category_tab_selected_lxx_dark.9.png
deleted file mode 100644
index 65a54b8..0000000
--- a/java/res/drawable-xhdpi/emoji_category_tab_selected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/emoji_category_tab_unselected_lxx_dark.9.png b/java/res/drawable-xhdpi/emoji_category_tab_unselected_lxx_dark.9.png
deleted file mode 100644
index 666b354..0000000
--- a/java/res/drawable-xhdpi/emoji_category_tab_unselected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/emoji_category_tab_selected_lxx_dark.9.png b/java/res/drawable-xxhdpi/emoji_category_tab_selected_lxx_dark.9.png
deleted file mode 100644
index 084554f..0000000
--- a/java/res/drawable-xxhdpi/emoji_category_tab_selected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/emoji_category_tab_unselected_lxx_dark.9.png b/java/res/drawable-xxhdpi/emoji_category_tab_unselected_lxx_dark.9.png
deleted file mode 100644
index 62547a9..0000000
--- a/java/res/drawable-xxhdpi/emoji_category_tab_unselected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/layout/emoji_palettes_view.xml b/java/res/layout/emoji_palettes_view.xml
index e2933f9..68fd372 100644
--- a/java/res/layout/emoji_palettes_view.xml
+++ b/java/res/layout/emoji_palettes_view.xml
@@ -41,9 +41,7 @@
                 android:id="@android:id/tabs"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                android:divider="@null"
-                android:tabStripEnabled="true"
-                style="?attr/emojiTabWidgetStyle" />
+                android:divider="@null" />
             <FrameLayout
                 android:id="@android:id/tabcontent"
                 android:layout_width="0dip"
@@ -77,8 +75,7 @@
     <com.android.inputmethod.keyboard.emoji.EmojiCategoryPageIndicatorView
         android:id="@+id/emoji_category_page_id_view"
         android:layout_width="match_parent"
-        android:layout_height="2dip"
-        style="?attr/emojiCategoryPageIndicatorViewStyle" />
+        android:layout_height="2dip" />
     <LinearLayout
         android:id="@+id/emoji_action_bar"
         android:orientation="horizontal"
diff --git a/java/res/layout/research_feedback_activity.xml b/java/res/layout/research_feedback_activity.xml
deleted file mode 100644
index a6b8b8a..0000000
--- a/java/res/layout/research_feedback_activity.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<com.android.inputmethod.research.FeedbackLayout
-     xmlns:android="http://schemas.android.com/apk/res/android"
-     android:layout_width="match_parent"
-     android:layout_height="wrap_content"
-     android:orientation="vertical"
-     android:id="@+id/research_feedback_layout"
->
-
-    <fragment
-          android:id="@+id/research_feedback_fragment"
-          android:name="com.android.inputmethod.research.FeedbackFragment"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-    />
-</com.android.inputmethod.research.FeedbackLayout>
diff --git a/java/res/layout/research_feedback_fragment_layout.xml b/java/res/layout/research_feedback_fragment_layout.xml
deleted file mode 100644
index fb5c278..0000000
--- a/java/res/layout/research_feedback_fragment_layout.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Adapted from frameworks/base/core/res/res/layout/alert_dialog_holo.xml.  We
-   want a dialog, but it must be its own activity so we can launch the soft
-   keyboard on it.  A regular dialog will not work since it would be launched from
-   the IME. -->
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android">
-    <LinearLayout
-         android:layout_width="match_parent"
-         android:layout_height="wrap_content"
-         android:layout_marginStart="8dip"
-         android:layout_marginEnd="8dip"
-         android:orientation="vertical">
-        <LinearLayout
-             android:layout_width="match_parent"
-             android:layout_height="wrap_content"
-             android:orientation="vertical">
-            <View android:layout_width="match_parent"
-                android:layout_height="2dip"
-                android:visibility="gone"
-                android:background="@android:color/holo_blue_light" />
-            <TextView
-                style="?android:attr/windowTitleStyle"
-                android:singleLine="true"
-                android:ellipsize="end"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:minHeight="64dip"
-                android:layout_marginLeft="16dip"
-                android:layout_marginRight="16dip"
-                android:gravity="center_vertical|left"
-                android:text="@string/research_feedback_dialog_title" />
-            <View
-                android:layout_width="match_parent"
-                android:layout_height="2dip"
-                android:background="@android:color/holo_blue_light" />
-        </LinearLayout>
-
-        <EditText
-            android:id="@+id/research_feedback_contents"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:layout_gravity="fill_horizontal|center_vertical"
-            android:layout_marginLeft="8dip"
-            android:layout_marginRight="8dip"
-            android:layout_marginBottom="8dip"
-            android:layout_marginTop="8dip"
-            android:minLines="2"
-            android:scrollbars="vertical"
-            android:hint="@string/research_feedback_hint"
-            android:inputType="textMultiLine|textCapSentences">
-            <requestFocus />
-        </EditText>
-        <CheckBox
-            android:id="@+id/research_feedback_include_account_name"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:layout_marginLeft="16dip"
-            android:layout_marginRight="16dip"
-            android:layout_marginBottom="8dip"
-            android:checked="false"
-            android:text="@string/research_feedback_include_account_name_label" />
-        <CheckBox
-            android:id="@+id/research_feedback_include_recording_checkbox"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:layout_marginLeft="16dip"
-            android:layout_marginRight="16dip"
-            android:layout_marginBottom="8dip"
-            android:checked="false"
-            android:text="@string/research_feedback_include_recording_label" />
-        <LinearLayout
-            style="?android:attr/buttonBarStyle"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:layoutDirection="locale"
-            android:measureWithLargestChild="true">
-            <Button
-                android:id="@+id/research_feedback_cancel_button"
-                android:layout_width="wrap_content"
-                android:layout_gravity="left"
-                android:layout_weight="1"
-                android:maxLines="2"
-                style="?android:attr/buttonBarButtonStyle"
-                android:textSize="14sp"
-                android:text="@string/research_feedback_cancel"
-                android:layout_height="wrap_content" />
-            <Button
-                android:id="@+id/research_feedback_send_button"
-                android:layout_width="wrap_content"
-                android:layout_gravity="right"
-                android:layout_weight="1"
-                android:maxLines="2"
-                style="?android:attr/buttonBarButtonStyle"
-                android:textSize="14sp"
-                android:text="@string/research_feedback_send"
-                android:layout_height="wrap_content" />
-        </LinearLayout>
-    </LinearLayout>
-</ScrollView>
diff --git a/java/res/layout/research_feedback_layout.xml b/java/res/layout/research_feedback_layout.xml
deleted file mode 100644
index bacd191..0000000
--- a/java/res/layout/research_feedback_layout.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout
-     xmlns:android="http://schemas.android.com/apk/res/android"
-     android:layout_width="fill_parent"
-     android:layout_height="fill_parent"
-     android:orientation="vertical"
->
-
-    <EditText
-        android:id="@+id/research_feedback_contents"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:layout_gravity="fill_horizontal|center_vertical"
-        android:layout_marginLeft="8dip"
-        android:layout_marginRight="8dip"
-        android:layout_marginBottom="8dip"
-        android:layout_marginTop="8dip"
-        android:lines="2"
-        android:hint="@string/research_feedback_hint"
-        android:inputType="textMultiLine"
-        android:imeOptions="flagNoFullscreen"
-        android:focusable="true"
-    >
-        <requestFocus />
-    </EditText>
-
-    <CheckBox
-        android:id="@+id/research_feedback_include_history"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:layout_marginBottom="8dip"
-        android:checked="true"
-        android:text="@string/research_feedback_include_history_label"
-    />
-</LinearLayout>
diff --git a/java/res/values-af/strings-action-keys.xml b/java/res/values-af/strings-action-keys.xml
index c5cd71a..bef175b 100644
--- a/java/res/values-af/strings-action-keys.xml
+++ b/java/res/values-af/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Vorige"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Klaar"</string>
     <string name="label_send_key" msgid="482252074224462163">"Stuur"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Laat wag"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Wag"</string>
 </resources>
diff --git a/java/res/values-af/strings-talkback-descriptions.xml b/java/res/values-af/strings-talkback-descriptions.xml
index 439b391..aee891b 100644
--- a/java/res/values-af/strings-talkback-descriptions.xml
+++ b/java/res/values-af/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Plekke"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simbole"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emosiekone"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index ce7cb18..187aa4b 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Invoeropsies"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Navorsing-loglêerbevele"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Soek kontakname op"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Speltoetser gebruik inskrywings uit jou kontaklys"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibreer met sleuteldruk"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Invoertale"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Raak weer om te stoor"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Woordeboek beskikbaar"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Aktiveer gebruikerterugvoer"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Help om hierdie invoermetode-redigeerder te verbeter deur gebruikstatistiek en omvalverslae outomaties te stuur"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Sleutelbordtema"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Engels (VK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Engels (VS)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Aktiveer"</string>
     <string name="not_now" msgid="6172462888202790482">"Nie nou nie"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Dieselfde invoerstyl bestaan ​​reeds: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Bruikbaarheidstudie-modus"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Vertraging van sleutellangdruk"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Sleuteldruk se vibrasie-tydsduur"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Sleuteldruk se klankvolume"</string>
diff --git a/java/res/values-am/strings-action-keys.xml b/java/res/values-am/strings-action-keys.xml
index 1813a86..26e4513 100644
--- a/java/res/values-am/strings-action-keys.xml
+++ b/java/res/values-am/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"ቀዳሚ"</string>
     <string name="label_done_key" msgid="7564866296502630852">"ተደርጓል"</string>
     <string name="label_send_key" msgid="482252074224462163">"ላክ"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"ቆም በል"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"ጠብቅ"</string>
 </resources>
diff --git a/java/res/values-am/strings-talkback-descriptions.xml b/java/res/values-am/strings-talkback-descriptions.xml
index 79c4d08..aab1587 100644
--- a/java/res/values-am/strings-talkback-descriptions.xml
+++ b/java/res/values-am/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ቦታዎች"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"ምልክቶች"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"ስሜት ገላጭ አዶዎች"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index 32eed41..651c642 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"ግቤት አማራጮች"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"የጥናት የምዝግብ ማስታወሻ ትዕዛዞች"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"የእውቅያ ስሞችን ተመልከት"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"ፊደል አራሚ ከእውቅያ ዝርዝርህ የገቡትን ይጠቀማል"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"በቁልፍመጫንጊዜ አንዝር"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"ቋንቋዎች አግቤት"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"ለማስቀመጥ እንደገና ንካ"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"መዝገበ ቃላት አለ"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"የተጠቃሚ ግብረ ምላሽ አንቃ"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"አጠቃቀም ስታስቲክስ እና የብልሽት ሪፖርቶችን በራስ-ሰር በመላክ ይህን ግቤት ስልት አርታዒ እንዲሻሻል ያግዙ።"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"የቁልፍ ሰሌዳ ገጽታ"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"እንግሊዘኛ (የታላቋ ብሪታንያ)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"እንግሊዘኛ (ዩ.ኤስ)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"አንቃ"</string>
     <string name="not_now" msgid="6172462888202790482">"አሁን አልፈልግም"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"ተመሳሳዩ የግብዓት ቅጥ አስቀድሞ አለ፦ <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"የተገልጋይነት ጥናት ሁነታ"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"የሰሌዳ ቁልፍ ጠቅታ በመጫን መዘግየት"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"የቁልፍ ጭነት ንዝረት ርዝመት"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"የቁልፍ ጭነት ድምጽ መጠን"</string>
diff --git a/java/res/values-ar/strings-action-keys.xml b/java/res/values-ar/strings-action-keys.xml
index 481b22f..1ee4f7a 100644
--- a/java/res/values-ar/strings-action-keys.xml
+++ b/java/res/values-ar/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"سابق"</string>
     <string name="label_done_key" msgid="7564866296502630852">"تم"</string>
     <string name="label_send_key" msgid="482252074224462163">"إرسال"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"توقف"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"انتظر"</string>
 </resources>
diff --git a/java/res/values-ar/strings-talkback-descriptions.xml b/java/res/values-ar/strings-talkback-descriptions.xml
index a9110a7..1e5ec44 100644
--- a/java/res/values-ar/strings-talkback-descriptions.xml
+++ b/java/res/values-ar/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"أماكن"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"رموز"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"رموز تعبيرية"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index 13aef2a..a907ba8 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"خيارات الإرسال"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"أوامر سجلات البحث"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"بحث في أسماء جهات الاتصال"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"يستخدم المدقق الإملائي إدخالات من قائمة جهات الاتصال"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"اهتزاز عند ضغط مفتاح"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"لغات الإدخال"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"المس مرة أخرى للحفظ"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"القاموس متاح"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"تمكين ملاحظات المستخدم"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"المساعدة في تحسين محرر أسلوب الإدخال هذا من خلال إرسال إحصاءات الاستخدام وتقارير الأعطال تلقائيًا"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"مظهر لوحة المفاتيح"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"الإنجليزية (المملكة المتحدة)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"الإنجليزية (الولايات المتحدة)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"تمكين"</string>
     <string name="not_now" msgid="6172462888202790482">"ليس الآن"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"نمط الإدخال ذاته موجود من قبل: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"وضع سهولة الاستخدام"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"تأخير الضغط الطويل للمفاتيح"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"مدة اهتزاز الضغط على المفاتيح"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"مستوى صوت الضغط على المفاتيح"</string>
diff --git a/java/res/values-az-rAZ/strings-action-keys.xml b/java/res/values-az-rAZ/strings-action-keys.xml
index 513712c..7f982d6 100644
--- a/java/res/values-az-rAZ/strings-action-keys.xml
+++ b/java/res/values-az-rAZ/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Öncəki"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Hazırdır"</string>
     <string name="label_send_key" msgid="482252074224462163">"Göndər"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pauza"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Gözlə"</string>
 </resources>
diff --git a/java/res/values-az-rAZ/strings-emoji-descriptions.xml b/java/res/values-az-rAZ/strings-emoji-descriptions.xml
index 60e9de9..a9bfb77 100644
--- a/java/res/values-az-rAZ/strings-emoji-descriptions.xml
+++ b/java/res/values-az-rAZ/strings-emoji-descriptions.xml
@@ -25,7 +25,7 @@
     <string name="spoken_emoji_203C" msgid="153340916701508663">"İki nida işarəsi"</string>
     <string name="spoken_emoji_2049" msgid="4877256448299555371">"Suallı nida işarəsi"</string>
     <string name="spoken_emoji_2122" msgid="9188440722954720429">"Ticarət nişanı"</string>
-    <string name="spoken_emoji_2139" msgid="9114342638917304327">"Informasiya mənbəyi"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"İnformasiya mənbəyi"</string>
     <string name="spoken_emoji_2194" msgid="8055202727034946680">"Sola-sağa ox"</string>
     <string name="spoken_emoji_2195" msgid="8028122253301087407">"Yuxarı-aşağı ox"</string>
     <string name="spoken_emoji_2196" msgid="4019164898967854363">"Şimal-qərb ox"</string>
@@ -55,7 +55,7 @@
     <string name="spoken_emoji_2601" msgid="6205136889311537150">"Bulud"</string>
     <string name="spoken_emoji_260E" msgid="8670395193046424238">"Qara telefon"</string>
     <string name="spoken_emoji_2611" msgid="4530550203347054611">"Qeydli səsvermə qutusu"</string>
-    <string name="spoken_emoji_2614" msgid="1612791247861229500">"Damcılı çətir"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"Yağışlı çətir"</string>
     <string name="spoken_emoji_2615" msgid="3320562382424018588">"İsti içki"</string>
     <string name="spoken_emoji_261D" msgid="4690554173549768467">"Yuxarı göstərən barmaq"</string>
     <string name="spoken_emoji_263A" msgid="3170094381521989300">"Ağ gülümsəyən sima"</string>
@@ -63,7 +63,7 @@
     <string name="spoken_emoji_2649" msgid="7694461245947059086">"Buğa"</string>
     <string name="spoken_emoji_264A" msgid="1258074605878705030">"Əkizlər"</string>
     <string name="spoken_emoji_264B" msgid="4409219914377810956">"Xərçəng"</string>
-    <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leo"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"Şir"</string>
     <string name="spoken_emoji_264D" msgid="1504758945499854018">"Qız"</string>
     <string name="spoken_emoji_264E" msgid="2354847104530633519">"Tərəzi"</string>
     <string name="spoken_emoji_264F" msgid="5822933280406416112">"Əqrəb"</string>
@@ -74,12 +74,12 @@
     <string name="spoken_emoji_2660" msgid="4541170554542412536">"Qara nizə"</string>
     <string name="spoken_emoji_2663" msgid="3669352721942285724">"Qara xaç"</string>
     <string name="spoken_emoji_2665" msgid="6347941599683765843">"Qara ürək"</string>
-    <string name="spoken_emoji_2666" msgid="8296769213401115999">"Qara qaval"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"Qara romb"</string>
     <string name="spoken_emoji_2668" msgid="7063148281053820386">"İsti bulaqlar"</string>
     <string name="spoken_emoji_267B" msgid="21716857176812762">"Qara universal təkrar istifadə simvolu"</string>
     <string name="spoken_emoji_267F" msgid="8833496533226475443">"Təkərli kreslo"</string>
     <string name="spoken_emoji_2693" msgid="7443148847598433088">"Lövbər"</string>
-    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Xəbərdarlıq"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Xəbərdarlıq işarəsi"</string>
     <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Yüksək voltaj simvolu"</string>
     <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Orta ağ çevrə"</string>
     <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Orta qara çevrə"</string>
@@ -91,12 +91,12 @@
     <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Giriş qadağası"</string>
     <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Kilsə"</string>
     <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Fəvvarə"</string>
-    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Bayraqda deşik"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Deşikdə bayraq"</string>
     <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Yeklənli qayıq"</string>
     <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Çadır"</string>
     <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Yanacaq nasosu"</string>
     <string name="spoken_emoji_2702" msgid="4005741160717451912">"Qara qayçı"</string>
-    <string name="spoken_emoji_2705" msgid="164605766946697759">"Ağ ağır qeyd nişanı"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"Ağ qalın qeyd nişanı"</string>
     <string name="spoken_emoji_2708" msgid="7153840886849268988">"Təyyarə"</string>
     <string name="spoken_emoji_2709" msgid="2217319160724311369">"Zərf"</string>
     <string name="spoken_emoji_270A" msgid="508347232762319473">"Qaldırılmış yumruq"</string>
@@ -104,8 +104,8 @@
     <string name="spoken_emoji_270C" msgid="1344288035704944581">"Qələbə əli"</string>
     <string name="spoken_emoji_270F" msgid="6108251586067318718">"Karandaş"</string>
     <string name="spoken_emoji_2712" msgid="6320544535087710482">"Qara pero"</string>
-    <string name="spoken_emoji_2714" msgid="1968242800064001654">"Ağır qeyd nişanı"</string>
-    <string name="spoken_emoji_2716" msgid="511941294762977228">"Ağır vurma x"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"Qalın qeyd nişanı"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"Qalın x vurma işarəsi"</string>
     <string name="spoken_emoji_2728" msgid="5650330815808691881">"Qığılcımlar"</string>
     <string name="spoken_emoji_2733" msgid="8915809595141157327">"Səkkiz guşəli ulduz"</string>
     <string name="spoken_emoji_2734" msgid="4846583547980754332">"Səkkiz guşəli qara ulduz"</string>
@@ -116,23 +116,23 @@
     <string name="spoken_emoji_2753" msgid="6935897159942119808">"Qara sual işarəsi ornamenti"</string>
     <string name="spoken_emoji_2754" msgid="7277504915105532954">"Ağ sual işarəsi ornamenti"</string>
     <string name="spoken_emoji_2755" msgid="6853076969826960210">"Ağ nida işarəsi ornamenti"</string>
-    <string name="spoken_emoji_2757" msgid="3707907828776912174">"Ağır nida işarəsi"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"Qalın nida işarəsi"</string>
     <string name="spoken_emoji_2764" msgid="4214257843609432167">"Yüklü qara ürək"</string>
-    <string name="spoken_emoji_2795" msgid="6563954833786162168">"Ağır toplama işarəsi"</string>
-    <string name="spoken_emoji_2796" msgid="5990926508250772777">"Ağır çıxma işarəsi"</string>
-    <string name="spoken_emoji_2797" msgid="24694184172879174">"Ağır bölmə işarəsi"</string>
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"Qalın toplama işarəsi"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"Qalın çıxma işarəsi"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"Qalın bölmə işarəsi"</string>
     <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Qara sağa ox"</string>
-    <string name="spoken_emoji_27B0" msgid="203395646864662198">"Buruq petlə"</string>
-    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"İkiqat buruq petlə"</string>
-    <string name="spoken_emoji_2934" msgid="9062130477982973457">"Yuxarı əyilən sağa ox"</string>
-    <string name="spoken_emoji_2935" msgid="6198710960720232074">"Aşağı əyilən sağa ox"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"Burulmuş halqa"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"İki dəfə burulmuş halqa"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"Yuxarı sağa əyilən ox"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"Aşağı sağa əyilən ox"</string>
     <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Qara sola ox"</string>
     <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Qara yuxarı ox"</string>
     <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Qara aşağı ox"</string>
     <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Qara böyük kvadrat"</string>
     <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Ağ böyük kvadrat"</string>
     <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Ağ orta ulduz"</string>
-    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Ağır böyük çevrə"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Böyük qalın çevrə"</string>
     <string name="spoken_emoji_3030" msgid="4609172241893565639">"Dalğalı tire"</string>
     <string name="spoken_emoji_303D" msgid="2545833934975907505">"Qismən dəyişmə işarəsi"</string>
     <string name="spoken_emoji_3297" msgid="928912923628973800">"Çevrəli təbrik ideoqramı"</string>
@@ -163,18 +163,18 @@
     <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Kvadrat qəbul ideoqramı"</string>
     <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Kvadrat tam məşğulluq ideoqramı"</string>
     <string name="spoken_emoji_1F236" msgid="879755752069393034">"Kvadrat ödənilmiş ideoqramı"</string>
-    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Aylıq kvadrat ideoqraf"</string>
-    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Kvadrat tətbiq ideoqrafı"</string>
-    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Kvadrat endirim ideoqrafı"</string>
-    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Kvadrat biznes ideoqrafı"</string>
-    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Çevrəli üstünlük ideoqrafı"</string>
-    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Çevrəli qəbul ideoqrafı"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Aylıq kvadrat ideoqram"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Kvadrat tətbiq ideoqramı"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Kvadrat endirim ideoqramı"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Kvadrat biznes ideoqramı"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Çevrəli üstünlük ideoqramı"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Çevrəli qəbul ideoqramı"</string>
     <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Siklon"</string>
     <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Dumanlı"</string>
     <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Bağlı çətir"</string>
     <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Ulduzlu gecə"</string>
     <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Dağların arxasından doğan günəş"</string>
-    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Sunrise"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Günəşin doğuşu"</string>
     <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Toranlıqda şəhər peyzajı"</string>
     <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Binaların arxasında günün batması"</string>
     <string name="spoken_emoji_1F308" msgid="688704703985173377">"Göy qurşağı"</string>
@@ -213,14 +213,14 @@
     <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Qızılgül"</string>
     <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Əməköməci"</string>
     <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Günəbaxan"</string>
-    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Blossom"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Çiçək"</string>
     <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Qarğıdalı qıçası"</string>
     <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Düyü qıçası"</string>
     <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Ot"</string>
     <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Dörd yarpaqlı yonca"</string>
     <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Ağcaqayın yarpağı"</string>
     <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Düşmüş yarpaq"</string>
-    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Küləyin apardığı yarpaq"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Xəzan yarpağı"</string>
     <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Göbələk"</string>
     <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Pomidor"</string>
     <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Badımcan"</string>
@@ -245,11 +245,11 @@
     <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Düyü küftəsi"</string>
     <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Bişmiş düyü"</string>
     <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Karri və düyü"</string>
-    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Buxarlı fincan"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Buxarlanan kasa"</string>
     <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Spagetti"</string>
     <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Çörək"</string>
     <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Fransızsayağı kartof"</string>
-    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Qovulmuş şirin kartof"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Qovrulmuş şirin kartof"</string>
     <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Danqo"</string>
     <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
     <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Suşi"</string>
@@ -267,7 +267,7 @@
     <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Bal dibçəyi"</string>
     <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Dənəvər peçenye"</string>
     <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Bento qutusu"</string>
-    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Qida dibçəyi"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Qazan"</string>
     <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Yeməkbişirmə"</string>
     <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Çəngəl-bıçaq"</string>
     <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Qulpsuz fincan"</string>
@@ -282,8 +282,8 @@
     <string name="spoken_emoji_1F381" msgid="614180683680675444">"Bükülmüş hədiyyə"</string>
     <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Doğum günü tortu"</string>
     <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Jack fənəri"</string>
-    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Midal yolkası"</string>
-    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Noel ata"</string>
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Milad yolkası"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Şaxta Baba"</string>
     <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Fişəng"</string>
     <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Benqal odu fişəngi"</string>
     <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Şar"</string>
@@ -291,14 +291,14 @@
     <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Konfetti topu"</string>
     <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Tanabata ağacı"</string>
     <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Çarpaz bayraqlar"</string>
-    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Küknar dekorasiya"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Küknar dekorasiyası"</string>
     <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Yapon kuklaları"</string>
     <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Karp strimer"</string>
     <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Külək uğultusu"</string>
     <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Aya tamaşa mərasimi"</string>
     <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Məktəb çantası"</string>
     <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Akademik papaq"</string>
-    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Karusel atı"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Karusel at"</string>
     <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Mənzərə çarxı"</string>
     <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Dalğalı yelləncək"</string>
     <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Qırmaq və balıq"</string>
@@ -307,7 +307,7 @@
     <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Kino"</string>
     <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Qulaqlıq"</string>
     <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Rəssam palitrası"</string>
-    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Papaq"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Sehrbaz papağı"</string>
     <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Sirk çadırı"</string>
     <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Bilet"</string>
     <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Çəkiliş lövhəsi"</string>
@@ -316,8 +316,8 @@
     <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Birbaşa zərbə"</string>
     <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Oyun avtomatı"</string>
     <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Bilyard"</string>
-    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Oyun ölüm"</string>
-    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Bowling"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Zər oyunu"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Boulinq"</string>
     <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Güllü oyun kartları"</string>
     <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Musiqili qeyd"</string>
     <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Çoxsaylı musiqili qeyd"</string>
@@ -327,15 +327,15 @@
     <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Truba"</string>
     <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Skripka"</string>
     <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Musiqi qiyməti"</string>
-    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Qaçan qurşaqlı köynək"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Kəmərli qaçış köynəyi"</string>
     <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Tennis raketi və topu"</string>
-    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Ski və ski çəkməsi"</string>
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Xizək və xizək çəkməsi"</string>
     <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Basketbol və çənbər"</string>
     <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Dama-dama bayraq"</string>
     <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Snoubordçu"</string>
-    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Qaçağan"</string>
-    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Sörfer"</string>
-    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Qənimət"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Qaçışçı"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Sörfçü"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Kubok"</string>
     <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"At yarışması"</string>
     <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Amerikan futbolu"</string>
     <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Reqbi Futbolu"</string>
@@ -353,14 +353,14 @@
     <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Qarışıq mallar dükanı"</string>
     <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Məktəb"</string>
     <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Univermaq"</string>
-    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Fabrika"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Zavod"</string>
     <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Izakaya fənəri"</string>
-    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Yapon qəsri"</string>
-    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Avropa qəsri"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Yapon qalası"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Avropa qalası"</string>
     <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Siçovul"</string>
     <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Siçan"</string>
     <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Öküz"</string>
-    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Buyvol"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Su camışı"</string>
     <string name="spoken_emoji_1F404" msgid="5240777285676662335">"İnək"</string>
     <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Leopard"</string>
     <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Dovşan"</string>
@@ -369,7 +369,7 @@
     <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Timsah"</string>
     <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Balina"</string>
     <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"İlbiz"</string>
-    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Ilan"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"İlan"</string>
     <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"At"</string>
     <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Qoç"</string>
     <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Keçi"</string>
@@ -382,7 +382,7 @@
     <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Qaban"</string>
     <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Fil"</string>
     <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Osminoq"</string>
-    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Spiral qabıq"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"İlbiz qabığı"</string>
     <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Böcək"</string>
     <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Qarışqa"</string>
     <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Bal arısı"</string>
@@ -393,8 +393,8 @@
     <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Tısbağa"</string>
     <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Yumurtadan çıxan cücə"</string>
     <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Balaca cücə"</string>
-    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Balaca cücə üz tərəfdən"</string>
-    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Bird"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Önə baxan balaca cücə"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Quş"</string>
     <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Pinqvin"</string>
     <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Koala"</string>
     <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Pudel"</string>
@@ -407,7 +407,7 @@
     <string name="spoken_emoji_1F430" msgid="525492897063150160">"Dovşan sifəti"</string>
     <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Pişik sifəti"</string>
     <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Əjdaha sifəti"</string>
-    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Fontanlı balina"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Fontan vuran balina"</string>
     <string name="spoken_emoji_1F434" msgid="3619943222159943226">"At sifəti"</string>
     <string name="spoken_emoji_1F435" msgid="59199202683252958">"Meymun sifəti"</string>
     <string name="spoken_emoji_1F436" msgid="340544719369009828">"İt sifəti"</string>
@@ -424,12 +424,12 @@
     <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Burun"</string>
     <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Ağız"</string>
     <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Dil"</string>
-    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Ağ yuxarı göstərən bekhend indeks"</string>
-    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Ağ aşağı göstərən bekhend indeks"</string>
-    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Ağ sola göstərən bekhend indeks"</string>
-    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Ağ sağa göstərən bekhend indeks"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Yuxarı işarə edən ağ rəngli əl indeksi"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Aşağı işarə edən ağ rəngli əl indeksi"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Sola işarə edən ağ rəngli əl indeksi"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Sağa işarə edən ağ rəngli əl indeksi"</string>
     <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Yumruq işarəsi"</string>
-    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Yellənən ən işarəsi"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Yellənən əl işarəsi"</string>
     <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Ok əl işarəsi"</string>
     <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Yuxarı baş barmaq işarəsi"</string>
     <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Aşağı baş barmaq işarəsi"</string>
@@ -439,14 +439,14 @@
     <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Qadın papağı"</string>
     <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Eynək"</string>
     <string name="spoken_emoji_1F454" msgid="348469036193323252">"Qalstuk"</string>
-    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"T-shirt"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Qısaqol köynək"</string>
     <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Cins"</string>
     <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Don"</string>
     <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Kimono"</string>
     <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Bikini"</string>
     <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Qadın geyimi"</string>
     <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Pulqabı"</string>
-    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Sumka"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Çanta"</string>
     <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Kisə"</string>
     <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Kişi ayaqqabısı"</string>
     <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"İdmançı ayaqqabısı"</string>
@@ -460,13 +460,13 @@
     <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Qız"</string>
     <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Kişi"</string>
     <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Qadın"</string>
-    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Ailəvi"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Ailə"</string>
     <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Qadın və kişi əl-ələ tutur"</string>
     <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"İki kişi əl-ələ tutur"</string>
     <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"İki qadın əl-ələ tutur"</string>
     <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Polis içşisi"</string>
     <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Dövşanqulaq qadın"</string>
-    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Örtüklü gəlin"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Duvaqlı gəlin"</string>
     <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Sarı saçlı adam"</string>
     <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Qua pi maolu kişi"</string>
     <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Çalmalı kişi"</string>
@@ -480,29 +480,29 @@
     <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Ruh"</string>
     <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Uşaq mələk"</string>
     <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Yad planetli"</string>
-    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Yad planetli monster"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Yad planetli qulyabani"</string>
     <string name="spoken_emoji_1F47F" msgid="441605977269926252">"İmp"</string>
     <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Kəllə"</string>
     <string name="spoken_emoji_1F481" msgid="320408708521966893">"Qəbul bölməsi adamı"</string>
     <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Keşikçi"</string>
     <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Rəqqas"</string>
-    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Pomada"</string>
-    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Lak"</string>
-    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Üz massajı"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Dodaq boyası"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Dırnaq boyası"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Üz masajı"</string>
     <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Saç düzümü"</string>
     <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Bərbərxana"</string>
     <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Şpris"</string>
     <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Həb"</string>
-    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Öpüş"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Öpüş izi"</string>
     <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Sevgi məktubu"</string>
-    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Səs"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Zəng"</string>
     <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Qiymətli daş"</string>
-    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Öp"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Öpüş"</string>
     <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Buket"</string>
     <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Ürəkli cütlük"</string>
     <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Toy"</string>
     <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Ürək döyüntüsü"</string>
-    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Qırılmış ürək"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Sınmış qəlb"</string>
     <string name="spoken_emoji_1F495" msgid="9206202744967130919">"İki ürək"</string>
     <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Parlaq ürək"</string>
     <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Böyüyən ürək"</string>
@@ -520,7 +520,7 @@
     <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Bomba"</string>
     <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Yuxu işarəsi"</string>
     <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Partlayış"</string>
-    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Sıçrayan damcı işarəsi"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Tər işarəsi"</string>
     <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Damcı"</string>
     <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Tire simvolu"</string>
     <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Kakaşka"</string>
@@ -534,13 +534,13 @@
     <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Valyuta mübadiləsi"</string>
     <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Ağır dollar işarəsi"</string>
     <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Kredit kartı"</string>
-    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Yen işarəsi əskinaz"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Yen işarəli əskinaz"</string>
     <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Dollar nişanlı əskinaz"</string>
     <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Avro işarəli əskinaz"</string>
     <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Funt işarəli əskinaz"</string>
     <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Qanadlı pul"</string>
     <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Qalxan diaqram və yen işarəsi"</string>
-    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Oturac"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Oturacaq"</string>
     <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Şəxsi kompüter"</string>
     <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Portfel"</string>
     <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Mini disk"</string>
@@ -549,17 +549,17 @@
     <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
     <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Fayl qovluğu"</string>
     <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Açıq fayl qovluğu"</string>
-    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Əyilmiş səhifə"</string>
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Qatlanmış səhifə"</string>
     <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Səhifə"</string>
     <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Təqvim"</string>
-    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Cırılan təqvim"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Qoparılan təqvim"</string>
     <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Kart indeksi"</string>
     <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Qalxan diaqram"</string>
     <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Düşən diaqram"</string>
     <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Panel diaqramı"</string>
     <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Pano"</string>
-    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Kanselyar düyməsi"</string>
-    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Yumru kanselyar düyməsi"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Basmadüymə"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Yumru basmadüymə"</string>
     <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Skrepka"</string>
     <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Düz xətkeş"</string>
     <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Üçbücaq xətkeş"</string>
@@ -578,12 +578,12 @@
     <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Memo"</string>
     <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Telefon qəbuledici"</string>
     <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Peycer"</string>
-    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Fak cihazı"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Faks cihazı"</string>
     <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Peyk antennası"</string>
-    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"İctimai meqafon"</string>
-    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Sevincli meqafon"</string>
-    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Gedən sənəd siyirtməsi"</string>
-    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Gələn sənəd siyirtməsi"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Dinamik səsyüksəldici"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Səsyüksəldici"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Göndəriləcək sənəd siyirməsi"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Gələn sənəd siyirməsi"</string>
     <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Paket"</string>
     <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"E-poçt simvolu"</string>
     <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Gələn zərf"</string>
@@ -600,23 +600,23 @@
     <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Vibrasiya rejimi"</string>
     <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Sönmüş mobil telefon"</string>
     <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Mobil telefon qadağası"</string>
-    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Çubuqlu antenna"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Şəbəkə dalğası"</string>
     <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Kamera"</string>
     <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Videokamera"</string>
     <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Televiziya"</string>
     <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Radio"</string>
     <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Videokasset"</string>
-    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Əyilmiş sağa oxlar"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Sağa əyilmiş oxlar"</string>
     <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Saat əqrəbi istiqamətində sağa və sola açıq çevrəli oxlar"</string>
     <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Çevrəyə alınmış saat əqrəbi istiqamətində sağa və sola açıq çevrəli oxlar"</string>
     <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Saat əqrəbi istiqamətində aşağı və yuxarı açıq çevrəli oxlar"</string>
     <string name="spoken_emoji_1F504" msgid="708290317843535943">"Saat əqrəbi istiqaməti əksinə aşağı və yuxarı açıq çevrəli oxlar"</string>
     <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Alçaq parlaqlıq simvolu"</string>
     <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Yüksək parlaqlıq simvolu"</string>
-    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Ləğv edilmə xəttli dinamik"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Ləğv edilmə xətli dinamik"</string>
     <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Dinamik"</string>
-    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Bir səs xəttli dinamik"</string>
-    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Üç səs xəttli dinamik"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Bir xətli dinamik"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Üç xətli dinamik"</string>
     <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Batareya"</string>
     <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Elektrik ştepseli"</string>
     <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Sola əyilmiş lupa"</string>
@@ -624,18 +624,18 @@
     <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Dolma qələmli kilid"</string>
     <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Açarlı bağlı kilid"</string>
     <string name="spoken_emoji_1F511" msgid="262319867774655688">"Açar"</string>
-    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Kilidlə"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Kilid"</string>
     <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Açıq kilid"</string>
     <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Zəng"</string>
     <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Ləğv edilmiş zəng"</string>
     <string name="spoken_emoji_1F516" msgid="108097933937925381">"Əlfəcin"</string>
     <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Link simvolu"</string>
     <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Radio düyməsi"</string>
-    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Back with leftwards arrow above"</string>
-    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"End with leftwards arrow above"</string>
-    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"On with exclamation mark with left right arrow above"</string>
-    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Tezliklə üzərində sağa oxlarla"</string>
-    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Yuxarıda üzərində yuxarıya oxlarla"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Üzərində sola ox olan back simvolu"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"Üzərində sola ox olan end simvolu"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"Üzərində sola sağa ox olan nida işarəli on simvolu"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Üzərində sağa ox olan soon simvolu"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Üzərində yuxarı ox olan top simvolu"</string>
     <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"On səkkiz yaşdan aşağı qadağası"</string>
     <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Klaviş qapağı on"</string>
     <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Böyük latın hərfləri üçün daxiletmə simvolu"</string>
@@ -704,7 +704,7 @@
     <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Açıq ağızlı, gülən gözlərlə gülümsəyən sima"</string>
     <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Açıq ağızlı, soyuq tərli gülümsəyən sima"</string>
     <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Açıq ağızlı, qapalı gözlü gülümsəyən sima"</string>
-    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Nimbalı gülümsyən sima"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Nimbalı gülümsəyən sima"</string>
     <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Buynuzlu gülümsəyən sima"</string>
     <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Göz vuran sima"</string>
     <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Gülən gözlərlə gülümsəyən sima"</string>
@@ -714,7 +714,7 @@
     <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Gün eynəkli gülümsəyən sima"</string>
     <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Oğruncasına gülümsəyən sima"</string>
     <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Neytral sima"</string>
-    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Ifadəsiz sima"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"İfadəsiz sima"</string>
     <string name="spoken_emoji_1F612" msgid="985081329745137998">"Bezmiş sima"</string>
     <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Soyuq tərli sima"</string>
     <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Fikirli sima"</string>
@@ -724,9 +724,9 @@
     <string name="spoken_emoji_1F618" msgid="408207170572303753">"Öpüş atan sima"</string>
     <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Gülən gözlərlə öpən sima"</string>
     <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Bağlı gözlərlə öpən sima"</string>
-    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Dil çıxardan sima"</string>
-    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Dil çıxardan və göz vuran sima"</string>
-    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Qapalı gözlərlə dil çıxardan sima"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Dil çıxaran sima"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Dil çıxaran və göz vuran sima"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Qapalı gözlərlə dil çıxaran sima"</string>
     <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Məyus sima"</string>
     <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Narahat sima"</string>
     <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Hirsli sima"</string>
@@ -741,7 +741,7 @@
     <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Bezmiş sima"</string>
     <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Yuxulu sima"</string>
     <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Yorğun sima"</string>
-    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Qrimaslı sima"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Qırışdırılmış sima"</string>
     <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Hönkür-hönkür ağlayan sima"</string>
     <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Açıq ağızlı sima"</string>
     <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Susmağa məcbur sima"</string>
@@ -811,10 +811,10 @@
     <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Avarlı qayıq"</string>
     <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Sürətli qayıq"</string>
     <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Horizontal svetofor"</string>
-    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Vertikal svetofor"</string>
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Vertikal işıqfor"</string>
     <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Tikinti nişanı"</string>
     <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Yanar mayaklı polis maşınları"</string>
-    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Postda üçbucaq bayraq"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Poçtda üçbucaq bayraq"</string>
     <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Qapı"</string>
     <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Giriş qadağası siqnalı"</string>
     <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Siqaret çəkmək simvolu"</string>
diff --git a/java/res/values-az-rAZ/strings-talkback-descriptions.xml b/java/res/values-az-rAZ/strings-talkback-descriptions.xml
index 0ff31f3..3a0596e 100644
--- a/java/res/values-az-rAZ/strings-talkback-descriptions.xml
+++ b/java/res/values-az-rAZ/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Yerlər"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simvollar"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikonlar"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-az-rAZ/strings.xml b/java/res/values-az-rAZ/strings.xml
index 5a40e9f..f1f3e22 100644
--- a/java/res/values-az-rAZ/strings.xml
+++ b/java/res/values-az-rAZ/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Daxiletmə seçimləri"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Araşdırma Jurnalı Əmrləri"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kontakt adlarına baxın"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Orfoqrafik yoxlanış kontakt siyahınızdakı qeydlərdən istifadə edir"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrasiyalı klikləmə"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Daxiletmə dilləri"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Yadda saxlamaq üçün yenidən toxunun"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Lüğət mövcuddur"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"İstifadəçi əks əlaqəsini aktiv et"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"İstifadə statistikası və xəta haqqında hesabatları avtomatik göndərməklə daxiletmə metodu redaktəsini təkmilləşdirməyə kömək edin."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Klaviatura teması"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"İngilis (BK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"İngilis (ABŞ)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Aktiv et"</string>
     <string name="not_now" msgid="6172462888202790482">"İndi yox"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Eyni daxiletmə üslubu artıq mövcuddur: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Rahat işləmə rejimi"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Klavişi uzun müddət basmada gecikmə"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrasiyalı klikləmə müddəti"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Səsli klikləmə səsi"</string>
diff --git a/java/res/values-bg/strings-action-keys.xml b/java/res/values-bg/strings-action-keys.xml
index 13374a2..3d295bb 100644
--- a/java/res/values-bg/strings-action-keys.xml
+++ b/java/res/values-bg/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Назад"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Готово"</string>
     <string name="label_send_key" msgid="482252074224462163">"Изпр."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Пауза"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Изчакв."</string>
 </resources>
diff --git a/java/res/values-bg/strings-talkback-descriptions.xml b/java/res/values-bg/strings-talkback-descriptions.xml
index 6997424..3f0ac83 100644
--- a/java/res/values-bg/strings-talkback-descriptions.xml
+++ b/java/res/values-bg/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Места"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Символи"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Емотикони"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 562e71b..c18b108 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Опции за въвеждане"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Команди за рег. файл за проучвания"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Търсене на имена"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"За проверка на правописа се ползват записи от списъка с контакти"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Да вибрира при натискане на клавиш"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Езици за въвеждане"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Докоснете отново, за да запазите"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Има достъп до речник"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Активиране на отзивите от потребителите"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Помогнете за подобряването на този редактор за въвеждане чрез автоматично изпращане на статистически данни за употребата и сигнали за сривове"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Тема на клавиатурата"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"английски (Великобритания)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"английски (САЩ)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Активиране"</string>
     <string name="not_now" msgid="6172462888202790482">"Не сега"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Същият стил на въвеждане вече съществува: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим за изучаване на използваемостта"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Забавяне при продълж. натискане"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Продълж. на вибриране при натискане"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Сила на звука при натиск. на клавиш"</string>
diff --git a/java/res/values-ca/strings-action-keys.xml b/java/res/values-ca/strings-action-keys.xml
index 9dcf219..5dcf4a3 100644
--- a/java/res/values-ca/strings-action-keys.xml
+++ b/java/res/values-ca/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Fet"</string>
     <string name="label_send_key" msgid="482252074224462163">"Envia"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Atura"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
 </resources>
diff --git a/java/res/values-ca/strings-talkback-descriptions.xml b/java/res/values-ca/strings-talkback-descriptions.xml
index bd6077a..4097d93 100644
--- a/java/res/values-ca/strings-talkback-descriptions.xml
+++ b/java/res/values-ca/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Llocs"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbols"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticones"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index e946ba7..bb5b054 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opcions d\'entrada"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Recerca d\'ordres de reg."</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Cerca noms de contactes"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"El corrector ortogràfic utilitza entrades de la llista de contactes"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibra en prémer tecles"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Idiomes d\'introducció"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Torna a tocar per desar"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Diccionari disponible"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Activa els comentaris de l\'usuari"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Ajuda a millorar aquest editor de mètode d\'introducció de text mitjançant l\'enviament d\'estadístiques d\'ús i d\'informes d\'error."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema del teclat"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Anglès (Regne Unit)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Anglès (EUA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Activa"</string>
     <string name="not_now" msgid="6172462888202790482">"Ara no"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ja existeix aquest estil d\'entrada: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode d\'estudi d\'usabilitat"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Retard en mantenir premut"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durada vibració en prémer"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volum del so en prémer tecles"</string>
diff --git a/java/res/values-cs/strings-action-keys.xml b/java/res/values-cs/strings-action-keys.xml
index e9545fe..0ff3506 100644
--- a/java/res/values-cs/strings-action-keys.xml
+++ b/java/res/values-cs/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Před."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Hot."</string>
     <string name="label_send_key" msgid="482252074224462163">"Odes."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pauza"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Čekat"</string>
 </resources>
diff --git a/java/res/values-cs/strings-talkback-descriptions.xml b/java/res/values-cs/strings-talkback-descriptions.xml
index 0e35c82..dae9b78 100644
--- a/java/res/values-cs/strings-talkback-descriptions.xml
+++ b/java/res/values-cs/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Místa"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboly"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikony"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index c093d8c..b805d28 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Možnosti zadávání textu a dat"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Příkazy vývoj. protokolu"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Vyhledat kontakty"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Kontrola pravopisu používá záznamy z vašeho seznamu kontaktů."</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Při stisku klávesy vibrovat"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Vstupní jazyky"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Opětovným dotykem provedete uložení"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Slovník k dispozici"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Aktivovat zasílání statistik užívání a zpráv o selhání"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Pomozte nám vylepšit tento editor pro zadávání dat automatickým zasíláním statistik využití a zpráv o selhání do Googlu."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Motiv klávesnice"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"angličtina (Velká Británie)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"angličtina (USA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Povolit"</string>
     <string name="not_now" msgid="6172462888202790482">"Teď ne"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Tento styl zadávání již existuje: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Režim studie použitelnosti"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Prodleva dlouhého stisknutí"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Délka vibrace u stisku klávesy"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Hlasitost stisknutí klávesy"</string>
diff --git a/java/res/values-da/strings-action-keys.xml b/java/res/values-da/strings-action-keys.xml
index 757dc00..96021e5 100644
--- a/java/res/values-da/strings-action-keys.xml
+++ b/java/res/values-da/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Forr."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Udfør"</string>
     <string name="label_send_key" msgid="482252074224462163">"Send"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Vent"</string>
 </resources>
diff --git a/java/res/values-da/strings-talkback-descriptions.xml b/java/res/values-da/strings-talkback-descriptions.xml
index 669c183..53326b3 100644
--- a/java/res/values-da/strings-talkback-descriptions.xml
+++ b/java/res/values-da/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Steder"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboler"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Humørikoner"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 65025b7..36263c6 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Indstillinger for input"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Forskningslogkommandoer"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Anvend kontaktnavne"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Stavekontrollen bruger ord fra dine kontaktpersondata"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibration ved tastetryk"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Inputsprog"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Tryk igen for at gemme"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Ordbog er tilgængelig"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Aktivér brugerfeedback"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Vær med til at forbedre dette redigeringsværktøj til indtastningsmetode ved automatisk at sende anvendelsesstatistikker og rapporter om nedbrud til Google."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tastaturtema"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Engelsk (Storbritannien)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Engelsk (USA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Aktivér"</string>
     <string name="not_now" msgid="6172462888202790482">"Ikke nu"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Denne inputstil findes allerede: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Tilstand for brugsstudie"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Forsinket langt tastetryk"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrationstid ved tastetryk"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Lydstyrke ved tastetryk"</string>
diff --git a/java/res/values-de/strings-action-keys.xml b/java/res/values-de/strings-action-keys.xml
index 95d3d71..b55c280 100644
--- a/java/res/values-de/strings-action-keys.xml
+++ b/java/res/values-de/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Zurück"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Fertig"</string>
     <string name="label_send_key" msgid="482252074224462163">"Senden"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Warten"</string>
 </resources>
diff --git a/java/res/values-de/strings-talkback-descriptions.xml b/java/res/values-de/strings-talkback-descriptions.xml
index d5c54e0..f926b9a 100644
--- a/java/res/values-de/strings-talkback-descriptions.xml
+++ b/java/res/values-de/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Orte"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbole"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index f2074b7..aaa4c50 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Eingabeoptionen"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Forschungsprotokollbefehle"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kontaktnamen prüfen"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Rechtschreibprüfung kann Einträge aus meiner Kontaktliste verwenden"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Bei Tastendruck vibrieren"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Eingabesprachen"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Zum Speichern erneut berühren"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Wörterbuch verfügbar"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Nutzer-Feedback aktivieren"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Tragen Sie zur Verbesserung dieses Eingabemethodeneditors bei, indem Sie automatisch Nutzungsstatistiken und Absturzberichte senden."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tastaturdesign"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Englisch (UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Englisch (USA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Aktivieren"</string>
     <string name="not_now" msgid="6172462888202790482">"Später"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Der gleiche Eingabestil ist bereits vorhanden: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Studie zur Benutzerfreundlichkeit"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Verzögerung für langes Drücken"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrationsdauer bei Tastendruck"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Tonlautstärke bei Tastendruck"</string>
diff --git a/java/res/values-el/strings-action-keys.xml b/java/res/values-el/strings-action-keys.xml
index a4093e3..8b5e395 100644
--- a/java/res/values-el/strings-action-keys.xml
+++ b/java/res/values-el/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Προηγούμενο"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Τέλος"</string>
     <string name="label_send_key" msgid="482252074224462163">"Αποστολή"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Παύση"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Αναμονή"</string>
 </resources>
diff --git a/java/res/values-el/strings-talkback-descriptions.xml b/java/res/values-el/strings-talkback-descriptions.xml
index aef593c..3b990ad 100644
--- a/java/res/values-el/strings-talkback-descriptions.xml
+++ b/java/res/values-el/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Μέρη"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Σύμβολα"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticon"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 7f0e3f3..aa7d60c 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Επιλογές εισόδου"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Έρευνα εντολών καταγραφής"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Αναζήτηση ονομάτων επαφών"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Ο ορθογρ. έλεγχος χρησιμοπ. καταχωρίσεις από τη λίστα επαφών σας"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Δόνηση κατά το πάτημα πλήκτρων"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Γλώσσες εισόδου"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Αγγίξτε ξανά για αποθήκευση"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Λεξικό διαθέσιμο"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Ενεργοποίηση σχολίων χρηστών"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Βοηθήστε μας να βελτιώσουμε αυτό το πρόγραμμα επεξεργασίας μεθόδου εισόδου, στέλνοντας αυτόματα στατιστικά στοιχεία και αναφορές σφαλμάτων."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Θέμα πληκτρολογίου"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Αγγλικά (Η.Β.)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Αγγλικά (Η.Π.Α)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Ενεργοποίηση"</string>
     <string name="not_now" msgid="6172462888202790482">"Όχι τώρα"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Το ίδιο στυλ εισόδου υπάρχει ήδη: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Λειτουργία μελέτης χρηστικότητας"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Καθυστέρηση παρατεταμένου πατήματος πλήκτρου"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Διάρκεια δόνησης πατήμ. πλήκτ."</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Ένταση ήχου πατήματος πλήκτρου"</string>
diff --git a/java/res/values-en-rGB/strings-action-keys.xml b/java/res/values-en-rGB/strings-action-keys.xml
index 366cf3c..b8b02e1 100644
--- a/java/res/values-en-rGB/strings-action-keys.xml
+++ b/java/res/values-en-rGB/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Prev"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Finished"</string>
     <string name="label_send_key" msgid="482252074224462163">"Send"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Wait"</string>
 </resources>
diff --git a/java/res/values-en-rGB/strings-talkback-descriptions.xml b/java/res/values-en-rGB/strings-talkback-descriptions.xml
index c6c8f6d..225df1a 100644
--- a/java/res/values-en-rGB/strings-talkback-descriptions.xml
+++ b/java/res/values-en-rGB/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Places"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbols"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 89e9789..dbc3712 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Input options"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Research Log Commands"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Look up contact names"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Spell checker uses entries from your contact list"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrate on keypress"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Input languages"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Touch again to save"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Dictionary available"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Enable user feedback"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Help improve this input method editor by automatically sending usage statistics and crash reports"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Keyboard theme"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"English (UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"English (US)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Enable"</string>
     <string name="not_now" msgid="6172462888202790482">"Not now"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"The same input style already exists: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Usability study mode"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Key long press delay"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Keypress vibration duration"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Keypress sound volume"</string>
diff --git a/java/res/values-en-rIN/strings-action-keys.xml b/java/res/values-en-rIN/strings-action-keys.xml
index 366cf3c..b8b02e1 100644
--- a/java/res/values-en-rIN/strings-action-keys.xml
+++ b/java/res/values-en-rIN/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Prev"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Finished"</string>
     <string name="label_send_key" msgid="482252074224462163">"Send"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Wait"</string>
 </resources>
diff --git a/java/res/values-en-rIN/strings-talkback-descriptions.xml b/java/res/values-en-rIN/strings-talkback-descriptions.xml
index c6c8f6d..225df1a 100644
--- a/java/res/values-en-rIN/strings-talkback-descriptions.xml
+++ b/java/res/values-en-rIN/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Places"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbols"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-en-rIN/strings.xml b/java/res/values-en-rIN/strings.xml
index 89e9789..dbc3712 100644
--- a/java/res/values-en-rIN/strings.xml
+++ b/java/res/values-en-rIN/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Input options"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Research Log Commands"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Look up contact names"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Spell checker uses entries from your contact list"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrate on keypress"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Input languages"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Touch again to save"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Dictionary available"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Enable user feedback"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Help improve this input method editor by automatically sending usage statistics and crash reports"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Keyboard theme"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"English (UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"English (US)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Enable"</string>
     <string name="not_now" msgid="6172462888202790482">"Not now"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"The same input style already exists: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Usability study mode"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Key long press delay"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Keypress vibration duration"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Keypress sound volume"</string>
diff --git a/java/res/values-es-rUS/strings-action-keys.xml b/java/res/values-es-rUS/strings-action-keys.xml
index d375617..5921ff4 100644
--- a/java/res/values-es-rUS/strings-action-keys.xml
+++ b/java/res/values-es-rUS/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Listo"</string>
     <string name="label_send_key" msgid="482252074224462163">"Env."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
 </resources>
diff --git a/java/res/values-es-rUS/strings-talkback-descriptions.xml b/java/res/values-es-rUS/strings-talkback-descriptions.xml
index 7ccc35f..bdf2bab 100644
--- a/java/res/values-es-rUS/strings-talkback-descriptions.xml
+++ b/java/res/values-es-rUS/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Lugares"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbolos"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticones"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index d440c0c..db34dd2 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opciones de entrada"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Comandos registro invest."</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Buscar nombres contactos"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"El corrector ortográfico usa entradas de tu lista de contactos."</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar al pulsar teclas"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Idiomas de entrada"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Vuelve a tocar para guardar."</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Diccionario disponible"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Activar los comentarios del usuario"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Envíanos automáticamente las estadísticas de uso y los informes sobre fallos para ayudarnos a mejorar este editor de método de entrada de texto."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema del teclado"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Inglés (Reino Unido)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Inglés (EE.UU.)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Activar"</string>
     <string name="not_now" msgid="6172462888202790482">"Ahora no"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ya existe el estilo de entrada <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>."</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudio de usabilidad"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Demora de presión prolongada"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durac. vibrac. al presionar"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Vol. sonido al presionar tecla"</string>
diff --git a/java/res/values-es/strings-action-keys.xml b/java/res/values-es/strings-action-keys.xml
index 2701146..4b3039d 100644
--- a/java/res/values-es/strings-action-keys.xml
+++ b/java/res/values-es/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Anterior"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Listo"</string>
     <string name="label_send_key" msgid="482252074224462163">"Enviar"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pausar"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Espera"</string>
 </resources>
diff --git a/java/res/values-es/strings-talkback-descriptions.xml b/java/res/values-es/strings-talkback-descriptions.xml
index 2e21b6c..9cc6f5d 100644
--- a/java/res/values-es/strings-talkback-descriptions.xml
+++ b/java/res/values-es/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Sitios"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbolos"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticonos"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 3476ac5..87671f4 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opciones entrada texto"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Comandos registro investigación"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Nombres de contactos"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Añadir nombres de tu lista de contactos al corrector"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar al pulsar tecla"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Idiomas de introducción"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Toca otra vez para guardar"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Hay un diccionario disponible"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Habilitar comentarios de usuarios"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Ayuda a mejorar este editor de método de introducción de texto enviando estadísticas de uso e informes de error."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema de teclado"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"inglés (Reino Unido)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"inglés (EE.UU.)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Habilitar"</string>
     <string name="not_now" msgid="6172462888202790482">"Ahora no"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ya existe el estilo de entrada <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>."</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo estudio de usabilidad"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Retraso de pulsación prolongada"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Duración vibración al pulsar"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volumen sonido al pulsar tecla"</string>
diff --git a/java/res/values-et-rEE/strings-action-keys.xml b/java/res/values-et-rEE/strings-action-keys.xml
index 64ba6d6..fa054df 100644
--- a/java/res/values-et-rEE/strings-action-keys.xml
+++ b/java/res/values-et-rEE/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Eelm."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Valmis"</string>
     <string name="label_send_key" msgid="482252074224462163">"Saada"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Peata"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Oota"</string>
 </resources>
diff --git a/java/res/values-et-rEE/strings-talkback-descriptions.xml b/java/res/values-et-rEE/strings-talkback-descriptions.xml
index 0001071..0922987 100644
--- a/java/res/values-et-rEE/strings-talkback-descriptions.xml
+++ b/java/res/values-et-rEE/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Kohad"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Sümbolid"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikonid"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-et-rEE/strings.xml b/java/res/values-et-rEE/strings.xml
index 6fbc4b4..e9c3f84 100644
--- a/java/res/values-et-rEE/strings.xml
+++ b/java/res/values-et-rEE/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Sisestusvalikud"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Uuringulogi käsud"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kontakti nimede kontroll."</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Õigekirjakontroll kasutab teie kontaktisikute loendi sissekandeid"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibreeri klahvivajutusel"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Sisestuskeeled"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Salvestamiseks puudutage uuesti"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Sõnastik saadaval"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Luba kasutaja tagasiside"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Aidake seda sisestusmeetodi redigeerijat parandada, saates automaatselt kasutusstatistikat ja krahhiaruandeid."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Klaviatuuri teema"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Inglise (UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Inglise (USA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Luba"</string>
     <string name="not_now" msgid="6172462888202790482">"Mitte kohe"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Sama sisendstiil on juba olemas: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Kasutatavuse uurimisrežiim"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Pika klahvivajutuse viide"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Klahvivajutuse vibreerimise kestus"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Klahvivajutuse helitugevus"</string>
diff --git a/java/res/values-fa/strings-action-keys.xml b/java/res/values-fa/strings-action-keys.xml
index 78faa8c..ae393bb 100644
--- a/java/res/values-fa/strings-action-keys.xml
+++ b/java/res/values-fa/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"قبلی"</string>
     <string name="label_done_key" msgid="7564866296502630852">"اتمام"</string>
     <string name="label_send_key" msgid="482252074224462163">"ارسال"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"مکث"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"انتظار"</string>
 </resources>
diff --git a/java/res/values-fa/strings-talkback-descriptions.xml b/java/res/values-fa/strings-talkback-descriptions.xml
index c4d4b25..bc3a5bf 100644
--- a/java/res/values-fa/strings-talkback-descriptions.xml
+++ b/java/res/values-fa/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"مکان‌ها"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"نمادها"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"شکلک‌ها"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 04c6a5a..16a53b3 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"گزینه‌های ورودی"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"فرمان‌های گزارش‌گیری پژوهش"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"جستجوی نام مخاطبین"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"غلط‌گیر املا از ورودی‌های لیست مخاطبین شما استفاده می‌کند"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"لرزش با فشار کلید"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"زبان‌های ورودی"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"برای ذخیره دوباره لمس کنید"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"دیکشنری موجود است"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"فعال کردن بازخورد کاربر"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"با ارسال خودکار آمار استفاده و گزارش‌های خرابی، به بهبود این ویرایشگر روش ورودی کمک کنید"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"طرح زمینه صفحه‌کلید"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"انگلیسی (بریتانیا)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"انگلیسی (امریکا)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"فعال کردن"</string>
     <string name="not_now" msgid="6172462888202790482">"الآن نه"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"سبک ورودی مشابهی در حال حاضر وجود دارد: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"حالت بررسی قابلیت استفاده"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"تأخیر فشار طولانی کلید"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"طول مدت لرزش در اثر فشردن کلید"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"میزان صدای فشردن کلید"</string>
diff --git a/java/res/values-fi/strings-action-keys.xml b/java/res/values-fi/strings-action-keys.xml
index da7f111..5472fc3 100644
--- a/java/res/values-fi/strings-action-keys.xml
+++ b/java/res/values-fi/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Edel."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Valm."</string>
     <string name="label_send_key" msgid="482252074224462163">"Läh."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Tauko"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Odota"</string>
 </resources>
diff --git a/java/res/values-fi/strings-emoji-descriptions.xml b/java/res/values-fi/strings-emoji-descriptions.xml
new file mode 100644
index 0000000..74f8a09
--- /dev/null
+++ b/java/res/values-fi/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Copyright-merkki"</string>
+    <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Rekisteröidyn tavaramerkin merkki"</string>
+    <string name="spoken_emoji_203C" msgid="153340916701508663">"Kaksi huutomerkkiä"</string>
+    <string name="spoken_emoji_2049" msgid="4877256448299555371">"Huutomerkki ja kysymysmerkki"</string>
+    <string name="spoken_emoji_2122" msgid="9188440722954720429">"Tavaramerkin merkki"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"Tietolähde"</string>
+    <string name="spoken_emoji_2194" msgid="8055202727034946680">"Nuoli vasemmalle ja oikealle"</string>
+    <string name="spoken_emoji_2195" msgid="8028122253301087407">"Nuoli ylös ja alas"</string>
+    <string name="spoken_emoji_2196" msgid="4019164898967854363">"Nuoli vasemmalle ylös"</string>
+    <string name="spoken_emoji_2197" msgid="4255723717709017801">"Nuoli oikealle ylös"</string>
+    <string name="spoken_emoji_2198" msgid="1452063451313622090">"Nuoli oikealle alas"</string>
+    <string name="spoken_emoji_2199" msgid="6942722693368807849">"Nuoli vasemmalle alas"</string>
+    <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Koukkunuoli vasemmalle"</string>
+    <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Koukkunuoli oikealle"</string>
+    <string name="spoken_emoji_231A" msgid="6751448803233874993">"Katso"</string>
+    <string name="spoken_emoji_231B" msgid="5956428809948426182">"Tiimalasi"</string>
+    <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Musta oikealle osoittava kaksoiskolmio"</string>
+    <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Musta vasemmalle osoittava kaksoiskolmio"</string>
+    <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Musta ylös osoittava kaksoiskolmio"</string>
+    <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Musta alas osoittava kaksoiskolmio"</string>
+    <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Herätyskello"</string>
+    <string name="spoken_emoji_23F3" msgid="166900119581024371">"Tiimalasi ja hiekka"</string>
+    <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Ympyröity iso M-kirjain"</string>
+    <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Pieni musta neliö"</string>
+    <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Pieni valkoinen neliö"</string>
+    <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Musta oikealle osoittava kolmio"</string>
+    <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Musta vasemmalle osoittava kolmio"</string>
+    <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Suuri valkoinen neliö"</string>
+    <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Suuri musta neliö"</string>
+    <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Valkoinen neliö"</string>
+    <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Musta neliö"</string>
+    <string name="spoken_emoji_2600" msgid="2272722634618990413">"Musta aurinko"</string>
+    <string name="spoken_emoji_2601" msgid="6205136889311537150">"Pilvi"</string>
+    <string name="spoken_emoji_260E" msgid="8670395193046424238">"Musta puhelin"</string>
+    <string name="spoken_emoji_2611" msgid="4530550203347054611">"Valittu kyselyruutu"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"Sateenvarjo ja sadepisarat"</string>
+    <string name="spoken_emoji_2615" msgid="3320562382424018588">"Kuuma juoma"</string>
+    <string name="spoken_emoji_261D" msgid="4690554173549768467">"Valkoinen käsi, ylös osoittava etusormi"</string>
+    <string name="spoken_emoji_263A" msgid="3170094381521989300">"Valkoinen hymyilevä naama"</string>
+    <string name="spoken_emoji_2648" msgid="4621241062667020673">"Oinas"</string>
+    <string name="spoken_emoji_2649" msgid="7694461245947059086">"Härkä"</string>
+    <string name="spoken_emoji_264A" msgid="1258074605878705030">"Kaksoset"</string>
+    <string name="spoken_emoji_264B" msgid="4409219914377810956">"Rapu"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leijona"</string>
+    <string name="spoken_emoji_264D" msgid="1504758945499854018">"Neitsyt"</string>
+    <string name="spoken_emoji_264E" msgid="2354847104530633519">"Vaaka"</string>
+    <string name="spoken_emoji_264F" msgid="5822933280406416112">"Skorpioni"</string>
+    <string name="spoken_emoji_2650" msgid="4832481156714796163">"Jousimies"</string>
+    <string name="spoken_emoji_2651" msgid="840953134601595090">"Kauris"</string>
+    <string name="spoken_emoji_2652" msgid="3586925968718775281">"Vesimies"</string>
+    <string name="spoken_emoji_2653" msgid="8420547731496254492">"Kalat"</string>
+    <string name="spoken_emoji_2660" msgid="4541170554542412536">"Musta patasymboli"</string>
+    <string name="spoken_emoji_2663" msgid="3669352721942285724">"Musta ristisymboli"</string>
+    <string name="spoken_emoji_2665" msgid="6347941599683765843">"Musta herttasymboli"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"Musta ruutusymboli"</string>
+    <string name="spoken_emoji_2668" msgid="7063148281053820386">"Kuuma lähde"</string>
+    <string name="spoken_emoji_267B" msgid="21716857176812762">"Musta kierrätysmerkki"</string>
+    <string name="spoken_emoji_267F" msgid="8833496533226475443">"Pyörätuolin symboli"</string>
+    <string name="spoken_emoji_2693" msgid="7443148847598433088">"Ankkuri"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Varoitusmerkki"</string>
+    <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Korkean jännitteen symboli"</string>
+    <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Valkoinen ympyrä"</string>
+    <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Musta ympyrä"</string>
+    <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Jalkapallo"</string>
+    <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Pesäpallo"</string>
+    <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Lumiukko ilman lunta"</string>
+    <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Aurinko pilven takana"</string>
+    <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Käärmeenkantaja"</string>
+    <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Kielletty ajosuunta"</string>
+    <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Kirkko"</string>
+    <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Suihkulähde"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Lippu reiässä"</string>
+    <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Purjevene"</string>
+    <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Teltta"</string>
+    <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Polttoainepumppu"</string>
+    <string name="spoken_emoji_2702" msgid="4005741160717451912">"Mustat sakset"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"Valkoinen valintamerkki"</string>
+    <string name="spoken_emoji_2708" msgid="7153840886849268988">"Lentokone"</string>
+    <string name="spoken_emoji_2709" msgid="2217319160724311369">"Kirjekuori"</string>
+    <string name="spoken_emoji_270A" msgid="508347232762319473">"Nyrkki"</string>
+    <string name="spoken_emoji_270B" msgid="6640562128327753423">"Pystyssä oleva kämmen"</string>
+    <string name="spoken_emoji_270C" msgid="1344288035704944581">"Voitonmerkki"</string>
+    <string name="spoken_emoji_270F" msgid="6108251586067318718">"Lyijykynä"</string>
+    <string name="spoken_emoji_2712" msgid="6320544535087710482">"Musta kynänkärki"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"Paksu valintamerkki"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"Paksu kertomerkki"</string>
+    <string name="spoken_emoji_2728" msgid="5650330815808691881">"Tuikkivat tähdet"</string>
+    <string name="spoken_emoji_2733" msgid="8915809595141157327">"Kahdeksansakarainen tähti"</string>
+    <string name="spoken_emoji_2734" msgid="4846583547980754332">"Kahdeksansakarainen musta tähti"</string>
+    <string name="spoken_emoji_2744" msgid="4350636647760161042">"Lumihiutale"</string>
+    <string name="spoken_emoji_2747" msgid="3718282973916474455">"Kipinä"</string>
+    <string name="spoken_emoji_274C" msgid="2752145886733295314">"Ristimerkki"</string>
+    <string name="spoken_emoji_274E" msgid="4262918689871098338">"Valkoinen ristimerkki mustalla taustalla"</string>
+    <string name="spoken_emoji_2753" msgid="6935897159942119808">"Musta koristeellinen kysymysmerkki"</string>
+    <string name="spoken_emoji_2754" msgid="7277504915105532954">"Valkoinen koristeellinen kysymysmerkki"</string>
+    <string name="spoken_emoji_2755" msgid="6853076969826960210">"Valkoinen koristeellinen huutomerkki"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"Paksu huutomerkki"</string>
+    <string name="spoken_emoji_2764" msgid="4214257843609432167">"Väritetty sydän"</string>
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"Paksu plusmerkki"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"Paksu miinusmerkki"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"Paksu jakomerkki"</string>
+    <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Musta nuoli oikealle"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"Silmukka"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Kaksoissilmukka"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"Oikealle ja ylös osoittava nuoli"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"Oikealle ja alas osoittava nuoli"</string>
+    <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Musta nuoli vasemmalle"</string>
+    <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Musta nuoli ylös"</string>
+    <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Musta nuoli alas"</string>
+    <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Suuri musta neliö"</string>
+    <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Suuri valkoinen neliö"</string>
+    <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Valkoinen tähti"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Paksu suuri ympyrä"</string>
+    <string name="spoken_emoji_3030" msgid="4609172241893565639">"Aaltoviiva"</string>
+    <string name="spoken_emoji_303D" msgid="2545833934975907505">"Vuorottelumerkki"</string>
+    <string name="spoken_emoji_3297" msgid="928912923628973800">"Ideogrammi onnittelu ympyrän sisällä"</string>
+    <string name="spoken_emoji_3299" msgid="3930347573693668426">"Ideogrammi salaisuus ympyrän sisällä"</string>
+    <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Mahjong-laatta, punainen lohikäärme"</string>
+    <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Pelikortti, musta jokeri"</string>
+    <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Veriryhmä A"</string>
+    <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Veriryhmä B"</string>
+    <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Veriryhmä O"</string>
+    <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Pysäköintialue"</string>
+    <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Veriryhmä AB"</string>
+    <string name="spoken_emoji_1F191" msgid="5386969264431429221">"CL neliön sisällä"</string>
+    <string name="spoken_emoji_1F192" msgid="8324226436829162496">"Sana COOL neliön sisällä"</string>
+    <string name="spoken_emoji_1F193" msgid="4731758603321515364">"Sana FREE neliön sisällä"</string>
+    <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ID neliön sisällä"</string>
+    <string name="spoken_emoji_1F195" msgid="1433142500411060924">"Sana NEW neliön sisällä"</string>
+    <string name="spoken_emoji_1F196" msgid="8825160701159634202">"NG neliön sisällä"</string>
+    <string name="spoken_emoji_1F197" msgid="7841079241554176535">"OK neliön sisällä"</string>
+    <string name="spoken_emoji_1F198" msgid="7020298909426960622">"SOS neliön sisällä"</string>
+    <string name="spoken_emoji_1F199" msgid="5971252667136235630">"Sana UP ja huutomerkki neliön sisällä"</string>
+    <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"VS neliön sisällä"</string>
+    <string name="spoken_emoji_1F201" msgid="7000490044681139002">"Katakana täällä neliön sisällä"</string>
+    <string name="spoken_emoji_1F202" msgid="8560906958695043947">"Katakana palvelu neliön sisällä"</string>
+    <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Ideogrammi maksuton neliön sisällä"</string>
+    <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Ideogrammi varattu paikka neliön sisällä"</string>
+    <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Ideogrammi kielto neliön sisällä"</string>
+    <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Ideogrammi vapaita paikkoja neliön sisällä"</string>
+    <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Ideogrammi hyväksyntä neliön sisällä"</string>
+    <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Ideogrammi täynnä neliön sisällä"</string>
+    <string name="spoken_emoji_1F236" msgid="879755752069393034">"Ideogrammi maksettu neliön sisällä"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Ideogrammi kuukausittain neliön sisällä"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Ideogrammi tilaus neliön sisällä"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Ideogrammi alennus neliön sisällä"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Ideogrammi liiketoiminta neliön sisällä"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Ideogrammi etu neliön sisällä"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Ideogrammi hyväksy ympyrän sisällä"</string>
+    <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Pyörremyrsky"</string>
+    <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Sumu"</string>
+    <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Suljettu sateenvarjo"</string>
+    <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Yömaisema"</string>
+    <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Auringonnousu vuorilla"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Auringonnousu"</string>
+    <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Kaupunkimaisema hämärässä"</string>
+    <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Auringonlasku rakennusten taakse"</string>
+    <string name="spoken_emoji_1F308" msgid="688704703985173377">"Sateenkaari"</string>
+    <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Silta yöllä"</string>
+    <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Vaahtopää"</string>
+    <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Tulivuori"</string>
+    <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Linnunrata"</string>
+    <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Maapallo, Eurooppa – Afrikka"</string>
+    <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Maapallo, Amerikat"</string>
+    <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Maapallo Aasia – Australia"</string>
+    <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Maapallo ja pituuspiirit"</string>
+    <string name="spoken_emoji_1F311" msgid="623906380914895542">"Uudenkuun symboli"</string>
+    <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Kasvavan kuunsirpin symboli"</string>
+    <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Kuun ensimmäisen neljänneksen symboli"</string>
+    <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Kasvavan puolikuun symboli"</string>
+    <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Täysikuun symboli"</string>
+    <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Vähenevän kuun symboli"</string>
+    <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Kuun viimeisen neljänneksen symboli"</string>
+    <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Vähenevän kuunsirpin symboli"</string>
+    <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Kuunsirppi"</string>
+    <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Uusikuu, jolla kasvot"</string>
+    <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Ensimmäisen neljänneksen kuu, jolla kasvot"</string>
+    <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Viimeisen neljänneksen kuu, jolla kasvot"</string>
+    <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Täysikuu, jolla kasvot"</string>
+    <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Aurinko, jolla kasvot"</string>
+    <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Loistava tähti"</string>
+    <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Tähdenlento"</string>
+    <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Kastanja"</string>
+    <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Taimi"</string>
+    <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Havupuu"</string>
+    <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Lehtipuu"</string>
+    <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Palmu"</string>
+    <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Kaktus"</string>
+    <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Tulppaani"</string>
+    <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Kirsikankukka"</string>
+    <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Ruusu"</string>
+    <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Kiinanruusu"</string>
+    <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Auringonkukka"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Kukka"</string>
+    <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Maissintähkä"</string>
+    <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Riisintähkä"</string>
+    <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Yrtti"</string>
+    <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Neliapila"</string>
+    <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Vaahteranlehti"</string>
+    <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Pudonnut lehti"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Tuulessa leijaileva lehti"</string>
+    <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Sieni"</string>
+    <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Tomaatti"</string>
+    <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Munakoiso"</string>
+    <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Viinirypäleet"</string>
+    <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Meloni"</string>
+    <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Vesimeloni"</string>
+    <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Mandariini"</string>
+    <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Sitruuna"</string>
+    <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Banaani"</string>
+    <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Ananas"</string>
+    <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Punainen omena"</string>
+    <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Vihreä omena"</string>
+    <string name="spoken_emoji_1F350" msgid="625802980159197701">"Päärynä"</string>
+    <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Persikka"</string>
+    <string name="spoken_emoji_1F352" msgid="965600953360182635">"Kirsikat"</string>
+    <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Mansikka"</string>
+    <string name="spoken_emoji_1F354" msgid="45162285238888494">"Hampurilainen"</string>
+    <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Pitsapala"</string>
+    <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Lihainen luu"</string>
+    <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Kanankoipi"</string>
+    <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Riisikeksi"</string>
+    <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Riisipallo"</string>
+    <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Keitetty riisi"</string>
+    <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Curry ja riisi"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Höyryävä kulho"</string>
+    <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Spagetti"</string>
+    <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Leipä"</string>
+    <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Ranskalaiset perunat"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Jamssi"</string>
+    <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Dango"</string>
+    <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
+    <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Sushi"</string>
+    <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Friteeratut katkaravut"</string>
+    <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Surimiviipale, jossa pyörrekuvio"</string>
+    <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Pehmytjäätelö"</string>
+    <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Murskattu jää"</string>
+    <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Jäätelö"</string>
+    <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Donitsi"</string>
+    <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Pikkuleipä"</string>
+    <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Suklaapatukka"</string>
+    <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Karamelli"</string>
+    <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Tikkukaramelli"</string>
+    <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Vanukas"</string>
+    <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Hunajapurkki"</string>
+    <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Kakkuviipale"</string>
+    <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Bento-lounaslaatikko"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Ruokapata"</string>
+    <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Ruoanlaitto"</string>
+    <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Haarukka ja veitsi"</string>
+    <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Teekuppi ilman korvaa"</string>
+    <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Sake-pullo ja kuppi"</string>
+    <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Viinilasi"</string>
+    <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Cocktail-lasi"</string>
+    <string name="spoken_emoji_1F379" msgid="790581290787943325">"Trooppinen drinkki"</string>
+    <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Oluttuoppi"</string>
+    <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Kippistävät olutmukit"</string>
+    <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Tuttipullo"</string>
+    <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Rusetti"</string>
+    <string name="spoken_emoji_1F381" msgid="614180683680675444">"Lahjapaketti"</string>
+    <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Syntymäpäiväkakku"</string>
+    <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Kurpitsalyhty"</string>
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Joulukuusi"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Joulupukki"</string>
+    <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Ilotulitus"</string>
+    <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Tähtisadetikku"</string>
+    <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Ilmapallo"</string>
+    <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Konfettipommi"</string>
+    <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Konfettipallo"</string>
+    <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Tanabata-puu"</string>
+    <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Liput ristikkäin"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Japanilainen mäntykoriste"</string>
+    <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Japanilaiset nuket"</string>
+    <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Kalanmuotoiset tuulipussit"</string>
+    <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Tuulikello"</string>
+    <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Kuujuhla"</string>
+    <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Koululaukku"</string>
+    <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Valmistujaislakki"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Karusellihevonen"</string>
+    <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Maailmanpyörä"</string>
+    <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Vuoristorata"</string>
+    <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Onki ja kala"</string>
+    <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Mikrofoni"</string>
+    <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Elokuvakamera"</string>
+    <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Elokuvateatteri"</string>
+    <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Kuulokkeet"</string>
+    <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Taiteilijan paletti"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Silinterihattu"</string>
+    <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Sirkusteltta"</string>
+    <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Lippu"</string>
+    <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Klaffi"</string>
+    <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Näyttämötaide"</string>
+    <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Videopeli"</string>
+    <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Napakymppi"</string>
+    <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Peliautomaatti"</string>
+    <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Biljardi"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Arpakuutio"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Keilailu"</string>
+    <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Hanafuda-pelikortit"</string>
+    <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Nuotti"</string>
+    <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Nuotteja"</string>
+    <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Saksofoni"</string>
+    <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Kitara"</string>
+    <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Koskettimet"</string>
+    <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Trumpetti"</string>
+    <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Viulu"</string>
+    <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Nuottiviivasto"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Juoksupaita"</string>
+    <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Tennismaila ja pallo"</string>
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Suksi ja mono"</string>
+    <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Koripallo ja kori"</string>
+    <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Ruutulippu"</string>
+    <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Lumilautailija"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Juoksija"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Lainelautailija"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Palkintopokaali"</string>
+    <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Laukkakilpailut"</string>
+    <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Amerikkalainen jalkapallo"</string>
+    <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Rugby-pallo"</string>
+    <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Uimari"</string>
+    <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Talo"</string>
+    <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Talo ja puutarha"</string>
+    <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Toimistorakennus"</string>
+    <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Japanilainen postitoimisto"</string>
+    <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Eurooppalainen postitoimisto"</string>
+    <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Sairaala"</string>
+    <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Pankki"</string>
+    <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Pankkiautomaatti"</string>
+    <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Hotelli"</string>
+    <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Japanilainen love-hotelli"</string>
+    <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Päivittäistavarakauppa"</string>
+    <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Koulu"</string>
+    <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Tavaratalo"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Tehdas"</string>
+    <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Izakaya-ravintolan lyhty"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Japanilainen linna"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Eurooppalainen linna"</string>
+    <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Rotta"</string>
+    <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Hiiri"</string>
+    <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Härkä"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Vesipuhveli"</string>
+    <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Lehmä"</string>
+    <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Leopardi"</string>
+    <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Jänis"</string>
+    <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Kissa"</string>
+    <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Lohikäärme"</string>
+    <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Krokotiili"</string>
+    <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Valas"</string>
+    <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Etana"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Käärme"</string>
+    <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Hevonen"</string>
+    <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Pässi"</string>
+    <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Vuohi"</string>
+    <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Lammas"</string>
+    <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Apina"</string>
+    <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Kukko"</string>
+    <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Kana"</string>
+    <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Koira"</string>
+    <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Sika"</string>
+    <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Villisika"</string>
+    <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Norsu"</string>
+    <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Mustekala"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Simpukankuori"</string>
+    <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Hyönteinen"</string>
+    <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Muurahainen"</string>
+    <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Mehiläinen"</string>
+    <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Leppäkerttu"</string>
+    <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Kala"</string>
+    <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Trooppinen kala"</string>
+    <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Pallokala"</string>
+    <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Kilpikonna"</string>
+    <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Kuoriutuva kananpoika"</string>
+    <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Kananpoika"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Eteenpäin katsova kananpoika"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Lintu"</string>
+    <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Pingviini"</string>
+    <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Koala"</string>
+    <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Villakoira"</string>
+    <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Yksikyttyräinen kameli"</string>
+    <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Kaksikyttyräinen kameli"</string>
+    <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Delfiini"</string>
+    <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Hiiren pää"</string>
+    <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Lehmän pää"</string>
+    <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Tiikerin pää"</string>
+    <string name="spoken_emoji_1F430" msgid="525492897063150160">"Jäniksen pää"</string>
+    <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Kissan pää"</string>
+    <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Lohikäärmeen pää"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Valas ja vesisuihku"</string>
+    <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Hevosen pää"</string>
+    <string name="spoken_emoji_1F435" msgid="59199202683252958">"Apinan pää"</string>
+    <string name="spoken_emoji_1F436" msgid="340544719369009828">"Koiran pää"</string>
+    <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Sian pää"</string>
+    <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Sammakon pää"</string>
+    <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Hamsterin pää"</string>
+    <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Suden pää"</string>
+    <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Karhun pää"</string>
+    <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Pandan pää"</string>
+    <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Sian kärsä"</string>
+    <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Tassunjäljet"</string>
+    <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Silmät"</string>
+    <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Korva"</string>
+    <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Nenä"</string>
+    <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Suu"</string>
+    <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Kieli"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Valkoinen käsi, ylös osoittava etusormi"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Valkoinen käsi, alas osoittava etusormi"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Valkoinen käsi, vasemmalle osoittava etusormi"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Valkoinen käsi, oikealle osoittava etusormi"</string>
+    <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Käsi nyrkissä"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Vilkuttava käsi"</string>
+    <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"OK-merkki"</string>
+    <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Peukalo pystyssä"</string>
+    <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Peukalo alaspäin"</string>
+    <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Taputtavat kädet"</string>
+    <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Avoimet kämmenet"</string>
+    <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Kruunu"</string>
+    <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Naisen hattu"</string>
+    <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Silmälasit"</string>
+    <string name="spoken_emoji_1F454" msgid="348469036193323252">"Kravatti"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"T-paita"</string>
+    <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Farkut"</string>
+    <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Leninki"</string>
+    <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Kimono"</string>
+    <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Bikinit"</string>
+    <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Naisen paita"</string>
+    <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Kukkaro"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Käsilaukku"</string>
+    <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Pussukka"</string>
+    <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Miesten kenkä"</string>
+    <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Urheilujalkine"</string>
+    <string name="spoken_emoji_1F460" msgid="305863879170420855">"Korkokenkä"</string>
+    <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Naisen sandaali"</string>
+    <string name="spoken_emoji_1F462" msgid="1722897795554863734">"Naisen saappaat"</string>
+    <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Jalanjäljet"</string>
+    <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Rintakuvan ääriviivat"</string>
+    <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Rintakuvien ääriviivat"</string>
+    <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Poika"</string>
+    <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Tyttö"</string>
+    <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Mies"</string>
+    <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Nainen"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Perhe"</string>
+    <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Mies ja nainen käsi kädessä"</string>
+    <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Kaksi miestä käsi kädessä"</string>
+    <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Kaksi naista käsi kädessä"</string>
+    <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Poliisi"</string>
+    <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Nainen, jolla on pupun korvat"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Morsian hunnussa"</string>
+    <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Vaaleahiuksinen henkilö"</string>
+    <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Mies, jolla aasialainen päähine"</string>
+    <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Mies, jolla turbaani"</string>
+    <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Vanha mies"</string>
+    <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Vanha nainen"</string>
+    <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Vauva"</string>
+    <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Rakennustyöläinen"</string>
+    <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Prinsessa"</string>
+    <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Japanilainen hirviö"</string>
+    <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Japanilainen menninkäinen"</string>
+    <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Kummitus"</string>
+    <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Enkelivauva"</string>
+    <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Ulkoavaruuden olento"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Avaruusolio"</string>
+    <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Pikkupiru"</string>
+    <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Kallo"</string>
+    <string name="spoken_emoji_1F481" msgid="320408708521966893">"Asiakaspalvelija"</string>
+    <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Vartija"</string>
+    <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Tanssija"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Huulipuna"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Kynsilakka"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Kasvohieronta"</string>
+    <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Hiusten leikkaus"</string>
+    <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Parturin pylväs"</string>
+    <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Ruisku"</string>
+    <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Pilleri"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Huulet"</string>
+    <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Rakkauskirje"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Sormus"</string>
+    <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Jalokivi"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Suudelma"</string>
+    <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Kukkakimppu"</string>
+    <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Pariskunta ja sydän"</string>
+    <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Häät"</string>
+    <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Sykkivä sydän"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Särkynyt sydän"</string>
+    <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Kaksi sydäntä"</string>
+    <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Säihkyvä sydän"</string>
+    <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Kasvava sydän"</string>
+    <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Sydän ja nuoli"</string>
+    <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Sininen sydän"</string>
+    <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Vihreä sydän"</string>
+    <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Keltainen sydän"</string>
+    <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Violetti sydän"</string>
+    <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Sydän ja rusetti"</string>
+    <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Pyörivät sydämet"</string>
+    <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Sydänkoriste"</string>
+    <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Vinoneliö, jossa on sisällä piste"</string>
+    <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Hehkulamppu"</string>
+    <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Vihan symboli"</string>
+    <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Pommi"</string>
+    <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Unen symboli"</string>
+    <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Törmäyksen symboli"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Hikipisarat"</string>
+    <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Pisara"</string>
+    <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Liikkeen symboli"</string>
+    <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Kakkakasa"</string>
+    <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Hauis"</string>
+    <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Huimauksen symboli"</string>
+    <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Puhekupla"</string>
+    <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Ajatuskupla"</string>
+    <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Valkoinen kukka"</string>
+    <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Sadan pisteen symboli"</string>
+    <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Rahasäkki"</string>
+    <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Valuutanvaihto"</string>
+    <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Paksu dollarin symboli"</string>
+    <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Luottokortti"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Seteli, jossa jenin symboli"</string>
+    <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Seteli, jossa dollarin symboli"</string>
+    <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Seteli, jossa euron symboli"</string>
+    <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Seteli, jossa punnan symboli"</string>
+    <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Setelinippu, jolla siivet"</string>
+    <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Noususuuntainen kaavio, jossa jenin symboli"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Paikka"</string>
+    <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Tietokone"</string>
+    <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Salkku"</string>
+    <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minilevy"</string>
+    <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Levyke"</string>
+    <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Optinen levy"</string>
+    <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD-levy"</string>
+    <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Tiedostokansio"</string>
+    <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Avaa tiedostokansio"</string>
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Alhaalta käpristynyt sivu"</string>
+    <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Sivu edestä"</string>
+    <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Kalenteri"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Kalenteri, irtirevittävät sivut"</string>
+    <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Kortihakemisto"</string>
+    <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Noususuuntainen kaavio"</string>
+    <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Laskusuuntainen kaavio"</string>
+    <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Pylväskaavio"</string>
+    <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Leikepöytä"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Nasta"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Pyöreäpäinen nasta"</string>
+    <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Paperiliitin"</string>
+    <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Suora viivain"</string>
+    <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Kolmioviivain"</string>
+    <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"Kirjanmerkit"</string>
+    <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Kierreselkäinen vihko"</string>
+    <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Muistikirja"</string>
+    <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Muistikirja, jossa koristekansi"</string>
+    <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Suljettu kirja"</string>
+    <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Avoin kirja"</string>
+    <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Vihreä kirja"</string>
+    <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Sininen kirja"</string>
+    <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Oranssi kirja"</string>
+    <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Kirjat"</string>
+    <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Nimilappu"</string>
+    <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Rulla"</string>
+    <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Muistio"</string>
+    <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Puhelimen kuuloke"</string>
+    <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Hakulaite"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Faksi"</string>
+    <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Satelliittiantenni"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Julkisen tilan kovaääninen"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Megafoni"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Lähtevien lokero"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Saapuvien lokero"</string>
+    <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Paketti"</string>
+    <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Sähköpostin symboli"</string>
+    <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Saapuva kirjekuori"</string>
+    <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Kirjekuori alaspäin osoittavan nuolen alla"</string>
+    <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Suljettu postilaatikko lippu alhaalla"</string>
+    <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Suljettu postilaatikko lippu ylhäällä"</string>
+    <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Avattu postilaatikko lippu ylhäällä"</string>
+    <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Avattu postilaatikko lippu alhaalla"</string>
+    <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Postilaatikko"</string>
+    <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Postitorvi"</string>
+    <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Sanomalehti"</string>
+    <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Matkapuhelin"</string>
+    <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Matkapuhelin, jonka vasemmalla puolella on sitä osoittava nuoli"</string>
+    <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Värinätila"</string>
+    <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Matkapuhelin pois käytöstä"</string>
+    <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Ei matkapuhelimia"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Antennisymboli ja palkit"</string>
+    <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Kamera"</string>
+    <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Videokamera"</string>
+    <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Televisio"</string>
+    <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Radio"</string>
+    <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Videokasetti"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Kaksi ristikkäistä oikealle osoittavaa nuolta"</string>
+    <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Ympyrä, jossa myötäpäivään oikealle ja vasemmalle osoittavat nuolet"</string>
+    <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Ympyrä, jossa myötäpäivään oikealle ja vasemmalle osoittavat nuolet ja jonka päällä ympyröity numero yksi"</string>
+    <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Ympyrä, jossa myötäpäivään ylös ja alas osoittavat nuolet"</string>
+    <string name="spoken_emoji_1F504" msgid="708290317843535943">"Ympyrä, jossa vastapäivään ylös ja alas osoittavat nuolet"</string>
+    <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Alhaisen kirkkauden symboli"</string>
+    <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Suuren kirkkauden symboli"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Yliviivattu kaiutin"</string>
+    <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Kaiutin"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Kaiutin ja yksi ääniaalto"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Kaiutin ja kolme ääniaaltoa"</string>
+    <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Akku"</string>
+    <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Pistoke"</string>
+    <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Vasemmalle osoittava suurennuslasi"</string>
+    <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Oikealle osoittava suurennuslasi"</string>
+    <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Lukko ja mustekynä"</string>
+    <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Suljettu lukko ja avain"</string>
+    <string name="spoken_emoji_1F511" msgid="262319867774655688">"Avain"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Lukko"</string>
+    <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Avoin lukko"</string>
+    <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Soittokello"</string>
+    <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Yliviivattu soittokello"</string>
+    <string name="spoken_emoji_1F516" msgid="108097933937925381">"Kirjanmerkki"</string>
+    <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Linkin symboli"</string>
+    <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Valintanappi"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Sana BACK, jonka yläpuolella vasemmalle osoittava nuoli"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"Sana END, jonka yläpuolella vasemmalle osoittava nuoli"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"Sana ON ja huutomerkki, yläpuolella vasemmalle ja oikealle osoittava nuoli"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Sana SOON, jonka yläpuolella oikealle osoittava nuoli"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Sana TOP, jonka yläpuolella ylös osoittava nuoli"</string>
+    <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Ikäraja 18 vuotta"</string>
+    <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Näppäin 10"</string>
+    <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Latinalaisten isojen kirjainten symboli"</string>
+    <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Latinalaisten pienten kirjainten symboli"</string>
+    <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Numeroiden symboli"</string>
+    <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Symbolien symboli"</string>
+    <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Latinalaisten kirjainten symboli"</string>
+    <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Tuli"</string>
+    <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Taskulamppu"</string>
+    <string name="spoken_emoji_1F527" msgid="134257142354034271">"Jakoavain"</string>
+    <string name="spoken_emoji_1F528" msgid="700627429570609375">"Vasara"</string>
+    <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Mutteri ja pultti"</string>
+    <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Hochoveitsi"</string>
+    <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Pistooli"</string>
+    <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Mikroskooppi"</string>
+    <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Kaukoputki"</string>
+    <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Kristallipallo"</string>
+    <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Kuusisakarainen tähti, jossa keskellä piste"</string>
+    <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Japanilainen aloittelijan merkki"</string>
+    <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Trident-symboli"</string>
+    <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Musta neliönmuotoinen painike"</string>
+    <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Valkoinen neliönmuotoinen painike"</string>
+    <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Suuri punainen ympyrä"</string>
+    <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Suuri sininen ympyrä"</string>
+    <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Suuri oranssi vinoneliö"</string>
+    <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Suuri sininen vinoneliö"</string>
+    <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Pieni oranssi vinoneliö"</string>
+    <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Pieni sininen vinoneliö"</string>
+    <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Ylöspäin osoittava punainen kolmio"</string>
+    <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Alaspäin osoittava punainen kolmio"</string>
+    <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Ylöspäin osoittava pieni punainen kolmio"</string>
+    <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Alaspäin osoittava pieni punainen kolmio"</string>
+    <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Kellotaulu, kello yksi"</string>
+    <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Kellotaulu, kello kaksi"</string>
+    <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Kellotaulu, kello kolme"</string>
+    <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Kellotaulu, kello neljä"</string>
+    <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Kellotaulu, kello viisi"</string>
+    <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Kellotaulu, kello kuusi"</string>
+    <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Kellotaulu, kello seitsemän"</string>
+    <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Kellotaulu, kello kahdeksan"</string>
+    <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Kellotaulu, kello yhdeksän"</string>
+    <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Kellotaulu, kello kymmenen"</string>
+    <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Kellotaulu, kello yksitoista"</string>
+    <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Kellotaulu, kello kaksitoista"</string>
+    <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Kellotaulu, kello puoli kaksi"</string>
+    <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Kellotaulu, kello puoli kolme"</string>
+    <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Kellotaulu, kello puoli neljä"</string>
+    <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Kellotaulu, kello puoli viisi"</string>
+    <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Kellotaulu, kello puoli kuusi"</string>
+    <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Kellotaulu, kello puoli seitsemän"</string>
+    <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Kellotaulu, kello puoli kahdeksan"</string>
+    <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Kellotaulu, kello puoli yhdeksän"</string>
+    <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Kellotaulu, kello puoli kymmenen"</string>
+    <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Kellotaulu, kello puoli yksitoista"</string>
+    <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Kellotaulu, kello puoli kaksitoista"</string>
+    <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Kellotaulu, kello puoli yksi"</string>
+    <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Fuji-vuori"</string>
+    <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Tokio-torni"</string>
+    <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Vapaudenpatsas"</string>
+    <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Japanin kartta"</string>
+    <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Moai-kivipatsas"</string>
+    <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Virnistävä naama"</string>
+    <string name="spoken_emoji_1F601" msgid="746026523967444503">"Virnistävä naama silmät sirrillään"</string>
+    <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Naama ja ilon kyyneleet"</string>
+    <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Hymyilevä naama, suu auki"</string>
+    <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Hymyilevä naama, suu auki ja silmät sirrillään"</string>
+    <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Hymyilevä naama, suu auki ja kylmä hiki"</string>
+    <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Hymyilevä naama, suu auki ja silmät kiinni"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Hymyilevä naama ja sädekehä"</string>
+    <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Hymyilevä naama ja sarvet"</string>
+    <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Silmää iskevä naama"</string>
+    <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Hymyilevä naama, silmät sirrillään"</string>
+    <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Naama ja huulia lipova kieli"</string>
+    <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Helpottunut naama"</string>
+    <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Hymyilevä naama ja sydämenmuotoiset silmät"</string>
+    <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Hymyilevä naama ja aurinkolasit"</string>
+    <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Virnistävä naama"</string>
+    <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Naamalla perusilme"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Ilmeetön naama"</string>
+    <string name="spoken_emoji_1F612" msgid="985081329745137998">"Kyllästynyt naama"</string>
+    <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Naama ja kylmä hiki"</string>
+    <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Mietteliäs naama"</string>
+    <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Ymmällä oleva naama"</string>
+    <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Hämmentynyt naama"</string>
+    <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Naama ja pusuhuulet"</string>
+    <string name="spoken_emoji_1F618" msgid="408207170572303753">"Lentosuukko ja silmänisku"</string>
+    <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Naama ja pusuhuulet, silmät sirrillään"</string>
+    <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Naama ja pusuhuulet, silmät kiinni"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Kieltä näyttävä naama"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Silmää iskevä ja kieltä näyttävä naama"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Kieltä näyttävä naama, silmät kiinni"</string>
+    <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Pettynyt naama"</string>
+    <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Huolestunut naama"</string>
+    <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Vihainen naama"</string>
+    <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Mököttävä naama"</string>
+    <string name="spoken_emoji_1F622" msgid="29291014645931822">"Itkevä naama"</string>
+    <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Sinnikäs naama"</string>
+    <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Voitokas naama"</string>
+    <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Pettynyt mutta huojentunut naama"</string>
+    <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Surullinen naama, suu auki"</string>
+    <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Tuskainen naama"</string>
+    <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Pelokas naama"</string>
+    <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Uupunut naama"</string>
+    <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Uninen naama"</string>
+    <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Väsynyt naama"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Irvistävä naama"</string>
+    <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Rajusti itkevä naama"</string>
+    <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Naama, suu auki"</string>
+    <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Pelokas naama"</string>
+    <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Naama, suu auki ja kylmä hiki"</string>
+    <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Pelosta kirkuva naama"</string>
+    <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Hämmästynyt naama"</string>
+    <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Punastunut naama"</string>
+    <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Nukkuva naama"</string>
+    <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Naama taju kankaalla"</string>
+    <string name="spoken_emoji_1F636" msgid="947000211822375683">"Naama ilman suuta"</string>
+    <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Naama ja suumaski"</string>
+    <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Virnistävä kissan naama, silmät sirrillään"</string>
+    <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Kissan naama ja ilon kyyneleet"</string>
+    <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Hymyilevä kissan naama, suu auki"</string>
+    <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Hymyilevä kissan naama, sydämen muotoiset silmät"</string>
+    <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Kissan naama, kuivakka hymy"</string>
+    <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Kissan naama, pusuhuulet ja silmät kiinni"</string>
+    <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Mököttävä kissan naama"</string>
+    <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Itkevä kissan naama"</string>
+    <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Uupunut kissan naama"</string>
+    <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Naama ja epäonnistumisen ele"</string>
+    <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Naama, OK-ele"</string>
+    <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Syvään kumartava henkilö"</string>
+    <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Silmänsä peittänyt apina"</string>
+    <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Korvansa peittänyt apina"</string>
+    <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Suunsa peittänyt apina"</string>
+    <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Iloinen henkilö yksi käsi pystyssä"</string>
+    <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Juhliva henkilö molemmat kädet pystyssä"</string>
+    <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Henkilö otsa kurtussa"</string>
+    <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Henkilö ja mököttävä ilme"</string>
+    <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Henkilö, jolla kämmenet yhdessä"</string>
+    <string name="spoken_emoji_1F680" msgid="513263736012689059">"Raketti"</string>
+    <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Helikopteri"</string>
+    <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Höyryveturi"</string>
+    <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Junanvaunu"</string>
+    <string name="spoken_emoji_1F684" msgid="346396777356203608">"Pikajuna"</string>
+    <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Luotijuna"</string>
+    <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Juna"</string>
+    <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metro"</string>
+    <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Kevyt raideliikenne"</string>
+    <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Asema"</string>
+    <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Raitiovaunu"</string>
+    <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Raitiovaunun vaunu"</string>
+    <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Bussi"</string>
+    <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Bussi edestä"</string>
+    <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Johdinauto"</string>
+    <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Bussipysäkki"</string>
+    <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Pikkubussi"</string>
+    <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulanssi"</string>
+    <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Paloauto"</string>
+    <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Poliisiauto"</string>
+    <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Poliisiauto edestä"</string>
+    <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Taksi"</string>
+    <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Taksi edestä"</string>
+    <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Auto"</string>
+    <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Auto edestä"</string>
+    <string name="spoken_emoji_1F699" msgid="630317052666590607">"Maastoauto"</string>
+    <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Kuorma-auto"</string>
+    <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Kuorma-auto"</string>
+    <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Traktori"</string>
+    <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Yksiraiteinen rautatie"</string>
+    <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Vuoristojuna"</string>
+    <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Riippuva rautatie"</string>
+    <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Köysirata"</string>
+    <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Köysirata"</string>
+    <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Laiva"</string>
+    <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Soutuvene"</string>
+    <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Pikavene"</string>
+    <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Vaakasuuntaiset liikennevalot"</string>
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Pystysuuntaiset liikennevalot"</string>
+    <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Rakennustyömaan merkki"</string>
+    <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Poliisiauton hälytysvalo"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Kolmiolippu"</string>
+    <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Ovi"</string>
+    <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Kulku kielletty -merkki"</string>
+    <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Tupakointisymboli"</string>
+    <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Tupakointi kielletty"</string>
+    <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Roskat roskakoriin -symboli"</string>
+    <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Älä roskaa -symboli"</string>
+    <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Juomaveden symboli"</string>
+    <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Juomakelvottoman veden symboli"</string>
+    <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Polkupyörä"</string>
+    <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Pyöräily kielletty"</string>
+    <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Pyöräilijä"</string>
+    <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Maastopyöräilijä"</string>
+    <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Jalankulkija"</string>
+    <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Jalankulku kieletty"</string>
+    <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Lapsia-varoitusmerkki"</string>
+    <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Miehen symboli"</string>
+    <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Naisen symboli"</string>
+    <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"WC"</string>
+    <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Vauvan symboli"</string>
+    <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"WC"</string>
+    <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"WC"</string>
+    <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Suihku"</string>
+    <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Kylpy"</string>
+    <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Kylpyamme"</string>
+    <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Passintarkastus"</string>
+    <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Tulli"</string>
+    <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Matkatavaroiden nouto"</string>
+    <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Matkatavaroiden säilytys"</string>
+</resources>
diff --git a/java/res/values-fi/strings-talkback-descriptions.xml b/java/res/values-fi/strings-talkback-descriptions.xml
index b12b742..ffc7eef 100644
--- a/java/res/values-fi/strings-talkback-descriptions.xml
+++ b/java/res/values-fi/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Paikat"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbolit"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Hymiöt"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index 756684a..9ccc8c3 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Syöttövalinnat"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Tutkimuslokin komennot"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Hae yht.tietojen nimiä"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Oikeinkirjoituksen tarkistus käyttää yhteystietojasi."</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Käytä värinää näppäimiä painettaessa"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Syöttökielet"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Tallenna koskettamalla uudelleen"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Sanakirja saatavilla"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Ota käyttäjäpalaute käyttöön"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Auta parantamaan tätä syöttötavan muokkausohjelmaa lähettämällä automaattisesti käyttötietoja ja kaatumisraportteja."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Näppäimistöteema"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"englanti (Iso-Britannia)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"englanti (Yhdysvallat)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Ota käyttöön"</string>
     <string name="not_now" msgid="6172462888202790482">"Ei nyt"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Syöttötyyli on jo olemassa: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Käytettävyystutkimustila"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Pitkän painalluksen viive"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Painalluksen värinän kesto"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Näppäinpainalluksen äänenvoim."</string>
diff --git a/java/res/values-fr-rCA/strings-action-keys.xml b/java/res/values-fr-rCA/strings-action-keys.xml
index bb5568e..b35dd61 100644
--- a/java/res/values-fr-rCA/strings-action-keys.xml
+++ b/java/res/values-fr-rCA/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Préc."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Term."</string>
     <string name="label_send_key" msgid="482252074224462163">"Env."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Att."</string>
 </resources>
diff --git a/java/res/values-fr-rCA/strings-talkback-descriptions.xml b/java/res/values-fr-rCA/strings-talkback-descriptions.xml
index 7f9eaaa..2ddffc8 100644
--- a/java/res/values-fr-rCA/strings-talkback-descriptions.xml
+++ b/java/res/values-fr-rCA/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Lieux"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboles"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Émoticônes"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-fr-rCA/strings.xml b/java/res/values-fr-rCA/strings.xml
index 5b13081..fa43047 100644
--- a/java/res/values-fr-rCA/strings.xml
+++ b/java/res/values-fr-rCA/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Options de saisie"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Commandes journaux rech."</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Rechercher noms contacts"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Correcteur orthographique utilise entrées de liste de contacts."</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrer à chaque touche"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Langues de saisie"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Appuyer de nouveau pour enregistrer"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Dictionnaire disponible"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Autoriser les commentaires des utilisateurs"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Contribuer à l\'amélioration de cet éditeur du mode de saisie grâce à l\'envoi automatique de statistiques d\'utilisation et de rapports d\'erreur"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Thème du clavier"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Anglais (britannique)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Anglais (États-Unis)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Activer"</string>
     <string name="not_now" msgid="6172462888202790482">"Pas maintenant"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Le style de saisie suivant existe déjà : <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>."</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode d\'étude de l\'utilisabilité"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Délai appui prolongé sur touche"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durée vibration press. touche"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume pression de touche"</string>
diff --git a/java/res/values-fr/strings-action-keys.xml b/java/res/values-fr/strings-action-keys.xml
index 1c36552..e69351c 100644
--- a/java/res/values-fr/strings-action-keys.xml
+++ b/java/res/values-fr/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Préc."</string>
     <string name="label_done_key" msgid="7564866296502630852">"OK"</string>
     <string name="label_send_key" msgid="482252074224462163">"Envoyer"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Attente"</string>
 </resources>
diff --git a/java/res/values-fr/strings-talkback-descriptions.xml b/java/res/values-fr/strings-talkback-descriptions.xml
index 97f5c6c..d0b5c3b 100644
--- a/java/res/values-fr/strings-talkback-descriptions.xml
+++ b/java/res/values-fr/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Lieux"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboles"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Émoticônes"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 1bb8567..0fa8e63 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Options de saisie"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Commandes journaux rech."</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Rechercher noms contacts"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Correcteur orthographique utilise entrées de liste de contacts."</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrer à chaque touche"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Langues de saisie"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Appuyer de nouveau pour enregistrer"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Dictionnaire disponible"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Autoriser les commentaires des utilisateurs"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Contribuer à l\'amélioration de cet éditeur du mode de saisie grâce à l\'envoi automatique de statistiques d\'utilisation et de rapports d\'erreur"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Thème du clavier"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Anglais (Royaume-Uni)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Anglais (États-Unis)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Activer"</string>
     <string name="not_now" msgid="6172462888202790482">"Pas maintenant"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Le style de saisie suivant existe déjà : <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>."</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode d\'étude de l\'utilisabilité"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Délai appui prolongé sur touche"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durée vibration press. touche"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume son pression de touche"</string>
diff --git a/java/res/values-hi/strings-action-keys.xml b/java/res/values-hi/strings-action-keys.xml
index 92cb194..a904343 100644
--- a/java/res/values-hi/strings-action-keys.xml
+++ b/java/res/values-hi/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"पिछला"</string>
     <string name="label_done_key" msgid="7564866296502630852">"पूर्ण"</string>
     <string name="label_send_key" msgid="482252074224462163">"भेजें"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"रोकें"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"प्रतीक्षा करें"</string>
 </resources>
diff --git a/java/res/values-hi/strings-talkback-descriptions.xml b/java/res/values-hi/strings-talkback-descriptions.xml
index 39e53ad..582314e 100644
--- a/java/res/values-hi/strings-talkback-descriptions.xml
+++ b/java/res/values-hi/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"स्थान"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"प्रतीक"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"इमोटिकॉन्स"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index 3129d86..cb1ad60 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"इनपुट विकल्‍प"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"लॉग आदेशों का शोध करें"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"संपर्क नामों को खोजें"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"वर्तनी परीक्षक आपकी संपर्क सूची की प्रविष्टियों का उपयोग करता है"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"कुंजी दबाने पर कंपन करता है"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"इनपुट भाषाएं"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"सहेजने के लिए पुन: स्‍पर्श करें"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"शब्‍दकोश उपलब्‍ध है"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"उपयोगकर्ता फ़ीडबैक सक्षम करें"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"उपयोग के आंकड़े और क्रैश रिपोर्ट अपने आप भेजकर इस इनपुट पद्धति संपादक को बेहतर बनाने में सहायता करें."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"कीबोर्ड थीम"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"अंग्रेज़ी (यूके)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"अंग्रेज़ी (यूएस)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"सक्षम करें"</string>
     <string name="not_now" msgid="6172462888202790482">"अभी नहीं"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"ऐसी ही इनपुट शैली पहले से मौजूद है: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"उपयोगिता अध्ययन मोड"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"कुंजी को देर तक दबाने का विलंब"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"कुंजी-स्पर्श कंपन अवधि"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"कुंजी-स्पर्श ध्वनि आवाज़"</string>
diff --git a/java/res/values-hr/strings-action-keys.xml b/java/res/values-hr/strings-action-keys.xml
index 564f703..c13da18 100644
--- a/java/res/values-hr/strings-action-keys.xml
+++ b/java/res/values-hr/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Pret."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Got."</string>
     <string name="label_send_key" msgid="482252074224462163">"Poš."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pauz."</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Čekaj"</string>
 </resources>
diff --git a/java/res/values-hr/strings-talkback-descriptions.xml b/java/res/values-hr/strings-talkback-descriptions.xml
index c3a2da0..75d1684 100644
--- a/java/res/values-hr/strings-talkback-descriptions.xml
+++ b/java/res/values-hr/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Mjesta"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboli"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikoni"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index 0882faa..14e408f 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opcije ulaza"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Istraživanje naredbi dnevnika"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Potražite imena kontakata"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Provjera pravopisa upotrebljava unose iz vašeg popisa kontakata"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibracija pri pritisku na tipku"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Jezici unosa"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Dodirnite ponovo za spremanje"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Rječnik je dostupan"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Omogući korisničke povratne informacije"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Pomozite u poboljšanju ovog uređivača načina unosa automatskim slanjem statistike upotrebe i izvješća o padu programa"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema tipkovnice"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Engleski (UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Engleski (SAD)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Omogući"</string>
     <string name="not_now" msgid="6172462888202790482">"Ne sada"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Već postoji isti stil unosa: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Način studije upotrebljivosti"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Odgoda dugog pritiska tipke"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Trajanje vibracije pritiska"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Glasnoća pritiska tipke"</string>
diff --git a/java/res/values-hu/strings-action-keys.xml b/java/res/values-hu/strings-action-keys.xml
index 257f30f..94445f5 100644
--- a/java/res/values-hu/strings-action-keys.xml
+++ b/java/res/values-hu/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Előző"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Kész"</string>
     <string name="label_send_key" msgid="482252074224462163">"Küld"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Állj"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Vár"</string>
 </resources>
diff --git a/java/res/values-hu/strings-talkback-descriptions.xml b/java/res/values-hu/strings-talkback-descriptions.xml
index 2bf2a8a..a03895b 100644
--- a/java/res/values-hu/strings-talkback-descriptions.xml
+++ b/java/res/values-hu/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Helyek"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Szimbólumok"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Hangulatjelek"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index 8a953ab..4c751b7 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Beviteli beállítások"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Naplózási parancsok"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Névjegyek keresése"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"A helyesírás-ellenőrző használja a névjegyek bejegyzéseit"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Rezgés gombnyomásra"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Beviteli nyelvek"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Érintse meg újból a mentéshez"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Van elérhető szótár"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Felhasználói visszajelzés engedélyezése"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Segíthet a beviteli módszer szerkesztőjének javításában, ha engedélyezi a használati statisztikák és a hibajelentések automatikus elküldését."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Billentyűzettéma"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"angol (brit)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"angol (amerikai)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Engedélyezés"</string>
     <string name="not_now" msgid="6172462888202790482">"Most nem"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ugyanez a bemenetstílus már létezik: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Használhatósági teszt"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Hosszú nyomás késleltetése"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Gombnyomás rezgési időtartama"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Gombnyomás hangereje"</string>
diff --git a/java/res/values-hy-rAM/strings-action-keys.xml b/java/res/values-hy-rAM/strings-action-keys.xml
index af9dd5d..574ae5a 100644
--- a/java/res/values-hy-rAM/strings-action-keys.xml
+++ b/java/res/values-hy-rAM/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Նախորդը"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Պատրաստ է"</string>
     <string name="label_send_key" msgid="482252074224462163">"Ուղարկել"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Դադարեցնել"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Սպասել"</string>
 </resources>
diff --git a/java/res/values-hy-rAM/strings-emoji-descriptions.xml b/java/res/values-hy-rAM/strings-emoji-descriptions.xml
new file mode 100644
index 0000000..21a439f
--- /dev/null
+++ b/java/res/values-hy-rAM/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Հեղինակային իրավունքի նշան"</string>
+    <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Գրանցված ապրանքանիշի նշան"</string>
+    <string name="spoken_emoji_203C" msgid="153340916701508663">"Կրկնակի բացականչական նշան"</string>
+    <string name="spoken_emoji_2049" msgid="4877256448299555371">"Բացականչական հարցական նշան"</string>
+    <string name="spoken_emoji_2122" msgid="9188440722954720429">"Ապրանքանշանի նշան"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"Տեղեկատվական աղբյուր"</string>
+    <string name="spoken_emoji_2194" msgid="8055202727034946680">"Ձախ-աջ սլաք"</string>
+    <string name="spoken_emoji_2195" msgid="8028122253301087407">"Վեր-վար սլաք"</string>
+    <string name="spoken_emoji_2196" msgid="4019164898967854363">"Սլաք դեպի հյուսիս-արևմուտք"</string>
+    <string name="spoken_emoji_2197" msgid="4255723717709017801">"Սլաք դեպի հյուսիս-արևելք"</string>
+    <string name="spoken_emoji_2198" msgid="1452063451313622090">"Սլաք դեպի հարավ-արևելք"</string>
+    <string name="spoken_emoji_2199" msgid="6942722693368807849">"Սլաք դեպի հարավ-արևմուտք"</string>
+    <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Կեռ ձախ սլաք"</string>
+    <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Կեռ աջ սլաք"</string>
+    <string name="spoken_emoji_231A" msgid="6751448803233874993">"Ժամացույց"</string>
+    <string name="spoken_emoji_231B" msgid="5956428809948426182">"Ավազի ժամացույց"</string>
+    <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Դեպի աջ ուղղված սև կրկնակի եռանկյուն"</string>
+    <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Դեպի ձախ ուղղված սև կրկնակի եռանկյուն"</string>
+    <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Դեպի վեր ուղղված սև կրկնակի եռանկյուն"</string>
+    <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Դեպի վար ուղղված սև կրկնակի եռանկյուն"</string>
+    <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Զարթուցիչ"</string>
+    <string name="spoken_emoji_23F3" msgid="166900119581024371">"Հոսող ավազով ժամացույց"</string>
+    <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Շրջանաձև լատիներեն մեծատառ m"</string>
+    <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Փոքր սև քառակուսի"</string>
+    <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Փոքր սպիտակ քառակուսի"</string>
+    <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Դեպի աջ ուղղված սև եռանկյուն"</string>
+    <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Դեպի ձախ ուղղված սև եռանկյուն"</string>
+    <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Միջին սպիտակ քառակուսի"</string>
+    <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Միջին սև քառակուսի"</string>
+    <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Միջին փոքր սպիտակ քառակուսի"</string>
+    <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Միջին փոքր սև քառակուսի"</string>
+    <string name="spoken_emoji_2600" msgid="2272722634618990413">"Սև արև` ճառագայթներով"</string>
+    <string name="spoken_emoji_2601" msgid="6205136889311537150">"Ամպ"</string>
+    <string name="spoken_emoji_260E" msgid="8670395193046424238">"Սև հեռախոս"</string>
+    <string name="spoken_emoji_2611" msgid="4530550203347054611">"Քվեատուփ` նշանով"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"Անձրևանոց` անձրևի կաթիլներով"</string>
+    <string name="spoken_emoji_2615" msgid="3320562382424018588">"Տաք ըմպելիք"</string>
+    <string name="spoken_emoji_261D" msgid="4690554173549768467">"Սպիտակ դեպի վեր ուղղված դասիչ"</string>
+    <string name="spoken_emoji_263A" msgid="3170094381521989300">"Սպիտակ ժպտացող դեմք"</string>
+    <string name="spoken_emoji_2648" msgid="4621241062667020673">"Խոյ"</string>
+    <string name="spoken_emoji_2649" msgid="7694461245947059086">"Ցուլ"</string>
+    <string name="spoken_emoji_264A" msgid="1258074605878705030">"Երկվորյակ"</string>
+    <string name="spoken_emoji_264B" msgid="4409219914377810956">"Խեցգետին"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"Առյուծ"</string>
+    <string name="spoken_emoji_264D" msgid="1504758945499854018">"Կույս"</string>
+    <string name="spoken_emoji_264E" msgid="2354847104530633519">"Կշեռք"</string>
+    <string name="spoken_emoji_264F" msgid="5822933280406416112">"Կարիճ"</string>
+    <string name="spoken_emoji_2650" msgid="4832481156714796163">"Աղեղնավոր"</string>
+    <string name="spoken_emoji_2651" msgid="840953134601595090">"Այծեղջյուր"</string>
+    <string name="spoken_emoji_2652" msgid="3586925968718775281">"Ջրհոս"</string>
+    <string name="spoken_emoji_2653" msgid="8420547731496254492">"Ձկներ"</string>
+    <string name="spoken_emoji_2660" msgid="4541170554542412536">"Սև ագռավ"</string>
+    <string name="spoken_emoji_2663" msgid="3669352721942285724">"Սև խաչ"</string>
+    <string name="spoken_emoji_2665" msgid="6347941599683765843">"Սև սիրտ"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"Սև աղյուս"</string>
+    <string name="spoken_emoji_2668" msgid="7063148281053820386">"Տաք աղբյուրներ"</string>
+    <string name="spoken_emoji_267B" msgid="21716857176812762">"Սև վերամշակման նշան"</string>
+    <string name="spoken_emoji_267F" msgid="8833496533226475443">"Սայլակի նշան"</string>
+    <string name="spoken_emoji_2693" msgid="7443148847598433088">"Խարիսխ"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Զգուշացման նշան"</string>
+    <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Բարձր լարման նշան"</string>
+    <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Միջին սպիտակ շրջան"</string>
+    <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Միջին սև շրջան"</string>
+    <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Ֆուտբոլի գնդակ"</string>
+    <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Բեյսբոլ"</string>
+    <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Առանց ձյան ձնեմարդ"</string>
+    <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Արևն ամպի ետևում"</string>
+    <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Օձակալ"</string>
+    <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Մուտք չկա"</string>
+    <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Եկեղեցի"</string>
+    <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Շատրվան"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Դրոշը փոսում"</string>
+    <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Առագաստանավ"</string>
+    <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Վրան"</string>
+    <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Վառելիքի պոմպ"</string>
+    <string name="spoken_emoji_2702" msgid="4005741160717451912">"Սև մկրատ"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"Սպիտակ խոշոր ստուգանիշ"</string>
+    <string name="spoken_emoji_2708" msgid="7153840886849268988">"Ինքնաթիռ"</string>
+    <string name="spoken_emoji_2709" msgid="2217319160724311369">"Ծրար"</string>
+    <string name="spoken_emoji_270A" msgid="508347232762319473">"Բարձրացրած բռունցք"</string>
+    <string name="spoken_emoji_270B" msgid="6640562128327753423">"Բարձրացրած ձեռք"</string>
+    <string name="spoken_emoji_270C" msgid="1344288035704944581">"Հաղթանշան"</string>
+    <string name="spoken_emoji_270F" msgid="6108251586067318718">"Մատիտ"</string>
+    <string name="spoken_emoji_2712" msgid="6320544535087710482">"Սև գրչածայր"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"Խոշոր ստուգանիշ"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"Խոշոր բազմապատկում x"</string>
+    <string name="spoken_emoji_2728" msgid="5650330815808691881">"Կայծեր"</string>
+    <string name="spoken_emoji_2733" msgid="8915809595141157327">"Ութանկյուն աստղանիշ"</string>
+    <string name="spoken_emoji_2734" msgid="4846583547980754332">"Ութ կետով սև աստղ"</string>
+    <string name="spoken_emoji_2744" msgid="4350636647760161042">"Ձյան փաթիլ"</string>
+    <string name="spoken_emoji_2747" msgid="3718282973916474455">"Կայծ"</string>
+    <string name="spoken_emoji_274C" msgid="2752145886733295314">"Խաչանշան"</string>
+    <string name="spoken_emoji_274E" msgid="4262918689871098338">"Բացասական քառակուսի խաչանշան"</string>
+    <string name="spoken_emoji_2753" msgid="6935897159942119808">"Սև հարցական նշաններով նախշազարդ"</string>
+    <string name="spoken_emoji_2754" msgid="7277504915105532954">"Սպիտակ հարցական նշաններով նախշազարդ"</string>
+    <string name="spoken_emoji_2755" msgid="6853076969826960210">"Սպիտակ բացականչական նշաններով նախշազարդ"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"Խոշոր բացականչական նշան"</string>
+    <string name="spoken_emoji_2764" msgid="4214257843609432167">"Սև սիրտ"</string>
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"Խոշոր գումարման նշան"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"Խոշոր հանման նշան"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"Խոշոր բաժանման նշան"</string>
+    <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Սև դեպի աջ սլաք"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"Խուճուճ հանգույց"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Կրկնակի խուճուճ հանգույց"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"Դեպի աջ ուղղված, ապա դեպի վեր ծռված սլաք"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"Դեպի աջ ուղղված, ապա դեպի վար ծռված սլաք"</string>
+    <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Դեպի ձախ սև սլաք"</string>
+    <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Դեպի վեր սև սլաք"</string>
+    <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Դեպի վար սև սլաք"</string>
+    <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Մեծ սև քառակուսի"</string>
+    <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Մեծ սպիտակ քառակուսի"</string>
+    <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Միջին սպիտակ քառակուսի"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Խոշոր շրջան"</string>
+    <string name="spoken_emoji_3030" msgid="4609172241893565639">"Ալիքաձև գծիկ"</string>
+    <string name="spoken_emoji_303D" msgid="2545833934975907505">"Երաժշտական փոփոխականի նշան"</string>
+    <string name="spoken_emoji_3297" msgid="928912923628973800">"Շնորհավորանքի շրջանաձև խորհրդանշան"</string>
+    <string name="spoken_emoji_3299" msgid="3930347573693668426">"Գաղտնիքի շրջանաձև խորհրդանշան"</string>
+    <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Մահջոնգի սալիկ՝ կարմիր վիշապով"</string>
+    <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Սև ջոկեր խաղաքարտ"</string>
+    <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Արյան Ա խումբ"</string>
+    <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Արյան Բ խումբ"</string>
+    <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Արյան Օ խումբ"</string>
+    <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Ավտոկայանատեղի"</string>
+    <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Արյան ԱԲ խումբ"</string>
+    <string name="spoken_emoji_1F191" msgid="5386969264431429221">"Քառակուսի CL"</string>
+    <string name="spoken_emoji_1F192" msgid="8324226436829162496">"Քառակուսի COOL"</string>
+    <string name="spoken_emoji_1F193" msgid="4731758603321515364">"Քառակուսի FREE"</string>
+    <string name="spoken_emoji_1F194" msgid="4903128609556175887">"Քառակուսի ID"</string>
+    <string name="spoken_emoji_1F195" msgid="1433142500411060924">"Քառակուսի NEW"</string>
+    <string name="spoken_emoji_1F196" msgid="8825160701159634202">"Քառակուսի NG"</string>
+    <string name="spoken_emoji_1F197" msgid="7841079241554176535">"Քառակուսի OK"</string>
+    <string name="spoken_emoji_1F198" msgid="7020298909426960622">"Քառակուսի SOS"</string>
+    <string name="spoken_emoji_1F199" msgid="5971252667136235630">"Քառակուսի UP բացականչական նշանով"</string>
+    <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"Քառակուսի vs"</string>
+    <string name="spoken_emoji_1F201" msgid="7000490044681139002">"Քառակուսի Կատականա այստեղ"</string>
+    <string name="spoken_emoji_1F202" msgid="8560906958695043947">"Քառակուսի Կատականա ծառայություն"</string>
+    <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Քառակուսի խորհրդանշան անվճար"</string>
+    <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Քառակուսի խորհրդանշան պահված տեղ"</string>
+    <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Քառակուսի խորհրդանշան արգելում"</string>
+    <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Քառակուսի խորհրդանշան թափուր աշխատատեղ"</string>
+    <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Քառակուսի խորհրդանշան ընդունված"</string>
+    <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Քառակուսի խորհրդանշան լրիվ զբաղվածություն"</string>
+    <string name="spoken_emoji_1F236" msgid="879755752069393034">"Քառակուսի խորհրդանշան վճարված"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Քառակուսի խորհրդանշան ամսական"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Քառակուսի խորհրդանշան դիմում"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Քառակուսի խորհրդանշան զեղչ"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Քառակուսի խորհրդանշան աշխատում է"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Շրջանաձև խորհրդանշան առավելություն"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Շրջանաձև խորհրդանշան ընդունում"</string>
+    <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Ցիկլոն"</string>
+    <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Մառախլապատ"</string>
+    <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Փակ անձրևանոց"</string>
+    <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Աստղազարդ գիշեր"</string>
+    <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Արևածագը լեռներում"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Արևածագ"</string>
+    <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Քաղաքը մթնշաղում"</string>
+    <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Մայրամուտը շենքերի վրա"</string>
+    <string name="spoken_emoji_1F308" msgid="688704703985173377">"Ծիածան"</string>
+    <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Կամուրջը գիշերը"</string>
+    <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Ծովի ալիք"</string>
+    <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Հրաբուխ"</string>
+    <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Ծիր կաթին"</string>
+    <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Երկրագունդը՝ Եվրոպա-Աֆրիկա"</string>
+    <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Երկրագունդը՝ Ամերիկաներ"</string>
+    <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Երկրագունդը՝ Ավստրալիա"</string>
+    <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Երկրագունդը միջօրեականներով"</string>
+    <string name="spoken_emoji_1F311" msgid="623906380914895542">"Նորալուսնի նշան"</string>
+    <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Աճող կիսալուսնի նշան"</string>
+    <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Լուսնի առաջին քառորդի նշան"</string>
+    <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Աճող ուռուցիկ լուսնի նշան"</string>
+    <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Լիալուսնի նշան"</string>
+    <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Փոքրացող ուռուցիկ լուսնի նշան"</string>
+    <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Լուսնի վերջին քառորդի նշան"</string>
+    <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Փոքրացող կիսալուսնի նշան"</string>
+    <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Կիսալուսին"</string>
+    <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Դեմքով նորալուսին"</string>
+    <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Առաջին քառորդ լուսին՝ դեմքով"</string>
+    <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Վերջին քառորդ լուսին՝ դեմքով"</string>
+    <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Դեմքով լիալուսին"</string>
+    <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Դեմքով արև"</string>
+    <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Փայլուն աստղ"</string>
+    <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Կրակող աստղ"</string>
+    <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Շագանակ"</string>
+    <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Սածիլ"</string>
+    <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Մշտադալար ծառ"</string>
+    <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Տերևաշատ ծառ"</string>
+    <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Պալմա"</string>
+    <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Կակտուս"</string>
+    <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Կակաչ"</string>
+    <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Բալենու ծաղիկ"</string>
+    <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Վարդ"</string>
+    <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Հիբիսկուս"</string>
+    <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Արևածաղիկ"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Ծաղիկ"</string>
+    <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Եգիպտացորեն"</string>
+    <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Բրինձ"</string>
+    <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Խոտաբույս"</string>
+    <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Քառատերև երեքնուկ"</string>
+    <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Թխկու տերև"</string>
+    <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Թափված տերև"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Քամուց թռչող տերև"</string>
+    <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Սունկ"</string>
+    <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Լոլիկ"</string>
+    <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Սմբուկ"</string>
+    <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Խաղող"</string>
+    <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Սեխ"</string>
+    <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Ձմերուկ"</string>
+    <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Մանդարին"</string>
+    <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Կիտրոն"</string>
+    <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Բանան"</string>
+    <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Արքայախնձոր"</string>
+    <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Կարմիր խնձոր"</string>
+    <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Կանաչ խնձոր"</string>
+    <string name="spoken_emoji_1F350" msgid="625802980159197701">"Տանձ"</string>
+    <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Դեղձ"</string>
+    <string name="spoken_emoji_1F352" msgid="965600953360182635">"Բալ"</string>
+    <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Ելակ"</string>
+    <string name="spoken_emoji_1F354" msgid="45162285238888494">"Համբուրգեր"</string>
+    <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Պիցցայի կտոր"</string>
+    <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Ոսկորով միս"</string>
+    <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Հավի բուդ"</string>
+    <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Բրնձի կրեկեր"</string>
+    <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Բրնձի կլորակ"</string>
+    <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Եփած բրինձ"</string>
+    <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Քարի և բրինձ"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Գոլորշիացող բաժակ"</string>
+    <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Սպագետտի"</string>
+    <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Հաց"</string>
+    <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Տապակած կարտոֆիլ"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Տապակած քաղցր կարտոֆիլ"</string>
+    <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Դանգո"</string>
+    <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Օդեն"</string>
+    <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Սուշի"</string>
+    <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Տապակած ծովախեցգետին"</string>
+    <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Ձկան տորթ՝ օղակաձև ձևավորմամբ"</string>
+    <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Լցնովի պաղպաղակ"</string>
+    <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Սառցե դեսերտ"</string>
+    <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Պաղպաղակ"</string>
+    <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Դոնաթ"</string>
+    <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Թխվածքաբլիթ"</string>
+    <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Շոկոլադի սալիկ"</string>
+    <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Կոնֆետ"</string>
+    <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Սառնաշաքար կոնֆետ"</string>
+    <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Եփովի կրեմ"</string>
+    <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Մեղրանոթ"</string>
+    <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Տորթի կտոր"</string>
+    <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Բենտոյով տուփ"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Սնունդով լի ափսե"</string>
+    <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Խոհարարություն"</string>
+    <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Դանակ և պատառաքաղ"</string>
+    <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Թեյի անպոչ բաժակ"</string>
+    <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Սակեի շիշ և գավաթ"</string>
+    <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Գինու գավաթ"</string>
+    <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Կոկտեյլի բաժակ"</string>
+    <string name="spoken_emoji_1F379" msgid="790581290787943325">"Արևադարձային խմիչք"</string>
+    <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Գարեջրի բաժակ"</string>
+    <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Զրնգացող գարեջրի բաժակներ"</string>
+    <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Մանկական շիշ"</string>
+    <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Ժապավեն"</string>
+    <string name="spoken_emoji_1F381" msgid="614180683680675444">"Փաթեթավորված նվեր"</string>
+    <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Ծննդյան տորթ"</string>
+    <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Դդմի լապտեր"</string>
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Տոնածառ"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Ձմեռ պապ"</string>
+    <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Հրավառություն"</string>
+    <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Բենգալյան կրակ"</string>
+    <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Փուչիկ"</string>
+    <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Ճայթուկ"</string>
+    <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Կոնֆետտի գնդակ"</string>
+    <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Տանաբատա ծառ"</string>
+    <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Հատվող դրոշներ"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Սոճու ձևավորում"</string>
+    <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Ճապոնական տիկնիկներ"</string>
+    <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Կարպ նավադրոշ"</string>
+    <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Քամու երգ"</string>
+    <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Լուսնի դիտման արարողություն"</string>
+    <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Դպրոցական պայուսակ"</string>
+    <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Ավարտական ​​գլխարկ"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Ձի կարուսել"</string>
+    <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Սատանայի անիվ"</string>
+    <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Ուրախ սարեր"</string>
+    <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Ձկնորսական կարթ և ձուկ"</string>
+    <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Բարձրախոս"</string>
+    <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Տեսախցիկ"</string>
+    <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Կինոթատրոն"</string>
+    <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Ականջակալ"</string>
+    <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Ներկապնակ"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Ցիլինդր"</string>
+    <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Կրկեսային վրան"</string>
+    <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Տոմս"</string>
+    <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Ծափափեղկ"</string>
+    <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Կատարողական արվեստ"</string>
+    <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Տեսախաղ"</string>
+    <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Ուղղակի հարված"</string>
+    <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Խաղասարք"</string>
+    <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Բիլիարդ"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Խաղազառ"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Բոուլինգ"</string>
+    <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Ծաղկով խաղաքարտեր"</string>
+    <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Երաժշտական ձայնանիշ"</string>
+    <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Մի քանի երաժշտական ձայնանիշ"</string>
+    <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Սաքսոֆոն"</string>
+    <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Կիթառ"</string>
+    <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Երաժշտական ստեղնաշար"</string>
+    <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Շեփոր"</string>
+    <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Ջութակ"</string>
+    <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Նոտագրում"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Վազքի վերնաշապիկ"</string>
+    <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Թենիսի թիակ և գնդակ"</string>
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Դահուկ և դահուկի կոշիկ"</string>
+    <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Բասկետբոլի գնդակ և զամբյուղ"</string>
+    <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Վերջնակետի դրոշ"</string>
+    <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Ձնատախտակորդ"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Վազորդ"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Ալեսահորդ"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Մրցանակ"</string>
+    <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Ձիարշավ"</string>
+    <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Ամերիկյան ֆուտբոլ"</string>
+    <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Ռեգբի"</string>
+    <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Լողորդ"</string>
+    <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Բնակելի շենք"</string>
+    <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Այգով տուն"</string>
+    <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Գրասենյակային շենք"</string>
+    <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Ճապոնական փոստատուն"</string>
+    <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Եվրոպական փոստատուն"</string>
+    <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Հիվանդանոց"</string>
+    <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Բանկ"</string>
+    <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Բանկոմատ"</string>
+    <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Հյուրանոց"</string>
+    <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Սիրո հյուրանոց"</string>
+    <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Պարենային խանութ"</string>
+    <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Դպրոց"</string>
+    <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Հանրախանութ"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Գործարան"</string>
+    <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Ճապոնական լապտեր"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Ճապոնական ամրոց"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Եվրոպական ամրոց"</string>
+    <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Առնետ"</string>
+    <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Մուկ"</string>
+    <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Եզ"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Գոմեշ"</string>
+    <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Կով"</string>
+    <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Ընձառյուծ"</string>
+    <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Ճագար"</string>
+    <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Կատու"</string>
+    <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Վիշապ"</string>
+    <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Կոկորդիլոս"</string>
+    <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Կետ"</string>
+    <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Խխունջ"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Օձ"</string>
+    <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Ձի"</string>
+    <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Խոյ"</string>
+    <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Այծ"</string>
+    <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Ոչխար"</string>
+    <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Կապիկ"</string>
+    <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Աքաղաղ"</string>
+    <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Հավ"</string>
+    <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Շուն"</string>
+    <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Խոզ"</string>
+    <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Վարազ"</string>
+    <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Փիղ"</string>
+    <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Ութոտնուկ"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Պարուրաձև խեցի"</string>
+    <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Բզեզ"</string>
+    <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Մրջյուն"</string>
+    <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Մեղու"</string>
+    <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Զատիկ"</string>
+    <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Ձուկ"</string>
+    <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Արևադարձային ձուկ"</string>
+    <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Գնդաձուկ"</string>
+    <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Կրիա"</string>
+    <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Թուխսի ճուտ"</string>
+    <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Ճուտիկ"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Դիմահայաց ճուտիկ"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Թռչուն"</string>
+    <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Պինգվին"</string>
+    <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Կոալա"</string>
+    <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Պուդել"</string>
+    <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Դրոմադեր ուղտ"</string>
+    <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Երկսապատանի ուղտ"</string>
+    <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Դելֆին"</string>
+    <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Մկան մռութ"</string>
+    <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Կովի մռութ"</string>
+    <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Վագրի մռութ"</string>
+    <string name="spoken_emoji_1F430" msgid="525492897063150160">"Ճագարի մռութ"</string>
+    <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Կատվի մռութ"</string>
+    <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Վիշապի մռութ"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Թռչող կետ"</string>
+    <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Ձիու մռութ"</string>
+    <string name="spoken_emoji_1F435" msgid="59199202683252958">"Կապիկի մռութ"</string>
+    <string name="spoken_emoji_1F436" msgid="340544719369009828">"Շան մռութ"</string>
+    <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Խոզի մռութ"</string>
+    <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Գորտի մռութ"</string>
+    <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Գերմանամկան դեմք"</string>
+    <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Գայլի մռութ"</string>
+    <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Արջի մռութ"</string>
+    <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Պանդայի մռութ"</string>
+    <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Խոզի քիթ"</string>
+    <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Թաթի հետքեր"</string>
+    <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Աչքեր"</string>
+    <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Ականջ"</string>
+    <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Քիթ"</string>
+    <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Բերան"</string>
+    <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Լեզու"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Վեր ուղղված սպիտակ ցուցամատ"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Վար ուղղված սպիտակ ցուցամատ"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Ձախ ուղղված սպիտակ ցուցամատ"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Աջ ուղղված սպիտակ ցուցամատ"</string>
+    <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Բռունցքի նշան"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Թափահարող ձեռքի նշան"</string>
+    <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Ok-ի նշան"</string>
+    <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Բութ մատները վեր նշան"</string>
+    <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Բութ մատները վար նշան"</string>
+    <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Ծափահարող ձեռքերի նշան"</string>
+    <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Բաց ափերով ձեռքերի նշան"</string>
+    <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Թագ"</string>
+    <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Կնոջ գլխարկ"</string>
+    <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Ակնոց"</string>
+    <string name="spoken_emoji_1F454" msgid="348469036193323252">"Փողկապ"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Շապիկ"</string>
+    <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Ջինս"</string>
+    <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Զգեստ"</string>
+    <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Կիմոնո"</string>
+    <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Բիկինի"</string>
+    <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Կնոջ հագուստ"</string>
+    <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Դրամապանակ"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Պայուսակ"</string>
+    <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Քսակ"</string>
+    <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Տղամարդու կոշիկ"</string>
+    <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Մարզակոշիկ"</string>
+    <string name="spoken_emoji_1F460" msgid="305863879170420855">"Բարձրակրունկ կոշիկ"</string>
+    <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Կնոջ սանդալներ"</string>
+    <string name="spoken_emoji_1F462" msgid="1722897795554863734">"Կնոջ երկարաճիտ կոշիկներ"</string>
+    <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Ոտնահետքեր"</string>
+    <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Կիսանդրու ուրվագիծ"</string>
+    <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Կիսանդրիների ուրվագիծ"</string>
+    <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Տղա"</string>
+    <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Աղջիկ"</string>
+    <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Տղամարդ"</string>
+    <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Կին"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Ընտանիք"</string>
+    <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Միացված ձեռքերով տղամարդ և կին"</string>
+    <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Միացված ձեռքերով երկու տղամարդ"</string>
+    <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Միացված ձեռքերով երկու կին"</string>
+    <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Ոստիկան"</string>
+    <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Նապաստակի ականջներով կին"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Քողով հարսնացու"</string>
+    <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Շիկահեր մարդ"</string>
+    <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Չինական գլխարկով տղամարդ"</string>
+    <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Գլխաշորով տղամարդ"</string>
+    <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Ծեր տղամարդ"</string>
+    <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Ծեր կին"</string>
+    <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Մանուկ"</string>
+    <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Շինարար"</string>
+    <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Արքայադուստր"</string>
+    <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Ճապոնական օգր"</string>
+    <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Ճապոնական գոբլին"</string>
+    <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Ուրվական"</string>
+    <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Մանուկ հրեշտակ"</string>
+    <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Այլմոլորակային"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Այլմոլորակային հրեշ"</string>
+    <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Սատանայի ճուտ"</string>
+    <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Գանգ"</string>
+    <string name="spoken_emoji_1F481" msgid="320408708521966893">"Տեղեկատու անձ"</string>
+    <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Պահնորդ"</string>
+    <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Պարող"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Շրթներկ"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Եղունգաներկ"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Դեմքի մերսում"</string>
+    <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Սանրվածք"</string>
+    <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Վարսավիրի նշան"</string>
+    <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Ներարկիչ"</string>
+    <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Հաբ"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Համբույրի նշան"</string>
+    <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Սիրային նամակ"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Մատանի"</string>
+    <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Թանկարժեք քար"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Համբույր"</string>
+    <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Ծաղկեփունջ"</string>
+    <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Զույգը սրտի մեջ"</string>
+    <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Հարսանիք"</string>
+    <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Բաբախող սիրտ"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Կոտրված սիրտ"</string>
+    <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Երկու սրտեր"</string>
+    <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Պսպղացող սիրտ"</string>
+    <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Աճող սիրտ"</string>
+    <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Խոցված սիրտ"</string>
+    <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Կապույտ սիրտ"</string>
+    <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Կանաչ սիրտ"</string>
+    <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Դեղին սիրտ"</string>
+    <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Մանուշակագույն սիրտ"</string>
+    <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Ժապավենով սիրտ"</string>
+    <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Միացող սրտեր"</string>
+    <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Սրտիկներով ձևավորում"</string>
+    <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Շեղանկյուն` կետիկով"</string>
+    <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Էլեկտրական լամպ"</string>
+    <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Ջղայնության նշան"</string>
+    <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Ռումբ"</string>
+    <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Քնի նշան"</string>
+    <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Բախման նշան"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Հոսող քրտինքի նշան"</string>
+    <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Կաթիլ"</string>
+    <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Գծիկի նշան"</string>
+    <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Կեղտի կույտ"</string>
+    <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Լարված երկգլուխ մկան"</string>
+    <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Գլխապտույտի նշան"</string>
+    <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Խոսքի փուչիկ"</string>
+    <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Մտքի փուչիկ"</string>
+    <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Սպիտակ ծաղիկ"</string>
+    <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Հարյուր միավորի նշան"</string>
+    <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Փողի քսակ"</string>
+    <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Արտարժույթի փոխանակում"</string>
+    <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Խոշոր դոլարի նշան"</string>
+    <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Վարկային քարտ"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Իենի նշանով թղթադրամ"</string>
+    <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Դոլարի նշանով թղթադրամ"</string>
+    <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Եվրոյի նշանով թղթադրամ"</string>
+    <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Ֆունտի նշանով թղթադրամ"</string>
+    <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Թևավոր թղթադրամ"</string>
+    <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Աճման միտումով և իենի նշանով գրաֆիկ"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Նստատեղ"</string>
+    <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Անհատական համակարգիչ"</string>
+    <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Թղթապանակ"</string>
+    <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Փոքր սկավառակ"</string>
+    <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Ճկուն սկավառակ"</string>
+    <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Օպտիկական սկավառակ"</string>
+    <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
+    <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Ֆայլերի թղթապանակ"</string>
+    <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Ֆայլերի բաց թղթապանակ"</string>
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Ոլորված ծայրով էջ"</string>
+    <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Թեքված էջ"</string>
+    <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Օրացույց"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Պոկվող էջերով օրացույց"</string>
+    <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Քարտային դասիչ"</string>
+    <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Աճման միտումով գրաֆիկ"</string>
+    <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Նվազման միտումով գրաֆիկ"</string>
+    <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Ձողային գրաֆիկ"</string>
+    <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Սեղմատախտակ"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Սևեռակ"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Կլոր սևեռակ"</string>
+    <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Ամրակ"</string>
+    <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Ուղիղ քանոն"</string>
+    <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Եռանկյուն քանոն"</string>
+    <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"Էջանիշ"</string>
+    <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Մատյան"</string>
+    <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Նոթատետր"</string>
+    <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Ձևավոր կազմով նոթատետր"</string>
+    <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Փակ գիրք"</string>
+    <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Բաց գիրք"</string>
+    <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Կանաչ գիրք"</string>
+    <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Կապույտ գիրք"</string>
+    <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Նարնջագույն գիրք"</string>
+    <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Գրքեր"</string>
+    <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Անվանաքարտ"</string>
+    <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Գալար"</string>
+    <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Հիշեցում"</string>
+    <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Լսափող"</string>
+    <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Փեյջեր"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Հեռապատճենի սարք"</string>
+    <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Արբանյակային ալեհավաք"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Հրապարակային բարձրախոս"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Ուրախ բարձրախոս"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Ելքային արկղ"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Մուտքային արկղ"</string>
+    <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Փաթեթ"</string>
+    <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Էլփոստի նշան"</string>
+    <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Մուտքային ծրար"</string>
+    <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Վերևից դեպի վար սլաքով ծրար"</string>
+    <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Իջեցված դրոշով փակ փոստարկղ"</string>
+    <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Բարձրացված դրոշով փակ փոստարկղ"</string>
+    <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Բարձրացված դրոշով փակ փոստարկղ"</string>
+    <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Իջեցված դրոշով բաց փոստարկղ"</string>
+    <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Փոստարկղ"</string>
+    <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Փոստային եղջյուր"</string>
+    <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Թերթ"</string>
+    <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Բջջային հեռախոս"</string>
+    <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Բջջային հեռախոս՝ ձախ կողմում դեպի վեր սլաքով"</string>
+    <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Թրթռոցի ռեժիմ"</string>
+    <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Բջջային հեռախոսը` անջատած"</string>
+    <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Բջջային հեռախոսներ չկան"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Ձողերով ալեհավաք"</string>
+    <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Ֆոտոխցիկ"</string>
+    <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Տեսախցիկ"</string>
+    <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Հեռուստատեսություն"</string>
+    <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Ռադիո"</string>
+    <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Տեսաժապավեն"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Պտտված դեպի աջ սլաքներ"</string>
+    <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Ժամացույցի սլաքի ուղղությամբ դեպի աջ և ձախ բաց շրջանաձև սլաքներ"</string>
+    <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Ժամացույցի սլաքի ուղղությամբ դեպի աջ և ձախ բաց շրջանաձև սլաքներ՝ շրջանաձև մեկ վերադրումով"</string>
+    <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Ժամացույցի սլաքի ուղղությամբ դեպի վար և վեր բաց շրջանաձև սլաքներ"</string>
+    <string name="spoken_emoji_1F504" msgid="708290317843535943">"Ժամացույցի սլաքի հակառակ ուղղությամբ դեպի վար և վեր բաց շրջանաձև սլաքներ"</string>
+    <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Ցածր պայծառության նշան"</string>
+    <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Բարձր պայծառության նշան"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Չեղարկման գծով բարձրախոս"</string>
+    <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Բարձրախոս"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Մեկ ձայնային ալիքով բարձրախոս"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Երեք ձայնային ալիքով բարձրախոս"</string>
+    <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Մարտկոց"</string>
+    <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Էլեկտրական խրոցակ"</string>
+    <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Ձախ թեքված խոշորացույց"</string>
+    <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Աջ թեքված խոշորացույց"</string>
+    <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Կողպեք և թանաքի գրիչ"</string>
+    <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Փակված կողպեք՝ բանալիով"</string>
+    <string name="spoken_emoji_1F511" msgid="262319867774655688">"Բանալի"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Կողպեք"</string>
+    <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Բաց կողպեք"</string>
+    <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Զանգ"</string>
+    <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Չեղարկման գծով զանգ"</string>
+    <string name="spoken_emoji_1F516" msgid="108097933937925381">"Էջանիշ"</string>
+    <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Հղման նշան"</string>
+    <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Կետակոճակ"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Հետ՝ վերևում դեպի ձախ սլաքով"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"Վերջ՝ վերևում դեպի ձախ սլաքով"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"Միացված է՝ բացականչական նշանով և վերևում դեպի աջ ու ձախ սլաքով"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Շուտով՝ վերևում դեպի աջ սլաքով"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Վերև՝ վերևում դեպի վեր սլաքով"</string>
+    <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Տասնութից ցածրի արգելման նշան"</string>
+    <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Ստեղնատասնյակ"</string>
+    <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Լատիներեն մեծատառերով մուտքագրման նշան"</string>
+    <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Լատիներեն փոքրատառերով մուտքագրման նշան"</string>
+    <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Թվային մուտքագրման նշան"</string>
+    <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Նշանների ներածման նշան"</string>
+    <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Լատինատառ մուտքագրման նշան"</string>
+    <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Կրակ"</string>
+    <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Էլեկտրական լապտեր"</string>
+    <string name="spoken_emoji_1F527" msgid="134257142354034271">"Ոլորակ"</string>
+    <string name="spoken_emoji_1F528" msgid="700627429570609375">"Մուրճ"</string>
+    <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Մանեկ ու պտուտակ"</string>
+    <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Ճապոնական դանակ"</string>
+    <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Ատրճանակ"</string>
+    <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Մանրադիտակ"</string>
+    <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Հեռադիտակ"</string>
+    <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Ապակե գնդակ"</string>
+    <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Միջակետով վեցանկյուն աստղ"</string>
+    <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Ճապոնական սկսնակի նշան"</string>
+    <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Եռաժանու նշան"</string>
+    <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Սև քառակուսի կոճակ"</string>
+    <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Սպիտակ քառակուսի կոճակ"</string>
+    <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Մեծ կարմիր շրջան"</string>
+    <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Մեծ կապույտ շրջան"</string>
+    <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Մեծ նարնջագույն շեղանկյուն"</string>
+    <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Մեծ կապույտ շեղանկյուն"</string>
+    <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Փոքր նարնջագույն շեղանկյուն"</string>
+    <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Փոքր կապույտ շեղանկյուն"</string>
+    <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Վեր ուղղված կարմիր եռանկյուն"</string>
+    <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Վար ուղղված կարմիր եռանկյուն"</string>
+    <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Վեր ուղղված փոքր կարմիր եռանկյուն"</string>
+    <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Վար ուղղված փոքր կարմիր եռանկյուն"</string>
+    <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Թվատախտակ՝ ժամը մեկով"</string>
+    <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Թվատախտակ՝ ժամը երկուսով"</string>
+    <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Թվատախտակ՝ ժամը երեքով"</string>
+    <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Թվատախտակ՝ ժամը չորսով"</string>
+    <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Թվատախտակ՝ ժամը հինգով"</string>
+    <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Թվատախտակ՝ ժամը վեցով"</string>
+    <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Թվատախտակ՝ ժամը յոթով"</string>
+    <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Թվատախտակ՝ ժամը ութով"</string>
+    <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Թվատախտակ՝ ժամը ինով"</string>
+    <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Թվատախտակ՝ ժամը տասով"</string>
+    <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Թվատախտակ՝ ժամը տասնմեկով"</string>
+    <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Թվատախտակ՝ ժամը տասներկուսով"</string>
+    <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Թվատախտակ՝ ժամը մեկն անց երեսուն"</string>
+    <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Թվատախտակ՝ ժամը երկուսն անց երեսուն"</string>
+    <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Թվատախտակ՝ ժամը երեքն անց երեսուն"</string>
+    <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Թվատախտակ՝ ժամը չորսն անց երեսուն"</string>
+    <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Թվատախտակ՝ ժամը հինգն անց երեսուն"</string>
+    <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Թվատախտակ՝ ժամը վեցն անց երեսուն"</string>
+    <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Թվատախտակ՝ ժամը յոթն անց երեսուն"</string>
+    <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Թվատախտակ՝ ժամը ութն անց երեսուն"</string>
+    <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Թվատախտակ՝ ժամը ինն անց երեսուն"</string>
+    <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Թվատախտակ՝ ժամը տասն անց երեսուն"</string>
+    <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Թվատախտակ՝ ժամը տասնմեկն անց երեսուն"</string>
+    <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Թվատախտակ՝ ժամը տասներկուսն անց երեսուն"</string>
+    <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Ֆուձի լեռ"</string>
+    <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Տոկիոյի աշտարակ"</string>
+    <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Ազատության արձան"</string>
+    <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Ճապոնիայի ուրվագիծ"</string>
+    <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Մայաների քարե արձան"</string>
+    <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Քմծիծաղով դեմք"</string>
+    <string name="spoken_emoji_1F601" msgid="746026523967444503">"Քմծիծաղով դեմք՝ ժպտացող աչքերով"</string>
+    <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Ուրախության արցունքներով դեմք"</string>
+    <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Ժպտացող դեմք՝ բաց բերանով"</string>
+    <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Ժպտացող դեմք՝ բաց բերանով և ժպտացող աչքերով"</string>
+    <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Ժպտացող դեմք՝ բաց բերանով և սառը քրտինքով"</string>
+    <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Ժպտացող դեմք՝ բաց բերանով և պինդ փակված աչքերով"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Ժպտացող դեմք` լուսապսակով"</string>
+    <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Ժպյտացող դեմք` պոզերով"</string>
+    <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Աչքով անող դեմք"</string>
+    <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Ժպտացող դեմք` ժպտացող աչքերով"</string>
+    <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Համեղ ուտեստներ վայելող դեմք"</string>
+    <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Հանգստացած դեմք"</string>
+    <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Ժպտացող դեմք` սրտաձև աչքերով"</string>
+    <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Ժպտացող դեմք` արևային ակնոցով"</string>
+    <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Հեգնական ժպիտով դեմք"</string>
+    <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Չեզոք դեմք"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Արտահայտությունից զուրկ դեմք"</string>
+    <string name="spoken_emoji_1F612" msgid="985081329745137998">"Չհետաքրքրված դեմք"</string>
+    <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Սառը քրտինքով դեմք"</string>
+    <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Մտախոհ դեմք"</string>
+    <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Շփոթված դեմք"</string>
+    <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Մոլորված դեմք"</string>
+    <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Համբուրող դեմք"</string>
+    <string name="spoken_emoji_1F618" msgid="408207170572303753">"Օդային համբույր ուղարկող դեմք"</string>
+    <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Համբուրող դեմք` ժպտացող աչքերով"</string>
+    <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Համբուրող դեմք` փակ աչքերով"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Լեզուն հանած դեմք"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Լեզուն հանած և աչքով անող դեմք"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Լեզուն հանած և աչքերը փակած դեմք"</string>
+    <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Հիասթափված դեմք"</string>
+    <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Մտահոգ դեմք"</string>
+    <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Ջղային դեմք"</string>
+    <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Շրթունքներն ուռած դեմք"</string>
+    <string name="spoken_emoji_1F622" msgid="29291014645931822">"Լացող դեմք"</string>
+    <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Կամակոր դեմք"</string>
+    <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Հաղթական արտահայտությամբ դեմք"</string>
+    <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Հիասթափված, բայց հանգստացած դեմք"</string>
+    <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Բաց բերանով խոժոռ դեմք"</string>
+    <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Տանջված դեմք"</string>
+    <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Վախեցած դեմք"</string>
+    <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Հոգնած դեմք"</string>
+    <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Քնաթաթախ դեմք"</string>
+    <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Հոգնած դեմք"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Ծամածռված դեմք"</string>
+    <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Բարձրաձայն լացող դեմք"</string>
+    <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Բաց բերանով դեմք"</string>
+    <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Լռող դեմք"</string>
+    <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Բաց բերանով և սառը քրտինքով դեմք"</string>
+    <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Վախից ճչացող դեմք"</string>
+    <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Ապշած դեմք"</string>
+    <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Շիկնած դեմք"</string>
+    <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Քնած դեմք"</string>
+    <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Գլխապտույտով դեմք"</string>
+    <string name="spoken_emoji_1F636" msgid="947000211822375683">"Առանց բերանի դեմք"</string>
+    <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Բժշկական դիմակով դեմք"</string>
+    <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Քմծիծաղող կատվի դեմք՝ ժպտացող աչքերով"</string>
+    <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Կատվի դեմք՝ երջանկության արցունքներով"</string>
+    <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Ժպտացող կատվի դեմք՝ բաց բերանով"</string>
+    <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Ժպտացող կատվի դեմք՝ սրտաձև աչքերով"</string>
+    <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Կատվի դեմք՝ ծուռ ժպիտով"</string>
+    <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Համբուրող կատվի դեմք՝ փակ աչքերով"</string>
+    <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Շրթունքներն ուռած կատվի դեմք"</string>
+    <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Լացող կատվի դեմք"</string>
+    <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Հոգնած կատվի դեմք"</string>
+    <string name="spoken_emoji_1F645" msgid="5202090629227587076">"«Ոչ լավ» արտահայտությամբ դեմք"</string>
+    <string name="spoken_emoji_1F646" msgid="6734425134415138134">"«Լավ» արտահայտությամբ դեմք"</string>
+    <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Կռացած դեմք"</string>
+    <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Աչքերը ձեռքերով փակած կապիկ"</string>
+    <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Ականջները ձեռքերով փակած կապիկ"</string>
+    <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Բերանը ձեռքերով փակած կապիկ"</string>
+    <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Երջանիկ մարդ` բարձրացրած ձեռքով"</string>
+    <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Երկու ձեռքը ողջույնի համար բարձրացրած մարդ"</string>
+    <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Դժգոհ մարդ"</string>
+    <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Շրթունքներն ուռեցրած դեմքով մարդ"</string>
+    <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Ծալված ձեռքերով մարդ"</string>
+    <string name="spoken_emoji_1F680" msgid="513263736012689059">"Հրթիռ"</string>
+    <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Ուղղաթիռ"</string>
+    <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Շոգեքարշ"</string>
+    <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Վագոն"</string>
+    <string name="spoken_emoji_1F684" msgid="346396777356203608">"Ճեպընթաց գնացք"</string>
+    <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Ճեպընթաց գնացք` փամփուշտաձև քթով"</string>
+    <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Գնացք"</string>
+    <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Մետրո"</string>
+    <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Մոնոռելս"</string>
+    <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Կայան"</string>
+    <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Տրամվայ"</string>
+    <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Տրամվայ"</string>
+    <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Ավտոբուս"</string>
+    <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Հանդիպակաց ավտոբուս"</string>
+    <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Տրոլեյբուս"</string>
+    <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Ավտոբուսի կանգառ"</string>
+    <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Միկրոավտոբուս"</string>
+    <string name="spoken_emoji_1F691" msgid="999173032408730501">"Շտապ օգնություն"</string>
+    <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Հրշեջ մեքենա"</string>
+    <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Ոստիկանական մեքենա"</string>
+    <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Հանդիպակաց եկող ոստիկանական մեքենա"</string>
+    <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Տաքսի"</string>
+    <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Հանդիպակաց եկող տաքսի"</string>
+    <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Ավտոմեքենա"</string>
+    <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Հանդիպակաց եկող ավտոմեքենա"</string>
+    <string name="spoken_emoji_1F699" msgid="630317052666590607">"Ավտոտնակ"</string>
+    <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Առաքման մեքենա"</string>
+    <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Ինքնագնաց"</string>
+    <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Տրակտոր"</string>
+    <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Մոնոռելս"</string>
+    <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Լեռնային երկաթուղի"</string>
+    <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Երկաթուղային կախոց"</string>
+    <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Լեռնային ճոպանուղի"</string>
+    <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Ճոպանուղի"</string>
+    <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Նավ"</string>
+    <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Լաստանավ"</string>
+    <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Մոտորանավ"</string>
+    <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Հորիզոնական լուսացույց"</string>
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Ուղղահայաց լուսացույց"</string>
+    <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Շինարարության նշան"</string>
+    <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Ոստիկականան մեքենայի ազդանշանային լույսեր"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Եռանկյուն դրոշ"</string>
+    <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Դուռ"</string>
+    <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Չմտնելու նշան"</string>
+    <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Ծխելու նշան"</string>
+    <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Չծխելու նշան"</string>
+    <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Աղբը իր տեղում թափելու նշան"</string>
+    <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Աղբ չթափելու նշան"</string>
+    <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Խմելու ջրի նշան"</string>
+    <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Ոչ խմելու ջրի նշան"</string>
+    <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Հեծանիվ"</string>
+    <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Հեծանիվների արգելք"</string>
+    <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Հեծանվորդ"</string>
+    <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Լեռնային հեծանվորդ"</string>
+    <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Հետիոտն"</string>
+    <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Հետիոտների արգելք"</string>
+    <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Հատող երեխաներ"</string>
+    <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Տղամարդկանց նշան"</string>
+    <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Կանանց նշան"</string>
+    <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Զուգարան"</string>
+    <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Մանուկի նշան"</string>
+    <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Զուգարան"</string>
+    <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"Արտաքնոց"</string>
+    <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Ցնցուղ"</string>
+    <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Բաղնիք"</string>
+    <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Լոգարան"</string>
+    <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Անձնագրերի ստուգում"</string>
+    <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Մաքսատուն"</string>
+    <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Ուղեբեռի ստացում"</string>
+    <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Ձախ ուղեբեռ"</string>
+</resources>
diff --git a/java/res/values-hy-rAM/strings-talkback-descriptions.xml b/java/res/values-hy-rAM/strings-talkback-descriptions.xml
index 149e91a..7df498e 100644
--- a/java/res/values-hy-rAM/strings-talkback-descriptions.xml
+++ b/java/res/values-hy-rAM/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Վայրեր"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Նշաններ"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Զմայլիկներ"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-hy-rAM/strings.xml b/java/res/values-hy-rAM/strings.xml
index 03d56a6..a43e679 100644
--- a/java/res/values-hy-rAM/strings.xml
+++ b/java/res/values-hy-rAM/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Ներածման ընտրանքներ"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Հետազոտական գրառումների հրամաններ"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Փնտրել կոնտակտային անուններ"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Տառասխալների ուղղիչն օգտագործում է ձեր կոնտակտների ցանկի տվյալները"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Թրթռալ սեղմման ժամանակ"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Մուտքագրման լեզուներ"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Պահպանելու համար կրկին հպեք"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Բառարանն առկա է"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Միացնել օգտվողի արձագանքը"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Օգնել բարելավել այս մուտքագրման եղանակի խմբագրիչը՝ ինքնուրույն ուղարկելով Google-ին օգտագործման վիճակագրությունն ու վթարների հաշվետվությունները:"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Ստեղնաշարի թեման"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Անգլերեն (ՄԹ)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Անգլերեն (ԱՄՆ)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Միացնել"</string>
     <string name="not_now" msgid="6172462888202790482">"Ոչ հիմա"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Մուտքագրման այսպիսի ոճ արդեն գոյություն ունի՝ <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Հարմարավետության ուսումնասիրության ռեժիմ"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Ստեղնի երկար սեղմման ուշացում"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Սեղմման թրթռոցի տևողություն"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Սեղմման ձայնի բարձրությունը"</string>
diff --git a/java/res/values-in/strings-action-keys.xml b/java/res/values-in/strings-action-keys.xml
index 26f3225..052798d 100644
--- a/java/res/values-in/strings-action-keys.xml
+++ b/java/res/values-in/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Balik"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Beres"</string>
     <string name="label_send_key" msgid="482252074224462163">"Kirim"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Jeda"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Tunggu"</string>
 </resources>
diff --git a/java/res/values-in/strings-talkback-descriptions.xml b/java/res/values-in/strings-talkback-descriptions.xml
index 8f51fb7..1f206ee 100644
--- a/java/res/values-in/strings-talkback-descriptions.xml
+++ b/java/res/values-in/strings-talkback-descriptions.xml
@@ -27,14 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> melakukan koreksi otomatis"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Kode tombol %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
-    <skip />
-    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
-    <skip />
-    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
-    <skip />
-    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
-    <skip />
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Simbol lainnya"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Simbol"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Hapus"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simbol"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Huruf"</string>
@@ -53,8 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift diaktifkan"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock diaktifkan"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Mode simbol"</string>
-    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
-    <skip />
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Mode simbol lainnya"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Mode huruf"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Mode telepon"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Mode simbol telepon"</string>
@@ -76,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Tempat"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simbol"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikon"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index e3c5516..a625da0 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opsi masukan"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Riset Perintah Log"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Cari nama kontak"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Pemeriksa ejaan menggunakan entri dari daftar kontak Anda"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Getar jika tombol ditekan"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Bahasa masukan"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Sentuh lagi untuk menyimpan"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Kamus yang tersedia"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Aktifkan masukan pengguna"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Bantu tingkatkan editor metode masukan dengan mengirim statistik penggunaan dan laporan kerusakan secara otomatis"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema keyboard"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Inggris (Inggris)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Inggris (AS)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Aktifkan"</string>
     <string name="not_now" msgid="6172462888202790482">"Nanti saja"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Sudah ada gaya masukan yang sama: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode studi daya guna"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Penundaan tekan lama tombol"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durasi getar saat tekan tombol"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume suara saat tekan tombol"</string>
diff --git a/java/res/values-is/strings.xml b/java/res/values-is/strings.xml
index 1588534..ab2f262 100644
--- a/java/res/values-is/strings.xml
+++ b/java/res/values-is/strings.xml
@@ -22,7 +22,6 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for english_ime_input_options (3909945612939668554) -->
     <skip />
-    <!-- no translation found for english_ime_research_log (8492602295696577851) -->
     <skip />
     <!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
     <skip />
@@ -140,9 +139,7 @@
     <skip />
     <!-- no translation found for has_dictionary (6071847973466625007) -->
     <skip />
-    <!-- no translation found for prefs_enable_log (6620424505072963557) -->
     <skip />
-    <!-- no translation found for prefs_description_log (7525225584555429211) -->
     <skip />
     <!-- no translation found for keyboard_layout (8451164783510487501) -->
     <skip />
@@ -198,7 +195,6 @@
     <skip />
     <!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
     <skip />
-    <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
     <skip />
     <!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
     <skip />
diff --git a/java/res/values-it/strings-action-keys.xml b/java/res/values-it/strings-action-keys.xml
index 02e7b9c..0a0cf9b 100644
--- a/java/res/values-it/strings-action-keys.xml
+++ b/java/res/values-it/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Prec."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Fine"</string>
     <string name="label_send_key" msgid="482252074224462163">"Invia"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Attendi"</string>
 </resources>
diff --git a/java/res/values-it/strings-talkback-descriptions.xml b/java/res/values-it/strings-talkback-descriptions.xml
index f1d0dae..3b4cca3 100644
--- a/java/res/values-it/strings-talkback-descriptions.xml
+++ b/java/res/values-it/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Luoghi"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboli"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticon"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 6685095..fc9834e 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opzioni inserimento"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Ricerca comandi di log"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Cerca in nomi contatti"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"La funzione di controllo ortografico usa voci dell\'elenco contatti"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrazione tasti"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Lingue comandi"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Tocca di nuovo per salvare"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Dizionario disponibile"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Attiva commenti degli utenti"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Contribuisci a migliorare l\'editor del metodo di immissione inviando automaticamente statistiche sull\'utilizzo e rapporti sugli arresti anomali"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema della tastiera"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Inglese (UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Inglese (USA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Attiva"</string>
     <string name="not_now" msgid="6172462888202790482">"Non ora"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Esiste già uno stile di inuput uguale: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modalità Studio sull\'usabilità"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Ritardo pressione lunga tasti"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durata vibraz. pressione tasto"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume audio a pressione tasto"</string>
diff --git a/java/res/values-iw/strings-action-keys.xml b/java/res/values-iw/strings-action-keys.xml
index f0f466b..398c081 100644
--- a/java/res/values-iw/strings-action-keys.xml
+++ b/java/res/values-iw/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"הקודם"</string>
     <string name="label_done_key" msgid="7564866296502630852">"בוצע"</string>
     <string name="label_send_key" msgid="482252074224462163">"שלח"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"השהה"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"המתן"</string>
 </resources>
diff --git a/java/res/values-iw/strings-talkback-descriptions.xml b/java/res/values-iw/strings-talkback-descriptions.xml
index eee16eb..d6c2878 100644
--- a/java/res/values-iw/strings-talkback-descriptions.xml
+++ b/java/res/values-iw/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"מקומות"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"סמלים"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"רגשונים"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index dab2d8e..7ab1637 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"אפשרויות קלט"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"פקודות יומן מחקר"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"חפש שמות של אנשי קשר"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"בודק האיות משתמש בערכים מרשימת אנשי הקשר שלך"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"רטט בלחיצה על מקשים"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"שפות קלט"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"גע שוב כדי לשמור"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"מילון זמין"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"הפעל משוב ממשתמשים"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"עזור לשפר את עורך שיטת הקלט על ידי שליחה אוטומטית של סטטיסטיקת שימוש ודוחות קריסה."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"עיצוב מקלדת"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"אנגלית (בריטניה)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"אנגלית (ארה\"ב)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"הפעל"</string>
     <string name="not_now" msgid="6172462888202790482">"לא עכשיו"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"סגנון קלט זהה כבר קיים: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"מצב לחקירת שימושיות"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"השהיית לחיצה ארוכה על מקש"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"משך רטט של לחיצת מקש"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"עוצמת קול של לחיצת מקש"</string>
diff --git a/java/res/values-ja/strings-action-keys.xml b/java/res/values-ja/strings-action-keys.xml
index 68aa647..ba8d06c 100644
--- a/java/res/values-ja/strings-action-keys.xml
+++ b/java/res/values-ja/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"前へ"</string>
     <string name="label_done_key" msgid="7564866296502630852">"完了"</string>
     <string name="label_send_key" msgid="482252074224462163">"送信"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"停止"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"待機"</string>
 </resources>
diff --git a/java/res/values-ja/strings-talkback-descriptions.xml b/java/res/values-ja/strings-talkback-descriptions.xml
index 2479603..b218b49 100644
--- a/java/res/values-ja/strings-talkback-descriptions.xml
+++ b/java/res/values-ja/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"場所"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"記号"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"絵文字"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 7d749a6..3845bd7 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"入力オプション"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"ログコマンドの検索"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"連絡先名の検索"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"スペルチェッカーでは連絡先リストのエントリを使用します"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"キー操作バイブ"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"入力言語"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"保存するにはもう一度タップ"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"辞書を利用できます"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"ユーザーフィードバックを有効にする"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"IMEの機能向上のため、使用統計状況やクラッシュレポートをGoogleに自動送信します。"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"キーボードのテーマ"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"英語 (英国)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"英語 (米国)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"有効にする"</string>
     <string name="not_now" msgid="6172462888202790482">"後で行う"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"同じ入力スタイルが既に存在します: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"使いやすさの研究モード"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"キーの長押し時間"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"キー操作バイブの振動時間"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"キー操作音の音量"</string>
diff --git a/java/res/values-ka-rGE/strings-action-keys.xml b/java/res/values-ka-rGE/strings-action-keys.xml
index e2dd05f..3ad6c33 100644
--- a/java/res/values-ka-rGE/strings-action-keys.xml
+++ b/java/res/values-ka-rGE/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"წინა"</string>
     <string name="label_done_key" msgid="7564866296502630852">"დასრ."</string>
     <string name="label_send_key" msgid="482252074224462163">"გაგზ."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"პაუზა"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"მოცდა"</string>
 </resources>
diff --git a/java/res/values-ka-rGE/strings-emoji-descriptions.xml b/java/res/values-ka-rGE/strings-emoji-descriptions.xml
new file mode 100644
index 0000000..81c6661
--- /dev/null
+++ b/java/res/values-ka-rGE/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="spoken_emoji_00A9" msgid="2859822817116803638">"საავტორო უფლების ნიშანი"</string>
+    <string name="spoken_emoji_00AE" msgid="7708335454134589027">"რეგისტრირებული სავაჭრო ნიშნის სიმბოლო"</string>
+    <string name="spoken_emoji_203C" msgid="153340916701508663">"ორმაგი ძახილის ნიშანი"</string>
+    <string name="spoken_emoji_2049" msgid="4877256448299555371">"ძახილის და კითხვის ნიშანი"</string>
+    <string name="spoken_emoji_2122" msgid="9188440722954720429">"სავაჭრო ნიშნის ნიშანი"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"ინფორმაციის წყარო"</string>
+    <string name="spoken_emoji_2194" msgid="8055202727034946680">"მარცხენა და მარჯვენა ისარი"</string>
+    <string name="spoken_emoji_2195" msgid="8028122253301087407">"ზედა და ქვედა ისარი"</string>
+    <string name="spoken_emoji_2196" msgid="4019164898967854363">"ჩრდილო დასავლეთის ისარი"</string>
+    <string name="spoken_emoji_2197" msgid="4255723717709017801">"ჩრდილო აღმოსავლეთის ისარი"</string>
+    <string name="spoken_emoji_2198" msgid="1452063451313622090">"სამხრეთ აღმოსავლეთის ისარი"</string>
+    <string name="spoken_emoji_2199" msgid="6942722693368807849">"სამხრეთ დასავლეთის ისარი"</string>
+    <string name="spoken_emoji_21A9" msgid="5204750172335111188">"მარცხნივ მიმართული ისარი კაუჭით"</string>
+    <string name="spoken_emoji_21AA" msgid="3950259884359247006">"მარჯვნივ მიმართული ისარი კაუჭით"</string>
+    <string name="spoken_emoji_231A" msgid="6751448803233874993">"საათი"</string>
+    <string name="spoken_emoji_231B" msgid="5956428809948426182">"ქვიშის საათი"</string>
+    <string name="spoken_emoji_23E9" msgid="4022497733535162237">"მარჯვნივ მიმართული შავი ორმაგი სამკუთხედი"</string>
+    <string name="spoken_emoji_23EA" msgid="2251396938087774944">"მარცხნივ მიმართული შავი ორმაგი სამკუთხედი"</string>
+    <string name="spoken_emoji_23EB" msgid="3746885195641491865">"ზევით მიმართული შავი ორმაგი სამკუთხედი"</string>
+    <string name="spoken_emoji_23EC" msgid="7852372752901163416">"ქვევით მიმართული შავი ორმაგი სამკუთხედი"</string>
+    <string name="spoken_emoji_23F0" msgid="8474219588750627870">"მაღვიძარა"</string>
+    <string name="spoken_emoji_23F3" msgid="166900119581024371">"ქვიშის საათი ჩამოყრილი ქვიშით"</string>
+    <string name="spoken_emoji_24C2" msgid="3948348737566038470">"წრეში ჩასმული ლათინური ასო m"</string>
+    <string name="spoken_emoji_25AA" msgid="7865181015100227349">"შავი პატარა კვადრატი"</string>
+    <string name="spoken_emoji_25AB" msgid="6446532820937381457">"თეთრი პატარა კვადრატი"</string>
+    <string name="spoken_emoji_25B6" msgid="2423897708496040947">"შავი მარჯვნივ მიმართული სამკუთხედი"</string>
+    <string name="spoken_emoji_25C0" msgid="3595083440074484934">"შავი მარცხნივ მიმართული სამკუთხედი"</string>
+    <string name="spoken_emoji_25FB" msgid="4838691986881215419">"თეთრი საშუალო კვადრატი"</string>
+    <string name="spoken_emoji_25FC" msgid="7008859564991191050">"შავი საშუალო კვადრატი"</string>
+    <string name="spoken_emoji_25FD" msgid="7673439755069217479">"თეთრი საშუალო პატარა კვადრატი"</string>
+    <string name="spoken_emoji_25FE" msgid="6782214109919768923">"შავი საშუალო პატარა კვადრატი"</string>
+    <string name="spoken_emoji_2600" msgid="2272722634618990413">"შავი მზე სხივებით"</string>
+    <string name="spoken_emoji_2601" msgid="6205136889311537150">"ღრუბელი"</string>
+    <string name="spoken_emoji_260E" msgid="8670395193046424238">"შავი ტელეფონი"</string>
+    <string name="spoken_emoji_2611" msgid="4530550203347054611">"მონიშნული საარჩევნო ბიულეტენი"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"ქოლგა წვიმის წვეთებით"</string>
+    <string name="spoken_emoji_2615" msgid="3320562382424018588">"ცხელი სასმელი"</string>
+    <string name="spoken_emoji_261D" msgid="4690554173549768467">"თეთრი ზევით მიმართული საჩვენებელი"</string>
+    <string name="spoken_emoji_263A" msgid="3170094381521989300">"თეთრი მომღიმარი სახე"</string>
+    <string name="spoken_emoji_2648" msgid="4621241062667020673">"ვერძი"</string>
+    <string name="spoken_emoji_2649" msgid="7694461245947059086">"კურო"</string>
+    <string name="spoken_emoji_264A" msgid="1258074605878705030">"ტყუპები"</string>
+    <string name="spoken_emoji_264B" msgid="4409219914377810956">"კირჩხიბი"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"ლომი"</string>
+    <string name="spoken_emoji_264D" msgid="1504758945499854018">"ქალწული"</string>
+    <string name="spoken_emoji_264E" msgid="2354847104530633519">"სასწორი"</string>
+    <string name="spoken_emoji_264F" msgid="5822933280406416112">"მორიელი"</string>
+    <string name="spoken_emoji_2650" msgid="4832481156714796163">"მშვილდოსანი"</string>
+    <string name="spoken_emoji_2651" msgid="840953134601595090">"თხის რქა"</string>
+    <string name="spoken_emoji_2652" msgid="3586925968718775281">"მერწყული"</string>
+    <string name="spoken_emoji_2653" msgid="8420547731496254492">"თევზები"</string>
+    <string name="spoken_emoji_2660" msgid="4541170554542412536">"ბანქოს შავი ყვავი"</string>
+    <string name="spoken_emoji_2663" msgid="3669352721942285724">"ბანქოს შავი ჯვარი"</string>
+    <string name="spoken_emoji_2665" msgid="6347941599683765843">"ბანქოს შავი გული"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"ბანქოს შავი აგური"</string>
+    <string name="spoken_emoji_2668" msgid="7063148281053820386">"ცხელი წყარო"</string>
+    <string name="spoken_emoji_267B" msgid="21716857176812762">"უნივერსალური გადამუშავების შავი სიმბოლო"</string>
+    <string name="spoken_emoji_267F" msgid="8833496533226475443">"სატარებელი სავარძლის სიმბოლო"</string>
+    <string name="spoken_emoji_2693" msgid="7443148847598433088">"ღუზა"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"გაფრთხილების ნიშანი"</string>
+    <string name="spoken_emoji_26A1" msgid="5604749644693339145">"მაღალი ძაბვის ნიშანი"</string>
+    <string name="spoken_emoji_26AA" msgid="8005748091690377153">"საშუალო თეთრი წრე"</string>
+    <string name="spoken_emoji_26AB" msgid="1655910278422753244">"საშუალო შავი წრე"</string>
+    <string name="spoken_emoji_26BD" msgid="1545218197938889737">"ფეხბურთის ბურთი"</string>
+    <string name="spoken_emoji_26BE" msgid="8959760533076498209">"ბეისბოლის ბურთი"</string>
+    <string name="spoken_emoji_26C4" msgid="3045791757044255626">"თოვლის კაცი თოვლის გარეშე"</string>
+    <string name="spoken_emoji_26C5" msgid="5580129409712578639">"ღრუბელს მიფარებული მზე"</string>
+    <string name="spoken_emoji_26CE" msgid="8963656417276062998">"გველისმჭერის თანავარსკვლავედი"</string>
+    <string name="spoken_emoji_26D4" msgid="2231451988209604130">"შესვლა აკრძალულია"</string>
+    <string name="spoken_emoji_26EA" msgid="7513319636103804907">"ეკლესია"</string>
+    <string name="spoken_emoji_26F2" msgid="7134115206158891037">"შადრევანი"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"ალამი ორმოში"</string>
+    <string name="spoken_emoji_26F5" msgid="4766328116769075217">"იალქნიანი გემი"</string>
+    <string name="spoken_emoji_26FA" msgid="5888017494809199037">"კარავი"</string>
+    <string name="spoken_emoji_26FD" msgid="2417060622927453534">"საწვავის სატუმბი"</string>
+    <string name="spoken_emoji_2702" msgid="4005741160717451912">"შავი მაკრატელი"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"თეთრი მკვეთრი მონიშვნის ნიშანი"</string>
+    <string name="spoken_emoji_2708" msgid="7153840886849268988">"თვითმფრინავი"</string>
+    <string name="spoken_emoji_2709" msgid="2217319160724311369">"კონვერტი"</string>
+    <string name="spoken_emoji_270A" msgid="508347232762319473">"აღმართული მუშტი"</string>
+    <string name="spoken_emoji_270B" msgid="6640562128327753423">"აღმართული ხელი"</string>
+    <string name="spoken_emoji_270C" msgid="1344288035704944581">"გამარჯვების აღმნიშვნელი ხელი"</string>
+    <string name="spoken_emoji_270F" msgid="6108251586067318718">"ფანქარი"</string>
+    <string name="spoken_emoji_2712" msgid="6320544535087710482">"შავი კალმის წვერი"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"მკვეთრი მონიშვნის ნიშანი"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"მკვეთრი გამრავლების x"</string>
+    <string name="spoken_emoji_2728" msgid="5650330815808691881">"ნაპერწკლები"</string>
+    <string name="spoken_emoji_2733" msgid="8915809595141157327">"რვაწვერა ვარსკვლავი"</string>
+    <string name="spoken_emoji_2734" msgid="4846583547980754332">"რვაქიმიანი შავი ვარსკვლავი"</string>
+    <string name="spoken_emoji_2744" msgid="4350636647760161042">"ფიფქი"</string>
+    <string name="spoken_emoji_2747" msgid="3718282973916474455">"ნაპერწკალი"</string>
+    <string name="spoken_emoji_274C" msgid="2752145886733295314">"გადახაზვის ნიშანი"</string>
+    <string name="spoken_emoji_274E" msgid="4262918689871098338">"კვადრატში ჩასმული გადახაზული ნიშანი ნეგატივში"</string>
+    <string name="spoken_emoji_2753" msgid="6935897159942119808">"შავი კითხვის ნიშნის ორნამენტი"</string>
+    <string name="spoken_emoji_2754" msgid="7277504915105532954">"თეთრი კითხვის ნიშნის ორნამენტი"</string>
+    <string name="spoken_emoji_2755" msgid="6853076969826960210">"თეთრი ძახილის ნიშნის ორნამენტი"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"მკვეთრი ძახილის ნიშნის სიმბოლო"</string>
+    <string name="spoken_emoji_2764" msgid="4214257843609432167">"დიდი შავი გული"</string>
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"მკვეთრი პლუსის ნიშანი"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"მკვეთრი მინუსის ნიშანი"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"მკვეთრი გაყოფის ნიშანი"</string>
+    <string name="spoken_emoji_27A1" msgid="3513434778263100580">"შავი მარჯვნივ მიმართული ისარი"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"მარყუჟი"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"ორმაგი მარყუჟი"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"მარჯვნივ მიმართული და ზევით მოხვეული ისარი"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"მარჯვნივ მიმართული და ქვევით მოხვეული ისარი"</string>
+    <string name="spoken_emoji_2B05" msgid="4813405635410707690">"მარცხნივ მიმართული შავი ისარი"</string>
+    <string name="spoken_emoji_2B06" msgid="1223172079106250748">"ზევით მიმართული შავი ისარი"</string>
+    <string name="spoken_emoji_2B07" msgid="1599124424746596150">"მარცხნივ ქვევით მიმართული შავი ისარი"</string>
+    <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"დიდი შავი კვადრატი"</string>
+    <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"დიდი თეთრი კვადრატი"</string>
+    <string name="spoken_emoji_2B50" msgid="3850845519526950524">"თეთრი საშუალო ვარსკვლავი"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"მკვეთრი დიდი წრე"</string>
+    <string name="spoken_emoji_3030" msgid="4609172241893565639">"ტალღოვანი ტირე"</string>
+    <string name="spoken_emoji_303D" msgid="2545833934975907505">"იორიტენი"</string>
+    <string name="spoken_emoji_3297" msgid="928912923628973800">"მილოცვის იდეოგრაფი წრეში"</string>
+    <string name="spoken_emoji_3299" msgid="3930347573693668426">"საიდუმლოების იდეოგრაფი წრეში"</string>
+    <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Mahjong მოზაიკის წითელი დრაკონი"</string>
+    <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"ბანქოს შავი ჯოკერი"</string>
+    <string name="spoken_emoji_1F170" msgid="3817698686602826773">"სისხლის ტიპი A"</string>
+    <string name="spoken_emoji_1F171" msgid="3684218589626650242">"სისხლის ტიპი B"</string>
+    <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"სისხლის ტიპი O"</string>
+    <string name="spoken_emoji_1F17F" msgid="463634348668462040">"პარკინგის ადგილი"</string>
+    <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"სისხლის ტიპი AB"</string>
+    <string name="spoken_emoji_1F191" msgid="5386969264431429221">"CL კვადრატში"</string>
+    <string name="spoken_emoji_1F192" msgid="8324226436829162496">"cool კვადრატში"</string>
+    <string name="spoken_emoji_1F193" msgid="4731758603321515364">"free კვადრატში"</string>
+    <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ID კვადრატში"</string>
+    <string name="spoken_emoji_1F195" msgid="1433142500411060924">"new კვადრატში"</string>
+    <string name="spoken_emoji_1F196" msgid="8825160701159634202">"N G კვადრატში"</string>
+    <string name="spoken_emoji_1F197" msgid="7841079241554176535">"OK კვადრატში"</string>
+    <string name="spoken_emoji_1F198" msgid="7020298909426960622">"SOS კვადრატში"</string>
+    <string name="spoken_emoji_1F199" msgid="5971252667136235630">"up ძახილის ნიშნით კვადრატში"</string>
+    <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"vs კვადრატში"</string>
+    <string name="spoken_emoji_1F201" msgid="7000490044681139002">"katakana koko კვადრატში"</string>
+    <string name="spoken_emoji_1F202" msgid="8560906958695043947">"katakana sa კვადრატში"</string>
+    <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"CJK უნიფიცირებული იდეოგრაფი კვადრატში"</string>
+    <string name="spoken_emoji_1F22F" msgid="609797148862445402">"დაჯავშნილი ადგილის იდეოგრაფი კვადრატში"</string>
+    <string name="spoken_emoji_1F232" msgid="8125716331632035820">"პროჰიბიციის იდეოგრაფი კვადრატში"</string>
+    <string name="spoken_emoji_1F233" msgid="8749401090457355028">"ვაკანსიის იდეოგრაფი კვადრატში"</string>
+    <string name="spoken_emoji_1F234" msgid="3546951604285970768">"მიღების იდეოგრაფი კვადრატში"</string>
+    <string name="spoken_emoji_1F235" msgid="5320186982841793711">"დაკავებულობის იდეოგრაფი კვადრატში"</string>
+    <string name="spoken_emoji_1F236" msgid="879755752069393034">"იდეოგრაფი გადახდილია კვადრატში"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"იდეოგრაფი ყოველთვიურად კვადრატში"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"იდეოგრაფი აპლიკაცია კვადრატში"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"ფასდაკლების იდეოგრაფი კვადრატში"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"იდეოგრაფი მუშაობს კვადრატში"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"უპირატესობის იდეოგრაფი წრეში"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"მიღების იდეოგრაფი წრეში"</string>
+    <string name="spoken_emoji_1F300" msgid="4720098285295840383">"ციკლონი"</string>
+    <string name="spoken_emoji_1F301" msgid="3601962477653752974">"ნისლიანი"</string>
+    <string name="spoken_emoji_1F302" msgid="3404357123421753593">"დახურული ქოლგა"</string>
+    <string name="spoken_emoji_1F303" msgid="3899301321538188206">"ვარსკვლავიანი ღამე"</string>
+    <string name="spoken_emoji_1F304" msgid="2767148930689050040">"მზის ამოსვლა მთებზე"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"მზის ამოსვლა"</string>
+    <string name="spoken_emoji_1F306" msgid="5889294736109193104">"ქალაქის პეიზაჟი შებინდებისას"</string>
+    <string name="spoken_emoji_1F307" msgid="2714290867291163713">"მზის ჩასვლა შენობების ფონზე"</string>
+    <string name="spoken_emoji_1F308" msgid="688704703985173377">"ცისარტყელა"</string>
+    <string name="spoken_emoji_1F309" msgid="6217981957992313528">"ხიდი ღამით"</string>
+    <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"წყლის ტალღა"</string>
+    <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"ვულკანი"</string>
+    <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"ირმის ნახტომი"</string>
+    <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"გლობუსი ევროპა-აფრიკა"</string>
+    <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"გლობუსი ამერიკა"</string>
+    <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"გლობუსი აზია-ავსტრალია"</string>
+    <string name="spoken_emoji_1F310" msgid="2959618582975247601">"გლობუსი მერიდიანებით"</string>
+    <string name="spoken_emoji_1F311" msgid="623906380914895542">"ახალი მთვარის სიმბოლო"</string>
+    <string name="spoken_emoji_1F312" msgid="4458575672576125401">"შევსებადი ნახევარმთვარის სიმბოლო"</string>
+    <string name="spoken_emoji_1F313" msgid="7599181787989497294">"პირველი მეოთხედის მთვარის სიმბოლო"</string>
+    <string name="spoken_emoji_1F314" msgid="4898293184964365413">"მილევადი ნახევარმთვარის სიმბოლო"</string>
+    <string name="spoken_emoji_1F315" msgid="3218117051779496309">"სავსე მთვარის სიმბოლო"</string>
+    <string name="spoken_emoji_1F316" msgid="2061317145777689569">"შევსებადი კუზიანი მთვარის სიმბოლო"</string>
+    <string name="spoken_emoji_1F317" msgid="2721090687319539049">"ბოლო მეოთხედის მთვარის სიმბოლო"</string>
+    <string name="spoken_emoji_1F318" msgid="3814091755648887570">"შევსებადი ნახევარმთვარის სიმბოლო"</string>
+    <string name="spoken_emoji_1F319" msgid="4074299824890459465">"ნახევარმთვარე"</string>
+    <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"ახალი მთვარი სახით"</string>
+    <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"პირველი მეოთხედის მთვარე სახით"</string>
+    <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"ბოლო მეოთხედის მთვარე სახით"</string>
+    <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"სავსე მთვარე სახით"</string>
+    <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"მზე სახით"</string>
+    <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"მოკიაფე ვარსკვლავი"</string>
+    <string name="spoken_emoji_1F320" msgid="5450591979068216115">"ჩამოვარდნილი ვარსკვლავი"</string>
+    <string name="spoken_emoji_1F330" msgid="3115760035618051575">"წაბლი"</string>
+    <string name="spoken_emoji_1F331" msgid="5658888205290008691">"ნერგი"</string>
+    <string name="spoken_emoji_1F332" msgid="2935650450421165938">"მარადმწვანე ხე"</string>
+    <string name="spoken_emoji_1F333" msgid="5898847427062482675">"ფოთლოვანი ხე"</string>
+    <string name="spoken_emoji_1F334" msgid="6183375224678417894">"პალმის ხე"</string>
+    <string name="spoken_emoji_1F335" msgid="5352418412103584941">"კაქტუსი"</string>
+    <string name="spoken_emoji_1F337" msgid="3839107352363566289">"ტიტა"</string>
+    <string name="spoken_emoji_1F338" msgid="6389970364260468490">"აყვავებული ალუბალი"</string>
+    <string name="spoken_emoji_1F339" msgid="9128891447985256151">"ვარდი"</string>
+    <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"ჰიბისკუსი"</string>
+    <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"მზესუმზირა"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"ყვავილობა"</string>
+    <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"სიმინდის ტარო"</string>
+    <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"ბრინჯის თავთავი"</string>
+    <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"ბალახი"</string>
+    <string name="spoken_emoji_1F340" msgid="3494255459156499305">"ოთხფოთლიანი სამყურა"</string>
+    <string name="spoken_emoji_1F341" msgid="4581959481754990158">"ნეკერჩხლის ფოთოლი"</string>
+    <string name="spoken_emoji_1F342" msgid="3119068426871821222">"ჩამოვარდნილი ფოთოლი"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"ქარში მოფრიალე ფოთოლი"</string>
+    <string name="spoken_emoji_1F344" msgid="2738517881678722159">"სოკო"</string>
+    <string name="spoken_emoji_1F345" msgid="6135288642349085554">"პომიდორი"</string>
+    <string name="spoken_emoji_1F346" msgid="2075395322785406367">"ბადრიჯანი"</string>
+    <string name="spoken_emoji_1F347" msgid="7753453754963890571">"ყურძენი"</string>
+    <string name="spoken_emoji_1F348" msgid="1247076837284932788">"ნესვი"</string>
+    <string name="spoken_emoji_1F349" msgid="5563054555180611086">"საზამთრო"</string>
+    <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"მანდარინი"</string>
+    <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"ლიმონი"</string>
+    <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"ბანანი"</string>
+    <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"ანანასი"</string>
+    <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"წითელი ვაშლი"</string>
+    <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"მწვანე ვაშლი"</string>
+    <string name="spoken_emoji_1F350" msgid="625802980159197701">"მსხალი"</string>
+    <string name="spoken_emoji_1F351" msgid="4269460120610911895">"ატამი"</string>
+    <string name="spoken_emoji_1F352" msgid="965600953360182635">"ალუბალი"</string>
+    <string name="spoken_emoji_1F353" msgid="7068623879906925592">"მარწყვი"</string>
+    <string name="spoken_emoji_1F354" msgid="45162285238888494">"ჰამბურგერი"</string>
+    <string name="spoken_emoji_1F355" msgid="9157587635526433283">"პიცას ნაჭერი"</string>
+    <string name="spoken_emoji_1F356" msgid="2667196119149852244">"ხორცი ძვალზე"</string>
+    <string name="spoken_emoji_1F357" msgid="8022817413851052256">"ქათმის ბარკალი"</string>
+    <string name="spoken_emoji_1F358" msgid="3042693264748036476">"ბრინჯის კრეკერი"</string>
+    <string name="spoken_emoji_1F359" msgid="3988148661730121958">"ბრინჯის გუნდა"</string>
+    <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"მოხარშული ბრინჯი"</string>
+    <string name="spoken_emoji_1F35B" msgid="62530406745717835">"კარი და ბრინჯი"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"ორთქლიანი თასი"</string>
+    <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"სპაგეტი"</string>
+    <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"პური"</string>
+    <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"კარტოფილი ფრი"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"შემწვარი ტკბილი კარტოფილი"</string>
+    <string name="spoken_emoji_1F361" msgid="6475486395784096109">"დანგო"</string>
+    <string name="spoken_emoji_1F362" msgid="5004692577661076275">"ოდენი"</string>
+    <string name="spoken_emoji_1F363" msgid="1606603765717743806">"სუში"</string>
+    <string name="spoken_emoji_1F364" msgid="6550457766169570811">"შემწვარი კრევეტი"</string>
+    <string name="spoken_emoji_1F365" msgid="4963815540953316307">"ტორტი ლოკოკინის დიზაინით"</string>
+    <string name="spoken_emoji_1F366" msgid="7862401745277049404">"ჩამოსასხმელი ნაყინი"</string>
+    <string name="spoken_emoji_1F367" msgid="7447972978281980414">"გაცრილი ყინული"</string>
+    <string name="spoken_emoji_1F368" msgid="7790003146142724913">"ნაყინი"</string>
+    <string name="spoken_emoji_1F369" msgid="7383712944084857350">"დონატი"</string>
+    <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"შინაური ნამცხვარი"</string>
+    <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"შოკოლადის ფილა"</string>
+    <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"კანფეტი"</string>
+    <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"შაქარყინული"</string>
+    <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"ნადუღის კრემი"</string>
+    <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"თაფლის ქოთანი"</string>
+    <string name="spoken_emoji_1F370" msgid="7243244547866114951">"ფხვიერი ნამცხვარი"</string>
+    <string name="spoken_emoji_1F371" msgid="6731527040552916358">"ბენტოს ყუთი"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"საკვების თასი"</string>
+    <string name="spoken_emoji_1F373" msgid="7799289534289221045">"სამზარეულო"</string>
+    <string name="spoken_emoji_1F374" msgid="5973820884987069131">"დანა-ჩანგალი"</string>
+    <string name="spoken_emoji_1F375" msgid="1074832087699617700">"ჩაის"</string>
+    <string name="spoken_emoji_1F376" msgid="6499274685584852067">"საკეს ბოთლი და ჭიქა"</string>
+    <string name="spoken_emoji_1F377" msgid="1762398562314172075">"ღვინის ჭიქა"</string>
+    <string name="spoken_emoji_1F378" msgid="5528234560590117516">"კოქტეილის ჭიქა"</string>
+    <string name="spoken_emoji_1F379" msgid="790581290787943325">"ტროპიკული სასმელი"</string>
+    <string name="spoken_emoji_1F37A" msgid="391966822450619516">"ლუდის კათხა"</string>
+    <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"ლუდის კათხების მიჭახუნება"</string>
+    <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"ჩვილის ბოთლი"</string>
+    <string name="spoken_emoji_1F380" msgid="3487363857092458827">"ლენტი"</string>
+    <string name="spoken_emoji_1F381" msgid="614180683680675444">"შეფუთული საჩუქარი"</string>
+    <string name="spoken_emoji_1F382" msgid="4720497171946687501">"დაბადების დღის ტორტი"</string>
+    <string name="spoken_emoji_1F383" msgid="3536505941578757623">"ჯეკის ფარანი"</string>
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"ნაძვის ხე"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"თოვლის ბაბუა"</string>
+    <string name="spoken_emoji_1F386" msgid="2130445450758114746">"ფეიერვერკი"</string>
+    <string name="spoken_emoji_1F387" msgid="3403182563117999933">"ფეიერვერკის შუშხუნი"</string>
+    <string name="spoken_emoji_1F388" msgid="2903047203723251804">"ბუშტი"</string>
+    <string name="spoken_emoji_1F389" msgid="2352830665883549388">"სადღესასწაულო სატკაცუნო"</string>
+    <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"კონფეტის ბურთი"</string>
+    <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"ტანაბატას ტოტი"</string>
+    <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"გადაჯვარედინებული დროშები"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"ფიჭვის დეკორაცია"</string>
+    <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"იაპონური სათამაშოები"</string>
+    <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"კარპას ალამი"</string>
+    <string name="spoken_emoji_1F390" msgid="8903307048095431374">"ქარის ზარი"</string>
+    <string name="spoken_emoji_1F391" msgid="2134952069191911841">"მთვარის ჭვრეტის ცერემონიალი"</string>
+    <string name="spoken_emoji_1F392" msgid="6380405493914304737">"სკოლის ჩანთა"</string>
+    <string name="spoken_emoji_1F393" msgid="6947890064872470996">"ოქსფორდის ქუდი"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"კარუსელის ცხენი"</string>
+    <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"ეშმაკის ბორბალი"</string>
+    <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"როლერკოსტერი"</string>
+    <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"თევზი და ანკესი"</string>
+    <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"მიკროფონი"</string>
+    <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"კინოკამერა"</string>
+    <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"კინოთეატრი"</string>
+    <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"ყურსასმენი"</string>
+    <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"მხატვრის პალიტრა"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"ცილინდრი"</string>
+    <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"ცირკის კარავი"</string>
+    <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"ბილეთი"</string>
+    <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"კინოს ტკაცუნა"</string>
+    <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"საშემსრულებლო ხელოვნება"</string>
+    <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"ვიდეოთამაში"</string>
+    <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"მიზანში გარტყმა"</string>
+    <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"სლოტ-ავტომატი"</string>
+    <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"ბილიარდი"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"კამათელი"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"ბოულინგი"</string>
+    <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"ჰანაფუდა"</string>
+    <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"მუსიკალური ნოტი"</string>
+    <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"მუსიკალური ნოტები"</string>
+    <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"საქსოფონი"</string>
+    <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"გიტარა"</string>
+    <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"კლავიშებიანი მუსიკალური ინსტრუმენტი"</string>
+    <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"საყვირი"</string>
+    <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"ვიოლინო"</string>
+    <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"მუსიკალური ნოტები"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"სარბენი მაისური ლენტით"</string>
+    <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"ტენისის ჩოგანი და ბურთი"</string>
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"თხილამური და ჩექმა"</string>
+    <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"ბურთი და კალათა"</string>
+    <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"კუბოკრული დროშა"</string>
+    <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"სნოუბორდერი"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"მორბენალი"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"სერფერი"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"თასი"</string>
+    <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"ცხენების დოღი"</string>
+    <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"ამერიკული ფეხბურთის ბურთი"</string>
+    <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"რაგბის ბურთი"</string>
+    <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"მოცურავე"</string>
+    <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"სახლის შენება"</string>
+    <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"სახლი ბაღით"</string>
+    <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"საოფისე შენობა"</string>
+    <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"იაპონური ფოსტა"</string>
+    <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"ევროპული ფოსტა"</string>
+    <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"საავადმყოფო"</string>
+    <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"ბანკი"</string>
+    <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"ბანკომატი"</string>
+    <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"სასტუმრო"</string>
+    <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"სიყვარულის სასტუმრო"</string>
+    <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"სადღეღამისო მაღაზია"</string>
+    <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"სკოლა"</string>
+    <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"უნივერსალური მაღაზია"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"ქარხანა"</string>
+    <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"იზაკაიას ფარანი"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"იაპონური ციხე-სიმაგრე"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"ევროპული ციხე-სიმაგრე"</string>
+    <string name="spoken_emoji_1F400" msgid="2063034795679578294">"ვირთხა"</string>
+    <string name="spoken_emoji_1F401" msgid="6736421616217369594">"თაგვი"</string>
+    <string name="spoken_emoji_1F402" msgid="7276670995895485604">"ხარი"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"აზიური კამეჩი"</string>
+    <string name="spoken_emoji_1F404" msgid="5240777285676662335">"ძროხა"</string>
+    <string name="spoken_emoji_1F406" msgid="5163461930159540018">"ლეოპარდი"</string>
+    <string name="spoken_emoji_1F407" msgid="6905370221172708160">"კურდღელი"</string>
+    <string name="spoken_emoji_1F408" msgid="1362164550508207284">"კატა"</string>
+    <string name="spoken_emoji_1F409" msgid="8476130983168866013">"დრაკონი"</string>
+    <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"ნიანგი"</string>
+    <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"ვეშაპი"</string>
+    <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"ლოკოკინა"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"გველი"</string>
+    <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"ცხენი"</string>
+    <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"ვერძი"</string>
+    <string name="spoken_emoji_1F410" msgid="8686765722255775031">"თხა"</string>
+    <string name="spoken_emoji_1F411" msgid="3585715397876383525">"ცხვარი"</string>
+    <string name="spoken_emoji_1F412" msgid="4924794582980077838">"მაიმუნი"</string>
+    <string name="spoken_emoji_1F413" msgid="1460475310405677377">"მამალი"</string>
+    <string name="spoken_emoji_1F414" msgid="5857296282631892219">"ქათამი"</string>
+    <string name="spoken_emoji_1F415" msgid="5920041074892949527">"ძაღლი"</string>
+    <string name="spoken_emoji_1F416" msgid="4362403392912540286">"ღორი"</string>
+    <string name="spoken_emoji_1F417" msgid="6836978415840795128">"დათვი"</string>
+    <string name="spoken_emoji_1F418" msgid="7926161463897783691">"სპილო"</string>
+    <string name="spoken_emoji_1F419" msgid="1055233959755784186">"რვაფეხა"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"სპირალური ნიჟარა"</string>
+    <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"ხოჭო"</string>
+    <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"ჭიანჭველა"</string>
+    <string name="spoken_emoji_1F41D" msgid="718579308764058851">"ფუტკარი"</string>
+    <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"ჭიამაია"</string>
+    <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"თევზი"</string>
+    <string name="spoken_emoji_1F420" msgid="1041145003133609221">"ტროპიკული თევზი"</string>
+    <string name="spoken_emoji_1F421" msgid="1748378324417438751">"ზღარბთევზა"</string>
+    <string name="spoken_emoji_1F422" msgid="4106724877523329148">"კუ"</string>
+    <string name="spoken_emoji_1F423" msgid="4077407945958691907">"წიწილა და ნაჭუჭი"</string>
+    <string name="spoken_emoji_1F424" msgid="6911326019270172283">"წიწილა"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"წიწილას სახე"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"ჩიტი"</string>
+    <string name="spoken_emoji_1F427" msgid="3585670324511212961">"პინგვინი"</string>
+    <string name="spoken_emoji_1F428" msgid="7955440808647898579">"კოალა"</string>
+    <string name="spoken_emoji_1F429" msgid="5028269352809819035">"პუდელი"</string>
+    <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"ცალკუზა აქლემი"</string>
+    <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"ორკუზა აქლემი"</string>
+    <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"დელფინი"</string>
+    <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"თაგვის სახე"</string>
+    <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"ძროხის სახე"</string>
+    <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"ვეფხვის სახე"</string>
+    <string name="spoken_emoji_1F430" msgid="525492897063150160">"კურდღლის სახე"</string>
+    <string name="spoken_emoji_1F431" msgid="6051358666235016851">"კატის სახე"</string>
+    <string name="spoken_emoji_1F432" msgid="7698001871193018305">"დრაკონის სახე"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"მჩქეფარე ვეშაპი"</string>
+    <string name="spoken_emoji_1F434" msgid="3619943222159943226">"ცხენის სახე"</string>
+    <string name="spoken_emoji_1F435" msgid="59199202683252958">"მაიმუნის სახე"</string>
+    <string name="spoken_emoji_1F436" msgid="340544719369009828">"ძაღლის სახე"</string>
+    <string name="spoken_emoji_1F437" msgid="1219818379784982585">"ღორის სახე"</string>
+    <string name="spoken_emoji_1F438" msgid="9128124743321008210">"ბაყაყის სახე"</string>
+    <string name="spoken_emoji_1F439" msgid="1424161319554642266">"ზაზუნას სახე"</string>
+    <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"მგლის სახე"</string>
+    <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"დათვის სახე"</string>
+    <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"პანდას სახე"</string>
+    <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"ღორის ცხვირი"</string>
+    <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"თათების კვალი"</string>
+    <string name="spoken_emoji_1F440" msgid="7144338258163384433">"თვალები"</string>
+    <string name="spoken_emoji_1F442" msgid="1905515392292676124">"ყური"</string>
+    <string name="spoken_emoji_1F443" msgid="1491504447758933115">"ცხვირი"</string>
+    <string name="spoken_emoji_1F444" msgid="3654613047946080332">"პირი"</string>
+    <string name="spoken_emoji_1F445" msgid="7024905244040509204">"ენა"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"თეთრი ზევით მიმართული შეტრიალებული საჩვენებელი"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"თეთრი ქვევით მიმართული შეტრიალებული საჩვენებელი"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"თეთრი მარცხნივ მიმართული შეტრიალებული საჩვენებელი"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"თეთრი მარჯვნივ მიმართული შეტრიალებული საჩვენებელი"</string>
+    <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"მომუშტული ხელი"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"ხელის დაქნევა"</string>
+    <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"ხელის ნიშანი OK"</string>
+    <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"მაღლა აწეული ცერი"</string>
+    <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"დაბლა დაწეული ცერი"</string>
+    <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"ტაშის დაკვრა"</string>
+    <string name="spoken_emoji_1F450" msgid="1012021072085157054">"ღია ხელები"</string>
+    <string name="spoken_emoji_1F451" msgid="8257466714629051320">"გვირგვინი"</string>
+    <string name="spoken_emoji_1F452" msgid="4567394011149905466">"ქალის ქუდი"</string>
+    <string name="spoken_emoji_1F453" msgid="5978410551173163010">"სათვალეები"</string>
+    <string name="spoken_emoji_1F454" msgid="348469036193323252">"ჰალსტუხი"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"მაისური"</string>
+    <string name="spoken_emoji_1F456" msgid="1890991330923356408">"ჯინსი"</string>
+    <string name="spoken_emoji_1F457" msgid="3904310482655702620">"კაბა"</string>
+    <string name="spoken_emoji_1F458" msgid="5704243858031107692">"კიმონო"</string>
+    <string name="spoken_emoji_1F459" msgid="3553148747050035251">"ბიკინი"</string>
+    <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"ქალის ტანსაცმელი"</string>
+    <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"საფულე"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"ხელჩანთა"</string>
+    <string name="spoken_emoji_1F45D" msgid="812176504300064819">"ქისა"</string>
+    <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"კაცის ფეხსაცმელი"</string>
+    <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"სპორტული ფეხსაცმელი"</string>
+    <string name="spoken_emoji_1F460" msgid="305863879170420855">"მაღალქუსლიანი ფეხსაცმელი"</string>
+    <string name="spoken_emoji_1F461" msgid="5160493217831417630">"ქალის სანდალი"</string>
+    <string name="spoken_emoji_1F462" msgid="1722897795554863734">"ქალის ჩექმა"</string>
+    <string name="spoken_emoji_1F463" msgid="5850772903593010699">"ფეხის კვალი"</string>
+    <string name="spoken_emoji_1F464" msgid="1228335905487734913">"ბიუსტი სილუეტში"</string>
+    <string name="spoken_emoji_1F465" msgid="4461307702499679879">"ბიუსეტები სილუეტში"</string>
+    <string name="spoken_emoji_1F466" msgid="1938873085514108889">"ბიჭი"</string>
+    <string name="spoken_emoji_1F467" msgid="8237080594860144998">"გოგო"</string>
+    <string name="spoken_emoji_1F468" msgid="6081300722526675382">"კაცი"</string>
+    <string name="spoken_emoji_1F469" msgid="1090140923076108158">"ქალი"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"ოჯახი"</string>
+    <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"ხელჩაკიდებული ქალი და კაცი"</string>
+    <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"ხელჩაკიდებული ორი კაცი"</string>
+    <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"ხელჩაკიდებული ორი ქალი"</string>
+    <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"პოლიციელი"</string>
+    <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"ქალი კურდღის ყურებით"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"პატარძალი პირბადით"</string>
+    <string name="spoken_emoji_1F471" msgid="3058247860441670806">"ქერათმიანი ადამიანი"</string>
+    <string name="spoken_emoji_1F472" msgid="3928854667819339142">"კაცი გუა-პი-მაოს ქუდით"</string>
+    <string name="spoken_emoji_1F473" msgid="5921952095808988381">"კაცი ჩალმით"</string>
+    <string name="spoken_emoji_1F474" msgid="1082237499496725183">"ხანდაზმული ადამიანი"</string>
+    <string name="spoken_emoji_1F475" msgid="7280323988642212761">"ხანდაზმული ქალი"</string>
+    <string name="spoken_emoji_1F476" msgid="4713322657821088296">"ჩვილი"</string>
+    <string name="spoken_emoji_1F477" msgid="2197036131029221370">"მშენებელი"</string>
+    <string name="spoken_emoji_1F478" msgid="7245521193493488875">"პრინცესა"</string>
+    <string name="spoken_emoji_1F479" msgid="6876475321015553972">"იაპონელი კაციჭამია"</string>
+    <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"იაპონელი გობლინი"</string>
+    <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"მოჩვენება"</string>
+    <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"ჩვილი ანგელოზი"</string>
+    <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"უცხოპლანეტელი"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"უცხოპლანეტელი მონსტრი"</string>
+    <string name="spoken_emoji_1F47F" msgid="441605977269926252">"ჭინკა"</string>
+    <string name="spoken_emoji_1F480" msgid="3696253485164878739">"თავის ქალა"</string>
+    <string name="spoken_emoji_1F481" msgid="320408708521966893">"ინფორმაციის პუნქტის თანამშრომელი"</string>
+    <string name="spoken_emoji_1F482" msgid="3424354860245608949">"მცველი"</string>
+    <string name="spoken_emoji_1F483" msgid="3221113594843849083">"მოცეკვავე"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"პომადა"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"მანიკური"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"სახის მასაჟი"</string>
+    <string name="spoken_emoji_1F487" msgid="1479113637259592150">"ვარცხნილობა"</string>
+    <string name="spoken_emoji_1F488" msgid="6922559285234100252">"დალაქის ბოძი"</string>
+    <string name="spoken_emoji_1F489" msgid="8114863680950147305">"შპრიცი"</string>
+    <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"აბი"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"კოცნის ნიშანი"</string>
+    <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"სასიყვარულო წერილი"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"დარეკვა"</string>
+    <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"ძვირფასი ქვა"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"კოცნა"</string>
+    <string name="spoken_emoji_1F490" msgid="4482549128959806736">"ბუკეტი"</string>
+    <string name="spoken_emoji_1F491" msgid="2305245307882441500">"წყვილი გულით"</string>
+    <string name="spoken_emoji_1F492" msgid="3884119934804475732">"ქორწილი"</string>
+    <string name="spoken_emoji_1F493" msgid="1208828371565525121">"მფეთქავი გული"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"გატეხილი გული"</string>
+    <string name="spoken_emoji_1F495" msgid="9206202744967130919">"ორი გული"</string>
+    <string name="spoken_emoji_1F496" msgid="5436953041732207775">"მღელვარე გული"</string>
+    <string name="spoken_emoji_1F497" msgid="7285142863951448473">"დიდი გული"</string>
+    <string name="spoken_emoji_1F498" msgid="7940131245037575715">"გული ისრით"</string>
+    <string name="spoken_emoji_1F499" msgid="4453235040265550009">"ლურჯი გული"</string>
+    <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"მწვანე გული"</string>
+    <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"ყვითელი გული"</string>
+    <string name="spoken_emoji_1F49C" msgid="453829540120898698">"მეწამული გული"</string>
+    <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"გული ლენტით"</string>
+    <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"მბრუნავი გულები"</string>
+    <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"გულის დეკორაცია"</string>
+    <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"ალმასის ფორმა შიგნით წერტილით"</string>
+    <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"ნათურა"</string>
+    <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"სიბრაზის სიმბოლო"</string>
+    <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"ბომბი"</string>
+    <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"ძილის სიმბოლო"</string>
+    <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"დაჯახების სიმბოლო"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"დაღვრილი ოფლის სიმბოლო"</string>
+    <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"წვეთი"</string>
+    <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"შხაპის სიმბოლო"</string>
+    <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"განავალი"</string>
+    <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"დაჭიმული კუნთი"</string>
+    <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"თავბრუსხვევის სიმბოლო"</string>
+    <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"დიალოგის ბუშტი"</string>
+    <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"ფიქრის ბუშტი"</string>
+    <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"თეთრი ყვავილი"</string>
+    <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"ასქულიანი სიმბოლო"</string>
+    <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"ფულის ჩანთა"</string>
+    <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"ვალუტის გაცვლა"</string>
+    <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"დოლარის მუქი ნიშანი"</string>
+    <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"საკრედიტო ბარათი"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"ბანკნოტი იენის ნიშნით"</string>
+    <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"ბანკნოტი დოლარის ნიშნით"</string>
+    <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"ბანკნოტი ევროს ნიშნით"</string>
+    <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"ბანკნოტი ფუნტის ნიშნით"</string>
+    <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"ფრთიანი ფული"</string>
+    <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"მატებადი დიაგრამა იენის ნიშნით"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"ადგილი"</string>
+    <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"პერსონალური კომპიუტერი"</string>
+    <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"ქეისი"</string>
+    <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minidisc"</string>
+    <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Floppy დიკსი"</string>
+    <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"ოპტიკური დისკი"</string>
+    <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
+    <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"ფაილის საქაღალდე"</string>
+    <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"ღია საქაღალდე"</string>
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"მოღუნული ქაღალდი"</string>
+    <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"გვერდი პირაღმა"</string>
+    <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"კალენდარი"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"მოსახევი კალენდარი"</string>
+    <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"ბარათების ინდექსი"</string>
+    <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"მატებადი დიაგრამა"</string>
+    <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"კლებადი დიაგრამა"</string>
+    <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"სვეტებიანი დიაგრამა"</string>
+    <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"ფურცლის სამაგრი დაფა"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"საკანცელარიო ჭიკარტი"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"მომრგვალებული ჭიკარტი"</string>
+    <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"ფურცლის საკინძი"</string>
+    <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"სწორი სახაზავი"</string>
+    <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"სამკუთხა სახაზავი"</string>
+    <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"სანიშნის ყურები"</string>
+    <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"დავთარი"</string>
+    <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"რვეული"</string>
+    <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"რვეული დეკორატიული ყდით"</string>
+    <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"დახურული წიგნი"</string>
+    <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"ღია წიგნი"</string>
+    <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"მწვანე წიგნი"</string>
+    <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"ლურჯი წიგნი"</string>
+    <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"ნარინჯისფერი წიგნი"</string>
+    <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"წიგნები"</string>
+    <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"ბეჯი"</string>
+    <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"გრაგნილი"</string>
+    <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"ჩანაწერი"</string>
+    <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"ყურმილი"</string>
+    <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"პეიჯერი"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"ფაქსის აპარატი"</string>
+    <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"სატელიტური ანტენა"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"რუპორი"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"გამამხნევებელი მეგაფონი"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"გამავალ წერილთა სათავსო"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"შემოსულების სათავსო"</string>
+    <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"ამანათი"</string>
+    <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"ელფოსტის სიმბოლო"</string>
+    <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"შემომავალი კონვერტი"</string>
+    <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"კონვერტი ქვედა ისრით ზევით"</string>
+    <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"დახურული საფოსტო ყუთი დაშვებული ალმით"</string>
+    <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"დახურული საფოსტო ყუთი აღმართული ალმით"</string>
+    <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"ღია საფოსტო ყუთი აღმართული ალმით"</string>
+    <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"ღია საფოსტო ყუთი დაშვებული ალმით"</string>
+    <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"საფოსტო ყუთი"</string>
+    <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"საფოსტო საყვირი"</string>
+    <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"გაზეთი"</string>
+    <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"მობილური ტელეფონი"</string>
+    <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"მობილური ტელეფონი მარჯვნივ მიმართული ისრით მარცხნივ"</string>
+    <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"ვიბრაციის რეჟიმი"</string>
+    <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"მობილური ტელეფონის გამორთვა"</string>
+    <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"მობილური ტელეფონები აკრძალულია"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"ანტენა სვეტებით"</string>
+    <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"ფოტოაპარატი"</string>
+    <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"ვიდეოკამერა"</string>
+    <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"ტელევიზია"</string>
+    <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"რადიო"</string>
+    <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"ვიდეოკასეტა"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"გადაჯვარედინებული მარჯვნივ მიმართული ისრები"</string>
+    <string name="spoken_emoji_1F501" msgid="2132188352433347009">"საათის მიმართულებით მარჯვენა და მარცხენა ღია წრიული ისრები"</string>
+    <string name="spoken_emoji_1F502" msgid="2361976580513178391">"საათის მიმართულებით მარჯვენა და მარცხენა ღია წრიული ისრები, ერთიანით წრეში"</string>
+    <string name="spoken_emoji_1F503" msgid="8936283551917858793">"საათის მიმართულებით ქვედა და ზედა ღია წრიული ისრები"</string>
+    <string name="spoken_emoji_1F504" msgid="708290317843535943">"საათის საწინააღმდეგო მიმართულებით ქვედა და ზედა ღია წრიული ისრები"</string>
+    <string name="spoken_emoji_1F505" msgid="6348909939004951860">"დაბალი სიკაშკაშის სიმბოლო"</string>
+    <string name="spoken_emoji_1F506" msgid="4449609297521280173">"მაღალი სიკაშკაშის სიმბოლო"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"ხაზგადასმული სპიკერი"</string>
+    <string name="spoken_emoji_1F508" msgid="5063567689831527865">"სპიკერი"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"სპიკერი ხმის ერთი ტალღით"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"სპიკერი ხმის სამი ტალღით"</string>
+    <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"ბატარეა"</string>
+    <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"ელექტრონული შესაერთებელი"</string>
+    <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"მარცხნივ მიმართული გამადიდებელი ლუპა"</string>
+    <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"მარჯვნივ მიმართული გამადიდებელი ლუპა"</string>
+    <string name="spoken_emoji_1F50F" msgid="915079280472199605">"საკეტი მელნის კალმით"</string>
+    <string name="spoken_emoji_1F510" msgid="7658381761691758318">"დახურული საკეტი გასაღებით"</string>
+    <string name="spoken_emoji_1F511" msgid="262319867774655688">"გასაღები"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"საკეტი"</string>
+    <string name="spoken_emoji_1F513" msgid="8579201846619420981">"ღია საკეტი"</string>
+    <string name="spoken_emoji_1F514" msgid="7027268683047322521">"ზარი"</string>
+    <string name="spoken_emoji_1F515" msgid="8903179856036069242">"ხაზგადასმული ზარი"</string>
+    <string name="spoken_emoji_1F516" msgid="108097933937925381">"სანიშნე"</string>
+    <string name="spoken_emoji_1F517" msgid="2450846665734313397">"ბმულის სიმბოლო"</string>
+    <string name="spoken_emoji_1F518" msgid="7028220286841437832">"არჩევანის ღილაკი"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Back მარცხენა ისრით ზევით"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"End მარცხენა ისრით ზევით"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"On ძახილის ნიშნით, მარცხენა მარჯვენა ისრით ზევით"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Soon მარჯვენა ისრით ზევით"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Top ზედა ისრით ზევით"</string>
+    <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"18 წლამდე აკრძალვის სიმბოლო"</string>
+    <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"კლავიში ათი"</string>
+    <string name="spoken_emoji_1F520" msgid="7335109890337048900">"ლათინური დიდი ასოების შეყვანის სიმბოლო"</string>
+    <string name="spoken_emoji_1F521" msgid="2693185864450925778">"ლათინური პატარა ასოების შეყვანის სიმბოლო"</string>
+    <string name="spoken_emoji_1F522" msgid="8419130286280673347">"რიცხვების შეყვანის სიმბოლო"</string>
+    <string name="spoken_emoji_1F523" msgid="3318053476401719421">"სიმბოლოთა შეყვანის სიმბოლო"</string>
+    <string name="spoken_emoji_1F524" msgid="1625073997522316331">"ლათინური ასოების შეყვანის სიმბოლო"</string>
+    <string name="spoken_emoji_1F525" msgid="4083884189172963790">"ხანძარი"</string>
+    <string name="spoken_emoji_1F526" msgid="2035494936742643580">"ელექტრო ლამპარი"</string>
+    <string name="spoken_emoji_1F527" msgid="134257142354034271">"ქანჩი"</string>
+    <string name="spoken_emoji_1F528" msgid="700627429570609375">"ჩაქუჩი"</string>
+    <string name="spoken_emoji_1F529" msgid="7480548235904988573">"თხილი და სამტვრევი"</string>
+    <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"ჰოჩოს დანა"</string>
+    <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"პისტოლეტი"</string>
+    <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"მიკროსკოპი"</string>
+    <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"ტელესკოპი"</string>
+    <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"კრისტალის ბურთი"</string>
+    <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"ექვსქიმა ვარსკვლავი შუა წერტილით"</string>
+    <string name="spoken_emoji_1F530" msgid="3572898444281774023">"დამწყების იაპონური სიმბოლო"</string>
+    <string name="spoken_emoji_1F531" msgid="5225633376450025396">"სამკაპის ემბლემა"</string>
+    <string name="spoken_emoji_1F532" msgid="9169568490485180779">"შავი კვადრატული ღილაკი"</string>
+    <string name="spoken_emoji_1F533" msgid="6554193837201918598">"თეთრი კვადრატული ღილაკი"</string>
+    <string name="spoken_emoji_1F534" msgid="8339298801331865340">"დიდი წითელი წრე"</string>
+    <string name="spoken_emoji_1F535" msgid="1227403104835533512">"დიდი ლურჯი წრე"</string>
+    <string name="spoken_emoji_1F536" msgid="5477372445510469331">"დიდი ნარინჯისფერი ალმასი"</string>
+    <string name="spoken_emoji_1F537" msgid="3158915214347274626">"დიდი ლურჯი ალმასი"</string>
+    <string name="spoken_emoji_1F538" msgid="4300084249474451991">"პატარა ნარინჯისფერი ალმასი"</string>
+    <string name="spoken_emoji_1F539" msgid="6535159756325742275">"პატარა ლურჯი ალმასი"</string>
+    <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"ზევით მიმართული წითელი სამკუთხედი"</string>
+    <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"ქვევით მიმართული წითელი სამკუთხედი"</string>
+    <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"ზევით მიმართული პატარა წითელი სამკუთხედი"</string>
+    <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"ქვევით მიმართული პატარა წითელი სამკუთხედი"</string>
+    <string name="spoken_emoji_1F550" msgid="7761392621689986218">"საათი, რომელიც აჩვენებს პირველ საათს"</string>
+    <string name="spoken_emoji_1F551" msgid="2699448504113431716">"საათი, რომელიც აჩვენებს ორ საათს"</string>
+    <string name="spoken_emoji_1F552" msgid="5872107867411853750">"საათი, რომელიც აჩვენებს სამ საათს"</string>
+    <string name="spoken_emoji_1F553" msgid="8490966286158640743">"საათი, რომელიც აჩვენებს ოთხ საათს"</string>
+    <string name="spoken_emoji_1F554" msgid="7662585417832909280">"საათი, რომელიც აჩვენებს ხუთ საათს"</string>
+    <string name="spoken_emoji_1F555" msgid="5564698204520412009">"საათი, რომელიც აჩვენებს ექვს საათს"</string>
+    <string name="spoken_emoji_1F556" msgid="7325712194836512205">"საათი, რომელიც აჩვენებს შვიდ საათს"</string>
+    <string name="spoken_emoji_1F557" msgid="4398343183682848693">"საათი, რომელიც აჩვენებს რვა საათს"</string>
+    <string name="spoken_emoji_1F558" msgid="3110507820404018172">"საათი, რომელიც აჩვენებს ცხრა საათს"</string>
+    <string name="spoken_emoji_1F559" msgid="2972160366448337839">"საათი, რომელიც აჩვენებს ათ საათს"</string>
+    <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"საათი, რომელიც აჩვენებს თერთმეტ საათს"</string>
+    <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"საათი, რომელიც აჩვენებს თორმეტ საათს"</string>
+    <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"საათი, რომელიც აჩვენებს ორის ნახევარს"</string>
+    <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"საათი, რომელიც აჩვენებს სამის ნახევარს"</string>
+    <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"საათი, რომელიც აჩვენებს ოთხის ნახევარს"</string>
+    <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"საათი, რომელიც აჩვენებს ხუთის ნახევარს"</string>
+    <string name="spoken_emoji_1F560" msgid="5771339179963924448">"საათი, რომელიც აჩვენებს ექვსის ნახევარს"</string>
+    <string name="spoken_emoji_1F561" msgid="3139944777062475382">"საათი, რომელიც აჩვენებს შვიდის ნახევარს"</string>
+    <string name="spoken_emoji_1F562" msgid="8273944611162457084">"საათი, რომელიც აჩვენებს რვის ნახევარს"</string>
+    <string name="spoken_emoji_1F563" msgid="8643976903718136299">"საათი, რომელიც აჩვენებს ცხრის ნახევარს"</string>
+    <string name="spoken_emoji_1F564" msgid="3511070239796141638">"საათი, რომელიც აჩვენებს ათის ნახევარს"</string>
+    <string name="spoken_emoji_1F565" msgid="4567451985272963088">"საათი, რომელიც აჩვენებს თერთმეტის ნახევარს"</string>
+    <string name="spoken_emoji_1F566" msgid="2790552288169929810">"საათი, რომელიც აჩვენებს თორმეტის ნახევარს"</string>
+    <string name="spoken_emoji_1F567" msgid="9026037362100689337">"საათი, რომელიც აჩვენებს პირველის ნახევარს"</string>
+    <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"ფუძიამა"</string>
+    <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"ტოკიოს ანძა"</string>
+    <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"თავისუფლების ქანდაკება"</string>
+    <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"იაპონიის სილუეტი"</string>
+    <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"მოიანის ქვის ქანდაკება"</string>
+    <string name="spoken_emoji_1F600" msgid="7601109464776835283">"სასტიკი სახე"</string>
+    <string name="spoken_emoji_1F601" msgid="746026523967444503">"სასტიკი სახე მომღიმარი თვალებით"</string>
+    <string name="spoken_emoji_1F602" msgid="8354558091785198246">"სახე სიხარულის ცრემლებით"</string>
+    <string name="spoken_emoji_1F603" msgid="3861022912544159823">"მომღიმარი პირდაღებული სახე"</string>
+    <string name="spoken_emoji_1F604" msgid="5119021072966343531">"მომღიმარი სახე, ღია პირით და მოცინარი თვალებით"</string>
+    <string name="spoken_emoji_1F605" msgid="6140813923973561735">"მომღიმარი სახე, ღია პირით და ცივი ოფლით"</string>
+    <string name="spoken_emoji_1F606" msgid="3549936813966832799">"მომღიმარი სახე, ღია პირით და კარგად დახუჭული თვალებით"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"მომღიმარი სახე მნათი წრით"</string>
+    <string name="spoken_emoji_1F608" msgid="7343559595089811640">"მომღიმარი სახე რქებით"</string>
+    <string name="spoken_emoji_1F609" msgid="5481030187207504405">"თვალის ჩაკვრა"</string>
+    <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"მომღიმარი სახე მომღიმარი თვალებით"</string>
+    <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"გემრიელი საჭმლის დამაგემოვნებელი სახე"</string>
+    <string name="spoken_emoji_1F60C" msgid="349384012958268496">"შებამოგვრილი სახე"</string>
+    <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"მომღიმარი სახე გულის ფორმის თვალებით"</string>
+    <string name="spoken_emoji_1F60E" msgid="441718886380605643">"მომღიმარი სახე მზის სათვალეებით"</string>
+    <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"თავმომწონე სახე"</string>
+    <string name="spoken_emoji_1F610" msgid="3225675825334102369">"ნეიტრალური სახე"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"უემოციო სახე"</string>
+    <string name="spoken_emoji_1F612" msgid="985081329745137998">"უკმაყოფილო სახე"</string>
+    <string name="spoken_emoji_1F613" msgid="5548607684830303562">"სახე ცივი ოფლით"</string>
+    <string name="spoken_emoji_1F614" msgid="3196305665259916390">"ჩაფიქრებული სახე"</string>
+    <string name="spoken_emoji_1F615" msgid="3051674239303969101">"დაბნეული სახე"</string>
+    <string name="spoken_emoji_1F616" msgid="8124887056243813089">"შეცბუნებული სახე"</string>
+    <string name="spoken_emoji_1F617" msgid="7052733625511122870">"კოცნის სახე"</string>
+    <string name="spoken_emoji_1F618" msgid="408207170572303753">"კოცნის გაგზავნის სახე"</string>
+    <string name="spoken_emoji_1F619" msgid="8645430335143153645">"კოცნის სახე მომღიმარი თვალებით"</string>
+    <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"კოცნის სახე დახუჭული თვალებით"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"ენაგამოყოფილი სახე"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"ენაგამოყოფილი სახე თვალის ჩაკვრით"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"ენაგამოყოფილი სახე მჭიდროდ დახუჭული თვალებით"</string>
+    <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"იმედგაცრუებული სახე"</string>
+    <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"შეწუხებული სახე"</string>
+    <string name="spoken_emoji_1F620" msgid="6051942001307375830">"ბრაზიანი სახე"</string>
+    <string name="spoken_emoji_1F621" msgid="2114711878097257704">"გაბუტული სახე"</string>
+    <string name="spoken_emoji_1F622" msgid="29291014645931822">"მტირალი სახე"</string>
+    <string name="spoken_emoji_1F623" msgid="7803959833595184773">"შეუპოვარი სახე"</string>
+    <string name="spoken_emoji_1F624" msgid="8637637647725752799">"ტრიუმფალური სახე"</string>
+    <string name="spoken_emoji_1F625" msgid="6153625183493635030">"იმედგაცრუებული მაგრამ შვებამოგვრილი სახე"</string>
+    <string name="spoken_emoji_1F626" msgid="6179485689935562950">"წარბშეჭმუხნული პირდაღებული სახე"</string>
+    <string name="spoken_emoji_1F627" msgid="8566204052903012809">"გატანჯული სახე"</string>
+    <string name="spoken_emoji_1F628" msgid="8875777401624904224">"შიშნარევი სახე"</string>
+    <string name="spoken_emoji_1F629" msgid="1411538490319190118">"დაქანცული სახე"</string>
+    <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"მომძინარე სახე"</string>
+    <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"დაღლილი სახე"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"დამანჭული სახე"</string>
+    <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"ხმამაღლა მტირალი სახე"</string>
+    <string name="spoken_emoji_1F62E" msgid="726083405284353894">"პირდაღებული სახე"</string>
+    <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"გაჩუმებული სახე"</string>
+    <string name="spoken_emoji_1F630" msgid="3298804852155581163">"სახე ღია პირით და ცივი ოფლით"</string>
+    <string name="spoken_emoji_1F631" msgid="1603391150954646779">"შიშისგან მყვირალი სახე"</string>
+    <string name="spoken_emoji_1F632" msgid="4846193232203976013">"გაოცებული სახე"</string>
+    <string name="spoken_emoji_1F633" msgid="4023593836629700443">"წამოწითლებული სახე"</string>
+    <string name="spoken_emoji_1F634" msgid="3155265083246248129">"მძინარი სახე"</string>
+    <string name="spoken_emoji_1F635" msgid="4616691133452764482">"თავბრუდახვეული სახე"</string>
+    <string name="spoken_emoji_1F636" msgid="947000211822375683">"უპირო სახე"</string>
+    <string name="spoken_emoji_1F637" msgid="1269551267347165774">"სახე სამედიცინო ნიღბით"</string>
+    <string name="spoken_emoji_1F638" msgid="3410766467496872301">"სასტიკი კატის სახე მომღიმარი თვალებით"</string>
+    <string name="spoken_emoji_1F639" msgid="1833417519781022031">"კატის სახე სიხარულის ცრემლებით"</string>
+    <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"მომღიმარი კატის პირდაღებული სახე"</string>
+    <string name="spoken_emoji_1F63B" msgid="74417995938927571">"მომღიმარი კატის სახე გულის ფორმის თვალებით"</string>
+    <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"კატის სახე ირონიული ღიმილით"</string>
+    <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"კოცნის სახე დახუჭული თვალებით"</string>
+    <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"გაბუტული კატის სახე"</string>
+    <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"მტირალი კატის სახე"</string>
+    <string name="spoken_emoji_1F640" msgid="6023054549904329638">"დაქანცული კატის სახე"</string>
+    <string name="spoken_emoji_1F645" msgid="5202090629227587076">"სახე უვარგისობის ჟესტით"</string>
+    <string name="spoken_emoji_1F646" msgid="6734425134415138134">"სახე ok ჟესტით"</string>
+    <string name="spoken_emoji_1F647" msgid="1090285518444205483">"ადამიანი თავის დაკვრით"</string>
+    <string name="spoken_emoji_1F648" msgid="8978535230610522356">"არც-თუ-ისე ეშმაკი მაიმუნი"</string>
+    <string name="spoken_emoji_1F649" msgid="8486145279809495102">"არ-მესმის მაიმუნი"</string>
+    <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"არ ვლაპარაკობ მაიმუნი"</string>
+    <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"ბედნიერი, ხელაწეული ადამიანი"</string>
+    <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"სიხარულით ხელაპყრობილი ადამიანი"</string>
+    <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"წარბშეკრული ადამიანი"</string>
+    <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"ადამიანი გაბუტული სახით"</string>
+    <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"ადამიანი დაწყობილი ხელებით"</string>
+    <string name="spoken_emoji_1F680" msgid="513263736012689059">"რაკეტა"</string>
+    <string name="spoken_emoji_1F681" msgid="9201341783850525339">"ვერტმფრენი"</string>
+    <string name="spoken_emoji_1F682" msgid="8046933583867498698">"ორთქლის ლოკომოტივი"</string>
+    <string name="spoken_emoji_1F683" msgid="8772750354339223092">"რკინიგზის ვაგონი"</string>
+    <string name="spoken_emoji_1F684" msgid="346396777356203608">"ჩქაროსნული მატარებელი"</string>
+    <string name="spoken_emoji_1F685" msgid="1237059817190832730">"ჩქაროსნული მატარებელი ტყვიის წვერით"</string>
+    <string name="spoken_emoji_1F686" msgid="3525197227223620343">"მატარებელი"</string>
+    <string name="spoken_emoji_1F687" msgid="5110143437960392837">"მეტრო"</string>
+    <string name="spoken_emoji_1F688" msgid="4702085029871797965">"მსუბუქი რკინიგზა"</string>
+    <string name="spoken_emoji_1F689" msgid="2375851019798817094">"სადგური"</string>
+    <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"ტრამვაი"</string>
+    <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"ტრამვაის ვაგონი"</string>
+    <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"ავტობუსი"</string>
+    <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"მომავალი ავტობუსი"</string>
+    <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"ტროლეიბუსი"</string>
+    <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"ავტობუსის გაჩერება"</string>
+    <string name="spoken_emoji_1F690" msgid="8080964620200195262">"მიკროავტობუსი"</string>
+    <string name="spoken_emoji_1F691" msgid="999173032408730501">"სასწრაფო"</string>
+    <string name="spoken_emoji_1F692" msgid="1712863785341849487">"სახანძრო"</string>
+    <string name="spoken_emoji_1F693" msgid="7987109037389768934">"პოლიციის მანქანა"</string>
+    <string name="spoken_emoji_1F694" msgid="6061658916653884608">"მომავალი პოლიციის მანქანა"</string>
+    <string name="spoken_emoji_1F695" msgid="6913445460364247283">"ტაქსი"</string>
+    <string name="spoken_emoji_1F696" msgid="6391604457418285404">"მომავალი ტაქსი"</string>
+    <string name="spoken_emoji_1F697" msgid="7978399334396733790">"ავტომობილი"</string>
+    <string name="spoken_emoji_1F698" msgid="7006050861129732018">"მომავალი ავტომობილი"</string>
+    <string name="spoken_emoji_1F699" msgid="630317052666590607">"რეკრეაციული ავტომანქანა"</string>
+    <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"სატვირთო მანქანა"</string>
+    <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"გადაბმული სატვირთო"</string>
+    <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"ტრაქტორი"</string>
+    <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"მონორელსი"</string>
+    <string name="spoken_emoji_1F69E" msgid="169238196389832234">"მთის რკინიგზა"</string>
+    <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"შეჩერებული რკინიგზა"</string>
+    <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"მთის საბაგირო"</string>
+    <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"საბაგირო"</string>
+    <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"გემი"</string>
+    <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"სანიჩბოსნო ნავი"</string>
+    <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"სწრაფმავალი მოტორიანი გემი"</string>
+    <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"ჰორიზონტალური შუქნიშანი"</string>
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"ვერტიკალური შუქნიშანი"</string>
+    <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"მშენებლობის ნიშანი"</string>
+    <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"პოლიციის მანქანა შუქის სიგნალით"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"სამკუთხა ალამი პოსტზე"</string>
+    <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"კარი"</string>
+    <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"შესვლის აკრძალვის ნიშანი"</string>
+    <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"მოწევის ნიშანი"</string>
+    <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"მოწევის აკრძალვის ნიშანი"</string>
+    <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"ნაგვის გამოყოფილ ადგილზე ჩაყრის სიმბოლო"</string>
+    <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"სიმბოლო ნაგავი არ დაყაროთ"</string>
+    <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"დასალევად ვარგისი წყლის სიმბოლო"</string>
+    <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"დასალევად უვარგისი წყლის სიმბოლო"</string>
+    <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"ველოსიპედი"</string>
+    <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"ველოსიპედები არ არის"</string>
+    <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"ველოსიპედისტი"</string>
+    <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"სამთო ველოსიპედისტი"</string>
+    <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"ფეხით მოსიარულე"</string>
+    <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"ფეხით სიარული აკრძალულია"</string>
+    <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"ბავშვების გადასასვლელი"</string>
+    <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"კაცების ნიშანი"</string>
+    <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"ქალების ნიშანი"</string>
+    <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"საპირფარეშო"</string>
+    <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"ჩვილების ნიშანი"</string>
+    <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"ტუალეტი"</string>
+    <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"უნიტაზი"</string>
+    <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"შხაპი"</string>
+    <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"სააბაზანო"</string>
+    <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"აბაზანა"</string>
+    <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"პასპორტის კონტროლი"</string>
+    <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"საბაჟო"</string>
+    <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"ბარგის აღება"</string>
+    <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"ბარგის ჩაბარება"</string>
+</resources>
diff --git a/java/res/values-ka-rGE/strings-talkback-descriptions.xml b/java/res/values-ka-rGE/strings-talkback-descriptions.xml
index dc6af52..1470316 100644
--- a/java/res/values-ka-rGE/strings-talkback-descriptions.xml
+++ b/java/res/values-ka-rGE/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ადგილები"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"სიმბოლოები"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"სიცილაკები"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-ka-rGE/strings.xml b/java/res/values-ka-rGE/strings.xml
index 547bf29..4677b18 100644
--- a/java/res/values-ka-rGE/strings.xml
+++ b/java/res/values-ka-rGE/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"შეყვანის მეთოდები"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"კვლევის აღრიცხვის ბრძანებები"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"კონტაქტებში ძებნა"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"კონტაქტების სიის გამოყენება მართლწერის შემოწმებისას"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"ვიბრაცია კლავიშზე დაჭერისას"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"შეყვანის ენები"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"შეეხეთ ისევ შესანახად"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"ხელმისაწვდომია ლექსიკონი"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"მომხმარებლის უკუკავშირის ჩართვა"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"შეიტანეთ წვლილი შეყვანის ამ მეთოდის გაუმჯობესებაში — გააგზავნეთ მოხმარების სტატისტიკა და ავარიული გათიშვების ანგარიშები"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"კლავიატურის თემა"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"ინგლისური (გართ. სამ.)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"ინგლისური (აშშ)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"ჩართვა"</string>
     <string name="not_now" msgid="6172462888202790482">"ახლა არა"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"შეყვანის იგივე სტილი უკვე არსებობს: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"გამოყენებადობის კვლევის რეჟიმი"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"კლავიშზე გრძელი დაჭერის დაყოვნება"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"კლავიშზე დაჭერის ვიბრაციის ხანგრძლივობა"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"კლავიშზე დაჭერის ხმა"</string>
diff --git a/java/res/values-kk/strings.xml b/java/res/values-kk/strings.xml
index 83ac0da..2978051 100644
--- a/java/res/values-kk/strings.xml
+++ b/java/res/values-kk/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Енгізу опциялары"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Журнал пәрмендерін зерттеу"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Контакт аттарын іздеу"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Емлені тексеру құралы контактілер тізімінің жазбаларын пайдаланады"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Пернені басқан кездегі діріл"</string>
@@ -82,8 +81,6 @@
     <string name="select_language" msgid="3693815588777926848">"Енгізу тілдері"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Сақтау үшін қайта түртіңіз"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Сөздік қолжетімді"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Пайдаланушының кері байланысын қосу"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Қолданыс статистикасын және бұзылыс есептерін автоматты түрде жіберу арқылы осы енгізу әдісінің редакторын арттыруға көмектесу"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Пернетақта тақырыбы"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"ағылшын (ҰБ)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"ағылшын (АҚШ)"</string>
@@ -113,7 +110,6 @@
     <string name="enable" msgid="5031294444630523247">"Қосу"</string>
     <string name="not_now" msgid="6172462888202790482">"Қазір емес"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Бірдей енгізу стилі бұрыннан бар: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Қолайлылықты зерттеу режимі"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Пернені ұзақ басу кідірісі"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Пернені басқан кездегі діріл ұзақтығы"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Пернені басқан кездегі дыбыс деңгейі"</string>
diff --git a/java/res/values-km-rKH/strings-action-keys.xml b/java/res/values-km-rKH/strings-action-keys.xml
index ff747d9..d6b11b7 100644
--- a/java/res/values-km-rKH/strings-action-keys.xml
+++ b/java/res/values-km-rKH/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"មុន"</string>
     <string name="label_done_key" msgid="7564866296502630852">"រួចរាល់"</string>
     <string name="label_send_key" msgid="482252074224462163">"ផ្ញើ"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"ផ្អាក"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"រង់ចាំ"</string>
 </resources>
diff --git a/java/res/values-km-rKH/strings-emoji-descriptions.xml b/java/res/values-km-rKH/strings-emoji-descriptions.xml
new file mode 100644
index 0000000..c81e5e1
--- /dev/null
+++ b/java/res/values-km-rKH/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="spoken_emoji_00A9" msgid="2859822817116803638">"សញ្ញា​រក្សា​សិទ្ធ"</string>
+    <string name="spoken_emoji_00AE" msgid="7708335454134589027">"សញ្ញា​​​ចុះ​បញ្ជី"</string>
+    <string name="spoken_emoji_203C" msgid="153340916701508663">"សញ្ញា​ឧទាន​​ពីរ"</string>
+    <string name="spoken_emoji_2049" msgid="4877256448299555371">"សញ្ញា​​ឧទាន​សញ្ញា​សួរ"</string>
+    <string name="spoken_emoji_2122" msgid="9188440722954720429">"សញ្ញា​​​និក្ខិត្តសញ្ញា"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"ប្រភព​ព័ត៌មាន"</string>
+    <string name="spoken_emoji_2194" msgid="8055202727034946680">"ព្រួញ​ឆ្វេងស្ដាំ"</string>
+    <string name="spoken_emoji_2195" msgid="8028122253301087407">"ព្រួញ​ឡើង​លើ​ចុះក្រោម"</string>
+    <string name="spoken_emoji_2196" msgid="4019164898967854363">"ព្រួញ​ទិសពាយព្យ"</string>
+    <string name="spoken_emoji_2197" msgid="4255723717709017801">"ព្រួញ​​ទិស​ឥសាន្ត​ឦសាន្ត"</string>
+    <string name="spoken_emoji_2198" msgid="1452063451313622090">"ព្រួញ​​ទិស​អាគ្នេយ៍"</string>
+    <string name="spoken_emoji_2199" msgid="6942722693368807849">"ព្រួញ​​ទិស​និរតី"</string>
+    <string name="spoken_emoji_21A9" msgid="5204750172335111188">"ព្រួញ​ទៅ​ឆ្វេង​មាន​ទំពក់"</string>
+    <string name="spoken_emoji_21AA" msgid="3950259884359247006">"ព្រួញ​ទៅ​​ស្ដាំ​មាន​ទំពក់"</string>
+    <string name="spoken_emoji_231A" msgid="6751448803233874993">"នាឡិកា​ដៃ"</string>
+    <string name="spoken_emoji_231B" msgid="5956428809948426182">"នាឡិកា​ពិសោធន៍"</string>
+    <string name="spoken_emoji_23E9" msgid="4022497733535162237">"ត្រីកោណ​ខ្មៅ​ពីរ​ចង្អុល​ទៅ​ស្ដាំ"</string>
+    <string name="spoken_emoji_23EA" msgid="2251396938087774944">"ត្រីកោណ​ខ្មៅ​ពីរ​ចង្អុល​ទៅ​ឆ្វេង"</string>
+    <string name="spoken_emoji_23EB" msgid="3746885195641491865">"ត្រីកោណ​ខ្មៅ​ពីរ​ចង្អុល​​ឡើង​លើ"</string>
+    <string name="spoken_emoji_23EC" msgid="7852372752901163416">"ត្រីកោណ​ខ្មៅ​ពីរ​ចង្អុល​​ចុះក្រោម"</string>
+    <string name="spoken_emoji_23F0" msgid="8474219588750627870">"នាឡិកា​រោទ៍"</string>
+    <string name="spoken_emoji_23F3" msgid="166900119581024371">"កែវ​ពិសោធន៍​មាន​ខ្សាច់ហូរ"</string>
+    <string name="spoken_emoji_24C2" msgid="3948348737566038470">"អក្សរ​អឹម​ធំ​ក្នុង​រង្វង់"</string>
+    <string name="spoken_emoji_25AA" msgid="7865181015100227349">"ការ៉េ​តូច​​ពណ៌ខ្មៅ"</string>
+    <string name="spoken_emoji_25AB" msgid="6446532820937381457">"ការ៉េ​តូច​ពណ៌​ស"</string>
+    <string name="spoken_emoji_25B6" msgid="2423897708496040947">"ត្រីកោណ​ចង្អុល​ស្ដាំ​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_25C0" msgid="3595083440074484934">"ត្រីកោណ​ចង្អុល​​ឆ្វេង​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_25FB" msgid="4838691986881215419">"ការ៉េ​មធ្យម​ពណ៌ស"</string>
+    <string name="spoken_emoji_25FC" msgid="7008859564991191050">"ការ៉េ​មធ្យម​ពណ៌​​ខ្មៅ"</string>
+    <string name="spoken_emoji_25FD" msgid="7673439755069217479">"ការ៉េ​តូច​មធ្យម​ពណ៌​ស"</string>
+    <string name="spoken_emoji_25FE" msgid="6782214109919768923">"ការ៉េ​តូច​មធ្យម​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_2600" msgid="2272722634618990413">"ព្រះអាទិត្យ​ពណ៌​ខ្មៅ​​បញ្ចេញ​ពន្លឺ"</string>
+    <string name="spoken_emoji_2601" msgid="6205136889311537150">"ពពក"</string>
+    <string name="spoken_emoji_260E" msgid="8670395193046424238">"ទូរស័ព្ទ​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_2611" msgid="4530550203347054611">"ប្រអប់​មាន​សញ្ញា​ធីក"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"ឆត្រ​មាន​តំណក់​ទឹក​ភ្លៀង"</string>
+    <string name="spoken_emoji_2615" msgid="3320562382424018588">"ភេសជ្ជៈ​ក្ដៅ"</string>
+    <string name="spoken_emoji_261D" msgid="4690554173549768467">"ចង្អុល​ដៃ​ចង្អុល​ឡើង​ពណ៌ស"</string>
+    <string name="spoken_emoji_263A" msgid="3170094381521989300">"មុខ​ញញឹម​ពណ៌​ស"</string>
+    <string name="spoken_emoji_2648" msgid="4621241062667020673">"មេសៈរាសី"</string>
+    <string name="spoken_emoji_2649" msgid="7694461245947059086">"តៅរ៉ូស"</string>
+    <string name="spoken_emoji_264A" msgid="1258074605878705030">"ហ្គិមីនី"</string>
+    <string name="spoken_emoji_264B" msgid="4409219914377810956">"សញ្ញា​ទី៤​នៃ​រាសីចក្រ"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"លីអូ"</string>
+    <string name="spoken_emoji_264D" msgid="1504758945499854018">"សញ្ញា​រាសី"</string>
+    <string name="spoken_emoji_264E" msgid="2354847104530633519">"លីប្រា"</string>
+    <string name="spoken_emoji_264F" msgid="5822933280406416112">"រាសីវច្ចៈ"</string>
+    <string name="spoken_emoji_2650" msgid="4832481156714796163">"រាសី​ធ្នូ"</string>
+    <string name="spoken_emoji_2651" msgid="840953134601595090">"រាសី​សេះ"</string>
+    <string name="spoken_emoji_2652" msgid="3586925968718775281">"Aquarius"</string>
+    <string name="spoken_emoji_2653" msgid="8420547731496254492">"រាសី​អាប់អួ"</string>
+    <string name="spoken_emoji_2660" msgid="4541170554542412536">"ឈុត​ប៊ិច​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_2663" msgid="3669352721942285724">"ឈុត​​ជួង​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_2665" msgid="6347941599683765843">"ឈុត​​កឺ​ពណ៌ខ្មៅ"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"ឈុត​​ការ៉ូ​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_2668" msgid="7063148281053820386">"Hot springs"</string>
+    <string name="spoken_emoji_267B" msgid="21716857176812762">"និមិត្ត​សញ្ញា​ធុងសំរាម​សកល​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_267F" msgid="8833496533226475443">"និមិត្ត​សញ្ញា​រទេះ​រុញ"</string>
+    <string name="spoken_emoji_2693" msgid="7443148847598433088">"យុថ្កា"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"សញ្ញា​ព្រមាន"</string>
+    <string name="spoken_emoji_26A1" msgid="5604749644693339145">"សញ្ញា​តង់ស្យុង​​ខ្ពស់"</string>
+    <string name="spoken_emoji_26AA" msgid="8005748091690377153">"រង្វង់​ពណ៌ស​មធ្យម"</string>
+    <string name="spoken_emoji_26AB" msgid="1655910278422753244">"រង្វង់​ពណ៌​ខ្មៅ​មធ្យម"</string>
+    <string name="spoken_emoji_26BD" msgid="1545218197938889737">"បាល់​ទាត់"</string>
+    <string name="spoken_emoji_26BE" msgid="8959760533076498209">"បាល់បោះ"</string>
+    <string name="spoken_emoji_26C4" msgid="3045791757044255626">"អ្នកលេង​ព្រិល​ដោយ​គ្មាន​ព្រិល"</string>
+    <string name="spoken_emoji_26C5" msgid="5580129409712578639">"ព្រះអាទិត្យ​នៅ​​ក្រោយ​ពពក"</string>
+    <string name="spoken_emoji_26CE" msgid="8963656417276062998">"សញ្ញា (⛎)"</string>
+    <string name="spoken_emoji_26D4" msgid="2231451988209604130">"ហាមចូល"</string>
+    <string name="spoken_emoji_26EA" msgid="7513319636103804907">"វិហារ​សាសនា"</string>
+    <string name="spoken_emoji_26F2" msgid="7134115206158891037">"បាញ់​ទឹក"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"ទង់ជាតិ​​​ក្នុង​រន្ធ"</string>
+    <string name="spoken_emoji_26F5" msgid="4766328116769075217">"ទូក​ក្ដោង"</string>
+    <string name="spoken_emoji_26FA" msgid="5888017494809199037">"តង់"</string>
+    <string name="spoken_emoji_26FD" msgid="2417060622927453534">"បូម​ប្រេង"</string>
+    <string name="spoken_emoji_2702" msgid="4005741160717451912">"កន្ត្រៃ​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"សញ្ញា​ធីក​ពណ៌​ស​ធំ"</string>
+    <string name="spoken_emoji_2708" msgid="7153840886849268988">"យន្តហោះ"</string>
+    <string name="spoken_emoji_2709" msgid="2217319160724311369">"ស្រោម​សំបុត្រ"</string>
+    <string name="spoken_emoji_270A" msgid="508347232762319473">"លើក​កណ្ដាប់ដៃ"</string>
+    <string name="spoken_emoji_270B" msgid="6640562128327753423">"លើកដៃ"</string>
+    <string name="spoken_emoji_270C" msgid="1344288035704944581">"លើក​ដៃ​​ជ័យជម្នះ"</string>
+    <string name="spoken_emoji_270F" msgid="6108251586067318718">"ខ្មៅដៃ"</string>
+    <string name="spoken_emoji_2712" msgid="6320544535087710482">"ចុង​ខ្មៅ​ដៃ"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"សញ្ញា​ធីក​ដិត"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"សញ្ញា​គុណ​ដិត"</string>
+    <string name="spoken_emoji_2728" msgid="5650330815808691881">"បញ្ចេញ​ពន្លឺ"</string>
+    <string name="spoken_emoji_2733" msgid="8915809595141157327">"ផ្កាយ​ប្រាំ​បី​ជ្រុង"</string>
+    <string name="spoken_emoji_2734" msgid="4846583547980754332">"ផ្កាយ​ប្រាំ​បី​ជ្រុង​ដិត"</string>
+    <string name="spoken_emoji_2744" msgid="4350636647760161042">"សញ្ញា (❄)"</string>
+    <string name="spoken_emoji_2747" msgid="3718282973916474455">"បញ្ចេញ​ពន្លឺ"</string>
+    <string name="spoken_emoji_274C" msgid="2752145886733295314">"សញ្ញា​​ខ្វែង"</string>
+    <string name="spoken_emoji_274E" msgid="4262918689871098338">"សញ្ញា​ខ្វែង​ក្នុង​ប្រអប់"</string>
+    <string name="spoken_emoji_2753" msgid="6935897159942119808">"សញ្ញា​សួរ​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_2754" msgid="7277504915105532954">"សញ្ញា​សួរ​ពណ៌ស"</string>
+    <string name="spoken_emoji_2755" msgid="6853076969826960210">"សញ្ញា​ឧទាន​ពណ៌​ស"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"សញ្ញា​ឧទាន​ពណ៌ខ្មៅ​ដិត"</string>
+    <string name="spoken_emoji_2764" msgid="4214257843609432167">"បេះដូង​​​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"សញ្ញា​បូក​ដិត"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"សញ្ញា​ដក​​ដិត"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"សញ្ញា​​​ចែក​ដិត"</string>
+    <string name="spoken_emoji_27A1" msgid="3513434778263100580">"ព្រួញ​ទៅ​ស្ដាំ​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"រង្វង់​​អង្កាញ់"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"រង្វង់​អង្កាញ់​ពីរ"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"ព្រួញ​ចង្អុល​ទៅ​ស្ដាំ​បន្ទាប់មក​បត់​ឡើង​លើ"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"ព្រួញ​ចង្អុល​ទៅ​ស្ដាំ​បន្ទាប់មក​បត់​ចុះ​ក្រោម"</string>
+    <string name="spoken_emoji_2B05" msgid="4813405635410707690">"ព្រួញ​ពណ៌ខ្មៅ​ទៅ​ឆ្វេង"</string>
+    <string name="spoken_emoji_2B06" msgid="1223172079106250748">"ព្រួញ​​ពណ៌​ខ្មៅ​ឡើង​លើ"</string>
+    <string name="spoken_emoji_2B07" msgid="1599124424746596150">"ព្រួញ​ពណ៌​ខ្មៅ​​ចុះក្រោម"</string>
+    <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"ប្រអប់​ការ៉េ​ធំ​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"ប្រអប់​ការ៉េ​ធំ​ពណ៌​ស"</string>
+    <string name="spoken_emoji_2B50" msgid="3850845519526950524">"​ផ្កាយ​​មធ្យម​ពណ៌ស"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"រង្វង់​ធំ​​ដិត"</string>
+    <string name="spoken_emoji_3030" msgid="4609172241893565639">"សញ្ញា​​រលក​ដិត"</string>
+    <string name="spoken_emoji_303D" msgid="2545833934975907505">"សញ្ញា (〽)"</string>
+    <string name="spoken_emoji_3297" msgid="928912923628973800">"សញ្ញា (㊗)"</string>
+    <string name="spoken_emoji_3299" msgid="3930347573693668426">"សញ្ញា (㊙)"</string>
+    <string name="spoken_emoji_1F004" msgid="1705216181345894600">"សញ្ញា (🀄)"</string>
+    <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"សញ្ញា (🃏)"</string>
+    <string name="spoken_emoji_1F170" msgid="3817698686602826773">"ឈាម​ប្រភេទ A"</string>
+    <string name="spoken_emoji_1F171" msgid="3684218589626650242">"ឈាម​ប្រភេទ B"</string>
+    <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"ឈាម​ប្រភេទ O"</string>
+    <string name="spoken_emoji_1F17F" msgid="463634348668462040">"ចំណត"</string>
+    <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"ឈាម​ប្រភេទ AB"</string>
+    <string name="spoken_emoji_1F191" msgid="5386969264431429221">"ប្រអប់ CL"</string>
+    <string name="spoken_emoji_1F192" msgid="8324226436829162496">"ប្រអប់ cool"</string>
+    <string name="spoken_emoji_1F193" msgid="4731758603321515364">"ប្រអប់ free"</string>
+    <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ប្រអប់ ID"</string>
+    <string name="spoken_emoji_1F195" msgid="1433142500411060924">"ប្រអប់ new"</string>
+    <string name="spoken_emoji_1F196" msgid="8825160701159634202">"ប្រអប់ N G"</string>
+    <string name="spoken_emoji_1F197" msgid="7841079241554176535">"ប្រអប់ OK"</string>
+    <string name="spoken_emoji_1F198" msgid="7020298909426960622">"ប្រអប់ SOS"</string>
+    <string name="spoken_emoji_1F199" msgid="5971252667136235630">"ប្រអប់ up!"</string>
+    <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"ប្រអប់ vs"</string>
+    <string name="spoken_emoji_1F201" msgid="7000490044681139002">"សញ្ញា (🈁)"</string>
+    <string name="spoken_emoji_1F202" msgid="8560906958695043947">"សញ្ញា (🈂)"</string>
+    <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"សញ្ញា (🈚)"</string>
+    <string name="spoken_emoji_1F22F" msgid="609797148862445402">"សញ្ញា (🈯)"</string>
+    <string name="spoken_emoji_1F232" msgid="8125716331632035820">"សញ្ញា (🈲)"</string>
+    <string name="spoken_emoji_1F233" msgid="8749401090457355028">"សញ្ញា (🈳)"</string>
+    <string name="spoken_emoji_1F234" msgid="3546951604285970768">"សញ្ញា (🈴)"</string>
+    <string name="spoken_emoji_1F235" msgid="5320186982841793711">"សញ្ញា (🈵)"</string>
+    <string name="spoken_emoji_1F236" msgid="879755752069393034">"សញ្ញា (🈶)"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"សញ្ញា (🈷)"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"សញ្ញា (🈸)"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"សញ្ញា (🈹)"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"សញ្ញា (🈺)"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"សញ្ញា (🉐)"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"សញ្ញា (🉑)"</string>
+    <string name="spoken_emoji_1F300" msgid="4720098285295840383">"ស៊ីក្លូន"</string>
+    <string name="spoken_emoji_1F301" msgid="3601962477653752974">"អ័ភ្រ"</string>
+    <string name="spoken_emoji_1F302" msgid="3404357123421753593">"ឆត្រ​បិទ"</string>
+    <string name="spoken_emoji_1F303" msgid="3899301321538188206">"រាត្រី​​មាន​​ផ្កាយ"</string>
+    <string name="spoken_emoji_1F304" msgid="2767148930689050040">"ព្រះ​អាទិត្យ​​​លើ​ភ្នំ"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"ព្រះ​អាទិត្យរះ"</string>
+    <string name="spoken_emoji_1F306" msgid="5889294736109193104">"ទីក្រុង​ពេល​ព្រលប់"</string>
+    <string name="spoken_emoji_1F307" msgid="2714290867291163713">"ព្រះអាទិត្យ​លិច​ចន្លោះ​អាគារ"</string>
+    <string name="spoken_emoji_1F308" msgid="688704703985173377">"ឥន្ទធនូ"</string>
+    <string name="spoken_emoji_1F309" msgid="6217981957992313528">"ស្ពាន​ពេល​រាត្រី"</string>
+    <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"ទឹក​រលក"</string>
+    <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"ភ្នំភ្លើង"</string>
+    <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"មេឃ​ស្រទំ"</string>
+    <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"ភូគោល​​អឺរ៉ុប-អាហ្រិក"</string>
+    <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"ភូគោល​អាមេរិក"</string>
+    <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"ភូគោល​អាស៊ី-អូស្ត្រាលី"</string>
+    <string name="spoken_emoji_1F310" msgid="2959618582975247601">"ភូគោល​មាន​ខ្សែ​វណ្ឌ"</string>
+    <string name="spoken_emoji_1F311" msgid="623906380914895542">"​​ព្រះចន្ទ"</string>
+    <string name="spoken_emoji_1F312" msgid="4458575672576125401">"ព្រះ​ចន្ទ​មួយ​ចំណិត​ស្ដាំ"</string>
+    <string name="spoken_emoji_1F313" msgid="7599181787989497294">"ព្រះ​ចន្ទ​ពាក់​កណ្ដាល"</string>
+    <string name="spoken_emoji_1F314" msgid="4898293184964365413">"ព្រះ​ចន្ទ​មួយ​ចំណិត​ឆ្វេង"</string>
+    <string name="spoken_emoji_1F315" msgid="3218117051779496309">"ព្រះចន្ទ​ពេញ​វង់"</string>
+    <string name="spoken_emoji_1F316" msgid="2061317145777689569">"ព្រះ​ចន្ទ​ភ្លឺ​មួយ​ចំហៀង"</string>
+    <string name="spoken_emoji_1F317" msgid="2721090687319539049">"ព្រះ​ចន្ទ​ភ្លឺ​ពាក់​កណ្ដាល"</string>
+    <string name="spoken_emoji_1F318" msgid="3814091755648887570">"ព្រះ​ចន្ទ​ភ្លឺ​មួយ​ចំណិត​ឆ្វេង"</string>
+    <string name="spoken_emoji_1F319" msgid="4074299824890459465">"ព្រះ​ចន្ទ​មួយ​ចំណិត"</string>
+    <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"ព្រះ​ចន្ទ​មាន​មុខ​មនុស្ស"</string>
+    <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"ព្រះ​ចន្ទ​មាន​មុខ​មនុស្ស​ពាក់កណ្ដាល​ស្ដាំ"</string>
+    <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"ព្រះ​ចន្ទ​មាន​មុខ​មនុស្ស​ពាក់កណ្ដាលឆ្វេង"</string>
+    <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"ព្រះចន្ទ​មាន​មុខ​មនុស្ស​ពេញ​វង់"</string>
+    <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"ព្រះ​អាទិត្យ​មានមុខ​មនុស្ស"</string>
+    <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"ផ្កាយ"</string>
+    <string name="spoken_emoji_1F320" msgid="5450591979068216115">"បាញ់​ផ្កាយ"</string>
+    <string name="spoken_emoji_1F330" msgid="3115760035618051575">"ឆេសណាត់"</string>
+    <string name="spoken_emoji_1F331" msgid="5658888205290008691">"កូន​ឈើ"</string>
+    <string name="spoken_emoji_1F332" msgid="2935650450421165938">"ដើម​ឈើ​បៃតង"</string>
+    <string name="spoken_emoji_1F333" msgid="5898847427062482675">"ដើម​ឈើ​មិន​ខៀវ​ជា​និច្ច"</string>
+    <string name="spoken_emoji_1F334" msgid="6183375224678417894">"ដើម​ត្នោត"</string>
+    <string name="spoken_emoji_1F335" msgid="5352418412103584941">"ដំបង​យក្ស"</string>
+    <string name="spoken_emoji_1F337" msgid="3839107352363566289">"ផ្កា"</string>
+    <string name="spoken_emoji_1F338" msgid="6389970364260468490">"ផ្កាឈឺរី"</string>
+    <string name="spoken_emoji_1F339" msgid="9128891447985256151">"ផ្កា​កុលាប"</string>
+    <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"ផ្កា​រំយោល"</string>
+    <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"ផ្កា​ឈូករ័ត្ន"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"ផ្កា"</string>
+    <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"ស្នៀត​​​​ពោត"</string>
+    <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"គួរ​ស្រូវ"</string>
+    <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"រុក្ខជាតិ"</string>
+    <string name="spoken_emoji_1F340" msgid="3494255459156499305">"ដើម​ដង្ហិត"</string>
+    <string name="spoken_emoji_1F341" msgid="4581959481754990158">"ស្លឹក​ឈើ"</string>
+    <string name="spoken_emoji_1F342" msgid="3119068426871821222">"ស្លឹក​ឈើ​ជ្រុះ"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"ស្លឹកឈើបក់តាមខ្យល់"</string>
+    <string name="spoken_emoji_1F344" msgid="2738517881678722159">"ផ្សិត"</string>
+    <string name="spoken_emoji_1F345" msgid="6135288642349085554">"ប៉េងប៉ោះ"</string>
+    <string name="spoken_emoji_1F346" msgid="2075395322785406367">"ត្រប់"</string>
+    <string name="spoken_emoji_1F347" msgid="7753453754963890571">"ទំពាំង​បាយ​ជូរ"</string>
+    <string name="spoken_emoji_1F348" msgid="1247076837284932788">"ត្រសក់​ស្រូវ"</string>
+    <string name="spoken_emoji_1F349" msgid="5563054555180611086">"ឪឡឹក"</string>
+    <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"ក្រូច​ឃ្វិច"</string>
+    <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"ក្រូចឆ្មារ"</string>
+    <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"​ចេក"</string>
+    <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"ម្នាស់"</string>
+    <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"​ប៉ោម​​​ក្រហម"</string>
+    <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"​ប៉ោម​​​បៃតង"</string>
+    <string name="spoken_emoji_1F350" msgid="625802980159197701">"ផ្លែព័រ"</string>
+    <string name="spoken_emoji_1F351" msgid="4269460120610911895">"ផ្លែប៉ែស"</string>
+    <string name="spoken_emoji_1F352" msgid="965600953360182635">"ផ្លែ​ឈឺរី"</string>
+    <string name="spoken_emoji_1F353" msgid="7068623879906925592">"ផ្លែស្ត្របេរី"</string>
+    <string name="spoken_emoji_1F354" msgid="45162285238888494">"ហាំប៊ឺហ្គឺ"</string>
+    <string name="spoken_emoji_1F355" msgid="9157587635526433283">"ភីហ្សា​​មួយ​ស្លាយ"</string>
+    <string name="spoken_emoji_1F356" msgid="2667196119149852244">"សាច់ចង្កាក់"</string>
+    <string name="spoken_emoji_1F357" msgid="8022817413851052256">"ភ្លៅ​មាន់"</string>
+    <string name="spoken_emoji_1F358" msgid="3042693264748036476">"ប៊ីស្គី​បាយ"</string>
+    <string name="spoken_emoji_1F359" msgid="3988148661730121958">"ដុំ​បាយ"</string>
+    <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"បាយ​មួយ​ចាន"</string>
+    <string name="spoken_emoji_1F35B" msgid="62530406745717835">"ការី​ និង​បាយ"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"ចាន​ចំហុយ"</string>
+    <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"ស្ប៉ាហ្គាទី"</string>
+    <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"នំប៉័ង"</string>
+    <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"ដំឡូង​បំពង"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"ដំឡូង​ដុត"</string>
+    <string name="spoken_emoji_1F361" msgid="6475486395784096109">"ប្រហិត​ដោត​ចង្កាក់"</string>
+    <string name="spoken_emoji_1F362" msgid="5004692577661076275">"ម្ហូប​សមុទ្រ​ដោត​ចង្កាក់"</string>
+    <string name="spoken_emoji_1F363" msgid="1606603765717743806">"ស៊ូស៊ី"</string>
+    <string name="spoken_emoji_1F364" msgid="6550457766169570811">"កំពឹស​ចៀន"</string>
+    <string name="spoken_emoji_1F365" msgid="4963815540953316307">"នំ​ត្រី​រាង​មូល"</string>
+    <string name="spoken_emoji_1F366" msgid="7862401745277049404">"ការ៉េម​​បំពង់"</string>
+    <string name="spoken_emoji_1F367" msgid="7447972978281980414">"ការ៉េម​កែវ"</string>
+    <string name="spoken_emoji_1F368" msgid="7790003146142724913">"ការ៉េម"</string>
+    <string name="spoken_emoji_1F369" msgid="7383712944084857350">"ដូណាត់"</string>
+    <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"ខូគី"</string>
+    <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"​​សូកូឡា"</string>
+    <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"ស្ករគ្រាប់"</string>
+    <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"ស្ករ​គ្រាប់​មាន​ដង​​កាន់"</string>
+    <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"សង់ខ្យា"</string>
+    <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"ថូ"</string>
+    <string name="spoken_emoji_1F370" msgid="7243244547866114951">"នំ​ខេក"</string>
+    <string name="spoken_emoji_1F371" msgid="6731527040552916358">"ប្រអប់​បេនតូ"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"ឆ្នាំង​អាហារ"</string>
+    <string name="spoken_emoji_1F373" msgid="7799289534289221045">"ចម្អិន​អាហារ"</string>
+    <string name="spoken_emoji_1F374" msgid="5973820884987069131">"សម ​និង​កាំបិត"</string>
+    <string name="spoken_emoji_1F375" msgid="1074832087699617700">"ពែង​តែ​អត់​ដៃកាន់"</string>
+    <string name="spoken_emoji_1F376" msgid="6499274685584852067">"ដប និង​ពែង"</string>
+    <string name="spoken_emoji_1F377" msgid="1762398562314172075">"កែវ​ស្រា"</string>
+    <string name="spoken_emoji_1F378" msgid="5528234560590117516">"កែវ​ស្រា​ក្រឡុក"</string>
+    <string name="spoken_emoji_1F379" msgid="790581290787943325">"ភេសជ្ជៈ​​​ត្រូពិក"</string>
+    <string name="spoken_emoji_1F37A" msgid="391966822450619516">"កែវ​​ស្រាបៀ"</string>
+    <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"ជល់​កែវ​ស្រាបៀ"</string>
+    <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"ដប​ទឹកដោះ​គោ"</string>
+    <string name="spoken_emoji_1F380" msgid="3487363857092458827">"ខ្សែ​បូ"</string>
+    <string name="spoken_emoji_1F381" msgid="614180683680675444">"ខ្ចប់​កា​ដូរ"</string>
+    <string name="spoken_emoji_1F382" msgid="4720497171946687501">"នំ​ខួប​កំណើត"</string>
+    <string name="spoken_emoji_1F383" msgid="3536505941578757623">"គោម"</string>
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"ដើម​ឈើ​បុណ្យ​ណូអែល"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"តា​ណូអែល"</string>
+    <string name="spoken_emoji_1F386" msgid="2130445450758114746">"កាំជ្រួច"</string>
+    <string name="spoken_emoji_1F387" msgid="3403182563117999933">"ពន្លឺ​កាំជ្រួច"</string>
+    <string name="spoken_emoji_1F388" msgid="2903047203723251804">"ប៉េងប៉ោង"</string>
+    <string name="spoken_emoji_1F389" msgid="2352830665883549388">"ឧបករណ៍​​​ផ្ទុះ​ពេល​ជប់លៀង"</string>
+    <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"ក្រដាស​ពណ៌​តូចៗ"</string>
+    <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"ដើម​​តាណាប៉ាតា"</string>
+    <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"ទង់​ជាតិ​ខ្វែង"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"ការ​តុបតែង​ដោយ​​ផ្លែ​ស្រល់"</string>
+    <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"តុក្កតា​ជប៉ុន"</string>
+    <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"ខ្សែ​បូ​ត្រី​គល់រាំង"</string>
+    <string name="spoken_emoji_1F390" msgid="8903307048095431374">"កណ្ដឹង​ខ្យល់"</string>
+    <string name="spoken_emoji_1F391" msgid="2134952069191911841">"ពិធី​មើល​ព្រះ​ចន្ទ"</string>
+    <string name="spoken_emoji_1F392" msgid="6380405493914304737">"កាបូប​ទៅសាលារៀន"</string>
+    <string name="spoken_emoji_1F393" msgid="6947890064872470996">"មួក​ទទួល​សញ្ញាប័ត្រ"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"សេះ​ក្មេង​ជិះ​លេង"</string>
+    <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"កន្ត្រក​វិល"</string>
+    <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"រថយន្ត​សម្រាប់​ពាក់​ជិះ​រំអិល"</string>
+    <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"ដង​សន្ទូច និង​ត្រី"</string>
+    <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"មីក្រូហ្វូន"</string>
+    <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"ម៉ាស៊ីន​ថត​ភាព​យន្ត"</string>
+    <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"ភាពយន្ត"</string>
+    <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"កាស"</string>
+    <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"ក្ដារ​លាយ​ពណ៌​វិចិត្រករ"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"មួក​​​សម្ដែង​សិល្បៈ"</string>
+    <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"តង់​សៀក"</string>
+    <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"សំបុត្រ"</string>
+    <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"បន្ទះកណ្ដឹង"</string>
+    <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"សម្ដែង​សិល្បៈ"</string>
+    <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"ហ្គេម​​វីដេអូ"</string>
+    <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"វាយ​​​ចំគោលដៅ"</string>
+    <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"ម៉ាស៊ីន​​​ដាក់​កាក់"</string>
+    <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"ល្បែង​បុក​ប៊ីយ៉ា"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"ហ្គេម​ឡុកឡាក់"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"ប៊ូលីង"</string>
+    <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"សន្លឹក​បៀរ​​មាន​ផ្កា"</string>
+    <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"ណោត​តន្ត្រី"</string>
+    <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"ណោត​តន្ត្រីច្រើន"</string>
+    <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"ត្រែ"</string>
+    <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"ហ្គីតា"</string>
+    <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"ខ្ទង់​សម្រាប់​ចុច​តន្ត្រី"</string>
+    <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"ត្រុំប៉ែត"</string>
+    <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"វីយូឡុង"</string>
+    <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"និមិត្តសញ្ញា​តន្ត្រី"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"អាវ​កីឡា​​មាន​ខ្សែ​ឆៀង"</string>
+    <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"រ៉ាកែត និង​បាល់"</string>
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"ជិះ​ស្គី ​និង​ក្ដារ​​ស្គី"</string>
+    <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"បាល់​បោះ​ និង​វណ្ណ​មូល"</string>
+    <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"ទង់ជាតិ​ប្រណាំង​ម៉ូតូ"</string>
+    <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"អ្នក​ជិះ​​ក្ដារ​រំអិល​លើ​ព្រិល"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"អ្នក​រត់"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"អ្នក​ជិះ​ទូក​រអិល​លើ​ទឹក"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"ពាន​រង្វាន់"</string>
+    <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"​ប្រណាំង​សេះ"</string>
+    <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"​បាល់​ទាត់​អាមេរិក"</string>
+    <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"បាល់​អោប"</string>
+    <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"អ្នក​ហែលទឹក"</string>
+    <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"ការ​សាងសង់​​ផ្ទះ"</string>
+    <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"ផ្ទះ​មាន​សួន​ច្បារ"</string>
+    <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"អគារ​ការិយាល័យ"</string>
+    <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"ការិយាល័យ​ប្រៃសណីយ៍​ជប៉ុន"</string>
+    <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"ការិយាល័យ​ប្រៃសណីយ៍​អឺរ៉ុប"</string>
+    <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"មន្ទីរពេទ្យ"</string>
+    <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"ធនាគារ"</string>
+    <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"ម៉ាស៊ីន​​អេធីអឹម"</string>
+    <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"សណ្ឋាគារ"</string>
+    <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"សណ្ឋាគារ​ក្ដី​ស្រឡាញ់"</string>
+    <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"ហាង​​ទំនិញ ២៤​ម៉ោង"</string>
+    <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"សាលារៀន"</string>
+    <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"ហាង​​ទំនិញធំៗ"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"រោងចក្រ"</string>
+    <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"ចង្កៀង​គោម Izakaya"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"វិមាន​​ជប៉ុន"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"វិមាន​អឺរ៉ុប"</string>
+    <string name="spoken_emoji_1F400" msgid="2063034795679578294">"កណ្ដុរ​ប្រែង"</string>
+    <string name="spoken_emoji_1F401" msgid="6736421616217369594">"កណ្ដុរ​ប្រមះ"</string>
+    <string name="spoken_emoji_1F402" msgid="7276670995895485604">"គោ"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"ក្របី​ទឹក"</string>
+    <string name="spoken_emoji_1F404" msgid="5240777285676662335">"គោ"</string>
+    <string name="spoken_emoji_1F406" msgid="5163461930159540018">"ខ្លា​រខិន"</string>
+    <string name="spoken_emoji_1F407" msgid="6905370221172708160">"ទន្សាយ"</string>
+    <string name="spoken_emoji_1F408" msgid="1362164550508207284">"ឆ្មា"</string>
+    <string name="spoken_emoji_1F409" msgid="8476130983168866013">"នាគ"</string>
+    <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"ក្រពើ"</string>
+    <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"​ត្រី​បាឡែន"</string>
+    <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"ខ្យង់ក្ដក់"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"ពស់"</string>
+    <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"សេះ"</string>
+    <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"ចៀម​ឈ្មោល"</string>
+    <string name="spoken_emoji_1F410" msgid="8686765722255775031">"ពពែ"</string>
+    <string name="spoken_emoji_1F411" msgid="3585715397876383525">"ចៀម"</string>
+    <string name="spoken_emoji_1F412" msgid="4924794582980077838">"ស្វា"</string>
+    <string name="spoken_emoji_1F413" msgid="1460475310405677377">"មាន់​ឈ្មោល"</string>
+    <string name="spoken_emoji_1F414" msgid="5857296282631892219">"​មាន់"</string>
+    <string name="spoken_emoji_1F415" msgid="5920041074892949527">"ឆ្កែ"</string>
+    <string name="spoken_emoji_1F416" msgid="4362403392912540286">"ជ្រូក"</string>
+    <string name="spoken_emoji_1F417" msgid="6836978415840795128">"ជ្រូក​ព្រៃ"</string>
+    <string name="spoken_emoji_1F418" msgid="7926161463897783691">"ដំរី"</string>
+    <string name="spoken_emoji_1F419" msgid="1055233959755784186">"មឹក"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"ខ្យង​គ្រែង"</string>
+    <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"សង្កើច"</string>
+    <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"ស្រមោច"</string>
+    <string name="spoken_emoji_1F41D" msgid="718579308764058851">"ឃ្មុំ"</string>
+    <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"អណ្ដើក​មាស"</string>
+    <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"ត្រី"</string>
+    <string name="spoken_emoji_1F420" msgid="1041145003133609221">"ត្រី​តំបន់​ត្រូពិក"</string>
+    <string name="spoken_emoji_1F421" msgid="1748378324417438751">"ត្រី​ក្រពត"</string>
+    <string name="spoken_emoji_1F422" msgid="4106724877523329148">"អណ្ដើក"</string>
+    <string name="spoken_emoji_1F423" msgid="4077407945958691907">"កូនមាន់ញាស់"</string>
+    <string name="spoken_emoji_1F424" msgid="6911326019270172283">"កូន​មាន់"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"មុខ​កូន​មាន់"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"បក្សី"</string>
+    <string name="spoken_emoji_1F427" msgid="3585670324511212961">"ភេនឃ្វីន"</string>
+    <string name="spoken_emoji_1F428" msgid="7955440808647898579">"ខ្លាឃ្មុំ"</string>
+    <string name="spoken_emoji_1F429" msgid="5028269352809819035">"ឆ្កែ"</string>
+    <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"អូដ្ឋ​​បូក​មួយ"</string>
+    <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"អូដ្ឋ​បូក​ពីរ"</string>
+    <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"ត្រី​ផ្សោត"</string>
+    <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"មុខ​កណ្ដុរ"</string>
+    <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"មុខ​​គោ"</string>
+    <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"មុខ​ខ្លា"</string>
+    <string name="spoken_emoji_1F430" msgid="525492897063150160">"មុខ​ទន្សាយ"</string>
+    <string name="spoken_emoji_1F431" msgid="6051358666235016851">"មុខ​ឆ្មា"</string>
+    <string name="spoken_emoji_1F432" msgid="7698001871193018305">"មុខ​នាគ"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"ព្រុយ​ត្រី​បាឡែន"</string>
+    <string name="spoken_emoji_1F434" msgid="3619943222159943226">"មុខ​សេះ"</string>
+    <string name="spoken_emoji_1F435" msgid="59199202683252958">"មុខ​ស្វា"</string>
+    <string name="spoken_emoji_1F436" msgid="340544719369009828">"មុខ​ឆ្កែ"</string>
+    <string name="spoken_emoji_1F437" msgid="1219818379784982585">"មុខ​ជ្រូក"</string>
+    <string name="spoken_emoji_1F438" msgid="9128124743321008210">"មុខ​កង្កែប"</string>
+    <string name="spoken_emoji_1F439" msgid="1424161319554642266">"មុខ​កណ្ដុរ"</string>
+    <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"មុខ​ចចក"</string>
+    <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"​​មុខ​ខ្លាឃ្មុំ"</string>
+    <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"មុខ​ខ្លាឃ្មុំ​ផេ​ន​ដា"</string>
+    <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"ច្រមុះ​ជ្រូក"</string>
+    <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"ក្រញាំ​​ជើង"</string>
+    <string name="spoken_emoji_1F440" msgid="7144338258163384433">"ភ្នែក"</string>
+    <string name="spoken_emoji_1F442" msgid="1905515392292676124">"ត្រចៀក"</string>
+    <string name="spoken_emoji_1F443" msgid="1491504447758933115">"ច្រមុះ"</string>
+    <string name="spoken_emoji_1F444" msgid="3654613047946080332">"មាត់"</string>
+    <string name="spoken_emoji_1F445" msgid="7024905244040509204">"អណ្ដាត"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"ចង្អុល​ដៃ​ឡើង​លើ"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"ចង្អុល​ដៃ​​ចុះ​ក្រោម"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"ចង្អុល​ដៃ​ទៅ​ឆ្វេង"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"ចង្អុល​ដៃ​ទៅ​ស្ដាំ"</string>
+    <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"កណ្ដាប់ដៃ"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"គ្រវី​បាត​ដៃ"</string>
+    <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"សញ្ញា​អូខេ"</string>
+    <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"​មេដៃ​ឡើង​លើ"</string>
+    <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"​មេដៃ​ចុះ​ក្រោម"</string>
+    <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"ទះ​ដៃ"</string>
+    <string name="spoken_emoji_1F450" msgid="1012021072085157054">"លា​ដៃ"</string>
+    <string name="spoken_emoji_1F451" msgid="8257466714629051320">"មកុដ"</string>
+    <string name="spoken_emoji_1F452" msgid="4567394011149905466">"មួក​​ស្ត្រី"</string>
+    <string name="spoken_emoji_1F453" msgid="5978410551173163010">"វ៉ែនតា"</string>
+    <string name="spoken_emoji_1F454" msgid="348469036193323252">"ក្រ​វ៉ាត់​ករ"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"អាវ​យឺត"</string>
+    <string name="spoken_emoji_1F456" msgid="1890991330923356408">"ខោ​ខោវប៊យ"</string>
+    <string name="spoken_emoji_1F457" msgid="3904310482655702620">"សំលៀក​បំពាក់"</string>
+    <string name="spoken_emoji_1F458" msgid="5704243858031107692">"គី​ម៉ូណូ"</string>
+    <string name="spoken_emoji_1F459" msgid="3553148747050035251">"ឈុត​ហែល​ទឹក"</string>
+    <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"សំលៀកបំពាក់​នារី"</string>
+    <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"កាបូប"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"កាបូប​ដៃ"</string>
+    <string name="spoken_emoji_1F45D" msgid="812176504300064819">"ថង់"</string>
+    <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"ស្បែកជើង​បុរស"</string>
+    <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"ស្បែក​ជើង​កីឡា"</string>
+    <string name="spoken_emoji_1F460" msgid="305863879170420855">"ស្បែកជើង​កែង"</string>
+    <string name="spoken_emoji_1F461" msgid="5160493217831417630">"ស្បែក​ជើង​ស៊ក​ស្រ្តី"</string>
+    <string name="spoken_emoji_1F462" msgid="1722897795554863734">"​ស្បែក​ជើង​ក​វែង​ស្ត្រី"</string>
+    <string name="spoken_emoji_1F463" msgid="5850772903593010699">"ដាន​ជើង"</string>
+    <string name="spoken_emoji_1F464" msgid="1228335905487734913">"គណនី​ភ្ញៀវ"</string>
+    <string name="spoken_emoji_1F465" msgid="4461307702499679879">"គណនី"</string>
+    <string name="spoken_emoji_1F466" msgid="1938873085514108889">"ក្មេង​​ប្រុស"</string>
+    <string name="spoken_emoji_1F467" msgid="8237080594860144998">"ក្មេង​ស្រី"</string>
+    <string name="spoken_emoji_1F468" msgid="6081300722526675382">"បុរស"</string>
+    <string name="spoken_emoji_1F469" msgid="1090140923076108158">"ស្ត្រី"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"គ្រួសារ"</string>
+    <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"បុរស​​ និង​ស្ត្រី​កាន់ដៃ​គ្នា"</string>
+    <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"បុរស​ពីរ​នាក់​កាន់​ដៃ​គ្នា"</string>
+    <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"ស្ត្រី​​​ពីរ​កាន់​ដៃ​គ្នា"</string>
+    <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"មន្ត្រី​ប៉ូលិស"</string>
+    <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"ស្ត្រី​​ចង​សក់​ទីទុយ"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"កូនក្រមុំ​​ពាក់​​ស្បៃ​មុខ"</string>
+    <string name="spoken_emoji_1F471" msgid="3058247860441670806">"មនុស្ស​​មាន​សក់​​ពណ៌​ទង់ដែង"</string>
+    <string name="spoken_emoji_1F472" msgid="3928854667819339142">"បុរស​​ពុកមាត់​ឆ្មា"</string>
+    <string name="spoken_emoji_1F473" msgid="5921952095808988381">"បុរស​ពាក់​ឈ្នួត"</string>
+    <string name="spoken_emoji_1F474" msgid="1082237499496725183">"បុរស​​ចំណាស់"</string>
+    <string name="spoken_emoji_1F475" msgid="7280323988642212761">"ស្ត្រី​ចំណាស់"</string>
+    <string name="spoken_emoji_1F476" msgid="4713322657821088296">"ទារក"</string>
+    <string name="spoken_emoji_1F477" msgid="2197036131029221370">"កម្មករ​សំណង់"</string>
+    <string name="spoken_emoji_1F478" msgid="7245521193493488875">"ព្រះអង្គម្ចាស់​ក្សត្រី"</string>
+    <string name="spoken_emoji_1F479" msgid="6876475321015553972">"សត្វ​ចម្លែក​ជប៉ុន"</string>
+    <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"ម្រេញគង្វាល​ជប៉ុន"</string>
+    <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"ខ្មោច"</string>
+    <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"អប្សរា​​ទារក"</string>
+    <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"មនុស្ស​ក្រៅ​ភព"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"សត្វ​ចម្លែក​ក្រៅ​​ភព"</string>
+    <string name="spoken_emoji_1F47F" msgid="441605977269926252">"ប្រែត"</string>
+    <string name="spoken_emoji_1F480" msgid="3696253485164878739">"លលាដ៍​ក្បាល"</string>
+    <string name="spoken_emoji_1F481" msgid="320408708521966893">"អ្នក​ផ្ដល់​ព័ត៌មាន"</string>
+    <string name="spoken_emoji_1F482" msgid="3424354860245608949">"អ្នក​យាម"</string>
+    <string name="spoken_emoji_1F483" msgid="3221113594843849083">"អ្នក​រាំ"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"ក្រេម​លាប​បបូរ​មាត់"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"ថ្នាំ​លាប​​​ក្រចក"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"ម៉ាស្សា​មុខ"</string>
+    <string name="spoken_emoji_1F487" msgid="1479113637259592150">"កាត់សក់"</string>
+    <string name="spoken_emoji_1F488" msgid="6922559285234100252">"ស្លាក​សញ្ញា​កាត់សក់"</string>
+    <string name="spoken_emoji_1F489" msgid="8114863680950147305">"ស៊ីរ៉ាំង"</string>
+    <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"ថ្នាំ​គ្រាប់"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"ស្នាម​ថើប"</string>
+    <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"លិខិត​ស្នេហា"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"រោទ៍"</string>
+    <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"ត្បូង​ថ្ម"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"ថើប"</string>
+    <string name="spoken_emoji_1F490" msgid="4482549128959806736">"បាច់​​ផ្កា"</string>
+    <string name="spoken_emoji_1F491" msgid="2305245307882441500">"ប្ដី​ប្រពន្ធ​​ និង​រូប​បេះដូង"</string>
+    <string name="spoken_emoji_1F492" msgid="3884119934804475732">"អាពាហ៍ពិពាហ៍"</string>
+    <string name="spoken_emoji_1F493" msgid="1208828371565525121">"​សំឡេង​បេះដូង​លោត"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"ខូច​ចិត្ត"</string>
+    <string name="spoken_emoji_1F495" msgid="9206202744967130919">"បេះដូង​​ពីរ"</string>
+    <string name="spoken_emoji_1F496" msgid="5436953041732207775">"បេះដូង​​មាន​ពន្លឺ"</string>
+    <string name="spoken_emoji_1F497" msgid="7285142863951448473">"បេះដូង​​លូតលាស់"</string>
+    <string name="spoken_emoji_1F498" msgid="7940131245037575715">"បេះដូង​​ជាប់​ព្រួញ"</string>
+    <string name="spoken_emoji_1F499" msgid="4453235040265550009">"បេះដូង​​ពណ៌​ខៀវ"</string>
+    <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"បេះដូង​​ពណ៌​បៃតង"</string>
+    <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"បេះដូង​​ពណ៌​លឿង"</string>
+    <string name="spoken_emoji_1F49C" msgid="453829540120898698">"បេះដូង​​ពណ៌ស្វាយ"</string>
+    <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"បេះដូង​ជាប់​ខ្សែ​បូ"</string>
+    <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"បេះដូង​វិល"</string>
+    <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"ការ​តុបតែង​បេះដូង"</string>
+    <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"​រាង​ពេជ្រ​​មាន​​ចំណុច​​ខាង​ក្នុង"</string>
+    <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"អំពូល​​អគ្គិសនី"</string>
+    <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"និមិត្ត​សញ្ញា​កំហឹង"</string>
+    <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"គ្រាប់បែក"</string>
+    <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"និមិត្ត​សញ្ញា​​ដេក"</string>
+    <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"និមិត្ត​សញ្ញា​​ប៉ះ​ទង្គិច​គ្នា"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"និមិត្ត​សញ្ញា​​ស្រក់​ញើស"</string>
+    <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"ដំណក់​ទឹក"</string>
+    <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"និមិត្ត​សញ្ញា​​ដកឃ្លា"</string>
+    <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"គំនរ​ធូលី"</string>
+    <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"ដំឡើង​សាច់ដុំ​ដើមដៃ"</string>
+    <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"និមិត្ត​សញ្ញា​​វិលមុខ"</string>
+    <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"ប្រអប់​បញ្ចេញ​យោបល់"</string>
+    <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"ប្រអប់​គំនិត"</string>
+    <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"ផ្កា​​ពណ៌ស"</string>
+    <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"និមិត្ត​សញ្ញា​​មួយ​រយ​ពិន្ទុ"</string>
+    <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"កាបូប​​លុយ"</string>
+    <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"ប្ដូរ​​រូបិយប័ណ្ណ"</string>
+    <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"សញ្ញា​ដុល្លារ"</string>
+    <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"កាត​​ឥណទាន"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"ក្រដាស​ប្រាក់​​ធនាគារ​មាន​សញ្ញា​​យ៉េន"</string>
+    <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"លុយដុល្លារ"</string>
+    <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"ក្រដាស​ប្រាក់​​ធនាគារ​មាន​សញ្ញា​អឺរ៉ូ"</string>
+    <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"ក្រដាស​ប្រាក់​​ធនាគារ​មាន​សញ្ញា​​​ផោន"</string>
+    <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"លុយ​មាន​ស្លាប"</string>
+    <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"ក្រាហ្វិក​និន្នាការ​ឡើង​​មាន​​សញ្ញា​យ៉េន"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"កៅអី"</string>
+    <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"កុំព្យូទ័រ​ផ្ទាល់ខ្លួន"</string>
+    <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"វ៉ា​លី"</string>
+    <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"ឌីស​​តូច"</string>
+    <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"ថា​ស​​ទន់"</string>
+    <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"ថាស"</string>
+    <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"ឌីវីឌី"</string>
+    <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"ថត​​ឯកសារ"</string>
+    <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"ថត​ឯកសារ​បើក"</string>
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"ទំព័រ​​កោង"</string>
+    <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"ទំព័រ​បញ្ឈរ"</string>
+    <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"ប្រតិទិន"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"ហែក​ប្រតិទិន"</string>
+    <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"​កាត​រៀប​តាម​អក្សរ"</string>
+    <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"ក្រាហ្វិក​មាន​និន្នាការ​ឡើង"</string>
+    <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"ក្រាហ្វិក​មាន​និន្នាការ​ចុះ"</string>
+    <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"គំនូស​តាង​របារ"</string>
+    <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"ក្ដារ​តម្បៀត​ខ្ទាស់"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"ម្ជុល"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"ម្ជុល​ក្បាល​មូល"</string>
+    <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"ដង្កៀប​​ក្រដាស"</string>
+    <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"បន្ទាត់​ត្រង់"</string>
+    <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"បន្ទាត់​រៀង​ត្រីកោណ"</string>
+    <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"ផ្ទាំង​​​ចំណាំ"</string>
+    <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"បញ្ជី​កត់ត្រា"</string>
+    <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"សៀវភៅ"</string>
+    <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"សៀវភៅ​មាន​ក្រប​ពណ៌"</string>
+    <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"សៀវភៅ​​បិទ"</string>
+    <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"សៀវភៅ​បើក"</string>
+    <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"សៀវភៅ​​ពណ៌​បៃតង"</string>
+    <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"សៀវភៅ​​ពណ៌​ខៀវ"</string>
+    <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"សៀវភៅ​​ពណ៌​ទឹកក្រូច"</string>
+    <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"សៀវភៅ"</string>
+    <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"ស្លាកឈ្មោះ"</string>
+    <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"ក្រដាស​រមូរ"</string>
+    <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"កំណត់ចំណាំ"</string>
+    <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"អ្នក​ទទួល​ទូរស័ព្ទ"</string>
+    <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"ភេយ័រ"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"ម៉ាស៊ីន​​ទូរសារ"</string>
+    <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"អង់តែន​​ផ្កាយ​រណប"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"អូប៉ាល័រ​ប្រកាស​សាធារណៈ"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"ឧបករណ៍​បំពង​សំឡេង"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"ថា​ស​​​ចេញ"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"ថា​ស​ចូល"</string>
+    <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"កញ្ចប់"</string>
+    <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"និមិត្ត​សញ្ញា​អ៊ីមែល"</string>
+    <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"ស្រោម​​សំបុត្រ​ចូល"</string>
+    <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"ស្រោម​សំបុត្រ​​មាន​សញ្ញា​ព្រួញ​ពី​លើ"</string>
+    <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"ប្រអប់​សំបុត្រ​បិទ​មាន​ទង់​ចុះក្រោម"</string>
+    <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"ប្រអប់​សំបុត្រ​បិទ​មាន​ទង់​ឡើង​លើ"</string>
+    <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"ប្រអប់​សំបុត្រ​បើក​មាន​ទង់​ឡើង​លើ"</string>
+    <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"ប្រអប់​សំបុត្រ​បើក​មាន​ទង់ចុះក្រោម"</string>
+    <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"ប្រអប់​ប្រៃសណីយ៍"</string>
+    <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"ស្នែង​​ប្រៃសណីយ៍"</string>
+    <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"កាសែត"</string>
+    <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"ទូរស័ព្ទ​ចល័ត"</string>
+    <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"ទូរស័ព្ទ​ចល័ត​មាន​សញ្ញា​ព្រួញ​ចូល​ពី​​ឆ្វេង"</string>
+    <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"របៀប​​​ញ័រ"</string>
+    <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"បិទ​ទូរស័ព្ទ​​ចល័ត"</string>
+    <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"មិន​មាន​ទូរស័ព្ទ​​ចល័ត"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"អង់តែន​មាន​របារ"</string>
+    <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"ម៉ាស៊ីន​ថត"</string>
+    <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"ម៉ាស៊ីន​ថត​វីដេអូ"</string>
+    <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"ទូរទស្សន៍"</string>
+    <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"វិទ្យុ"</string>
+    <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"ការ​សែត​វីដេអូ"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"ព្រួញ​រមួល​ទៅ​ស្ដាំ"</string>
+    <string name="spoken_emoji_1F501" msgid="2132188352433347009">"ព្រួញ​រាង​ជា​រង្វង់​បើក​​​ស្រប​ទិស​ទ្រនិច​នាឡិកា​ទៅ​ឆ្វេង-ស្ដាំ"</string>
+    <string name="spoken_emoji_1F502" msgid="2361976580513178391">"ព្រួញ​រាង​ជា​រង្វង់​បើក​​ស្រប​ទិស​ទ្រនិច​នាឡិកា​ទៅ​ឆ្វេង-ស្ដាំ​មាន​លេខ​ ១​ក្នុង​រង្វង់​នៅ​ពី​លើ"</string>
+    <string name="spoken_emoji_1F503" msgid="8936283551917858793">"ព្រួញ​រាង​ជា​រង្វង់​បើក​​ស្រប​ទិស​ទ្រនិច​នាឡិកា​ចុះក្រោម-ឡើងលើ"</string>
+    <string name="spoken_emoji_1F504" msgid="708290317843535943">"ព្រួញ​រាង​ជា​រង្វង់​បើក​​ច្រាស​​ទិស​ទ្រនិច​នាឡិកា​ចុះក្រោម-ឡើងលើ"</string>
+    <string name="spoken_emoji_1F505" msgid="6348909939004951860">"និមិត្ត​សញ្ញា​ពន្លឺ​​ទាប"</string>
+    <string name="spoken_emoji_1F506" msgid="4449609297521280173">"និមិត្ត​សញ្ញា​​ពន្លឺ​ខ្ពស់"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"អូប៉ាល័រ​មាន​បន្ទាត់​កាត់"</string>
+    <string name="spoken_emoji_1F508" msgid="5063567689831527865">"អូប៉ាល័រ"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"អូប៉ាល័រ​មាន​រលក​សំឡេង​មួយ"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"អូប៉ាល័រ​មាន​រលក​សំឡេង​បី"</string>
+    <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"ថ្ម"</string>
+    <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"ដុយ​អគ្គិសនី"</string>
+    <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"កែវ​ពង្រីក​ចង្អុល​ខាង​ឆ្វេង"</string>
+    <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"កែវ​ពង្រីក​ចង្អុល​ខាង​ស្ដាំ"</string>
+    <string name="spoken_emoji_1F50F" msgid="915079280472199605">"ចាក់សោ​​​ដោយ​ប្រើ​​ប៊ិច"</string>
+    <string name="spoken_emoji_1F510" msgid="7658381761691758318">"បិទ​​សោ​ដោយ​ប្រើ​​​​កូនសោ"</string>
+    <string name="spoken_emoji_1F511" msgid="262319867774655688">"សោ"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"ចាក់សោ"</string>
+    <string name="spoken_emoji_1F513" msgid="8579201846619420981">"បើក​សោ"</string>
+    <string name="spoken_emoji_1F514" msgid="7027268683047322521">"កណ្ដឹង"</string>
+    <string name="spoken_emoji_1F515" msgid="8903179856036069242">"កណ្ដឹង​មាន​បន្ទាត់​កាត់"</string>
+    <string name="spoken_emoji_1F516" msgid="108097933937925381">"​ចំណាំ"</string>
+    <string name="spoken_emoji_1F517" msgid="2450846665734313397">"និមិត្ត​សញ្ញា​​តំណ"</string>
+    <string name="spoken_emoji_1F518" msgid="7028220286841437832">"ប៊ូតុង​​មូល"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"ថយក្រោយ​មាន​ព្រួញ​ទៅ​ឆ្វេង​ខាង​លើ"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"បញ្ចប់​មាន​ព្រួញ​ទៅ​ឆ្វេង​ខាង​លើ"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"បើក​មាន​សញ្ញា​ឧទាន​​ជា​មួយ​នឹង​ព្រួញ​ទៅ​ឆ្វេង​​ខាង​លើ"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"ឆាប់ៗ​មាន​ព្រួញ​ទៅ​ស្ដាំ​ខាង​លើ"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"កំពូល​មាន​ព្រួញ​ឡើងលើ​នៅ​ខាង​លើ"</string>
+    <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"​និមិត្ត​សញ្ញា​គ្មាន​នរណា​ម្នាក់​​អាយុ​​ក្រោម​ដប់ប្រាំ​បី"</string>
+    <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"គ្រាប់​ចុច​ ១០"</string>
+    <string name="spoken_emoji_1F520" msgid="7335109890337048900">"និមិត្ត​សញ្ញា​បញ្ចូល​សម្រាប់​អក្សរ​ឡាតាំង​ធំ"</string>
+    <string name="spoken_emoji_1F521" msgid="2693185864450925778">"និមិត្ត​សញ្ញា​បញ្ចូល​សម្រាប់​អក្សរ​ឡាតាំង​តូច"</string>
+    <string name="spoken_emoji_1F522" msgid="8419130286280673347">"និមិត្ត​សញ្ញា​បញ្ចូល​សម្រាប់​​លេខ"</string>
+    <string name="spoken_emoji_1F523" msgid="3318053476401719421">"ការ​បញ្ចូល​និមិត្តសញ្ញា"</string>
+    <string name="spoken_emoji_1F524" msgid="1625073997522316331">"និមិត្ត​សញ្ញា​បញ្ចូល​សម្រាប់​អក្សរ​ឡាតាំង"</string>
+    <string name="spoken_emoji_1F525" msgid="4083884189172963790">"ភ្លើង"</string>
+    <string name="spoken_emoji_1F526" msgid="2035494936742643580">"ពិល​​អគ្គិសនី"</string>
+    <string name="spoken_emoji_1F527" msgid="134257142354034271">"ម៉ាឡេត"</string>
+    <string name="spoken_emoji_1F528" msgid="700627429570609375">"ញញួរ"</string>
+    <string name="spoken_emoji_1F529" msgid="7480548235904988573">"ឡោ​ស៊ី"</string>
+    <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"កាំបិត"</string>
+    <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"កាំភ្លើង​ខ្លី"</string>
+    <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"មីក្រូទស្សន៍"</string>
+    <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"កែវ​យឹត"</string>
+    <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"​បាល់​គ្រីស្តាល់"</string>
+    <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"ផ្កាយ​ ៦ជ្រុងមាន​ចំណុចកណ្ដាល"</string>
+    <string name="spoken_emoji_1F530" msgid="3572898444281774023">"និមិត្តសញ្ញា​ជប៉ុន​សម្រាប់​អ្នក​ចាប់ផ្ដើម"</string>
+    <string name="spoken_emoji_1F531" msgid="5225633376450025396">"លំពែង​មុខ​បី"</string>
+    <string name="spoken_emoji_1F532" msgid="9169568490485180779">"ប៊ូតុង​ការេ​ពណ៌​ខ្មៅ"</string>
+    <string name="spoken_emoji_1F533" msgid="6554193837201918598">"ប៊ូតុង​ការ៉េ​ពណ៌​ស"</string>
+    <string name="spoken_emoji_1F534" msgid="8339298801331865340">"រង្វង់​ពណ៌​ក្រហម​​​ធំ"</string>
+    <string name="spoken_emoji_1F535" msgid="1227403104835533512">"រង្វង់​ពណ៌​ខៀវ​ធំ"</string>
+    <string name="spoken_emoji_1F536" msgid="5477372445510469331">"ពេជ្រ​ពណ៌​ទឹកក្រូច​ធំ"</string>
+    <string name="spoken_emoji_1F537" msgid="3158915214347274626">"ពេជ្រ​ពណ៌​ខៀវ​​ធំ"</string>
+    <string name="spoken_emoji_1F538" msgid="4300084249474451991">"ពេជ្រ​ពណ៌​ទឹកក្រូច​​តូច"</string>
+    <string name="spoken_emoji_1F539" msgid="6535159756325742275">"ពេជ្រ​ពណ៌​ខៀវ​​តូច"</string>
+    <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"ត្រីកោណ​ពណ៌​ក្រហម​កំពូល​ឡើងលើ"</string>
+    <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"ត្រីកោណ​ពណ៌​ក្រហម​កំពូល​​ចុះ​ក្រោម"</string>
+    <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"ត្រីកោណ​ពណ៌​ក្រហម​តូច​កំពូល​ឡើងលើ"</string>
+    <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"ត្រីកោណ​ពណ៌​ក្រហម​​តូច​កំពូល​​ចុះ​ក្រោម"</string>
+    <string name="spoken_emoji_1F550" msgid="7761392621689986218">"មុខ​នាឡិកា​ម៉ោង​មួយ"</string>
+    <string name="spoken_emoji_1F551" msgid="2699448504113431716">"មុខ​នាឡិកា​ម៉ោង​ពីរ"</string>
+    <string name="spoken_emoji_1F552" msgid="5872107867411853750">"មុខ​នាឡិកា​ម៉ោង​បី"</string>
+    <string name="spoken_emoji_1F553" msgid="8490966286158640743">"មុខ​នាឡិកា​ម៉ោង​បួន"</string>
+    <string name="spoken_emoji_1F554" msgid="7662585417832909280">"មុខ​នាឡិកា​ម៉ោង​​ប្រាំ"</string>
+    <string name="spoken_emoji_1F555" msgid="5564698204520412009">"មុខ​នាឡិកា​ម៉ោង​ប្រាំមួយ"</string>
+    <string name="spoken_emoji_1F556" msgid="7325712194836512205">"មុខ​នាឡិកា​ម៉ោង​ប្រាំពីរ"</string>
+    <string name="spoken_emoji_1F557" msgid="4398343183682848693">"មុខ​នាឡិកា​ម៉ោង​ប្រាំបី"</string>
+    <string name="spoken_emoji_1F558" msgid="3110507820404018172">"មុខ​នាឡិកា​ម៉ោង​ប្រាំ​បួន"</string>
+    <string name="spoken_emoji_1F559" msgid="2972160366448337839">"មុខ​នាឡិកា​ម៉ោង​ដប់"</string>
+    <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"មុខ​នាឡិកា​ម៉ោង​ដប់​មួយ"</string>
+    <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"មុខ​នាឡិកា​ម៉ោង​ដប់​ពីរ"</string>
+    <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"មុខ​នាឡិកា​ម៉ោង​មួយ​កន្លះ"</string>
+    <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"មុខ​នាឡិកា​ម៉ោង​ពីរ​កន្លះ"</string>
+    <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"មុខ​នាឡិកា​ម៉ោង​​បី​​កន្លះ"</string>
+    <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"មុខ​នាឡិកា​ម៉ោង​​បួន​​កន្លះ"</string>
+    <string name="spoken_emoji_1F560" msgid="5771339179963924448">"មុខ​នាឡិកា​ម៉ោង​ប្រាំ​កន្លះ"</string>
+    <string name="spoken_emoji_1F561" msgid="3139944777062475382">"មុខ​នាឡិកា​ម៉ោង​​ប្រាំ​មួយ​កន្លះ"</string>
+    <string name="spoken_emoji_1F562" msgid="8273944611162457084">"មុខ​នាឡិកា​ម៉ោង​ប្រាំ​ពីរ​កន្លះ"</string>
+    <string name="spoken_emoji_1F563" msgid="8643976903718136299">"មុខ​នាឡិកា​ម៉ោង​​ប្រាំ​បី​កន្លះ"</string>
+    <string name="spoken_emoji_1F564" msgid="3511070239796141638">"មុខ​នាឡិកា​ម៉ោង​​ប្រាំ​បួន​​​កន្លះ"</string>
+    <string name="spoken_emoji_1F565" msgid="4567451985272963088">"មុខ​នាឡិកា​ម៉ោង​ដប់​កន្លះ"</string>
+    <string name="spoken_emoji_1F566" msgid="2790552288169929810">"មុខ​នាឡិកា​ម៉ោង​ដប់​​មួយ​កន្លះ"</string>
+    <string name="spoken_emoji_1F567" msgid="9026037362100689337">"មុខ​នាឡិកា​ម៉ោង​ដប់​ពីរ​​កន្លះ"</string>
+    <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"ភ្នំ​ហ្វូជី"</string>
+    <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"អគារ​ទី​ក្រុង​តូក្យូ"</string>
+    <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"រូបសំណាក​​សេរីភាព"</string>
+    <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"គំនូរ​ស្រមោល​​ជប៉ុន"</string>
+    <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"ម៉ូយ៉ៃ"</string>
+    <string name="spoken_emoji_1F600" msgid="7601109464776835283">"មុខ​ញញឹម​ខាំ​ធ្មេញ"</string>
+    <string name="spoken_emoji_1F601" msgid="746026523967444503">"មុខ​ញញឹម​ខាំ​ធ្មេញ​ជា​មួយ​ភ្នែក​បើក"</string>
+    <string name="spoken_emoji_1F602" msgid="8354558091785198246">"មុខ​ទ​ទឹក​មាន​ភ្នែក​រីករាយ"</string>
+    <string name="spoken_emoji_1F603" msgid="3861022912544159823">"មុខ​ញញឹម​បើក​មាត់"</string>
+    <string name="spoken_emoji_1F604" msgid="5119021072966343531">"មុខ​ញញឹម​បើក​មាត់ និង​បើក​ភ្នែក"</string>
+    <string name="spoken_emoji_1F605" msgid="6140813923973561735">"ញញឹម​មុខ​​បើក​មាត់ និង​ខ្វល់ខ្វាយ"</string>
+    <string name="spoken_emoji_1F606" msgid="3549936813966832799">"ញញឹម​មុខ​​បើក​មាត់ និង​​បិទ​ភ្នែក​បន្តិច"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"មុខ​ញញឹម​មាន​រង្វង់​ខាង​លើ"</string>
+    <string name="spoken_emoji_1F608" msgid="7343559595089811640">"មុខ​ញញឹម​​មាន​ស្នែង"</string>
+    <string name="spoken_emoji_1F609" msgid="5481030187207504405">"មុខ​មិច​ភ្នែក"</string>
+    <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"មុខ​ញញឹម​បើក​ភ្នែក"</string>
+    <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"មុខ​បង្ហាញ​រសជាតិ​អាហារ​ឆ្ងាញ់"</string>
+    <string name="spoken_emoji_1F60C" msgid="349384012958268496">"មុខ​​ធូរ​​ស្រាល"</string>
+    <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"មុខ​ញញឹម​ជា​មួយ​ភ្នែក​រូប​បេះ​ដូង"</string>
+    <string name="spoken_emoji_1F60E" msgid="441718886380605643">"មុខ​ញញឹម​ពាក់​វ៉ែនតា​ខ្មៅ"</string>
+    <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"មុខ​ញញឹម​ចំអក"</string>
+    <string name="spoken_emoji_1F610" msgid="3225675825334102369">"មុខ​​អព្យាក្រឹត"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"មុខ​គ្មាន​អារម្មណ៍"</string>
+    <string name="spoken_emoji_1F612" msgid="985081329745137998">"មុខ​អត់​សប្បាយ​ចិត្ត"</string>
+    <string name="spoken_emoji_1F613" msgid="5548607684830303562">"មុខ​​​មាន​​ញើស"</string>
+    <string name="spoken_emoji_1F614" msgid="3196305665259916390">"មុខគិត"</string>
+    <string name="spoken_emoji_1F615" msgid="3051674239303969101">"មុខ​​យល់​ច្រឡំ"</string>
+    <string name="spoken_emoji_1F616" msgid="8124887056243813089">"មុខ​​អាក្រក់"</string>
+    <string name="spoken_emoji_1F617" msgid="7052733625511122870">"មុខ​ថើប"</string>
+    <string name="spoken_emoji_1F618" msgid="408207170572303753">"មុខ​បង្ហាញ​ការ​ថើប"</string>
+    <string name="spoken_emoji_1F619" msgid="8645430335143153645">"មុខ​ថើប​បើក​ភ្នែក"</string>
+    <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"មុខ​ថើប​បិទ​ភ្នែក"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"មុខ​លៀន​​អណ្ដាត"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"មុខ​លៀន​​អណ្ដាត ហើយ​មិច​ភ្នែក"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"មុខ​លៀន​អណ្ដាត ហើយ​​បិទ​ភ្នែក​បន្តិច"</string>
+    <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"មុខ​ខកចិត្ត"</string>
+    <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"មុខ​​ព្រួយ​បារម្ភ"</string>
+    <string name="spoken_emoji_1F620" msgid="6051942001307375830">"មុខ​​ខឹង"</string>
+    <string name="spoken_emoji_1F621" msgid="2114711878097257704">"មុខ​ក្និកក្នក់"</string>
+    <string name="spoken_emoji_1F622" msgid="29291014645931822">"មុខ​យំ"</string>
+    <string name="spoken_emoji_1F623" msgid="7803959833595184773">"មុខ​លំបាក"</string>
+    <string name="spoken_emoji_1F624" msgid="8637637647725752799">"មុខ​ជ័យ​ជំនះ"</string>
+    <string name="spoken_emoji_1F625" msgid="6153625183493635030">"មុខ​ខកចិត្ត​ប៉ុន្តែ​ធូរស្រាល"</string>
+    <string name="spoken_emoji_1F626" msgid="6179485689935562950">"មុខ​ក្រញូវ​បើកមាត់"</string>
+    <string name="spoken_emoji_1F627" msgid="8566204052903012809">"មុខ​ខូច​ចិត្ត"</string>
+    <string name="spoken_emoji_1F628" msgid="8875777401624904224">"មុខ​ភ័យ​ខ្លាច"</string>
+    <string name="spoken_emoji_1F629" msgid="1411538490319190118">"មុខ​​នឿយហត់"</string>
+    <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"មុខ​​ងងុយ​គេង"</string>
+    <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"មុខ​អស់កម្លាំង"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"មុខ​ក្រញេវក្រញូវ"</string>
+    <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"មុខ​យំ​លឺៗ"</string>
+    <string name="spoken_emoji_1F62E" msgid="726083405284353894">"មុខ​បើក​មាត់"</string>
+    <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"មុខ​ស្ងៀមស្ងាត់"</string>
+    <string name="spoken_emoji_1F630" msgid="3298804852155581163">"មុខ​បើក​មាត់​ ហើយ​មាន​ញើស"</string>
+    <string name="spoken_emoji_1F631" msgid="1603391150954646779">"មុខ​ស្រែក​ដោយ​ភ័យ​ខ្លាច"</string>
+    <string name="spoken_emoji_1F632" msgid="4846193232203976013">"មុខ​រ​ភ្ញាក់​ផ្អើល"</string>
+    <string name="spoken_emoji_1F633" msgid="4023593836629700443">"មុខ​ក្រហម"</string>
+    <string name="spoken_emoji_1F634" msgid="3155265083246248129">"មុខ​កំពុង​ដេក"</string>
+    <string name="spoken_emoji_1F635" msgid="4616691133452764482">"មុខ​​កំពុង​វិលមុខ"</string>
+    <string name="spoken_emoji_1F636" msgid="947000211822375683">"មុខ​អត់មាន​មាត់"</string>
+    <string name="spoken_emoji_1F637" msgid="1269551267347165774">"មុខ​ពាក់​ម៉ាស់"</string>
+    <string name="spoken_emoji_1F638" msgid="3410766467496872301">"មុខ​ឆ្មា​ញញឹម​ខាំធ្មេញ​ ហើយ​បើក​ភ្នែក"</string>
+    <string name="spoken_emoji_1F639" msgid="1833417519781022031">"មុខ​ឆ្មា​ស្រក​ទឹកភ្នែក"</string>
+    <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"មុខ​ឆ្មា​ញញឹម​ ហើយ​បើក​មាត់"</string>
+    <string name="spoken_emoji_1F63B" msgid="74417995938927571">"មុខ​ឆ្មា​ញញឹម​ជា​មួ​យ​ភ្នែក​រាង​បេះដូង"</string>
+    <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"មុខ​ឆ្មា​ជា​មួយ​ការ​ញញឹម​ញាក់​មុខ"</string>
+    <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"មុខ​ឆ្មា​ថើប​ហើយ​បិទ​ភ្នែក"</string>
+    <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"មុខ​ឆ្មា​ក្និកក្នក់"</string>
+    <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"មុខ​ឆ្មា​យំ"</string>
+    <string name="spoken_emoji_1F640" msgid="6023054549904329638">"មុខ​ឆ្មា​នឿយ​ហត់"</string>
+    <string name="spoken_emoji_1F645" msgid="5202090629227587076">"មុខ​គ្មាន​កាយវិការ​ល្អ"</string>
+    <string name="spoken_emoji_1F646" msgid="6734425134415138134">"មុខ​មាន​កាយវិការ​យល់ព្រម"</string>
+    <string name="spoken_emoji_1F647" msgid="1090285518444205483">"មនុស្ស​អោន​ខ្លួន​ខ្លាំង"</string>
+    <string name="spoken_emoji_1F648" msgid="8978535230610522356">"ស្វា​បិទ​ភ្នែក"</string>
+    <string name="spoken_emoji_1F649" msgid="8486145279809495102">"ស្វា​បិទ​ត្រចៀក"</string>
+    <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"ស្វា​បិទ​មាត់"</string>
+    <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"មនុស្ស​សប្បាយ​​លើក​ដៃ​មួយ"</string>
+    <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"លើក​ដៃ​ទាំង​ពីរ​អបអរ"</string>
+    <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"មនុស្ស​ចង​ចិញ្ចើម"</string>
+    <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"មនុស្ស​មាន​មុខ​ក្និកក្នក់"</string>
+    <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"មនុស្ស​អោប​ដៃ"</string>
+    <string name="spoken_emoji_1F680" msgid="513263736012689059">"គ្រាប់​​រ៉ុកកែត"</string>
+    <string name="spoken_emoji_1F681" msgid="9201341783850525339">"ឧទ្ធម្ភាគចក្រ"</string>
+    <string name="spoken_emoji_1F682" msgid="8046933583867498698">"ក្បាល​រថភ្លើង"</string>
+    <string name="spoken_emoji_1F683" msgid="8772750354339223092">"ទូរ​​រថភ្លើង"</string>
+    <string name="spoken_emoji_1F684" msgid="346396777356203608">"រថភ្លើង​ល្បឿន​លឿន"</string>
+    <string name="spoken_emoji_1F685" msgid="1237059817190832730">"រថភ្លើង​ល្បឿន​លឿន​​មាន​ច្រមុះ"</string>
+    <string name="spoken_emoji_1F686" msgid="3525197227223620343">"រថភ្លើង"</string>
+    <string name="spoken_emoji_1F687" msgid="5110143437960392837">"មេត្រូ"</string>
+    <string name="spoken_emoji_1F688" msgid="4702085029871797965">"រថភ្លើង​ប្រើ​​​ពន្លឺ"</string>
+    <string name="spoken_emoji_1F689" msgid="2375851019798817094">"ស្ថានីយ"</string>
+    <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"រថយន្ត​រត់​លើ​ផ្លូវ​ដែក"</string>
+    <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"រថយន្ត​រត់​លើ​ផ្លូវ​ដែក"</string>
+    <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"រថយន្តក្រុង"</string>
+    <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"រថយន្ត​ក្រុង​ខាង​មុខ"</string>
+    <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"រថយន្ត​ប្រើ​ចរន្ត​អគ្គិសនី"</string>
+    <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"ចំណត​រថយន្ត​ក្រុង"</string>
+    <string name="spoken_emoji_1F690" msgid="8080964620200195262">"រថយន្ត​ទេសចរណ៍​​​តូច"</string>
+    <string name="spoken_emoji_1F691" msgid="999173032408730501">"រថយន្ត​សង្គ្រោះ​បន្ទាន់"</string>
+    <string name="spoken_emoji_1F692" msgid="1712863785341849487">"ម៉ាស៊ីន​ភ្លើង"</string>
+    <string name="spoken_emoji_1F693" msgid="7987109037389768934">"រថយន្ត​ប៉ូលិស"</string>
+    <string name="spoken_emoji_1F694" msgid="6061658916653884608">"រថយន្ត​ប៉ូលិស​ខាង​មុខ"</string>
+    <string name="spoken_emoji_1F695" msgid="6913445460364247283">"តាក់ស៊ី"</string>
+    <string name="spoken_emoji_1F696" msgid="6391604457418285404">"តាក់ស៊ី​ខាង​មុខ"</string>
+    <string name="spoken_emoji_1F697" msgid="7978399334396733790">"រថយន្ត"</string>
+    <string name="spoken_emoji_1F698" msgid="7006050861129732018">"រថយន្ត​ខាង​មុខ"</string>
+    <string name="spoken_emoji_1F699" msgid="630317052666590607">"រថយន្ត​​​សម្រាប់​កម្សាន្ត"</string>
+    <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"រថយន្ត​​ចែក​ចាយ"</string>
+    <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"ឡាន​កាមីយ៉ុង"</string>
+    <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"ត្រាក់ទ័រ"</string>
+    <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"ប្រព័ន្ធ​ផ្លូវ​រថភ្លើង"</string>
+    <string name="spoken_emoji_1F69E" msgid="169238196389832234">"ផ្លូវ​​រថភ្លើង​កាត់​​ភ្នំ"</string>
+    <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"ផ្លូវ​រថភ្លើង​ផ្អាក​ដំណើរការ"</string>
+    <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"ខ្សែ​កាប​ឆ្លង​ភ្នំុ"</string>
+    <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"ផ្លូវ​រថភ្លើង​លើ​អាកាស"</string>
+    <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"កប៉ាល់"</string>
+    <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"ទូកចែវ"</string>
+    <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"ទូក​ល្បឿន​លឿន"</string>
+    <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"ភ្លើង​ចរាចរណ៍"</string>
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"ភ្លើង​ចរាចរណ៍​បញ្ឈរ"</string>
+    <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"សញ្ញា​​សំណង់"</string>
+    <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"រថយន្ត​​ប៉ូលិស​បើក​សារ៉ែន​វិល"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"បង្គោល​ទង់ជាតិ​រាង​ត្រីកោណ"</string>
+    <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"ទ្វារ"</string>
+    <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"សញ្ញា​ហាម​ចូល"</string>
+    <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"​សញ្ញា​ជក់​បារី"</string>
+    <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"ហាម​ជក់​បារី"</string>
+    <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"និមិត្តសញ្ញា​ដាក់​សំរាម​ក្នុង​ធុង"</string>
+    <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"និមិត្តសញ្ញា​ហាម​ចោល​សំរាម"</string>
+    <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"និមិត្ត​សញ្ញា​ទឹក​ចល័ត"</string>
+    <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"និមិត្ត​សញ្ញា​​ទឹក​មិន​ចល័ត"</string>
+    <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"កង់"</string>
+    <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"ហាម​ជិះ​កង់"</string>
+    <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"អ្នក​ជិះកង់"</string>
+    <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"អ្នក​ជិះ​កង់​ឡើង​ភ្នំ"</string>
+    <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"ថ្មើរជើង"</string>
+    <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"មិន​សម្រាប់​ថ្មើរ​ជើង"</string>
+    <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"កុមារ​​ឆ្លងកាត់"</string>
+    <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"និមិត្ត​សញ្ញា​បុរស"</string>
+    <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"និមិត្ត​សញ្ញា​ស្ត្រី"</string>
+    <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"បន្ទប់ទឹក"</string>
+    <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"និមិត្ត​សញ្ញា​ទារក"</string>
+    <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"បង្គន់"</string>
+    <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"បន្ទប់​ទឹក"</string>
+    <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"ផ្កាឈូក​ងូត​ទឹក"</string>
+    <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"​ងូតទឹក"</string>
+    <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"អាង​​ងូត​ទឹក"</string>
+    <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"ការ​ត្រួត​ពិនិត្យ​លិខិត​ឆ្លង​ដែន"</string>
+    <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"គយ"</string>
+    <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"ប្រកាស​​ឥវ៉ាន់"</string>
+    <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"ឥវ៉ាន់​នៅ​សល់"</string>
+</resources>
diff --git a/java/res/values-km-rKH/strings-talkback-descriptions.xml b/java/res/values-km-rKH/strings-talkback-descriptions.xml
index 7a2c710..bb8c383 100644
--- a/java/res/values-km-rKH/strings-talkback-descriptions.xml
+++ b/java/res/values-km-rKH/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ទីកន្លែង"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"និមិត្តសញ្ញា"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"សញ្ញា​អារម្មណ៍"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-km-rKH/strings.xml b/java/res/values-km-rKH/strings.xml
index 4d7de93..337d086 100644
--- a/java/res/values-km-rKH/strings.xml
+++ b/java/res/values-km-rKH/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"ជម្រើស​​បញ្ចូល"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"ពាក្យ​បញ្ជា​កំណត់​ហេតុ​​ការ​ស្រាវជ្រាវ"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"រក​មើល​ឈ្មោះ​ទំនាក់ទំនង"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"កម្មវិធី​ពិនិត្យ​អក្ខរាវិរុទ្ធ​ប្រើ​ធាតុ​ពី​​ក្នុង​បញ្ជី​ទំនាក់ទំនង​របស់​អ្នក"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"ញ័រ​នៅ​ពេល​ចុច​គ្រាប់ចុច"</string>
@@ -29,7 +28,7 @@
     <string name="popup_on_keypress" msgid="123894815723512944">"លេច​ឡើង​នៅ​​ពេល​ចុច​គ្រាប់​ចុច"</string>
     <string name="general_category" msgid="1859088467017573195">"ទូទៅ"</string>
     <string name="correction_category" msgid="2236750915056607613">"ការ​កែ​អត្ថបទ"</string>
-    <string name="gesture_typing_category" msgid="497263612130532630">"បញ្ចូល​ដោយ​ប្រើ​កាយវិការ​"</string>
+    <string name="gesture_typing_category" msgid="497263612130532630">"បញ្ចូល​ដោយ​ប្រើ​កាយវិការ"</string>
     <string name="misc_category" msgid="6894192814868233453">"ជម្រើស​ផ្សេងទៀត"</string>
     <string name="advanced_settings" msgid="362895144495591463">"ការ​កំណត់​កម្រិត​ខ្ពស់"</string>
     <string name="advanced_settings_summary" msgid="4487980456152830271">"ជម្រើស​សម្រាប់​អ្នក​ជំនាញ"</string>
@@ -39,7 +38,7 @@
     <string name="show_language_switch_key_summary" msgid="7343403647474265713">"បង្ហាញ​នៅ​ពេល​ដែល​បើក​ភាសា​បញ្ចូល​ច្រើន"</string>
     <string name="sliding_key_input_preview" msgid="6604262359510068370">"បង្ហាញ​ទ្រនិច​បង្ហាញ​ស្លាយ"</string>
     <string name="sliding_key_input_preview_summary" msgid="6340524345729093886">"បង្ហាញ​​សញ្ញា​មើល​​ឃើញ​ខណៈ​ពេល​ដែល​រុញ​ពី​ឆ្វេង ឬ​​គ្រាប់​ចុច​​និមិត្ត​សញ្ញា"</string>
-    <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"​សោ​លេចឡើង​បោះបង់​ការ​​ពន្យារពេល​"</string>
+    <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"​សោ​លេចឡើង​បោះបង់​ការ​​ពន្យារពេល"</string>
     <string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"គ្មាន​ការ​ពន្យារពេល"</string>
     <string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"លំនាំដើម"</string>
     <string name="abbreviation_unit_milliseconds" msgid="8700286094028323363">"<xliff:g id="MILLISECONDS">%s</xliff:g> មិល្លី​វិនាទី"</string>
@@ -49,7 +48,7 @@
     <string name="use_personalized_dicts" msgid="5167396352105467626">"ការ​ស្នើ​ផ្ទាល់​ខ្លួន"</string>
     <string name="use_double_space_period" msgid="8781529969425082860">"រយៈ​ពេល​ចុច​ដកឃ្លា​ពីរដង"</string>
     <string name="use_double_space_period_summary" msgid="6532892187247952799">"ប៉ះ​ដកឃ្លា​ពីរ​​ដង​បញ្ចូល​​​រយៈ​ពេល​ដែល​អនុវត្ត​តាម​ដកឃ្លា"</string>
-    <string name="auto_cap" msgid="1719746674854628252">"ការ​សរសេរ​ជា​អក្សរ​ធំ​​ស្វ័យប្រវត្តិ​"</string>
+    <string name="auto_cap" msgid="1719746674854628252">"ការ​សរសេរ​ជា​អក្សរ​ធំ​​ស្វ័យប្រវត្តិ"</string>
     <string name="auto_cap_summary" msgid="7934452761022946874">"សរសេរ​ពាក្យ​ដំបូង​​​ជា​អក្សរ​ធំ​​នៃ​ប្រយោគ​នីមួយ​ៗ"</string>
     <string name="edit_personal_dictionary" msgid="3996910038952940420">"វចនានុក្រម​ផ្ទាល់ខ្លួន"</string>
     <string name="configure_dictionaries_title" msgid="4238652338556902049">"ផ្នែក​បន្ថែម​វចនានុក្រម"</string>
@@ -60,7 +59,7 @@
     <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3859783767435239118">"បង្ហាញ​នៅ​ក្នុង​របៀប​បញ្ឈរ"</string>
     <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"លាក់​ជានិច្ច"</string>
     <string name="prefs_block_potentially_offensive_title" msgid="5078480071057408934">"ទប់ស្កាត់​​ពាក្យ​​បំពាន"</string>
-    <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"កុំ​ស្នើ​ឲ្យ​ពាក្យ​បំពាន​មាន​សក្ដានុពល​"</string>
+    <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"កុំ​ស្នើ​ឲ្យ​ពាក្យ​បំពាន​មាន​សក្ដានុពល"</string>
     <string name="auto_correction" msgid="7630720885194996950">"ការ​កែ​​​ស្វ័យប្រវត្តិ"</string>
     <string name="auto_correction_summary" msgid="5625751551134658006">"ចន្លោះ​មិន​ឃើញ ​និង​សញ្ញា​​វណ្ណយុត្ត​កែ​ពាក្យ​ដែល​បាន​វាយ​ខុស​ស្វ័យប្រវត្តិ"</string>
     <string name="auto_correction_threshold_mode_off" msgid="8470882665417944026">"បិទ"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"​​បញ្ចូល​ភាសា"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"ប៉ះ​ម្ដង​ទៀត​ ដើម្បី​រក្សា​ទុក"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"មាន​វចនានុក្រម"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"បើក​មតិត្រឡប់"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"ជំនួយ​​​ធ្វើ​ឲ្យ​​ប្រសើរ​ឡើង​​នៃ​កម្មវិធី​កែ​​វិធី​សាស្ត្រ​​បញ្ចូល​ដោយ​ស្វ័យ​ប្រវត្តិ​ ដោយ​ផ្ញើ​ស្ថិតិ​​ប្រើ​ប្រាស់​ ​និង​របាយការណ៍​គាំង"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"រូបរាង​ក្ដារចុច"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"អង់គ្លេស (​អង់គ្លេស)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"អង់គ្លេស (សហរដ្ឋ​អាមេរិក)"</string>
@@ -118,12 +115,11 @@
     <string name="enable" msgid="5031294444630523247">"បើក"</string>
     <string name="not_now" msgid="6172462888202790482">"មិនមែន​ឥឡូវ"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"មាន​រចនាប័ទ្ម​បញ្ចូល​ដូច​គ្នា​ដូច​ហើយ៖ <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"របៀប​ការ​សិក្សា​ដែល​អាច​ប្រើ​បាន"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"ពន្យារពេល​​​ចុច​គ្រាប់​ចុច​ឲ្យ​​យូរ"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"ថិរវេលា​​ញ័រ​​ពេល​ចុច​គ្រាប់ចុច"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"កម្រិត​សំឡេង​ពេល​ចុច​គ្រាប់​ចុច"</string>
     <string name="prefs_read_external_dictionary" msgid="2588931418575013067">"អាន​ឯកសារ​វចនានុក្រម​ខាង​ក្រៅ"</string>
-    <string name="read_external_dictionary_no_files_message" msgid="4947420942224623792">"គ្មាន​ឯកសារ​វចនានុក្រម​នៅ​ក្នុង​ថត​ទាញ​យក​​"</string>
+    <string name="read_external_dictionary_no_files_message" msgid="4947420942224623792">"គ្មាន​ឯកសារ​វចនានុក្រម​នៅ​ក្នុង​ថត​ទាញ​យក"</string>
     <string name="read_external_dictionary_multiple_files_title" msgid="7637749044265808628">"ជ្រើស​ឯកសារ​វចនានុក្រម​ ដើម្បី​ដំឡើង"</string>
     <string name="read_external_dictionary_confirm_install_message" msgid="4782116251651288054">"ពិត​ជា​ដំឡើង​ឯកសារ​នេះ​សម្រាប់ <xliff:g id="LANGUAGE_NAME">%s</xliff:g>?"</string>
     <string name="error" msgid="8940763624668513648">"មាន​កំហុស"</string>
@@ -154,7 +150,7 @@
     <string name="dictionary_provider_name" msgid="3027315045397363079">"កម្មវិធី​ផ្ដល់​វចនានុក្រម"</string>
     <string name="dictionary_service_name" msgid="6237472350693511448">"សេវាកម្ម​​វចនានុក្រម"</string>
     <string name="download_description" msgid="6014835283119198591">"ព័ត៌មាន​បច្ចុប្បន្នភាព​វចនានុក្រម"</string>
-    <string name="dictionary_settings_title" msgid="8091417676045693313">"ផ្នែក​បន្ថែម​វចនានុក្រម​​"</string>
+    <string name="dictionary_settings_title" msgid="8091417676045693313">"ផ្នែក​បន្ថែម​វចនានុក្រម"</string>
     <string name="dictionary_install_over_metered_network_prompt" msgid="3587517870006332980">"វចនានុក្រម​​​​​អាច​ប្រើ​បាន"</string>
     <string name="dictionary_settings_summary" msgid="5305694987799824349">"ការ​កំណត់​សម្រាប់​វចនានុក្រម"</string>
     <string name="user_dictionaries" msgid="3582332055892252845">"វចនានុក្រម​​​អ្នក​ប្រើ"</string>
@@ -170,10 +166,10 @@
     <string name="message_updating" msgid="4457761393932375219">"ពិនិត្យមើល​បច្ចុប្បន្នភាព"</string>
     <string name="message_loading" msgid="5638680861387748936">"កំពុង​ផ្ទុក..."</string>
     <string name="main_dict_description" msgid="3072821352793492143">"វចនានុក្រម​ចម្បង"</string>
-    <string name="cancel" msgid="6830980399865683324">"បោះ​បង់​"</string>
+    <string name="cancel" msgid="6830980399865683324">"បោះ​បង់"</string>
     <string name="go_to_settings" msgid="3876892339342569259">"ការ​កំណត់"</string>
     <string name="install_dict" msgid="180852772562189365">"ដំឡើង"</string>
-    <string name="cancel_download_dict" msgid="7843340278507019303">"បោះ​បង់​"</string>
+    <string name="cancel_download_dict" msgid="7843340278507019303">"បោះ​បង់"</string>
     <string name="delete_dict" msgid="756853268088330054">"លុប"</string>
     <string name="should_download_over_metered_prompt" msgid="1583881200688185508">"ភាសា​ដែល​បាន​ជ្រើស​នៅ​លើ​ឧបករណ៍​ចល័ត​មាន​វចនានុក្រម​អាច​ប្រើ​បាន។&lt;br/&gt; យើង​ផ្ដល់​អនុសាសន៍​ឲ្យ &lt;b&gt;ទាញ​យក&lt;/b&gt; វចនានុក្រម​ភាសា <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> ដើម្បី​បង្កើន​បទពិសោធន៍​វាយ​បញ្ចូល​របស់​អ្នក។&lt;br/&gt; &lt;br/&gt; ការ​ទាញ​យក​អាច​ចំណាយ​ពេល​ប្រហែល​ពីរ​នាទី​នៅ​តាម 3G។ ការ​គិត​ថ្លៃ​អាច​អនុវត្ត​ប្រសិន​បើ​អ្នក​មិន​ប្រើ &lt;b&gt;ផែនការ​ទិន្នន័យ​គ្មាន​ដែន​កំណត់&lt;/b&gt;.&lt;br/&gt; បើ​អ្នក​មិន​ប្រាកដ​​ថា​ផែនការ​ណា​មួយ​ដែល​អ្នក​មាន យើង​ផ្ដល់​អនុសាសន៍​ឲ្យ​​ភ្ជាប់​វ៉ាយហ្វាយ ដើម្បី​ចាប់ផ្ដើម​ទាញ​យក​ដោយ​ស្វ័យ​ប្រវត្តិ។&lt;br/&gt; &lt;br/&gt; ជំនួយ៖ អ្នក​អាច​ទាញ​យក និង​លុប​វចនានុក្រម​ដោយ​ចូល​ទៅ​ &lt;b&gt;ភាសា &amp; ការ​បញ្ចូល&lt;/b&gt; នៅ​ក្នុង​ម៉ឺនុយ &lt;b&gt;ការ​កំណត់&lt;/b&gt; សម្រាប់​ឧបករណ៍​ចល័ត។"</string>
     <string name="download_over_metered" msgid="1643065851159409546">"ទាញ​យក​ឥឡូវ​នេះ (<xliff:g id="SIZE_IN_MEGABYTES">%1$.1f</xliff:g> មេកាបៃ)"</string>
@@ -191,7 +187,7 @@
     <string name="user_dict_settings_add_word_option_name" msgid="6665558053408962865">"ពាក្យ៖"</string>
     <string name="user_dict_settings_add_shortcut_option_name" msgid="3094731590655523777">"ផ្លូវកាត់​៖"</string>
     <string name="user_dict_settings_add_locale_option_name" msgid="4738643440987277705">"ភាសា៖"</string>
-    <string name="user_dict_settings_add_word_hint" msgid="4902434148985906707">"វាយ​បញ្ចូល​ពាក្យ​"</string>
+    <string name="user_dict_settings_add_word_hint" msgid="4902434148985906707">"វាយ​បញ្ចូល​ពាក្យ"</string>
     <string name="user_dict_settings_add_shortcut_hint" msgid="2265453012555060178">"ផ្លូវកាត់​ជា​ជម្រើស"</string>
     <string name="user_dict_settings_edit_dialog_title" msgid="3765774633869590352">"កែ​ពាក្យ"</string>
     <string name="user_dict_settings_context_menu_edit_title" msgid="6812255903472456302">"កែ"</string>
diff --git a/java/res/values-ko/strings-action-keys.xml b/java/res/values-ko/strings-action-keys.xml
index 04febee..34cd8a2 100644
--- a/java/res/values-ko/strings-action-keys.xml
+++ b/java/res/values-ko/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"이전"</string>
     <string name="label_done_key" msgid="7564866296502630852">"완료"</string>
     <string name="label_send_key" msgid="482252074224462163">"전송"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"중지"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"대기"</string>
 </resources>
diff --git a/java/res/values-ko/strings-talkback-descriptions.xml b/java/res/values-ko/strings-talkback-descriptions.xml
index c02976d..4595716 100644
--- a/java/res/values-ko/strings-talkback-descriptions.xml
+++ b/java/res/values-ko/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"장소"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"기호"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"이모티콘"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index 4037abd..98427b3 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"입력 옵션"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"로그 명령 탐색"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"연락처 이름 조회"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"맞춤법 검사기가 주소록의 항목을 사용합니다."</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"키를 누를 때 진동 발생"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"입력 언어"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"저장하려면 다시 터치"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"사전 사용 가능"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"사용자 의견 사용"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"사용 통계 및 오류 보고서를 자동으로 전송하여 입력 방법 편집기의 개선에 도움을 줍니다."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"키보드 테마"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"영어(영국)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"영어(미국)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"사용"</string>
     <string name="not_now" msgid="6172462888202790482">"나중에"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"같은 입력 스타일이 다음과 같이 이미 존재합니다. <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"가용성 연구 모드"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"키 길게 누르기 지연"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"키를 누를 때 진동 시간"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"키를 누를 때 소리 볼륨"</string>
diff --git a/java/res/values-ky/strings.xml b/java/res/values-ky/strings.xml
index 3758c2d..8165a3c 100644
--- a/java/res/values-ky/strings.xml
+++ b/java/res/values-ky/strings.xml
@@ -126,9 +126,7 @@
     <skip />
     <!-- no translation found for has_dictionary (6071847973466625007) -->
     <skip />
-    <!-- no translation found for prefs_enable_log (6620424505072963557) -->
     <skip />
-    <!-- no translation found for prefs_description_log (5827825607258246003) -->
     <skip />
     <!-- no translation found for keyboard_layout (8451164783510487501) -->
     <skip />
@@ -138,7 +136,6 @@
     <skip />
     <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
     <skip />
-    <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
     <skip />
     <!-- no translation found for prefs_keypress_vibration_duration_settings (1829950405285211668) -->
     <skip />
diff --git a/java/res/values-lo-rLA/strings-action-keys.xml b/java/res/values-lo-rLA/strings-action-keys.xml
index 08dc983..2399305 100644
--- a/java/res/values-lo-rLA/strings-action-keys.xml
+++ b/java/res/values-lo-rLA/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"ກ່ອນໜ້າ"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Done"</string>
     <string name="label_send_key" msgid="482252074224462163">"ສົ່ງ"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"ຢຸດຊົ່ວຄາວ"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"ລໍຖ້າ"</string>
 </resources>
diff --git a/java/res/values-lo-rLA/strings-emoji-descriptions.xml b/java/res/values-lo-rLA/strings-emoji-descriptions.xml
index 83935a5..ae66e14 100644
--- a/java/res/values-lo-rLA/strings-emoji-descriptions.xml
+++ b/java/res/values-lo-rLA/strings-emoji-descriptions.xml
@@ -20,1627 +20,827 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for spoken_emoji_00A9 (2859822817116803638) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_00AE (7708335454134589027) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_203C (153340916701508663) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2049 (4877256448299555371) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2122 (9188440722954720429) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2139 (9114342638917304327) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2194 (8055202727034946680) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2195 (8028122253301087407) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2196 (4019164898967854363) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2197 (4255723717709017801) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2198 (1452063451313622090) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2199 (6942722693368807849) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_21A9 (5204750172335111188) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_21AA (3950259884359247006) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_231A (6751448803233874993) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_231B (5956428809948426182) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23E9 (4022497733535162237) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23EA (2251396938087774944) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23EB (3746885195641491865) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23EC (7852372752901163416) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23F0 (8474219588750627870) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23F3 (166900119581024371) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_24C2 (3948348737566038470) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25AA (7865181015100227349) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25AB (6446532820937381457) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25B6 (2423897708496040947) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25C0 (3595083440074484934) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25FB (4838691986881215419) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25FC (7008859564991191050) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25FD (7673439755069217479) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25FE (6782214109919768923) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2600 (2272722634618990413) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2601 (6205136889311537150) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_260E (8670395193046424238) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2611 (4530550203347054611) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2614 (1612791247861229500) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2615 (3320562382424018588) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_261D (4690554173549768467) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_263A (3170094381521989300) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2648 (4621241062667020673) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2649 (7694461245947059086) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264A (1258074605878705030) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264B (4409219914377810956) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264C (6520255367817054163) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264D (1504758945499854018) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264E (2354847104530633519) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264F (5822933280406416112) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2650 (4832481156714796163) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2651 (840953134601595090) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2652 (3586925968718775281) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2653 (8420547731496254492) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2660 (4541170554542412536) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2663 (3669352721942285724) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2665 (6347941599683765843) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2666 (8296769213401115999) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2668 (7063148281053820386) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_267B (21716857176812762) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_267F (8833496533226475443) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2693 (7443148847598433088) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26A0 (6272635532992727510) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26A1 (5604749644693339145) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26AA (8005748091690377153) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26AB (1655910278422753244) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26BD (1545218197938889737) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26BE (8959760533076498209) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26C4 (3045791757044255626) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26C5 (5580129409712578639) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26CE (8963656417276062998) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26D4 (2231451988209604130) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26EA (7513319636103804907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26F2 (7134115206158891037) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26F3 (4912302210162075465) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26F5 (4766328116769075217) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26FA (5888017494809199037) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26FD (2417060622927453534) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2702 (4005741160717451912) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2705 (164605766946697759) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2708 (7153840886849268988) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2709 (2217319160724311369) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_270A (508347232762319473) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_270B (6640562128327753423) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_270C (1344288035704944581) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_270F (6108251586067318718) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2712 (6320544535087710482) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2714 (1968242800064001654) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2716 (511941294762977228) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2728 (5650330815808691881) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2733 (8915809595141157327) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2734 (4846583547980754332) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2744 (4350636647760161042) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2747 (3718282973916474455) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_274C (2752145886733295314) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_274E (4262918689871098338) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2753 (6935897159942119808) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2754 (7277504915105532954) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2755 (6853076969826960210) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2757 (3707907828776912174) -->
-    <skip />
+    <string name="spoken_emoji_00A9" msgid="2859822817116803638">"ເຄື່ອງ​ໝາຍ​ລິຂະສິດ"</string>
+    <string name="spoken_emoji_00AE" msgid="7708335454134589027">"ເຄື່ອງໝາຍ​ຈົດທະບຽນ"</string>
+    <string name="spoken_emoji_203C" msgid="153340916701508663">"Double exclamation mark"</string>
+    <string name="spoken_emoji_2049" msgid="4877256448299555371">"Exclamation question mark"</string>
+    <string name="spoken_emoji_2122" msgid="9188440722954720429">"Trade mark sign"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"Information source"</string>
+    <string name="spoken_emoji_2194" msgid="8055202727034946680">"Left right arrow"</string>
+    <string name="spoken_emoji_2195" msgid="8028122253301087407">"Up down arrow"</string>
+    <string name="spoken_emoji_2196" msgid="4019164898967854363">"North west arrow"</string>
+    <string name="spoken_emoji_2197" msgid="4255723717709017801">"North east arrow"</string>
+    <string name="spoken_emoji_2198" msgid="1452063451313622090">"South east arrow"</string>
+    <string name="spoken_emoji_2199" msgid="6942722693368807849">"South west arrow"</string>
+    <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Leftwards arrow with hook"</string>
+    <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Rightwards arrow with hook"</string>
+    <string name="spoken_emoji_231A" msgid="6751448803233874993">"ເບິ່ງ"</string>
+    <string name="spoken_emoji_231B" msgid="5956428809948426182">"Hourglass"</string>
+    <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Black right-pointing double triangle"</string>
+    <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Black left-pointing double triangle"</string>
+    <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Black up-pointing double triangle"</string>
+    <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Black down-pointing double triangle"</string>
+    <string name="spoken_emoji_23F0" msgid="8474219588750627870">"ໂມງປຸກ"</string>
+    <string name="spoken_emoji_23F3" msgid="166900119581024371">"Hourglass with flowing sand"</string>
+    <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Circled latin capital letter m"</string>
+    <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Black small square"</string>
+    <string name="spoken_emoji_25AB" msgid="6446532820937381457">"White small square"</string>
+    <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Black right-pointing triangle"</string>
+    <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Black left-pointing triangle"</string>
+    <string name="spoken_emoji_25FB" msgid="4838691986881215419">"White medium square"</string>
+    <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Black medium square"</string>
+    <string name="spoken_emoji_25FD" msgid="7673439755069217479">"White medium small square"</string>
+    <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Black medium small square"</string>
+    <string name="spoken_emoji_2600" msgid="2272722634618990413">"Black sun with rays"</string>
+    <string name="spoken_emoji_2601" msgid="6205136889311537150">"Cloud"</string>
+    <string name="spoken_emoji_260E" msgid="8670395193046424238">"Black telephone"</string>
+    <string name="spoken_emoji_2611" msgid="4530550203347054611">"Ballot box with check"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"Umbrella with rain drops"</string>
+    <string name="spoken_emoji_2615" msgid="3320562382424018588">"Hot beverage"</string>
+    <string name="spoken_emoji_261D" msgid="4690554173549768467">"White up pointing index"</string>
+    <string name="spoken_emoji_263A" msgid="3170094381521989300">"White smiling face"</string>
+    <string name="spoken_emoji_2648" msgid="4621241062667020673">"Aries"</string>
+    <string name="spoken_emoji_2649" msgid="7694461245947059086">"Taurus"</string>
+    <string name="spoken_emoji_264A" msgid="1258074605878705030">"Gemini"</string>
+    <string name="spoken_emoji_264B" msgid="4409219914377810956">"ມະເຮັງ"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leo"</string>
+    <string name="spoken_emoji_264D" msgid="1504758945499854018">"Virgo"</string>
+    <string name="spoken_emoji_264E" msgid="2354847104530633519">"Libra"</string>
+    <string name="spoken_emoji_264F" msgid="5822933280406416112">"Scorpius"</string>
+    <string name="spoken_emoji_2650" msgid="4832481156714796163">"Sagittarius"</string>
+    <string name="spoken_emoji_2651" msgid="840953134601595090">"Capricorn"</string>
+    <string name="spoken_emoji_2652" msgid="3586925968718775281">"Aquarius"</string>
+    <string name="spoken_emoji_2653" msgid="8420547731496254492">"Pisces"</string>
+    <string name="spoken_emoji_2660" msgid="4541170554542412536">"Black spade suit"</string>
+    <string name="spoken_emoji_2663" msgid="3669352721942285724">"Black club suit"</string>
+    <string name="spoken_emoji_2665" msgid="6347941599683765843">"Black heart suit"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"Black diamond suit"</string>
+    <string name="spoken_emoji_2668" msgid="7063148281053820386">"Hot springs"</string>
+    <string name="spoken_emoji_267B" msgid="21716857176812762">"Black universal recycling symbol"</string>
+    <string name="spoken_emoji_267F" msgid="8833496533226475443">"Wheelchair symbol"</string>
+    <string name="spoken_emoji_2693" msgid="7443148847598433088">"Anchor"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Warning sign"</string>
+    <string name="spoken_emoji_26A1" msgid="5604749644693339145">"High voltage sign"</string>
+    <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Medium white circle"</string>
+    <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Medium black circle"</string>
+    <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Soccer ball"</string>
+    <string name="spoken_emoji_26BE" msgid="8959760533076498209">"ເບສບອລ"</string>
+    <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Snowman without snow"</string>
+    <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Sun behind cloud"</string>
+    <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Ophiuchus"</string>
+    <string name="spoken_emoji_26D4" msgid="2231451988209604130">"No entry"</string>
+    <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Church"</string>
+    <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Fountain"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Flag in hole"</string>
+    <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Sailboat"</string>
+    <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Tent"</string>
+    <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Fuel pump"</string>
+    <string name="spoken_emoji_2702" msgid="4005741160717451912">"Black scissors"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"White heavy check mark"</string>
+    <string name="spoken_emoji_2708" msgid="7153840886849268988">"Airplane"</string>
+    <string name="spoken_emoji_2709" msgid="2217319160724311369">"Envelope"</string>
+    <string name="spoken_emoji_270A" msgid="508347232762319473">"Raised fist"</string>
+    <string name="spoken_emoji_270B" msgid="6640562128327753423">"Raised hand"</string>
+    <string name="spoken_emoji_270C" msgid="1344288035704944581">"Victory hand"</string>
+    <string name="spoken_emoji_270F" msgid="6108251586067318718">"Pencil"</string>
+    <string name="spoken_emoji_2712" msgid="6320544535087710482">"Black nib"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"Heavy check mark"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"Heavy multiplication x"</string>
+    <string name="spoken_emoji_2728" msgid="5650330815808691881">"Sparkles"</string>
+    <string name="spoken_emoji_2733" msgid="8915809595141157327">"Eight spoked asterisk"</string>
+    <string name="spoken_emoji_2734" msgid="4846583547980754332">"Eight pointed black star"</string>
+    <string name="spoken_emoji_2744" msgid="4350636647760161042">"Snowflake"</string>
+    <string name="spoken_emoji_2747" msgid="3718282973916474455">"Sparkle"</string>
+    <string name="spoken_emoji_274C" msgid="2752145886733295314">"Cross mark"</string>
+    <string name="spoken_emoji_274E" msgid="4262918689871098338">"Negative squared cross mark"</string>
+    <string name="spoken_emoji_2753" msgid="6935897159942119808">"Black question mark ornament"</string>
+    <string name="spoken_emoji_2754" msgid="7277504915105532954">"White question mark ornament"</string>
+    <string name="spoken_emoji_2755" msgid="6853076969826960210">"White exclamation mark ornament"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"Heavy exclamation mark symbol"</string>
     <string name="spoken_emoji_2764" msgid="4214257843609432167">"ຫົວໃຈ​ສີ​ດຳ​ໜັກ"</string>
-    <!-- no translation found for spoken_emoji_2795 (6563954833786162168) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2796 (5990926508250772777) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2797 (24694184172879174) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_27A1 (3513434778263100580) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_27B0 (203395646864662198) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_27BF (4940514642375640510) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2934 (9062130477982973457) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2935 (6198710960720232074) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B05 (4813405635410707690) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B06 (1223172079106250748) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B07 (1599124424746596150) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B1B (3461247311988501626) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B1C (5793146430145248915) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B50 (3850845519526950524) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B55 (9137882158811541824) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_3030 (4609172241893565639) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_303D (2545833934975907505) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_3297 (928912923628973800) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_3299 (3930347573693668426) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F004 (1705216181345894600) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F0CF (7601493592085987866) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F170 (3817698686602826773) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F171 (3684218589626650242) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F17E (2978809190364779029) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F17F (463634348668462040) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F18E (1650705325221496768) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F191 (5386969264431429221) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F192 (8324226436829162496) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F193 (4731758603321515364) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F194 (4903128609556175887) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F195 (1433142500411060924) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F196 (8825160701159634202) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F197 (7841079241554176535) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F198 (7020298909426960622) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F199 (5971252667136235630) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F19A (4557270135899843959) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F201 (7000490044681139002) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F202 (8560906958695043947) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F21A (1496435317324514033) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F22F (609797148862445402) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F232 (8125716331632035820) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F233 (8749401090457355028) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F234 (3546951604285970768) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F235 (5320186982841793711) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F236 (879755752069393034) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F237 (6741807001205851437) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F238 (5504414186438196912) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F239 (1634067311597618959) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F23A (3107862957630169536) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F250 (6586943922806727907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F251 (9099032855993346948) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F300 (4720098285295840383) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F301 (3601962477653752974) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F302 (3404357123421753593) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F303 (3899301321538188206) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F304 (2767148930689050040) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F305 (9165812924292061196) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F306 (5889294736109193104) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F307 (2714290867291163713) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F308 (688704703985173377) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F309 (6217981957992313528) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30A (4329309263152110893) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30B (5729430693700923112) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30C (2961230863217543082) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30D (1113905673331547953) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30E (5278512600749223671) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30F (5718144880978707493) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F310 (2959618582975247601) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F311 (623906380914895542) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F312 (4458575672576125401) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F313 (7599181787989497294) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F314 (4898293184964365413) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F315 (3218117051779496309) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F316 (2061317145777689569) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F317 (2721090687319539049) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F318 (3814091755648887570) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F319 (4074299824890459465) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31A (3092285278116977103) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31B (2658562138386927881) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31C (7914768515547867384) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31D (1925730459848297182) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31E (8022112382524084418) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31F (1051661214137766369) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F320 (5450591979068216115) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F330 (3115760035618051575) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F331 (5658888205290008691) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F332 (2935650450421165938) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F333 (5898847427062482675) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F334 (6183375224678417894) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F335 (5352418412103584941) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F337 (3839107352363566289) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F338 (6389970364260468490) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F339 (9128891447985256151) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33A (2025828400095233078) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33B (8163868254348448552) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33C (6850371206262335812) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33D (9033484052864509610) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33E (2540173396638444120) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33F (4384823344364908558) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F340 (3494255459156499305) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F341 (4581959481754990158) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F342 (3119068426871821222) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F343 (2663317495805149004) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F344 (2738517881678722159) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F345 (6135288642349085554) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F346 (2075395322785406367) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F347 (7753453754963890571) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F348 (1247076837284932788) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F349 (5563054555180611086) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F34A (4688661208570160524) -->
-    <skip />
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"Heavy plus sign"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"Heavy minus sign"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"Heavy division sign"</string>
+    <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Black rightwards arrow"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"Curly loop"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Double curly loop"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"Arrow pointing rightwards then curving upwards"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"Arrow pointing rightwards then curving downwards"</string>
+    <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Leftwards black arrow"</string>
+    <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Upwards black arrow"</string>
+    <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Downwards black arrow"</string>
+    <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Black large square"</string>
+    <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"White large square"</string>
+    <string name="spoken_emoji_2B50" msgid="3850845519526950524">"White medium star"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Heavy large circle"</string>
+    <string name="spoken_emoji_3030" msgid="4609172241893565639">"Wavy dash"</string>
+    <string name="spoken_emoji_303D" msgid="2545833934975907505">"Part alternation mark"</string>
+    <string name="spoken_emoji_3297" msgid="928912923628973800">"Circled ideograph congratulation"</string>
+    <string name="spoken_emoji_3299" msgid="3930347573693668426">"Circled ideograph secret"</string>
+    <string name="spoken_emoji_1F004" msgid="1705216181345894600">"ໄພ້​ນົກກະຈອກ​ເທດ​ມັງ​ກອນ​ແດງ"</string>
+    <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"ກຳລັງ​ຫຼິ້ນ​ໄພ້​ໂຈກເກີ​ສີ​ດຳ"</string>
+    <string name="spoken_emoji_1F170" msgid="3817698686602826773">"ເລືອດ​ກຣຸບ A"</string>
+    <string name="spoken_emoji_1F171" msgid="3684218589626650242">"ເລືອດ​ກຣຸບ B"</string>
+    <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"ເລືອດ​ກຣຸບ O"</string>
+    <string name="spoken_emoji_1F17F" msgid="463634348668462040">"ບ່ອນ​ຈອດ​ລົດ"</string>
+    <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"ເລືອດ​ກຣຸບ AB"</string>
+    <string name="spoken_emoji_1F191" msgid="5386969264431429221">"CL ສີ່​ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F192" msgid="8324226436829162496">"Cool ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F193" msgid="4731758603321515364">"Free ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ID ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F195" msgid="1433142500411060924">"New ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F196" msgid="8825160701159634202">"N G ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F197" msgid="7841079241554176535">"OK ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F198" msgid="7020298909426960622">"SOS ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F199" msgid="5971252667136235630">"UP! ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"VS ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F201" msgid="7000490044681139002">"ບໍລິການ ແບບ​ກະຕະກະນະ​ສີ່​ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F202" msgid="8560906958695043947">"ບໍລິການ ແບບ​ກະຕະກະນະ​ສີ່​ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Squared ideograph charge-free"</string>
+    <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Squared ideograph reserved-seat"</string>
+    <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Squared ideograph prohibitation"</string>
+    <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Squared ideograph vacancy"</string>
+    <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Squared ideograph acceptance"</string>
+    <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Squared ideograph full occupancy"</string>
+    <string name="spoken_emoji_1F236" msgid="879755752069393034">"Squared ideograph paid"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Squared ideograph monthly"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Squared ideograph application"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Squared ideograph discount"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Squared ideograph in business"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Circled ideograph advantage"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Circled ideograph accept"</string>
+    <string name="spoken_emoji_1F300" msgid="4720098285295840383">"ພະ​ຍ​ຸ​ໝຸນ​ໄຊ​ໂຄລນ"</string>
+    <string name="spoken_emoji_1F301" msgid="3601962477653752974">"ໝອກ​ຄວັນ"</string>
+    <string name="spoken_emoji_1F302" msgid="3404357123421753593">"​ຄັນ​ຮົ່ມ​ປິດ"</string>
+    <string name="spoken_emoji_1F303" msgid="3899301321538188206">"​ຄ່ຳ​ຄືນ​ກັບ​ແສງ​ດາວ"</string>
+    <string name="spoken_emoji_1F304" msgid="2767148930689050040">"​ຕາ​ເວັນ​ຂຶ້ນ​ຢູ່​ພູ"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"​ຕາ​ເວັນ​ຂຶ້ນ"</string>
+    <string name="spoken_emoji_1F306" msgid="5889294736109193104">"​ເມືອງ​ໃນ​ຍາມ​​​ໃກ້​ຄ່ຳ"</string>
+    <string name="spoken_emoji_1F307" msgid="2714290867291163713">"​ຕາ​ເວັນ"</string>
+    <string name="spoken_emoji_1F308" msgid="688704703985173377">"ຮຸ້ງ"</string>
+    <string name="spoken_emoji_1F309" msgid="6217981957992313528">"ຂົວ​ໃນ​ຍາມ​ຄ່ຳ​ຄືນ"</string>
+    <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"​ຄື້ນ​ນ້ຳ"</string>
+    <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"ພູ​ເຂົາ​ໄຟ"</string>
+    <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"ທາງ​ຊ້າງ​ເຜືອກ"</string>
+    <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"ໜ່ວຍ​ໂລກ​ຢູ​ໂຣບ​ອາ​ຟຣິ​ກາ"</string>
+    <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"​ໜ່ວຍ​ໂລກ​ອາ​ເມ​ລິ​ກາ"</string>
+    <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"​ໜ່ວຍ​ໂລກ​ເອ​ເຊຍອອສ​ເຕຣ​ເລຍ"</string>
+    <string name="spoken_emoji_1F310" msgid="2959618582975247601">"ໜ່ວຍ​ໂລກ​ມີ​ເສັ້ນ​ຕັດ"</string>
+    <string name="spoken_emoji_1F311" msgid="623906380914895542">"ສັນ​ຍາ​ລັກ​​ເດືອນ​ມືດ"</string>
+    <string name="spoken_emoji_1F312" msgid="4458575672576125401">"ສັນ​ຍາ​ລັກ​ເດືອນບໍ່​ເຕັມ​ດວງ"</string>
+    <string name="spoken_emoji_1F313" msgid="7599181787989497294">"ສັນ​ຍາ​ລັກ​ເດືອນ​ເຄິ່ງດວງ​ທຳ​ອິດ"</string>
+    <string name="spoken_emoji_1F314" msgid="4898293184964365413">"ສັນ​ຍາ​ລັກ​ເດືອນ​ຂຶ້ນ"</string>
+    <string name="spoken_emoji_1F315" msgid="3218117051779496309">"​ສັນ​ຍາ​ລັກ​ເດືອນ​ເຕັມ​ດວງ"</string>
+    <string name="spoken_emoji_1F316" msgid="2061317145777689569">"ສັນ​ຍາ​ລັກ​ເດືອນ​ໃກ້​ເຕັມ​ດວງ"</string>
+    <string name="spoken_emoji_1F317" msgid="2721090687319539049">"ສັນ​ຍາ​ລັກ​ເດືອນ​ເຄິ່ງ​ດວງ​​ທ້າຍ"</string>
+    <string name="spoken_emoji_1F318" msgid="3814091755648887570">"ສັນ​ຍາ​ລັກ​ເດືອນ​ສ້ຽວ"</string>
+    <string name="spoken_emoji_1F319" msgid="4074299824890459465">"​ເດືອນ​ສ້ຽວ"</string>
+    <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"ເດືອນ​ມືດ​ມີ​ໜ້າ"</string>
+    <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"ເດືອນ​ເຄິ່ງດວງ​ທຳ​ອິດ​ມີ​ໜ້າ"</string>
+    <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"ສັນ​ຍາ​ລັກ​ເດືອນ​ເຄິ່ງ​ດວງ​​ທ້າຍ​ມີ​ໜ້າ"</string>
+    <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"​ເດືອນ​ເຕັມ​ດວງ​ມີ​ໜ້າ"</string>
+    <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"​ຕາ​ເວັນ​ມີ​ໜ້າ"</string>
+    <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"ດາວ​ເຮືອງ​ແສງ"</string>
+    <string name="spoken_emoji_1F320" msgid="5450591979068216115">"​ດາວ​ຕົກ"</string>
+    <string name="spoken_emoji_1F330" msgid="3115760035618051575">"​ລູກ​ເກົາ​ລັດ"</string>
+    <string name="spoken_emoji_1F331" msgid="5658888205290008691">"​ກ້າ​ໄມ້"</string>
+    <string name="spoken_emoji_1F332" msgid="2935650450421165938">"ຕົ້ນ​ໄມ້​ບໍ່​ຜັດ​ໃບ"</string>
+    <string name="spoken_emoji_1F333" msgid="5898847427062482675">"​ຕົ້ນ​ໄມ້​ຜັດໃບ"</string>
+    <string name="spoken_emoji_1F334" msgid="6183375224678417894">"​ຕົ້ນ​ປາມ"</string>
+    <string name="spoken_emoji_1F335" msgid="5352418412103584941">"​ກະ​ບອງ​ເພັດ"</string>
+    <string name="spoken_emoji_1F337" msgid="3839107352363566289">"​ທິວ​ລິບ"</string>
+    <string name="spoken_emoji_1F338" msgid="6389970364260468490">"ດອກ​ເຊີ​ຣີ"</string>
+    <string name="spoken_emoji_1F339" msgid="9128891447985256151">"​ດອກ​ກຸ​ຫລາບ"</string>
+    <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"​ສະ​ກຸນ​ຊະ​ບາ"</string>
+    <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"ດອກ​ຕາ​ເວັນ"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"ດອກ​ໄມ້​ບານ"</string>
+    <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"ຕົ້ນ​ສາ​ລີ"</string>
+    <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"​ຕົ້ນ​ເຂົ້າ"</string>
+    <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"​ສະ​ໝຸນ​ໄພ"</string>
+    <string name="spoken_emoji_1F340" msgid="3494255459156499305">"ໂຄລ​ເວີ​ສີ່​ໃບ"</string>
+    <string name="spoken_emoji_1F341" msgid="4581959481754990158">"​ໃບ​ເມ​ເປີ້ນ"</string>
+    <string name="spoken_emoji_1F342" msgid="3119068426871821222">"ໃບ​ໄມ້ຫຼົ່ນ"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"ໃບ​ໄມ້​ປິວ​ຕາມ​ລົມ"</string>
+    <string name="spoken_emoji_1F344" msgid="2738517881678722159">"​ເຫັດ"</string>
+    <string name="spoken_emoji_1F345" msgid="6135288642349085554">"​ໝາກ​ເຫຼັ່ນ"</string>
+    <string name="spoken_emoji_1F346" msgid="2075395322785406367">"​ໝາກ​ເຂືອ"</string>
+    <string name="spoken_emoji_1F347" msgid="7753453754963890571">"​ອະງຸ່ນ"</string>
+    <string name="spoken_emoji_1F348" msgid="1247076837284932788">"ໝາກ​ໂມ"</string>
+    <string name="spoken_emoji_1F349" msgid="5563054555180611086">"ໝາກ​ໂມ"</string>
+    <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"ສົ້ມ​ຂຽວ​ຫວານ"</string>
     <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"ໝາກ​ນາວ"</string>
-    <!-- no translation found for spoken_emoji_1F34C (3712827239858159474) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F34D (7712521967162622936) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F34E (1859466882598614228) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F34F (8251711032295005633) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F350 (625802980159197701) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F351 (4269460120610911895) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F352 (965600953360182635) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F353 (7068623879906925592) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F354 (45162285238888494) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F355 (9157587635526433283) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F356 (2667196119149852244) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F357 (8022817413851052256) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F358 (3042693264748036476) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F359 (3988148661730121958) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35A (1763824172198327268) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35B (62530406745717835) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35C (7537756539198945509) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35D (8173523083861875196) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35E (2935428307894662571) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35F (4840297386785728443) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F360 (4094659855684686801) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F361 (6475486395784096109) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F362 (5004692577661076275) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F363 (1606603765717743806) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F364 (6550457766169570811) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F365 (4963815540953316307) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F366 (7862401745277049404) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F367 (7447972978281980414) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F368 (7790003146142724913) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F369 (7383712944084857350) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36A (2726271795913042295) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36B (6342163604299875931) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36C (2168934753998218790) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36D (3671507903799975792) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36E (4630541402785165902) -->
-    <skip />
+    <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"​​ໝາກກ້ວຍ"</string>
+    <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"​ໝາກ​ນັດ"</string>
+    <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"​ໝາກ​ໂປ່ມ​ແດງ"</string>
+    <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"​ໝາກ​ໂປ່ມ​ຂຽວ"</string>
+    <string name="spoken_emoji_1F350" msgid="625802980159197701">"ລູກ​ສາ​ລີ່"</string>
+    <string name="spoken_emoji_1F351" msgid="4269460120610911895">"​ລູກ​ພີດ"</string>
+    <string name="spoken_emoji_1F352" msgid="965600953360182635">"​ເຊີ​ຣີ"</string>
+    <string name="spoken_emoji_1F353" msgid="7068623879906925592">"​ສະ​ຕຣໍ​ເບີ​ຣີ"</string>
+    <string name="spoken_emoji_1F354" msgid="45162285238888494">"​ແຮມ​ເບີ​ເກີ"</string>
+    <string name="spoken_emoji_1F355" msgid="9157587635526433283">"​ພິດ​ຊ່າ​ປ່ຽງ​ນຶ່ງ"</string>
+    <string name="spoken_emoji_1F356" msgid="2667196119149852244">"ຊີ້ນ​ຕິດ​ກະ​ດູກ"</string>
+    <string name="spoken_emoji_1F357" msgid="8022817413851052256">"​ຂາ​ສັດ​ປີກ"</string>
+    <string name="spoken_emoji_1F358" msgid="3042693264748036476">"ເຂົ້າ​ໜົມ​ເຂົ້າ"</string>
+    <string name="spoken_emoji_1F359" msgid="3988148661730121958">"ເຂົ້າ​ປັ້ນ"</string>
+    <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"​ເຂົ້າ​ສຸກ"</string>
+    <string name="spoken_emoji_1F35B" msgid="62530406745717835">"ເຂົ້າ​ແກງ​ກະ​ຫລີ່"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"​ຖ້ວຍ​ຮ້ອນ"</string>
+    <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"​ສະ​ປາ​ເກັດ​ຕີ"</string>
+    <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"​ເຂົ້າ​ຈ​ີ່"</string>
+    <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"​ມັນຝຣັ່ງ​ທອດ"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"​ມັນ​ຝຣັ່ງ​ຫວານ​ອົບ"</string>
+    <string name="spoken_emoji_1F361" msgid="6475486395784096109">"ດັງ​ໂງະ"</string>
+    <string name="spoken_emoji_1F362" msgid="5004692577661076275">"ໂອ​ເດັ້ງ"</string>
+    <string name="spoken_emoji_1F363" msgid="1606603765717743806">"​ຊູ​ຊິ"</string>
+    <string name="spoken_emoji_1F364" msgid="6550457766169570811">"​ກຸ້ງ​ທອດ"</string>
+    <string name="spoken_emoji_1F365" msgid="4963815540953316307">"ເຄັກ​ປາ​ແບບ​ໝຸນໆ"</string>
+    <string name="spoken_emoji_1F366" msgid="7862401745277049404">"ກະ​ແລ່ມ​ນຸ້ມ"</string>
+    <string name="spoken_emoji_1F367" msgid="7447972978281980414">"ນ້ຳ​ແຂງ​ໃສ"</string>
+    <string name="spoken_emoji_1F368" msgid="7790003146142724913">"ກະ​ແລ່ມ"</string>
+    <string name="spoken_emoji_1F369" msgid="7383712944084857350">"​ໂດ​ນັດ"</string>
+    <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"​ຄຸ​ກ​ກີ້"</string>
+    <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"​ຊັອກ​ໂກ​ແລັດບາ"</string>
+    <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"ແຄນດີ້"</string>
+    <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"​ໂລ​ລິ​ປັອບ"</string>
+    <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"​ຄັ​ສ​ຕາດ"</string>
     <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"ໝໍ້​ນ້ຳ​ເຜິ້ງ"</string>
-    <!-- no translation found for spoken_emoji_1F370 (7243244547866114951) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F371 (6731527040552916358) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F372 (1635035323832181733) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F373 (7799289534289221045) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F374 (5973820884987069131) -->
-    <skip />
+    <string name="spoken_emoji_1F370" msgid="7243244547866114951">"ຊັອດ​ເຄັກ"</string>
+    <string name="spoken_emoji_1F371" msgid="6731527040552916358">"ເບັນ​ໂຕ"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"ໝໍ້​ອາ​ຫານ"</string>
+    <string name="spoken_emoji_1F373" msgid="7799289534289221045">"​ຄົວ​ກິນ"</string>
+    <string name="spoken_emoji_1F374" msgid="5973820884987069131">"​ມີດ​ແລະ​ສ້ອມ"</string>
     <string name="spoken_emoji_1F375" msgid="1074832087699617700">"ຖ້ວຍ​ຊາ​ແບບ​ບໍ່​ມີ​ດ້າມ​ຈັບ"</string>
-    <!-- no translation found for spoken_emoji_1F376 (6499274685584852067) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F377 (1762398562314172075) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F378 (5528234560590117516) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F379 (790581290787943325) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F37A (391966822450619516) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F37B (9015043286465670662) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F37C (2532113819464508894) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F380 (3487363857092458827) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F381 (614180683680675444) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F382 (4720497171946687501) -->
-    <skip />
+    <string name="spoken_emoji_1F376" msgid="6499274685584852067">"ຈອກ​ແລະ​​ເຫຼົ້າສາ​ເກ"</string>
+    <string name="spoken_emoji_1F377" msgid="1762398562314172075">"​ຈອກວາຍ"</string>
+    <string name="spoken_emoji_1F378" msgid="5528234560590117516">"​ຈອກ​ຄັອກ​ເທວ"</string>
+    <string name="spoken_emoji_1F379" msgid="790581290787943325">"ເຄື່ອງ​ດື່ມ​ເຂດ​ຮ້ອນ"</string>
+    <string name="spoken_emoji_1F37A" msgid="391966822450619516">"ແກ້ວ​ເບຍ"</string>
+    <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"ຕຳ​ແກ້ວ​ເບຍ"</string>
+    <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"​​​ຕຸກ​ນົມ​ແອ​ນ້ອຍ"</string>
+    <string name="spoken_emoji_1F380" msgid="3487363857092458827">"​ຣິບບອນ"</string>
+    <string name="spoken_emoji_1F381" msgid="614180683680675444">"​ຂອງ​ຂວັນ​ຫໍ່​ໄວ້"</string>
+    <string name="spoken_emoji_1F382" msgid="4720497171946687501">"​ເຄັກ​ວັນ​ເກີດ"</string>
     <string name="spoken_emoji_1F383" msgid="3536505941578757623">"ແຈັກ-ໂອ-ແລນເທິນ"</string>
-    <!-- no translation found for spoken_emoji_1F384 (1797870204479059004) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F385 (1754174063483626367) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F386 (2130445450758114746) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F387 (3403182563117999933) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F388 (2903047203723251804) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F389 (2352830665883549388) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F38A (6280428984773641322) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F38B (4902225837479015489) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F38C (7623268024030989365) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F38D (8237542796124408528) -->
-    <skip />
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"​ຕົ້ນ​ຄ​ຣິສ​ມາ​ສ"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"ຊານ​ຕາ​ຄລອສ"</string>
+    <string name="spoken_emoji_1F386" msgid="2130445450758114746">"ບັ້ງໄຟດອກ"</string>
+    <string name="spoken_emoji_1F387" msgid="3403182563117999933">"ດອກ​ໄມ້​ໄຟ"</string>
+    <string name="spoken_emoji_1F388" msgid="2903047203723251804">"​ບານ​ລູນ"</string>
+    <string name="spoken_emoji_1F389" msgid="2352830665883549388">"ປາ​​ຕີ້​ປັອບ​ເປີ"</string>
+    <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"ບານ​ຄອນ​ເຟັດ​ຕີ"</string>
+    <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"ຕົ້ນ​ທາ​ນາ​ບາ​ຕະ"</string>
+    <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"ທຸງ​ໄຂວ່​ກັນ"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"ການ​ຕົກ​ແຕ່ງ​ຕົ້ນ​ພາຍ"</string>
     <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"ຕຸກກະຕາ​ຍີ່ປຸ່ນ"</string>
-    <!-- no translation found for spoken_emoji_1F38F (8754091376829552844) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F390 (8903307048095431374) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F391 (2134952069191911841) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F392 (6380405493914304737) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F393 (6947890064872470996) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A0 (3572095190082826057) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A1 (4300565511681058798) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A2 (15486093912232140) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A3 (921739319504942924) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A4 (7497596355346856950) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A5 (4290497821228183002) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A6 (26019057872319055) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A7 (837856608794094105) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A8 (2332260356509244587) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A9 (9045869366525115256) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AA (5728760354237132) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AB (1657997517193216284) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AC (4317366554314492152) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AD (607157286336130470) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AE (2902308174671548150) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AF (5420539221790296407) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B0 (7440244806527891956) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B1 (545544382391379234) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B2 (8302262034774787493) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B3 (5180870610771027520) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B4 (4723852033266071564) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B5 (1998470239850548554) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B6 (3827730457113941705) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B7 (5503403099445042180) -->
-    <skip />
+    <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"ທຸງ​ປາ​ຄາຣ໌ບ"</string>
+    <string name="spoken_emoji_1F390" msgid="8903307048095431374">"ກະ​ດິ່ງ​ລົມ"</string>
+    <string name="spoken_emoji_1F391" msgid="2134952069191911841">"ພິ​ທີ​ຊົມ​ເດືອນ"</string>
+    <string name="spoken_emoji_1F392" msgid="6380405493914304737">"ກະ​ເປົາ​ໂຮງ​ຮຽນ"</string>
+    <string name="spoken_emoji_1F393" msgid="6947890064872470996">"​ໝວກສຳ​ເລັດ​ການ​ສຶກ​ສາ"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"​ມ້າ​ໝຸນ"</string>
+    <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"ຊິງ​ຊ້າ​ສະ​ຫວັນ"</string>
+    <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"​ລົດ​ໄຟ​ເຫາະ"</string>
+    <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"​ເບັດ​ຕຶກ​ປາ​ກັບ​ປາ"</string>
+    <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"ໄມໂຄຣໂຟນ"</string>
+    <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"​ກ້ອງ​ຖ່າຍ​ໜັງ"</string>
+    <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"​ໂຮງ​ຮູບ​ເງົາ"</string>
+    <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"​ຫູ​ຟັງ"</string>
+    <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"ຈານ​ສີ"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"ໝວກ​ຊົງ​ສູງ"</string>
+    <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"ເຕັ້ນ​ລະ​ຄອນ​ສັດ"</string>
+    <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"​ປີ້"</string>
+    <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"ແຄລັບ​ເປີ​ບອດ"</string>
+    <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"​ສິນ​ລະ​ປະ​ການ​ສະ​ແດງ"</string>
+    <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"ວິ​ດີ​ໂອ​ເກມ"</string>
+    <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"ຍິງ​ເຂົ້າ​ເປົ້າ"</string>
+    <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"​ສະ​ລັອດ​ແມັດ​ຊີນ"</string>
+    <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"ສະນຸກເກີ"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"ລູກ​ເຕົ໋າ"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"ໂບລິງ"</string>
+    <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"ໄພ່​ດອກ​ໄມ້"</string>
+    <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"​ໂນດ​ດົນ​ຕີ"</string>
+    <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"​ໂນດ​ດົນ​ຕີຫຼາຍ​ອັນ"</string>
+    <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"​ແຊັກ​ໂຊ​ໂຟນ"</string>
     <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"ກີຕ້າ"</string>
-    <!-- no translation found for spoken_emoji_1F3B9 (5596295757967881451) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3BA (4284064120340683558) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3BB (2856598510069988745) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3BC (1608424748821446230) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3BD (5490786111375627777) -->
-    <skip />
+    <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"ແປ້ນ​ພິມ​ດົນ​ຕີ"</string>
+    <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"ແຕ"</string>
+    <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"​ໄວ​ໂອ​ລິນ"</string>
+    <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"ສະ​ກໍ​ດົນ​ຕີ"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"ເສື້ອ​ແລ່ນ​ກັບ​ສາຍ​ພາຍ"</string>
     <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"ໄມ້​ແລະ​ລູກ​ເທນນິສ"</string>
-    <!-- no translation found for spoken_emoji_1F3BF (6862405997423247921) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C0 (7421420756115104085) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C1 (6926537251677319922) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C2 (5708596929237987082) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C3 (5850982999510115824) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C4 (8468355585994639838) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C6 (9094474706847545409) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C7 (8172206200368370116) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C8 (5619171461277597709) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C9 (6371294008765871043) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3CA (130977831787806932) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E0 (6277213201655811842) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E1 (233476176077538885) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E2 (919736380093964570) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E3 (6177606081825094184) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E4 (717377871070970293) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E5 (1350532500431776780) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E6 (342132788513806214) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E7 (6322352038284944265) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E8 (5864918444350599907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E9 (7830416185375326938) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3EA (5081084413084360479) -->
-    <skip />
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"ສະ​ກີ​ແລະ​ເກີບ​ສະ​ກີ"</string>
+    <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"​ບານ​ບ້​ວງແລະ​ບ່ວງ"</string>
+    <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"ທຸງ​ເສັ້ນ​ໄຊ"</string>
+    <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"ສະ​ໂນບອດ​ເດີ"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"​ນັກ​ແລ່ນ"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"​ນັກ​ເຊີບ"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"​ຮາງວັນ"</string>
+    <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"​ການ​ແຂ່ງ​ມ້າ"</string>
+    <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"​ອາ​ເມ​ລິ​ກັນ​ຟຸດບອນ"</string>
+    <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"​ຣັກ​ບີ"</string>
+    <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"​ນັກ​ລອຍ​ນ້ຳ"</string>
+    <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"​​ປຸກ​ເຮືອນ"</string>
+    <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"​ເຮືອນ​ພ້ອມ​ສວນ"</string>
+    <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"​ອາ​ຄານ​ສຳ​ນັກ​ງານ"</string>
+    <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"​ຫ້ອງ​ການ​ໄປ​ສະ​ນີ​ຍີ່​ປຸ່ນ"</string>
+    <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"​ຫ້ອງ​ການ​ໄປ​ສະ​ນີ​ຢູ​ໂຣບ"</string>
+    <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"​ໂຮງ​ໝໍ"</string>
+    <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"​ທະ​ນາ​ຄານ"</string>
+    <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"ເອ​ທີ​ເອັມ"</string>
+    <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"​ໂຮງ​ແຮມ"</string>
+    <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"ມ່ານ​ຮູດ"</string>
+    <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"​ຮ້ານ​ສະ​ດວກ​ຊື້"</string>
     <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"ໂຮງຮຽນ"</string>
-    <!-- no translation found for spoken_emoji_1F3EC (4845978861878295154) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3ED (3980316226665215370) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3EE (1253964276770550248) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3EF (1128975573507389883) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3F0 (1544632297502291578) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F400 (2063034795679578294) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F401 (6736421616217369594) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F402 (7276670995895485604) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F403 (8045709541897118928) -->
-    <skip />
+    <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"​ຫ້າງ​ສັບ​ພະ​ສິນ​ຄ້າ"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"​ໂຮງ​ງານ"</string>
+    <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"​ໂຄມ​ໄຟ​ອິ​ຊາ​ກາ​ຢະ"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"​ຜາ​ສາດ​ຍີ່​ປຸ່ນ"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"​ຜາ​ສາດ​ຢູ​ໂຣບ"</string>
+    <string name="spoken_emoji_1F400" msgid="2063034795679578294">"​ໜູ"</string>
+    <string name="spoken_emoji_1F401" msgid="6736421616217369594">"ໜູ"</string>
+    <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Ox"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"ຄວາຍ"</string>
     <string name="spoken_emoji_1F404" msgid="5240777285676662335">"ງົວ"</string>
-    <!-- no translation found for spoken_emoji_1F406 (5163461930159540018) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F407 (6905370221172708160) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F408 (1362164550508207284) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F409 (8476130983168866013) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40A (1149626786411545043) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40B (5199104921208397643) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40C (2704006052881702675) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40D (8648186663643157522) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40E (7219137467573327268) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40F (7834336676729040395) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F410 (8686765722255775031) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F411 (3585715397876383525) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F412 (4924794582980077838) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F413 (1460475310405677377) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F414 (5857296282631892219) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F415 (5920041074892949527) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F416 (4362403392912540286) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F417 (6836978415840795128) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F418 (7926161463897783691) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F419 (1055233959755784186) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41A (5195666556511558060) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41B (7652480167465557832) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41C (1123461148697574239) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41D (718579308764058851) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41E (6766305509608115467) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41F (1207261298343160838) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F420 (1041145003133609221) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F421 (1748378324417438751) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F422 (4106724877523329148) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F423 (4077407945958691907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F424 (6911326019270172283) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F425 (5466514196557885577) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F426 (2163979138772892755) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F427 (3585670324511212961) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F428 (7955440808647898579) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F429 (5028269352809819035) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42A (4681926706404032484) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42B (2725166074981558322) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42C (6764791873413727085) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42D (1033643138546864251) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42E (8099223337120508820) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42F (2104743989330781572) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F430 (525492897063150160) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F431 (6051358666235016851) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F432 (7698001871193018305) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F433 (3762356053512899326) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F434 (3619943222159943226) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F435 (59199202683252958) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F436 (340544719369009828) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F437 (1219818379784982585) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F438 (9128124743321008210) -->
-    <skip />
+    <string name="spoken_emoji_1F406" msgid="5163461930159540018">"​ເສືອ​ດາວ"</string>
+    <string name="spoken_emoji_1F407" msgid="6905370221172708160">"​ກະ​ຕ່າຍ"</string>
+    <string name="spoken_emoji_1F408" msgid="1362164550508207284">"ແມວ"</string>
+    <string name="spoken_emoji_1F409" msgid="8476130983168866013">"​ມັງ​ກອນ"</string>
+    <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"​ແຂ້"</string>
+    <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"​ວານ"</string>
+    <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"​ຫອຍ"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"​ງູ"</string>
+    <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"​ມ້າ"</string>
+    <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"ແກະ"</string>
+    <string name="spoken_emoji_1F410" msgid="8686765722255775031">"​ແບ້"</string>
+    <string name="spoken_emoji_1F411" msgid="3585715397876383525">"​ແກະ"</string>
+    <string name="spoken_emoji_1F412" msgid="4924794582980077838">"ລິງ"</string>
+    <string name="spoken_emoji_1F413" msgid="1460475310405677377">"​ໄກ່​ໂຕ​ຜູ້"</string>
+    <string name="spoken_emoji_1F414" msgid="5857296282631892219">"​ໄກ່"</string>
+    <string name="spoken_emoji_1F415" msgid="5920041074892949527">"​ໝາ"</string>
+    <string name="spoken_emoji_1F416" msgid="4362403392912540286">"​ໝູ"</string>
+    <string name="spoken_emoji_1F417" msgid="6836978415840795128">"​ໝູ​ປ່າ"</string>
+    <string name="spoken_emoji_1F418" msgid="7926161463897783691">"​ຊ້າງ"</string>
+    <string name="spoken_emoji_1F419" msgid="1055233959755784186">"​ປາ​ເໝິກ"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"ເປືອກ​ຫອຍ​ກຽວ"</string>
+    <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"​ແມງ​ໄມ້"</string>
+    <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"​ມົດ"</string>
+    <string name="spoken_emoji_1F41D" msgid="718579308764058851">"​ເຜິ້ງ"</string>
+    <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"ແມງ​ເຕົ່າ​ທອງ"</string>
+    <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"​ປາ"</string>
+    <string name="spoken_emoji_1F420" msgid="1041145003133609221">"​ປາ​ເຂດ​ຮ້ອນ"</string>
+    <string name="spoken_emoji_1F421" msgid="1748378324417438751">"​ປາ​ປັກ​ເປົ້າ"</string>
+    <string name="spoken_emoji_1F422" msgid="4106724877523329148">"​ເຕົ່າ"</string>
+    <string name="spoken_emoji_1F423" msgid="4077407945958691907">"​ໄຂ່​ຟັກ"</string>
+    <string name="spoken_emoji_1F424" msgid="6911326019270172283">"​ໄກ່​ນ້ອຍ"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"​ໜ້າ​ໄກ່​ນ້ອຍ"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"​ນົກ"</string>
+    <string name="spoken_emoji_1F427" msgid="3585670324511212961">"ເພນກວິນ"</string>
+    <string name="spoken_emoji_1F428" msgid="7955440808647898579">"​ໂຄ​ອາ​ລາ"</string>
+    <string name="spoken_emoji_1F429" msgid="5028269352809819035">"​ພຸນ​ເດິນ"</string>
+    <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"ອູດ​ອາ​ຣາ​ບຽນ"</string>
+    <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"ອູດ​ແບັກ​ທຣຽນ"</string>
+    <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"​ໂລ​ມາ"</string>
+    <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"​ໜ້າ​ໜູ"</string>
+    <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"​ໜ້າ​ງົວ"</string>
+    <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"​ໜ້າ​ເສືອ"</string>
+    <string name="spoken_emoji_1F430" msgid="525492897063150160">"​ໜ້າ​ກະ​ຕ່າຍ"</string>
+    <string name="spoken_emoji_1F431" msgid="6051358666235016851">"​ໜ້າ​ແມວ"</string>
+    <string name="spoken_emoji_1F432" msgid="7698001871193018305">"​ໜ້າ​ມັງ​ກອນ"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"​ວານ​ພົ່ນ​ນ້ຳ"</string>
+    <string name="spoken_emoji_1F434" msgid="3619943222159943226">"​ໜ້າ​ມ້າ"</string>
+    <string name="spoken_emoji_1F435" msgid="59199202683252958">"​ໜ້າ​ລິງ"</string>
+    <string name="spoken_emoji_1F436" msgid="340544719369009828">"​ໜ້າ​ໝາ"</string>
+    <string name="spoken_emoji_1F437" msgid="1219818379784982585">"​ໜ້າ​ໝູ"</string>
+    <string name="spoken_emoji_1F438" msgid="9128124743321008210">"​ໜ້າ​ກົບ"</string>
     <string name="spoken_emoji_1F439" msgid="1424161319554642266">"ໜ້າ​ໜູ​ແຮມສະເຕີ"</string>
-    <!-- no translation found for spoken_emoji_1F43A (6727645488430385584) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F43B (5397170068392865167) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F43C (2715995734367032431) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F43D (6005480717951776597) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F43E (8917626103219080547) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F440 (7144338258163384433) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F442 (1905515392292676124) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F443 (1491504447758933115) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F444 (3654613047946080332) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F445 (7024905244040509204) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F446 (2150365643636471745) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F447 (8794022344940891388) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F448 (3261812959215550650) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F449 (4764447975177805991) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44A (7197417095486424841) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44B (1975968945250833117) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44C (3185919567897876562) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44D (6182553970602667815) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44E (8030851867365111809) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44F (5148753662268213389) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F450 (1012021072085157054) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F451 (8257466714629051320) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F452 (4567394011149905466) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F453 (5978410551173163010) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F454 (348469036193323252) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F455 (5665118831861433578) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F456 (1890991330923356408) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F457 (3904310482655702620) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F458 (5704243858031107692) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F459 (3553148747050035251) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45A (1389654639484716101) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45B (1113293170254222904) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45C (3410257778598006936) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45D (812176504300064819) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45E (2901741399934723562) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45F (6828566359287798863) -->
-    <skip />
+    <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"​ໜ້າ​ໝາ​ປ່າ"</string>
+    <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"​ໜ້າ​ໝີ"</string>
+    <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"​ໜ້າ​ແພນ​ດ້າ"</string>
+    <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"​ດັງ​ໝູ"</string>
+    <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"ຮອຍ​ຕີນ"</string>
+    <string name="spoken_emoji_1F440" msgid="7144338258163384433">"​ຕາ"</string>
+    <string name="spoken_emoji_1F442" msgid="1905515392292676124">"​ຫູ"</string>
+    <string name="spoken_emoji_1F443" msgid="1491504447758933115">"​ດັງ"</string>
+    <string name="spoken_emoji_1F444" msgid="3654613047946080332">"​ປາກ"</string>
+    <string name="spoken_emoji_1F445" msgid="7024905244040509204">"​ລິ້ນ"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"ຫຼັງ​ມື​ຊີ້​ຂຶ້ນ​ເທິງ"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"ຫຼັງ​ມື​ຊີ້​ລົງ​ລຸ່ມ"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"ຫຼັງ​ມື​ຊີ້​ໄປ​ຊ້າຍ"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"ຫຼັງ​ມື​ຊີ້​ໄປ​ຂວາ"</string>
+    <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"ກຳ​ປັ້ນ"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"ມື​ໂບກ​ໄປ​ມາ"</string>
+    <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"​ມື​ເຮັດ​ທ່າ​ໂອ​ເຄ"</string>
+    <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"ຍົກ​ໂປ້​ໃຫ້"</string>
+    <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"​ຊິ້ວ​ນີ້​ໂປ້​ລົງ"</string>
+    <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"​ຕົບ​ມື"</string>
+    <string name="spoken_emoji_1F450" msgid="1012021072085157054">"ແບ​ມື​ອອກ"</string>
+    <string name="spoken_emoji_1F451" msgid="8257466714629051320">"​ມຸງ​ກຸດ"</string>
+    <string name="spoken_emoji_1F452" msgid="4567394011149905466">"​ໝວກ​ຜູ່​ຍິງ"</string>
+    <string name="spoken_emoji_1F453" msgid="5978410551173163010">"​ແວ່ນ​ຕາ"</string>
+    <string name="spoken_emoji_1F454" msgid="348469036193323252">"​ເນັກ​ໄທ"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"​ເສືອ​ຢືນ"</string>
+    <string name="spoken_emoji_1F456" msgid="1890991330923356408">"​​ໂສ້ງຢີນ"</string>
+    <string name="spoken_emoji_1F457" msgid="3904310482655702620">"​ຊ​ຸດ​ເດຣສ"</string>
+    <string name="spoken_emoji_1F458" msgid="5704243858031107692">"​ກິ​ໂມ​ໂນ"</string>
+    <string name="spoken_emoji_1F459" msgid="3553148747050035251">"​ບິ​ກີ​ນີ"</string>
+    <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"​ເສື້ອ​ຜ້າ​ຜູ່​ຍິງ"</string>
+    <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"ກະ​ເປົາ"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"ກະ​ເປົາ"</string>
+    <string name="spoken_emoji_1F45D" msgid="812176504300064819">"​ກະ​ເປົາ"</string>
+    <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"​ເກີບ​ຜູ່​ຊາຍ"</string>
+    <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"​ເກີບກ​ິ​ລ​າ"</string>
     <string name="spoken_emoji_1F460" msgid="305863879170420855">"ເກີບ​ສົ້ນ​ສູງ"</string>
-    <!-- no translation found for spoken_emoji_1F461 (5160493217831417630) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F462 (1722897795554863734) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F463 (5850772903593010699) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F464 (1228335905487734913) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F465 (4461307702499679879) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F466 (1938873085514108889) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F467 (8237080594860144998) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F468 (6081300722526675382) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F469 (1090140923076108158) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46A (5063570981942606595) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46B (6795882374287327952) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46C (6844464165783964495) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46D (2316773068014053180) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46E (5897625605860822401) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46F (7716871657717641490) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F470 (6409995400510338892) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F471 (3058247860441670806) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F472 (3928854667819339142) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F473 (5921952095808988381) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F474 (1082237499496725183) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F475 (7280323988642212761) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F476 (4713322657821088296) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F477 (2197036131029221370) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F478 (7245521193493488875) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F479 (6876475321015553972) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47A (3900813633102703571) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47B (2608250873194079390) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47C (3838699131276537421) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47D (2874077455888369538) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47E (3642607168625579507) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47F (441605977269926252) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F480 (3696253485164878739) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F481 (320408708521966893) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F482 (3424354860245608949) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F483 (3221113594843849083) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F484 (7348014979080444885) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F485 (6133507975565116339) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F486 (9085459968247394155) -->
-    <skip />
+    <string name="spoken_emoji_1F461" msgid="5160493217831417630">"​ເກີບ​ຜູ່​ຍິງ"</string>
+    <string name="spoken_emoji_1F462" msgid="1722897795554863734">"​ເກີດ​ບູດ​ຜູ່​ຍິງ"</string>
+    <string name="spoken_emoji_1F463" msgid="5850772903593010699">"​ຮອຍ​ຕີນ"</string>
+    <string name="spoken_emoji_1F464" msgid="1228335905487734913">"ຄົນ​ເປັນ​ເງົາ"</string>
+    <string name="spoken_emoji_1F465" msgid="4461307702499679879">"ຄົນ​ເປັນ​ເງົາ"</string>
+    <string name="spoken_emoji_1F466" msgid="1938873085514108889">"​ຜູ່​ຊ​າຍ"</string>
+    <string name="spoken_emoji_1F467" msgid="8237080594860144998">"​ຜ​ູ່​ຍິງ"</string>
+    <string name="spoken_emoji_1F468" msgid="6081300722526675382">"​ຜູ່​ຊາຍ"</string>
+    <string name="spoken_emoji_1F469" msgid="1090140923076108158">"​ຜູ່​ຍິງ"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"ຄອບຄົວ"</string>
+    <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"​ຊາຍ​ຍິງ​ຈູງ​ມື​ກັນ"</string>
+    <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"​ຊ​າຍ​ສອງ​ຄົນ​ຈູງ​ມື​ກັນ"</string>
+    <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"​ຍິງ​ສອງ​ຄົນ​ຈູງ​ມື​ກັນ"</string>
+    <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"​ເຈົ້າ​ໜ້າ​ທີ່​ຕຳຫຼວດ"</string>
+    <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"ຜູ່​ຍິງ​ໃສ່​ຫູ​ກະ​ຕ່າຍ"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"​ເຈົ້າ​ສາວ​ມີ​ຜ້າ​ຄຸມ​ໜ້າ"</string>
+    <string name="spoken_emoji_1F471" msgid="3058247860441670806">"ຄົນ​ຜົມ​​ສີບລອນ"</string>
+    <string name="spoken_emoji_1F472" msgid="3928854667819339142">"ຄົນ​ໃສ່​ໝວກ​​ກົວ​ປ​ີ​ເໝົາ"</string>
+    <string name="spoken_emoji_1F473" msgid="5921952095808988381">"ຄົນ​ໃສ່​ຜ້າ​ໂພກ​ຫົວ"</string>
+    <string name="spoken_emoji_1F474" msgid="1082237499496725183">"ຄົນ​ອາ​ຍຸຫຼາຍກວ່າ"</string>
+    <string name="spoken_emoji_1F475" msgid="7280323988642212761">"​ຜູ່​ຍິງ​ອາ​ຍຸຫຼາຍກວ່າ"</string>
+    <string name="spoken_emoji_1F476" msgid="4713322657821088296">"​ແອ​ນ້ອຍ"</string>
+    <string name="spoken_emoji_1F477" msgid="2197036131029221370">"​ຄົນ​ເຮັດ​ວຽກ​ກໍ່​ສ້າງ"</string>
+    <string name="spoken_emoji_1F478" msgid="7245521193493488875">"ເຈົ້າ​ຍິງ"</string>
+    <string name="spoken_emoji_1F479" msgid="6876475321015553972">"ຍັກ​ຍີ່​ປຸ່ນ"</string>
+    <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"ກລອບ​ບິນ​ຍີ່​ປຸ່ນ"</string>
+    <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"​ຜີ"</string>
+    <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"ທູດ​​ແອ​ນ້ອຍສະ​ຫວັນ"</string>
+    <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"ມະ​ນຸດ​ຕ່າງ​ດາວ"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"​ສັດ​ປະ​ຫລາດ​ຕ່າງ​ດາວ"</string>
+    <string name="spoken_emoji_1F47F" msgid="441605977269926252">"ອິມປ໌"</string>
+    <string name="spoken_emoji_1F480" msgid="3696253485164878739">"​ຫົວ​ກະ​ໂຫຼກ"</string>
+    <string name="spoken_emoji_1F481" msgid="320408708521966893">"​ພະ​ນັກ​ງານ​ບໍ​ລິ​ການ​ຂໍ້​ມູນ"</string>
+    <string name="spoken_emoji_1F482" msgid="3424354860245608949">"​ຍາມ"</string>
+    <string name="spoken_emoji_1F483" msgid="3221113594843849083">"​ນັກ​ເຕັ້ນ"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"​ລິ​ບ​ສະ​ຕິກ"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"​ຢາ​ທາ​ເລັບ"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"​ນວດ​ໜ້າ"</string>
     <string name="spoken_emoji_1F487" msgid="1479113637259592150">"ຕັດ​ຜົມ"</string>
-    <!-- no translation found for spoken_emoji_1F488 (6922559285234100252) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F489 (8114863680950147305) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48A (8526843630145963032) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48B (2538528967897640292) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48C (1681173271652890232) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48D (8259886164999042373) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48E (8777981696011111101) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48F (741593675183677907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F490 (4482549128959806736) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F491 (2305245307882441500) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F492 (3884119934804475732) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F493 (1208828371565525121) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F494 (6198876398509338718) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F495 (9206202744967130919) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F496 (5436953041732207775) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F497 (7285142863951448473) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F498 (7940131245037575715) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F499 (4453235040265550009) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49A (6262178648366971405) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49B (8085384999750714368) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49C (453829540120898698) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49D (3460534750224161888) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49E (4490636226072523867) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49F (2059319756421226336) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A0 (1954850380550212038) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A1 (403137413540909021) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A2 (2604192053295622063) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A3 (6378351742957821735) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A4 (7217736258870346625) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A5 (5401995723541239858) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A6 (3837802182716483848) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A7 (5718438987757885141) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A8 (4472108229720006377) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A9 (1240958472788430032) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AA (8427525538635146416) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AB (5484114759939427459) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AC (5571196638219612682) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AD (353174619257798652) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AE (1223142786927162641) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AF (3526278354452138397) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B0 (4124102195175124156) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B1 (8339494003418572905) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B2 (3179159430187243132) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B3 (5375412518221759596) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B4 (1068592463669453204) -->
-    <skip />
+    <string name="spoken_emoji_1F488" msgid="6922559285234100252">"ເສົາ​ຮ້ານ​ຕັດ​ຜົມ"</string>
+    <string name="spoken_emoji_1F489" msgid="8114863680950147305">"​ເຂັມ​ສີດ​ຢາ"</string>
+    <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"​ຢາ​ເມັດ"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"​ຮອຍ​ຈູບ"</string>
+    <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"​ຈົດ​ໝາຍ​ຮັກ"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"​ແຫວນ"</string>
+    <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"​ຫິນ​ອັນ​ຍະ​ມະ​ນີ"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"ຈູບ"</string>
+    <string name="spoken_emoji_1F490" msgid="4482549128959806736">"​ຊໍ່​ດອກ​ໄມ້"</string>
+    <string name="spoken_emoji_1F491" msgid="2305245307882441500">"​ຄ​ູ່​ຮັກ​ກັບ​ຫົວ​ໃຈ"</string>
+    <string name="spoken_emoji_1F492" msgid="3884119934804475732">"ການ​ແຕ່ງດອງ"</string>
+    <string name="spoken_emoji_1F493" msgid="1208828371565525121">"​ຫົວ​ໃຈ​ເຕັ້ນ"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"​ອົກ​ຫັກ"</string>
+    <string name="spoken_emoji_1F495" msgid="9206202744967130919">"​ສອງ​ໃຈ"</string>
+    <string name="spoken_emoji_1F496" msgid="5436953041732207775">"​ຫົວ​ໃຈ​ເປັນ​ປະ​ກາຍ"</string>
+    <string name="spoken_emoji_1F497" msgid="7285142863951448473">"​ຫົວ​ໃຈ​ຂະ​ຫຍາຍ"</string>
+    <string name="spoken_emoji_1F498" msgid="7940131245037575715">"​ລູກ​ສອນ​ປັກ​ຫົວ​ໃຈ"</string>
+    <string name="spoken_emoji_1F499" msgid="4453235040265550009">"​ໃຈ​ສີ​ຟ້າ"</string>
+    <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"​ໃຈ​ສີ​ຂຽວ"</string>
+    <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"​ໃຈ​ສີ​ເຫຼືອງ"</string>
+    <string name="spoken_emoji_1F49C" msgid="453829540120898698">"​ໃຈ​ສີ​ມ່ວງ"</string>
+    <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"​ຫົວ​ໃຈ​ກັບ​ຣິບບອນ"</string>
+    <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"​ຫົວ​ໃຈ​ວົງ​ມົນ"</string>
+    <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"​ຕົກ​ແຕ່ງ​ຫົວ​ໃຈ"</string>
+    <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"​ຮູບ​ເພັດ​ມີ​ຈຸດ​ທາງ​ກາງ"</string>
+    <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"ຫຼອດ​ໄຟ"</string>
+    <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"​ສັນ​ຍາ​ລັກ​ໃຈ​ຮ້າຍ"</string>
+    <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"​ລະ​ເບີດ"</string>
+    <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"​ສັນ​ຍາ​ລັກ​ນອນຫຼັບ"</string>
+    <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"​ສັນ​ຍາ​ລັກ​ປະ​ທະ​ກັນ"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"​ສັນ​ຍາ​ລັກເຫື່ອ​ກະ​ຈາຍ"</string>
+    <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"​ຢົດ​ນ້ຳ"</string>
+    <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"​ສັນ​ຍາ​ລັກ​ແລ່ນ"</string>
+    <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"ກອງ​ອຸດ​ຈາ​ລະ"</string>
+    <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"ເບັ່ງ​ກ້າມ"</string>
+    <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"​ດາວ​ໝຸນ"</string>
+    <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"ບອນ​ລູນ​ຄຳ​ເວົ້າ"</string>
+    <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"​ບອນ​ລູນ​ຄວາມ​ຄິດ"</string>
+    <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"ດອກ​ໄມ້​ຂາວ"</string>
+    <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"​ສັນ​ຍາ​ລັກ​ຮ້ອຍ"</string>
+    <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"​ຖົງ​ເງິນ"</string>
+    <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"​ອັດ​ຕາ​ແລກ​ປ່ຽນ"</string>
+    <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"​ສັນ​ຍາ​ລັກ​ໂດ​ລ່າ​ແບບ​ໜາ"</string>
+    <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"ບັດເຄຣດິດ"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"​ທະ​ນະ​ບັດ​ເງິນ​ເຢນ"</string>
     <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"ທັນນະບັດ​ຮູບ​ເງິນ​ໂດລ່າ"</string>
-    <!-- no translation found for spoken_emoji_1F4B6 (8289249930736444837) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B7 (5245100496860739429) -->
-    <skip />
+    <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"​​ທະ​ນະ​ບັດ​ເງິນ​ຢູ​ໂຣ"</string>
+    <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"​ທະ​ນະ​ບັດ​ເງິນ​ພາວດ໌"</string>
     <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"ເງິນ​ຕິດ​ປີກ"</string>
-    <!-- no translation found for spoken_emoji_1F4B9 (647509393536679903) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BA (1269737854891046321) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BB (6252883563347816451) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BC (6182597732218446206) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BD (5820961044768829176) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BE (4754542485835379808) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BF (2237481756984721795) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C0 (491582501089694461) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C1 (6645461382494158111) -->
-    <skip />
+    <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"​ແຜນ​ວາດ​ຊີ້​ຂຶ້ນ​ມີ​ຮູບ​ເງິນ​ເຢນ"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"​ບ່ອນ​ນັ່ງ"</string>
+    <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"​ຄອມ​ພິວ​ເຕີ​ສ່ວນ​ບຸກ​ຄົນ"</string>
+    <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"​ກະ​ເປົາ​ເດີນ​ທາງ"</string>
+    <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"​ມິ​ນິ​ດິສ"</string>
+    <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"ຟລັອບ​ປີ້​ດິສ"</string>
+    <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"​ອັອບ​ຕິ​ຄອນ ດິ​ສ"</string>
+    <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"​ດີ​ວີ​ດີ"</string>
+    <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"​ໄຟລ໌​ໂຟນ​ເດີ"</string>
     <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"ເປີດ​ໂຟນເດີ​ໄຟລ໌"</string>
-    <!-- no translation found for spoken_emoji_1F4C3 (3727274466173970142) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C4 (4382570710795501612) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C5 (8693944622627762487) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C6 (8469908708708424640) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C7 (2665313547987324495) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C8 (8007686702282833600) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C9 (2271951411192893684) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CA (3525692829622381444) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CB (977639227554095521) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CC (156107396088741574) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CD (4266572175361190231) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CE (6294288509864968290) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CF (149679400831136810) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D0 (8130339336619202915) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D1 (5852176364856284968) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D2 (2276810154105920052) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D3 (5873386492793610808) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D4 (4754469936418776360) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D5 (4642713351802778905) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D6 (6987347918381807186) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D7 (7813394163241379223) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D8 (7189799718984979521) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D9 (3874664073186440225) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4DA (872212072924287762) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4DB (2015183603583392969) -->
-    <skip />
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"​ເຈ້ຍ​ມ້ວນ​ທາງ​ລຸ່ມ"</string>
+    <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"​ເຈ້ຍ​ຫງາຍ​ໜ້າ​ຂຶ້ນ"</string>
+    <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"ປະຕິທິນ"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"​ປະ​ຕ​ິ​ທິນ​ຖືກ​ຈີກ"</string>
+    <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"​ດັດ​ຊະ​ນີ​ບັດ"</string>
+    <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"ແຜນ​ວາດ​ຊີ້​ຂຶ້ນ"</string>
+    <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"​ແຜນ​ວາດ​ຊີ້​ລົງ"</string>
+    <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"​ແຜນ​ວາດ​​ແບບບາ"</string>
+    <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"​ຄລິບບອດ"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"​ເຂັມ​ມຸດ"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"​ເຂັມ​ມຸດ​ຫົວ​ມົນ"</string>
+    <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"ອັນ​ໜີບ​ເຈ້ຍ"</string>
+    <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"​​ໄມ້ບັນ​ທັດ"</string>
+    <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"​ໄມ້​ບັດ​ທັດ​ສາມຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"​ແຖບ​ບຸກ​ມາກ"</string>
+    <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"ປຶ້ມ​ບັນ​ຊີ"</string>
+    <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"ສະມຸດບັນທຶກ"</string>
+    <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"ສະ​ມຸດ​ບັນ​ທຶກ​ແບບ​ມີ​ປົກ​ຕົບ​ແຕ່ງ"</string>
+    <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"​ປຶ້ມ​ທີ່​ປິດ​ໄວ້"</string>
+    <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"​ປຶ້ມ​ທີ່​ເປີດ​ໄວ້"</string>
+    <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"​ປຶ້ມ​ຂຽວ"</string>
+    <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"​ປຶ້ມ​ຟ້າ"</string>
+    <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"​ປຶ້ມ​ສົ້ມ"</string>
+    <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"ປຶ້ມ"</string>
+    <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"​ປ້າຍ​ຊື່"</string>
     <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"ເລື່ອນ"</string>
-    <!-- no translation found for spoken_emoji_1F4DD (2494006707147586786) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4DE (7883008605002117671) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4DF (3538610110623780465) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E0 (2960778342609543077) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E1 (6269733703719242108) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E2 (1987535386302883116) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E3 (5588916572878599224) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E4 (2063561529097749707) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E5 (3232462702926143576) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E6 (3399454337197561635) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E7 (5557136988503873238) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E8 (30698793974124123) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E9 (5947550337678643166) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EA (772614045207213751) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EB (6491414165464146137) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EC (7369517138779988438) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4ED (5657520436285454241) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EE (8464138906243608614) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EF (8801427577198798226) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F0 (6330208624731662525) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F1 (3966503935581675695) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F2 (1057540341746100087) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F3 (5003984447315754658) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F4 (5549847566968306253) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F5 (3660199448671699238) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F6 (2676974903233268860) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F7 (2643891943105989039) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F9 (4475626303058218048) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4FA (1079796186652960775) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4FB (3848729587403760645) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4FC (8370432508874310054) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F500 (2389947994502144547) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F501 (2132188352433347009) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F502 (2361976580513178391) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F503 (8936283551917858793) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F504 (708290317843535943) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F505 (6348909939004951860) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F506 (4449609297521280173) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F507 (7136386694923708448) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F508 (5063567689831527865) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F509 (3948050077992370791) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50A (5818194948677277197) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50B (8083470451266295876) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50C (7793219132036431680) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50D (8140244710637926780) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50E (4751821352839693365) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50F (915079280472199605) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F510 (7658381761691758318) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F511 (262319867774655688) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F512 (5628688337255115175) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F513 (8579201846619420981) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F514 (7027268683047322521) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F515 (8903179856036069242) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F516 (108097933937925381) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F517 (2450846665734313397) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F518 (7028220286841437832) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F519 (8211189165075445687) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51A (823966751787338892) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51B (5920570742107943382) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51C (110609810659826676) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51D (4087697222026095447) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51E (8512873526157201775) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51F (8673370823728653973) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F520 (7335109890337048900) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F521 (2693185864450925778) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F522 (8419130286280673347) -->
-    <skip />
+    <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"​ບັນ​ທຶກ"</string>
+    <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"​ຫູ​ໂທ​ລະ​ສັບ"</string>
+    <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"ເພກເຈີ"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"​ເຄື່ອງ​ແຟັກ"</string>
+    <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"ຈານ​ດາວ​ທຽມ"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"​ໂທ​ລະ​ໂຄ່ງ"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"ໂທ​ລະ​ໂຂ່ງ"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"ຖາດ​ຂາ​ອອກ"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"​ຖາດ​ຂາ​ເຂົ້າ"</string>
+    <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"ພັດສະດຸ"</string>
+    <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"​ສັນ​ຍາ​ລັກ​ອີ​ເມວ"</string>
+    <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"ຈົດ​ໝາຍ​ເຂົ້າ"</string>
+    <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"​ຈົດ​ໝາຍ​ມີ​ລູກ​ສອນ​ຢູ່​ທາງ​ເທິງ"</string>
+    <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"ກ່ອງ​ຈົດ​ໝາຍ​ປິດ​ໄວ້ມີ​ທຸງ​ທາງ​ລຸ່ມ"</string>
+    <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"​ກ່ອງ​ຈົດ​ໝາຍ​ປິດ​ໄວ້​ມີ​ທຸງ​ສະ​ບັດ"</string>
+    <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"​ກ່ອງ​ຈົດ​ໝາຍ​​ເປິດ​ໄວ້​ມີ​ທຸງ​ສະ​ບັດ"</string>
+    <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"ກ່ອງ​ຈົດ​ໝາຍ​ເປິດ​ໄວ້ມີ​ທຸງ​ທາງ​ລຸ່ມ"</string>
+    <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"ຕູ້​ໄປ​ສະ​ນີ"</string>
+    <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"ແຕ​ໄປ​ສະ​ນີ"</string>
+    <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"​ໜັງ​ສື​ພິມ"</string>
+    <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"​ໂທ​ລະ​ສັບ​​ມື​ຖື"</string>
+    <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"ໂທ​ລະ​ສັບ​ມື​ຖື​ມີ​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຂວາ​ຢູ່​ທາງ​ຊ້າຍ"</string>
+    <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"​ໂໝດ​ສັ່ນ"</string>
+    <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"​ໂທ​ລະ​ສັບ​ມື​ຖື​ປິດ"</string>
+    <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"ບໍ່​ມີ​ໂທ​ລະ​ສັບ​ມື​ຖື"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"ຂີດ​ສັນ​ຍານ​ໂທ​ລະ​ສັບ"</string>
+    <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"ກ້ອງຖ່າຍຮູບ"</string>
+    <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"ກ້ອງວິ​ດີ​ໂອ"</string>
+    <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"​ໂທ​ລະ​ພາບ"</string>
+    <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"ວິທະຍຸ"</string>
+    <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"​ກະ​ແຊັດ​ວິ​ດີ​ໂອ"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"ລູກ​ສອນ​ໄຂວ່​ກັນ"</string>
+    <string name="spoken_emoji_1F501" msgid="2132188352433347009">"ລູກ​ສອນ​ໝຸນ​ວົນ​​ຕາມ​ເຂັມ​ໂມງ"</string>
+    <string name="spoken_emoji_1F502" msgid="2361976580513178391">"ລູກ​ສອນ​ໝຸນ​ຕາມ​ເຂັມ​ໂມງ​ມີ​ເລກ​ສູນ​ໃນ​ວົງ​ມົນ​ຢູ່​ຊ້າຍ​ລຸ່ມ"</string>
+    <string name="spoken_emoji_1F503" msgid="8936283551917858793">"ລູກ​ສອນ​ໝຸນ​ຕາມ​ເຂັມ​ໂມງ​ລວງ​ຕັ້ງ"</string>
+    <string name="spoken_emoji_1F504" msgid="708290317843535943">"​ລູກ​ສອນ​ໝຸນ​ທວນ​ເຂັມ​ໂມງ​ໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F505" msgid="6348909939004951860">"ສັນ​ຍາ​ລັກ​ຄວາມ​ແຈ້ງ​ຕ່ຳ"</string>
+    <string name="spoken_emoji_1F506" msgid="4449609297521280173">"ສັນ​ຍາ​ລັກ​ຄວາມ​ແຈ້ງ​​ສູງ"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"ລຳ​ໂພງ​ມີ​ຂີດ​ຂ້າ"</string>
+    <string name="spoken_emoji_1F508" msgid="5063567689831527865">"ລຳໂພງ"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"ລຳ​ໂພງ​ມີ​ຄື້ນ​ສຽງ​ອັນ​ນຶ່ງ"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"ລຳ​ໂພງ​ມີ​ຄື້ນ​ສຽງ​​ສາມ​ອັນ"</string>
+    <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"ແບັດເຕີຣີ"</string>
+    <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"​​ປລັກ​ໄຟ​ຟ້າ"</string>
+    <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"ແວ່ນ​ຂະ​ຫຍາຍ​ສ່ອງ​ໄປ​ທາງ​ຊ້າຍ"</string>
+    <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"ແວ່ນ​ຂະ​ຫຍາຍ​ສ່ອງ​ໄປ​ທາງ​ຂວາ"</string>
+    <string name="spoken_emoji_1F50F" msgid="915079280472199605">"​ລັອກ​ມີ​ປາກ​ກາ"</string>
+    <string name="spoken_emoji_1F510" msgid="7658381761691758318">"ລັອກ​ທີ່​ປິດ​ໄວ້​ພ້ອມ​ກະ​ແຈ"</string>
+    <string name="spoken_emoji_1F511" msgid="262319867774655688">"​ກະ​ແຈ"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"ລັອກ"</string>
+    <string name="spoken_emoji_1F513" msgid="8579201846619420981">"​​ລັອກ​ທີ່​ເປີດ​ໄວ້"</string>
+    <string name="spoken_emoji_1F514" msgid="7027268683047322521">"​ກະ​ດິ່ງ"</string>
+    <string name="spoken_emoji_1F515" msgid="8903179856036069242">"​ກະ​ດິ່ງ​ມີ​ຂີດ​ຂ້າ"</string>
+    <string name="spoken_emoji_1F516" msgid="108097933937925381">"ບຸກມາກ"</string>
+    <string name="spoken_emoji_1F517" msgid="2450846665734313397">"​ສັນ​ຍາ​ລັກ​ລິ້ງ"</string>
+    <string name="spoken_emoji_1F518" msgid="7028220286841437832">"​ປຸ່ມ​ເຄື່ອງ​ໝາຍ​ເລືອກ"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຊ້າຍ​ມີ​ຄຳ​ວ່າ​ Back"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຊ້າຍ​ມີ​ຄຳ​ວ່າ​ End"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"ຄຳ​ວ່າ On ມີ​ເຄື່ອງ​ໝາຍ​ທ​້ວງ​ກັບ​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຊ້າຍ​ແລະ​ຂວາ​ຢູ່​ເທິງ"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"​ຄຳ​ວ່າ Soon ມີ​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຂວາ​ຢູ່​ເທິງ"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"​ຄຳ​ວ່າ Top ມີ​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ເທິງ​ຢູ່​ເທິງ"</string>
+    <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"ສັນ​ຍາ​ລັກ​ຫ້າມ​ຕ່ຳ​ກວ່າ​ສິບ​ແປດ"</string>
+    <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"ເລກ​ສິບ​ໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F520" msgid="7335109890337048900">"ABCD ໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F521" msgid="2693185864450925778">"abcd ໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F522" msgid="8419130286280673347">"ໂຕ​ເລກໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
     <string name="spoken_emoji_1F523" msgid="3318053476401719421">"ໃສ່​ສັນຍາລັກ​ເພື່ອ​ສັນຍາລັກ"</string>
-    <!-- no translation found for spoken_emoji_1F524 (1625073997522316331) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F525 (4083884189172963790) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F526 (2035494936742643580) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F527 (134257142354034271) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F528 (700627429570609375) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F529 (7480548235904988573) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52A (7613580031502317893) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52B (4554906608328118613) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52C (1330294501371770790) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52D (7549551775445177140) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52E (4457099417872625141) -->
-    <skip />
+    <string name="spoken_emoji_1F524" msgid="1625073997522316331">"ໂຕ​ອັກ​ສອນ​ລາ​ຕິນໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+    <string name="spoken_emoji_1F525" msgid="4083884189172963790">"ໄຟ"</string>
+    <string name="spoken_emoji_1F526" msgid="2035494936742643580">"​ໄຟ​ສາຍ"</string>
+    <string name="spoken_emoji_1F527" msgid="134257142354034271">"​ປະ​ແຈ"</string>
+    <string name="spoken_emoji_1F528" msgid="700627429570609375">"​ຄ້ອນ"</string>
+    <string name="spoken_emoji_1F529" msgid="7480548235904988573">"ນັອດ"</string>
+    <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"ມີດ"</string>
+    <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"​ປືນ​ສັ້ນ"</string>
+    <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"​ກ້ອງ​ຈຸ​ລະ​ທັດ"</string>
+    <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"​ກ້ອງ​ສ​່ອງ"</string>
+    <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"ບານ​ຄ​ຣິສ​ຕັນ"</string>
     <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"ດາວ​ຫົກ​ຫຼ່ຽມ​ມີ​ຈ້ຳ​ທາງ​ກາງ"</string>
-    <!-- no translation found for spoken_emoji_1F530 (3572898444281774023) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F531 (5225633376450025396) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F532 (9169568490485180779) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F533 (6554193837201918598) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F534 (8339298801331865340) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F535 (1227403104835533512) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F536 (5477372445510469331) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F537 (3158915214347274626) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F538 (4300084249474451991) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F539 (6535159756325742275) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F53A (3728196273988781389) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F53B (7182097039614128707) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F53C (4077022046319615029) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F53D (3939112784894620713) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F550 (7761392621689986218) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F551 (2699448504113431716) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F552 (5872107867411853750) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F553 (8490966286158640743) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F554 (7662585417832909280) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F555 (5564698204520412009) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F556 (7325712194836512205) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F557 (4398343183682848693) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F558 (3110507820404018172) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F559 (2972160366448337839) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55A (5568112876681714834) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55B (6731739890330659276) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55C (7838853679879115890) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55D (3518832144255922544) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55E (3092760695634993002) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55F (2326720311892906763) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F560 (5771339179963924448) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F561 (3139944777062475382) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F562 (8273944611162457084) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F563 (8643976903718136299) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F564 (3511070239796141638) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F565 (4567451985272963088) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F566 (2790552288169929810) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F567 (9026037362100689337) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FB (9037503671676124015) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FC (1409415995817242150) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FD (2562726956654429582) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FE (1184469756905210580) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FF (6003594799354942297) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F600 (7601109464776835283) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F601 (746026523967444503) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F602 (8354558091785198246) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F603 (3861022912544159823) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F604 (5119021072966343531) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F605 (6140813923973561735) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F606 (3549936813966832799) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F607 (2826424078212384817) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F608 (7343559595089811640) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F609 (5481030187207504405) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60A (5023337769148679767) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60B (3005248217216195694) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60C (349384012958268496) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60D (7921853137164938391) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60E (441718886380605643) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60F (2674453144890180538) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F610 (3225675825334102369) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F611 (7199179827619679668) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F612 (985081329745137998) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F613 (5548607684830303562) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F614 (3196305665259916390) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F615 (3051674239303969101) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F616 (8124887056243813089) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F617 (7052733625511122870) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F618 (408207170572303753) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F619 (8645430335143153645) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61A (2882157190974340247) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61B (3765927202787211499) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61C (198943912107589389) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61D (7643546385877816182) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61E (1528732952202098364) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61F (1853664164636082404) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F620 (6051942001307375830) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F621 (2114711878097257704) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F622 (29291014645931822) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F623 (7803959833595184773) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F624 (8637637647725752799) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F625 (6153625183493635030) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F626 (6179485689935562950) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F627 (8566204052903012809) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F628 (8875777401624904224) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F629 (1411538490319190118) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62A (4726686726690289969) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62B (3221980473921623613) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62C (4616356691941225182) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62D (4283677508698812232) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62E (726083405284353894) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62F (7746620088234710962) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F630 (3298804852155581163) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F631 (1603391150954646779) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F632 (4846193232203976013) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F633 (4023593836629700443) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F634 (3155265083246248129) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F635 (4616691133452764482) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F636 (947000211822375683) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F637 (1269551267347165774) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F638 (3410766467496872301) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F639 (1833417519781022031) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63A (8566294484007152613) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63B (74417995938927571) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63C (6472812005729468870) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63D (1638398369553349509) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63E (6788969063020278986) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63F (1207234562459550185) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F640 (6023054549904329638) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F645 (5202090629227587076) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F646 (6734425134415138134) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F647 (1090285518444205483) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F648 (8978535230610522356) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F649 (8486145279809495102) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F64A (1237524974033228660) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F64B (4251150782016370475) -->
-    <skip />
+    <string name="spoken_emoji_1F530" msgid="3572898444281774023">"ສັນ​ຍາ​ລັກ​ພາ​ສາ​ຍີ່​ປຸ່ນ​ສຳ​ລັບ​ຜູ່​ເລີ່ມ​ຕົ້ນ"</string>
+    <string name="spoken_emoji_1F531" msgid="5225633376450025396">"ສັນ​ຍາ​ລັກ​ສາມ​ງ່າມ"</string>
+    <string name="spoken_emoji_1F532" msgid="9169568490485180779">"ປຸ່ມ​ສີ່ຫຼ່ຽມ​ສີ​ດຳ"</string>
+    <string name="spoken_emoji_1F533" msgid="6554193837201918598">"ປຸ່ມ​ສີ່ຫຼ່ຽມ​ສີ​​ຂາວ"</string>
+    <string name="spoken_emoji_1F534" msgid="8339298801331865340">"​ວົງ​ມົນ​​ໃຫຍ່ສີ​ແດງ"</string>
+    <string name="spoken_emoji_1F535" msgid="1227403104835533512">"​ວົງ​ມົນ​​ໃຫຍ່ສີ​​ຟ້າ"</string>
+    <string name="spoken_emoji_1F536" msgid="5477372445510469331">"ເພັດ​ເມັດ​ໃຫຍ່​ສີ​ສົ້ມ"</string>
+    <string name="spoken_emoji_1F537" msgid="3158915214347274626">"ເພັດ​ເມັດ​ໃຫຍ່​ສີ​​ຟ້າ"</string>
+    <string name="spoken_emoji_1F538" msgid="4300084249474451991">"ເພັດ​ເມັດ​ນ້ອຍ​ສີ​ສົ້ມ"</string>
+    <string name="spoken_emoji_1F539" msgid="6535159756325742275">"ເພັດ​ເມັດ​ນ້ອຍ​ສີ​​ຟ້າ"</string>
+    <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"ສາມຫຼ່ຽມ​ສີ​ແດງ​ຊີ​ຂຶ້ນ"</string>
+    <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"ສາມຫຼ່ຽມ​ສີ​ແດງ​ຊີ​​ລົງ"</string>
+    <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"ສາມຫຼ່ຽມ​ນ້ອຍສີ​ແດງ​ຊີ​ຂຶ້ນ"</string>
+    <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"ສາມຫຼ່ຽມ​ນ້ອຍສີ​ແດງ​ຊີ​ລົງ"</string>
+    <string name="spoken_emoji_1F550" msgid="7761392621689986218">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​ນຶ່ງ​ໂມງ"</string>
+    <string name="spoken_emoji_1F551" msgid="2699448504113431716">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສອງໂມງ"</string>
+    <string name="spoken_emoji_1F552" msgid="5872107867411853750">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສາມໂມງ"</string>
+    <string name="spoken_emoji_1F553" msgid="8490966286158640743">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສີ່ໂມງ"</string>
+    <string name="spoken_emoji_1F554" msgid="7662585417832909280">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ຫ້າໂມງ"</string>
+    <string name="spoken_emoji_1F555" msgid="5564698204520412009">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ຫົກໂມງ"</string>
+    <string name="spoken_emoji_1F556" msgid="7325712194836512205">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ເຈັດໂມງ"</string>
+    <string name="spoken_emoji_1F557" msgid="4398343183682848693">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ແປດໂມງ"</string>
+    <string name="spoken_emoji_1F558" msgid="3110507820404018172">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ເກົ້າໂມງ"</string>
+    <string name="spoken_emoji_1F559" msgid="2972160366448337839">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບໂມງ"</string>
+    <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບ​ເອັດໂມງ"</string>
+    <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບ​ສອງໂມງ"</string>
+    <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​ນຶ່ງ​ໂມງ​​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສອງ​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສາມ​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສີ່​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F560" msgid="5771339179963924448">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ຫ້າ​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F561" msgid="3139944777062475382">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ຫົກ​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F562" msgid="8273944611162457084">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ເຈັດ​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F563" msgid="8643976903718136299">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ແປດ​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F564" msgid="3511070239796141638">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​​ເກົ້​າໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F565" msgid="4567451985272963088">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​ສິບ​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F566" msgid="2790552288169929810">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບ​ເອັດ​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F567" msgid="9026037362100689337">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບ​ສອງ​ໂມງ​ເຄິ່ງ"</string>
+    <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"​ພູ​ເຂົາ​ໄຟ​ຟູ​ຈິ"</string>
+    <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"​ຫໍ​ຄອຍ​ໂຕ​ກຽວ"</string>
+    <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"​ເທ​ພີ​ເສ​ລີ​ພາບ"</string>
+    <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"ເງົາ​ປະ​ເທດ​ຍີ່​ປຸ່ນ"</string>
+    <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"ໂມ​ອາຍ"</string>
+    <string name="spoken_emoji_1F600" msgid="7601109464776835283">"ໜ້າ​ຍິ້ມ​ເຫັນ​ແຂ້ວ"</string>
+    <string name="spoken_emoji_1F601" msgid="746026523967444503">"ໜ້າ​ຕາຍິ້ມ​ເຫັນ​ແຂ້ວ"</string>
+    <string name="spoken_emoji_1F602" msgid="8354558091785198246">"ໜ້າ​ພ້ອມດ້ວຍ​ນ້ຳ​ຕາ​ແຫ່ງ​ຄວາມ​ສຸກ"</string>
+    <string name="spoken_emoji_1F603" msgid="3861022912544159823">"​ໜ້າ​ຍິ້ມ​ພ້ອມ​ກັບ​ອ້າ​ປາກ"</string>
+    <string name="spoken_emoji_1F604" msgid="5119021072966343531">"​ໜ້າ​ຕາຍິ້ມ​ພ້ອມ​ກັບ​ອ້າ​ປາກ"</string>
+    <string name="spoken_emoji_1F605" msgid="6140813923973561735">"​ໜ້າ​ຕາຍິ້ມ​ພ້ອມ​ກັບ​ເຫື່ອ​ຕົກ"</string>
+    <string name="spoken_emoji_1F606" msgid="3549936813966832799">"​ໜ້າ​ຕາຍິ້ມ​ພ້ອມ​ກັບ​​ຫຼັບ​ຕາ"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"ໜ້າ​ຍິ້ມ​ພ້ອມ​ມີ​ວົງ​ແຫວນ​ເທິງ​ຫົວ"</string>
+    <string name="spoken_emoji_1F608" msgid="7343559595089811640">"ໜ້າ​ຍິ້ມ​ມີ​ເຂົາ"</string>
+    <string name="spoken_emoji_1F609" msgid="5481030187207504405">"ໜ້າ​ຍິ້ມ​ກະ​ພິບ​ຕາ​ຂ້າງ​ນຶ່ງ"</string>
+    <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"ໜ້າ​ຕາ​ຍິ້ມ​ແຍ້ມ"</string>
+    <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"​ໜ້າ​ຍິ້ມ​ລິ້ນ​ເລຍ​ສົບ"</string>
+    <string name="spoken_emoji_1F60C" msgid="349384012958268496">"​ໜ້າ​ຜ່ອນ​ຄາຍ"</string>
+    <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"ໜ້າ​ຍິ້ມ​ພ້ອມ​ຕາ​ເປັນ​ຫົວ​ໃຈ"</string>
+    <string name="spoken_emoji_1F60E" msgid="441718886380605643">"​ໜ້າ​ຍິ້ມ​ໃສ່​ແວ່ນ​ຕາ"</string>
+    <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"ໜ້າຍິ້ມ​​ມີ​ເລດ​ສະ​ໄນ"</string>
+    <string name="spoken_emoji_1F610" msgid="3225675825334102369">"​ໜ້າ​​ຊື່ໆ"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"ໜ້າບໍ່​ມີ​ຄວາມ​ຮູ້​ສຶກ"</string>
+    <string name="spoken_emoji_1F612" msgid="985081329745137998">"ໜ້າບໍ່​​ຕະ​ຫລົກ"</string>
+    <string name="spoken_emoji_1F613" msgid="5548607684830303562">"ໜ້າ​ມີ​ເຫື່ອ​ໄຫຼ"</string>
+    <string name="spoken_emoji_1F614" msgid="3196305665259916390">"ໜ້າ​ໝົ່ນ​ໝອງ"</string>
+    <string name="spoken_emoji_1F615" msgid="3051674239303969101">"​ໜ້າ​ສັບ​ສົນ"</string>
+    <string name="spoken_emoji_1F616" msgid="8124887056243813089">"​ໜ້າ​ຜູ່​ຮ້າຍ"</string>
+    <string name="spoken_emoji_1F617" msgid="7052733625511122870">"​ໜ້າ​ຈູບ"</string>
+    <string name="spoken_emoji_1F618" msgid="408207170572303753">"ໜ້າ​ເປົ່າ​ຈູບ"</string>
+    <string name="spoken_emoji_1F619" msgid="8645430335143153645">"​ໜ້າ​ຈູບ​ພ້ອມ​ກັບ​ຍິ້ມ"</string>
+    <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"ໜ້າ​ຍິ້ມ​ພ້ອມ​ກັບຫຼັບ​ຕາ"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"ໜ້າ​​ແລບ​ລິ້ນ"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"ໜ້າ​ແລບ​ລິ້ນຫຼັບ​ຕາ​ຂ້າງ​ນຶ່ງ"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"ໜ້າ​ແລບ​ລິ້ນ​ຫຼັບ​ຕາ​ສອງ​ຂ້າງ"</string>
+    <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"​ໜ້າ​ຜິດ​ຫວັງ"</string>
+    <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"​ໜ້າ​ເປັນ​ກັງ​ວົນ"</string>
+    <string name="spoken_emoji_1F620" msgid="6051942001307375830">"​​ໜ້າ​ໃຈ​ຮ້າຍ"</string>
+    <string name="spoken_emoji_1F621" msgid="2114711878097257704">"ໜ້າ​ມຸ້ຍ"</string>
+    <string name="spoken_emoji_1F622" msgid="29291014645931822">"​ໜ້າ​ຮ້ອງ​ໄຫ້"</string>
+    <string name="spoken_emoji_1F623" msgid="7803959833595184773">"ໜ້າ​ຂະ​ໝວດ"</string>
+    <string name="spoken_emoji_1F624" msgid="8637637647725752799">"ໜ້າ​ໃຈ​ຮ້າຍ​ລົມ​ອອກ​ດັງ"</string>
+    <string name="spoken_emoji_1F625" msgid="6153625183493635030">"ໜ້າ​ຜິດ​ຫວັງ​ແຕ່​​ໂລ່ງ​ໃຈ"</string>
+    <string name="spoken_emoji_1F626" msgid="6179485689935562950">"ໜ້າ​ມຸ້ຍ​ອ້າ​ປາກ"</string>
+    <string name="spoken_emoji_1F627" msgid="8566204052903012809">"ໜ້າ​ເຈັບ​ປວດ"</string>
+    <string name="spoken_emoji_1F628" msgid="8875777401624904224">"​ໜ້າ​ຢ້ານ"</string>
+    <string name="spoken_emoji_1F629" msgid="1411538490319190118">"ໜ້າ​​ເມື່ອຍ​ສຸດ​ຂີດ"</string>
+    <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"​​ໜ້າ​ເຫງົາ​ນອນ"</string>
+    <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"​ໜ້າ​ເມື່ອຍ"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"ໜ້າ​ຍິ້ມ​ແຫ້ງໆ"</string>
+    <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"​ໜ້າ​ຮ້ອງ​ໄຫ້​ສຽງ​ດັງ"</string>
+    <string name="spoken_emoji_1F62E" msgid="726083405284353894">"​ໜ້າ​ອ້າ​ປາກ"</string>
+    <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"ໜ້າ​ຕະ​ລຶງ​ງຽບ"</string>
+    <string name="spoken_emoji_1F630" msgid="3298804852155581163">"ໜ້າ​ອ້າ​ປາກ​ມີ​ເຫື່ອ​ຕົກ"</string>
+    <string name="spoken_emoji_1F631" msgid="1603391150954646779">"ໜ້າ​ຮ້ອງ​​ດ້ວຍ​ຄວາມ​ຢ້ານ"</string>
+    <string name="spoken_emoji_1F632" msgid="4846193232203976013">"ໜ້າ​ປະຫຼາດ​ໃຈ"</string>
+    <string name="spoken_emoji_1F633" msgid="4023593836629700443">"ໜ້າ​ແດງ"</string>
+    <string name="spoken_emoji_1F634" msgid="3155265083246248129">"​ໜ້າ​ເຫງົາ​ນອນ"</string>
+    <string name="spoken_emoji_1F635" msgid="4616691133452764482">"ໜ້າ​ວິງວຽນ"</string>
+    <string name="spoken_emoji_1F636" msgid="947000211822375683">"​ໜ້າບໍ່​ມີ​ປາກ"</string>
+    <string name="spoken_emoji_1F637" msgid="1269551267347165774">"​ໜ້າ​ໃສ່​ຜ້າ​ປິດ​ປາກ"</string>
+    <string name="spoken_emoji_1F638" msgid="3410766467496872301">"​ໜ້າແມວ​ຍິ້ມ"</string>
+    <string name="spoken_emoji_1F639" msgid="1833417519781022031">"​ໜ້າ​ແມວ​ຍິ້ມ​ພ້ອມ​ນ້ຳ​ຕາ​ແຫ່ງ​ຄວາມ​ສຸກ"</string>
+    <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"​ໜ້າ​ແມວ​ຍິ້ມ​ພ້ອມ​ກັບ​ອ້າ​ປາກ"</string>
+    <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Smiling cat face with heart-shaped eyes"</string>
+    <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Cat face with wry smile"</string>
+    <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Kissing cat face with closed eyes"</string>
+    <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Pouting cat face"</string>
+    <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Crying cat face"</string>
+    <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Weary cat face"</string>
+    <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Face with no good gesture"</string>
+    <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Face with ok gesture"</string>
+    <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Person bowing deeply"</string>
+    <string name="spoken_emoji_1F648" msgid="8978535230610522356">"See-no-evil monkey"</string>
+    <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Hear-no-evil monkey"</string>
+    <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Speak-no-evil monkey"</string>
+    <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Happy person raising one hand"</string>
     <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"ຄົນ​ຍົກ​ມື​ຂຶ້ນ​ສະ​ຫຼອງ"</string>
-    <!-- no translation found for spoken_emoji_1F64D (4646485595309482342) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F64E (3376579939836656097) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F64F (1044439574356230711) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F680 (513263736012689059) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F681 (9201341783850525339) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F682 (8046933583867498698) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F683 (8772750354339223092) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F684 (346396777356203608) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F685 (1237059817190832730) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F686 (3525197227223620343) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F687 (5110143437960392837) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F688 (4702085029871797965) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F689 (2375851019798817094) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68A (6368370859718717198) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68B (2920160427117436633) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68C (1061520934758810864) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68D (2890059031360969304) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68E (6234042976027309654) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68F (5871099334672012107) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F690 (8080964620200195262) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F691 (999173032408730501) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F692 (1712863785341849487) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F693 (7987109037389768934) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F694 (6061658916653884608) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F695 (6913445460364247283) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F696 (6391604457418285404) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F697 (7978399334396733790) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F698 (7006050861129732018) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F699 (630317052666590607) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F69A (4739797891735823577) -->
-    <skip />
+    <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Person frowning"</string>
+    <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Person with pouting face"</string>
+    <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Person with folded hands"</string>
+    <string name="spoken_emoji_1F680" msgid="513263736012689059">"Rocket"</string>
+    <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Helicopter"</string>
+    <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Steam locomotive"</string>
+    <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Railway car"</string>
+    <string name="spoken_emoji_1F684" msgid="346396777356203608">"High-speed train"</string>
+    <string name="spoken_emoji_1F685" msgid="1237059817190832730">"High-speed train with bullet nose"</string>
+    <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Train"</string>
+    <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metro"</string>
+    <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Light rail"</string>
+    <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Station"</string>
+    <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Tram"</string>
+    <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Tram car"</string>
+    <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Bus"</string>
+    <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Oncoming bus"</string>
+    <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Trolleybus"</string>
+    <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Bus stop"</string>
+    <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Minibus"</string>
+    <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulance"</string>
+    <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Fire engine"</string>
+    <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Police car"</string>
+    <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Oncoming police car"</string>
+    <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Taxi"</string>
+    <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Oncoming taxi"</string>
+    <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Automobile"</string>
+    <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Oncoming automobile"</string>
+    <string name="spoken_emoji_1F699" msgid="630317052666590607">"Recreational vehicle"</string>
+    <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Delivery truck"</string>
     <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"ລົດ​ບັນ​ທຸກ​ພ່ວງ"</string>
-    <!-- no translation found for spoken_emoji_1F69C (5557395610750818161) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F69D (5467164189942951047) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F69E (169238196389832234) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F69F (7508128757012845102) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A0 (8733056213790160147) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A1 (4666516337749347253) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A2 (4511220588943129583) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A3 (8412962252222205387) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A4 (8867571300266339211) -->
-    <skip />
+    <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Tractor"</string>
+    <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Monorail"</string>
+    <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Mountain railway"</string>
+    <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Suspension railway"</string>
+    <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Mountain cableway"</string>
+    <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Aerial tramway"</string>
+    <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Ship"</string>
+    <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Rowboat"</string>
+    <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Speedboat"</string>
     <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"ໄຟ​ສັນຍານ​ຈະລາຈອນ​ລວງ​ນອນ"</string>
-    <!-- no translation found for spoken_emoji_1F6A6 (485575967773793454) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A7 (6411048933816976794) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A8 (6345717218374788364) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A9 (6586380356807600412) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6AA (8954448167261738885) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6AB (5313946262888343544) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6AC (6946858177965948288) -->
-    <skip />
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Vertical traffic light"</string>
+    <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Construction sign"</string>
+    <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Police cars revolving light"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Triangular flag on post"</string>
+    <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Door"</string>
+    <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"No entry sign"</string>
+    <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Smoking symbol"</string>
     <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"ສັນຍາລັກ​ຫ້າມ​ສູບຢາ"</string>
-    <!-- no translation found for spoken_emoji_1F6AE (1062469925352817189) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6AF (2286668056123642208) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B0 (179424763882990952) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B1 (5585212805429161877) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B2 (1771885082068421875) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B3 (8033779581263314408) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B4 (1999538449018476947) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B5 (340846352660993117) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B6 (4351024386495098336) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B7 (4564800655866838802) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B8 (3020531906940267349) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B9 (1207095844125041251) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BA (2346879310071017531) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BB (2370172469642078526) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BC (5558827593563530851) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BD (9213590243049835957) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BE (394016533781742491) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BF (906336365928291207) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C0 (4592099854378821599) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C1 (2845056048320031158) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C2 (8117262514698011877) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C3 (1176342001834630675) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C4 (1477622834179978886) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C5 (2495834050856617451) -->
-    <skip />
+    <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Put litter in its place symbol"</string>
+    <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Do not litter symbol"</string>
+    <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Potable water symbol"</string>
+    <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Non-potable water symbol"</string>
+    <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Bicycle"</string>
+    <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"No bicycles"</string>
+    <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Bicyclist"</string>
+    <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Mountain bicyclist"</string>
+    <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Pedestrian"</string>
+    <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"No pedestrians"</string>
+    <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Children crossing"</string>
+    <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Mens symbol"</string>
+    <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Womens symbol"</string>
+    <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Restroom"</string>
+    <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Baby symbol"</string>
+    <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Toilet"</string>
+    <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"Water closet"</string>
+    <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Shower"</string>
+    <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Bath"</string>
+    <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Bathtub"</string>
+    <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Passport control"</string>
+    <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Customs"</string>
+    <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Baggage claim"</string>
+    <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Left luggage"</string>
 </resources>
diff --git a/java/res/values-lo-rLA/strings-talkback-descriptions.xml b/java/res/values-lo-rLA/strings-talkback-descriptions.xml
index 4b9294c..9d07735 100644
--- a/java/res/values-lo-rLA/strings-talkback-descriptions.xml
+++ b/java/res/values-lo-rLA/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ສະຖານທີ່"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"ສັນຍາລັກ"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"​ອີ​ໂມ​ຕິ​ຄອນ"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-lo-rLA/strings.xml b/java/res/values-lo-rLA/strings.xml
index 76fe5e0..9d012b6 100644
--- a/java/res/values-lo-rLA/strings.xml
+++ b/java/res/values-lo-rLA/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"ຕົວເລືອກການປ້ອນຂໍ້ມູນ"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Research Log Commands"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"ເບິ່ງທີ່ຊື່ຂອງລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"ໂຕຊ່ວຍສະກົດໃຊ້ຂໍ້ມູນຈາກລາຍການຂອງລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານ"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"ສັ່ນເຕືອນເມື່ອພິມ"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"ພາສາການປ້ອນຂໍ້ມູນ"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"ກົດອີກຄັ້ງເພື່ອບັນທຶກ"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"ມີວັດຈະນານຸກົມ"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"ເປີດນຳໃຊ້ຄຳຕິຊົມຈາກຜູ່ໃຊ້"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"ຊ່ວຍເພີ່ມປະສິດທິພາບໂຕແກ້ໄຂການປ້ອນຂໍ້ມູນ ໂດຍການສົ່ງສະຖິຕິການນຳໃຊ້ ແລະການລາຍການຂໍ້ຜິດພາດໂດຍອັດຕະໂນມັດ"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"ສີສັນແປ້ນພິມ"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"ອັງກິດ (ສະຫະລາດຊະອານາຈັກ)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"ອັງກິດ (ສະຫະລັດຯ)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"ເປີດນຳໃຊ້"</string>
     <string name="not_now" msgid="6172462888202790482">"ບໍ່ແມ່ນຕອນນີ້"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"ຮູບແບບການປ້ອນຂໍ້ມູນທີ່ຄືກັນມີຢູ່ແລ້ວ: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"ໂໝດການສຶກສາ Usability"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"ໄລຍະເວລາຂອງການກົດປຸ່ມ"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"ໄລຍະເວລາຂອງການສັ່ນໃນການກົດປຸ່ມ"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"ລະດັບສຽງຂອງການກົດປຸ່ມ"</string>
diff --git a/java/res/values-lt/strings-action-keys.xml b/java/res/values-lt/strings-action-keys.xml
index 39b3894..20d5ca0 100644
--- a/java/res/values-lt/strings-action-keys.xml
+++ b/java/res/values-lt/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Anks."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Atl."</string>
     <string name="label_send_key" msgid="482252074224462163">"Siųs."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pris."</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Lauk."</string>
 </resources>
diff --git a/java/res/values-lt/strings-talkback-descriptions.xml b/java/res/values-lt/strings-talkback-descriptions.xml
index 63b52a1..a5cb62c 100644
--- a/java/res/values-lt/strings-talkback-descriptions.xml
+++ b/java/res/values-lt/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Vietos"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboliai"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Jaustukai"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index c049a16..73003c2 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Įvesties parinktys"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Tyrinėti žurnalo komandas"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kontaktų vardų paieška"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Rašybos tikrinimo progr. naudoja įrašus, esančius kontaktų sąraše"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibruoti, kai paspaudžiami klavišai"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Įvesties kalbos"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Jei norite išsaugoti, palieskite dar kartą"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Žodynas galimas"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Įgalinti naudotojų atsiliepimus"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Padėkite patobulinti šią įvesties metodo redagavimo priemonę automatiškai siųsdami naudojimo statistiką ir strigčių ataskaitas"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Klaviatūros tema"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Anglų k. (JK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Anglų k. (JAV)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Įgalinti"</string>
     <string name="not_now" msgid="6172462888202790482">"Ne dabar"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Toks pat įvesties stilius jau yra: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Tinkamumo tyrimo režimas"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Klavišo ilgo paspaudimo delsa"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrav. paspaudus mygt. trukmė"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Garso paspaudus mygt. garsumas"</string>
diff --git a/java/res/values-lv/strings-action-keys.xml b/java/res/values-lv/strings-action-keys.xml
index c2fbda2..a3ada38 100644
--- a/java/res/values-lv/strings-action-keys.xml
+++ b/java/res/values-lv/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Iepr."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Gatavs"</string>
     <string name="label_send_key" msgid="482252074224462163">"Sūtīt"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pauze"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Gaidīt"</string>
 </resources>
diff --git a/java/res/values-lv/strings-talkback-descriptions.xml b/java/res/values-lv/strings-talkback-descriptions.xml
index 81a65c4..544fe9a 100644
--- a/java/res/values-lv/strings-talkback-descriptions.xml
+++ b/java/res/values-lv/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Vietas"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboli"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emocijzīmes"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 901c348..d689182 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Ievades opcijas"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Izpētes žurnāla komandas"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Meklēt kontaktp. vārdus"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Pareizrakst. pārbaudītājs lieto ierakstus no kontaktp. saraksta."</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrēt, nospiežot taustiņu"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Ievades valodas"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Pieskarieties vēlreiz, lai saglabātu."</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Ir pieejama vārdnīca."</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Iespējot lietotāju atsauksmes"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Palīdziet uzlabot šo ievades metodes redaktoru, automātiski nosūtot lietojuma statistiku un avāriju pārskatus."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tastatūras motīvs"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Angļu valoda (Lielbritānija)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Angļu valoda (ASV)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Iespējot"</string>
     <string name="not_now" msgid="6172462888202790482">"Vēlāk"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Šāds ievades stils jau pastāv: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Lietojamības izpētes režīms"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Taustiņa ilgās nosp. noildze"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Taust. nosp. vibrācijas ilgums"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Taustiņu nosp. skaņas skaļums"</string>
diff --git a/java/res/values-mk/strings.xml b/java/res/values-mk/strings.xml
index 1588534..ab2f262 100644
--- a/java/res/values-mk/strings.xml
+++ b/java/res/values-mk/strings.xml
@@ -22,7 +22,6 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for english_ime_input_options (3909945612939668554) -->
     <skip />
-    <!-- no translation found for english_ime_research_log (8492602295696577851) -->
     <skip />
     <!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
     <skip />
@@ -140,9 +139,7 @@
     <skip />
     <!-- no translation found for has_dictionary (6071847973466625007) -->
     <skip />
-    <!-- no translation found for prefs_enable_log (6620424505072963557) -->
     <skip />
-    <!-- no translation found for prefs_description_log (7525225584555429211) -->
     <skip />
     <!-- no translation found for keyboard_layout (8451164783510487501) -->
     <skip />
@@ -198,7 +195,6 @@
     <skip />
     <!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
     <skip />
-    <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
     <skip />
     <!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
     <skip />
diff --git a/java/res/values-mn-rMN/strings-action-keys.xml b/java/res/values-mn-rMN/strings-action-keys.xml
index 77b8f2c..a855386 100644
--- a/java/res/values-mn-rMN/strings-action-keys.xml
+++ b/java/res/values-mn-rMN/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Өмнөх"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Дууссан"</string>
     <string name="label_send_key" msgid="482252074224462163">"Илгээх"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Түр зогсоох"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Хүлээх"</string>
 </resources>
diff --git a/java/res/values-mn-rMN/strings-talkback-descriptions.xml b/java/res/values-mn-rMN/strings-talkback-descriptions.xml
index fb0d382..9824950 100644
--- a/java/res/values-mn-rMN/strings-talkback-descriptions.xml
+++ b/java/res/values-mn-rMN/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Газар"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Симбол"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Эмотикон"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-mn-rMN/strings.xml b/java/res/values-mn-rMN/strings.xml
index 4c64b33..f6233b5 100644
--- a/java/res/values-mn-rMN/strings.xml
+++ b/java/res/values-mn-rMN/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Оруулах сонголтууд"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Судалгааны протоколын командууд"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Харилцагчийн нэр хайх"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Алдаа шалгагч нь таны харилцагчдын жагсаалтаас ашиглана"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Товч дарахад чичрэх"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Оруулах хэл"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Хадгалахын тулд дахин хүрнэ үү"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Толь бичиг байна"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Хэрэглэгчийн санал хүсэлтийг идэвхжүүлэх"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Ашиглалтын статистик болон гацалтын репортуудыг автоматаар илгээснээр энэ оруулах арга засагчийг сайжруулахад туслаарай"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Гарын загвар"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Англи (ИБ)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Англи (АНУ)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Идэвхжүүлэх"</string>
     <string name="not_now" msgid="6172462888202790482">"Одоо биш"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ижилхэн оруулах загвар байна: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Ашиглалтын судалгааны горим"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Товч удаан дарах хугацааны тохиргоо"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Товч дарах чичиргээний хугацаа"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Товчны дууны хэмжээ"</string>
diff --git a/java/res/values-ms-rMY/strings-action-keys.xml b/java/res/values-ms-rMY/strings-action-keys.xml
index f1a75d2..1910c0d 100644
--- a/java/res/values-ms-rMY/strings-action-keys.xml
+++ b/java/res/values-ms-rMY/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Sblm"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Siap"</string>
     <string name="label_send_key" msgid="482252074224462163">"Hntr"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Jeda"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Tggu"</string>
 </resources>
diff --git a/java/res/values-ms-rMY/strings-emoji-descriptions.xml b/java/res/values-ms-rMY/strings-emoji-descriptions.xml
new file mode 100644
index 0000000..c945c81
--- /dev/null
+++ b/java/res/values-ms-rMY/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Tanda hak cipta"</string>
+    <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Tanda berdaftar"</string>
+    <string name="spoken_emoji_203C" msgid="153340916701508663">"Tanda seruan berkembar"</string>
+    <string name="spoken_emoji_2049" msgid="4877256448299555371">"Tanda tanya seruan"</string>
+    <string name="spoken_emoji_2122" msgid="9188440722954720429">"Tanda cap dagangan"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"Sumber maklumat"</string>
+    <string name="spoken_emoji_2194" msgid="8055202727034946680">"Anak panah kiri kanan"</string>
+    <string name="spoken_emoji_2195" msgid="8028122253301087407">"Anak panah atas bawah"</string>
+    <string name="spoken_emoji_2196" msgid="4019164898967854363">"Anak panah barat laut"</string>
+    <string name="spoken_emoji_2197" msgid="4255723717709017801">"Anak panah timur laut"</string>
+    <string name="spoken_emoji_2198" msgid="1452063451313622090">"Anak panah tenggara"</string>
+    <string name="spoken_emoji_2199" msgid="6942722693368807849">"Anak panah barat daya"</string>
+    <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Anak panah hala kiri dengan cangkuk"</string>
+    <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Anak panah hala kanan dengan cangkuk"</string>
+    <string name="spoken_emoji_231A" msgid="6751448803233874993">"Jam"</string>
+    <string name="spoken_emoji_231B" msgid="5956428809948426182">"Jam pasir"</string>
+    <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Segi tiga kembar arah kanan hitam"</string>
+    <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Segi tiga kembar arah kiri hitam"</string>
+    <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Segi tiga kembar arah atas hitam"</string>
+    <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Segi tiga kembar arah bawah hitam"</string>
+    <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Jam penggera"</string>
+    <string name="spoken_emoji_23F3" msgid="166900119581024371">"Jam pasir dengan pasir mengalir"</string>
+    <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Huruf m besar latin dalam bulatan"</string>
+    <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Empat segi kecil hitam"</string>
+    <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Empat segi kecil putih"</string>
+    <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Segi tiga arah kanan hitam"</string>
+    <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Segi tiga arah kiri hitam"</string>
+    <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Empat segi sederhana putih"</string>
+    <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Empat segi sederhana hitam"</string>
+    <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Empat segi sederhana kecil putih"</string>
+    <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Empat segi sederhana kecil hitam"</string>
+    <string name="spoken_emoji_2600" msgid="2272722634618990413">"Matahari dengan sinar hitam"</string>
+    <string name="spoken_emoji_2601" msgid="6205136889311537150">"Awan"</string>
+    <string name="spoken_emoji_260E" msgid="8670395193046424238">"Telefon hitam"</string>
+    <string name="spoken_emoji_2611" msgid="4530550203347054611">"Peti undi dengan tanda semak"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"Payung dengan titisan hujan"</string>
+    <string name="spoken_emoji_2615" msgid="3320562382424018588">"Minuman panas"</string>
+    <string name="spoken_emoji_261D" msgid="4690554173549768467">"Indeks putih menunjuk ke atas"</string>
+    <string name="spoken_emoji_263A" msgid="3170094381521989300">"Muka tersenyum putih"</string>
+    <string name="spoken_emoji_2648" msgid="4621241062667020673">"Aries"</string>
+    <string name="spoken_emoji_2649" msgid="7694461245947059086">"Taurus"</string>
+    <string name="spoken_emoji_264A" msgid="1258074605878705030">"Gemini"</string>
+    <string name="spoken_emoji_264B" msgid="4409219914377810956">"Cancer"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leo"</string>
+    <string name="spoken_emoji_264D" msgid="1504758945499854018">"Virgo"</string>
+    <string name="spoken_emoji_264E" msgid="2354847104530633519">"Libra"</string>
+    <string name="spoken_emoji_264F" msgid="5822933280406416112">"Scorpius"</string>
+    <string name="spoken_emoji_2650" msgid="4832481156714796163">"Sagittarius"</string>
+    <string name="spoken_emoji_2651" msgid="840953134601595090">"Capricorn"</string>
+    <string name="spoken_emoji_2652" msgid="3586925968718775281">"Aquarius"</string>
+    <string name="spoken_emoji_2653" msgid="8420547731496254492">"Pisces"</string>
+    <string name="spoken_emoji_2660" msgid="4541170554542412536">"Daun sped hitam"</string>
+    <string name="spoken_emoji_2663" msgid="3669352721942285724">"Daun kelawar hitam"</string>
+    <string name="spoken_emoji_2665" msgid="6347941599683765843">"Daun hati hitam"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"Daun berlian hitam"</string>
+    <string name="spoken_emoji_2668" msgid="7063148281053820386">"Air panas"</string>
+    <string name="spoken_emoji_267B" msgid="21716857176812762">"Simbol kitar semula universal hitam"</string>
+    <string name="spoken_emoji_267F" msgid="8833496533226475443">"Simbol kerusi roda"</string>
+    <string name="spoken_emoji_2693" msgid="7443148847598433088">"Sauh"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Tanda amaran"</string>
+    <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Tanda voltan tinggi"</string>
+    <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Bulatan putih sederhana"</string>
+    <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Bulatan hitam sederhana"</string>
+    <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Bola sepak"</string>
+    <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Besbol"</string>
+    <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Orang salji tanpa salji"</string>
+    <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Matahari di sebalik awan"</string>
+    <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Ophiuchus"</string>
+    <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Dilarang masuk"</string>
+    <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Gereja"</string>
+    <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Air pancut"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Bendera dalam lubang"</string>
+    <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Kapal layar"</string>
+    <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Khemah"</string>
+    <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Pam minyak"</string>
+    <string name="spoken_emoji_2702" msgid="4005741160717451912">"Gunting hitam"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"Tanda semak tebal putih"</string>
+    <string name="spoken_emoji_2708" msgid="7153840886849268988">"Kapal terbang"</string>
+    <string name="spoken_emoji_2709" msgid="2217319160724311369">"Sampul surat"</string>
+    <string name="spoken_emoji_270A" msgid="508347232762319473">"Penumbuk"</string>
+    <string name="spoken_emoji_270B" msgid="6640562128327753423">"Tangan diangkat"</string>
+    <string name="spoken_emoji_270C" msgid="1344288035704944581">"Tanda menang"</string>
+    <string name="spoken_emoji_270F" msgid="6108251586067318718">"Pensel"</string>
+    <string name="spoken_emoji_2712" msgid="6320544535087710482">"Mata pen hitam"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"Tanda semak tebal"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"X darab tebal"</string>
+    <string name="spoken_emoji_2728" msgid="5650330815808691881">"Kilauan"</string>
+    <string name="spoken_emoji_2733" msgid="8915809595141157327">"Asterisk berbucu lapan"</string>
+    <string name="spoken_emoji_2734" msgid="4846583547980754332">"Bintang hitam berbucu lapan"</string>
+    <string name="spoken_emoji_2744" msgid="4350636647760161042">"Emping salji"</string>
+    <string name="spoken_emoji_2747" msgid="3718282973916474455">"Kilauan"</string>
+    <string name="spoken_emoji_274C" msgid="2752145886733295314">"Tanda silang"</string>
+    <string name="spoken_emoji_274E" msgid="4262918689871098338">"Tanda silang empat segi negatif"</string>
+    <string name="spoken_emoji_2753" msgid="6935897159942119808">"Perhiasan tanda tanya hitam"</string>
+    <string name="spoken_emoji_2754" msgid="7277504915105532954">"Perhiasan tanda tanya putih"</string>
+    <string name="spoken_emoji_2755" msgid="6853076969826960210">"Perhiasan tanda seruan putih"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"Simbol tanda seruan tebal"</string>
+    <string name="spoken_emoji_2764" msgid="4214257843609432167">"Hati hitam tebal"</string>
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"Tanda tambah tebal"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"Tanda tolak tebal"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"Tanda bahagi tebal"</string>
+    <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Anak panah hala kanan hitam"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"Gelung bergulung"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Gelung bergulung kembar"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"Anak panah menghala ke kanan kemudian melengkung ke atas"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"Anak panah menghala ke kanan kemudian melengkung ke bawah"</string>
+    <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Anak panah hitam hala kiri"</string>
+    <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Anak panah hitam hala atas"</string>
+    <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Anak panah hitam hala bawah"</string>
+    <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Empat segi besar hitam"</string>
+    <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Empat segi besar putih"</string>
+    <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Bintang sederhana putih"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Bulatan besar tebal"</string>
+    <string name="spoken_emoji_3030" msgid="4609172241893565639">"Sengkang beralun"</string>
+    <string name="spoken_emoji_303D" msgid="2545833934975907505">"Tanda perselangan silih"</string>
+    <string name="spoken_emoji_3297" msgid="928912923628973800">"Ideograf tahniah bulat"</string>
+    <string name="spoken_emoji_3299" msgid="3930347573693668426">"Ideograf rahsia bulat"</string>
+    <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Naga merah jubin mahjong"</string>
+    <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Joker hitam daun terup"</string>
+    <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Jenis darah A"</string>
+    <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Jenis darah B"</string>
+    <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Jenis darah O"</string>
+    <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Tempat letak kereta"</string>
+    <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Jenis darah AB"</string>
+    <string name="spoken_emoji_1F191" msgid="5386969264431429221">"CL empat segi"</string>
+    <string name="spoken_emoji_1F192" msgid="8324226436829162496">"Tenang empat segi"</string>
+    <string name="spoken_emoji_1F193" msgid="4731758603321515364">"Percuma empat segi"</string>
+    <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ID empat segi"</string>
+    <string name="spoken_emoji_1F195" msgid="1433142500411060924">"Baharu empat segi"</string>
+    <string name="spoken_emoji_1F196" msgid="8825160701159634202">"NG empat segi"</string>
+    <string name="spoken_emoji_1F197" msgid="7841079241554176535">"OK empat segi"</string>
+    <string name="spoken_emoji_1F198" msgid="7020298909426960622">"SOS empat segi"</string>
+    <string name="spoken_emoji_1F199" msgid="5971252667136235630">"Naik dengan tanda seruan empat segi"</string>
+    <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"Lawan empat segi"</string>
+    <string name="spoken_emoji_1F201" msgid="7000490044681139002">"Katakana di sini empat segi"</string>
+    <string name="spoken_emoji_1F202" msgid="8560906958695043947">"Perkhidmatan katakana empat segi"</string>
+    <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Ideograf percuma empat segi"</string>
+    <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Ideograf tempat duduk yang ditempah empat segi"</string>
+    <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Ideograf larangan empat segi"</string>
+    <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Ideograf jawatan kosong empat segi"</string>
+    <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Ideograf penerimaan empat segi"</string>
+    <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Ideograf penuh empat segi"</string>
+    <string name="spoken_emoji_1F236" msgid="879755752069393034">"Ideograf dibayar empat segi"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Ideograf bulanan empat segi"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Ideograf permohonan empat segi"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Ideograf diskaun empat segi"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Ideograf perniagaan dibuka empat segi"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Ideograf kelebihan bulat"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Ideograf terima bulat"</string>
+    <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Puting beliung"</string>
+    <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Berkabut"</string>
+    <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Payung tertutup"</string>
+    <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Malam dengan bintang"</string>
+    <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Matahari terbit di atas gunung"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Sunrise"</string>
+    <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Skap bandar raya waktu senja"</string>
+    <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Matahari terbenam di atas bangunan"</string>
+    <string name="spoken_emoji_1F308" msgid="688704703985173377">"Pelangi"</string>
+    <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Jambatan pada waktu malam"</string>
+    <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Gelombang air"</string>
+    <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Gunung Berapi"</string>
+    <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Bima sakti"</string>
+    <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Glob bumi eropah-afrika"</string>
+    <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Glob bumi amerika"</string>
+    <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Glob bumi asia-australia"</string>
+    <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Glob dengan meridian"</string>
+    <string name="spoken_emoji_1F311" msgid="623906380914895542">"Simbol bulan baharu"</string>
+    <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Simbol bulan sabit mengambang"</string>
+    <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Simbol bulan suku pertama"</string>
+    <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Simbol bulan hampir purnama mengambang"</string>
+    <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Simbol bulan purnama"</string>
+    <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Simbol bulan hampir purnama surut"</string>
+    <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Simbol bulan suku akhir"</string>
+    <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Simbol bulan sabit surut"</string>
+    <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Bulan sabit"</string>
+    <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Bulan baharu dengan muka"</string>
+    <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Bulan suku pertama dengan muka"</string>
+    <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Bulan suku akhir dengan muka"</string>
+    <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Bulan purnama dengan muka"</string>
+    <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Matahari dengan muka"</string>
+    <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Bintang bersinar"</string>
+    <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Tahi bintang"</string>
+    <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Buah berangan"</string>
+    <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Anak benih"</string>
+    <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Pokok malar hijau"</string>
+    <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Pokok daun luruh"</string>
+    <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Pokok palma"</string>
+    <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Kaktus"</string>
+    <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Tulip"</string>
+    <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Bunga sakura"</string>
+    <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Ros"</string>
+    <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Bunga raya"</string>
+    <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Bunga matahari"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Bunga"</string>
+    <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Tongkol jagung"</string>
+    <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Pokok padi"</string>
+    <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Herba"</string>
+    <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Empat daun semanggi"</string>
+    <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Daun mapel"</string>
+    <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Daun gugur"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Daun ditiup angin"</string>
+    <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Cendawan"</string>
+    <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Tomato"</string>
+    <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Terung"</string>
+    <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Anggur"</string>
+    <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Tembikai"</string>
+    <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Tembikai"</string>
+    <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Oren Tangerin"</string>
+    <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Lemon"</string>
+    <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Kuning Pisang"</string>
+    <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Nanas"</string>
+    <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Epal merah"</string>
+    <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Epal hijau"</string>
+    <string name="spoken_emoji_1F350" msgid="625802980159197701">"Pear"</string>
+    <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Pic"</string>
+    <string name="spoken_emoji_1F352" msgid="965600953360182635">"Ceri"</string>
+    <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Strawberi"</string>
+    <string name="spoken_emoji_1F354" msgid="45162285238888494">"Hamburger"</string>
+    <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Sepotong piza"</string>
+    <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Daging pada tulang"</string>
+    <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Kaki ayam"</string>
+    <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Keropok beras"</string>
+    <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Bebola beras"</string>
+    <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Nasi"</string>
+    <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Kari dan nasi"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Mangkuk mengukus"</string>
+    <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Spageti"</string>
+    <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Roti"</string>
+    <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Kentang goreng"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Ubi keledek panggang"</string>
+    <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Dango"</string>
+    <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
+    <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Sushi"</string>
+    <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Udang goreng"</string>
+    <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Kek ikan dengan corak pusaran"</string>
+    <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Aiskrim lembut"</string>
+    <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Ais kisar"</string>
+    <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Aiskrim"</string>
+    <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Donat"</string>
+    <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Biskut"</string>
+    <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Bar coklat"</string>
+    <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Kandi"</string>
+    <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Lolipop"</string>
+    <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Kastad"</string>
+    <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Bekas madu"</string>
+    <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Kek rapuh"</string>
+    <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Kotak Bento"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Seperiuk makanan"</string>
+    <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Masakan"</string>
+    <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Garpu dan pisau"</string>
+    <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Cawan tanpa pemegang"</string>
+    <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Botol Sake dan cawan"</string>
+    <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Gelas wain"</string>
+    <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Gelas koktel"</string>
+    <string name="spoken_emoji_1F379" msgid="790581290787943325">"Minuman tropika"</string>
+    <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Kole bir"</string>
+    <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Kole bir dihantukkan"</string>
+    <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Botol bayi"</string>
+    <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Reben"</string>
+    <string name="spoken_emoji_1F381" msgid="614180683680675444">"Hadiah berbalut"</string>
+    <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Kek hari lahir"</string>
+    <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Jack-o-lantern"</string>
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Pokok Krismas"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Santa Klaus"</string>
+    <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Bunga api"</string>
+    <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Bunga api berlian"</string>
+    <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Belon"</string>
+    <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Peletus konfeti"</string>
+    <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Bola Konfeti"</string>
+    <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Pokok Tanabata"</string>
+    <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Bendera berpalang"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Hiasan pain"</string>
+    <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Anak patung Jepun"</string>
+    <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Ular-ular kap"</string>
+    <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Loceng angin"</string>
+    <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Majlis melihat bulan"</string>
+    <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Beg galas sekolah"</string>
+    <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Topi graduasi"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Kuda karusel"</string>
+    <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Roda Ferris"</string>
+    <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Roller-coaster"</string>
+    <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Joran dan ikan"</string>
+    <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Mikrofon"</string>
+    <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Kamera filem"</string>
+    <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Pawagam"</string>
+    <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Fon kepala"</string>
+    <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Palet Artis"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Topi"</string>
+    <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Khemas sarkas"</string>
+    <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Tiket"</string>
+    <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Papan ketap"</string>
+    <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Seni persembahan"</string>
+    <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Permainan video"</string>
+    <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Tepat pada sasaran"</string>
+    <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Mesin slot"</string>
+    <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Biliard"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Dadu"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Boling"</string>
+    <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Daun terup bunga"</string>
+    <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Nota muzik"</string>
+    <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Pelbagai nota muzik"</string>
+    <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Saksofon"</string>
+    <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Gitar"</string>
+    <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Papan nada muzik"</string>
+    <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Trompet"</string>
+    <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Biola"</string>
+    <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Skor muzik"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Baju berlari dengan selempang"</string>
+    <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Raket dan bola tenis"</string>
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Ski dan but ski"</string>
+    <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Bola keranjang dan gelung"</string>
+    <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Bendera kotak-kotak"</string>
+    <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Peluncur salji"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Pelari"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Peluncur"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Trofi"</string>
+    <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Lumba kuda"</string>
+    <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Bola sepak Amerika"</string>
+    <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Bola sepak ragbi"</string>
+    <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Perenang"</string>
+    <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Bangunan rumah"</string>
+    <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Rumah dengan taman"</string>
+    <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Bangunan pejabat"</string>
+    <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Pejabat pos Jepun"</string>
+    <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Pejabat pos Eropah"</string>
+    <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Hospital"</string>
+    <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Bank"</string>
+    <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Mesin teler automatik"</string>
+    <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Hotel"</string>
+    <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Hotel cinta"</string>
+    <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Kedai serbaneka"</string>
+    <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Sekolah"</string>
+    <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Gedung beli-belah"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Kilang"</string>
+    <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Tanglung izakaya"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Istana Jepun"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Istana Eropah"</string>
+    <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Tikus"</string>
+    <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Tikus"</string>
+    <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Lembu jantan"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Kerbau"</string>
+    <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Lembu"</string>
+    <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Harimau Bintang"</string>
+    <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Arnab"</string>
+    <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Kucing"</string>
+    <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Naga"</string>
+    <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Buaya"</string>
+    <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Ikan paus"</string>
+    <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Siput"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Ular"</string>
+    <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Kuda"</string>
+    <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Biri-biri jantan"</string>
+    <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Kambing"</string>
+    <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Biri-biri"</string>
+    <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Monyet"</string>
+    <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Ayam jantan"</string>
+    <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Ayam"</string>
+    <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Anjing"</string>
+    <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Babi"</string>
+    <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Babi hutan"</string>
+    <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Gajah"</string>
+    <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Kurita"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Cengkerang berpusar"</string>
+    <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Pepijat"</string>
+    <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Semut"</string>
+    <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Lebah madu"</string>
+    <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Kumbang kura-kura"</string>
+    <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Ikan"</string>
+    <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Ikan tropika"</string>
+    <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Ikan buntal"</string>
+    <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Penyu"</string>
+    <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Anak ayam menetas"</string>
+    <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Anak ayam"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Anak ayam menghadap depan"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Burung"</string>
+    <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Penguin"</string>
+    <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Koala"</string>
+    <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Poodle"</string>
+    <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Unta dromedaris"</string>
+    <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Unta Bactrian"</string>
+    <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Dolfin"</string>
+    <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Muka tikus"</string>
+    <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Muka lembu"</string>
+    <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Muka harimau"</string>
+    <string name="spoken_emoji_1F430" msgid="525492897063150160">"Muka arnab"</string>
+    <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Muka kucing"</string>
+    <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Muka naga"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Ikan paut memancutkan air"</string>
+    <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Muka kuda"</string>
+    <string name="spoken_emoji_1F435" msgid="59199202683252958">"Muka monyet"</string>
+    <string name="spoken_emoji_1F436" msgid="340544719369009828">"Muka anjing"</string>
+    <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Muka babi"</string>
+    <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Muka katak"</string>
+    <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Muka hamster"</string>
+    <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Muka serigala"</string>
+    <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Muka beruang"</string>
+    <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Muka panda"</string>
+    <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Hidung babi"</string>
+    <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Kesan tapak"</string>
+    <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Mata"</string>
+    <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Telinga"</string>
+    <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Hidung"</string>
+    <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Mulut"</string>
+    <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Lidah"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Tangan putih menunjuk ke atas"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Tangan putih menunjuk ke bawah"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Tangan putih menunjuk ke kiri"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Tangan putih menunjuk ke kanan"</string>
+    <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Isyarat enumbuk"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Isyarat tangan melambai"</string>
+    <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Isyarat ok"</string>
+    <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Isyarat bagus"</string>
+    <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Isyarat tidak bagus"</string>
+    <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Isyarat bertepuk tangan"</string>
+    <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Isyarat tangan terbuka"</string>
+    <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Mahkota"</string>
+    <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Topi wanita"</string>
+    <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Cermin mata"</string>
+    <string name="spoken_emoji_1F454" msgid="348469036193323252">"Tali leher"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Kemeja T"</string>
+    <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Jean"</string>
+    <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Gaun"</string>
+    <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Kimono"</string>
+    <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Bikini"</string>
+    <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Pakaian wanita"</string>
+    <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Beg duit"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Beg tangan"</string>
+    <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Dompet"</string>
+    <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Kasut lelaki"</string>
+    <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Kasut sukan"</string>
+    <string name="spoken_emoji_1F460" msgid="305863879170420855">"Kasut tumit tinggi"</string>
+    <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Sandal wanita"</string>
+    <string name="spoken_emoji_1F462" msgid="1722897795554863734">"But wanita"</string>
+    <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Tapak kaki"</string>
+    <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Bayang patung"</string>
+    <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Bayang patung"</string>
+    <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Budak lelaki"</string>
+    <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Budak perempuan"</string>
+    <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Lelaki"</string>
+    <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Wanita"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Keluarga"</string>
+    <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Lelaki dan wanita berpegangan tangan"</string>
+    <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Dua lelaki berpegangan tangan"</string>
+    <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Dua wanita berpegangan tangan"</string>
+    <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Pegawai polis"</string>
+    <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Wanita dengan telinga arnab"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Pengantin dengan vel"</string>
+    <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Orang berambut perang"</string>
+    <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Lelaki dengan gua pi mao"</string>
+    <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Lelaki berserban"</string>
+    <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Lelaki lebih tua"</string>
+    <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Wanita lebih tua"</string>
+    <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Bayi"</string>
+    <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Buruh binaan"</string>
+    <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Puteri"</string>
+    <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Gergasi Jepun"</string>
+    <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Jembalang Jepun"</string>
+    <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Bebayang"</string>
+    <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Malaikat kecil"</string>
+    <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Makhluk asing"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Raksasa asing"</string>
+    <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Imp"</string>
+    <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Tengkorak"</string>
+    <string name="spoken_emoji_1F481" msgid="320408708521966893">"Orang meja maklumat"</string>
+    <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Pengawal"</string>
+    <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Penari"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Gincu"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Pengilat kuku"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Urutan muka"</string>
+    <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Gunting rambut"</string>
+    <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Jalur Tukang Gunting Rambut"</string>
+    <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Picagari"</string>
+    <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Pil"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Tanda ciuman"</string>
+    <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Surat cinta"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Cincin"</string>
+    <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Batu permata"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Ciuman"</string>
+    <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Jambak bunga"</string>
+    <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Pasangan dengan hati"</string>
+    <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Perkahwinan"</string>
+    <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Jantung berdegup"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Patah hati"</string>
+    <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Dua hati"</string>
+    <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Hati berkilauan"</string>
+    <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Hati berkembang"</string>
+    <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Hati dengan anak panah"</string>
+    <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Hati biru"</string>
+    <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Hati hijau"</string>
+    <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Hati kuning"</string>
+    <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Hati ungu"</string>
+    <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Hati dengan riben"</string>
+    <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Hati berputar"</string>
+    <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Hiasan hati"</string>
+    <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Bentuk berlian dengan titik di dalam"</string>
+    <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Mentol elektrik"</string>
+    <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Simbol kemarahan"</string>
+    <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Bom"</string>
+    <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Simbol tidur"</string>
+    <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Simbol pelanggaran"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Simbol peluh memercik"</string>
+    <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Titik kecil"</string>
+    <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Simbol sengkang"</string>
+    <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Timbunan najis"</string>
+    <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Biseps dilenturtegang"</string>
+    <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Simbol pening"</string>
+    <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Belon pertuturan"</string>
+    <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Belon pemikiran"</string>
+    <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Bunga putih"</string>
+    <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Simbol seratus mata"</string>
+    <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Beg wang"</string>
+    <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Pertukaran mata wang"</string>
+    <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Isyarat dolar tebal"</string>
+    <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Kad kredit"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Wang kertas dengan tanda yen"</string>
+    <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Wang kertas dengan tanda dolar"</string>
+    <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Wang kertas dengan tanda euro"</string>
+    <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Wang kertas dengan tanda pound"</string>
+    <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Wang dengan sayap"</string>
+    <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Carta dengan aliran ke atas dan tanda yen"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Tempat duduk"</string>
+    <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Komputer peribadi"</string>
+    <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Beg bimbit"</string>
+    <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minicakera"</string>
+    <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Cakera liut"</string>
+    <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Cakera optik"</string>
+    <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"Dvd"</string>
+    <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Folder fail"</string>
+    <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Buka folder fail"</string>
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Halaman bergulung"</string>
+    <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Halaman menghadap ke atas"</string>
+    <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Kalendar"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Kalendar koyak"</string>
+    <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Kad indeks"</string>
+    <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Carta dengan aliran ke atas"</string>
+    <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Carta dengan aliran ke bawah"</string>
+    <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Carta bar"</string>
+    <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Papan Keratan"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Pin tekan"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Pin tekan bulat"</string>
+    <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Klip kertas"</string>
+    <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Pembaris lurus"</string>
+    <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Pembaris segi tiga"</string>
+    <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"Tab penanda halaman"</string>
+    <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Lejar"</string>
+    <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Buku Nota"</string>
+    <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Buku nota dengan kulit bercorak"</string>
+    <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Buku tertutup"</string>
+    <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Buku terbuka"</string>
+    <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Buku hijau"</string>
+    <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Buku biru"</string>
+    <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Buku jingga"</string>
+    <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Buku"</string>
+    <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Lencana nama"</string>
+    <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Skrol"</string>
+    <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Memo"</string>
+    <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Gagang telefon"</string>
+    <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Alat kelui"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Mesin faks"</string>
+    <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Antena satelit"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Pembesar suara pengumuman awam"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Megafon sorakan"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Dulang peti keluar"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Dulang peti masuk"</string>
+    <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Pakej"</string>
+    <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Simbol e-mel"</string>
+    <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Sampul surat masuk"</string>
+    <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Sampul surat dengan anak panah ke bawah di atas"</string>
+    <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Peti mel tertutup dengan bendera diturunkan"</string>
+    <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Peti mel tertutup dengan bendera dinaikkan"</string>
+    <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Peti mel terbuka dengan bendera dinaikkan"</string>
+    <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Peti mel terbuka dengan bendera diturunkan"</string>
+    <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Peti surat"</string>
+    <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Hon pos"</string>
+    <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Surat khabar"</string>
+    <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Telefon mudah alih"</string>
+    <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Telefon mudah alih dengan anak panah hala kanan di sebelah kiri"</string>
+    <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Mod getaran"</string>
+    <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Telefon mudah alih dimatikan"</string>
+    <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Tiada telefon mudah alih"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Antena dengan bar"</string>
+    <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Kamera"</string>
+    <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Kamera video"</string>
+    <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Televisyen"</string>
+    <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Radio"</string>
+    <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Kaset Video"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Anak panah hala kanan berpintal"</string>
+    <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Anak panah bulatan terbuka hala kanan dan hala kiri mengikut arah jam"</string>
+    <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Anak panah bulatan terbuka hala kanan dan hala kiri mengikut arah jam dengan tindihan satu dalam bulatan"</string>
+    <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Anak panah bulatan terbuka menurun dan menaik mengikut arah jam"</string>
+    <string name="spoken_emoji_1F504" msgid="708290317843535943">"Anak panah bulatan terbuka menurun dan menaik lawan arah jam"</string>
+    <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Simbol cahaya rendah"</string>
+    <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Simbol cahaya tinggi"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Pembesar suara dengan garisan pembatalan"</string>
+    <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Pembesar suara"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Pembesar suara dengan satu gelombang bunyi"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Pembesar suara dengan tiga gelombang bunyi"</string>
+    <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Bateri"</string>
+    <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Palam elektrik"</string>
+    <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Kanta pembesar menunjuk ke kiri"</string>
+    <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Kata pembesar menunjuk ke kanan"</string>
+    <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Mangga dengan pen dakwat"</string>
+    <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Mangga tertutup dengan kunci"</string>
+    <string name="spoken_emoji_1F511" msgid="262319867774655688">"Anak kunci"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Mangga"</string>
+    <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Mangga terbuka"</string>
+    <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Loceng"</string>
+    <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Loceng dengan garisan pembatalan"</string>
+    <string name="spoken_emoji_1F516" msgid="108097933937925381">"Penanda halaman"</string>
+    <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Simbol pautan"</string>
+    <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Butang radio"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Kembali dengan anak panah hala kiri di atas"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"Akhir dengan anak panah hala kiri di atas"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"Hidup dengan tanda seruan dengan anak panah kiri kanan di atas"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Tidak lama lagi dengan anak panah hala kiri di atas"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Atas dengan anak panah hala atas di atas"</string>
+    <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Simbol tiada sesiapa di bawah umur 18 tahun"</string>
+    <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Butang kekunci sepuluh"</string>
+    <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Simbol input huruf besar latin"</string>
+    <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Simbol input huruf kecil latin"</string>
+    <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Simbol input nombor"</string>
+    <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Simbol input untuk simbol"</string>
+    <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Simbol input huruf latin"</string>
+    <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Api"</string>
+    <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Lampu suluh"</string>
+    <string name="spoken_emoji_1F527" msgid="134257142354034271">"Sepana"</string>
+    <string name="spoken_emoji_1F528" msgid="700627429570609375">"Tukul"</string>
+    <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Nat dan bolt"</string>
+    <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Hocho"</string>
+    <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Pistol"</string>
+    <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Mikroskop"</string>
+    <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Teleskop"</string>
+    <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Bola kristal"</string>
+    <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Bintang berbucu enam dengan titik tengah"</string>
+    <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Simbol Jepun untuk perantis"</string>
+    <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Lambang trisula"</string>
+    <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Butang empat segi hitam"</string>
+    <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Butang empat segi putih"</string>
+    <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Bulatan merah besar"</string>
+    <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Bulatan biru besar"</string>
+    <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Berlian oren besar"</string>
+    <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Berlian biru besar"</string>
+    <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Berlian oren kecil"</string>
+    <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Berlian biru kecil"</string>
+    <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Segi tiga merah menunjuk ke atas"</string>
+    <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Segi tiga merah menunjuk ke bawah"</string>
+    <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Segi tiga merah kecil menunjuk ke atas"</string>
+    <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Segi tiga merah kecil menunjuk ke bawah"</string>
+    <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Muka jam pukul satu"</string>
+    <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Muka jam pukul dua"</string>
+    <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Muka jam pukul tiga"</string>
+    <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Muka jam pukul empat"</string>
+    <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Muka jam pukul lima"</string>
+    <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Muka jam pukul enam"</string>
+    <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Muka jam pukul tujuh"</string>
+    <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Muka jam pukul lapan"</string>
+    <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Muka jam pukul sembilan"</string>
+    <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Muka jam pukul sepuluh"</string>
+    <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Muka jam pukul sebelas"</string>
+    <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Muka jam pukul dua belas"</string>
+    <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Muka jam pukul satu setengah"</string>
+    <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Muka jam pukul dua setengah"</string>
+    <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Muka jam pukul tiga setengah"</string>
+    <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Muka jam pukul empat setengah"</string>
+    <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Muka jam pukul lima setengah"</string>
+    <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Muka jam pukul enam setengah"</string>
+    <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Muka jam pukul tujuh setengah"</string>
+    <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Muka jam pukul lapan setengah"</string>
+    <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Muka jam pukul sembilan setengah"</string>
+    <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Muka jam pukul sepuluh setengah"</string>
+    <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Muka jam pukul sebelas setengah"</string>
+    <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Muka jam pukul dua belas setengah"</string>
+    <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Gunung fuji"</string>
+    <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Menara Tokyo"</string>
+    <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Patung Liberty"</string>
+    <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Bebayang jepun"</string>
+    <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Moyai"</string>
+    <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Muka tersengih"</string>
+    <string name="spoken_emoji_1F601" msgid="746026523967444503">"Muka tersengih dengan mata tersenyum"</string>
+    <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Muka dengan air mata kegembiraan"</string>
+    <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Muka tersenyum dengan mulut terbuka"</string>
+    <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Muka tersenyum dengan mulut terbuka dan mata tersenyum"</string>
+    <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Muka tersenyum dengan mulut terbuka dan peluh dingin"</string>
+    <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Muka tersenyum dengan mulut terbuka dan mata terpejam rapat"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Muka tersenyum dengan halo"</string>
+    <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Muka tersenyum dengan tanduk"</string>
+    <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Muka mengenyit mata"</string>
+    <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Muka tersenyum dengan mata tersenyum"</string>
+    <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Muka menikmati makanan lazat"</string>
+    <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Muka lega"</string>
+    <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Muka tersenyum dengan mata berbentuk hati"</string>
+    <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Muka tersenyum dengan cermin mata hitam"</string>
+    <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Muka mencebik"</string>
+    <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Muka neutral"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Muka tanpa perasaan"</string>
+    <string name="spoken_emoji_1F612" msgid="985081329745137998">"Muka tidak hairan"</string>
+    <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Muka dengan peluh dingin"</string>
+    <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Muka termenung"</string>
+    <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Muka keliru"</string>
+    <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Muka bingung"</string>
+    <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Muka bercium"</string>
+    <string name="spoken_emoji_1F618" msgid="408207170572303753">"Muka melayangkan ciuman"</string>
+    <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Muka bercium dengan mata tersenyum"</string>
+    <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Muka bercium dengan mata tertutup"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Muka dengan lidah terjelir"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Muka dengan lidah terjelir dan mengenyitkan mata"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Muka dengan lidah terjelir dan mata tertutup rapat"</string>
+    <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Muka kecewa"</string>
+    <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Muka bimbang"</string>
+    <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Muka marah"</string>
+    <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Muka muncung"</string>
+    <string name="spoken_emoji_1F622" msgid="29291014645931822">"Muka menangis"</string>
+    <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Muka bersungguh-sungguh"</string>
+    <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Muka dengan rupa kemenangan"</string>
+    <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Muka kecewa tetapi lega"</string>
+    <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Muka muram dengan mulut terbuka"</string>
+    <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Muka sedih"</string>
+    <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Muka takut"</string>
+    <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Muka letih"</string>
+    <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Muka mengantuk"</string>
+    <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Muka penat"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Muka berkerut"</string>
+    <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Muka menangis kuat"</string>
+    <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Muka dengan mulut terbuka"</string>
+    <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Muka diam"</string>
+    <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Muka dengan mulut terbuka dan peluh dingin"</string>
+    <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Muka menjerit ketakutan"</string>
+    <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Muka terperanjat"</string>
+    <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Muka merah"</string>
+    <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Muka tidur"</string>
+    <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Muka pening"</string>
+    <string name="spoken_emoji_1F636" msgid="947000211822375683">"Muka tanpa mulut"</string>
+    <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Muka dengan topeng perubatan"</string>
+    <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Muka kucing tersengih dengan mata tersenyum"</string>
+    <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Muka kucing dengan air mata kegembiraan"</string>
+    <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Muka kucing tersenyum dengan mulut terbuka"</string>
+    <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Muka kucing tersenyum dengan mata berbentuk hati"</string>
+    <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Muka kucing dengan senyuman sinis"</string>
+    <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Muka kucing bercium dengan mata tertutup"</string>
+    <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Muka kucing muncung"</string>
+    <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Muka kucing menangis"</string>
+    <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Muka kucing letih"</string>
+    <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Muka tanpa gerak isyarat baik"</string>
+    <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Muka dengan gerak isyarat ok"</string>
+    <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Orang menunduk lama"</string>
+    <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Monyet menutup mata"</string>
+    <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Monyet menutup telinga"</string>
+    <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Monyet menutup mulut"</string>
+    <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Orang gembira mengangkat satu tangan"</string>
+    <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Orang mengangkat kedua-dua tangan untuk meraikan"</string>
+    <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Orang muram"</string>
+    <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Orang dengan muka muncung"</string>
+    <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Orang dengan tangan bersilang"</string>
+    <string name="spoken_emoji_1F680" msgid="513263736012689059">"Roket"</string>
+    <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Helikopter"</string>
+    <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Kepala kereta api wap"</string>
+    <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Kereta api"</string>
+    <string name="spoken_emoji_1F684" msgid="346396777356203608">"Kereta api kelajuan tinggi"</string>
+    <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Kereta api kelajuan tinggi dengan muncung peluru"</string>
+    <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Kereta api"</string>
+    <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metro"</string>
+    <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Aliran ringan"</string>
+    <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Stesen"</string>
+    <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Trem"</string>
+    <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Kereta trem"</string>
+    <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Bas"</string>
+    <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Bas dari arah depan"</string>
+    <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Bas elektrik"</string>
+    <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Perhentian bas"</string>
+    <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Bas mini"</string>
+    <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulans"</string>
+    <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Kereta bomba"</string>
+    <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Kereta polis"</string>
+    <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Kereta polis dari arah depan"</string>
+    <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Teksi"</string>
+    <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Teksi dari arah depan"</string>
+    <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Kereta"</string>
+    <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Kereta dari arah depan"</string>
+    <string name="spoken_emoji_1F699" msgid="630317052666590607">"Kenderaan rekreasi"</string>
+    <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Trak penghantaran"</string>
+    <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Lori sambung sendi"</string>
+    <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Traktor"</string>
+    <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Monorel"</string>
+    <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Kereta api gunung"</string>
+    <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Kereta api tergantung"</string>
+    <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Kereta kabel gunung"</string>
+    <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Trem udara"</string>
+    <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Kapal"</string>
+    <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Perahu dayung"</string>
+    <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Bot laju"</string>
+    <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Lampu isyarat mendatar"</string>
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Lampu isyarat menegak"</string>
+    <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Tanda pembinaan"</string>
+    <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Lampu berputar kereta polis"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Bendera segi tiga pada tiang"</string>
+    <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Pintu"</string>
+    <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Isyarat dilarang masuk"</string>
+    <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Simbol merokok"</string>
+    <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Simbol dilarang merokok"</string>
+    <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Simbol buang sampah di tempatnya"</string>
+    <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Simbol jangan buang sampah"</string>
+    <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Simbol air boleh diminum"</string>
+    <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Simbol air tidak boleh diminum"</string>
+    <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Basikal"</string>
+    <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Tiada basikal"</string>
+    <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Penunggang basikal"</string>
+    <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Penunggang basikal gunung"</string>
+    <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Pejalan kaki"</string>
+    <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Tiada pejalan kaki"</string>
+    <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Kanak-kanak melintas"</string>
+    <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Simbol lelaki"</string>
+    <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Simbol wanita"</string>
+    <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Tandas"</string>
+    <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Simbol bayi"</string>
+    <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Tandas"</string>
+    <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"Tandas"</string>
+    <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Pancuran"</string>
+    <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Bilik mandi"</string>
+    <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Tab mandi"</string>
+    <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Kawalan pasport"</string>
+    <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Kastam"</string>
+    <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Tuntutan bagasi"</string>
+    <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Bagasi kiri"</string>
+</resources>
diff --git a/java/res/values-ms-rMY/strings-talkback-descriptions.xml b/java/res/values-ms-rMY/strings-talkback-descriptions.xml
index e47b639..842a2bf 100644
--- a/java/res/values-ms-rMY/strings-talkback-descriptions.xml
+++ b/java/res/values-ms-rMY/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Tempat"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simbol"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikon"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-ms-rMY/strings.xml b/java/res/values-ms-rMY/strings.xml
index cea2021..04ea273 100644
--- a/java/res/values-ms-rMY/strings.xml
+++ b/java/res/values-ms-rMY/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Pilihan input"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Arahan Log Penyelidikan"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Cari nama kenalan"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Penyemak ejaan menggunakan entri dari senarai kenalan anda"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Getar pada tekanan kekunci"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Bahasa input"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Sentuh lagi untuk menyimpan"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Kamus tersedia"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Dayakan maklum balas pengguna"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Bantu memperbaik editor kaedah input ini dengan menghantar statistik penggunaan dan laporan ranap secara automatik"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema papan kekunci"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Bahasa Inggeris (UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Bahasa Inggeris (Australia)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Dayakan"</string>
     <string name="not_now" msgid="6172462888202790482">"Bukan sekarang"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"The same input style already exists: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mod kajian kebolehgunaan"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Kelewatan tekan lama kekunci"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Tempoh getaran tekan kekunci"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Kelantangan bunyi tekan kekunci"</string>
diff --git a/java/res/values-nb/strings-action-keys.xml b/java/res/values-nb/strings-action-keys.xml
index d4acd36..af67b00 100644
--- a/java/res/values-nb/strings-action-keys.xml
+++ b/java/res/values-nb/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Forrige"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Ferdig"</string>
     <string name="label_send_key" msgid="482252074224462163">"Send"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Vent"</string>
 </resources>
diff --git a/java/res/values-nb/strings-talkback-descriptions.xml b/java/res/values-nb/strings-talkback-descriptions.xml
index cdf8057..27c68fd 100644
--- a/java/res/values-nb/strings-talkback-descriptions.xml
+++ b/java/res/values-nb/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Steder"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboler"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Smilefjes"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index e4f1603..f4a3a2d 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Inndataalternativer"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Kommandoer for undersøkelseslogging"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Slå opp kontaktnavn"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Stavekontrollen bruker oppføringer fra kontaktlisten din"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrer ved tastetrykk"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Inndataspråk"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Trykk på nytt for å lagre"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Ordbok tilgjengelig"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Aktiver brukertilbakemelding"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Ved å sende bruksstatistikk og programstopprapporter til Google automatisk, hjelper du oss med å gjøre redigeringsfunksjonen for denne inndatametoden enda bedre."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tastaturtema"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Engelsk (Storbritannia)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Engelsk (USA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Aktiver"</string>
     <string name="not_now" msgid="6172462888202790482">"Ikke nå"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Inndatastilen finnes allerede: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Bruksstudiemodus"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Forsinkelse lange tastetrykk"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrasjonstid ved tastetrykk"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Lydstyrke ved tastetrykk"</string>
diff --git a/java/res/values-ne-rNP/strings-action-keys.xml b/java/res/values-ne-rNP/strings-action-keys.xml
index 34b0a14..5c0a462 100644
--- a/java/res/values-ne-rNP/strings-action-keys.xml
+++ b/java/res/values-ne-rNP/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"पहिलो"</string>
     <string name="label_done_key" msgid="7564866296502630852">"भयो"</string>
     <string name="label_send_key" msgid="482252074224462163">"पठाउनुहोस्"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"रोक्नुहोस्"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"पर्खनुहोस्"</string>
 </resources>
diff --git a/java/res/values-ne-rNP/strings-emoji-descriptions.xml b/java/res/values-ne-rNP/strings-emoji-descriptions.xml
index cb13f50..3cf2971 100644
--- a/java/res/values-ne-rNP/strings-emoji-descriptions.xml
+++ b/java/res/values-ne-rNP/strings-emoji-descriptions.xml
@@ -20,1627 +20,827 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for spoken_emoji_00A9 (2859822817116803638) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_00AE (7708335454134589027) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_203C (153340916701508663) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2049 (4877256448299555371) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2122 (9188440722954720429) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2139 (9114342638917304327) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2194 (8055202727034946680) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2195 (8028122253301087407) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2196 (4019164898967854363) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2197 (4255723717709017801) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2198 (1452063451313622090) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2199 (6942722693368807849) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_21A9 (5204750172335111188) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_21AA (3950259884359247006) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_231A (6751448803233874993) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_231B (5956428809948426182) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23E9 (4022497733535162237) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23EA (2251396938087774944) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23EB (3746885195641491865) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23EC (7852372752901163416) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23F0 (8474219588750627870) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_23F3 (166900119581024371) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_24C2 (3948348737566038470) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25AA (7865181015100227349) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25AB (6446532820937381457) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25B6 (2423897708496040947) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25C0 (3595083440074484934) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25FB (4838691986881215419) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25FC (7008859564991191050) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25FD (7673439755069217479) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_25FE (6782214109919768923) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2600 (2272722634618990413) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2601 (6205136889311537150) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_260E (8670395193046424238) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2611 (4530550203347054611) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2614 (1612791247861229500) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2615 (3320562382424018588) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_261D (4690554173549768467) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_263A (3170094381521989300) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2648 (4621241062667020673) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2649 (7694461245947059086) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264A (1258074605878705030) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264B (4409219914377810956) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264C (6520255367817054163) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264D (1504758945499854018) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264E (2354847104530633519) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_264F (5822933280406416112) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2650 (4832481156714796163) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2651 (840953134601595090) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2652 (3586925968718775281) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2653 (8420547731496254492) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2660 (4541170554542412536) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2663 (3669352721942285724) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2665 (6347941599683765843) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2666 (8296769213401115999) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2668 (7063148281053820386) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_267B (21716857176812762) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_267F (8833496533226475443) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2693 (7443148847598433088) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26A0 (6272635532992727510) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26A1 (5604749644693339145) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26AA (8005748091690377153) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26AB (1655910278422753244) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26BD (1545218197938889737) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26BE (8959760533076498209) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26C4 (3045791757044255626) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26C5 (5580129409712578639) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26CE (8963656417276062998) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26D4 (2231451988209604130) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26EA (7513319636103804907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26F2 (7134115206158891037) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26F3 (4912302210162075465) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26F5 (4766328116769075217) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26FA (5888017494809199037) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_26FD (2417060622927453534) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2702 (4005741160717451912) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2705 (164605766946697759) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2708 (7153840886849268988) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2709 (2217319160724311369) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_270A (508347232762319473) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_270B (6640562128327753423) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_270C (1344288035704944581) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_270F (6108251586067318718) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2712 (6320544535087710482) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2714 (1968242800064001654) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2716 (511941294762977228) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2728 (5650330815808691881) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2733 (8915809595141157327) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2734 (4846583547980754332) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2744 (4350636647760161042) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2747 (3718282973916474455) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_274C (2752145886733295314) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_274E (4262918689871098338) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2753 (6935897159942119808) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2754 (7277504915105532954) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2755 (6853076969826960210) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2757 (3707907828776912174) -->
-    <skip />
+    <string name="spoken_emoji_00A9" msgid="2859822817116803638">"प्रतिलिपि अधिकार चिन्ह"</string>
+    <string name="spoken_emoji_00AE" msgid="7708335454134589027">"दर्ता चिन्ह"</string>
+    <string name="spoken_emoji_203C" msgid="153340916701508663">"दोहोरो उद्गार मार्क"</string>
+    <string name="spoken_emoji_2049" msgid="4877256448299555371">"विस्मयादिबोधक प्रश्न चिन्ह"</string>
+    <string name="spoken_emoji_2122" msgid="9188440722954720429">"व्यापार प्रतिक चिन्ह"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"सूचना स्रोत"</string>
+    <string name="spoken_emoji_2194" msgid="8055202727034946680">"दायाँ तीर बाँयामा"</string>
+    <string name="spoken_emoji_2195" msgid="8028122253301087407">"तल तीर माथिमा"</string>
+    <string name="spoken_emoji_2196" msgid="4019164898967854363">"उत्तर पश्चिम तीर"</string>
+    <string name="spoken_emoji_2197" msgid="4255723717709017801">"उत्तर पूर्वी तीर"</string>
+    <string name="spoken_emoji_2198" msgid="1452063451313622090">"दक्षिण पूर्व तीर"</string>
+    <string name="spoken_emoji_2199" msgid="6942722693368807849">"दक्षिण पश्चिम तीर"</string>
+    <string name="spoken_emoji_21A9" msgid="5204750172335111188">"बायाँ हुक साथ तीर"</string>
+    <string name="spoken_emoji_21AA" msgid="3950259884359247006">"दाँया हुक साथ तीर"</string>
+    <string name="spoken_emoji_231A" msgid="6751448803233874993">"हेर्नु"</string>
+    <string name="spoken_emoji_231B" msgid="5956428809948426182">"बलौटे घडी"</string>
+    <string name="spoken_emoji_23E9" msgid="4022497733535162237">"कालो दाँया देखाउने डबल त्रिकोण"</string>
+    <string name="spoken_emoji_23EA" msgid="2251396938087774944">"कालो बायाँ-इशारा डबल त्रिकोण"</string>
+    <string name="spoken_emoji_23EB" msgid="3746885195641491865">"कालो माथि देखाउने डबल त्रिकोण"</string>
+    <string name="spoken_emoji_23EC" msgid="7852372752901163416">"कालो तल-इशारा डबल त्रिकोण"</string>
+    <string name="spoken_emoji_23F0" msgid="8474219588750627870">"सचेतक घडी"</string>
+    <string name="spoken_emoji_23F3" msgid="166900119581024371">"बग्ने बालुवा साथ बालुवा घडी"</string>
+    <string name="spoken_emoji_24C2" msgid="3948348737566038470">"बृताकार भित्र ठुलो ल्याटिन अक्षर m"</string>
+    <string name="spoken_emoji_25AA" msgid="7865181015100227349">"कालो सानो वर्ग"</string>
+    <string name="spoken_emoji_25AB" msgid="6446532820937381457">"श्वेत सानो वर्ग"</string>
+    <string name="spoken_emoji_25B6" msgid="2423897708496040947">"कालो दाँया देखाउने त्रिकोण"</string>
+    <string name="spoken_emoji_25C0" msgid="3595083440074484934">"कालो बायाँ-इशारा त्रिकोण"</string>
+    <string name="spoken_emoji_25FB" msgid="4838691986881215419">"श्वेत मध्यम वर्ग"</string>
+    <string name="spoken_emoji_25FC" msgid="7008859564991191050">"कालो मध्यम वर्ग"</string>
+    <string name="spoken_emoji_25FD" msgid="7673439755069217479">"श्वेत मध्यम सानो वर्ग"</string>
+    <string name="spoken_emoji_25FE" msgid="6782214109919768923">"कालो मध्यम सानो वर्ग"</string>
+    <string name="spoken_emoji_2600" msgid="2272722634618990413">"किरण साथ कालो सूर्य"</string>
+    <string name="spoken_emoji_2601" msgid="6205136889311537150">"बादल"</string>
+    <string name="spoken_emoji_260E" msgid="8670395193046424238">"कालो टेलिफोन"</string>
+    <string name="spoken_emoji_2611" msgid="4530550203347054611">"जाँच साथ मतदान बक्स"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"वर्षा थोपा साथ छाता"</string>
+    <string name="spoken_emoji_2615" msgid="3320562382424018588">"तातो पेय"</string>
+    <string name="spoken_emoji_261D" msgid="4690554173549768467">"श्वेत अप सूचकांक इशारा"</string>
+    <string name="spoken_emoji_263A" msgid="3170094381521989300">"श्वेत हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_2648" msgid="4621241062667020673">"मेष"</string>
+    <string name="spoken_emoji_2649" msgid="7694461245947059086">"वृष"</string>
+    <string name="spoken_emoji_264A" msgid="1258074605878705030">"मिथुन"</string>
+    <string name="spoken_emoji_264B" msgid="4409219914377810956">"कर्कट"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"सिंह"</string>
+    <string name="spoken_emoji_264D" msgid="1504758945499854018">"कन्या"</string>
+    <string name="spoken_emoji_264E" msgid="2354847104530633519">"तुला"</string>
+    <string name="spoken_emoji_264F" msgid="5822933280406416112">"वृष"</string>
+    <string name="spoken_emoji_2650" msgid="4832481156714796163">"धनु"</string>
+    <string name="spoken_emoji_2651" msgid="840953134601595090">"मकर"</string>
+    <string name="spoken_emoji_2652" msgid="3586925968718775281">"कुंभ"</string>
+    <string name="spoken_emoji_2653" msgid="8420547731496254492">"मीन"</string>
+    <string name="spoken_emoji_2660" msgid="4541170554542412536">"कालो कुदाल सुट"</string>
+    <string name="spoken_emoji_2663" msgid="3669352721942285724">"कालो क्लब सुट"</string>
+    <string name="spoken_emoji_2665" msgid="6347941599683765843">"कालो हृदय सुट"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"कालो हीरा सुट"</string>
+    <string name="spoken_emoji_2668" msgid="7063148281053820386">"तातो स्प्रिंग्स"</string>
+    <string name="spoken_emoji_267B" msgid="21716857176812762">"कालो विश्वव्यापी रिसाइकिलिंग चिन्ह"</string>
+    <string name="spoken_emoji_267F" msgid="8833496533226475443">"ह्वीलचेयर चिन्ह"</string>
+    <string name="spoken_emoji_2693" msgid="7443148847598433088">"अंकुश"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"चेतावनी चिन्ह"</string>
+    <string name="spoken_emoji_26A1" msgid="5604749644693339145">"उच्च भोल्टेज चिन्ह"</string>
+    <string name="spoken_emoji_26AA" msgid="8005748091690377153">"मध्यम सफेद वृत्त"</string>
+    <string name="spoken_emoji_26AB" msgid="1655910278422753244">"मध्यम कालो वृत्त"</string>
+    <string name="spoken_emoji_26BD" msgid="1545218197938889737">"फुटबल"</string>
+    <string name="spoken_emoji_26BE" msgid="8959760533076498209">"बेसबल"</string>
+    <string name="spoken_emoji_26C4" msgid="3045791757044255626">"बिना हिउँ हिममानब"</string>
+    <string name="spoken_emoji_26C5" msgid="5580129409712578639">"बादलको पछाडी सूर्य"</string>
+    <string name="spoken_emoji_26CE" msgid="8963656417276062998">"तारामंडल Ophiuchus"</string>
+    <string name="spoken_emoji_26D4" msgid="2231451988209604130">"प्रवेश निषेध"</string>
+    <string name="spoken_emoji_26EA" msgid="7513319636103804907">"चर्च"</string>
+    <string name="spoken_emoji_26F2" msgid="7134115206158891037">"फोहरा"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"प्वालमा झण्डा"</string>
+    <string name="spoken_emoji_26F5" msgid="4766328116769075217">"जहाजयात्रा"</string>
+    <string name="spoken_emoji_26FA" msgid="5888017494809199037">"पाल"</string>
+    <string name="spoken_emoji_26FD" msgid="2417060622927453534">"इन्धन पम्प"</string>
+    <string name="spoken_emoji_2702" msgid="4005741160717451912">"कालो कैंची"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"श्वेत भारी चेक मार्क"</string>
+    <string name="spoken_emoji_2708" msgid="7153840886849268988">"हवाइजहाज"</string>
+    <string name="spoken_emoji_2709" msgid="2217319160724311369">"खाम"</string>
+    <string name="spoken_emoji_270A" msgid="508347232762319473">"उठेको मुट्ठी"</string>
+    <string name="spoken_emoji_270B" msgid="6640562128327753423">"उठाएको हात"</string>
+    <string name="spoken_emoji_270C" msgid="1344288035704944581">"विजयी हात"</string>
+    <string name="spoken_emoji_270F" msgid="6108251586067318718">"शिसाकलम"</string>
+    <string name="spoken_emoji_2712" msgid="6320544535087710482">"कालो निब"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"भारी चेक मार्क"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"भारी गुणन x"</string>
+    <string name="spoken_emoji_2728" msgid="5650330815808691881">"झिल्काहरु"</string>
+    <string name="spoken_emoji_2733" msgid="8915809595141157327">"आठधर्के तारांकन"</string>
+    <string name="spoken_emoji_2734" msgid="4846583547980754332">"आठ चुच्चे कालो तारा"</string>
+    <string name="spoken_emoji_2744" msgid="4350636647760161042">"हिमपात"</string>
+    <string name="spoken_emoji_2747" msgid="3718282973916474455">"चमक"</string>
+    <string name="spoken_emoji_274C" msgid="2752145886733295314">"क्रस चिन्ह"</string>
+    <string name="spoken_emoji_274E" msgid="4262918689871098338">"उल्टो चारपाते काटिएको चिन्ह"</string>
+    <string name="spoken_emoji_2753" msgid="6935897159942119808">"कालो प्रश्न चिन्ह आभूषण"</string>
+    <string name="spoken_emoji_2754" msgid="7277504915105532954">"श्वेत प्रश्न चिन्ह आभूषण"</string>
+    <string name="spoken_emoji_2755" msgid="6853076969826960210">"श्वेत उद्गार चिन्ह आभूषण"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"भारी उद्गार चिन्ह प्रतिक"</string>
     <string name="spoken_emoji_2764" msgid="4214257843609432167">"दह्रो कालो हृदय"</string>
-    <!-- no translation found for spoken_emoji_2795 (6563954833786162168) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2796 (5990926508250772777) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2797 (24694184172879174) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_27A1 (3513434778263100580) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_27B0 (203395646864662198) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_27BF (4940514642375640510) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2934 (9062130477982973457) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2935 (6198710960720232074) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B05 (4813405635410707690) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B06 (1223172079106250748) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B07 (1599124424746596150) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B1B (3461247311988501626) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B1C (5793146430145248915) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B50 (3850845519526950524) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_2B55 (9137882158811541824) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_3030 (4609172241893565639) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_303D (2545833934975907505) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_3297 (928912923628973800) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_3299 (3930347573693668426) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F004 (1705216181345894600) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F0CF (7601493592085987866) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F170 (3817698686602826773) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F171 (3684218589626650242) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F17E (2978809190364779029) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F17F (463634348668462040) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F18E (1650705325221496768) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F191 (5386969264431429221) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F192 (8324226436829162496) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F193 (4731758603321515364) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F194 (4903128609556175887) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F195 (1433142500411060924) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F196 (8825160701159634202) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F197 (7841079241554176535) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F198 (7020298909426960622) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F199 (5971252667136235630) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F19A (4557270135899843959) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F201 (7000490044681139002) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F202 (8560906958695043947) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F21A (1496435317324514033) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F22F (609797148862445402) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F232 (8125716331632035820) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F233 (8749401090457355028) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F234 (3546951604285970768) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F235 (5320186982841793711) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F236 (879755752069393034) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F237 (6741807001205851437) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F238 (5504414186438196912) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F239 (1634067311597618959) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F23A (3107862957630169536) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F250 (6586943922806727907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F251 (9099032855993346948) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F300 (4720098285295840383) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F301 (3601962477653752974) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F302 (3404357123421753593) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F303 (3899301321538188206) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F304 (2767148930689050040) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F305 (9165812924292061196) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F306 (5889294736109193104) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F307 (2714290867291163713) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F308 (688704703985173377) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F309 (6217981957992313528) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30A (4329309263152110893) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30B (5729430693700923112) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30C (2961230863217543082) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30D (1113905673331547953) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30E (5278512600749223671) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F30F (5718144880978707493) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F310 (2959618582975247601) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F311 (623906380914895542) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F312 (4458575672576125401) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F313 (7599181787989497294) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F314 (4898293184964365413) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F315 (3218117051779496309) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F316 (2061317145777689569) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F317 (2721090687319539049) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F318 (3814091755648887570) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F319 (4074299824890459465) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31A (3092285278116977103) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31B (2658562138386927881) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31C (7914768515547867384) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31D (1925730459848297182) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31E (8022112382524084418) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F31F (1051661214137766369) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F320 (5450591979068216115) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F330 (3115760035618051575) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F331 (5658888205290008691) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F332 (2935650450421165938) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F333 (5898847427062482675) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F334 (6183375224678417894) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F335 (5352418412103584941) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F337 (3839107352363566289) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F338 (6389970364260468490) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F339 (9128891447985256151) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33A (2025828400095233078) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33B (8163868254348448552) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33C (6850371206262335812) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33D (9033484052864509610) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33E (2540173396638444120) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F33F (4384823344364908558) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F340 (3494255459156499305) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F341 (4581959481754990158) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F342 (3119068426871821222) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F343 (2663317495805149004) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F344 (2738517881678722159) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F345 (6135288642349085554) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F346 (2075395322785406367) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F347 (7753453754963890571) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F348 (1247076837284932788) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F349 (5563054555180611086) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F34A (4688661208570160524) -->
-    <skip />
-    <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"कागती"</string>
-    <!-- no translation found for spoken_emoji_1F34C (3712827239858159474) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F34D (7712521967162622936) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F34E (1859466882598614228) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F34F (8251711032295005633) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F350 (625802980159197701) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F351 (4269460120610911895) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F352 (965600953360182635) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F353 (7068623879906925592) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F354 (45162285238888494) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F355 (9157587635526433283) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F356 (2667196119149852244) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F357 (8022817413851052256) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F358 (3042693264748036476) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F359 (3988148661730121958) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35A (1763824172198327268) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35B (62530406745717835) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35C (7537756539198945509) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35D (8173523083861875196) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35E (2935428307894662571) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F35F (4840297386785728443) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F360 (4094659855684686801) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F361 (6475486395784096109) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F362 (5004692577661076275) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F363 (1606603765717743806) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F364 (6550457766169570811) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F365 (4963815540953316307) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F366 (7862401745277049404) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F367 (7447972978281980414) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F368 (7790003146142724913) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F369 (7383712944084857350) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36A (2726271795913042295) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36B (6342163604299875931) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36C (2168934753998218790) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36D (3671507903799975792) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F36E (4630541402785165902) -->
-    <skip />
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"भारी प्लस चिन्ह"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"भारी ऋण चिन्ह"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"भारी विभाजन चिन्ह"</string>
+    <string name="spoken_emoji_27A1" msgid="3513434778263100580">"कालो दाँयातीर तीर"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"घुम्रिएको फेरो"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"दोहोरो घुम्रिएको फेरो"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"दाँयातीर इशारा तीर त्यसपछि माथिको घुमाँइ"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"दाँयातीर इशारा तीर त्यसपछि तलको घुमाँइ"</string>
+    <string name="spoken_emoji_2B05" msgid="4813405635410707690">"कालोतीर बायाँतर्फ"</string>
+    <string name="spoken_emoji_2B06" msgid="1223172079106250748">"कालो तीर माथि तर्फ"</string>
+    <string name="spoken_emoji_2B07" msgid="1599124424746596150">"कालो तीर तल तर्फ"</string>
+    <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"कालो ठूलो वर्ग"</string>
+    <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"सेतो ठूलो वर्ग"</string>
+    <string name="spoken_emoji_2B50" msgid="3850845519526950524">"सेतो मध्यम तारा"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"भारी ठूलो वृत्त"</string>
+    <string name="spoken_emoji_3030" msgid="4609172241893565639">"तरंग ड्यास"</string>
+    <string name="spoken_emoji_303D" msgid="2545833934975907505">"खण्ड बैकल्पिक मार्क"</string>
+    <string name="spoken_emoji_3297" msgid="928912923628973800">"बृताकार भाबाङ्कन बधाई"</string>
+    <string name="spoken_emoji_3299" msgid="3930347573693668426">"बृताकार भाबाङ्कन रहस्य"</string>
+    <string name="spoken_emoji_1F004" msgid="1705216181345894600">"माजोङ टाइल रातो ड्रागन"</string>
+    <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"खेल्ने तास कालो जोकर"</string>
+    <string name="spoken_emoji_1F170" msgid="3817698686602826773">"रक्त प्रकार A"</string>
+    <string name="spoken_emoji_1F171" msgid="3684218589626650242">"रक्त प्रकार B"</string>
+    <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"रक्त प्रकार O"</string>
+    <string name="spoken_emoji_1F17F" msgid="463634348668462040">"पार्क्ङिग स्थल"</string>
+    <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"रक्त प्रकार AB"</string>
+    <string name="spoken_emoji_1F191" msgid="5386969264431429221">"चारपाटे CL"</string>
+    <string name="spoken_emoji_1F192" msgid="8324226436829162496">"चारपाते सुन्दर"</string>
+    <string name="spoken_emoji_1F193" msgid="4731758603321515364">"चारपाते मुक्त"</string>
+    <string name="spoken_emoji_1F194" msgid="4903128609556175887">"चारपाते ID"</string>
+    <string name="spoken_emoji_1F195" msgid="1433142500411060924">"चारपाते नयाँ"</string>
+    <string name="spoken_emoji_1F196" msgid="8825160701159634202">"चारपाते N G"</string>
+    <string name="spoken_emoji_1F197" msgid="7841079241554176535">"चारपाते ठीक"</string>
+    <string name="spoken_emoji_1F198" msgid="7020298909426960622">"चारपाते SOS"</string>
+    <string name="spoken_emoji_1F199" msgid="5971252667136235630">"उद्गार चिन्ह साथ चारपाते"</string>
+    <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"चारपाते बिरुद्ध"</string>
+    <string name="spoken_emoji_1F201" msgid="7000490044681139002">"यहाँ चारपाते काताकाना"</string>
+    <string name="spoken_emoji_1F202" msgid="8560906958695043947">"चारपाते काताकाना सेवा"</string>
+    <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"चारपाते भाबाङ्कन -निःशुल्क"</string>
+    <string name="spoken_emoji_1F22F" msgid="609797148862445402">"चारपाते भाबाङ्कन सुरक्षित-सीट"</string>
+    <string name="spoken_emoji_1F232" msgid="8125716331632035820">"चारपाते भाबाङ्कन निषेध"</string>
+    <string name="spoken_emoji_1F233" msgid="8749401090457355028">"चारपाते भाबाङ्कन रिक्तता"</string>
+    <string name="spoken_emoji_1F234" msgid="3546951604285970768">"चारपाते भाबाङ्कन स्वीकृति"</string>
+    <string name="spoken_emoji_1F235" msgid="5320186982841793711">"चारपाते भाबाङ्कन पूर्ण अधिभोग"</string>
+    <string name="spoken_emoji_1F236" msgid="879755752069393034">"चारपाते भाबाङ्कन भुक्तानी"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"चारपाते भाबाङ्कन मासिक"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"चारपाते भाबाङ्कन अनुप्रयोग"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"चारपाते भाबाङ्कन छूट"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"व्यापारमा चारपाते भाबाङ्कन"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"बृताकार भाबाङ्कन लाभ"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"बृताकार भाबाङ्कन स्वीकार"</string>
+    <string name="spoken_emoji_1F300" msgid="4720098285295840383">"चक्रवात"</string>
+    <string name="spoken_emoji_1F301" msgid="3601962477653752974">"धुवाँदार"</string>
+    <string name="spoken_emoji_1F302" msgid="3404357123421753593">"बन्द छाता"</string>
+    <string name="spoken_emoji_1F303" msgid="3899301321538188206">"ताराहरूका साथ रात"</string>
+    <string name="spoken_emoji_1F304" msgid="2767148930689050040">"पहाडमा सूर्योदय"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"सूर्योदय"</string>
+    <string name="spoken_emoji_1F306" msgid="5889294736109193104">"धुलो रहित शहर"</string>
+    <string name="spoken_emoji_1F307" msgid="2714290867291163713">"भवनहरुमा सूर्यास्त"</string>
+    <string name="spoken_emoji_1F308" msgid="688704703985173377">"ईन्द्रेणी"</string>
+    <string name="spoken_emoji_1F309" msgid="6217981957992313528">"रातमा पुल"</string>
+    <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"जल लहर"</string>
+    <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"ज्वालामुखी"</string>
+    <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"दुधेली बाटो"</string>
+    <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"पृथ्बी विश्व युरोप-अफ्रिका"</string>
+    <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"पृथ्बी विश्व अमेरीकास"</string>
+    <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"पृथ्बी विश्व एशिया-अस्ट्रेलिया"</string>
+    <string name="spoken_emoji_1F310" msgid="2959618582975247601">"मेरीडियन साथ विश्व"</string>
+    <string name="spoken_emoji_1F311" msgid="623906380914895542">"नयाँ चन्द्रमाको चिन्ह"</string>
+    <string name="spoken_emoji_1F312" msgid="4458575672576125401">"पहेँलो अर्धचन्द्राकार चन्द्र प्रतीक"</string>
+    <string name="spoken_emoji_1F313" msgid="7599181787989497294">"पहिलो चौथाई चन्द्र प्रतीक"</string>
+    <string name="spoken_emoji_1F314" msgid="4898293184964365413">"पहेँलो बाँदर चन्द्र प्रतीक"</string>
+    <string name="spoken_emoji_1F315" msgid="3218117051779496309">"पूर्ण चन्द्र प्रतीक"</string>
+    <string name="spoken_emoji_1F316" msgid="2061317145777689569">"थकित बाँदर चन्द्र प्रतीक"</string>
+    <string name="spoken_emoji_1F317" msgid="2721090687319539049">"अन्तिम चौथाई चन्द्र प्रतीक"</string>
+    <string name="spoken_emoji_1F318" msgid="3814091755648887570">"चेतावनी अर्धचन्द्राकार चन्द्र प्रतीक"</string>
+    <string name="spoken_emoji_1F319" msgid="4074299824890459465">"अर्धचन्द्राकार चन्द्र"</string>
+    <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"नयाँ चन्द्रामुहार"</string>
+    <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"पहिलो चौथाइ चन्द्रामुहार"</string>
+    <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"अन्तिम चौथाइ चन्द्रामुहार"</string>
+    <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"पूर्ण चन्द्रामुहार"</string>
+    <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"सूर्यामुहार"</string>
+    <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"चमकिलो तारा"</string>
+    <string name="spoken_emoji_1F320" msgid="5450591979068216115">"सुटिङ तारा"</string>
+    <string name="spoken_emoji_1F330" msgid="3115760035618051575">"ओखर"</string>
+    <string name="spoken_emoji_1F331" msgid="5658888205290008691">"सिडिङ"</string>
+    <string name="spoken_emoji_1F332" msgid="2935650450421165938">"सदाबहार रूख"</string>
+    <string name="spoken_emoji_1F333" msgid="5898847427062482675">"पतझड रूख"</string>
+    <string name="spoken_emoji_1F334" msgid="6183375224678417894">"ताड रूख"</string>
+    <string name="spoken_emoji_1F335" msgid="5352418412103584941">"सिउँडी"</string>
+    <string name="spoken_emoji_1F337" msgid="3839107352363566289">"तुलिप"</string>
+    <string name="spoken_emoji_1F338" msgid="6389970364260468490">"चेरी फूल"</string>
+    <string name="spoken_emoji_1F339" msgid="9128891447985256151">"गुलाब"</string>
+    <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"जाभाकुसुम"</string>
+    <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"सूर्यमुखी"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"फूल"</string>
+    <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"काने मकै"</string>
+    <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"काने धान"</string>
+    <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"जडिबुटी"</string>
+    <string name="spoken_emoji_1F340" msgid="3494255459156499305">"चार पाते क्लोभर"</string>
+    <string name="spoken_emoji_1F341" msgid="4581959481754990158">"मेपल पातको"</string>
+    <string name="spoken_emoji_1F342" msgid="3119068426871821222">"झरेको पात"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"पात हावामा उड्दै"</string>
+    <string name="spoken_emoji_1F344" msgid="2738517881678722159">"च्याँउ"</string>
+    <string name="spoken_emoji_1F345" msgid="6135288642349085554">"गोलभेंडा"</string>
+    <string name="spoken_emoji_1F346" msgid="2075395322785406367">"डल्लो भन्टा"</string>
+    <string name="spoken_emoji_1F347" msgid="7753453754963890571">"अंगूर"</string>
+    <string name="spoken_emoji_1F348" msgid="1247076837284932788">"तरबूजा"</string>
+    <string name="spoken_emoji_1F349" msgid="5563054555180611086">"खरबूजा"</string>
+    <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"सुन्तले रङ"</string>
+    <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"लेमन"</string>
+    <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"केरा"</string>
+    <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"भुईंकतहर"</string>
+    <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"रातो स्याउ"</string>
+    <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"हरियो स्याउ"</string>
+    <string name="spoken_emoji_1F350" msgid="625802980159197701">"नाशपाती"</string>
+    <string name="spoken_emoji_1F351" msgid="4269460120610911895">"बयर"</string>
+    <string name="spoken_emoji_1F352" msgid="965600953360182635">"चेरी"</string>
+    <string name="spoken_emoji_1F353" msgid="7068623879906925592">"स्ट्रबेरी"</string>
+    <string name="spoken_emoji_1F354" msgid="45162285238888494">"ह्यामबर्गर"</string>
+    <string name="spoken_emoji_1F355" msgid="9157587635526433283">"पिज्जा टुक्रा"</string>
+    <string name="spoken_emoji_1F356" msgid="2667196119149852244">"हड्डीमा मासु"</string>
+    <string name="spoken_emoji_1F357" msgid="8022817413851052256">"कुखुराको खुट्टा"</string>
+    <string name="spoken_emoji_1F358" msgid="3042693264748036476">"चामलको पातलो बिस्कुट"</string>
+    <string name="spoken_emoji_1F359" msgid="3988148661730121958">"भातको बल"</string>
+    <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"पकाएको भात"</string>
+    <string name="spoken_emoji_1F35B" msgid="62530406745717835">"करी र भात"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"उमालेको कचौरा"</string>
+    <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"स्पैगेट्टी"</string>
+    <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"रोटी"</string>
+    <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"फ्रान्सेली फ्राइज"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"रोस्ट गरेको मिठो आलु"</string>
+    <string name="spoken_emoji_1F361" msgid="6475486395784096109">"जापानी मिठाई"</string>
+    <string name="spoken_emoji_1F362" msgid="5004692577661076275">"ओदेन (जापानी खाना)"</string>
+    <string name="spoken_emoji_1F363" msgid="1606603765717743806">"भात र काँचो माछा"</string>
+    <string name="spoken_emoji_1F364" msgid="6550457766169570811">"तारेको सानो माछा"</string>
+    <string name="spoken_emoji_1F365" msgid="4963815540953316307">"घुमाउरो डिजाइनमा माछा केक"</string>
+    <string name="spoken_emoji_1F366" msgid="7862401745277049404">"नरम आइसक्रिम"</string>
+    <string name="spoken_emoji_1F367" msgid="7447972978281980414">"चुर्ण बरफ"</string>
+    <string name="spoken_emoji_1F368" msgid="7790003146142724913">"आइसक्रीम"</string>
+    <string name="spoken_emoji_1F369" msgid="7383712944084857350">"डोनट"</string>
+    <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"कुकीज"</string>
+    <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"चकलेट बार"</string>
+    <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"क्यान्डी"</string>
+    <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"लालीपप"</string>
+    <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"कस्तार्ड"</string>
     <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"महदानी"</string>
-    <!-- no translation found for spoken_emoji_1F370 (7243244547866114951) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F371 (6731527040552916358) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F372 (1635035323832181733) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F373 (7799289534289221045) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F374 (5973820884987069131) -->
-    <skip />
+    <string name="spoken_emoji_1F370" msgid="7243244547866114951">"सर्टकेक"</string>
+    <string name="spoken_emoji_1F371" msgid="6731527040552916358">"टिफिन बट्टा"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"खानाको भाँडो"</string>
+    <string name="spoken_emoji_1F373" msgid="7799289534289221045">"पकाउँदै"</string>
+    <string name="spoken_emoji_1F374" msgid="5973820884987069131">"काँटा र चक्कु"</string>
     <string name="spoken_emoji_1F375" msgid="1074832087699617700">"ह्यान्डल बिनाको चियाकप"</string>
-    <!-- no translation found for spoken_emoji_1F376 (6499274685584852067) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F377 (1762398562314172075) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F378 (5528234560590117516) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F379 (790581290787943325) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F37A (391966822450619516) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F37B (9015043286465670662) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F37C (2532113819464508894) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F380 (3487363857092458827) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F381 (614180683680675444) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F382 (4720497171946687501) -->
-    <skip />
+    <string name="spoken_emoji_1F376" msgid="6499274685584852067">"शाके (जापानी रक्सी) बोतल र प्याला"</string>
+    <string name="spoken_emoji_1F377" msgid="1762398562314172075">"रक्सी गिलास"</string>
+    <string name="spoken_emoji_1F378" msgid="5528234560590117516">"ककटेल गिलास"</string>
+    <string name="spoken_emoji_1F379" msgid="790581290787943325">"ट्रपिकल पेयपदार्थ"</string>
+    <string name="spoken_emoji_1F37A" msgid="391966822450619516">"बियर मग"</string>
+    <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"बियर मग छुआएको"</string>
+    <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"बच्चाको बोतल"</string>
+    <string name="spoken_emoji_1F380" msgid="3487363857092458827">"रिबन"</string>
+    <string name="spoken_emoji_1F381" msgid="614180683680675444">"बेरिएको उपहार"</string>
+    <string name="spoken_emoji_1F382" msgid="4720497171946687501">"जन्मदिनको केक"</string>
     <string name="spoken_emoji_1F383" msgid="3536505941578757623">"ज्याक-o-लालटिन"</string>
-    <!-- no translation found for spoken_emoji_1F384 (1797870204479059004) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F385 (1754174063483626367) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F386 (2130445450758114746) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F387 (3403182563117999933) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F388 (2903047203723251804) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F389 (2352830665883549388) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F38A (6280428984773641322) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F38B (4902225837479015489) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F38C (7623268024030989365) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F38D (8237542796124408528) -->
-    <skip />
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"क्रिसमस रूख"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"सान्ताक्लस"</string>
+    <string name="spoken_emoji_1F386" msgid="2130445450758114746">"आतसबाजी"</string>
+    <string name="spoken_emoji_1F387" msgid="3403182563117999933">"आतसबाजी झिल्का"</string>
+    <string name="spoken_emoji_1F388" msgid="2903047203723251804">"बेलुन"</string>
+    <string name="spoken_emoji_1F389" msgid="2352830665883549388">"पार्टी भंडुवा"</string>
+    <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"रङगिन बल"</string>
+    <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"तानाबाता रूख"</string>
+    <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"क्रस झण्डा"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"पाइन सजावट"</string>
     <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"जापानी गुडिया"</string>
-    <!-- no translation found for spoken_emoji_1F38F (8754091376829552844) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F390 (8903307048095431374) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F391 (2134952069191911841) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F392 (6380405493914304737) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F393 (6947890064872470996) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A0 (3572095190082826057) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A1 (4300565511681058798) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A2 (15486093912232140) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A3 (921739319504942924) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A4 (7497596355346856950) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A5 (4290497821228183002) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A6 (26019057872319055) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A7 (837856608794094105) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A8 (2332260356509244587) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3A9 (9045869366525115256) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AA (5728760354237132) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AB (1657997517193216284) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AC (4317366554314492152) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AD (607157286336130470) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AE (2902308174671548150) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3AF (5420539221790296407) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B0 (7440244806527891956) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B1 (545544382391379234) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B2 (8302262034774787493) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B3 (5180870610771027520) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B4 (4723852033266071564) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B5 (1998470239850548554) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B6 (3827730457113941705) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3B7 (5503403099445042180) -->
-    <skip />
+    <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"कार्प तोरण"</string>
+    <string name="spoken_emoji_1F390" msgid="8903307048095431374">"हावा झंकार"</string>
+    <string name="spoken_emoji_1F391" msgid="2134952069191911841">"चन्द्र अबलोकन समारोह"</string>
+    <string name="spoken_emoji_1F392" msgid="6380405493914304737">"स्कूल झोला"</string>
+    <string name="spoken_emoji_1F393" msgid="6947890064872470996">"दिक्षान्त समारोह टोपी"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"खेलाची घोडा"</string>
+    <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"रोटेपिङ्"</string>
+    <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"रोलर कोस्टर"</string>
+    <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"माछामार्ने पोल र माछा"</string>
+    <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"माइक्रोफोन"</string>
+    <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"चलचित्र क्यामेरा"</string>
+    <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"चलचित्र"</string>
+    <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"हेडफोन"</string>
+    <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"कलाकार रङदानी"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"शीर्ष टोपी"</string>
+    <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"सर्कस पाल"</string>
+    <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"टिकट"</string>
+    <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"क्लापर बोर्ड"</string>
+    <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"कला प्रदर्शन"</string>
+    <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"भिडियो खेल"</string>
+    <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"प्रत्यक्ष निशाना"</string>
+    <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"स्लट मिसिन"</string>
+    <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"बिलियर्ड्स"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"पोट"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"बलिङ"</string>
+    <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"फूलछापे तास"</string>
+    <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"साङ्गीतिक अक्षर"</string>
+    <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"बहु साङ्गीतिक अक्षर"</string>
+    <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"सेक्सोफोन"</string>
     <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"गितार"</string>
-    <!-- no translation found for spoken_emoji_1F3B9 (5596295757967881451) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3BA (4284064120340683558) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3BB (2856598510069988745) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3BC (1608424748821446230) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3BD (5490786111375627777) -->
-    <skip />
+    <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"साङ्गीतिक कुञ्जीपाटी"</string>
+    <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"बिगुल"</string>
+    <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"भ्वायलिन"</string>
+    <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"साङ्गीतिक स्कोर"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"तेर्सो धर्के जर्सी"</string>
     <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"टेनिस रैकेट र बल"</string>
-    <!-- no translation found for spoken_emoji_1F3BF (6862405997423247921) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C0 (7421420756115104085) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C1 (6926537251677319922) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C2 (5708596929237987082) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C3 (5850982999510115824) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C4 (8468355585994639838) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C6 (9094474706847545409) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C7 (8172206200368370116) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C8 (5619171461277597709) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3C9 (6371294008765871043) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3CA (130977831787806932) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E0 (6277213201655811842) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E1 (233476176077538885) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E2 (919736380093964570) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E3 (6177606081825094184) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E4 (717377871070970293) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E5 (1350532500431776780) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E6 (342132788513806214) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E7 (6322352038284944265) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E8 (5864918444350599907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3E9 (7830416185375326938) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3EA (5081084413084360479) -->
-    <skip />
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"स्की र स्की बुट"</string>
+    <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"बास्केटबल र रिंग"</string>
+    <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"चेकढाँचा झण्डा"</string>
+    <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"स्नोबोर्दर"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"धावक"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"सर्फ़र"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"शिल"</string>
+    <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"घोडा दौड"</string>
+    <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"अमेरिकी फुटबल"</string>
+    <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"रग्बी फुटबल"</string>
+    <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"पौडीबाज"</string>
+    <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"घर निर्माण"</string>
+    <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"बगैचा सहित घर"</string>
+    <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"कार्यालय भवन"</string>
+    <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"जापानी हुलाक"</string>
+    <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"युरोपेली हुलाक"</string>
+    <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"अस्पताल"</string>
+    <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"बैंक"</string>
+    <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"स्वचालित पारंगत मिसिन"</string>
+    <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"होटल"</string>
+    <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"मायालु होटल"</string>
+    <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"सुविधाजनक स्टोर"</string>
     <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"स्कूल"</string>
-    <!-- no translation found for spoken_emoji_1F3EC (4845978861878295154) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3ED (3980316226665215370) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3EE (1253964276770550248) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3EF (1128975573507389883) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F3F0 (1544632297502291578) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F400 (2063034795679578294) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F401 (6736421616217369594) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F402 (7276670995895485604) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F403 (8045709541897118928) -->
-    <skip />
+    <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"डिपार्टमेन्ट स्टोर"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"कारखाना"</string>
+    <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"इजाकाया लालटेन"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"जापानी किल्ला"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"युरोपेली किल्ला"</string>
+    <string name="spoken_emoji_1F400" msgid="2063034795679578294">"मुसा"</string>
+    <string name="spoken_emoji_1F401" msgid="6736421616217369594">"घरेलु मुसा"</string>
+    <string name="spoken_emoji_1F402" msgid="7276670995895485604">"साँढे"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"जल भैंसी"</string>
     <string name="spoken_emoji_1F404" msgid="5240777285676662335">"गाई"</string>
-    <!-- no translation found for spoken_emoji_1F406 (5163461930159540018) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F407 (6905370221172708160) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F408 (1362164550508207284) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F409 (8476130983168866013) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40A (1149626786411545043) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40B (5199104921208397643) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40C (2704006052881702675) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40D (8648186663643157522) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40E (7219137467573327268) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F40F (7834336676729040395) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F410 (8686765722255775031) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F411 (3585715397876383525) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F412 (4924794582980077838) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F413 (1460475310405677377) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F414 (5857296282631892219) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F415 (5920041074892949527) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F416 (4362403392912540286) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F417 (6836978415840795128) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F418 (7926161463897783691) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F419 (1055233959755784186) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41A (5195666556511558060) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41B (7652480167465557832) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41C (1123461148697574239) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41D (718579308764058851) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41E (6766305509608115467) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F41F (1207261298343160838) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F420 (1041145003133609221) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F421 (1748378324417438751) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F422 (4106724877523329148) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F423 (4077407945958691907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F424 (6911326019270172283) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F425 (5466514196557885577) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F426 (2163979138772892755) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F427 (3585670324511212961) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F428 (7955440808647898579) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F429 (5028269352809819035) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42A (4681926706404032484) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42B (2725166074981558322) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42C (6764791873413727085) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42D (1033643138546864251) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42E (8099223337120508820) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F42F (2104743989330781572) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F430 (525492897063150160) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F431 (6051358666235016851) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F432 (7698001871193018305) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F433 (3762356053512899326) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F434 (3619943222159943226) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F435 (59199202683252958) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F436 (340544719369009828) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F437 (1219818379784982585) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F438 (9128124743321008210) -->
-    <skip />
+    <string name="spoken_emoji_1F406" msgid="5163461930159540018">"चितुवा"</string>
+    <string name="spoken_emoji_1F407" msgid="6905370221172708160">"खरायो"</string>
+    <string name="spoken_emoji_1F408" msgid="1362164550508207284">"बिरालो"</string>
+    <string name="spoken_emoji_1F409" msgid="8476130983168866013">"ड्रागन"</string>
+    <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"गोही"</string>
+    <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"ह्वेल"</string>
+    <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"घोंघा"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"साँप"</string>
+    <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"घोडा"</string>
+    <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"मेष"</string>
+    <string name="spoken_emoji_1F410" msgid="8686765722255775031">"बाख्रा"</string>
+    <string name="spoken_emoji_1F411" msgid="3585715397876383525">"भेडा"</string>
+    <string name="spoken_emoji_1F412" msgid="4924794582980077838">"बाँदर"</string>
+    <string name="spoken_emoji_1F413" msgid="1460475310405677377">"रोस्टर कुखुरा"</string>
+    <string name="spoken_emoji_1F414" msgid="5857296282631892219">"कुखुरा"</string>
+    <string name="spoken_emoji_1F415" msgid="5920041074892949527">"कुकुर"</string>
+    <string name="spoken_emoji_1F416" msgid="4362403392912540286">"सुँगुर"</string>
+    <string name="spoken_emoji_1F417" msgid="6836978415840795128">"बँदेल"</string>
+    <string name="spoken_emoji_1F418" msgid="7926161463897783691">"हात्ती"</string>
+    <string name="spoken_emoji_1F419" msgid="1055233959755784186">"अक्टोपस"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"शंख"</string>
+    <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"कनसुत्लो"</string>
+    <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"कमिला"</string>
+    <string name="spoken_emoji_1F41D" msgid="718579308764058851">"माहुरी"</string>
+    <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"खपटे कीरा"</string>
+    <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"माछा"</string>
+    <string name="spoken_emoji_1F420" msgid="1041145003133609221">"ट्रपिकल माछा"</string>
+    <string name="spoken_emoji_1F421" msgid="1748378324417438751">"फुगु"</string>
+    <string name="spoken_emoji_1F422" msgid="4106724877523329148">"कछुवा"</string>
+    <string name="spoken_emoji_1F423" msgid="4077407945958691907">"चल्ला कोरल्नु"</string>
+    <string name="spoken_emoji_1F424" msgid="6911326019270172283">"सानोचल्ला"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"अधोमुख सानोचल्ला"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"चरा"</string>
+    <string name="spoken_emoji_1F427" msgid="3585670324511212961">"पेंगुइन"</string>
+    <string name="spoken_emoji_1F428" msgid="7955440808647898579">"कोआल"</string>
+    <string name="spoken_emoji_1F429" msgid="5028269352809819035">"पूडल"</string>
+    <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"अरेबि उँट"</string>
+    <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"दुईजुरे उँट"</string>
+    <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"डल्फिन"</string>
+    <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"मुसा अनुहार"</string>
+    <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"गाई अनुहार"</string>
+    <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"बाघ अनुहार"</string>
+    <string name="spoken_emoji_1F430" msgid="525492897063150160">"खरायो अनुहार"</string>
+    <string name="spoken_emoji_1F431" msgid="6051358666235016851">"बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F432" msgid="7698001871193018305">"ड्रागन अनुहार"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"ह्वेल पानीफाल्दै"</string>
+    <string name="spoken_emoji_1F434" msgid="3619943222159943226">"घोडा अनुहार"</string>
+    <string name="spoken_emoji_1F435" msgid="59199202683252958">"बाँदर अनुहार"</string>
+    <string name="spoken_emoji_1F436" msgid="340544719369009828">"कुकुर अनुहार"</string>
+    <string name="spoken_emoji_1F437" msgid="1219818379784982585">"सुँगुर अनुहार"</string>
+    <string name="spoken_emoji_1F438" msgid="9128124743321008210">"भ्यागुतो अनुहार"</string>
     <string name="spoken_emoji_1F439" msgid="1424161319554642266">"लोखर्के अनुहार"</string>
-    <!-- no translation found for spoken_emoji_1F43A (6727645488430385584) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F43B (5397170068392865167) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F43C (2715995734367032431) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F43D (6005480717951776597) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F43E (8917626103219080547) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F440 (7144338258163384433) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F442 (1905515392292676124) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F443 (1491504447758933115) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F444 (3654613047946080332) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F445 (7024905244040509204) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F446 (2150365643636471745) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F447 (8794022344940891388) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F448 (3261812959215550650) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F449 (4764447975177805991) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44A (7197417095486424841) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44B (1975968945250833117) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44C (3185919567897876562) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44D (6182553970602667815) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44E (8030851867365111809) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F44F (5148753662268213389) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F450 (1012021072085157054) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F451 (8257466714629051320) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F452 (4567394011149905466) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F453 (5978410551173163010) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F454 (348469036193323252) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F455 (5665118831861433578) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F456 (1890991330923356408) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F457 (3904310482655702620) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F458 (5704243858031107692) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F459 (3553148747050035251) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45A (1389654639484716101) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45B (1113293170254222904) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45C (3410257778598006936) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45D (812176504300064819) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45E (2901741399934723562) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F45F (6828566359287798863) -->
-    <skip />
-    <string name="spoken_emoji_1F460" msgid="305863879170420855">"अग्लो-कुर्कुच्चा भएको जुत्ता"</string>
-    <!-- no translation found for spoken_emoji_1F461 (5160493217831417630) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F462 (1722897795554863734) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F463 (5850772903593010699) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F464 (1228335905487734913) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F465 (4461307702499679879) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F466 (1938873085514108889) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F467 (8237080594860144998) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F468 (6081300722526675382) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F469 (1090140923076108158) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46A (5063570981942606595) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46B (6795882374287327952) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46C (6844464165783964495) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46D (2316773068014053180) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46E (5897625605860822401) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F46F (7716871657717641490) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F470 (6409995400510338892) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F471 (3058247860441670806) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F472 (3928854667819339142) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F473 (5921952095808988381) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F474 (1082237499496725183) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F475 (7280323988642212761) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F476 (4713322657821088296) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F477 (2197036131029221370) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F478 (7245521193493488875) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F479 (6876475321015553972) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47A (3900813633102703571) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47B (2608250873194079390) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47C (3838699131276537421) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47D (2874077455888369538) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47E (3642607168625579507) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F47F (441605977269926252) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F480 (3696253485164878739) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F481 (320408708521966893) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F482 (3424354860245608949) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F483 (3221113594843849083) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F484 (7348014979080444885) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F485 (6133507975565116339) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F486 (9085459968247394155) -->
-    <skip />
+    <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"ब्वाँसो अनुहार"</string>
+    <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"भालु अनुहार"</string>
+    <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"पाण्डा अनुहार"</string>
+    <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"सुँगुर नाक"</string>
+    <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"पंजा छाप"</string>
+    <string name="spoken_emoji_1F440" msgid="7144338258163384433">"आँखाहरु"</string>
+    <string name="spoken_emoji_1F442" msgid="1905515392292676124">"कान"</string>
+    <string name="spoken_emoji_1F443" msgid="1491504447758933115">"नाक"</string>
+    <string name="spoken_emoji_1F444" msgid="3654613047946080332">"मुख"</string>
+    <string name="spoken_emoji_1F445" msgid="7024905244040509204">"जिब्रो"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"ठडाएको औंला पछाडिबाट सूचकांक इशारा"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"घोप्ताएको औंला पछाडिबाट सूचकांक इशारा"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"औंला इशारा पछाडिबाट सूचकांक बायाँ"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"औंला इशारा पछाडिबाट सूचकांक दायाँ"</string>
+    <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"मुठी चिन्ह"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"हल्लाएको हात चिन्ह"</string>
+    <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"ठीक हात चिन्ह"</string>
+    <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"औंठा माथी चिन्ह"</string>
+    <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"औंठा तल चिन्ह"</string>
+    <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"ताली चिन्ह"</string>
+    <string name="spoken_emoji_1F450" msgid="1012021072085157054">"खुला हात चिन्ह"</string>
+    <string name="spoken_emoji_1F451" msgid="8257466714629051320">"श्रीपेच"</string>
+    <string name="spoken_emoji_1F452" msgid="4567394011149905466">"महिला टोपी"</string>
+    <string name="spoken_emoji_1F453" msgid="5978410551173163010">"चश्मा"</string>
+    <string name="spoken_emoji_1F454" msgid="348469036193323252">"टाई"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"टी-शर्ट"</string>
+    <string name="spoken_emoji_1F456" msgid="1890991330923356408">"जीन्स"</string>
+    <string name="spoken_emoji_1F457" msgid="3904310482655702620">"पोशाक"</string>
+    <string name="spoken_emoji_1F458" msgid="5704243858031107692">"किमोनो"</string>
+    <string name="spoken_emoji_1F459" msgid="3553148747050035251">"बिकिनी"</string>
+    <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"महिला लुगा"</string>
+    <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"बटुआ"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"हैंडबैग"</string>
+    <string name="spoken_emoji_1F45D" msgid="812176504300064819">"थैली"</string>
+    <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"केटा जुत्ता"</string>
+    <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"खेलाडी जुत्ता"</string>
+    <string name="spoken_emoji_1F460" msgid="305863879170420855">"अग्लो हिलको जुत्ता"</string>
+    <string name="spoken_emoji_1F461" msgid="5160493217831417630">"महिला जुत्ता"</string>
+    <string name="spoken_emoji_1F462" msgid="1722897795554863734">"महिला बूट"</string>
+    <string name="spoken_emoji_1F463" msgid="5850772903593010699">"पैताला छाप"</string>
+    <string name="spoken_emoji_1F464" msgid="1228335905487734913">"छाँया चित्र"</string>
+    <string name="spoken_emoji_1F465" msgid="4461307702499679879">"छाँया चित्रहरू"</string>
+    <string name="spoken_emoji_1F466" msgid="1938873085514108889">"केटा"</string>
+    <string name="spoken_emoji_1F467" msgid="8237080594860144998">"केटी"</string>
+    <string name="spoken_emoji_1F468" msgid="6081300722526675382">"मान्छे"</string>
+    <string name="spoken_emoji_1F469" msgid="1090140923076108158">"महिला"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"परिवार"</string>
+    <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"स्त्री र पुरुष हातसमात्दै"</string>
+    <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"दुई पुरुष हातसमात्दै"</string>
+    <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"दुई महिला हातसमात्दै"</string>
+    <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"प्रहरी अधिकारी"</string>
+    <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"खरायो काने महिला"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"घुम्टोमा दुलही"</string>
+    <string name="spoken_emoji_1F471" msgid="3058247860441670806">"खैरो कपाल व्यक्ति"</string>
+    <string name="spoken_emoji_1F472" msgid="3928854667819339142">"गुआपी माओ पहिरनमा मानिस"</string>
+    <string name="spoken_emoji_1F473" msgid="5921952095808988381">"फेटाधारी मानिस"</string>
+    <string name="spoken_emoji_1F474" msgid="1082237499496725183">"बृढमान्छे"</string>
+    <string name="spoken_emoji_1F475" msgid="7280323988642212761">"बृढा महिला"</string>
+    <string name="spoken_emoji_1F476" msgid="4713322657821088296">"बच्चा"</string>
+    <string name="spoken_emoji_1F477" msgid="2197036131029221370">"निर्माण कामदार"</string>
+    <string name="spoken_emoji_1F478" msgid="7245521193493488875">"राजकुमारी"</string>
+    <string name="spoken_emoji_1F479" msgid="6876475321015553972">"जापानी राक्षस"</string>
+    <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"जापानी लुटेरा"</string>
+    <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"भूत"</string>
+    <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"सानोपरी"</string>
+    <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"अन्य ग्रहबासी"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"अन्य ग्रहबासी राक्षस"</string>
+    <string name="spoken_emoji_1F47F" msgid="441605977269926252">"सानो शैतान"</string>
+    <string name="spoken_emoji_1F480" msgid="3696253485164878739">"खोपडी"</string>
+    <string name="spoken_emoji_1F481" msgid="320408708521966893">"सोधपुछको व्यक्ति"</string>
+    <string name="spoken_emoji_1F482" msgid="3424354860245608949">"पहरेदार"</string>
+    <string name="spoken_emoji_1F483" msgid="3221113594843849083">"नर्तक"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"लिपस्टिक"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"नेल पलिश"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"अनुहार मालिश"</string>
     <string name="spoken_emoji_1F487" msgid="1479113637259592150">"सैलुन"</string>
-    <!-- no translation found for spoken_emoji_1F488 (6922559285234100252) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F489 (8114863680950147305) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48A (8526843630145963032) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48B (2538528967897640292) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48C (1681173271652890232) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48D (8259886164999042373) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48E (8777981696011111101) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F48F (741593675183677907) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F490 (4482549128959806736) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F491 (2305245307882441500) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F492 (3884119934804475732) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F493 (1208828371565525121) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F494 (6198876398509338718) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F495 (9206202744967130919) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F496 (5436953041732207775) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F497 (7285142863951448473) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F498 (7940131245037575715) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F499 (4453235040265550009) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49A (6262178648366971405) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49B (8085384999750714368) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49C (453829540120898698) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49D (3460534750224161888) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49E (4490636226072523867) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F49F (2059319756421226336) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A0 (1954850380550212038) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A1 (403137413540909021) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A2 (2604192053295622063) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A3 (6378351742957821735) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A4 (7217736258870346625) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A5 (5401995723541239858) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A6 (3837802182716483848) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A7 (5718438987757885141) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A8 (4472108229720006377) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4A9 (1240958472788430032) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AA (8427525538635146416) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AB (5484114759939427459) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AC (5571196638219612682) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AD (353174619257798652) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AE (1223142786927162641) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4AF (3526278354452138397) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B0 (4124102195175124156) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B1 (8339494003418572905) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B2 (3179159430187243132) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B3 (5375412518221759596) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B4 (1068592463669453204) -->
-    <skip />
-    <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"डलर हस्ताक्षरित बैकनोट"</string>
-    <!-- no translation found for spoken_emoji_1F4B6 (8289249930736444837) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4B7 (5245100496860739429) -->
-    <skip />
+    <string name="spoken_emoji_1F488" msgid="6922559285234100252">"नाई पोल"</string>
+    <string name="spoken_emoji_1F489" msgid="8114863680950147305">"सुई"</string>
+    <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"गोली"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"चुम्बन चिन्ह"</string>
+    <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"प्रेमपत्र"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"औंठी"</string>
+    <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"रत्न पत्थर"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"चुम्बन"</string>
+    <string name="spoken_emoji_1F490" msgid="4482549128959806736">"फूलगुच्छा"</string>
+    <string name="spoken_emoji_1F491" msgid="2305245307882441500">"युगलजोडी"</string>
+    <string name="spoken_emoji_1F492" msgid="3884119934804475732">"विवाह"</string>
+    <string name="spoken_emoji_1F493" msgid="1208828371565525121">"हृदय धड्कन"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"टुटेको हृदय"</string>
+    <string name="spoken_emoji_1F495" msgid="9206202744967130919">"दुई हृदय"</string>
+    <string name="spoken_emoji_1F496" msgid="5436953041732207775">"चम्केको हृदय"</string>
+    <string name="spoken_emoji_1F497" msgid="7285142863951448473">"बढ्दो हृदय"</string>
+    <string name="spoken_emoji_1F498" msgid="7940131245037575715">"तीर सहित हृदय"</string>
+    <string name="spoken_emoji_1F499" msgid="4453235040265550009">"नीलो हृदय"</string>
+    <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"हरियो हृदय"</string>
+    <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"पहेंलो हृदय"</string>
+    <string name="spoken_emoji_1F49C" msgid="453829540120898698">"बैजनी हृदय"</string>
+    <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"रिबन साथ हृदय"</string>
+    <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"परिक्रामी हृदय"</string>
+    <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"हृदय सजावट"</string>
+    <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"भित्र बिन्दु साथ हीरा आकार"</string>
+    <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"इलेक्ट्रिक चिम"</string>
+    <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"रिस प्रतीक"</string>
+    <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"बम"</string>
+    <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"सुताहा प्रतीक"</string>
+    <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"टकराव प्रतीक"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"उछिट्टिएको पसिना प्रतीक"</string>
+    <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"सानो थोपा"</string>
+    <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"ड्यास प्रतीक"</string>
+    <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"थुप्रो गु"</string>
+    <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"पाखुरा प्रदर्शन"</string>
+    <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"तारा प्रतीक"</string>
+    <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"भाषण बेलुन"</string>
+    <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"बैचारिक बेलुन"</string>
+    <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"सेतो फूल"</string>
+    <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"सय अंक प्रतीक"</string>
+    <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"पैसाको थैली"</string>
+    <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"मुद्रा विनिमय"</string>
+    <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"मोटो डलर चिन्ह"</string>
+    <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"क्रेडिट कार्ड"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"येन चिन्ह साथ नोट"</string>
+    <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"डलर चिन्ह सहित बैकनोट"</string>
+    <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"यूरो चिन्ह साथ नोट"</string>
+    <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"पाउन्ड चिन्ह साथ नोट"</string>
     <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"पखेटाली मुद्रा"</string>
-    <!-- no translation found for spoken_emoji_1F4B9 (647509393536679903) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BA (1269737854891046321) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BB (6252883563347816451) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BC (6182597732218446206) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BD (5820961044768829176) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BE (4754542485835379808) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4BF (2237481756984721795) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C0 (491582501089694461) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C1 (6645461382494158111) -->
-    <skip />
-    <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"खुला फाइल फोल्डर"</string>
-    <!-- no translation found for spoken_emoji_1F4C3 (3727274466173970142) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C4 (4382570710795501612) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C5 (8693944622627762487) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C6 (8469908708708424640) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C7 (2665313547987324495) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C8 (8007686702282833600) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4C9 (2271951411192893684) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CA (3525692829622381444) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CB (977639227554095521) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CC (156107396088741574) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CD (4266572175361190231) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CE (6294288509864968290) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4CF (149679400831136810) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D0 (8130339336619202915) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D1 (5852176364856284968) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D2 (2276810154105920052) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D3 (5873386492793610808) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D4 (4754469936418776360) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D5 (4642713351802778905) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D6 (6987347918381807186) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D7 (7813394163241379223) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D8 (7189799718984979521) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4D9 (3874664073186440225) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4DA (872212072924287762) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4DB (2015183603583392969) -->
-    <skip />
-    <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"सार्नु"</string>
-    <!-- no translation found for spoken_emoji_1F4DD (2494006707147586786) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4DE (7883008605002117671) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4DF (3538610110623780465) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E0 (2960778342609543077) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E1 (6269733703719242108) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E2 (1987535386302883116) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E3 (5588916572878599224) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E4 (2063561529097749707) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E5 (3232462702926143576) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E6 (3399454337197561635) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E7 (5557136988503873238) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E8 (30698793974124123) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4E9 (5947550337678643166) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EA (772614045207213751) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EB (6491414165464146137) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EC (7369517138779988438) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4ED (5657520436285454241) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EE (8464138906243608614) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4EF (8801427577198798226) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F0 (6330208624731662525) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F1 (3966503935581675695) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F2 (1057540341746100087) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F3 (5003984447315754658) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F4 (5549847566968306253) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F5 (3660199448671699238) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F6 (2676974903233268860) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F7 (2643891943105989039) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4F9 (4475626303058218048) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4FA (1079796186652960775) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4FB (3848729587403760645) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F4FC (8370432508874310054) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F500 (2389947994502144547) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F501 (2132188352433347009) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F502 (2361976580513178391) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F503 (8936283551917858793) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F504 (708290317843535943) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F505 (6348909939004951860) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F506 (4449609297521280173) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F507 (7136386694923708448) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F508 (5063567689831527865) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F509 (3948050077992370791) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50A (5818194948677277197) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50B (8083470451266295876) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50C (7793219132036431680) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50D (8140244710637926780) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50E (4751821352839693365) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F50F (915079280472199605) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F510 (7658381761691758318) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F511 (262319867774655688) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F512 (5628688337255115175) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F513 (8579201846619420981) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F514 (7027268683047322521) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F515 (8903179856036069242) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F516 (108097933937925381) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F517 (2450846665734313397) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F518 (7028220286841437832) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F519 (8211189165075445687) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51A (823966751787338892) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51B (5920570742107943382) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51C (110609810659826676) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51D (4087697222026095447) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51E (8512873526157201775) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F51F (8673370823728653973) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F520 (7335109890337048900) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F521 (2693185864450925778) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F522 (8419130286280673347) -->
-    <skip />
-    <string name="spoken_emoji_1F523" msgid="3318053476401719421">"प्रतीकको लागि प्रतीक प्रविष्ट गर्नुस्"</string>
-    <!-- no translation found for spoken_emoji_1F524 (1625073997522316331) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F525 (4083884189172963790) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F526 (2035494936742643580) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F527 (134257142354034271) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F528 (700627429570609375) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F529 (7480548235904988573) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52A (7613580031502317893) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52B (4554906608328118613) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52C (1330294501371770790) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52D (7549551775445177140) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F52E (4457099417872625141) -->
-    <skip />
-    <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"बिचमा थोप्ला निहित छ चुच्चे तारा"</string>
-    <!-- no translation found for spoken_emoji_1F530 (3572898444281774023) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F531 (5225633376450025396) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F532 (9169568490485180779) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F533 (6554193837201918598) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F534 (8339298801331865340) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F535 (1227403104835533512) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F536 (5477372445510469331) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F537 (3158915214347274626) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F538 (4300084249474451991) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F539 (6535159756325742275) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F53A (3728196273988781389) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F53B (7182097039614128707) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F53C (4077022046319615029) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F53D (3939112784894620713) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F550 (7761392621689986218) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F551 (2699448504113431716) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F552 (5872107867411853750) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F553 (8490966286158640743) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F554 (7662585417832909280) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F555 (5564698204520412009) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F556 (7325712194836512205) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F557 (4398343183682848693) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F558 (3110507820404018172) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F559 (2972160366448337839) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55A (5568112876681714834) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55B (6731739890330659276) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55C (7838853679879115890) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55D (3518832144255922544) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55E (3092760695634993002) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F55F (2326720311892906763) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F560 (5771339179963924448) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F561 (3139944777062475382) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F562 (8273944611162457084) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F563 (8643976903718136299) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F564 (3511070239796141638) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F565 (4567451985272963088) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F566 (2790552288169929810) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F567 (9026037362100689337) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FB (9037503671676124015) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FC (1409415995817242150) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FD (2562726956654429582) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FE (1184469756905210580) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F5FF (6003594799354942297) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F600 (7601109464776835283) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F601 (746026523967444503) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F602 (8354558091785198246) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F603 (3861022912544159823) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F604 (5119021072966343531) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F605 (6140813923973561735) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F606 (3549936813966832799) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F607 (2826424078212384817) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F608 (7343559595089811640) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F609 (5481030187207504405) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60A (5023337769148679767) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60B (3005248217216195694) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60C (349384012958268496) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60D (7921853137164938391) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60E (441718886380605643) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F60F (2674453144890180538) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F610 (3225675825334102369) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F611 (7199179827619679668) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F612 (985081329745137998) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F613 (5548607684830303562) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F614 (3196305665259916390) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F615 (3051674239303969101) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F616 (8124887056243813089) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F617 (7052733625511122870) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F618 (408207170572303753) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F619 (8645430335143153645) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61A (2882157190974340247) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61B (3765927202787211499) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61C (198943912107589389) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61D (7643546385877816182) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61E (1528732952202098364) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F61F (1853664164636082404) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F620 (6051942001307375830) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F621 (2114711878097257704) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F622 (29291014645931822) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F623 (7803959833595184773) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F624 (8637637647725752799) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F625 (6153625183493635030) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F626 (6179485689935562950) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F627 (8566204052903012809) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F628 (8875777401624904224) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F629 (1411538490319190118) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62A (4726686726690289969) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62B (3221980473921623613) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62C (4616356691941225182) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62D (4283677508698812232) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62E (726083405284353894) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F62F (7746620088234710962) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F630 (3298804852155581163) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F631 (1603391150954646779) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F632 (4846193232203976013) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F633 (4023593836629700443) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F634 (3155265083246248129) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F635 (4616691133452764482) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F636 (947000211822375683) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F637 (1269551267347165774) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F638 (3410766467496872301) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F639 (1833417519781022031) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63A (8566294484007152613) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63B (74417995938927571) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63C (6472812005729468870) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63D (1638398369553349509) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63E (6788969063020278986) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F63F (1207234562459550185) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F640 (6023054549904329638) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F645 (5202090629227587076) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F646 (6734425134415138134) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F647 (1090285518444205483) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F648 (8978535230610522356) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F649 (8486145279809495102) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F64A (1237524974033228660) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F64B (4251150782016370475) -->
-    <skip />
+    <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"माथिको प्रवृत्ति र येन चिन्ह साथ चित्रपाती"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"सिट"</string>
+    <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"निजी कम्प्यूटर"</string>
+    <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"ब्रिफकेस"</string>
+    <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"सानो डिस्क"</string>
+    <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"फ्लपी डिस्क"</string>
+    <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"सी डि चक्का"</string>
+    <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"डिभिडी"</string>
+    <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"फाइल फोल्डर"</string>
+    <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"फाइल फोल्डर खोल्नुहोस्"</string>
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"दोब्र्याइएको पृष्ठ"</string>
+    <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"माथि पत्याएको पृष्ठ"</string>
+    <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"पात्रो"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"च्यातेर पठाउने पात्रो"</string>
+    <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"कार्ड सूचकांक"</string>
+    <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"माथिको प्रवृत्ति साथ चित्रपाती"</string>
+    <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"तल प्रवृत्ति साथ चित्रपाती"</string>
+    <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"बार चार्ट"</string>
+    <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"क्लिपबोर्ड"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"पुस पिन"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"गोल पुस पिन"</string>
+    <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"क्लिप"</string>
+    <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"फुट"</string>
+    <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"त्रिकोणात्मक फुट"</string>
+    <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"किताबी ट्याबहरू"</string>
+    <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"लेजर"</string>
+    <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"नोटबुक"</string>
+    <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"सजावटी खोल सहित नोटबुक"</string>
+    <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"बन्द पुस्तक"</string>
+    <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"खुला पुस्तक"</string>
+    <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"हरियो पुस्तक"</string>
+    <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"नीलो पुस्तक"</string>
+    <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"सुन्तला पुस्तक"</string>
+    <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"पुस्तकहरू"</string>
+    <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"बिल्ला नाम"</string>
+    <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"स्क्रोल"</string>
+    <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"मेमो"</string>
+    <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"टेलिफोन रिसीभर"</string>
+    <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"पेजर"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"फ्याक्स मेसिन"</string>
+    <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"स्याटलाइट एंटीना"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"आकाशबाणी"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"ढ्वांग फुक्नु"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"आउटबक्स ट्रे"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"इनबक्समा ट्रे"</string>
+    <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"प्याकेज"</string>
+    <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"इमेल प्रतीक"</string>
+    <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"आगमन खाम"</string>
+    <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"माथि तीर तल देखाइएको साथ खाम"</string>
+    <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"माथि झण्डा साथ बन्द मेलबक्स"</string>
+    <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"उठाएको झन्डा साथ बन्द मेलबक्स"</string>
+    <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"उठाएको झन्डा साथ खुला मेलबक्स"</string>
+    <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"तल झण्डा साथ खुला मेलबक्स"</string>
+    <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"पत्र पेटिका"</string>
+    <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"पोस्टल सीङ"</string>
+    <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"अखबार"</string>
+    <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"मोबाइल फोन"</string>
+    <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"दाँया तीर साथ मोबाइल फोन बायाँ"</string>
+    <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"कम्पन ढाँचाः"</string>
+    <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"मोबाइल फोन बन्द"</string>
+    <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"बिना मोबाइल फोनहरु"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"बारहरू साथ एंटीना"</string>
+    <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"क्यामेरा"</string>
+    <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"भिडियो क्यामेरा"</string>
+    <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"टेलिभिजन"</string>
+    <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"रेडियो"</string>
+    <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"भिडियोक्यासेट"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"दाँया बटारिएको तीर"</string>
+    <string name="spoken_emoji_1F501" msgid="2132188352433347009">"दाँया र बायाँ खुला वृत्त तीर घडीकोदिशामा"</string>
+    <string name="spoken_emoji_1F502" msgid="2361976580513178391">"वृत्त दोबारेको साथ दाँया र बायाँ खुला वृत्त तीर घडीकोदिशामा"</string>
+    <string name="spoken_emoji_1F503" msgid="8936283551917858793">"घडीको दिशामा तल र माथिको तर्फ खुला वृत्त तीर"</string>
+    <string name="spoken_emoji_1F504" msgid="708290317843535943">"उल्टा घडीको दिशामा तल र माथिको तर्फ खुला वृत्त तीर"</string>
+    <string name="spoken_emoji_1F505" msgid="6348909939004951860">"कम चमक प्रतीक"</string>
+    <string name="spoken_emoji_1F506" msgid="4449609297521280173">"उच्च चमक प्रतीक"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"ध्वोंनी निषेध स्ट्रोक"</string>
+    <string name="spoken_emoji_1F508" msgid="5063567689831527865">"स्पिकर"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"एक तरङ्ग साथ स्पिकर"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"तीन ध्वनि लहरहरु साथ स्पिकर"</string>
+    <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"ब्याट्री"</string>
+    <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"बिद्धुतीय प्लग"</string>
+    <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"बाँया-इशारा आबर्धक लेन्स"</string>
+    <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"दायाँ इशारा आबर्धक लेन्स"</string>
+    <string name="spoken_emoji_1F50F" msgid="915079280472199605">"मसी कलमले बन्द"</string>
+    <string name="spoken_emoji_1F510" msgid="7658381761691758318">"साँचो साथ बन्द ताला"</string>
+    <string name="spoken_emoji_1F511" msgid="262319867774655688">"साँचो"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"लक गर्नुहोस्"</string>
+    <string name="spoken_emoji_1F513" msgid="8579201846619420981">"खुला ताला"</string>
+    <string name="spoken_emoji_1F514" msgid="7027268683047322521">"घन्टी"</string>
+    <string name="spoken_emoji_1F515" msgid="8903179856036069242">"रद्द स्ट्रोक साथ घन्टी"</string>
+    <string name="spoken_emoji_1F516" msgid="108097933937925381">"बुकमार्क"</string>
+    <string name="spoken_emoji_1F517" msgid="2450846665734313397">"संपर्क प्रतीक"</string>
+    <string name="spoken_emoji_1F518" msgid="7028220286841437832">"रेडियो बटन"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"बायाँ माथि तीर साथ फर्काएको"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"बायाँ माथि तीर साथ अन्त्य"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"बायाँ साथ उद्गार चिन्हले दाँया माथि तीर"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"दाँया माथि तीर साथ चाँडै"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"माथिको माथि तीर साथ माथि"</string>
+    <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"अठार मुनिका प्रतीक निषेधित"</string>
+    <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"किक्याप दस"</string>
+    <string name="spoken_emoji_1F520" msgid="7335109890337048900">"ठुलो ल्याटिन अक्षरका आगत प्रतीक"</string>
+    <string name="spoken_emoji_1F521" msgid="2693185864450925778">"सानो ल्याटिन अक्षरका आगत प्रतीक"</string>
+    <string name="spoken_emoji_1F522" msgid="8419130286280673347">"संख्याका लागि आगत प्रतीक"</string>
+    <string name="spoken_emoji_1F523" msgid="3318053476401719421">"प्रतीकको लागि प्रतीक प्रविष्ट गर्नुहोस्"</string>
+    <string name="spoken_emoji_1F524" msgid="1625073997522316331">"ल्याटिन अक्षरका आगत प्रतीक"</string>
+    <string name="spoken_emoji_1F525" msgid="4083884189172963790">"आगो"</string>
+    <string name="spoken_emoji_1F526" msgid="2035494936742643580">"बिजुली बत्ती"</string>
+    <string name="spoken_emoji_1F527" msgid="134257142354034271">"रेंच"</string>
+    <string name="spoken_emoji_1F528" msgid="700627429570609375">"हथौडा"</string>
+    <string name="spoken_emoji_1F529" msgid="7480548235904988573">"नट बोल्ट"</string>
+    <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"जापानी चक्कु होचो"</string>
+    <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"पिस्तौल"</string>
+    <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"माइक्रोस्कोप"</string>
+    <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"टेलिस्कोप"</string>
+    <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"क्रिस्टल बल"</string>
+    <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"बीचमा थोप्ला निहित छ चुच्चे तारा"</string>
+    <string name="spoken_emoji_1F530" msgid="3572898444281774023">"शुरुवातको लागि जापानी प्रतीक"</string>
+    <string name="spoken_emoji_1F531" msgid="5225633376450025396">"त्रिशूल प्रतीक"</string>
+    <string name="spoken_emoji_1F532" msgid="9169568490485180779">"कालो वर्ग बटन"</string>
+    <string name="spoken_emoji_1F533" msgid="6554193837201918598">"सेतो वर्ग बटन"</string>
+    <string name="spoken_emoji_1F534" msgid="8339298801331865340">"ठूलो लाल वृत्त"</string>
+    <string name="spoken_emoji_1F535" msgid="1227403104835533512">"ठूलो नीलो वृत्त"</string>
+    <string name="spoken_emoji_1F536" msgid="5477372445510469331">"ठूलो सुन्तला हीरा"</string>
+    <string name="spoken_emoji_1F537" msgid="3158915214347274626">"ठूलो नीलो हीरा"</string>
+    <string name="spoken_emoji_1F538" msgid="4300084249474451991">"लघु सुन्तला हीरा"</string>
+    <string name="spoken_emoji_1F539" msgid="6535159756325742275">"लघु नीलो हीरा"</string>
+    <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"माथी-इशारा रातो त्रिकोण"</string>
+    <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"तल-इशारा रातो त्रिकोण"</string>
+    <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"माथी इशारा सानो रातो त्रिकोण"</string>
+    <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"तल-इशारा सानो रातो त्रिकोण"</string>
+    <string name="spoken_emoji_1F550" msgid="7761392621689986218">"घडी अनुहार एक बजे"</string>
+    <string name="spoken_emoji_1F551" msgid="2699448504113431716">"घडी अनुहार दुई बजे"</string>
+    <string name="spoken_emoji_1F552" msgid="5872107867411853750">"घडी अनुहार तीन बजे"</string>
+    <string name="spoken_emoji_1F553" msgid="8490966286158640743">"घडी अनुहार चार बजे"</string>
+    <string name="spoken_emoji_1F554" msgid="7662585417832909280">"घडी अनुहार पाँच बजे"</string>
+    <string name="spoken_emoji_1F555" msgid="5564698204520412009">"घडी अनुहार छ बजे"</string>
+    <string name="spoken_emoji_1F556" msgid="7325712194836512205">"घडी अनुहार सात बजे"</string>
+    <string name="spoken_emoji_1F557" msgid="4398343183682848693">"घडी अनुहार आठ बजे"</string>
+    <string name="spoken_emoji_1F558" msgid="3110507820404018172">"घडी अनुहार नौ बजे"</string>
+    <string name="spoken_emoji_1F559" msgid="2972160366448337839">"घडी अनुहार दश बजे"</string>
+    <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"घडी अनुहार एघार बजे"</string>
+    <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"घडी अनुहार बाह्र बजे"</string>
+    <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"घडी अनुहार एक-तिस"</string>
+    <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"घडी अनुहार दुई-तिस"</string>
+    <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"घडी अनुहार तीन तीस"</string>
+    <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"घडी अनुहार चार-तिस"</string>
+    <string name="spoken_emoji_1F560" msgid="5771339179963924448">"घडी अनुहार पाँच-तिस"</string>
+    <string name="spoken_emoji_1F561" msgid="3139944777062475382">"घडी अनुहार छ-तिस"</string>
+    <string name="spoken_emoji_1F562" msgid="8273944611162457084">"घडी अनुहार सात-तिस"</string>
+    <string name="spoken_emoji_1F563" msgid="8643976903718136299">"घडी अनुहार आठ-तिस"</string>
+    <string name="spoken_emoji_1F564" msgid="3511070239796141638">"घडी अनुहार नौ-तिस"</string>
+    <string name="spoken_emoji_1F565" msgid="4567451985272963088">"घडी अनुहार दश-तिस"</string>
+    <string name="spoken_emoji_1F566" msgid="2790552288169929810">"घडी अनुहार एघार-तिस"</string>
+    <string name="spoken_emoji_1F567" msgid="9026037362100689337">"घडी अनुहार बाह्र-तिस"</string>
+    <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"माउन्ट फुजी"</string>
+    <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"टोकियो टावर"</string>
+    <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"स्वतन्त्रताको प्रतिमा"</string>
+    <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"जापानको छान्य मुर्ति"</string>
+    <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"मोयै"</string>
+    <string name="spoken_emoji_1F600" msgid="7601109464776835283">"अनुहार ङिच्च हँसाइ"</string>
+    <string name="spoken_emoji_1F601" msgid="746026523967444503">"हँसिल आँखाको साथ ङिच्च हँसाइ"</string>
+    <string name="spoken_emoji_1F602" msgid="8354558091785198246">"आनन्द आँसुको साथ अनुहार"</string>
+    <string name="spoken_emoji_1F603" msgid="3861022912544159823">"खुला मुखको साथ हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_1F604" msgid="5119021072966343531">"खुला मुखको र हँसिलो आँखा साथ हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_1F605" msgid="6140813923973561735">"खुला मुख र चिसो पसिना साथ हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_1F606" msgid="3549936813966832799">"खुला मुख र बन्द आँखाको साथ हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"हेलो साथ हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_1F608" msgid="7343559595089811640">"सिंगहरु साथ हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_1F609" msgid="5481030187207504405">"आँखा झिम्काएको अनुहार"</string>
+    <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"हँसिलो आँखाले साथ हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"स्वादिष्ट भोजन savoring अनुहार"</string>
+    <string name="spoken_emoji_1F60C" msgid="349384012958268496">"ढुक्क अनुहार"</string>
+    <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"हृदय आकारको आँखाले हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_1F60E" msgid="441718886380605643">"घाम साथ हँसिलो अनुहार"</string>
+    <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"स्वाँग पारेको अनुहार"</string>
+    <string name="spoken_emoji_1F610" msgid="3225675825334102369">"सामान्य अनुहार"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"भाबबिहिन अनुहार"</string>
+    <string name="spoken_emoji_1F612" msgid="985081329745137998">"निराश अनुहार"</string>
+    <string name="spoken_emoji_1F613" msgid="5548607684830303562">"चिसो पसिना साथ अनुहार"</string>
+    <string name="spoken_emoji_1F614" msgid="3196305665259916390">"चिंताग्रस्त अनुहार"</string>
+    <string name="spoken_emoji_1F615" msgid="3051674239303969101">"गोलमाल अनुहार"</string>
+    <string name="spoken_emoji_1F616" msgid="8124887056243813089">"आघातको अवस्थामा अनुहार"</string>
+    <string name="spoken_emoji_1F617" msgid="7052733625511122870">"चुम्बन अनुहार"</string>
+    <string name="spoken_emoji_1F618" msgid="408207170572303753">"चुम्बन फालिएको अनुहार"</string>
+    <string name="spoken_emoji_1F619" msgid="8645430335143153645">"हँसिलो आँखा साथ चुम्बन अनुहार"</string>
+    <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"बन्द आँखा साथ चुम्बन अनुहार"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"बाहिर जिब्रो साथ अनुहार"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"बाहिर जिब्रो र झिम्काएको आँखा साथ अनुहार"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"बाहिर जिब्रो र बेस्सरी बन्द आँखा साथ अनुहार"</string>
+    <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"निराश अनुहार"</string>
+    <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"चिन्तित अनुहार"</string>
+    <string name="spoken_emoji_1F620" msgid="6051942001307375830">"आक्रोशित अनुहार"</string>
+    <string name="spoken_emoji_1F621" msgid="2114711878097257704">"दुखी अनुहार"</string>
+    <string name="spoken_emoji_1F622" msgid="29291014645931822">"कराएको अनुहार"</string>
+    <string name="spoken_emoji_1F623" msgid="7803959833595184773">"संरक्षित अनुहार"</string>
+    <string name="spoken_emoji_1F624" msgid="8637637647725752799">"विजय नजर अनुहार"</string>
+    <string name="spoken_emoji_1F625" msgid="6153625183493635030">"निराश तर राहत अनुहार"</string>
+    <string name="spoken_emoji_1F626" msgid="6179485689935562950">"खुला मुखको साथ निन्याउरो अनुहार"</string>
+    <string name="spoken_emoji_1F627" msgid="8566204052903012809">"विचलित अनुहार"</string>
+    <string name="spoken_emoji_1F628" msgid="8875777401624904224">"डराएको अनुहार"</string>
+    <string name="spoken_emoji_1F629" msgid="1411538490319190118">"थकित अनुहार"</string>
+    <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"निदाएको अनुहार"</string>
+    <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"थकित अनुहार"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"कित्किताएको अनुहार"</string>
+    <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"चर्को सोरले कराएको अनुहार"</string>
+    <string name="spoken_emoji_1F62E" msgid="726083405284353894">"खुला मुख अनुहार"</string>
+    <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"चुप अनुहार"</string>
+    <string name="spoken_emoji_1F630" msgid="3298804852155581163">"खुला मुख र चिसो पसिना अनुहार"</string>
+    <string name="spoken_emoji_1F631" msgid="1603391150954646779">"डरमा चिल्लाएको अनुहार"</string>
+    <string name="spoken_emoji_1F632" msgid="4846193232203976013">"छक्क अनुहार"</string>
+    <string name="spoken_emoji_1F633" msgid="4023593836629700443">"निर्लज्ज अनुहार"</string>
+    <string name="spoken_emoji_1F634" msgid="3155265083246248129">"निन्द्रे अनुहार"</string>
+    <string name="spoken_emoji_1F635" msgid="4616691133452764482">"चक्करलागेको अनुहार"</string>
+    <string name="spoken_emoji_1F636" msgid="947000211822375683">"मुख नभएको अनुहार"</string>
+    <string name="spoken_emoji_1F637" msgid="1269551267347165774">"चिकित्सक माक्स लगाएको अनुहार"</string>
+    <string name="spoken_emoji_1F638" msgid="3410766467496872301">"हँसिलो आँखा साथ ङीच्च बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F639" msgid="1833417519781022031">"आनन्द आँसु झार्दै बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"खुला मुखले हँसिलो बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F63B" msgid="74417995938927571">"हृदय आकारको आँखाले हँसिलो बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"छट्टु मुस्कान साथ बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"बन्द आँखा साथ चुम्बन बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"दुखी बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"कराएको बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F640" msgid="6023054549904329638">"वाक्क भइसकेको बिरालो अनुहार"</string>
+    <string name="spoken_emoji_1F645" msgid="5202090629227587076">"कुनै राम्रो सङ्केत बिना साथ अनुहार"</string>
+    <string name="spoken_emoji_1F646" msgid="6734425134415138134">"ठीक इशारा साथ अनुहार"</string>
+    <string name="spoken_emoji_1F647" msgid="1090285518444205483">"गहिरो निहुरेको व्यक्ति"</string>
+    <string name="spoken_emoji_1F648" msgid="8978535230610522356">"हेर्नुहोस्-कुनै-दुष्ट बाँदर"</string>
+    <string name="spoken_emoji_1F649" msgid="8486145279809495102">"सुन-कुनै-दुष्ट बाँदर"</string>
+    <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"बोल्नु-कुनै-दुष्ट बाँदर"</string>
+    <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"खुसी व्यक्ति एक हात उठाउँदै"</string>
     <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"उत्सवमा दुवै हात उठाँउदैको व्यक्ति"</string>
-    <!-- no translation found for spoken_emoji_1F64D (4646485595309482342) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F64E (3376579939836656097) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F64F (1044439574356230711) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F680 (513263736012689059) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F681 (9201341783850525339) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F682 (8046933583867498698) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F683 (8772750354339223092) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F684 (346396777356203608) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F685 (1237059817190832730) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F686 (3525197227223620343) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F687 (5110143437960392837) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F688 (4702085029871797965) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F689 (2375851019798817094) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68A (6368370859718717198) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68B (2920160427117436633) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68C (1061520934758810864) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68D (2890059031360969304) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68E (6234042976027309654) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F68F (5871099334672012107) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F690 (8080964620200195262) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F691 (999173032408730501) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F692 (1712863785341849487) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F693 (7987109037389768934) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F694 (6061658916653884608) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F695 (6913445460364247283) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F696 (6391604457418285404) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F697 (7978399334396733790) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F698 (7006050861129732018) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F699 (630317052666590607) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F69A (4739797891735823577) -->
-    <skip />
+    <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"निराश व्यक्ति"</string>
+    <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"दुखी अनुहार व्यक्ति"</string>
+    <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"नतमस्तक व्यक्ति"</string>
+    <string name="spoken_emoji_1F680" msgid="513263736012689059">"रकेट"</string>
+    <string name="spoken_emoji_1F681" msgid="9201341783850525339">"हेलिकोप्टर"</string>
+    <string name="spoken_emoji_1F682" msgid="8046933583867498698">"भापद्वारा चल्ने यातायात"</string>
+    <string name="spoken_emoji_1F683" msgid="8772750354339223092">"रेलवे कार"</string>
+    <string name="spoken_emoji_1F684" msgid="346396777356203608">"उच्च गति रेल"</string>
+    <string name="spoken_emoji_1F685" msgid="1237059817190832730">"गोली नाक साथ उच्च गतिमा रेल"</string>
+    <string name="spoken_emoji_1F686" msgid="3525197227223620343">"रेल"</string>
+    <string name="spoken_emoji_1F687" msgid="5110143437960392837">"मेट्रो"</string>
+    <string name="spoken_emoji_1F688" msgid="4702085029871797965">"प्रकाश रेल"</string>
+    <string name="spoken_emoji_1F689" msgid="2375851019798817094">"स्टेशन"</string>
+    <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"ट्राम"</string>
+    <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"ट्राम कार"</string>
+    <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"बस"</string>
+    <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"आउदैको बस"</string>
+    <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"ट्रलीबस"</string>
+    <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"बस बिसौना"</string>
+    <string name="spoken_emoji_1F690" msgid="8080964620200195262">"सानो बस"</string>
+    <string name="spoken_emoji_1F691" msgid="999173032408730501">"एम्बुलेन्स"</string>
+    <string name="spoken_emoji_1F692" msgid="1712863785341849487">"दमकल"</string>
+    <string name="spoken_emoji_1F693" msgid="7987109037389768934">"प्रहरी कार"</string>
+    <string name="spoken_emoji_1F694" msgid="6061658916653884608">"आऊदैको प्रहरी कार"</string>
+    <string name="spoken_emoji_1F695" msgid="6913445460364247283">"ट्याक्सी"</string>
+    <string name="spoken_emoji_1F696" msgid="6391604457418285404">"आऊदैको ट्याक्सी"</string>
+    <string name="spoken_emoji_1F697" msgid="7978399334396733790">"अटोमोबाइल"</string>
+    <string name="spoken_emoji_1F698" msgid="7006050861129732018">"आऊदैको गाडी"</string>
+    <string name="spoken_emoji_1F699" msgid="630317052666590607">"मनोरंजन वाहन"</string>
+    <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"वितरण ट्रक"</string>
     <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"जोडिएको ठूलोगाडी"</string>
-    <!-- no translation found for spoken_emoji_1F69C (5557395610750818161) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F69D (5467164189942951047) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F69E (169238196389832234) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F69F (7508128757012845102) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A0 (8733056213790160147) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A1 (4666516337749347253) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A2 (4511220588943129583) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A3 (8412962252222205387) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A4 (8867571300266339211) -->
-    <skip />
+    <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"ट्रयाक्टर"</string>
+    <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"एकतर्फी रेल"</string>
+    <string name="spoken_emoji_1F69E" msgid="169238196389832234">"पहाडी रेलवे"</string>
+    <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"सस्पेंशन रेलवे"</string>
+    <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"पहाडी केवलवे"</string>
+    <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"हवाई ट्रामगाडी"</string>
+    <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"पानीजहाज"</string>
+    <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"डुंगा"</string>
+    <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"द्रुत डुंगा"</string>
     <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"तेर्सो यातायात बत्ती"</string>
-    <!-- no translation found for spoken_emoji_1F6A6 (485575967773793454) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A7 (6411048933816976794) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A8 (6345717218374788364) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6A9 (6586380356807600412) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6AA (8954448167261738885) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6AB (5313946262888343544) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6AC (6946858177965948288) -->
-    <skip />
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"ठाडो यातायात प्रकाश"</string>
+    <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"निर्माण चिन्ह"</string>
+    <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"प्रहरी कारको परिक्रामी प्रकाश"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"पोस्टमा त्रिकोणात्मक झण्डा"</string>
+    <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"ढोका"</string>
+    <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"प्रवेश निषेध चिन्ह"</string>
+    <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"धूम्रपान चिन्ह"</string>
     <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"धुम्रपान निषेधित चिन्ह"</string>
-    <!-- no translation found for spoken_emoji_1F6AE (1062469925352817189) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6AF (2286668056123642208) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B0 (179424763882990952) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B1 (5585212805429161877) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B2 (1771885082068421875) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B3 (8033779581263314408) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B4 (1999538449018476947) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B5 (340846352660993117) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B6 (4351024386495098336) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B7 (4564800655866838802) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B8 (3020531906940267349) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6B9 (1207095844125041251) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BA (2346879310071017531) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BB (2370172469642078526) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BC (5558827593563530851) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BD (9213590243049835957) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BE (394016533781742491) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6BF (906336365928291207) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C0 (4592099854378821599) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C1 (2845056048320031158) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C2 (8117262514698011877) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C3 (1176342001834630675) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C4 (1477622834179978886) -->
-    <skip />
-    <!-- no translation found for spoken_emoji_1F6C5 (2495834050856617451) -->
-    <skip />
+    <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"फोहर राख्ने ठाउँ चिन्ह"</string>
+    <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"फोहर फाल्न निषेधित चिन्ह"</string>
+    <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"पेय जल चिन्ह"</string>
+    <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"गैह्र पिउने पानी चिन्ह"</string>
+    <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"साइकल"</string>
+    <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"साइकल निषेध"</string>
+    <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"साइकल यात्री"</string>
+    <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"पहाडी साइकल् यात्री"</string>
+    <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"पैदल यात्री"</string>
+    <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"पैदल यात्री निषेध"</string>
+    <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"बच्चाहरु बाटो काट्दै"</string>
+    <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"पुरुष चिन्ह"</string>
+    <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"महिला चिन्ह"</string>
+    <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"शौचालय"</string>
+    <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"बच्चा चिन्ह"</string>
+    <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"शौचालय"</string>
+    <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"कम्बोथ"</string>
+    <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"फोहरा"</string>
+    <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"स्नान"</string>
+    <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"बाथटब"</string>
+    <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"राहदानी नियन्त्रण"</string>
+    <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"भन्सार"</string>
+    <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"सामान दाबी"</string>
+    <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"छुटेको सामान"</string>
 </resources>
diff --git a/java/res/values-ne-rNP/strings-talkback-descriptions.xml b/java/res/values-ne-rNP/strings-talkback-descriptions.xml
index d5bcea9..c8e5a75 100644
--- a/java/res/values-ne-rNP/strings-talkback-descriptions.xml
+++ b/java/res/values-ne-rNP/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"स्थानहरू"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"प्रतिकहरू"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"ईमोटिकन्स"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-ne-rNP/strings.xml b/java/res/values-ne-rNP/strings.xml
index f467443..6032146 100644
--- a/java/res/values-ne-rNP/strings.xml
+++ b/java/res/values-ne-rNP/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"इनपुट विकल्पहरू"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"लग निर्देशनहरू शोध गर्नुहोस्"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"सम्पर्क नामहरू हेर्नुहोस्"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"तपाईँको सम्पर्क सूचीबाट हिज्जे परीक्षकले प्रविष्टिहरूको प्रयोग गर्छ"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"कुञ्जी थिच्दा भाइब्रेट"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"इनपुट भाषाहरू"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"बचत गर्न पुनः छुनुहोस्"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"उपलब्ध शब्दकोश"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"प्रयोगकर्ता प्रतिक्रिया सक्षम पार्नुहोस्"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"स्वचालित रूपमा प्रयोग तथ्याङ्कहरू र क्यास रिपोर्टहरू पठाएर यस इनपुट विधि सम्पादकलाई सुधार्न सहयोग गर्नुहोस्।"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"किबोर्ड थिम"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"अंग्रेजी (युके)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"अंग्रेजी (युएस्)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"सक्षम पार्नुहोस्"</string>
     <string name="not_now" msgid="6172462888202790482">"अहिले होइन"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"यस्तो इनपुट शैली पहिले नै अवस्थित छ: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"प्रयोग अध्ययन मोड"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"कुञ्जी लामो थिचाइ ढिलाइ"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"कुञ्जी थिचाइ भाइब्रेसन अवधि"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"कुञ्जी थिचाइ आवाज भोल्युम"</string>
diff --git a/java/res/values-nl/strings-action-keys.xml b/java/res/values-nl/strings-action-keys.xml
index c1ce25a..c9c68bd 100644
--- a/java/res/values-nl/strings-action-keys.xml
+++ b/java/res/values-nl/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Vorig"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Klaar"</string>
     <string name="label_send_key" msgid="482252074224462163">"Verz."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pauze"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Wacht"</string>
 </resources>
diff --git a/java/res/values-nl/strings-talkback-descriptions.xml b/java/res/values-nl/strings-talkback-descriptions.xml
index 7d61d56..a7fe207 100644
--- a/java/res/values-nl/strings-talkback-descriptions.xml
+++ b/java/res/values-nl/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Plaatsen"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbolen"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 342464f..a651f7e 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Invoeropties"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Opdrachten in onderzoekslogbestand"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Contactnamen opzoeken"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"De spellingcontrole gebruikt items uit uw contactenlijst"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Trillen bij toetsaanslag"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Invoertalen"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Raak nogmaals aan om op te slaan"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Woordenboek beschikbaar"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Gebruikersfeedback inschakelen."</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Help deze invoermethode te verbeteren door automatisch gebruiksstatistieken en crashmeldingen te verzenden."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Toetsenbordthema"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Engels (GB)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Engels (VS)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Inschakelen"</string>
     <string name="not_now" msgid="6172462888202790482">"Niet nu"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Dezelfde invoerstijl bestaat al: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modus voor gebruiksvriendelijkheidsonderzoek"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Vertraging toets lang indrukkn"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Trilingsduur bij toetsgebruik"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Geluidsvolume bij toetsgebruik"</string>
diff --git a/java/res/values-pl/strings-action-keys.xml b/java/res/values-pl/strings-action-keys.xml
index 2984b98..d641cbc 100644
--- a/java/res/values-pl/strings-action-keys.xml
+++ b/java/res/values-pl/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Wróć"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Gotowe"</string>
     <string name="label_send_key" msgid="482252074224462163">"Wyślij"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pauza"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Czekaj"</string>
 </resources>
diff --git a/java/res/values-pl/strings-talkback-descriptions.xml b/java/res/values-pl/strings-talkback-descriptions.xml
index da5f46b..1ec691e 100644
--- a/java/res/values-pl/strings-talkback-descriptions.xml
+++ b/java/res/values-pl/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Miejsca"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbole"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikony"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index c4261c6..e78b7f2 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opcje wprowadzania"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Polecenia dziennika badań"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Przeszukaj kontakty"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Sprawdzanie pisowni bierze pod uwagę wpisy z listy kontaktów."</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Wibracja przy naciśnięciu"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Języki wprowadzania"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Dotknij ponownie, aby zapisać"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Słownik dostępny"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Włącz przesyłanie opinii użytkownika"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Pomóż ulepszyć edytor wprowadzania tekstu, automatycznie wysyłając statystyki użycia i raporty o awariach."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Motyw klawiatury"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"angielski (Wielka Brytania)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"angielski (Stany Zjednoczone)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Włącz"</string>
     <string name="not_now" msgid="6172462888202790482">"Nie teraz"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Taki styl wprowadzania już istnieje: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Tryb badania przydatności"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Opóźnienie przy długim naciśnięciu"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Wibracja przy naciśniętym klawiszu"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Głośność przy naciśniętym klawiszu"</string>
diff --git a/java/res/values-pt-rPT/strings-action-keys.xml b/java/res/values-pt-rPT/strings-action-keys.xml
index 7a7559f..1b5921f 100644
--- a/java/res/values-pt-rPT/strings-action-keys.xml
+++ b/java/res/values-pt-rPT/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Conc."</string>
     <string name="label_send_key" msgid="482252074224462163">"Env."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
 </resources>
diff --git a/java/res/values-pt-rPT/strings-talkback-descriptions.xml b/java/res/values-pt-rPT/strings-talkback-descriptions.xml
index b49b58b..8541364 100644
--- a/java/res/values-pt-rPT/strings-talkback-descriptions.xml
+++ b/java/res/values-pt-rPT/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Locais"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbolos"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Ícones expressivos"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 8b75dd0..d13fca3 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opções de introdução"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Comandos de Reg. Invest."</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Procurar nomes de contac."</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"O corretor ortográfico utiliza entradas da sua lista de contactos"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar ao primir as teclas"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Idiomas de introdução"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Toque novamente para guardar"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Ativar comentários do utilizador"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Envie automaticamente estatísticas de utilização e relatórios de falhas e ajude-nos a melhorar este editor do método de introdução."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema do teclado"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Inglês (RU)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Inglês (EUA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Ativar"</string>
     <string name="not_now" msgid="6172462888202790482">"Agora não"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Já existe o mesmo estilo de introdução: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudo da capacidade de utilização"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Atraso ao manter tecla premida"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Duração vibr. ao premir teclas"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume do som ao premir teclas"</string>
diff --git a/java/res/values-pt/strings-action-keys.xml b/java/res/values-pt/strings-action-keys.xml
index 1d8e760..470846b 100644
--- a/java/res/values-pt/strings-action-keys.xml
+++ b/java/res/values-pt/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Conc."</string>
     <string name="label_send_key" msgid="482252074224462163">"Env."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
 </resources>
diff --git a/java/res/values-pt/strings-emoji-descriptions.xml b/java/res/values-pt/strings-emoji-descriptions.xml
new file mode 100644
index 0000000..1c6ad71
--- /dev/null
+++ b/java/res/values-pt/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Símbolo de copyright"</string>
+    <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Símbolo de marca registrada"</string>
+    <string name="spoken_emoji_203C" msgid="153340916701508663">"Ponto de exclamação duplo"</string>
+    <string name="spoken_emoji_2049" msgid="4877256448299555371">"Ponto de exclamação e ponto de interrogação"</string>
+    <string name="spoken_emoji_2122" msgid="9188440722954720429">"Símbolo de marca comercial"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"Fonte de informação"</string>
+    <string name="spoken_emoji_2194" msgid="8055202727034946680">"Seta para esquerda e para direita"</string>
+    <string name="spoken_emoji_2195" msgid="8028122253301087407">"Seta para cima e para baixo"</string>
+    <string name="spoken_emoji_2196" msgid="4019164898967854363">"Seta para o noroeste"</string>
+    <string name="spoken_emoji_2197" msgid="4255723717709017801">"Seta para o nordeste"</string>
+    <string name="spoken_emoji_2198" msgid="1452063451313622090">"Seta para o sudeste"</string>
+    <string name="spoken_emoji_2199" msgid="6942722693368807849">"Seta para o sudoeste"</string>
+    <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Seta para a esquerda com gancho"</string>
+    <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Seta para a direita com gancho"</string>
+    <string name="spoken_emoji_231A" msgid="6751448803233874993">"Relógio de pulso"</string>
+    <string name="spoken_emoji_231B" msgid="5956428809948426182">"Ampulheta"</string>
+    <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Triângulo duplo preto para a direita"</string>
+    <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Triângulo duplo preto para a esquerda"</string>
+    <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Triângulo duplo preto para cima"</string>
+    <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Triângulo duplo preto para baixo"</string>
+    <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Despertador"</string>
+    <string name="spoken_emoji_23F3" msgid="166900119581024371">"Ampulheta com areia correndo"</string>
+    <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Letra M maiúscula contida em círculo"</string>
+    <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Quadrado pequeno preto"</string>
+    <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Quadrado pequeno branco"</string>
+    <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Triângulo preto para a direita"</string>
+    <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Triângulo preto para a esquerda"</string>
+    <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Quadrado médio branco"</string>
+    <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Quadrado médio preto"</string>
+    <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Quadrado médio branco"</string>
+    <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Quadrado médio preto"</string>
+    <string name="spoken_emoji_2600" msgid="2272722634618990413">"Sol preto com raios"</string>
+    <string name="spoken_emoji_2601" msgid="6205136889311537150">"Nuvem"</string>
+    <string name="spoken_emoji_260E" msgid="8670395193046424238">"Telefone preto"</string>
+    <string name="spoken_emoji_2611" msgid="4530550203347054611">"Urna de votação com marca de verificação"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"Guarda-chuva com gotas de chuva"</string>
+    <string name="spoken_emoji_2615" msgid="3320562382424018588">"Bebida quente"</string>
+    <string name="spoken_emoji_261D" msgid="4690554173549768467">"Dedo indicador branco apontando para cima de frente"</string>
+    <string name="spoken_emoji_263A" msgid="3170094381521989300">"Rosto sorridente branco"</string>
+    <string name="spoken_emoji_2648" msgid="4621241062667020673">"Áries"</string>
+    <string name="spoken_emoji_2649" msgid="7694461245947059086">"Touro"</string>
+    <string name="spoken_emoji_264A" msgid="1258074605878705030">"Gêmeos"</string>
+    <string name="spoken_emoji_264B" msgid="4409219914377810956">"Câncer"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leão"</string>
+    <string name="spoken_emoji_264D" msgid="1504758945499854018">"Virgem"</string>
+    <string name="spoken_emoji_264E" msgid="2354847104530633519">"Libra"</string>
+    <string name="spoken_emoji_264F" msgid="5822933280406416112">"Escorpião"</string>
+    <string name="spoken_emoji_2650" msgid="4832481156714796163">"Sagitário"</string>
+    <string name="spoken_emoji_2651" msgid="840953134601595090">"Capricórnio"</string>
+    <string name="spoken_emoji_2652" msgid="3586925968718775281">"Aquário"</string>
+    <string name="spoken_emoji_2653" msgid="8420547731496254492">"Peixes"</string>
+    <string name="spoken_emoji_2660" msgid="4541170554542412536">"Naipe preto de espadas"</string>
+    <string name="spoken_emoji_2663" msgid="3669352721942285724">"Naipe preto de paus"</string>
+    <string name="spoken_emoji_2665" msgid="6347941599683765843">"Naipe preto de copas"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"Naipe preto de ouros"</string>
+    <string name="spoken_emoji_2668" msgid="7063148281053820386">"Águas termais"</string>
+    <string name="spoken_emoji_267B" msgid="21716857176812762">"Símbolo de reciclagem universal preto"</string>
+    <string name="spoken_emoji_267F" msgid="8833496533226475443">"Símbolo de cadeira de rodas"</string>
+    <string name="spoken_emoji_2693" msgid="7443148847598433088">"Âncora"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Sinal de aviso"</string>
+    <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Sinal de alta tensão"</string>
+    <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Círculo branco médio"</string>
+    <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Círculo preto médio"</string>
+    <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Bola de futebol"</string>
+    <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Bola de beisebol"</string>
+    <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Boneco de neve sem neve"</string>
+    <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Sol atrás da nuvem"</string>
+    <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Serpentário"</string>
+    <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Entrada proíbida"</string>
+    <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Igreja"</string>
+    <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Fonte"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Bandeira no buraco"</string>
+    <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Barco a vela"</string>
+    <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Barraca"</string>
+    <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Bomba de combustível"</string>
+    <string name="spoken_emoji_2702" msgid="4005741160717451912">"Tesoura preta"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"Marca de verificação grossa branca"</string>
+    <string name="spoken_emoji_2708" msgid="7153840886849268988">"Avião"</string>
+    <string name="spoken_emoji_2709" msgid="2217319160724311369">"Envelope"</string>
+    <string name="spoken_emoji_270A" msgid="508347232762319473">"Punho levantado"</string>
+    <string name="spoken_emoji_270B" msgid="6640562128327753423">"Mão levantada"</string>
+    <string name="spoken_emoji_270C" msgid="1344288035704944581">"Mão de vitória"</string>
+    <string name="spoken_emoji_270F" msgid="6108251586067318718">"Lápis"</string>
+    <string name="spoken_emoji_2712" msgid="6320544535087710482">"Ponta de caneta-tinteiro preta"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"Marca de verificação grossa"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"Sinal de multiplicação x grosso"</string>
+    <string name="spoken_emoji_2728" msgid="5650330815808691881">"Brilhos"</string>
+    <string name="spoken_emoji_2733" msgid="8915809595141157327">"Asterisco de oito pontas"</string>
+    <string name="spoken_emoji_2734" msgid="4846583547980754332">"Estrela preta de oito pontas"</string>
+    <string name="spoken_emoji_2744" msgid="4350636647760161042">"Floco de neve"</string>
+    <string name="spoken_emoji_2747" msgid="3718282973916474455">"Brilho"</string>
+    <string name="spoken_emoji_274C" msgid="2752145886733295314">"Sinal de cruzamento"</string>
+    <string name="spoken_emoji_274E" msgid="4262918689871098338">"egativo de sinal de cruzamento contido em quadrado"</string>
+    <string name="spoken_emoji_2753" msgid="6935897159942119808">"Ornamento de ponto de interrogação preto"</string>
+    <string name="spoken_emoji_2754" msgid="7277504915105532954">"Ornamento de ponto de interrogação branco"</string>
+    <string name="spoken_emoji_2755" msgid="6853076969826960210">"Ornamento de ponto de exclamação branco"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"Símbolo de ponto de exclamação grosso"</string>
+    <string name="spoken_emoji_2764" msgid="4214257843609432167">"Coração preto grosso"</string>
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"Sinal de adição grosso"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"Sinal de subtração grosso"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"Sinal de divisão grosso"</string>
+    <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Seta para a direita preta"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"Laçada"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Laçada dupla"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"Seta para a direita com curva para cima"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"Seta para a direita com curva para baixo"</string>
+    <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Seta preta para a esquerda"</string>
+    <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Seta preta para cima"</string>
+    <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Seta preta para baixo"</string>
+    <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Quadrado grande preto"</string>
+    <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Quadrado grande branco"</string>
+    <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Estrela média branca"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Círculo grande grosso"</string>
+    <string name="spoken_emoji_3030" msgid="4609172241893565639">"Traço ondulado"</string>
+    <string name="spoken_emoji_303D" msgid="2545833934975907505">"Marca de alternação de parte"</string>
+    <string name="spoken_emoji_3297" msgid="928912923628973800">"Ideograma \"parabéns\" contido em círculo"</string>
+    <string name="spoken_emoji_3299" msgid="3930347573693668426">"Ideograma \"segredo\" contido em círculo"</string>
+    <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Pedra de mahjong do dragão vermelho"</string>
+    <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Curinga preto de baralho"</string>
+    <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Tipo sanguíneo A"</string>
+    <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Tipo sanguíneo B"</string>
+    <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Tipo sanguíneo O"</string>
+    <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Estacionamento"</string>
+    <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Tipo sanguíneo AB"</string>
+    <string name="spoken_emoji_1F191" msgid="5386969264431429221">"\"CL\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F192" msgid="8324226436829162496">"\"COOL\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F193" msgid="4731758603321515364">"\"‘FREE\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F194" msgid="4903128609556175887">"\"ID\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F195" msgid="1433142500411060924">"\"NEW\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F196" msgid="8825160701159634202">"\"NG\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F197" msgid="7841079241554176535">"\"OK\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F198" msgid="7020298909426960622">"\"SOS\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F199" msgid="5971252667136235630">"\"UP!\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"\"VS\" em letras de fôrma"</string>
+    <string name="spoken_emoji_1F201" msgid="7000490044681139002">"Caracteres koko em katakana contidos em quadrado"</string>
+    <string name="spoken_emoji_1F202" msgid="8560906958695043947">"Caractere sa em katakana contido em quadrado"</string>
+    <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Ideograma \"gratuito\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Ideograma \"lugar reservado\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Ideograma \"proibição\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Ideograma \"vaga\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Ideograma \"aceitação\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Ideograma \"lotação esgotada\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F236" msgid="879755752069393034">"Ideograma \"pago\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Ideograma \"mensal\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Ideograma \"aplicação\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Ideograma \"desconto\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Ideograma \"em atividade\" contido em quadrado"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Ideograma \"vantagem\" contido em círculo"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Ideograma \"aceitar\" contido em círculo"</string>
+    <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Ciclone"</string>
+    <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Enevoado"</string>
+    <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Guarda-chuva fechado"</string>
+    <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Noite estrelada"</string>
+    <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Nascer do sol nas montanhas"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Nascer do sol"</string>
+    <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Cidade ao entardecer"</string>
+    <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Pôr do sol nos prédios"</string>
+    <string name="spoken_emoji_1F308" msgid="688704703985173377">"Arco-íris"</string>
+    <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Ponte à noite"</string>
+    <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Onda do mar"</string>
+    <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Vulcão"</string>
+    <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Via Láctea"</string>
+    <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Globo terrestre Europa/África"</string>
+    <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Globo terrestre Américas"</string>
+    <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Globo terrestre Ásia/Austrália"</string>
+    <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Globo com meridianos"</string>
+    <string name="spoken_emoji_1F311" msgid="623906380914895542">"Símbolo da lua nova"</string>
+    <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Símbolo da lua crescente"</string>
+    <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Símbolo da lua em quarto crescente"</string>
+    <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Símbolo da lua crescente gibosa"</string>
+    <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Símbolo da lua cheia"</string>
+    <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Símbolo da lua minguante gibosa"</string>
+    <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Símbolo da lua em quarto minguante"</string>
+    <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Símbolo da lua minguante"</string>
+    <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Lua crescente"</string>
+    <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Lua nova com rosto"</string>
+    <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Lua em quarto crescente com rosto"</string>
+    <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Lua em quarto minguante com rosto"</string>
+    <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Lua cheia com rosto"</string>
+    <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Sol com rosto"</string>
+    <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Estrela brilhante"</string>
+    <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Estrela cadente"</string>
+    <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Castanha"</string>
+    <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Muda"</string>
+    <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Árvore perenifólia"</string>
+    <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Árvore decídua"</string>
+    <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Palmeira"</string>
+    <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Cacto"</string>
+    <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Tulipa"</string>
+    <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Flor de cerejeira"</string>
+    <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Rosa"</string>
+    <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Hibisco"</string>
+    <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Girassol"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Florescência"</string>
+    <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Espiga de milho"</string>
+    <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Espiga de arroz"</string>
+    <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Erva"</string>
+    <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Trevo de quatro folhas"</string>
+    <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Folha de bordo"</string>
+    <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Folha caída"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Folha ao sabor do vento"</string>
+    <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Cogumelo"</string>
+    <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Tomate"</string>
+    <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Berinjela"</string>
+    <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Uvas"</string>
+    <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Melão"</string>
+    <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Melancia"</string>
+    <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Tangerina"</string>
+    <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Limão"</string>
+    <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Banana"</string>
+    <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Abacaxi"</string>
+    <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Maçã vermelha"</string>
+    <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Maçã verde"</string>
+    <string name="spoken_emoji_1F350" msgid="625802980159197701">"Pera"</string>
+    <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Pêssego"</string>
+    <string name="spoken_emoji_1F352" msgid="965600953360182635">"Cerejas"</string>
+    <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Morango"</string>
+    <string name="spoken_emoji_1F354" msgid="45162285238888494">"Hambúrguer"</string>
+    <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Fatia de pizza"</string>
+    <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Carne com osso"</string>
+    <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Coxa de frango"</string>
+    <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Biscoito de arroz japonês"</string>
+    <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Bolinho de arroz japonês"</string>
+    <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Arroz cozido"</string>
+    <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Arroz com curry"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Tigela quente"</string>
+    <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Espaguete"</string>
+    <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Pão"</string>
+    <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Batatas fritas"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Batata doce assada"</string>
+    <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Dango"</string>
+    <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
+    <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Sushi"</string>
+    <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Camarão frito"</string>
+    <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Kamaboko com design de espiral"</string>
+    <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Sorvete de massa"</string>
+    <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Raspadinha"</string>
+    <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Sorvete"</string>
+    <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Rosquinha"</string>
+    <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Cookie"</string>
+    <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Barra de chocolate"</string>
+    <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Doce"</string>
+    <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Pirulito"</string>
+    <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Flan"</string>
+    <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Pote de mel"</string>
+    <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Torta"</string>
+    <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Marmiteira bento"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Tigela de comida"</string>
+    <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Cozinha"</string>
+    <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Garfo e faca"</string>
+    <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Xícara sem asa"</string>
+    <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Garrafa e copo para saquê"</string>
+    <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Copo para vinho"</string>
+    <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Copo para coquetel"</string>
+    <string name="spoken_emoji_1F379" msgid="790581290787943325">"Bebida tropical"</string>
+    <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Caneca de cerveja"</string>
+    <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Canecas de cerveja brindando"</string>
+    <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Mamadeira"</string>
+    <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Fita de presente"</string>
+    <string name="spoken_emoji_1F381" msgid="614180683680675444">"Presente embrulhado"</string>
+    <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Bolo de aniversário"</string>
+    <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Jack Lanterna"</string>
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Árvore de Natal"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Papai Noel"</string>
+    <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Fogos de artifício"</string>
+    <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Estrelinha"</string>
+    <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Balão"</string>
+    <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Lança confetes"</string>
+    <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Bola de confetes"</string>
+    <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Árvore de Tanabata"</string>
+    <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Bandeiras cruzadas"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Decoração Kadomatsu"</string>
+    <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Bonecas japonesas"</string>
+    <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Biruta de carpa Koinobori"</string>
+    <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Sinos de vento"</string>
+    <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Cerimônia de contemplação da lua Otsukimi"</string>
+    <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Mochila escolar"</string>
+    <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Capelo"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Carrossel de cavalinho"</string>
+    <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Roda-gigante"</string>
+    <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Montanha russa"</string>
+    <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Vara de pescar e peixe"</string>
+    <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Microfone"</string>
+    <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Câmera cinematográfica"</string>
+    <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Cinema"</string>
+    <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Fone de ouvido"</string>
+    <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Aquarela"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Cartola"</string>
+    <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Tenda de circo"</string>
+    <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Ingresso"</string>
+    <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Claquete"</string>
+    <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Artes cênicas"</string>
+    <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Videogame"</string>
+    <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Bela pontaria"</string>
+    <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Caça-níqueis"</string>
+    <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Bilhar"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Dados"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Boliche"</string>
+    <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Baralho temático de flores"</string>
+    <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Nota musical"</string>
+    <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Várias notas musicais"</string>
+    <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Saxofone"</string>
+    <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Guitarra"</string>
+    <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Teclado musical"</string>
+    <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Trompete"</string>
+    <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Violino"</string>
+    <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Partitura"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Camiseta de corrida com faixa"</string>
+    <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Raquete e bola de tênis"</string>
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Esqui e bota de esqui"</string>
+    <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Bola de basquete e cesto"</string>
+    <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Bandeira xadrez"</string>
+    <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Snowboarder"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Corredor"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Surfista"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Troféu"</string>
+    <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Corridas de cavalos"</string>
+    <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Futebol americano"</string>
+    <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Bola de rugby"</string>
+    <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Nadador"</string>
+    <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Construção de casas"</string>
+    <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Casa com jardim"</string>
+    <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Edifício comercial"</string>
+    <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Correio japonês"</string>
+    <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Correio europeu"</string>
+    <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Hospital"</string>
+    <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Banco"</string>
+    <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Caixa eletrônico"</string>
+    <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Hotel"</string>
+    <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Motel"</string>
+    <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Loja de conveniência"</string>
+    <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Escola"</string>
+    <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Loja de departamentos"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Fábrica"</string>
+    <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Luminária izakaya"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Castelo japonês"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Castelo europeu"</string>
+    <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Rato"</string>
+    <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Camundongo"</string>
+    <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Boi"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Búfalo asiático"</string>
+    <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Vaca"</string>
+    <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Leopardo"</string>
+    <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Coelho"</string>
+    <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Gato"</string>
+    <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Dragão"</string>
+    <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Crocodilo"</string>
+    <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Baleia"</string>
+    <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Caracol"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Serpente"</string>
+    <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Cavalo"</string>
+    <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Carneiro"</string>
+    <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Cabra"</string>
+    <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Ovelha"</string>
+    <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Macaco"</string>
+    <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Galo"</string>
+    <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Galinha"</string>
+    <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Cachorro"</string>
+    <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Porco"</string>
+    <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Javali"</string>
+    <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Elefante"</string>
+    <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Polvo"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Concha espiral"</string>
+    <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Inseto"</string>
+    <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Formiga"</string>
+    <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Abelha"</string>
+    <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Joaninha"</string>
+    <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Peixe"</string>
+    <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Peixe tropical"</string>
+    <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Peixe-balão"</string>
+    <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Tartaruga"</string>
+    <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Pintinho nascendo"</string>
+    <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Pintinho"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Pintinho de frente"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Pássaro"</string>
+    <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Pinguim"</string>
+    <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Coala"</string>
+    <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Poodle"</string>
+    <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Dromedário"</string>
+    <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Camelo bactriano"</string>
+    <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Golfinho"</string>
+    <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Smiley de rato"</string>
+    <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Smiley de vaca"</string>
+    <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Smiley de tigre"</string>
+    <string name="spoken_emoji_1F430" msgid="525492897063150160">"Smiley de coelho"</string>
+    <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Smiley de gato"</string>
+    <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Smiley de dragão"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Baleia jorrando água"</string>
+    <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Smiley de cavalo"</string>
+    <string name="spoken_emoji_1F435" msgid="59199202683252958">"Smiley de macaco"</string>
+    <string name="spoken_emoji_1F436" msgid="340544719369009828">"Smiley de cachorro"</string>
+    <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Smiley de porco"</string>
+    <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Smiley de sapo"</string>
+    <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Smiley de porquinho-da-índia"</string>
+    <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Smiley de lobo"</string>
+    <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Smiley de urso"</string>
+    <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Smiley de panda"</string>
+    <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Focinho de porco"</string>
+    <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Pegadas de patas"</string>
+    <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Olhos"</string>
+    <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Orelha"</string>
+    <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Nariz"</string>
+    <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Boca"</string>
+    <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Língua"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Dedo indicador branco apontando para cima"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Dedo indicador branco apontando para baixo"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Dedo indicador branco apontando para a esquerda"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Dedo indicador branco apontando para a direita"</string>
+    <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Sinal de mão em punho"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Sinal de mão acenando"</string>
+    <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Sinal de mão indicando OK"</string>
+    <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Sinal com polegar para cima"</string>
+    <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Sinal com polegar para baixo"</string>
+    <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Sinal de bater palmas"</string>
+    <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Sinal de mãos abertas"</string>
+    <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Coroa"</string>
+    <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Chapéu de mulher"</string>
+    <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Óculos de grau"</string>
+    <string name="spoken_emoji_1F454" msgid="348469036193323252">"Gravata"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Camiseta"</string>
+    <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Calça jeans"</string>
+    <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Vestido"</string>
+    <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Quimono"</string>
+    <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Biquíni"</string>
+    <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Roupas de mulher"</string>
+    <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Bolsinha"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Bolsa"</string>
+    <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Bolsa saco"</string>
+    <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Sapato masculino"</string>
+    <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Tênis"</string>
+    <string name="spoken_emoji_1F460" msgid="305863879170420855">"Sapato de salto alto"</string>
+    <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Sandália feminina"</string>
+    <string name="spoken_emoji_1F462" msgid="1722897795554863734">"Botas femininas"</string>
+    <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Pegadas"</string>
+    <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Busto em silhueta"</string>
+    <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Bustos em silhueta"</string>
+    <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Menino"</string>
+    <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Menina"</string>
+    <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Homem"</string>
+    <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Mulher"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Família"</string>
+    <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Homem e mulher de mãos dadas"</string>
+    <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Dois homens de mãos dadas"</string>
+    <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Duas mulheres de mãos dadas"</string>
+    <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Policial"</string>
+    <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Mulher com orelhas de coelho"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Noiva com véu"</string>
+    <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Pessoa loira"</string>
+    <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Homem com gua pi mao"</string>
+    <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Homem com turbante"</string>
+    <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Idoso"</string>
+    <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Idosa"</string>
+    <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Bebê"</string>
+    <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Operário de construção civil"</string>
+    <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Princesa"</string>
+    <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Ogro japonês"</string>
+    <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Gnomo japonês"</string>
+    <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Fantasma"</string>
+    <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Anjo bebê"</string>
+    <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Alienígena"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Monstro alienígena"</string>
+    <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Duende"</string>
+    <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Caveira"</string>
+    <string name="spoken_emoji_1F481" msgid="320408708521966893">"Recepcionista de balcão de informações"</string>
+    <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Guarda"</string>
+    <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Dançarina"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Batom"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Esmalte"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Massagem facial"</string>
+    <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Corte de cabelo"</string>
+    <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Poste de barbearia"</string>
+    <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Seringa"</string>
+    <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Comprimido"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Marca de beijo"</string>
+    <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Carta de amor"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Anel"</string>
+    <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Gema"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Beijo"</string>
+    <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Buquê"</string>
+    <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Casal com coração"</string>
+    <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Casamento"</string>
+    <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Coração batendo"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Coração partido"</string>
+    <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Dois corações"</string>
+    <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Coração brilhando"</string>
+    <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Coração crescendo"</string>
+    <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Coração com flecha"</string>
+    <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Coração azul"</string>
+    <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Coração verde"</string>
+    <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Coração amarelo"</string>
+    <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Coração roxo"</string>
+    <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Coração com fita"</string>
+    <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Corações em círculo"</string>
+    <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Decoração de coração"</string>
+    <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Forma de losango com ponto interno"</string>
+    <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Lâmpada elétrica"</string>
+    <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Símbolo de raiva"</string>
+    <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Bomba"</string>
+    <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Símbolo de sono"</string>
+    <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Símbolo de colisão"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Símbolo da gota de suor"</string>
+    <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Gota"</string>
+    <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Símbolo de traço"</string>
+    <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Cocô"</string>
+    <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Bíceps contraídos"</string>
+    <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Símbolo de tontura"</string>
+    <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Balão de fala"</string>
+    <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Balão de pensamento"</string>
+    <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Flor branca"</string>
+    <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Símbolo de cem pontos"</string>
+    <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Saco de dinheiro"</string>
+    <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Câmbio de moeda"</string>
+    <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Sinal de cifrão grosso"</string>
+    <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Cartão de crédito"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Nota bancária com sinal de iene"</string>
+    <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Nota bancária com sinal de dólar"</string>
+    <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Nota bancária com sinal de euro"</string>
+    <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Nota bancária com sinal de libra"</string>
+    <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Dinheiro com asas"</string>
+    <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Gráfico com tendência ascendente e símbolo de iene"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Assento"</string>
+    <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Computador pessoal"</string>
+    <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Valise"</string>
+    <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minidisco"</string>
+    <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Disquete"</string>
+    <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Disco óptico"</string>
+    <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
+    <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Pasta de arquivos"</string>
+    <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Pasta de arquivos aberta"</string>
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Página com curva"</string>
+    <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Página voltada para cima"</string>
+    <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Calendário"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Calendário destacável"</string>
+    <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Índice de cartões"</string>
+    <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Gráfico com tendência ascendente"</string>
+    <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Gráfico com tendência descendente"</string>
+    <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Gráfico de barras"</string>
+    <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Prancheta"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Alfinete"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Alfinete redondo"</string>
+    <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Clipe de papel"</string>
+    <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Régua reta"</string>
+    <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Régua triangular"</string>
+    <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"Guias de marca-página"</string>
+    <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Livro-razão"</string>
+    <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Bloco de anotações"</string>
+    <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Bloco de anotações com capa decorativa"</string>
+    <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Livro fechado"</string>
+    <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Livro aberto"</string>
+    <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Livro verde"</string>
+    <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Livro azul"</string>
+    <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Livro laranja"</string>
+    <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Livros"</string>
+    <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Crachá"</string>
+    <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Pergaminho"</string>
+    <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Memorando"</string>
+    <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Telefone"</string>
+    <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Pager"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Aparelho de fax"</string>
+    <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Antena de satélite"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Alto-falante para discursos públicos"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Megafone em uso"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Bandeja da caixa de saída"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Bandeja da caixa de entrada"</string>
+    <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Pacote"</string>
+    <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Símbolo de e-mail"</string>
+    <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Envelope recebido"</string>
+    <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Envelope com seta para baixo"</string>
+    <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Caixa de correio fechada com bandeira abaixada"</string>
+    <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Caixa de correio fechada com bandeira levantada"</string>
+    <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Caixa de correio aberta com bandeira levantada"</string>
+    <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Caixa de correio aberta com bandeira abaixada"</string>
+    <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Caixa de correio"</string>
+    <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Corneta de correio"</string>
+    <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Jornal"</string>
+    <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Celular"</string>
+    <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Celular com seta para a direita"</string>
+    <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Modo de vibração"</string>
+    <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Celular desligado"</string>
+    <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Proibido usar celular"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Antena com barras"</string>
+    <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Câmera"</string>
+    <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Filmadora"</string>
+    <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Televisão"</string>
+    <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Rádio"</string>
+    <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Videocassete"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Setas entrelaçadas para a direita"</string>
+    <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Setas para a esquerda e para a direita em sentido horário"</string>
+    <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Setas para a esquerda e para a direita em sentido horário com \"1\""</string>
+    <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Setas para baixo e para cima em sentido horário"</string>
+    <string name="spoken_emoji_1F504" msgid="708290317843535943">"Setas para baixo e para cima em sentido anti-horário"</string>
+    <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Símbolo de baixo brilho"</string>
+    <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Símbolo de alto brilho"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Alto-falante cortado"</string>
+    <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Alto-falante"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Alto-falante com onda sonora"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Alto-falante com três ondas sonoras"</string>
+    <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Bateria"</string>
+    <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Tomada elétrica"</string>
+    <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Lente de aumento virada para a esquerda"</string>
+    <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Lente de aumento virada para a direita"</string>
+    <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Cadeado com caneta-tinteiro"</string>
+    <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Cadeado fechado com chave"</string>
+    <string name="spoken_emoji_1F511" msgid="262319867774655688">"Chave"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Cadeado"</string>
+    <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Cadeado aberto"</string>
+    <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Sino"</string>
+    <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Sino cortado"</string>
+    <string name="spoken_emoji_1F516" msgid="108097933937925381">"Marca-página"</string>
+    <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Símbolo de link"</string>
+    <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Botão de opção"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"\"Back\" com seta para a esquerda"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"\"End\" com seta para a esquerda"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"\"On!\" com seta para a esquerda e para a direita"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"\"Soon\" com seta para a direita"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"\"Top\" com seta para cima"</string>
+    <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Símbolo de proibido para menores de 18"</string>
+    <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Tecla do dez"</string>
+    <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Símbolo de entrada de letras latinas maiúsculas"</string>
+    <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Símbolo de entrada de letras latinas minúsculas"</string>
+    <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Símbolo de entrada de números"</string>
+    <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Símbolo de entrada de símbolos"</string>
+    <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Símbolo de entrada de letras latinas"</string>
+    <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Fogo"</string>
+    <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Tocha elétrica"</string>
+    <string name="spoken_emoji_1F527" msgid="134257142354034271">"Chave inglesa"</string>
+    <string name="spoken_emoji_1F528" msgid="700627429570609375">"Martelo"</string>
+    <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Porca e parafuso"</string>
+    <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Facão"</string>
+    <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Pistola"</string>
+    <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Microscópio"</string>
+    <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Telescópio"</string>
+    <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Bola de cristal"</string>
+    <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Estrela de seis pontas com ponto central"</string>
+    <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Símbolo japonês para iniciante"</string>
+    <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Emblema de tridente"</string>
+    <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Botão quadrado preto"</string>
+    <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Botão quadrado branco"</string>
+    <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Círculo grande vermelho"</string>
+    <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Círculo grande azul"</string>
+    <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Losango grande laranja"</string>
+    <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Losango grande azul"</string>
+    <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Losango pequeno laranja"</string>
+    <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Losango pequeno azul"</string>
+    <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Triângulo vermelho apontando para cima"</string>
+    <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Triângulo vermelho apontando para baixo"</string>
+    <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Triângulo pequeno vermelho apontando para cima"</string>
+    <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Triângulo pequeno vermelho apontando para baixo"</string>
+    <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Relógio mostrando 01h00"</string>
+    <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Relógio mostrando 02h00"</string>
+    <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Relógio mostrando 03h00"</string>
+    <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Relógio mostrando 04h00"</string>
+    <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Relógio mostrando 05h00"</string>
+    <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Relógio mostrando 06h00"</string>
+    <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Relógio mostrando 07h00"</string>
+    <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Relógio mostrando 08h00"</string>
+    <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Relógio mostrando 09h00"</string>
+    <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Relógio mostrando 10h00"</string>
+    <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Relógio mostrando 11h00"</string>
+    <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Relógio mostrando 12h00"</string>
+    <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Relógio mostrando 01h30"</string>
+    <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Relógio mostrando 02h30"</string>
+    <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Relógio mostrando 03h30"</string>
+    <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Relógio mostrando 04h30"</string>
+    <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Relógio mostrando 05h30"</string>
+    <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Relógio mostrando 06h30"</string>
+    <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Relógio mostrando 07h30"</string>
+    <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Relógio mostrando 08h30"</string>
+    <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Relógio mostrando 09h30"</string>
+    <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Relógio mostrando 10h30"</string>
+    <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Relógio mostrando 11h30"</string>
+    <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Relógio mostrando 12h30"</string>
+    <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Monte Fuji"</string>
+    <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Torre de Tóquio"</string>
+    <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Estátua da Liberdade"</string>
+    <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Silhueta do Japão"</string>
+    <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Moai"</string>
+    <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Rosto mostrando os dentes"</string>
+    <string name="spoken_emoji_1F601" msgid="746026523967444503">"Rosto mostrando os dentes com olhos sorridentes"</string>
+    <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Rosto com lágrimas de alegria"</string>
+    <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Rosto sorridente com boca aberta"</string>
+    <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Rosto sorridente com boca aberta e olhos sorridentes"</string>
+    <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Rosto sorridente com boca aberta e suando frio"</string>
+    <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Rosto sorridente com boca aberta e olhos bem fechados"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Rosto sorridente com auréola"</string>
+    <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Rosto sorridente com chifres"</string>
+    <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Rosto com olho piscando"</string>
+    <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Rosto sorridente com olhos sorridentes"</string>
+    <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Rosto saboreando comida deliciosa"</string>
+    <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Rosto aliviado"</string>
+    <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Rosto sorridente com olhos de coração"</string>
+    <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Rosto sorridente com óculos de sol"</string>
+    <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Rosto com meio sorriso"</string>
+    <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Rosto neutro"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Rosto sem expressão"</string>
+    <string name="spoken_emoji_1F612" msgid="985081329745137998">"Rosto de desinteressado"</string>
+    <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Rosto suando frio"</string>
+    <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Rosto pensativo"</string>
+    <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Rosto confuso"</string>
+    <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Rosto desconcertado"</string>
+    <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Rosto beijando"</string>
+    <string name="spoken_emoji_1F618" msgid="408207170572303753">"Rosto jogando beijo"</string>
+    <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Rosto beijando com olhos sorridentes"</string>
+    <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Rosto beijando com olhos fechados"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Rosto com língua de fora"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Rosto com língua de fora e piscando"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Rosto com língua de fora e olhos bem fechados"</string>
+    <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Rosto de frustrado"</string>
+    <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Rosto preocupado"</string>
+    <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Rosto nervoso"</string>
+    <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Rosto de desaprovação"</string>
+    <string name="spoken_emoji_1F622" msgid="29291014645931822">"Rosto chorando"</string>
+    <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Rosto de perseverante"</string>
+    <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Rosto com aparência de triunfo"</string>
+    <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Rosto com misto de decepção e alívio"</string>
+    <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Rosto franzido com boca aberta"</string>
+    <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Rosto angustiado"</string>
+    <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Rosto temeroso"</string>
+    <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Rosto fatigado"</string>
+    <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Rosto sonolento"</string>
+    <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Rosto cansado"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Rosto mostrando os dentes"</string>
+    <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Rosto chorando alto"</string>
+    <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Rosto com boca aberta"</string>
+    <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Rosto silenciado"</string>
+    <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Rosto com boca aberta e suando frio"</string>
+    <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Rosto gritando de medo"</string>
+    <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Rosto surpreso"</string>
+    <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Rosto enrubescido"</string>
+    <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Rosto dormindo"</string>
+    <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Rosto tonto"</string>
+    <string name="spoken_emoji_1F636" msgid="947000211822375683">"Rosto sem boca"</string>
+    <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Rosto com máscara hospitalar"</string>
+    <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Smiley de gato feliz com olhos sorridentes"</string>
+    <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Smiley de gato com lágrimas de alegria"</string>
+    <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Smiley de gato sorridente com boca aberta"</string>
+    <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Smiley de gato sorridente com olhos de coração"</string>
+    <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Smiley de gato com sorriso maroto"</string>
+    <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Smiley de gato beijando com olhos fechados"</string>
+    <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Smiley de gato de desaprovação"</string>
+    <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Smiley de gato chorando"</string>
+    <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Smiley de gato fatigado"</string>
+    <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Smiley com gesto de reprovação"</string>
+    <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Smiley com gesto de ok"</string>
+    <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Pessoa curvando-se bastante"</string>
+    <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Macaco cego"</string>
+    <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Macaco surdo"</string>
+    <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Macaco mudo"</string>
+    <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Pessoa feliz levantando uma mão"</string>
+    <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Pessoa levantando as mãos em comemoração"</string>
+    <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Pessoa franzindo a testa"</string>
+    <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Pessoa com rosto de desaprovação"</string>
+    <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Pessoa com mãos unidas em oração"</string>
+    <string name="spoken_emoji_1F680" msgid="513263736012689059">"Foguete"</string>
+    <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Helicóptero"</string>
+    <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Locomotiva a vapor"</string>
+    <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Vagão"</string>
+    <string name="spoken_emoji_1F684" msgid="346396777356203608">"Trem de alta velocidade"</string>
+    <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Trem-bala de alta velocidade"</string>
+    <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Trem"</string>
+    <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metrô"</string>
+    <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Metrô leve"</string>
+    <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Estação"</string>
+    <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Bonde"</string>
+    <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Elétrico"</string>
+    <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Ônibus"</string>
+    <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Ônibus de frente"</string>
+    <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Trólebus"</string>
+    <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Ponto de ônibus"</string>
+    <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Micro-ônibus"</string>
+    <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulância"</string>
+    <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Caminhão de bombeiros"</string>
+    <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Viatura policial"</string>
+    <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Viatura policial de frente"</string>
+    <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Táxi"</string>
+    <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Táxi de frente"</string>
+    <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Automóvel"</string>
+    <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Automóvel de frente"</string>
+    <string name="spoken_emoji_1F699" msgid="630317052666590607">"Veículo recreativo"</string>
+    <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Caminhão de entrega"</string>
+    <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Caminhão articulado"</string>
+    <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Trator"</string>
+    <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Monotrilho"</string>
+    <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Trem de montanha"</string>
+    <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Trem suspenso"</string>
+    <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Bondinho"</string>
+    <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Teleférico"</string>
+    <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Navio"</string>
+    <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Barco a remo"</string>
+    <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Lancha"</string>
+    <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Semáforo horizontal"</string>
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Semáforo vertical"</string>
+    <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Sinal de construção"</string>
+    <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Giroflex de viaturas policiais"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Bandeira triangular em poste"</string>
+    <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Porta"</string>
+    <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Sinal de entrada proibida"</string>
+    <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Símbolo de permitido fumar"</string>
+    <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Símbolo de proibido fumar"</string>
+    <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Símbolo de \"jogue o lixo no lixo\""</string>
+    <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Símbolo de proibido jogar lixo"</string>
+    <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Símbolo de água potável"</string>
+    <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Símbolo de água não potável"</string>
+    <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Bicicleta"</string>
+    <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Proibido bicicletas"</string>
+    <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Ciclista"</string>
+    <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Ciclista de montanha"</string>
+    <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Pedestre"</string>
+    <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Proibido pedestres"</string>
+    <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Travessia de crianças"</string>
+    <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Símbolo masculino"</string>
+    <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Símbolo feminino"</string>
+    <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Banheiro"</string>
+    <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Símbolo de bebê"</string>
+    <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Vaso sanitário"</string>
+    <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"WC"</string>
+    <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Chuveiro"</string>
+    <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Banho"</string>
+    <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Banheira"</string>
+    <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Controle de passaportes"</string>
+    <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Alfândega"</string>
+    <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Esteira de bagagem"</string>
+    <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Bagagem abandonada"</string>
+</resources>
diff --git a/java/res/values-pt/strings-talkback-descriptions.xml b/java/res/values-pt/strings-talkback-descriptions.xml
index b9a70f3..7ad42ad 100644
--- a/java/res/values-pt/strings-talkback-descriptions.xml
+++ b/java/res/values-pt/strings-talkback-descriptions.xml
@@ -27,14 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> realiza correção automática"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Código de tecla %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
-    <skip />
-    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
-    <skip />
-    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
-    <skip />
-    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
-    <skip />
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Mais símbolos"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Símbolos"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Excluir"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Símbolos"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letras"</string>
@@ -53,8 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift ativado"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock ativado"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Modo de símbolos"</string>
-    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
-    <skip />
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Modo mais símbolos"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Modo de letras"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Modo de telefone"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Modo de símbolos do telefone"</string>
@@ -76,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Lugares"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbolos"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index afee26d..f19ce5e 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opções de entrada"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Pesq. comandos de reg."</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Buscar nomes de contatos"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"O corretor ortográfico usa entradas de sua lista de contatos"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar ao tocar a tecla"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Idiomas de entrada"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Toque novamente para salvar"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Ativar comentário do usuário"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Ajude a melhorar este editor de método de entrada enviando automaticamente estatísticas de uso e relatórios de falhas."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema do teclado"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"inglês (Reino Unido)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"inglês (EUA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Ativar"</string>
     <string name="not_now" msgid="6172462888202790482">"Agora não"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"O estilo de entrada já existe: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudo de utilização"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Atraso ao pressionar teclas"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Duração da vibração ao tocar"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume ao tocar na tela"</string>
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index 2ea98cf..526ec73 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -22,7 +22,6 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- no translation found for english_ime_input_options (3909945612939668554) -->
     <skip />
-    <!-- no translation found for english_ime_research_log (8492602295696577851) -->
     <skip />
     <!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
     <skip />
@@ -134,8 +133,6 @@
     <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
     <skip />
     <string name="has_dictionary" msgid="6071847973466625007">"Dicziunari disponibel"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Activar il feedback da l\'utilisader"</string>
-    <!-- no translation found for prefs_description_log (7525225584555429211) -->
     <skip />
     <!-- no translation found for keyboard_layout (8451164783510487501) -->
     <skip />
@@ -191,7 +188,6 @@
     <skip />
     <!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
     <skip />
-    <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
     <skip />
     <!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
     <skip />
diff --git a/java/res/values-ro/strings-action-keys.xml b/java/res/values-ro/strings-action-keys.xml
index 51aa82f..bee4b12 100644
--- a/java/res/values-ro/strings-action-keys.xml
+++ b/java/res/values-ro/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Înap."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Gata"</string>
     <string name="label_send_key" msgid="482252074224462163">"Trim."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pauză"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Așt."</string>
 </resources>
diff --git a/java/res/values-ro/strings-emoji-descriptions.xml b/java/res/values-ro/strings-emoji-descriptions.xml
new file mode 100644
index 0000000..a4a1a95
--- /dev/null
+++ b/java/res/values-ro/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Semnul Copyright"</string>
+    <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Semnul Marcă înregistrată"</string>
+    <string name="spoken_emoji_203C" msgid="153340916701508663">"Semn de exclamare dublu"</string>
+    <string name="spoken_emoji_2049" msgid="4877256448299555371">"Semn de exclamare și întrebare"</string>
+    <string name="spoken_emoji_2122" msgid="9188440722954720429">"Semn marcă înregistrată"</string>
+    <string name="spoken_emoji_2139" msgid="9114342638917304327">"Sursă de informații"</string>
+    <string name="spoken_emoji_2194" msgid="8055202727034946680">"Săgeată stânga-dreapta"</string>
+    <string name="spoken_emoji_2195" msgid="8028122253301087407">"Săgeată sus-jos"</string>
+    <string name="spoken_emoji_2196" msgid="4019164898967854363">"Săgeată nord-vest"</string>
+    <string name="spoken_emoji_2197" msgid="4255723717709017801">"Săgeată nord-est"</string>
+    <string name="spoken_emoji_2198" msgid="1452063451313622090">"Săgeată sud-est"</string>
+    <string name="spoken_emoji_2199" msgid="6942722693368807849">"Săgeată sud-vest"</string>
+    <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Săgeată încovoiată spre stânga"</string>
+    <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Săgeată încovoiată spre dreapta"</string>
+    <string name="spoken_emoji_231A" msgid="6751448803233874993">"Ceas de mână"</string>
+    <string name="spoken_emoji_231B" msgid="5956428809948426182">"Clepsidră"</string>
+    <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Triunghi dublu, negru, orientat spre dreapta"</string>
+    <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Triunghi dublu, negru, orientat spre stânga"</string>
+    <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Triunghi dublu, negru, orientat în sus"</string>
+    <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Triunghi dublu, negru, orientat în jos"</string>
+    <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Ceas deşteptător"</string>
+    <string name="spoken_emoji_23F3" msgid="166900119581024371">"Clepsidră cu nisip"</string>
+    <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Majuscula „M”, din alfabetul latin, încercuită"</string>
+    <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Pătrat mic negru"</string>
+    <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Pătrat mic alb"</string>
+    <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Triunghi negru, orientat spre dreapta"</string>
+    <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Triunghi negru, orientat spre stânga"</string>
+    <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Pătrat mediu alb"</string>
+    <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Pătrat negru mediu"</string>
+    <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Pătrat alb, mijlociu spre mic"</string>
+    <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Pătrat negru, mijlociu spre mic"</string>
+    <string name="spoken_emoji_2600" msgid="2272722634618990413">"Soare negru cu raze"</string>
+    <string name="spoken_emoji_2601" msgid="6205136889311537150">"Nor"</string>
+    <string name="spoken_emoji_260E" msgid="8670395193046424238">"Telefon negru"</string>
+    <string name="spoken_emoji_2611" msgid="4530550203347054611">"Casetă cu bifă"</string>
+    <string name="spoken_emoji_2614" msgid="1612791247861229500">"Umbrelă cu picături de ploaie"</string>
+    <string name="spoken_emoji_2615" msgid="3320562382424018588">"Băuturi calde"</string>
+    <string name="spoken_emoji_261D" msgid="4690554173549768467">"Deget arătător alb, orientat în sus"</string>
+    <string name="spoken_emoji_263A" msgid="3170094381521989300">"Față zâmbitoare albă"</string>
+    <string name="spoken_emoji_2648" msgid="4621241062667020673">"Berbec"</string>
+    <string name="spoken_emoji_2649" msgid="7694461245947059086">"Taur"</string>
+    <string name="spoken_emoji_264A" msgid="1258074605878705030">"Gemeni"</string>
+    <string name="spoken_emoji_264B" msgid="4409219914377810956">"Rac"</string>
+    <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leu"</string>
+    <string name="spoken_emoji_264D" msgid="1504758945499854018">"Fecioară"</string>
+    <string name="spoken_emoji_264E" msgid="2354847104530633519">"Balanţă"</string>
+    <string name="spoken_emoji_264F" msgid="5822933280406416112">"Scorpion"</string>
+    <string name="spoken_emoji_2650" msgid="4832481156714796163">"Săgetător"</string>
+    <string name="spoken_emoji_2651" msgid="840953134601595090">"Capricorn"</string>
+    <string name="spoken_emoji_2652" msgid="3586925968718775281">"Vărsător"</string>
+    <string name="spoken_emoji_2653" msgid="8420547731496254492">"Peşti"</string>
+    <string name="spoken_emoji_2660" msgid="4541170554542412536">"Pică neagră"</string>
+    <string name="spoken_emoji_2663" msgid="3669352721942285724">"Treflă neagră"</string>
+    <string name="spoken_emoji_2665" msgid="6347941599683765843">"Inimă neagra"</string>
+    <string name="spoken_emoji_2666" msgid="8296769213401115999">"Romb negru"</string>
+    <string name="spoken_emoji_2668" msgid="7063148281053820386">"Izvoare termale"</string>
+    <string name="spoken_emoji_267B" msgid="21716857176812762">"Simbol negru, universal, de reciclare"</string>
+    <string name="spoken_emoji_267F" msgid="8833496533226475443">"Simbol pentru scaun cu rotile"</string>
+    <string name="spoken_emoji_2693" msgid="7443148847598433088">"Ancoră"</string>
+    <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Semn de avertizare"</string>
+    <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Semn de înaltă tensiune"</string>
+    <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Cerc alb mediu"</string>
+    <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Cerc negru mediu"</string>
+    <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Minge de fotbal"</string>
+    <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Minge de baseball"</string>
+    <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Om de zăpadă fără zăpadă"</string>
+    <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Soare în spatele unui nor"</string>
+    <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Ophiuchus"</string>
+    <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Intrarea interzisă"</string>
+    <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Biserică"</string>
+    <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Fântână"</string>
+    <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Steag în gaură"</string>
+    <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Barcă cu pânze"</string>
+    <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Cort"</string>
+    <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Pompă de combustibil"</string>
+    <string name="spoken_emoji_2702" msgid="4005741160717451912">"Foarfece negru"</string>
+    <string name="spoken_emoji_2705" msgid="164605766946697759">"Bifă albă îngroșată"</string>
+    <string name="spoken_emoji_2708" msgid="7153840886849268988">"Avion"</string>
+    <string name="spoken_emoji_2709" msgid="2217319160724311369">"Plic"</string>
+    <string name="spoken_emoji_270A" msgid="508347232762319473">"Pumn ridicat"</string>
+    <string name="spoken_emoji_270B" msgid="6640562128327753423">"Mână ridicată"</string>
+    <string name="spoken_emoji_270C" msgid="1344288035704944581">"Mână cu semnul victoriei"</string>
+    <string name="spoken_emoji_270F" msgid="6108251586067318718">"Creion"</string>
+    <string name="spoken_emoji_2712" msgid="6320544535087710482">"Peniță neagră"</string>
+    <string name="spoken_emoji_2714" msgid="1968242800064001654">"Bifă îngroșată"</string>
+    <string name="spoken_emoji_2716" msgid="511941294762977228">"Înmulțire complexă x"</string>
+    <string name="spoken_emoji_2728" msgid="5650330815808691881">"Scântei"</string>
+    <string name="spoken_emoji_2733" msgid="8915809595141157327">"Asterisc cu opt colțuri"</string>
+    <string name="spoken_emoji_2734" msgid="4846583547980754332">"Stea neagră, cu opt colțuri"</string>
+    <string name="spoken_emoji_2744" msgid="4350636647760161042">"Fulg de nea"</string>
+    <string name="spoken_emoji_2747" msgid="3718282973916474455">"Scânteie"</string>
+    <string name="spoken_emoji_274C" msgid="2752145886733295314">"Semn x"</string>
+    <string name="spoken_emoji_274E" msgid="4262918689871098338">"Semn x alb pe fond negru în pătrat"</string>
+    <string name="spoken_emoji_2753" msgid="6935897159942119808">"Semn de întrebare ornamental negru"</string>
+    <string name="spoken_emoji_2754" msgid="7277504915105532954">"Semn de întrebare ornamental alb"</string>
+    <string name="spoken_emoji_2755" msgid="6853076969826960210">"Semn de exclamare ornamental alb"</string>
+    <string name="spoken_emoji_2757" msgid="3707907828776912174">"Semn de exclamare îngroșat"</string>
+    <string name="spoken_emoji_2764" msgid="4214257843609432167">"Inimă neagră îngroșată"</string>
+    <string name="spoken_emoji_2795" msgid="6563954833786162168">"Semn plus îngroșat"</string>
+    <string name="spoken_emoji_2796" msgid="5990926508250772777">"Semn minus îngroșat"</string>
+    <string name="spoken_emoji_2797" msgid="24694184172879174">"Semn de împărțire îngroșat"</string>
+    <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Săgeată neagră, spre dreapta"</string>
+    <string name="spoken_emoji_27B0" msgid="203395646864662198">"Buclă ondulată"</string>
+    <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Buclă ondulată dublă"</string>
+    <string name="spoken_emoji_2934" msgid="9062130477982973457">"Săgeată orientată spre dreapta, apoi curbată în sus"</string>
+    <string name="spoken_emoji_2935" msgid="6198710960720232074">"Săgeată orientată spre dreapta, apoi curbată în jos"</string>
+    <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Săgeată neagră orientată spre stânga"</string>
+    <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Săgeată neagră orientată în sus"</string>
+    <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Săgeată neagră orientată în jos"</string>
+    <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Pătrat negru mare"</string>
+    <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Pătrat alb mare"</string>
+    <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Stea albă medie"</string>
+    <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Cerc îngroșat, mare"</string>
+    <string name="spoken_emoji_3030" msgid="4609172241893565639">"Liniuță ondulată"</string>
+    <string name="spoken_emoji_303D" msgid="2545833934975907505">"Semn de modificare"</string>
+    <string name="spoken_emoji_3297" msgid="928912923628973800">"Ideogramă încercuită - felicitări"</string>
+    <string name="spoken_emoji_3299" msgid="3930347573693668426">"Ideogramă încercuită - secret"</string>
+    <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Piesă Mahjong dragon roșu"</string>
+    <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Carte de joc joker negru"</string>
+    <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Grupa de sânge A"</string>
+    <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Grupa de sânge B"</string>
+    <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Grupa de sânge O"</string>
+    <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Parcare"</string>
+    <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Grupa de sânge AB"</string>
+    <string name="spoken_emoji_1F191" msgid="5386969264431429221">"„CL” în pătrat"</string>
+    <string name="spoken_emoji_1F192" msgid="8324226436829162496">"„COOL” în pătrat"</string>
+    <string name="spoken_emoji_1F193" msgid="4731758603321515364">"„FREE” în pătrat"</string>
+    <string name="spoken_emoji_1F194" msgid="4903128609556175887">"„ID” în pătrat"</string>
+    <string name="spoken_emoji_1F195" msgid="1433142500411060924">"„NEW” în pătrat"</string>
+    <string name="spoken_emoji_1F196" msgid="8825160701159634202">"„N G” în pătrat"</string>
+    <string name="spoken_emoji_1F197" msgid="7841079241554176535">"„OK” în pătrat"</string>
+    <string name="spoken_emoji_1F198" msgid="7020298909426960622">"„SOS” în pătrat"</string>
+    <string name="spoken_emoji_1F199" msgid="5971252667136235630">"„UP” cu semn de exclamare în pătrat"</string>
+    <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"„VS” în pătrat"</string>
+    <string name="spoken_emoji_1F201" msgid="7000490044681139002">"„Katakana” în pătrat"</string>
+    <string name="spoken_emoji_1F202" msgid="8560906958695043947">"„Servicii Katakana” în pătrat"</string>
+    <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Caracter ideografic „Gratuit” în pătrat"</string>
+    <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Caracter ideografic „Loc rezervat” în pătrat"</string>
+    <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Caracter ideografic „Interzis” în pătrat"</string>
+    <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Caracter ideografic „Loc liber” în pătrat"</string>
+    <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Caracter ideografic „Aprobare” în pătrat"</string>
+    <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Caracter ideografic „Nu sunt locuri libere” în pătrat"</string>
+    <string name="spoken_emoji_1F236" msgid="879755752069393034">"Caracter ideografic „Cu plată” în pătrat"</string>
+    <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Caracter ideografic „Lunar” în pătrat"</string>
+    <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Caracter ideografic „Înscriere” în pătrat"</string>
+    <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Caracter ideografic „Reducere” în pătrat"</string>
+    <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Caracter ideografic „În activitate” în pătrat"</string>
+    <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Caracter ideografic „Avantaj” în pătrat"</string>
+    <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Caracter ideografic „Acord” în pătrat"</string>
+    <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Ciclon"</string>
+    <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Ceaţă"</string>
+    <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Umbrelă închisă"</string>
+    <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Noapte cu stele"</string>
+    <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Răsărit peste munți"</string>
+    <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Răsărit"</string>
+    <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Peisaj urban la asfințit"</string>
+    <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Apus de soare deasupra clădirilor"</string>
+    <string name="spoken_emoji_1F308" msgid="688704703985173377">"Curcubeu"</string>
+    <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Pod noaptea"</string>
+    <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Val"</string>
+    <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Vulcan"</string>
+    <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Calea Lactee"</string>
+    <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Globul pământesc: Europa-Africa"</string>
+    <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Globul pământesc: continentul american"</string>
+    <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Globul pământesc: Asia-Australia"</string>
+    <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Glob pământesc cu meridiane"</string>
+    <string name="spoken_emoji_1F311" msgid="623906380914895542">"Simbolul Lună nouă"</string>
+    <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Simbolul Lună nouă"</string>
+    <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Simbolul Primul pătrar"</string>
+    <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Simbolul Înainte de lună plină"</string>
+    <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Simbolul Lună plină"</string>
+    <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Simbolul După lună plină"</string>
+    <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Simbolul Ultimul pătrar"</string>
+    <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Simbolul Înainte de lună nouă"</string>
+    <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Semilună"</string>
+    <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Lună nouă, cu chip"</string>
+    <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Lună în primul pătrar, cu chip"</string>
+    <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Lună în ultimul pătrar, cu chip"</string>
+    <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Lună plină, cu chip"</string>
+    <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Soare cu chip"</string>
+    <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Stea strălucitoare"</string>
+    <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Stea căzătoare"</string>
+    <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Castană"</string>
+    <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Puiet"</string>
+    <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Copac veșnic verde"</string>
+    <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Copac cu frunze căzătoare"</string>
+    <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Palmier"</string>
+    <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Cactus"</string>
+    <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Lalea"</string>
+    <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Floare de cireș"</string>
+    <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Trandafir"</string>
+    <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Hibiscus"</string>
+    <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Floarea-soarelui"</string>
+    <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Floare"</string>
+    <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Spic de porumb"</string>
+    <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Spic de orez"</string>
+    <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Plantă"</string>
+    <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Trifoi cu patru foi"</string>
+    <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Frunză de arțar"</string>
+    <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Frunză căzută"</string>
+    <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Frunză în vânt"</string>
+    <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Ciupercă"</string>
+    <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Roșie"</string>
+    <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Vânătă"</string>
+    <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Struguri"</string>
+    <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Pepene galben"</string>
+    <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Pepene verde"</string>
+    <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Mandarină"</string>
+    <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Lămâie"</string>
+    <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Banană"</string>
+    <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Ananas"</string>
+    <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Măr roșu"</string>
+    <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Măr verde"</string>
+    <string name="spoken_emoji_1F350" msgid="625802980159197701">"Pară"</string>
+    <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Piersic"</string>
+    <string name="spoken_emoji_1F352" msgid="965600953360182635">"Cireșe"</string>
+    <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Căpșună"</string>
+    <string name="spoken_emoji_1F354" msgid="45162285238888494">"Hamburger"</string>
+    <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Felie de pizza"</string>
+    <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Carne pe os"</string>
+    <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Picior de pasăre"</string>
+    <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Biscuite de orez"</string>
+    <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Chiftea de orez"</string>
+    <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Orez gătit"</string>
+    <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Orez cu curry"</string>
+    <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Castron aburind"</string>
+    <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Spaghete"</string>
+    <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Pâine"</string>
+    <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Cartofi prăjiți"</string>
+    <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Cartof dulce copt"</string>
+    <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Dango"</string>
+    <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
+    <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Sushi"</string>
+    <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Creveți prăjiți"</string>
+    <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Plăcintă de pește cu model ondulat"</string>
+    <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Cornet de înghețată"</string>
+    <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Fulgi de gheață"</string>
+    <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Înghețată"</string>
+    <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Gogoașă"</string>
+    <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Biscuit"</string>
+    <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Ciocolată"</string>
+    <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Bomboane"</string>
+    <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Acadea"</string>
+    <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Budincă"</string>
+    <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Oală de miere"</string>
+    <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Prăjitură"</string>
+    <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Cutie Bento"</string>
+    <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Oală cu mâncare"</string>
+    <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Gătit"</string>
+    <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Furculiță și cuțit"</string>
+    <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Ceașcă fără toartă"</string>
+    <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Sticlă și ceașcă de sake"</string>
+    <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Pahar de vin"</string>
+    <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Pahar de cocktail"</string>
+    <string name="spoken_emoji_1F379" msgid="790581290787943325">"Băutură tropicală"</string>
+    <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Halbă de bere"</string>
+    <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Halbe de bere ciocnindu-se"</string>
+    <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Biberon"</string>
+    <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Panglică"</string>
+    <string name="spoken_emoji_1F381" msgid="614180683680675444">"Cadou ambalat"</string>
+    <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Tort"</string>
+    <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Felinar din dovleac"</string>
+    <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Pom de Crăciun"</string>
+    <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Moș Crăciun"</string>
+    <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Focuri de artificii"</string>
+    <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Artificiu"</string>
+    <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Balon"</string>
+    <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Tun de confetti"</string>
+    <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Minge de confetti"</string>
+    <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Copac Tanabata"</string>
+    <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Steaguri încrucișate"</string>
+    <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Decorațiune de Crăciun"</string>
+    <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Păpuși japoneze"</string>
+    <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Steaguri în formă de pește"</string>
+    <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Clopoței de vânt"</string>
+    <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Ceremonia contemplării lunii"</string>
+    <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Ghiozdan"</string>
+    <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Tocă de absolvire"</string>
+    <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Cal de carusel"</string>
+    <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Roata mare"</string>
+    <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Montaigne-russe"</string>
+    <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Undiță și pește"</string>
+    <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Microfon"</string>
+    <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Cameră video"</string>
+    <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Cinema"</string>
+    <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Căști"</string>
+    <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Paletă de pictură"</string>
+    <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Joben"</string>
+    <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Cort de circ"</string>
+    <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Bilet"</string>
+    <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Clachetă"</string>
+    <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Arta spectacolului"</string>
+    <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Joc video"</string>
+    <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Lovitură drept la țintă"</string>
+    <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Jocuri mecanice"</string>
+    <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Biliard"</string>
+    <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Zaruri"</string>
+    <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Popice"</string>
+    <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Cărți de joc cu flori"</string>
+    <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Notă muzicală"</string>
+    <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Mai multe note muzicale"</string>
+    <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Saxofon"</string>
+    <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Chitară"</string>
+    <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Claviatură"</string>
+    <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Trompetă"</string>
+    <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Vioară"</string>
+    <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Partitură"</string>
+    <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Maieu de sport cu dungă"</string>
+    <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Rachetă de tenis și minge"</string>
+    <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Schi și gheată de schi"</string>
+    <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Minge și inel de baschet"</string>
+    <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Steag în carouri"</string>
+    <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Practicant de snowboard"</string>
+    <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Alergător"</string>
+    <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Practicant de surf"</string>
+    <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Trofeu"</string>
+    <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Curse de cai"</string>
+    <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Fotbal american"</string>
+    <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Rugby"</string>
+    <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Înnotător"</string>
+    <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Clădire"</string>
+    <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Casă cu grădină"</string>
+    <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Clădire de birouri"</string>
+    <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Oficiu poștal japonez"</string>
+    <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Oficiu poștal european"</string>
+    <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Spital"</string>
+    <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Bancă"</string>
+    <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Bancomat"</string>
+    <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Hotel"</string>
+    <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Hoteluri pentru îndrăgostiți"</string>
+    <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Alimentară"</string>
+    <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Şcoală"</string>
+    <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Magazin universal"</string>
+    <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Fabrică"</string>
+    <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Felinar Izakaya"</string>
+    <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Castel japonez"</string>
+    <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Castel european"</string>
+    <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Șobolan"</string>
+    <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Șoarece"</string>
+    <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Bou"</string>
+    <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Bivol de apă"</string>
+    <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Vacă"</string>
+    <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Leopard"</string>
+    <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Iepure"</string>
+    <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Pisică"</string>
+    <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Dragon"</string>
+    <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Crocodil"</string>
+    <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Balenă"</string>
+    <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Melc"</string>
+    <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Șarpe"</string>
+    <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Cal"</string>
+    <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Berbec"</string>
+    <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Capră"</string>
+    <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Oaie"</string>
+    <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Maimuţă"</string>
+    <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Cocoș"</string>
+    <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Pui"</string>
+    <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Câine"</string>
+    <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Porc"</string>
+    <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Porc mistreț"</string>
+    <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Elefant"</string>
+    <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Caracatiță"</string>
+    <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Scoică spiralată"</string>
+    <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Insectă"</string>
+    <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Furnică"</string>
+    <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Albină"</string>
+    <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Buburuză"</string>
+    <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Pești"</string>
+    <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Pești tropicali"</string>
+    <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Pește lună"</string>
+    <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Broască țestoasă"</string>
+    <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Pui ieșind din ou"</string>
+    <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Pui de găină"</string>
+    <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Pui văzut din față"</string>
+    <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Pasăre"</string>
+    <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Pinguin"</string>
+    <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Urs koala"</string>
+    <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Pudel"</string>
+    <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Dromader"</string>
+    <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Cămilă cu două cocoașe"</string>
+    <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Delfin"</string>
+    <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Cap de șoarece"</string>
+    <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Cap de vacă"</string>
+    <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Cap de tigru"</string>
+    <string name="spoken_emoji_1F430" msgid="525492897063150160">"Cap de iepure"</string>
+    <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Cap de pisică"</string>
+    <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Cap de dragon"</string>
+    <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Balenă cenușie"</string>
+    <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Cap de cal"</string>
+    <string name="spoken_emoji_1F435" msgid="59199202683252958">"Cap de maimuță"</string>
+    <string name="spoken_emoji_1F436" msgid="340544719369009828">"Cap de câine"</string>
+    <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Cap de porc"</string>
+    <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Cap de broască"</string>
+    <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Cap de hamster"</string>
+    <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Cap de  lup"</string>
+    <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Cap de urs"</string>
+    <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Cap de urs panda"</string>
+    <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Rât de porc"</string>
+    <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Urme de labe"</string>
+    <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Ochi"</string>
+    <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Ureche"</string>
+    <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Nas"</string>
+    <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Gură"</string>
+    <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Limbă scoasă"</string>
+    <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Deget arătător alb, orientat în sus"</string>
+    <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Deget arătător alb, orientat în jos"</string>
+    <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Deget arătător alb, orientat la stânga"</string>
+    <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Deget arătător alb, orientat la dreapta"</string>
+    <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Semn pumn strâns"</string>
+    <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Semn palmă deschisă"</string>
+    <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Semn OK"</string>
+    <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Semn de aprobare"</string>
+    <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Semn de dezaprobare"</string>
+    <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Semn Aplauze"</string>
+    <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Semn Palme deschise"</string>
+    <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Coroană"</string>
+    <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Pălărie de damă"</string>
+    <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Ochelari"</string>
+    <string name="spoken_emoji_1F454" msgid="348469036193323252">"Cravată"</string>
+    <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Tricou"</string>
+    <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Blugi"</string>
+    <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Rochie"</string>
+    <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Kimono"</string>
+    <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Bikini"</string>
+    <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Haine de damă"</string>
+    <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Poșetă"</string>
+    <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Geantă"</string>
+    <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Borsetă"</string>
+    <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Pantofi bărbătești"</string>
+    <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Încălțăminte sport"</string>
+    <string name="spoken_emoji_1F460" msgid="305863879170420855">"Pantof cu toc înalt"</string>
+    <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Sandale de damă"</string>
+    <string name="spoken_emoji_1F462" msgid="1722897795554863734">"Cizme de damă"</string>
+    <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Urme de pași"</string>
+    <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Bust siluetă"</string>
+    <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Busturi siluetă"</string>
+    <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Băiat"</string>
+    <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Fată"</string>
+    <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Bărbat"</string>
+    <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Femeie"</string>
+    <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Familie"</string>
+    <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Bărbat și femeie ținându-se de mână"</string>
+    <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Doi bărbați ținându-se de mână"</string>
+    <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Două femei ținându-se de mână"</string>
+    <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Polițist"</string>
+    <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Femeie cu urechi de iepure"</string>
+    <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Mireasă cu voal"</string>
+    <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Persoană cu păr blond"</string>
+    <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Bărbat cu gua pi mao"</string>
+    <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Bărbat cu turban"</string>
+    <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Bătrân"</string>
+    <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Bătrână"</string>
+    <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Bebeluș"</string>
+    <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Muncitor în construcții"</string>
+    <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Prinţesă"</string>
+    <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Căpcăun japonez"</string>
+    <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Goblin japonez"</string>
+    <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Fantomă"</string>
+    <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Îngeraș"</string>
+    <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Extraterestru"</string>
+    <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Monstru extraterestru"</string>
+    <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Demon"</string>
+    <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Craniu"</string>
+    <string name="spoken_emoji_1F481" msgid="320408708521966893">"Persoană la ghișeul de informații"</string>
+    <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Paznic"</string>
+    <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Dansator"</string>
+    <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Ruj"</string>
+    <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Lac de unghii"</string>
+    <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Masaj facial"</string>
+    <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Tunsoare"</string>
+    <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Simbol pentru bărbier"</string>
+    <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Seringă"</string>
+    <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Pilulă"</string>
+    <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Semn de sărut"</string>
+    <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Scrisoare de dragoste"</string>
+    <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Inel"</string>
+    <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Piatră prețioasă"</string>
+    <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Sărut"</string>
+    <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Buchet"</string>
+    <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Cuplu cu inimă"</string>
+    <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Nuntă"</string>
+    <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Inimă bătând"</string>
+    <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Inimă zdrobită"</string>
+    <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Două inimi"</string>
+    <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Inimă strălucitoare"</string>
+    <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Inimă care crește"</string>
+    <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Inimă cu sageată"</string>
+    <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Inimă albastră"</string>
+    <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Inimă verde"</string>
+    <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Inimă galbenă"</string>
+    <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Inimă violet"</string>
+    <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Inimăcu panglică"</string>
+    <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Inimi care se rotesc"</string>
+    <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Ornament inimă"</string>
+    <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Formă romboidală cu un punct înăuntru"</string>
+    <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Bec electric"</string>
+    <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Simbol pentru furie"</string>
+    <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Bombă"</string>
+    <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Simbol pentru somn"</string>
+    <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Simbol pentru accident"</string>
+    <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Simbol stropi de transpirație"</string>
+    <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Picătură"</string>
+    <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Simbol liniuță"</string>
+    <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Excremente"</string>
+    <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Biceps flexat"</string>
+    <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Simbol pentru amețeală"</string>
+    <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Balon de dialog"</string>
+    <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Balon de gândire"</string>
+    <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Floare albă"</string>
+    <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Simbol pentru o sută de puncte"</string>
+    <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Sac cu bani"</string>
+    <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Schimb valutar"</string>
+    <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Semn dolar îngroșat"</string>
+    <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Card de credit"</string>
+    <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Bancnotă cu simbolul yen"</string>
+    <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Bancnotă cu simbolul dolar"</string>
+    <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Bancnotă cu simbolul euro"</string>
+    <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Bancnotă cu simbolul liră"</string>
+    <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Bani cu aripi"</string>
+    <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Diagramă reprezentând o tendință crescătoare și simbolul yen"</string>
+    <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Loc"</string>
+    <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Computer"</string>
+    <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Servietă"</string>
+    <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minidisc"</string>
+    <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Dischetă"</string>
+    <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Disc optic"</string>
+    <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
+    <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Dosar cu fișiere"</string>
+    <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Dosar deschis"</string>
+    <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Pagină îndoită"</string>
+    <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Pagină orientată în sus"</string>
+    <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Calendar"</string>
+    <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Calendar cu file detașabile"</string>
+    <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Index cărți de vizită"</string>
+    <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Diagramă reprezentând o tendință crescătoare"</string>
+    <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Diagramă reprezentând o tendință descrescătoare"</string>
+    <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Diagramă cu bare"</string>
+    <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Clipboard"</string>
+    <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Piuneză"</string>
+    <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Piuneză rotundă"</string>
+    <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Agrafă de birou"</string>
+    <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Riglă dreaptă"</string>
+    <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Riglă triunghiulară"</string>
+    <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"File de marcaj"</string>
+    <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Registru"</string>
+    <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Blocnotes"</string>
+    <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Blocnotes cu copertă decorativă"</string>
+    <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Carte închisă"</string>
+    <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Carte deschisă"</string>
+    <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Carte verde"</string>
+    <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Carte albastră"</string>
+    <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Carte portocalie"</string>
+    <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Cărți"</string>
+    <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Insignă cu numele"</string>
+    <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Sul"</string>
+    <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Notă"</string>
+    <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Receptor de telefon"</string>
+    <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Pager"</string>
+    <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Fax"</string>
+    <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Antenă satelit"</string>
+    <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Megafon"</string>
+    <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Megafon"</string>
+    <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Tavă de ieșiri"</string>
+    <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Tavă de intrări"</string>
+    <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Pachet"</string>
+    <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Simbolul E-mail"</string>
+    <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Plic primit"</string>
+    <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Plic cu săgeată în jos deasupra"</string>
+    <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Cutie poștală închisă cu steag coborât"</string>
+    <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Cutie poștală închisă cu steag ridicat"</string>
+    <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Cutie poștală deschisă cu steag ridicat"</string>
+    <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Cutie poștală deschisă cu steag coborât"</string>
+    <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Cutie poștală"</string>
+    <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Simbolul poștal"</string>
+    <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Ziar"</string>
+    <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Telefon mobil"</string>
+    <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Telefon mobil cu săgeată spre dreapta la stânga"</string>
+    <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Modul vibrații"</string>
+    <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Telefon mobil închis"</string>
+    <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Telefoanele mobile interzise"</string>
+    <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Antenă cu bare"</string>
+    <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Cameră foto"</string>
+    <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Cameră video"</string>
+    <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Emisiuni TV"</string>
+    <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Radio"</string>
+    <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Casetă video"</string>
+    <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Săgeți răsucite spre dreapta"</string>
+    <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Săgeți în formă de cerc deschis, orientate spre dreapta și spre stânga, în sensul acelor de ceasornic"</string>
+    <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Săgeți în formă de cerc deschis, orientate spre dreapta și spre stânga, în sensul acelor de ceasornic, cu suprapunerea cifrei 1 într-un cerc"</string>
+    <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Săgeți în formă de cerc deschis, orientate în sus și în jos, în sens orar"</string>
+    <string name="spoken_emoji_1F504" msgid="708290317843535943">"Săgeți în formă de cerc deschis, orientate în sus și în jos, în sens antiorar"</string>
+    <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Simbol de luminozitate scăzută"</string>
+    <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Simbol de luminozitate ridicată"</string>
+    <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Difuzor cu simbol de anulare"</string>
+    <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Difuzor"</string>
+    <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Difuzor cu un val de sunet"</string>
+    <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Difuzor cu trei valuri de sunet"</string>
+    <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Baterie"</string>
+    <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Alimentare electrică"</string>
+    <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Lupă orientată spre stânga"</string>
+    <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Lupă orientată spre dreapta"</string>
+    <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Lacăt cu stilou"</string>
+    <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Lacăt închis cu cheie"</string>
+    <string name="spoken_emoji_1F511" msgid="262319867774655688">"Cheie"</string>
+    <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Lacăt"</string>
+    <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Lacăt deschis"</string>
+    <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Clopoțel"</string>
+    <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Clopoțel cu simbol de anulare"</string>
+    <string name="spoken_emoji_1F516" msgid="108097933937925381">"Marcaj"</string>
+    <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Simbol lanț"</string>
+    <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Buton radio"</string>
+    <string name="spoken_emoji_1F519" msgid="8211189165075445687">"„BACK” cu săgeată spre stânga deasupra"</string>
+    <string name="spoken_emoji_1F51A" msgid="823966751787338892">"„END” cu săgeată spre stânga deasupra"</string>
+    <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"„ON” cu semn de exclamare și cu săgeată stânga-dreapta deasupra"</string>
+    <string name="spoken_emoji_1F51C" msgid="110609810659826676">"„SOON” cu săgeată spre dreapta deasupra"</string>
+    <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"„TOP” cu săgeată în sus deasupra"</string>
+    <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Simbolul „Interzis sub optsprezece ani”"</string>
+    <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Tastă zece"</string>
+    <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Simbol de introducere a majusculelor latine"</string>
+    <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Simbol de introducere a literelor mici latine"</string>
+    <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Simbol de introducere a cifrelor"</string>
+    <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Simbol de introducere a simbolurilor"</string>
+    <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Simbol de introducere a literelor latine"</string>
+    <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Foc"</string>
+    <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Lanternă"</string>
+    <string name="spoken_emoji_1F527" msgid="134257142354034271">"Cheie"</string>
+    <string name="spoken_emoji_1F528" msgid="700627429570609375">"Ciocan"</string>
+    <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Piuliță și șurub"</string>
+    <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Hocho"</string>
+    <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Pistol"</string>
+    <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Microscop"</string>
+    <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Telescop"</string>
+    <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Glob de cristal"</string>
+    <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Stea cu șase colțuri cu punct în mijloc"</string>
+    <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Simbolul japonez pentru începători"</string>
+    <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Emblemă trident"</string>
+    <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Buton negru pătrat"</string>
+    <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Buton alb pătrat"</string>
+    <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Cerc mare roșu"</string>
+    <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Cerc mare albastru"</string>
+    <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Romb mare portocaliu"</string>
+    <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Romb mare albastru"</string>
+    <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Romb mic portocaliu"</string>
+    <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Romb mic albastru"</string>
+    <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Triunghi roșu, îndreptat în sus"</string>
+    <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Triunghi roșu, îndreptat în jos"</string>
+    <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Triunghi mic roșu, îndreptat în sus"</string>
+    <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Triunghi mic roșu, îndreptat în jos"</string>
+    <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Ceas cu ora unu"</string>
+    <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Ceas cu ora două"</string>
+    <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Ceas cu ora trei"</string>
+    <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Ceas cu ora patru"</string>
+    <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Ceas cu ora cinci"</string>
+    <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Ceas cu ora șase"</string>
+    <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Ceas cu ora șapte"</string>
+    <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Ceas cu ora opt"</string>
+    <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Ceas cu ora nouă"</string>
+    <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Ceas cu ora zece"</string>
+    <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Ceas cu ora unsprezece"</string>
+    <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Ceas cu ora douăsprezece"</string>
+    <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Ceas cu ora unu și jumătate"</string>
+    <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Ceas cu ora două și jumătate"</string>
+    <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Ceas cu ora trei și jumătate"</string>
+    <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Ceas cu ora patru și jumătate"</string>
+    <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Ceas cu ora cinci și jumătate"</string>
+    <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Ceas cu ora șase și jumătate"</string>
+    <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Ceas cu ora șapte și jumătate"</string>
+    <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Ceas cu ora opt și jumătate"</string>
+    <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Ceas cu ora nouă și jumătate"</string>
+    <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Ceas cu ora zece și jumătate"</string>
+    <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Ceas cu ora unsprezece și jumătate"</string>
+    <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Ceas cu ora douăsprezece și jumătate"</string>
+    <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Muntele Fuji"</string>
+    <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Turnul Tokyo"</string>
+    <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Statuia Libertății"</string>
+    <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Conturul Japoniei"</string>
+    <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Moyai"</string>
+    <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Față rânjind"</string>
+    <string name="spoken_emoji_1F601" msgid="746026523967444503">"Față rânjind cu ochi zâmbitori"</string>
+    <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Față cu lacrimi de bucurie"</string>
+    <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Față zâmbitoare cu gura deschisă"</string>
+    <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Față zâmbitoare cu gura deschisă și ochi zâmbitori"</string>
+    <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Față zâmbitoare, cu gura deschisă și sudoare rece"</string>
+    <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Față zâmbitoare cu gura deschisă și ochii închiși"</string>
+    <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Față zâmbitoare cu aură"</string>
+    <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Față zâmbitoare cu coarne"</string>
+    <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Față care face cu ochiul"</string>
+    <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Față zâmbitoare, cu ochii zâmbitori"</string>
+    <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Față savurând mâncare delicioasă"</string>
+    <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Față ușurată"</string>
+    <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Față zâmbitoare, cu ochii în formă de inimă"</string>
+    <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Față zâmbitoare cu ochelari de soare"</string>
+    <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Față zâmbind șiret"</string>
+    <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Față neutră"</string>
+    <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Față fără expresie"</string>
+    <string name="spoken_emoji_1F612" msgid="985081329745137998">"Față serioasă"</string>
+    <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Față cu sudoare rece"</string>
+    <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Față meditativă"</string>
+    <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Față confuză"</string>
+    <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Față confuză"</string>
+    <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Față care sărută"</string>
+    <string name="spoken_emoji_1F618" msgid="408207170572303753">"Față care trimite bezele"</string>
+    <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Față care sărută cu ochi zâmbitori"</string>
+    <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Față care sărută cu ochii închiși"</string>
+    <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Față care scoate limba"</string>
+    <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Față care scoate limba și face cu ochiul"</string>
+    <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Față care scoate limba, cu ochii închiși"</string>
+    <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Față dezamăgită"</string>
+    <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Față îngrijorată"</string>
+    <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Față furioasă"</string>
+    <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Față bosumflată"</string>
+    <string name="spoken_emoji_1F622" msgid="29291014645931822">"Față care plânge"</string>
+    <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Față perseverentă"</string>
+    <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Față cu privire triumfătoare"</string>
+    <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Față dezamăgită dar ușurată"</string>
+    <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Față încruntată cu gura deschisă"</string>
+    <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Față chinuită"</string>
+    <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Față înfricoșată"</string>
+    <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Față obosită"</string>
+    <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Față somnoroasă"</string>
+    <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Față obosită"</string>
+    <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Față cu grimasă"</string>
+    <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Față plângând în hohote"</string>
+    <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Față cu gura deschisă"</string>
+    <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Față redusă la tăcere"</string>
+    <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Față cu gura deschisă și sudoare rece"</string>
+    <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Față țipând de frică"</string>
+    <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Față uimită"</string>
+    <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Față congestionată"</string>
+    <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Față care doarme"</string>
+    <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Față amețită"</string>
+    <string name="spoken_emoji_1F636" msgid="947000211822375683">"Față fără gura"</string>
+    <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Față cu mască medicală"</string>
+    <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Față de pisică rânjind, cu ochi zâmbitori"</string>
+    <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Față de pisică cu lacrimi de bucurie"</string>
+    <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Față zâmbitoare de pisică, cu gura deschisă"</string>
+    <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Față zâmbitoare pisică, cu ochii în formă de inimă"</string>
+    <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Față de pisică cu zâmbet crispat"</string>
+    <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Față de pisică sărutând cu ochii închiși"</string>
+    <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Față de pisică bosumflată"</string>
+    <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Față de pisică plângând"</string>
+    <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Față de pisică obosită"</string>
+    <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Față cu gest „nu are niciun rost”"</string>
+    <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Față cu gest „OK”"</string>
+    <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Persoană care face plecăciuni"</string>
+    <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Maimuță care-și acoperă ochii"</string>
+    <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Maimuță care-și acoperă urechile"</string>
+    <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Maimuță care-și acoperă gura"</string>
+    <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Persoană fericită, ridicând o mână"</string>
+    <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Persoană fericită ridicând ambele mâini de bucurie"</string>
+    <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Persoană încruntată"</string>
+    <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Persoană cu fața bosumflată"</string>
+    <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Persoană cu mâinile împreunate"</string>
+    <string name="spoken_emoji_1F680" msgid="513263736012689059">"Rachetă"</string>
+    <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Elicopter"</string>
+    <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Locomotivă cu abur"</string>
+    <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Vagon de tren"</string>
+    <string name="spoken_emoji_1F684" msgid="346396777356203608">"Tren de mare viteză"</string>
+    <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Tren de mare viteză cu vârf ascuțit"</string>
+    <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Tren"</string>
+    <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metrou"</string>
+    <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Metrou ușor"</string>
+    <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Stație"</string>
+    <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Tramvai"</string>
+    <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Vagon de tramvai"</string>
+    <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Autobuz"</string>
+    <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Autobuz sosind din față"</string>
+    <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Troleibuz"</string>
+    <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Stație de autobuz"</string>
+    <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Maxi-taxi"</string>
+    <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulanță"</string>
+    <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Mașină de pompieri"</string>
+    <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Mașină de poliție"</string>
+    <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Mașină de poliție sosind din față"</string>
+    <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Taxi"</string>
+    <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Taxi sosind din față"</string>
+    <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Automobil"</string>
+    <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Automobil sosind din față"</string>
+    <string name="spoken_emoji_1F699" msgid="630317052666590607">"Vehicul de agrement"</string>
+    <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Camion pentru livrări"</string>
+    <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Camion cu remorcă"</string>
+    <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Tractor"</string>
+    <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Monoșină"</string>
+    <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Cale ferată montană"</string>
+    <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Cale ferată suspendată"</string>
+    <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Teleferic montan"</string>
+    <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Tramvai aerian"</string>
+    <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Vapor"</string>
+    <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Barcă cu vâsle"</string>
+    <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Barcă cu motor"</string>
+    <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Semafor orizontal"</string>
+    <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Semafor vertical"</string>
+    <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Semn de construcție"</string>
+    <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Sirena de la mașina de poliție"</string>
+    <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Stâlp cu steag triunghiular"</string>
+    <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Ușă"</string>
+    <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Semn Intrarea oprită"</string>
+    <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Simbol Fumatul permis"</string>
+    <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Simbol Fumatul interzis"</string>
+    <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Simbol Aruncați gunoiul în locuri amenajate"</string>
+    <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Simbol Păstrați curățenia"</string>
+    <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Simbol Apă potabilă"</string>
+    <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Simbol Apă care nu este potabilă"</string>
+    <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Bicicletă"</string>
+    <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Interzis accesul cu bicicleta"</string>
+    <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Biciclist"</string>
+    <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Biciclist pe trasee montane"</string>
+    <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Pieton"</string>
+    <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Accesul pietonilor interzis"</string>
+    <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Copii traversând"</string>
+    <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Simbol Bărbați"</string>
+    <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Simbol Femei"</string>
+    <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Toaletă"</string>
+    <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Simbol Bebeluș"</string>
+    <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Toaletă"</string>
+    <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"WC"</string>
+    <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Duș"</string>
+    <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Baie"</string>
+    <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Cadă"</string>
+    <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Control pașapoarte"</string>
+    <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Vamă"</string>
+    <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Revendicarea bagajului"</string>
+    <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Bagaj în custodie"</string>
+</resources>
diff --git a/java/res/values-ro/strings-talkback-descriptions.xml b/java/res/values-ro/strings-talkback-descriptions.xml
index 8a6ceb3..4082175 100644
--- a/java/res/values-ro/strings-talkback-descriptions.xml
+++ b/java/res/values-ro/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Locații"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboluri"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticonuri"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index 51d3c59..5d5330d 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Opţiuni de introducere text"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Comenzi jurnal cercetare"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Verificare nume în agendă"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Verificatorul ortografic utilizează intrări din lista de contacte"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrare la apăsarea tastei"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Limbi de introducere de text"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Atingeţi din nou pentru a salva"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Dicţionar disponibil"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Activaţi feedback de la utilizatori"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Ajutați la îmbunătățirea acestui instrument de editare a metodelor de introducere a textului trimițând în mod automat statistici de utilizare și rapoarte de blocare."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Temă pentru tastatură"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"engleză (Regatul Unit)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"engleză (S.U.A.)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Activaţi"</string>
     <string name="not_now" msgid="6172462888202790482">"Nu acum"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Acelaşi stil de introducere există deja: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modul Studiu privind utilizarea"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Timpul apăsării lungi a tastei"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrare după apăsarea tastei"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Sunet la apăsarea tastelor"</string>
diff --git a/java/res/values-ru/strings-action-keys.xml b/java/res/values-ru/strings-action-keys.xml
index d5080ce..3edf228 100644
--- a/java/res/values-ru/strings-action-keys.xml
+++ b/java/res/values-ru/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Назад"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Готово"</string>
     <string name="label_send_key" msgid="482252074224462163">"Отправить"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Пауза"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Пауза"</string>
 </resources>
diff --git a/java/res/values-ru/strings-talkback-descriptions.xml b/java/res/values-ru/strings-talkback-descriptions.xml
index b1cdbb2..09fbb45 100644
--- a/java/res/values-ru/strings-talkback-descriptions.xml
+++ b/java/res/values-ru/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Места."</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Символы."</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Смайлики."</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index bef2483..e788749 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Настройки"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Все команды"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Поиск контактов"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Обращаться к списку контактов при проверке правописания"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Виброотклик клавиш"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Языки ввода"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Нажмите, чтобы сохранить"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Доступен словарь"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Включить отправку сведений"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Помогите усовершенствовать редактор способа ввода, разрешив отправку статистики и отчетов о сбоях"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Тема клавиатуры"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"английский (Великобритания)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"английский (США)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Включить"</string>
     <string name="not_now" msgid="6172462888202790482">"Не сейчас"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Такой стиль ввода уже существует: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим проверки удобства использования"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Долгое нажатие"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Вибросигнал при нажатии клавиш"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Звук при нажатии клавиш"</string>
diff --git a/java/res/values-sk/strings-action-keys.xml b/java/res/values-sk/strings-action-keys.xml
index 3586fb1..ffc5be2 100644
--- a/java/res/values-sk/strings-action-keys.xml
+++ b/java/res/values-sk/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Pred."</string>
     <string name="label_done_key" msgid="7564866296502630852">"OK"</string>
     <string name="label_send_key" msgid="482252074224462163">"Posl."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pauza"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Čakať"</string>
 </resources>
diff --git a/java/res/values-sk/strings-talkback-descriptions.xml b/java/res/values-sk/strings-talkback-descriptions.xml
index 9c0a857..68bd175 100644
--- a/java/res/values-sk/strings-talkback-descriptions.xml
+++ b/java/res/values-sk/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Miesta"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboly"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikony"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index 9a35647..179960f 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Možnosti zadávania textu a údajov"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Príkazy denníka výskumu"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Vyhľadať kontakty"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Kontrola pravopisu používa záznamy z vášho zoznamu kontaktov"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Pri stlačení klávesu vibrovať"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Jazyky vstupu"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Opätovným dotykom uložíte"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"K dispozícii je slovník"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Povoliť spätnú väzbu od používateľov"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Automatickým zasielaním štatistík o využívaní editora metódy vstupu a správ o jeho zlyhaní môžete prispieť k vylepšeniu tohto nástroja"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Motív klávesnice"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Anglická klávesnica (UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Anglická klávesnica (US)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Povoliť"</string>
     <string name="not_now" msgid="6172462888202790482">"Teraz nie"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Rovnaký štýl vstupu už existuje: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Režim štúdie použiteľnosti"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Oneskor. pri stlač. a podržaní"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Trvanie vibrov. pri stlač. kl."</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Hlasitosť pri stlačení klávesu"</string>
diff --git a/java/res/values-sl/strings-action-keys.xml b/java/res/values-sl/strings-action-keys.xml
index 0235887..f8b7647 100644
--- a/java/res/values-sl/strings-action-keys.xml
+++ b/java/res/values-sl/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Prej."</string>
     <string name="label_done_key" msgid="7564866296502630852">"Konec"</string>
     <string name="label_send_key" msgid="482252074224462163">"Pošl."</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Zaus."</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Čakaj"</string>
 </resources>
diff --git a/java/res/values-sl/strings-talkback-descriptions.xml b/java/res/values-sl/strings-talkback-descriptions.xml
index 9cb296c..ec6289b 100644
--- a/java/res/values-sl/strings-talkback-descriptions.xml
+++ b/java/res/values-sl/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Mesta"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboli"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Čustveni simboli"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index 2594aae..64eedc6 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Možnosti vnosa"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Ukazi za dnevnik raziskav"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Iskanje imen stikov"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Črkovalnik uporablja vnose s seznama stikov"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibriranje ob pritisku tipke"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Jeziki vnosa"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Dotaknite se še enkrat, da shranite"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Slovar je na voljo"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Omogoči povratne informacije uporabnikov"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"S samodejnim pošiljanjem statističnih podatkov o uporabi in poročil o zrušitvah nam pomagate izboljšati urejevalnik načina vnosa."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema tipkovnice"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"angleščina (Združeno kraljestvo)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"angleščina (ZDA)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Omogoči"</string>
     <string name="not_now" msgid="6172462888202790482">"Ne zdaj"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Isti slog vnosa že obstaja: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Način za preučevanje uporabnosti"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Zakasn. za dolg pritisk tipke"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Trajanje vibr. ob prit. tipke"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Glasn. zvoka ob pritisku tipke"</string>
diff --git a/java/res/values-sr/strings-action-keys.xml b/java/res/values-sr/strings-action-keys.xml
index 1ce0ed7..b3d9411 100644
--- a/java/res/values-sr/strings-action-keys.xml
+++ b/java/res/values-sr/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Претх"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Готов"</string>
     <string name="label_send_key" msgid="482252074224462163">"Шаљи"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Пауза"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Чекај"</string>
 </resources>
diff --git a/java/res/values-sr/strings-talkback-descriptions.xml b/java/res/values-sr/strings-talkback-descriptions.xml
index 0f062ab..f8d1eb4 100644
--- a/java/res/values-sr/strings-talkback-descriptions.xml
+++ b/java/res/values-sr/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Места"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Симболи"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Емотикони"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index 7bd7f67..a37d22e 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Опције уноса"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Команде евиденције истраживања"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Потражи имена контаката"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Контролор правописа користи уносе са листе контаката"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Вибрирај на притисак тастера"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Језици уноса"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Поново додирните да бисте сачували"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Речник је доступан"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Омогући повратну информацију корисника"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Помозите нам да побољшамо овај уређивач метода уноса тако што ћете аутоматски слати статистику коришћења и извештаје о отказивању"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Тема тастатуре"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"енглески (УК)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"енглески (САД)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Омогући"</string>
     <string name="not_now" msgid="6172462888202790482">"Не сада"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Исти стил уноса већ постоји: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим за студију могућности коришћења"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Одлагање при дугом притиску"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Трајање вибрације при притиску"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Јачина звука при притиску"</string>
diff --git a/java/res/values-sv/strings-action-keys.xml b/java/res/values-sv/strings-action-keys.xml
index e138608..053461d 100644
--- a/java/res/values-sv/strings-action-keys.xml
+++ b/java/res/values-sv/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Föreg"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Klart"</string>
     <string name="label_send_key" msgid="482252074224462163">"Sänd"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Vänta"</string>
 </resources>
diff --git a/java/res/values-sv/strings-talkback-descriptions.xml b/java/res/values-sv/strings-talkback-descriptions.xml
index 062d337..cb241c8 100644
--- a/java/res/values-sv/strings-talkback-descriptions.xml
+++ b/java/res/values-sv/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Platser"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboler"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Uttryckssymboler"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 7092e68..1cb57dd 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Inmatningsalternativ"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Loggkommandon"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Sök namn på kontakter"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"I stavningskontrollen används poster från kontaktlistan"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrera vid tangenttryck"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Inmatningsspråk"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Spara genom att trycka igen"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"En ordlista är tillgänglig"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Aktivera synpunkter från användare"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Du kan hjälpa till att förbättra inmatningsmetoden genom att automatiskt skicka användningsstatistik och felrapporter"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tangentbordstema"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Engelskt (brittiskt)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Engelskt (amerikanskt)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Aktivera"</string>
     <string name="not_now" msgid="6172462888202790482">"Inte nu"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Samma indatastil finns redan: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Läge för studie av användbarhet"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Fördröjning vid långt tryck"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrationslängd för tangenter"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Ljudvolym för tangenter"</string>
diff --git a/java/res/values-sw/strings-action-keys.xml b/java/res/values-sw/strings-action-keys.xml
index 7d8822e..587cbfa 100644
--- a/java/res/values-sw/strings-action-keys.xml
+++ b/java/res/values-sw/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Nyuma"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Imekamilika"</string>
     <string name="label_send_key" msgid="482252074224462163">"Tuma"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Sitisha"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Subiri"</string>
 </resources>
diff --git a/java/res/values-sw/strings-talkback-descriptions.xml b/java/res/values-sw/strings-talkback-descriptions.xml
index 703dc4d..f032870 100644
--- a/java/res/values-sw/strings-talkback-descriptions.xml
+++ b/java/res/values-sw/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Maeneo"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Alama"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Vikaragosi"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 5631289..361e9f6 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Chaguo za uingizaji"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Amri za Kumbukumbu za Utafiti"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Angalia majina ya unaowasiliana nao"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Kikagua tahajia hutumia majina yaliyoingizwa katika orodha yako ya anwani"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Tetema unabofya kitufe"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Lugha zinazoruhusiwa"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Gusa tena ili kuhifadhi"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Kamusi inapatikana"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Wezesha maoni ya watumiaji"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Saidia kuimarisha mbinu hii ya uingizaji wa kihariri, kwa kutuma takwimu za matumizi na ripoti za kuvurugika kiotomatiki"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Maandhari ya kibodi"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Kiingereza cha (Uingereza)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Kiingereza cha (Marekani)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Washa"</string>
     <string name="not_now" msgid="6172462888202790482">"Sio sasa"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Mfumo sawa wa maingizo tayari upo: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modi ya uchunguzi wa utumizi"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Ubofyaji kitufe kunakochelewa"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Bonyeza kitufe cha muda wa kutetema"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Bonyeza kitufe cha kiwango cha sauti"</string>
diff --git a/java/res/values-th/strings-action-keys.xml b/java/res/values-th/strings-action-keys.xml
index f23bfbc..6cbd491 100644
--- a/java/res/values-th/strings-action-keys.xml
+++ b/java/res/values-th/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"ก่อน"</string>
     <string name="label_done_key" msgid="7564866296502630852">"เสร็จ"</string>
     <string name="label_send_key" msgid="482252074224462163">"ส่ง"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"หยุด"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"รอ"</string>
 </resources>
diff --git a/java/res/values-th/strings-talkback-descriptions.xml b/java/res/values-th/strings-talkback-descriptions.xml
index 0a71330..48b21b7 100644
--- a/java/res/values-th/strings-talkback-descriptions.xml
+++ b/java/res/values-th/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"สถานที่"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"สัญลักษณ์"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"ไอคอนสื่ออารมณ์"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index ece0c4b..5bbff3d 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"ตัวเลือกการป้อนข้อมูล"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"คำสั่งบันทึกการวิจัย"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"ค้นหารายชื่อติดต่อ"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"เครื่องมือตรวจการสะกดใช้รายการจากรายชื่อติดต่อของคุณ"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"สั่นเมื่อกดปุ่ม"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"ภาษาสำหรับการป้อนข้อมูล"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"แตะอีกครั้งเพื่อบัน​​ทึก"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"มีพจนานุกรมให้ใช้งาน"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"เปิดใช้งานการแสดงความคิดเห็นจากผู้ใช้"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"ช่วยปรับปรุงตัวแก้ไขวิธีการป้อนข้อมูลนี้โดยการส่งสถิติการใช้งานและรายงานการขัดข้องโดยอัตโนมัติ"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"ชุดรูปแบบแป้นพิมพ์"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"อังกฤษ (สหราชอาณาจักร)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"อังกฤษ (อเมริกัน)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"เปิดใช้งาน"</string>
     <string name="not_now" msgid="6172462888202790482">"ข้ามไปก่อน"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"รูปแบบการป้อนข้อมูลเดียวกันนี้มีอยู่แล้ว: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"โหมดศึกษาประโยชน์ในการใช้งาน"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"การหน่วงเวลาของการกดแป้นค้าง"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"ระยะเวลาการสั่นเมื่อกดแป้นพิมพ์"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"ระดับเสียงเมื่อกดแป้นพิมพ์"</string>
diff --git a/java/res/values-tl/strings-action-keys.xml b/java/res/values-tl/strings-action-keys.xml
index a7f4cc7..ac511d0 100644
--- a/java/res/values-tl/strings-action-keys.xml
+++ b/java/res/values-tl/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Nauna"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Tapos"</string>
     <string name="label_send_key" msgid="482252074224462163">"Send"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Intay"</string>
 </resources>
diff --git a/java/res/values-tl/strings-talkback-descriptions.xml b/java/res/values-tl/strings-talkback-descriptions.xml
index 4c34ad4..97905ad 100644
--- a/java/res/values-tl/strings-talkback-descriptions.xml
+++ b/java/res/values-tl/strings-talkback-descriptions.xml
@@ -27,14 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Nagsasagawa ang <xliff:g id="KEY_NAME">%1$s</xliff:g> ng auto-correction"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Key code %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
-    <skip />
-    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
-    <skip />
-    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
-    <skip />
-    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
-    <skip />
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Marami pang simbolo"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Mga Simbolo"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Tanggalin"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Mga Simbolo"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Mga Titik"</string>
@@ -53,8 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Naka-enable ang shift"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Naka-enable ang caps lock"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbols mode"</string>
-    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
-    <skip />
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Mode na marami pang simbolo"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Letters mode"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Phone mode"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Phone symbols mode"</string>
@@ -76,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Mga Lugar"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Mga Simbolo"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Mga Emoticon"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index ce1207a..d1b665c 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Mga pagpipilian sa input"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Cmmnd sa Log ng Pnnliksik"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Maghanap pangalan contact"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Gumagamit ang Spell Checker ng entries mula sa iyong contact list."</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Mag-vibrate sa keypress"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Mga wika ng input"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Pinduting muli upang i-save"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Available ang diksyunaryo"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Paganahin ang feedback ng user"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Tumulong na pahusayin ang editor ng pamamaraan ng pag-input na ito sa pamamagitan ng awtomatikong pagpapadala ng mga istatistika ng paggamit at ulat ng pag-crash"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema ng keyboard"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Ingles (UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Ingles (Estados Unidos)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Paganahin"</string>
     <string name="not_now" msgid="6172462888202790482">"Hindi ngayon"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Umiiral na ang parehong estilo ng input: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Study mode ng pagiging kapaki-pakinabang"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Key long press delay"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Tagal ng vibration ng keypress"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume ng tunog ng keypress"</string>
diff --git a/java/res/values-tr/strings-action-keys.xml b/java/res/values-tr/strings-action-keys.xml
index b34c576..5592e6c 100644
--- a/java/res/values-tr/strings-action-keys.xml
+++ b/java/res/values-tr/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Geri"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Bitti"</string>
     <string name="label_send_key" msgid="482252074224462163">"Gönder"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Dur"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Bekle"</string>
 </resources>
diff --git a/java/res/values-tr/strings-talkback-descriptions.xml b/java/res/values-tr/strings-talkback-descriptions.xml
index 829fe61..970f584 100644
--- a/java/res/values-tr/strings-talkback-descriptions.xml
+++ b/java/res/values-tr/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Yerler"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simgeler"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"İfadeler"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index 3584ec5..adbd676 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Giriş seçenekleri"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Araştırma Günlüğü Komutları"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kişi adlarını denetle"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Yazım denetleyici, kişi listenizdeki girişleri kullanır"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Tuşa basıldığında titret"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Giriş dilleri"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Kaydetmek için tekrar dokunun"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Sözlük kullanılabilir"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Kullanıcı geri bildirimini etkinleştir"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Kullanım istatistiklerini ve kilitlenme raporlarını otomatik olarak göndererek bu giriş yöntemi düzenleyicisinin iyileştirilmesine yardımcı olun."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Klavye teması"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"İngilizce (BK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"İngilizce (ABD)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Etkinleştir"</string>
     <string name="not_now" msgid="6172462888202790482">"Şimdi değil"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Aynı giriş stili zaten var: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Kullanılabilirlik çalışması modu"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Tuşa uzun basma gecikmesi"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Tuşa basma titreşim süresi"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Tuşa basma ses seviyesi"</string>
diff --git a/java/res/values-uk/strings-action-keys.xml b/java/res/values-uk/strings-action-keys.xml
index 3e5762b..8b71498 100644
--- a/java/res/values-uk/strings-action-keys.xml
+++ b/java/res/values-uk/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Назад"</string>
     <string name="label_done_key" msgid="7564866296502630852">"ОК"</string>
     <string name="label_send_key" msgid="482252074224462163">"Слати"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Пауза"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Ждати"</string>
 </resources>
diff --git a/java/res/values-uk/strings-talkback-descriptions.xml b/java/res/values-uk/strings-talkback-descriptions.xml
index ddb8214..20f1647 100644
--- a/java/res/values-uk/strings-talkback-descriptions.xml
+++ b/java/res/values-uk/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Місця"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Символи"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Смайли"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index 15a3080..8ce9656 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Парам. введення"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Команди журналу дослідж."</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Шукати імена контактів"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Програма перевірки правопису використ. записи зі списку контактів"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Вібр. при натисканні клавіш"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Мови введення"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Торкніться знову, щоб зберегти"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Словник доступний"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Увімк. відгуки корист."</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Допоможіть покращити цей редактор методу введення, автоматично надсилаючи в Google статистику використання та звіти про аварійне завершення роботи."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Тема клавіатури"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Англійська (Великобританія)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Англійська (США)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Увімкнути"</string>
     <string name="not_now" msgid="6172462888202790482">"Не зараз"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Такий стиль введення вже існує: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим вивчення зручності у використанні"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Затримка довгого натискання"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Вібрація при натисканні клавіш"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Гучність натискання клавіш"</string>
diff --git a/java/res/values-vi/strings-action-keys.xml b/java/res/values-vi/strings-action-keys.xml
index ceb780e..16b7c95 100644
--- a/java/res/values-vi/strings-action-keys.xml
+++ b/java/res/values-vi/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Trước"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Xong"</string>
     <string name="label_send_key" msgid="482252074224462163">"Gửi"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Tdừng"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Đợi"</string>
 </resources>
diff --git a/java/res/values-vi/strings-talkback-descriptions.xml b/java/res/values-vi/strings-talkback-descriptions.xml
index 10a64a7..6da8cec 100644
--- a/java/res/values-vi/strings-talkback-descriptions.xml
+++ b/java/res/values-vi/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Địa điểm"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Biểu tượng"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Biểu tượng cảm xúc"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index 529dcec..5d47058 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Tùy chọn nhập"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Lệnh ghi nhật ký cho nghiên cứu"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Tra cứu tên liên hệ"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Trình kiểm tra chính tả sử dụng các mục nhập từ danh sách liên hệ của bạn"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Rung khi nhấn phím"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Ngôn ngữ nhập"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Chạm lại để lưu"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Có sẵn từ điển"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Bật phản hồi của người dùng"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Giúp cải tiến trình chỉnh sửa phương thức nhập này bằng cách tự động gửi thống kê sử dụng và báo cáo sự cố"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Chủ đề bàn phím"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"Tiếng Anh (Anh)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"Tiếng Anh (Mỹ)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Bật"</string>
     <string name="not_now" msgid="6172462888202790482">"Để sau"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Đã tồn tại kiểu nhập tương tự: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Chế độ nghiên cứu tính khả dụng"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Tgian chờ cho nhấn và giữ phím"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Thời gian rung khi nhấn phím"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Âm lượng khi nhấn phím"</string>
diff --git a/java/res/values-zh-rCN/strings-action-keys.xml b/java/res/values-zh-rCN/strings-action-keys.xml
index aacbb5f..a3629da 100644
--- a/java/res/values-zh-rCN/strings-action-keys.xml
+++ b/java/res/values-zh-rCN/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"上个"</string>
     <string name="label_done_key" msgid="7564866296502630852">"完成"</string>
     <string name="label_send_key" msgid="482252074224462163">"发送"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"暂停"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"等待"</string>
 </resources>
diff --git a/java/res/values-zh-rCN/strings-talkback-descriptions.xml b/java/res/values-zh-rCN/strings-talkback-descriptions.xml
index 3d25cd1..ee025f6 100644
--- a/java/res/values-zh-rCN/strings-talkback-descriptions.xml
+++ b/java/res/values-zh-rCN/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"地点"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"符号"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"表情图标"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index 41fe0bf..4f5cddd 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"输入选项"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"研究记录命令"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"查找联系人姓名"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"拼写检查工具会使用您的联系人列表中的条目"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"按键振动"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"输入语言"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"再次触摸即可保存"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"有可用词典"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"启用用户反馈"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"自动发送使用情况统计信息和崩溃报告,帮助改进此输入法。"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"键盘主题"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"英语(英国)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"英语(美国)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"启用"</string>
     <string name="not_now" msgid="6172462888202790482">"以后再说"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"已经存在相同的输入风格:<xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"可用性研究模式"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"按键长按延迟"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"按键振动时长"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"按键音量"</string>
diff --git a/java/res/values-zh-rHK/strings-action-keys.xml b/java/res/values-zh-rHK/strings-action-keys.xml
index e952516..4dc5c84 100644
--- a/java/res/values-zh-rHK/strings-action-keys.xml
+++ b/java/res/values-zh-rHK/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"上一步"</string>
     <string name="label_done_key" msgid="7564866296502630852">"完成"</string>
     <string name="label_send_key" msgid="482252074224462163">"傳送"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"暫停"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"等候"</string>
 </resources>
diff --git a/java/res/values-zh-rHK/strings-talkback-descriptions.xml b/java/res/values-zh-rHK/strings-talkback-descriptions.xml
index baa56e4..3484bf3 100644
--- a/java/res/values-zh-rHK/strings-talkback-descriptions.xml
+++ b/java/res/values-zh-rHK/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"地點"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"符號"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"表情符號"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-zh-rHK/strings.xml b/java/res/values-zh-rHK/strings.xml
index 34fa9c0..1d6030e 100644
--- a/java/res/values-zh-rHK/strings.xml
+++ b/java/res/values-zh-rHK/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"輸入選項"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"研究記錄指令"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"查找聯絡人姓名"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"拼字檢查程式使用您的聯絡人名單中的各項記錄"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"按鍵時震動"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"輸入語言"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"再次輕觸即可儲存"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"可使用字典"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"啟用用戶意見反映"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"自動傳送使用統計資料和當機報告,協助改良這個輸入法編輯器"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"鍵盤主題"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"英文 (英國)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"英文 (美國)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"啟用"</string>
     <string name="not_now" msgid="6172462888202790482">"暫時不要"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"已存在相同的輸入樣式:<xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"可用性研究模式"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"長按鍵延遲"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"按鍵震動時間"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"按鍵音量"</string>
diff --git a/java/res/values-zh-rTW/strings-action-keys.xml b/java/res/values-zh-rTW/strings-action-keys.xml
index 00daa5c..9b8be94 100644
--- a/java/res/values-zh-rTW/strings-action-keys.xml
+++ b/java/res/values-zh-rTW/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"返回"</string>
     <string name="label_done_key" msgid="7564866296502630852">"完成"</string>
     <string name="label_send_key" msgid="482252074224462163">"傳送"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"暫停"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"等待"</string>
 </resources>
diff --git a/java/res/values-zh-rTW/strings-talkback-descriptions.xml b/java/res/values-zh-rTW/strings-talkback-descriptions.xml
index d8a0cc4..4d0352e 100644
--- a/java/res/values-zh-rTW/strings-talkback-descriptions.xml
+++ b/java/res/values-zh-rTW/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"地點"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"符號"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"表情"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index 9c9f5e0..ae74d05 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"輸入選項"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"研究紀錄指令"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"查詢聯絡人姓名"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"拼字檢查程式使用您的聯絡人清單項目"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"按鍵時震動"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"輸入語言"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"再次輕觸即可儲存"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"可用的字典"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"啟用使用者意見回饋"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"自動傳送使用統計資料和當機報告,協助改善此輸入法編輯器"</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"鍵盤主題"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"英文 (英國)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"英文 (美國)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"啟用"</string>
     <string name="not_now" msgid="6172462888202790482">"暫時不要"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"已存在相同的輸入樣式:<xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"使用習慣學習模式"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"按鍵長按延遲"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"按鍵震動持續時間"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"按鍵音量"</string>
diff --git a/java/res/values-zu/strings-action-keys.xml b/java/res/values-zu/strings-action-keys.xml
index 6cd5e8c..5d60a6c 100644
--- a/java/res/values-zu/strings-action-keys.xml
+++ b/java/res/values-zu/strings-action-keys.xml
@@ -25,6 +25,8 @@
     <string name="label_previous_key" msgid="1421141755779895275">"Okwedlule"</string>
     <string name="label_done_key" msgid="7564866296502630852">"Kwenziwe"</string>
     <string name="label_send_key" msgid="482252074224462163">"Thumela"</string>
+    <!-- no translation found for label_search_key (7965186050435796642) -->
+    <skip />
     <string name="label_pause_key" msgid="2225922926459730642">"Misa isikhashana"</string>
     <string name="label_wait_key" msgid="5891247853595466039">"Linda"</string>
 </resources>
diff --git a/java/res/values-zu/strings-talkback-descriptions.xml b/java/res/values-zu/strings-talkback-descriptions.xml
index 3f7ae7e..ff7c3c9 100644
--- a/java/res/values-zu/strings-talkback-descriptions.xml
+++ b/java/res/values-zu/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
     <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Izindawo"</string>
     <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Amasimbuli"</string>
     <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Izithombe-mzwelo"</string>
+    <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+    <skip />
+    <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+    <skip />
+    <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+    <skip />
 </resources>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index c79d81d..a0054cb 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -21,7 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="english_ime_input_options" msgid="3909945612939668554">"Okukhethwa kukho kokungenayo"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Imiyalo yefayela lokungena lokucwaninga"</string>
     <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Bheka amagama woxhumana nabo"</string>
     <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Isihloli sokupela sisebenzisa okungenayo kusuka kuhlu lalabo oxhumana nabo"</string>
     <string name="vibrate_on_keypress" msgid="5258079494276955460">"Dlidlizelisa ngokucindezela inkinobho"</string>
@@ -84,8 +83,6 @@
     <string name="select_language" msgid="3693815588777926848">"Izilimi zokufakwayo"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Thinta futhi ukuze ulondoloze"</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Isichazamazwi siyatholakala"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Vumela impendulo yomsebenzisi"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Siza ukuthuthukisa lo mhleli wendlela yokufaka ngokusithumela ngokuzenzakalela izibalo zokusetshenziswa nokukhubeka."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Indikimba yekhibhodi"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"i-English(UK)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"i-English (US)"</string>
@@ -118,7 +115,6 @@
     <string name="enable" msgid="5031294444630523247">"Nika amandla"</string>
     <string name="not_now" msgid="6172462888202790482">"Hhayi manje"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Isitayela sokufaka esifanayo sesivele sikhona: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Imodi yesitadi yokusebenziseka"</string>
     <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Ukulibazisa ukucindezela isikhashana ukhiye"</string>
     <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Ubude besikhathi sokudlidliza ukucindezela ukhiye"</string>
     <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Ivolumu yomsindo wokucindezela ukhiye"</string>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 307ef13..775a90c 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -30,10 +30,6 @@
         <attr name="keyPreviewTextViewStyle" format="reference"/>
         <!-- EmojiPalettesView style -->
         <attr name="emojiPalettesViewStyle" format="reference" />
-        <!-- TabWidget of EmojiPlettesView style -->
-        <attr name="emojiTabWidgetStyle" format="reference" />
-        <!-- EmojiCategoryPageIndicatorView style -->
-        <attr name="emojiCategoryPageIndicatorViewStyle" format="reference" />
         <!-- MoreKeysKeyboard style -->
         <attr name="moreKeysKeyboardStyle" format="reference" />
         <!-- MoreKeysKeyboardView style -->
@@ -176,6 +172,11 @@
     </declare-styleable>
 
     <declare-styleable name="EmojiPalettesView">
+        <attr name="categoryIndicatorEnabled" format="boolean" />
+        <attr name="categoryIndicatorDrawable" format="reference" />
+        <attr name="categoryIndicatorBackground" format="reference" />
+        <attr name="categoryPageIndicatorColor" format="color" />
+        <attr name="categoryPageIndicatorBackground" format="color" />
         <attr name="iconEmojiRecentsTab" format="reference" />
         <attr name="iconEmojiCategory1Tab" format="reference" />
         <attr name="iconEmojiCategory2Tab" format="reference" />
@@ -185,10 +186,6 @@
         <attr name="iconEmojiCategory6Tab" format="reference" />
     </declare-styleable>
 
-    <declare-styleable name="EmojiCategoryPageIndicatorView">
-        <attr name="emojiCategoryPageIndicatorColor" format="color" />
-    </declare-styleable>
-
     <declare-styleable name="SuggestionStripView">
         <attr name="suggestionStripOptions" format="integer">
             <!-- This should be aligned with SuggestionStripLayoutHelper.AUTO_CORRECT_* and etc. -->
diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml
index 415dd0b..83d082f 100644
--- a/java/res/values/donottranslate.xml
+++ b/java/res/values/donottranslate.xml
@@ -137,6 +137,4 @@
         <item>tr:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
         <item>qwerty</item>
     </string-array>
-
-    <string name="settings_warning_researcher_mode">Attention!  You are using the special keyboard for research purposes.</string>
 </resources>
diff --git a/java/res/values/research_strings.xml b/java/res/values/research_strings.xml
deleted file mode 100644
index e738711..0000000
--- a/java/res/values/research_strings.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Contents of note explaining what data is collected and how. -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_splash_content" translatable="false"></string>
-    <!-- Account type allowed for inclusion in user-invoked feedback logs [CHAR LIMIT=38] -->
-    <string name="research_account_type" translatable="false"></string>
-    <!-- Account domain allowed for inclusion in user-invoked feedback logs [CHAR LIMIT=38] -->
-    <string name="research_allowed_account_domain" translatable="false"></string>
-
-    <!-- Menu option that lets user send feedback for research purposes about the IME [CHAR LIMIT=38] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_menu_option" translatable="false">Send feedback</string>
-    <!-- Title of dialog box that lets user send feedback for research purposes about the IME [CHAR LIMIT=38] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_dialog_title" translatable="false">Send feedback</string>
-    <!-- Hint to user about the text entry field where they should enter research feedback [CHAR LIMIT=40] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_hint" translatable="false">Enter your feedback here.</string>
-    <!-- Message informing the user that the feedback string must not be empty [CHAR LIMIT=100] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_empty_feedback_error_message" translatable="false">The feedback field must not be empty.</string>
-</resources>
diff --git a/java/res/values/strings-action-keys.xml b/java/res/values/strings-action-keys.xml
index 7003784..96b2e7d 100644
--- a/java/res/values/strings-action-keys.xml
+++ b/java/res/values/strings-action-keys.xml
@@ -29,6 +29,8 @@
     <string name="label_done_key">Done</string>
     <!-- Label for soft enter key when it performs SEND action.  Must be short to fit on key. 5 chars or less is preferable.  [CHAR LIMIT=7] -->
     <string name="label_send_key">Send</string>
+    <!-- Label for soft enter key when it performs SEARCH action.  Must be short to fit on key. 5 chars or less is preferable.  [CHAR LIMIT=7] -->
+    <string name="label_search_key">Search</string>
     <!-- Label for "Pause" key of phone number keyboard.  Must be short to fit on key. 5 chars or less is preferable.  [CHAR LIMIT=7] -->
     <string name="label_pause_key">Pause</string>
     <!-- Label for "Wait" key of phone number keyboard.  Must be short to fit on key. 5 chars or less is preferable.  [CHAR LIMIT=7]-->
diff --git a/java/res/values/strings-talkback-descriptions.xml b/java/res/values/strings-talkback-descriptions.xml
index 14455d0..d7978b0 100644
--- a/java/res/values/strings-talkback-descriptions.xml
+++ b/java/res/values/strings-talkback-descriptions.xml
@@ -128,11 +128,13 @@
     <string name="spoken_descrption_emoji_category_emoticons">Emoticons</string>
 
     <!-- Description of an upper case letter of LOWER_LETTER. -->
-    <string name="spoke_description_upper_case">Capital <xliff:g id="LOWER_LETTER" example="A, E, ligature">%s</xliff:g></string>
+    <string name="spoken_description_upper_case">Capital <xliff:g id="LOWER_LETTER" example="A, E, ligature">%s</xliff:g></string>
     <!-- Spoken description for Unicode code point U+0049: "I" LATIN CAPITAL LETTER I
          Note that depending on locale, the lower-case of this letter is U+0069 or U+0131. -->
     <string name="spoken_letter_0049">Capital I</string>
     <!-- Spoken description for Unicode code point U+0130: "İ" LATIN CAPITAL LETTER I WITH DOT ABOVE
          Note that depending on locale, the lower-case of this letter is U+0069 or U+0131. -->
     <string name="spoken_letter_0130">Capital I, dot above</string>
+    <!-- Spoken description for unknown emoji code point. -->
+    <string name="spoken_emoji_unknown">Unknown emoji</string>
 </resources>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 9f93055..2ad7ce5 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -21,9 +21,6 @@
     <!-- Title for Latin keyboard input options dialog [CHAR LIMIT=25] -->
     <string name="english_ime_input_options">Input options</string>
 
-    <!-- Title for Latin keyboard research log dialog, which contains special commands for users that contribute data for research. [CHAR LIMIT=33] -->
-    <string name="english_ime_research_log">Research Log Commands</string>
-
     <!-- Title for the spell checker option to turn on/off contact names lookup [CHAR LIMIT=25] -->
     <string name="use_contacts_for_spellchecking_option_title">Look up contact names</string>
 
@@ -166,68 +163,8 @@
     <!-- Title for input language selection screen -->
     <string name="language_selection_title">Input languages</string>
 
-    <!-- Title for dialog option to let users cancel logging and delete log for this session [CHAR LIMIT=35] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_do_not_log_this_session" translatable="false">Suspend logging</string>
-    <!-- Title for dialog option to let users reenable logging [CHAR LIMIT=35] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_enable_session_logging" translatable="false">Enable logging</string>
-    <!-- Toast notification that the system is processing the request to delete the log for this session [CHAR LIMIT=35] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_notify_session_log_deleting" translatable="false">Deleting session log</string>
-    <!-- Toast notification that the system has successfully deleted the log for this session [CHAR LIMIT=35] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_notify_logging_suspended" translatable="false">Logging temporarily suspended.  To disable permanently, go to Android Keyboard Settings</string>
-    <!-- Toast notification that the system has failed to delete the log for this session [CHAR LIMIT=35] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_notify_session_log_not_deleted" translatable="false">Session log NOT deleted</string>
-    <!-- Toast notification that the system is enabling logging [CHAR LIMIT=35] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_notify_session_logging_enabled" translatable="false">Session logging enabled</string>
-
-    <!-- Text for checkbox option to include user data in feedback for research purposes [CHAR LIMIT=50] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_include_history_label" translatable="false">Include session history</string>
-    <!-- Text for checkbox option to include user account name in feedback for research purposes [CHAR LIMIT=50] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_include_account_name_label" translatable="false">Include account name</string>
-    <!-- Text for checkbox option to include a recording in feedback for research purposes [CHAR LIMIT=50] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_include_recording_label" translatable="false">Include recorded demonstration</string>
-    <!-- Dialog button choice to send research feedback [CHAR LIMIT=35] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_send" translatable="false">Send</string>
-    <!-- Dialog button choice to cancel sending research feedback [CHAR LIMIT=35] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_cancel" translatable="false">Cancel</string>
-    <!-- Temporary notification to provide user with instructions about stopping a recording
-      - operation[CHAR LIMIT=100] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_demonstration_instructions" translatable="false">Please demonstrate the issue you are writing about.\n\nWhen finished, select the \"Bug?\" button again."</string>
     <!-- Title of a preference to send feedback. [CHAR LIMIT=30]-->
     <string name="send_feedback">Send feedback</string>
-    <!-- Temporary notification of recording failure [CHAR LIMIT=100] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_feedback_recording_failure" translatable="false">Recording cancelled due to timeout</string>
-    <!-- Toast notification to ask user to quit the research feedback dialog to perform this operation [CHAR LIMIT=100] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_please_exit_feedback_form" translatable="false">Please exit the feedback dialog to access the research log menu</string>
-
-    <!-- Title of dialog shown at start informing users about contributing research usage data-->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_splash_title" translatable="false">Warning</string>
-
-    <!-- Toast message informing users that logging has been disabled -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_logging_disabled" translatable="false">Logging Disabled</string>
-
-    <!-- Name for the research uploading service to be displayed to users.  [CHAR LIMIT=50] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_log_uploader_name" translatable="false">Research Uploader Service</string>
-
-    <!-- Name for the research replaying service to be displayed to users.  [CHAR LIMIT=50] -->
-    <!-- TODO: remove translatable=false attribute once text is stable -->
-    <string name="research_log_replayer_name" translatable="false">Research Replayer Service</string>
 
     <!-- Preference for input language selection -->
     <string name="select_language">Input languages</string>
@@ -238,11 +175,6 @@
     <!-- Inform the user that a particular language has an available dictionary -->
     <string name="has_dictionary">Dictionary available</string>
 
-    <!-- Preferences item for enabling to send user statistics for development only diagnostics -->
-    <string name="prefs_enable_log">Enable user feedback</string>
-    <!-- Description for enabling to send user statistics for development only diagnostics -->
-    <string name="prefs_description_log">Help improve this input method editor by automatically sending usage statistics and crash reports</string>
-
     <!-- Title of the item to change the keyboard theme [CHAR LIMIT=20]-->
     <string name="keyboard_layout">Keyboard theme</string>
 
@@ -390,8 +322,6 @@
     <!-- Toast text to describe the same input style already exists [CHAR LIMIT=64]-->
     <string name="custom_input_style_already_exists">"The same input style already exists: <xliff:g id="INPUT_STYLE_NAME" example="English (Dvorak)">%s</xliff:g>"</string>
 
-    <!-- Title of an option for usability study mode -->
-    <string name="prefs_usability_study_mode">Usability study mode</string>
     <!-- Title of the settings for key long press delay [CHAR LIMIT=35] -->
     <string name="prefs_key_longpress_timeout_settings">Key long press delay</string>
     <!-- Title of the settings for keypress vibration duration [CHAR LIMIT=35] -->
diff --git a/java/res/values/themes-common.xml b/java/res/values/themes-common.xml
index c5d3f55..df26fb3 100644
--- a/java/res/values/themes-common.xml
+++ b/java/res/values/themes-common.xml
@@ -110,8 +110,6 @@
     <!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it,
          for instance delete button, need themed {@link KeyboardView} attributes. -->
     <style name="EmojiPalettesView" />
-    <style name="EmojiTabWidget" />
-    <style name="EmojiCategoryPageIndicatorView" />
     <style name="MoreKeysKeyboard" />
     <style
         name="MoreKeysKeyboardView"
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index f7ca5a3..319b4ae 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -25,8 +25,6 @@
         <item name="mainKeyboardViewStyle">@style/MainKeyboardView.ICS</item>
         <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.ICS</item>
         <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.ICS</item>
-        <item name="emojiTabWidgetStyle">@style/EmojiTabWidget.ICS</item>
-        <item name="emojiCategoryPageIndicatorViewStyle">@style/EmojiCategoryPageIndicatorView.ICS</item>
         <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.ICS</item>
         <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.ICS</item>
         <item name="suggestionStripViewStyle">@style/SuggestionStripView.ICS</item>
@@ -89,6 +87,11 @@
         name="EmojiPalettesView.ICS"
         parent="MainKeyboardView.ICS"
     >
+        <item name="categoryIndicatorEnabled">true</item>
+        <item name="categoryIndicatorDrawable">@drawable/emoji_category_tab_selected_ics</item>
+        <item name="categoryIndicatorBackground">@drawable/emoji_category_tab_unselected_holo_dark</item>
+        <item name="categoryPageIndicatorColor">@color/highlight_color_ics</item>
+        <item name="categoryPageIndicatorBackground">@color/emoji_tab_page_indicator_background_holo</item>
         <item name="iconEmojiRecentsTab">@drawable/ic_emoji_recents_holo_dark</item>
         <item name="iconEmojiCategory1Tab">@drawable/ic_emoji_people_holo_dark</item>
         <item name="iconEmojiCategory2Tab">@drawable/ic_emoji_objects_holo_dark</item>
@@ -97,15 +100,6 @@
         <item name="iconEmojiCategory5Tab">@drawable/ic_emoji_symbols_holo_dark</item>
         <item name="iconEmojiCategory6Tab">@drawable/ic_emoji_emoticons_holo_dark</item>
     </style>
-    <style name="EmojiCategoryPageIndicatorView.ICS">
-        <item name="android:background">@color/emoji_tab_page_indicator_background_holo</item>
-        <item name="emojiCategoryPageIndicatorColor">@color/highlight_color_ics</item>
-    </style>
-    <style name="EmojiTabWidget.ICS">
-        <item name="android:background">@drawable/emoji_category_tab_selected_ics</item>
-        <item name="android:tabStripLeft">@drawable/emoji_category_tab_unselected_holo_dark</item>
-        <item name="android:tabStripRight">@drawable/emoji_category_tab_unselected_holo_dark</item>
-    </style>
     <style
         name="MoreKeysKeyboard.ICS"
         parent="Keyboard.ICS"
diff --git a/java/res/values/themes-klp.xml b/java/res/values/themes-klp.xml
index 96d0478..208723d 100644
--- a/java/res/values/themes-klp.xml
+++ b/java/res/values/themes-klp.xml
@@ -25,8 +25,6 @@
         <item name="mainKeyboardViewStyle">@style/MainKeyboardView.KLP</item>
         <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.KLP</item>
         <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.KLP</item>
-        <item name="emojiTabWidgetStyle">@style/EmojiTabWidget.KLP</item>
-        <item name="emojiCategoryPageIndicatorViewStyle">@style/EmojiCategoryPageIndicatorView.KLP</item>
         <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.KLP</item>
         <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.KLP</item>
         <item name="suggestionStripViewStyle">@style/SuggestionStripView.KLP</item>
@@ -89,6 +87,11 @@
         name="EmojiPalettesView.KLP"
         parent="MainKeyboardView.KLP"
     >
+        <item name="categoryIndicatorEnabled">true</item>
+        <item name="categoryIndicatorDrawable">@drawable/emoji_category_tab_selected_klp</item>
+        <item name="categoryIndicatorBackground">@drawable/emoji_category_tab_unselected_holo_dark</item>
+        <item name="categoryPageIndicatorColor">@color/highlight_color_klp</item>
+        <item name="categoryPageIndicatorBackground">@color/emoji_tab_page_indicator_background_holo</item>
         <item name="iconEmojiRecentsTab">@drawable/ic_emoji_recents_holo_dark</item>
         <item name="iconEmojiCategory1Tab">@drawable/ic_emoji_people_holo_dark</item>
         <item name="iconEmojiCategory2Tab">@drawable/ic_emoji_objects_holo_dark</item>
@@ -97,15 +100,6 @@
         <item name="iconEmojiCategory5Tab">@drawable/ic_emoji_symbols_holo_dark</item>
         <item name="iconEmojiCategory6Tab">@drawable/ic_emoji_emoticons_holo_dark</item>
     </style>
-    <style name="EmojiCategoryPageIndicatorView.KLP">
-        <item name="android:background">@color/emoji_tab_page_indicator_background_holo</item>
-        <item name="emojiCategoryPageIndicatorColor">@color/highlight_color_klp</item>
-    </style>
-    <style name="EmojiTabWidget.KLP">
-        <item name="android:background">@drawable/emoji_category_tab_selected_klp</item>
-        <item name="android:tabStripLeft">@drawable/emoji_category_tab_unselected_holo_dark</item>
-        <item name="android:tabStripRight">@drawable/emoji_category_tab_unselected_holo_dark</item>
-    </style>
     <style
         name="MoreKeysKeyboard.KLP"
         parent="Keyboard.KLP"
diff --git a/java/res/values/themes-lxx-dark.xml b/java/res/values/themes-lxx-dark.xml
index 98c045d..e9a295c 100644
--- a/java/res/values/themes-lxx-dark.xml
+++ b/java/res/values/themes-lxx-dark.xml
@@ -25,8 +25,6 @@
         <item name="mainKeyboardViewStyle">@style/MainKeyboardView.LXX_Dark</item>
         <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.LXX_Dark</item>
         <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.LXX_Dark</item>
-        <item name="emojiTabWidgetStyle">@style/EmojiTabWidget.LXX_Dark</item>
-        <item name="emojiCategoryPageIndicatorViewStyle">@style/EmojiCategoryPageIndicatorView.LXX_Dark</item>
         <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.LXX_Dark</item>
         <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.LXX_Dark</item>
         <item name="suggestionStripViewStyle">@style/SuggestionStripView.LXX_Dark</item>
@@ -90,6 +88,9 @@
         name="EmojiPalettesView.LXX_Dark"
         parent="MainKeyboardView.LXX_Dark"
     >
+        <item name="categoryIndicatorEnabled">false</item>
+        <item name="categoryPageIndicatorColor">@color/highlight_color_lxx_dark</item>
+        <item name="categoryPageIndicatorBackground">@color/emoji_tab_page_indicator_background_lxx_dark</item>
         <!-- TODO: Update those icons to LXX_Dark theme. -->
         <item name="iconEmojiRecentsTab">@drawable/ic_emoji_recents_holo_dark</item>
         <item name="iconEmojiCategory1Tab">@drawable/ic_emoji_people_holo_dark</item>
@@ -99,15 +100,6 @@
         <item name="iconEmojiCategory5Tab">@drawable/ic_emoji_symbols_holo_dark</item>
         <item name="iconEmojiCategory6Tab">@drawable/ic_emoji_emoticons_holo_dark</item>
     </style>
-    <style name="EmojiCategoryPageIndicatorView.LXX_Dark">
-        <item name="android:background">@color/emoji_tab_page_indicator_background_lxx_dark</item>
-        <item name="emojiCategoryPageIndicatorColor">@color/highlight_color_lxx_dark</item>
-    </style>
-    <style name="EmojiTabWidget.LXX_Dark">
-        <item name="android:background">@drawable/emoji_category_tab_selected_lxx_dark</item>
-        <item name="android:tabStripLeft">@drawable/emoji_category_tab_unselected_lxx_dark</item>
-        <item name="android:tabStripRight">@drawable/emoji_category_tab_unselected_lxx_dark</item>
-    </style>
     <style
         name="MoreKeysKeyboard.LXX_Dark"
         parent="Keyboard.LXX_Dark"
diff --git a/java/res/values/urls.xml b/java/res/values/urls.xml
deleted file mode 100644
index a8e9ad7..0000000
--- a/java/res/values/urls.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources>
-    <string name="research_logger_upload_url" translatable="false"></string>
-</resources>
diff --git a/java/res/xml-sw600dp/key_styles_enter.xml b/java/res/xml-sw600dp/key_styles_enter.xml
index 55f00ef..740bf35 100644
--- a/java/res/xml-sw600dp/key_styles_enter.xml
+++ b/java/res/xml-sw600dp/key_styles_enter.xml
@@ -131,7 +131,6 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_go_key|!code/key_enter"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -150,7 +149,6 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_next_key|!code/key_enter"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -169,7 +167,6 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_previous_key|!code/key_enter"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -188,7 +185,6 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_done_key|!code/key_enter"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -207,6 +203,15 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_send_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </case>
+        <case
+            latin:imeAction="actionSearch"
+            latin:isIconDefined="search_key"
+        >
+            <key-style
+                latin:styleName="enterKeyStyle"
+                latin:keySpec="!icon/search_key|!code/key_enter"
                 latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
@@ -215,8 +220,7 @@
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/search_key|!code/key_enter"
-                latin:backgroundType="action"
+                latin:keySpec="!text/label_search_key|!code/key_enter"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -226,7 +230,6 @@
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="dummy_label|!code/key_enter"
                 latin:keyLabelFlags="fromCustomActionLabel"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <!-- imeAction is either actionNone or actionUnspecified. -->
diff --git a/java/res/xml/key_styles_enter.xml b/java/res/xml/key_styles_enter.xml
index 1a60bcc..50530e1 100644
--- a/java/res/xml/key_styles_enter.xml
+++ b/java/res/xml/key_styles_enter.xml
@@ -298,7 +298,6 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_go_key|!code/key_enter"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -317,7 +316,6 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_next_key|!code/key_enter"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -336,7 +334,6 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_previous_key|!code/key_enter"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -355,7 +352,6 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_done_key|!code/key_enter"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -374,6 +370,15 @@
             <key-style
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="!text/label_send_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </case>
+        <case
+            latin:imeAction="actionSearch"
+            latin:isIconDefined="search_key"
+        >
+            <key-style
+                latin:styleName="enterKeyStyle"
+                latin:keySpec="!icon/search_key|!code/key_enter"
                 latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
@@ -382,8 +387,7 @@
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/search_key|!code/key_enter"
-                latin:backgroundType="action"
+                latin:keySpec="!text/label_search_key|!code/key_enter"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <case
@@ -393,7 +397,6 @@
                 latin:styleName="enterKeyStyle"
                 latin:keySpec="dummy_label|!code/key_enter"
                 latin:keyLabelFlags="fromCustomActionLabel"
-                latin:backgroundType="action"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <!-- imeAction is either actionNone or actionUnspecified. -->
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 61ebb69..a629862 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -153,6 +153,7 @@
                 android:defaultValue="true" />
             <CheckBoxPreference
                 android:key="pref_include_other_imes_in_language_switch_list"
+                android:dependency="pref_show_language_switch_key"
                 android:title="@string/include_other_imes_in_language_switch_list"
                 android:summary="@string/include_other_imes_in_language_switch_list_summary"
                 android:persistent="true"
diff --git a/java/res/xml/prefs_for_debug.xml b/java/res/xml/prefs_for_debug.xml
index c333b07..1a7fe71 100644
--- a/java/res/xml/prefs_for_debug.xml
+++ b/java/res/xml/prefs_for_debug.xml
@@ -21,12 +21,6 @@
     android:key="english_ime_debug_settings"
 >
     <CheckBoxPreference
-        android:key="enable_logging"
-        android:title="@string/prefs_enable_log"
-        android:summary="@string/prefs_description_log"
-        android:persistent="true"
-        android:defaultValue="false" />
-    <CheckBoxPreference
         android:key="debug_mode"
         android:title="@string/prefs_debug_mode"
         android:persistent="true"
@@ -37,11 +31,6 @@
         android:persistent="true"
         android:defaultValue="false" />
     <CheckBoxPreference
-        android:key="usability_study_mode"
-        android:title="@string/prefs_usability_study_mode"
-        android:persistent="true"
-        android:defaultValue="false" />
-    <CheckBoxPreference
         android:key="pref_sliding_key_input_preview"
         android:title="@string/sliding_key_input_preview"
         android:summary="@string/sliding_key_input_preview_summary"
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
index d50dd3e..27896fd 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
@@ -114,7 +114,7 @@
      * @param event The event to check.
      * @return {@true} is the event is a touch exploration event
      */
-    public boolean isTouchExplorationEvent(final MotionEvent event) {
+    public static boolean isTouchExplorationEvent(final MotionEvent event) {
         final int action = event.getAction();
         return action == MotionEvent.ACTION_HOVER_ENTER
                 || action == MotionEvent.ACTION_HOVER_EXIT
diff --git a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
index 2c87fc1..58672ac 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
@@ -285,15 +285,14 @@
         if (index >= 0) {
             return context.getString(mKeyCodeMap.valueAt(index));
         }
-        final String accentedLetter = getSpokenAccentedLetterDescriptionId(context, code);
+        final String accentedLetter = getSpokenAccentedLetterDescription(context, code);
         if (accentedLetter != null) {
             return accentedLetter;
         }
-        // Here, <code>code</code> may be a base letter.
-        final int spokenEmojiId = getSpokenDescriptionId(
-                context, code, SPOKEN_EMOJI_RESOURCE_NAME_FORMAT);
-        if (spokenEmojiId != 0) {
-            return context.getString(spokenEmojiId);
+        // Here, <code>code</code> may be a base (non-accented) letter.
+        final String emojiDescription = getSpokenEmojiDescription(context, code);
+        if (emojiDescription != null) {
+            return emojiDescription;
         }
         if (isDefinedNonCtrl) {
             return Character.toString((char) code);
@@ -304,7 +303,7 @@
         return context.getString(R.string.spoken_description_unknown, code);
     }
 
-    private String getSpokenAccentedLetterDescriptionId(final Context context, final int code) {
+    private String getSpokenAccentedLetterDescription(final Context context, final int code) {
         final boolean isUpperCase = Character.isUpperCase(code);
         final int baseCode = isUpperCase ? Character.toLowerCase(code) : code;
         final int baseIndex = mKeyCodeMap.indexOfKey(baseCode);
@@ -314,7 +313,17 @@
             return null;
         }
         final String spokenText = context.getString(resId);
-        return isUpperCase ? context.getString(R.string.spoke_description_upper_case, spokenText)
+        return isUpperCase ? context.getString(R.string.spoken_description_upper_case, spokenText)
+                : spokenText;
+    }
+
+    private String getSpokenEmojiDescription(final Context context, final int code) {
+        final int resId = getSpokenDescriptionId(context, code, SPOKEN_EMOJI_RESOURCE_NAME_FORMAT);
+        if (resId == 0) {
+            return null;
+        }
+        final String spokenText = context.getString(resId);
+        return TextUtils.isEmpty(spokenText) ? context.getString(R.string.spoken_emoji_unknown)
                 : spokenText;
     }
 
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
index eed40f4..7cae986 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
@@ -16,11 +16,12 @@
 
 package com.android.inputmethod.accessibility;
 
-import android.os.SystemClock;
+import android.content.Context;
 import android.support.v4.view.AccessibilityDelegateCompat;
 import android.support.v4.view.ViewCompat;
 import android.support.v4.view.accessibility.AccessibilityEventCompat;
 import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewParent;
@@ -30,6 +31,7 @@
 import com.android.inputmethod.keyboard.KeyDetector;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardView;
+import com.android.inputmethod.keyboard.PointerTracker;
 
 public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
         extends AccessibilityDelegateCompat {
@@ -37,7 +39,7 @@
     protected final KeyDetector mKeyDetector;
     private Keyboard mKeyboard;
     private KeyboardAccessibilityNodeProvider mAccessibilityNodeProvider;
-    private Key mLastHoverKey;
+    private Key mCurrentHoverKey;
 
     public KeyboardAccessibilityDelegate(final KV keyboardView, final KeyDetector keyDetector) {
         super();
@@ -65,10 +67,31 @@
         mKeyboard = keyboard;
     }
 
-    protected Keyboard getKeyboard() {
+    protected final Keyboard getKeyboard() {
         return mKeyboard;
     }
 
+    protected final void setCurrentHoverKey(final Key key) {
+        mCurrentHoverKey = key;
+    }
+
+    protected final Key getCurrentHoverKey() {
+        return mCurrentHoverKey;
+    }
+
+    /**
+     * Sends a window state change event with the specified string resource id.
+     *
+     * @param resId The string resource id of the text to send with the event.
+     */
+    protected void sendWindowStateChanged(final int resId) {
+        if (resId == 0) {
+            return;
+        }
+        final Context context = mKeyboardView.getContext();
+        sendWindowStateChanged(context.getString(resId));
+    }
+
     /**
      * Sends a window state change event with the specified text.
      *
@@ -114,119 +137,157 @@
     }
 
     /**
+     * Get a key that a hover event is on.
+     *
+     * @param event The hover event.
+     * @return key The key that the <code>event</code> is on.
+     */
+    protected final Key getHoverKey(final MotionEvent event) {
+        final int actionIndex = event.getActionIndex();
+        final int x = (int)event.getX(actionIndex);
+        final int y = (int)event.getY(actionIndex);
+        return mKeyDetector.detectHitKey(x, y);
+    }
+
+    /**
      * Receives hover events when touch exploration is turned on in SDK versions ICS and higher.
      *
      * @param event The hover event.
-     * @return {@code true} if the event is handled
+     * @return {@code true} if the event is handled.
      */
-    public boolean dispatchHoverEvent(final MotionEvent event) {
-        final int x = (int) event.getX();
-        final int y = (int) event.getY();
-        final Key previousKey = mLastHoverKey;
-        final Key key = mKeyDetector.detectHitKey(x, y);
-        mLastHoverKey = key;
-
-        switch (event.getAction()) {
-        case MotionEvent.ACTION_HOVER_EXIT:
-            // Make sure we're not getting an EXIT event because the user slid
-            // off the keyboard area, then force a key press.
-            if (key != null) {
-                final long downTime = simulateKeyPress(key);
-                simulateKeyRelease(key, downTime);
-            }
-            //$FALL-THROUGH$
+    public boolean onHoverEvent(final MotionEvent event) {
+        switch (event.getActionMasked()) {
         case MotionEvent.ACTION_HOVER_ENTER:
-            return onHoverKey(key, event);
+            onHoverEnter(event);
+            break;
         case MotionEvent.ACTION_HOVER_MOVE:
-            if (key != previousKey) {
-                return onTransitionKey(key, previousKey, event);
-            }
-            return onHoverKey(key, event);
-        }
-        return false;
-    }
-
-    /**
-     * Simulates a key press by injecting touch an event into the keyboard view.
-     * This avoids the complexity of trackers and listeners within the keyboard.
-     *
-     * @param key The key to press.
-     */
-    private long simulateKeyPress(final Key key) {
-        final int x = key.getHitBox().centerX();
-        final int y = key.getHitBox().centerY();
-        final long downTime = SystemClock.uptimeMillis();
-        final MotionEvent downEvent = MotionEvent.obtain(
-                downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0);
-        mKeyboardView.onTouchEvent(downEvent);
-        downEvent.recycle();
-        return downTime;
-    }
-
-    /**
-     * Simulates a key release by injecting touch an event into the keyboard view.
-     * This avoids the complexity of trackers and listeners within the keyboard.
-     *
-     * @param key The key to release.
-     */
-    private void simulateKeyRelease(final Key key, final long downTime) {
-        final int x = key.getHitBox().centerX();
-        final int y = key.getHitBox().centerY();
-        final MotionEvent upEvent = MotionEvent.obtain(
-                downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0);
-        mKeyboardView.onTouchEvent(upEvent);
-        upEvent.recycle();
-    }
-
-    /**
-     * Simulates a transition between two {@link Key}s by sending a HOVER_EXIT on the previous key,
-     * a HOVER_ENTER on the current key, and a HOVER_MOVE on the current key.
-     *
-     * @param currentKey The currently hovered key.
-     * @param previousKey The previously hovered key.
-     * @param event The event that triggered the transition.
-     * @return {@code true} if the event was handled.
-     */
-    private boolean onTransitionKey(final Key currentKey, final Key previousKey,
-            final MotionEvent event) {
-        final int savedAction = event.getAction();
-        event.setAction(MotionEvent.ACTION_HOVER_EXIT);
-        onHoverKey(previousKey, event);
-        event.setAction(MotionEvent.ACTION_HOVER_ENTER);
-        onHoverKey(currentKey, event);
-        event.setAction(MotionEvent.ACTION_HOVER_MOVE);
-        final boolean handled = onHoverKey(currentKey, event);
-        event.setAction(savedAction);
-        return handled;
-    }
-
-    /**
-     * Handles a hover event on a key. If {@link Key} extended View, this would be analogous to
-     * calling View.onHoverEvent(MotionEvent).
-     *
-     * @param key The currently hovered key.
-     * @param event The hover event.
-     * @return {@code true} if the event was handled.
-     */
-    private boolean onHoverKey(final Key key, final MotionEvent event) {
-        // Null keys can't receive events.
-        if (key == null) {
-            return false;
-        }
-        final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
-
-        switch (event.getAction()) {
-        case MotionEvent.ACTION_HOVER_ENTER:
-            provider.sendAccessibilityEventForKey(
-                    key, AccessibilityEventCompat.TYPE_VIEW_HOVER_ENTER);
-            provider.performActionForKey(
-                    key, AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS, null);
+            onHoverMove(event);
             break;
         case MotionEvent.ACTION_HOVER_EXIT:
-            provider.sendAccessibilityEventForKey(
-                    key, AccessibilityEventCompat.TYPE_VIEW_HOVER_EXIT);
+            onHoverExit(event);
+            break;
+        default:
+            Log.w(getClass().getSimpleName(), "Unknown hover event: " + event);
             break;
         }
         return true;
     }
+
+    /**
+     * Process {@link MotionEvent#ACTION_HOVER_ENTER} event.
+     *
+     * @param event A hover enter event.
+     */
+    protected void onHoverEnter(final MotionEvent event) {
+        final Key key = getHoverKey(event);
+        if (key != null) {
+            onHoverEnterKey(key);
+        }
+        setCurrentHoverKey(key);
+    }
+
+    /**
+     * Process {@link MotionEvent#ACTION_HOVER_MOVE} event.
+     *
+     * @param event A hover move event.
+     */
+    protected void onHoverMove(final MotionEvent event) {
+        final Key previousKey = getCurrentHoverKey();
+        final Key key = getHoverKey(event);
+        if (key != previousKey) {
+            if (previousKey != null) {
+                onHoverExitKey(previousKey);
+            }
+            if (key != null) {
+                onHoverEnterKey(key);
+            }
+        }
+        if (key != null) {
+            onHoverMoveKey(key);
+        }
+        setCurrentHoverKey(key);
+    }
+
+    /**
+     * Process {@link MotionEvent#ACTION_HOVER_EXIT} event.
+     *
+     * @param event A hover exit event.
+     */
+    protected void onHoverExit(final MotionEvent event) {
+        final Key key = getHoverKey(event);
+        // Make sure we're not getting an EXIT event because the user slid
+        // off the keyboard area, then force a key press.
+        if (key != null) {
+            simulateTouchEvent(MotionEvent.ACTION_DOWN, event);
+            simulateTouchEvent(MotionEvent.ACTION_UP, event);
+            onHoverExitKey(key);
+        }
+        setCurrentHoverKey(null);
+    }
+
+    /**
+     * Simulating a touch event by injecting a synthesized touch event into {@link PointerTracker}.
+     *
+     * @param touchAction The action of the synthesizing touch event.
+     * @param hoverEvent The base hover event from that the touch event is synthesized.
+     */
+    protected void simulateTouchEvent(final int touchAction, final MotionEvent hoverEvent) {
+        final MotionEvent touchEvent = synthesizeTouchEvent(touchAction, hoverEvent);
+        final int actionIndex = touchEvent.getActionIndex();
+        final int pointerId = touchEvent.getPointerId(actionIndex);
+        final PointerTracker tracker = PointerTracker.getPointerTracker(pointerId);
+        tracker.processMotionEvent(touchEvent, mKeyDetector);
+        touchEvent.recycle();
+    }
+
+    /**
+     * Synthesize a touch event from a hover event.
+     *
+     * @param touchAction The action of the synthesizing touch event.
+     * @param event The base hover event from that the touch event is synthesized.
+     * @return The synthesized touch event of <code>touchAction</code> that has pointer information
+     * of <code>event</code>.
+     */
+    protected static MotionEvent synthesizeTouchEvent(final int touchAction,
+            final MotionEvent event) {
+        final long downTime = event.getDownTime();
+        final long eventTime = event.getEventTime();
+        final int actionIndex = event.getActionIndex();
+        final float x = event.getX(actionIndex);
+        final float y = event.getY(actionIndex);
+        final int pointerId = event.getPointerId(actionIndex);
+        return MotionEvent.obtain(downTime, eventTime, touchAction, x, y, pointerId);
+    }
+
+    /**
+     * Handles a hover enter event on a key.
+     *
+     * @param key The currently hovered key.
+     */
+    protected void onHoverEnterKey(final Key key) {
+        key.onPressed();
+        mKeyboardView.invalidateKey(key);
+        final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
+        provider.sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_ENTER);
+        provider.performActionForKey(key, AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS);
+    }
+
+    /**
+     * Handles a hover move event on a key.
+     *
+     * @param key The currently hovered key.
+     */
+    protected void onHoverMoveKey(final Key key) { }
+
+    /**
+     * Handles a hover exit event on a key.
+     *
+     * @param key The currently hovered key.
+     */
+    protected void onHoverExitKey(final Key key) {
+        key.onReleased();
+        mKeyboardView.invalidateKey(key);
+        final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
+        provider.sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_EXIT);
+    }
 }
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
index cddd1c7..a6997e2 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
@@ -134,7 +134,7 @@
         event.setClassName(key.getClass().getName());
         event.setContentDescription(keyDescription);
         event.setEnabled(true);
-        final AccessibilityRecordCompat record = new AccessibilityRecordCompat(event);
+        final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
         record.setSource(mKeyboardView, virtualViewId);
         return event;
     }
@@ -229,7 +229,7 @@
         if (key == null) {
             return false;
         }
-        return performActionForKey(key, action, arguments);
+        return performActionForKey(key, action);
     }
 
     /**
@@ -237,25 +237,16 @@
      *
      * @param key The on which to perform the action.
      * @param action The action to perform.
-     * @param arguments The action's arguments.
      * @return The result of performing the action, or false if the action is not supported.
      */
-    boolean performActionForKey(final Key key, final int action, final Bundle arguments) {
-        final int virtualViewId = getVirtualViewIdOf(key);
-
+    boolean performActionForKey(final Key key, final int action) {
         switch (action) {
         case AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS:
-            if (mAccessibilityFocusedView == virtualViewId) {
-                return false;
-            }
-            mAccessibilityFocusedView = virtualViewId;
+            mAccessibilityFocusedView = getVirtualViewIdOf(key);
             sendAccessibilityEventForKey(
                     key, AccessibilityEventCompat.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
             return true;
         case AccessibilityNodeInfoCompat.ACTION_CLEAR_ACCESSIBILITY_FOCUS:
-            if (mAccessibilityFocusedView != virtualViewId) {
-                return false;
-            }
             mAccessibilityFocusedView = UNDEFINED;
             sendAccessibilityEventForKey(
                     key, AccessibilityEventCompat.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
index c114551..ec6bb01 100644
--- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
@@ -17,13 +17,8 @@
 package com.android.inputmethod.accessibility;
 
 import android.content.Context;
-import android.os.SystemClock;
-import android.support.v4.view.accessibility.AccessibilityEventCompat;
-import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
 import android.util.SparseIntArray;
-import android.view.MotionEvent;
 
-import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.KeyDetector;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardId;
@@ -168,17 +163,13 @@
         default:
             return;
         }
-        final String text = mKeyboardView.getContext().getString(resId);
-        sendWindowStateChanged(text);
+        sendWindowStateChanged(resId);
     }
 
     /**
      * Announces that the keyboard has been hidden.
      */
     private void announceKeyboardHidden() {
-        final Context context = mKeyboardView.getContext();
-        final String text = context.getString(R.string.announce_keyboard_hidden);
-
-        sendWindowStateChanged(text);
+        sendWindowStateChanged(R.string.announce_keyboard_hidden);
     }
 }
diff --git a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
index 60f7e2d..4d51821 100644
--- a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
+++ b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
@@ -27,7 +27,6 @@
 import com.android.inputmethod.latin.SuggestedWords;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.SuggestionSpanPickedNotificationReceiver;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -73,13 +72,13 @@
             return pickedWord;
         }
 
-        final ArrayList<String> suggestionsList = CollectionUtils.newArrayList();
+        final ArrayList<String> suggestionsList = new ArrayList<>();
         for (int i = 0; i < suggestedWords.size(); ++i) {
             if (suggestionsList.size() >= SuggestionSpan.SUGGESTIONS_MAX_SIZE) {
                 break;
             }
             final SuggestedWordInfo info = suggestedWords.getInfo(i);
-            if (info.mKind == SuggestedWordInfo.KIND_PREDICTION) {
+            if (info.isKindOf(SuggestedWordInfo.KIND_PREDICTION)) {
                 continue;
             }
             final String word = suggestedWords.getWord(i);
diff --git a/java/src/com/android/inputmethod/compat/ViewCompatUtils.java b/java/src/com/android/inputmethod/compat/ViewCompatUtils.java
index dec739d..767cc42 100644
--- a/java/src/com/android/inputmethod/compat/ViewCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/ViewCompatUtils.java
@@ -24,23 +24,13 @@
 // Currently {@link #getPaddingEnd(View)} and {@link #setPaddingRelative(View,int,int,int,int)}
 // are missing from android-support-v4 static library in KitKat SDK.
 public final class ViewCompatUtils {
-    // Note that View.LAYOUT_DIRECTION_LTR and View.LAYOUT_DIRECTION_RTL have been introduced in
-    // API level 17 (Build.VERSION_CODE.JELLY_BEAN_MR1).
-    public static final int LAYOUT_DIRECTION_LTR = (Integer)CompatUtils.getFieldValue(null, 0x0,
-            CompatUtils.getField(View.class, "LAYOUT_DIRECTION_LTR"));
-    public static final int LAYOUT_DIRECTION_RTL = (Integer)CompatUtils.getFieldValue(null, 0x1,
-            CompatUtils.getField(View.class, "LAYOUT_DIRECTION_RTL"));
-
-    // Note that View.getPaddingEnd(), View.setPaddingRelative(int,int,int,int), and
-    // View.getLayoutDirection() have been introduced in API level 17
-    // (Build.VERSION_CODE.JELLY_BEAN_MR1).
+    // Note that View.getPaddingEnd(), View.setPaddingRelative(int,int,int,int) have been
+    // introduced in API level 17 (Build.VERSION_CODE.JELLY_BEAN_MR1).
     private static final Method METHOD_getPaddingEnd = CompatUtils.getMethod(
             View.class, "getPaddingEnd");
     private static final Method METHOD_setPaddingRelative = CompatUtils.getMethod(
             View.class, "setPaddingRelative",
             Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE);
-    private static final Method METHOD_getLayoutDirection = CompatUtils.getMethod(
-            View.class, "getLayoutDirection");
 
     private ViewCompatUtils() {
         // This utility class is not publicly instantiable.
@@ -61,11 +51,4 @@
         }
         CompatUtils.invoke(view, null, METHOD_setPaddingRelative, start, top, end, bottom);
     }
-
-    public static int getLayoutDirection(final View view) {
-        if (METHOD_getLayoutDirection == null) {
-            return LAYOUT_DIRECTION_LTR;
-        }
-        return (Integer)CompatUtils.invoke(view, 0, METHOD_getLayoutDirection);
-    }
 }
diff --git a/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java b/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java
index 3f69ced..3d294ac 100644
--- a/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java
+++ b/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java
@@ -16,7 +16,6 @@
 
 package com.android.inputmethod.dictionarypack;
 
-import android.app.DownloadManager;
 import android.app.DownloadManager.Request;
 import android.content.ContentValues;
 import android.content.Context;
@@ -600,7 +599,7 @@
     private final Queue<Action> mActions;
 
     public ActionBatch() {
-        mActions = new LinkedList<Action>();
+        mActions = new LinkedList<>();
     }
 
     public void add(final Action a) {
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryDownloadProgressBar.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryDownloadProgressBar.java
index 2623eff..1d84e58 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionaryDownloadProgressBar.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryDownloadProgressBar.java
@@ -29,7 +29,6 @@
 import android.widget.ProgressBar;
 
 public class DictionaryDownloadProgressBar extends ProgressBar {
-    @SuppressWarnings("unused")
     private static final String TAG = DictionaryDownloadProgressBar.class.getSimpleName();
     private static final int NOT_A_DOWNLOADMANAGER_PENDING_ID = 0;
 
@@ -119,7 +118,6 @@
             try {
                 final UpdateHelper updateHelper = new UpdateHelper();
                 final Query query = new Query().setFilterById(mId);
-                int lastProgress = 0;
                 setIndeterminate(true);
                 while (!isInterrupted()) {
                     final Cursor cursor = mDownloadManagerWrapper.query(query);
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java
index 13c07de..8e02617 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java
@@ -18,8 +18,6 @@
 
 import android.view.View;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -39,8 +37,8 @@
         public int mStatus = MetadataDbHelper.STATUS_UNKNOWN;
     }
 
-    private HashMap<String, State> mWordlistToState = CollectionUtils.newHashMap();
-    private ArrayList<View> mViewCache = CollectionUtils.newArrayList();
+    private HashMap<String, State> mWordlistToState = new HashMap<>();
+    private ArrayList<View> mViewCache = new ArrayList<>();
 
     public boolean isOpen(final String wordlistId) {
         final State state = mWordlistToState.get(wordlistId);
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
index c35995b..f5bd84c 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
@@ -357,7 +357,7 @@
             return Collections.<WordListInfo>emptyList();
         }
         try {
-            final HashMap<String, WordListInfo> dicts = new HashMap<String, WordListInfo>();
+            final HashMap<String, WordListInfo> dicts = new HashMap<>();
             final int idIndex = results.getColumnIndex(MetadataDbHelper.WORDLISTID_COLUMN);
             final int localeIndex = results.getColumnIndex(MetadataDbHelper.LOCALE_COLUMN);
             final int localFileNameIndex =
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java b/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
index dae2f22..11982fa 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
@@ -33,13 +33,13 @@
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.util.Log;
-import android.view.animation.AnimationUtils;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.animation.AnimationUtils;
 
 import com.android.inputmethod.latin.R;
 
@@ -67,8 +67,8 @@
     private boolean mChangedSettings;
     private DictionaryListInterfaceState mDictionaryListInterfaceState =
             new DictionaryListInterfaceState();
-    private TreeMap<String, WordListPreference> mCurrentPreferenceMap =
-            new TreeMap<String, WordListPreference>(); // never null
+    // never null
+    private TreeMap<String, WordListPreference> mCurrentPreferenceMap = new TreeMap<>();
 
     private final BroadcastReceiver mConnectivityChangedReceiver = new BroadcastReceiver() {
             @Override
@@ -280,19 +280,18 @@
                 : activity.getContentResolver().query(contentUri, null, null, null, null);
 
         if (null == cursor) {
-            final ArrayList<Preference> result = new ArrayList<Preference>();
+            final ArrayList<Preference> result = new ArrayList<>();
             result.add(createErrorMessage(activity, R.string.cannot_connect_to_dict_service));
             return result;
         }
         try {
             if (!cursor.moveToFirst()) {
-                final ArrayList<Preference> result = new ArrayList<Preference>();
+                final ArrayList<Preference> result = new ArrayList<>();
                 result.add(createErrorMessage(activity, R.string.no_dictionaries_available));
                 return result;
             } else {
                 final String systemLocaleString = Locale.getDefault().toString();
-                final TreeMap<String, WordListPreference> prefMap =
-                        new TreeMap<String, WordListPreference>();
+                final TreeMap<String, WordListPreference> prefMap = new TreeMap<>();
                 final int idIndex = cursor.getColumnIndex(MetadataDbHelper.WORDLISTID_COLUMN);
                 final int versionIndex = cursor.getColumnIndex(MetadataDbHelper.VERSION_COLUMN);
                 final int localeIndex = cursor.getColumnIndex(MetadataDbHelper.LOCALE_COLUMN);
diff --git a/java/src/com/android/inputmethod/dictionarypack/LocaleUtils.java b/java/src/com/android/inputmethod/dictionarypack/LocaleUtils.java
index 77f67b8..4f0805c 100644
--- a/java/src/com/android/inputmethod/dictionarypack/LocaleUtils.java
+++ b/java/src/com/android/inputmethod/dictionarypack/LocaleUtils.java
@@ -175,7 +175,7 @@
         return saveLocale;
     }
 
-    private static final HashMap<String, Locale> sLocaleCache = new HashMap<String, Locale>();
+    private static final HashMap<String, Locale> sLocaleCache = new HashMap<>();
 
     /**
      * Creates a locale from a string specification.
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
index 668eb92..17dd781 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
@@ -47,7 +47,7 @@
     // used to identify the versions for upgrades. This should never change going forward.
     private static final int METADATA_DATABASE_VERSION_WITH_CLIENTID = 6;
     // The current database version.
-    private static final int CURRENT_METADATA_DATABASE_VERSION = 8;
+    private static final int CURRENT_METADATA_DATABASE_VERSION = 9;
 
     private final static long NOT_A_DOWNLOAD_ID = -1;
 
@@ -160,7 +160,7 @@
         // this legacy database. New clients should make sure to always pass a client ID so as
         // to avoid conflicts.
         final String clientId = null != clientIdOrNull ? clientIdOrNull : "";
-        if (null == sInstanceMap) sInstanceMap = new TreeMap<String, MetadataDbHelper>();
+        if (null == sInstanceMap) sInstanceMap = new TreeMap<>();
         MetadataDbHelper helper = sInstanceMap.get(clientId);
         if (null == helper) {
             helper = new MetadataDbHelper(context, clientId);
@@ -639,7 +639,7 @@
     public static ArrayList<DownloadRecord> getDownloadRecordsForDownloadId(final Context context,
             final long downloadId) {
         final SQLiteDatabase defaultDb = getDb(context, "");
-        final ArrayList<DownloadRecord> results = new ArrayList<DownloadRecord>();
+        final ArrayList<DownloadRecord> results = new ArrayList<>();
         final Cursor cursor = defaultDb.query(CLIENT_TABLE_NAME, CLIENT_TABLE_COLUMNS,
                 null, null, null, null, null);
         try {
@@ -923,7 +923,7 @@
                 // - Remove the old entry from the table
                 // - Erase the old file
                 // We start by gathering the names of the files we should delete.
-                final List<String> filenames = new LinkedList<String>();
+                final List<String> filenames = new LinkedList<>();
                 final Cursor c = db.query(METADATA_TABLE_NAME,
                         new String[] { LOCAL_FILENAME_COLUMN },
                         LOCALE_COLUMN + " = ? AND " +
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java b/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
index 63e4198..d66b690 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
@@ -43,7 +43,7 @@
      * @return the constructed list of wordlist metadata.
      */
     private static List<WordListMetadata> makeMetadataObject(final Cursor results) {
-        final ArrayList<WordListMetadata> buildingMetadata = new ArrayList<WordListMetadata>();
+        final ArrayList<WordListMetadata> buildingMetadata = new ArrayList<>();
         if (null != results && results.moveToFirst()) {
             final int localeColumn = results.getColumnIndex(MetadataDbHelper.LOCALE_COLUMN);
             final int typeColumn = results.getColumnIndex(MetadataDbHelper.TYPE_COLUMN);
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataParser.java b/java/src/com/android/inputmethod/dictionarypack/MetadataParser.java
index a88173e..52290ca 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataParser.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataParser.java
@@ -52,7 +52,7 @@
      */
     private static WordListMetadata parseOneWordList(final JsonReader reader)
             throws IOException, BadFormatException {
-        final TreeMap<String, String> arguments = new TreeMap<String, String>();
+        final TreeMap<String, String> arguments = new TreeMap<>();
         reader.beginObject();
         while (reader.hasNext()) {
             final String name = reader.nextName();
@@ -100,7 +100,7 @@
     public static List<WordListMetadata> parseMetadata(final InputStreamReader input)
             throws IOException, BadFormatException {
         JsonReader reader = new JsonReader(input);
-        final ArrayList<WordListMetadata> readInfo = new ArrayList<WordListMetadata>();
+        final ArrayList<WordListMetadata> readInfo = new ArrayList<>();
         reader.beginArray();
         while (reader.hasNext()) {
             final WordListMetadata thisMetadata = parseOneWordList(reader);
diff --git a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
index dcff490..95a0942 100644
--- a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
@@ -177,7 +177,7 @@
      */
     public static boolean tryUpdate(final Context context, final boolean updateNow) {
         // TODO: loop through all clients instead of only doing the default one.
-        final TreeSet<String> uris = new TreeSet<String>();
+        final TreeSet<String> uris = new TreeSet<>();
         final Cursor cursor = MetadataDbHelper.queryClientIds(context);
         if (null == cursor) return false;
         try {
@@ -557,7 +557,7 @@
         // Instantiation of a parameterized type is not possible in Java, so it's not possible to
         // return the same type of list that was passed - probably the same reason why Collections
         // does not do it. So we need to decide statically which concrete type to return.
-        return new LinkedList<T>(src);
+        return new LinkedList<>(src);
     }
 
     /**
@@ -740,10 +740,10 @@
         final ActionBatch actions = new ActionBatch();
         // Upgrade existing word lists
         DebugLogUtils.l("Comparing dictionaries");
-        final Set<String> wordListIds = new TreeSet<String>();
+        final Set<String> wordListIds = new TreeSet<>();
         // TODO: Can these be null?
-        if (null == from) from = new ArrayList<WordListMetadata>();
-        if (null == to) to = new ArrayList<WordListMetadata>();
+        if (null == from) from = new ArrayList<>();
+        if (null == to) to = new ArrayList<>();
         for (WordListMetadata wlData : from) wordListIds.add(wlData.mId);
         for (WordListMetadata wlData : to) wordListIds.add(wlData.mId);
         for (String id : wordListIds) {
diff --git a/java/src/com/android/inputmethod/event/CombinerChain.java b/java/src/com/android/inputmethod/event/CombinerChain.java
index 9e7f04d..61bc11b 100644
--- a/java/src/com/android/inputmethod/event/CombinerChain.java
+++ b/java/src/com/android/inputmethod/event/CombinerChain.java
@@ -20,7 +20,6 @@
 import android.text.TextUtils;
 
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -44,8 +43,8 @@
     private SpannableStringBuilder mStateFeedback;
     private final ArrayList<Combiner> mCombiners;
 
-    private static final HashMap<String, Class> IMPLEMENTED_COMBINERS
-            = new HashMap<String, Class>();
+    private static final HashMap<String, Class<? extends Combiner>> IMPLEMENTED_COMBINERS =
+            new HashMap<>();
     static {
         IMPLEMENTED_COMBINERS.put("MyanmarReordering", MyanmarReordering.class);
     }
@@ -63,7 +62,7 @@
      * @param combinerList A list of combiners to be applied in order.
      */
     public CombinerChain(final String initialText, final Combiner... combinerList) {
-        mCombiners = CollectionUtils.newArrayList();
+        mCombiners = new ArrayList<>();
         // The dead key combiner is always active, and always first
         mCombiners.add(new DeadKeyCombiner());
         for (final Combiner combiner : combinerList) {
@@ -87,7 +86,7 @@
      * @param newEvent the new event to process
      */
     public void processEvent(final ArrayList<Event> previousEvents, final Event newEvent) {
-        final ArrayList<Event> modifiablePreviousEvents = new ArrayList<Event>(previousEvents);
+        final ArrayList<Event> modifiablePreviousEvents = new ArrayList<>(previousEvents);
         Event event = newEvent;
         for (final Combiner combiner : mCombiners) {
             // A combiner can never return more than one event; it can return several
@@ -136,12 +135,13 @@
         final Combiner[] combiners = new Combiner[combinerDescriptors.length];
         int i = 0;
         for (final String combinerDescriptor : combinerDescriptors) {
-            final Class combinerClass = IMPLEMENTED_COMBINERS.get(combinerDescriptor);
+            final Class<? extends Combiner> combinerClass =
+                    IMPLEMENTED_COMBINERS.get(combinerDescriptor);
             if (null == combinerClass) {
                 throw new RuntimeException("Unknown combiner descriptor: " + combinerDescriptor);
             }
             try {
-                combiners[i++] = (Combiner)combinerClass.newInstance();
+                combiners[i++] = combinerClass.newInstance();
             } catch (InstantiationException e) {
                 throw new RuntimeException("Unable to instantiate combiner: " + combinerDescriptor,
                         e);
diff --git a/java/src/com/android/inputmethod/event/MyanmarReordering.java b/java/src/com/android/inputmethod/event/MyanmarReordering.java
index da0228b..3291993 100644
--- a/java/src/com/android/inputmethod/event/MyanmarReordering.java
+++ b/java/src/com/android/inputmethod/event/MyanmarReordering.java
@@ -17,7 +17,6 @@
 package com.android.inputmethod.event;
 
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -32,7 +31,7 @@
     // U+200B ZERO WIDTH SPACE
     private final static int ZERO_WIDTH_NON_JOINER = 0x200B; // should be 0x200C
 
-    private final ArrayList<Event> mCurrentEvents = CollectionUtils.newArrayList();
+    private final ArrayList<Event> mCurrentEvents = new ArrayList<>();
 
     // List of consonants :
     // U+1000 MYANMAR LETTER KA
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index f646a03..85dfea4 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -22,9 +22,9 @@
 import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
 import com.android.inputmethod.keyboard.internal.KeyboardParams;
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.CoordinateUtils;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -83,7 +83,7 @@
     public final List<Key> mAltCodeKeysWhileTyping;
     public final KeyboardIconsSet mIconsSet;
 
-    private final SparseArray<Key> mKeyCache = CollectionUtils.newSparseArray();
+    private final SparseArray<Key> mKeyCache = new SparseArray<>();
 
     private final ProximityInfo mProximityInfo;
     private final boolean mProximityCharsCorrectionEnabled;
@@ -103,8 +103,7 @@
         mTopPadding = params.mTopPadding;
         mVerticalGap = params.mVerticalGap;
 
-        mSortedKeys = Collections.unmodifiableList(
-                CollectionUtils.newArrayList(params.mSortedKeys));
+        mSortedKeys = Collections.unmodifiableList(new ArrayList<>(params.mSortedKeys));
         mShiftKeys = Collections.unmodifiableList(params.mShiftKeys);
         mAltCodeKeysWhileTyping = Collections.unmodifiableList(params.mAltCodeKeysWhileTyping);
         mIconsSet = params.mIconsSet;
@@ -159,7 +158,7 @@
     /**
      * Return the sorted list of keys of this keyboard.
      * The keys are sorted from top-left to bottom-right order.
-     * The list may contain {@link Spacer} object as well.
+     * The list may contain {@link Key.Spacer} object as well.
      * @return the sorted unmodifiable list of {@link Key}s of this keyboard.
      */
     public List<Key> getSortedKeys() {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
index cde5091..aa64699 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
@@ -41,7 +41,6 @@
 import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.SubtypeSwitcher;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.InputTypeUtils;
 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
 import com.android.inputmethod.latin.utils.XmlParseUtils;
@@ -81,7 +80,7 @@
     // them from disappearing from sKeyboardCache.
     private static final Keyboard[] sForcibleKeyboardCache = new Keyboard[FORCIBLE_CACHE_SIZE];
     private static final HashMap<KeyboardId, SoftReference<Keyboard>> sKeyboardCache =
-            CollectionUtils.newHashMap();
+            new HashMap<>();
     private static final KeysCache sKeysCache = new KeysCache();
 
     @SuppressWarnings("serial")
@@ -117,7 +116,7 @@
         int mKeyboardHeight;
         // Sparse array of KeyboardLayoutSet element parameters indexed by element's id.
         final SparseArray<ElementParams> mKeyboardLayoutSetElementIdToParamsMap =
-                CollectionUtils.newSparseArray();
+                new SparseArray<>();
     }
 
     public static void clearKeyboardCache() {
@@ -181,7 +180,7 @@
         }
 
         final KeyboardBuilder<KeyboardParams> builder =
-                new KeyboardBuilder<KeyboardParams>(mContext, new KeyboardParams());
+                new KeyboardBuilder<>(mContext, new KeyboardParams());
         if (id.isAlphabetKeyboard()) {
             builder.setAutoGenerate(sKeysCache);
         }
@@ -192,7 +191,7 @@
         }
         builder.setProximityCharsCorrectionEnabled(elementParams.mProximityCharsCorrectionEnabled);
         final Keyboard keyboard = builder.build();
-        sKeyboardCache.put(id, new SoftReference<Keyboard>(keyboard));
+        sKeyboardCache.put(id, new SoftReference<>(keyboard));
         if ((id.mElementId == KeyboardId.ELEMENT_ALPHABET
                 || id.mElementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED)
                 && !mParams.mIsSpellChecker) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 61d51d1..ef5fabb 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -33,7 +33,6 @@
 import com.android.inputmethod.keyboard.internal.KeyboardTextsSet;
 import com.android.inputmethod.latin.InputView;
 import com.android.inputmethod.latin.LatinIME;
-import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.RichInputMethodManager;
 import com.android.inputmethod.latin.SubtypeSwitcher;
@@ -127,7 +126,6 @@
             mKeyboardTextsSet.setLocale(mSubtypeSwitcher.getCurrentSubtypeLocale(), mThemeContext);
         } catch (KeyboardLayoutSetException e) {
             Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause());
-            LatinImeLogger.logOnException(e.mKeyboardId.toString(), e.getCause());
             return;
         }
     }
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
index 1f14aa2..60d9a05 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
@@ -81,20 +81,6 @@
         return mThemeId;
     }
 
-    // TODO: This method should be removed when {@link LatinImeLogger} is removed.
-    public int getCompatibleThemeIdForLogging() {
-        switch (mThemeId) {
-        case THEME_ID_ICS:
-            return 5;
-        case THEME_ID_KLP:
-            return 9;
-        case THEME_ID_LXX_DARK:
-            return 10;
-        default: // Invalid theme
-            return -1;
-        }
-    }
-
     private static KeyboardTheme searchKeyboardThemeById(final int themeId) {
         // TODO: This search algorithm isn't optimal if there are many themes.
         for (final KeyboardTheme theme : KEYBOARD_THEMES) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index edfc5fd..c4ca1c4 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -35,12 +35,8 @@
 import com.android.inputmethod.keyboard.internal.KeyDrawParams;
 import com.android.inputmethod.keyboard.internal.KeyVisualAttributes;
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.define.ProductionFlag;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.TypefaceUtils;
-import com.android.inputmethod.research.ResearchLogger;
 
 import java.util.HashSet;
 
@@ -110,7 +106,7 @@
     /** True if all keys should be drawn */
     private boolean mInvalidateAllKeys;
     /** The keys that should be drawn */
-    private final HashSet<Key> mInvalidatedKeys = CollectionUtils.newHashSet();
+    private final HashSet<Key> mInvalidatedKeys = new HashSet<>();
     /** The working rectangle variable */
     private final Rect mWorkingRect = new Rect();
     /** The keyboard bitmap buffer for faster updates */
@@ -188,7 +184,6 @@
      */
     public void setKeyboard(final Keyboard keyboard) {
         mKeyboard = keyboard;
-        LatinImeLogger.onSetKeyboard(keyboard);
         final int keyHeight = keyboard.mMostCommonKeyHeight - keyboard.mVerticalGap;
         mKeyDrawParams.updateParams(keyHeight, mKeyVisualAttributes);
         mKeyDrawParams.updateParams(keyHeight, keyboard.mKeyVisualAttributes);
@@ -318,13 +313,6 @@
             }
         }
 
-        // Research Logging (Development Only Diagnostics) indicator.
-        // TODO: Reimplement using a keyboard background image specific to the ResearchLogger,
-        // and remove this call.
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.getInstance().paintIndicator(this, paint, canvas, width, height);
-        }
-
         mInvalidatedKeys.clear();
         mInvalidateAllKeys = false;
     }
@@ -363,9 +351,6 @@
         }
         canvas.translate(bgX, bgY);
         background.draw(canvas);
-        if (LatinImeLogger.sVISUALDEBUG) {
-            drawRectangle(canvas, 0.0f, 0.0f, bgWidth, bgHeight, 0x80c00000, new Paint());
-        }
         canvas.translate(-bgX, -bgY);
     }
 
@@ -377,10 +362,6 @@
         final float centerX = keyWidth * 0.5f;
         final float centerY = keyHeight * 0.5f;
 
-        if (LatinImeLogger.sVISUALDEBUG) {
-            drawRectangle(canvas, 0.0f, 0.0f, keyWidth, keyHeight, 0x800000c0, new Paint());
-        }
-
         // Draw key label.
         final Drawable icon = key.getIcon(mKeyboard.mIconsSet, params.mAnimAlpha);
         float positionX = centerX;
@@ -462,12 +443,6 @@
                     drawIcon(canvas, icon, iconX, iconY, iconWidth, iconHeight);
                 }
             }
-
-            if (LatinImeLogger.sVISUALDEBUG) {
-                final Paint line = new Paint();
-                drawHorizontalLine(canvas, baseline, keyWidth, 0xc0008000, line);
-                drawVerticalLine(canvas, positionX, keyHeight, 0xc0800080, line);
-            }
         }
 
         // Draw hint label.
@@ -507,12 +482,6 @@
                 paint.setTextAlign(Align.CENTER);
             }
             canvas.drawText(hintLabel, 0, hintLabel.length(), hintX, hintY + adjustmentY, paint);
-
-            if (LatinImeLogger.sVISUALDEBUG) {
-                final Paint line = new Paint();
-                drawHorizontalLine(canvas, (int)hintY, keyWidth, 0xc0808000, line);
-                drawVerticalLine(canvas, (int)hintX, keyHeight, 0xc0808000, line);
-            }
         }
 
         // Draw key icon.
@@ -524,26 +493,17 @@
                 iconWidth = Math.min(icon.getIntrinsicWidth(), keyWidth);
             }
             final int iconHeight = icon.getIntrinsicHeight();
-            final int iconX, alignX;
             final int iconY = key.isAlignButtom() ? keyHeight - iconHeight
                     : (keyHeight - iconHeight) / 2;
+            final int iconX;
             if (key.isAlignLeft()) {
                 iconX = mKeyLabelHorizontalPadding;
-                alignX = iconX;
             } else if (key.isAlignRight()) {
                 iconX = keyWidth - mKeyLabelHorizontalPadding - iconWidth;
-                alignX = iconX + iconWidth;
             } else { // Align center
                 iconX = (keyWidth - iconWidth) / 2;
-                alignX = iconX + iconWidth / 2;
             }
             drawIcon(canvas, icon, iconX, iconY, iconWidth, iconHeight);
-
-            if (LatinImeLogger.sVISUALDEBUG) {
-                final Paint line = new Paint();
-                drawVerticalLine(canvas, alignX, keyHeight, 0xc0800080, line);
-                drawRectangle(canvas, iconX, iconY, iconWidth, iconHeight, 0x80c00000, line);
-            }
         }
 
         if (key.hasPopupHint() && key.getMoreKeys() != null) {
@@ -565,12 +525,6 @@
                 - TypefaceUtils.getReferenceCharWidth(paint) / 2.0f;
         final float hintY = keyHeight - mKeyPopupHintLetterPadding;
         canvas.drawText(POPUP_HINT_CHAR, hintX, hintY, paint);
-
-        if (LatinImeLogger.sVISUALDEBUG) {
-            final Paint line = new Paint();
-            drawHorizontalLine(canvas, (int)hintY, keyWidth, 0xc0808000, line);
-            drawVerticalLine(canvas, (int)hintX, keyHeight, 0xc0808000, line);
-        }
     }
 
     protected static void drawIcon(final Canvas canvas, final Drawable icon, final int x,
@@ -581,32 +535,6 @@
         canvas.translate(-x, -y);
     }
 
-    private static void drawHorizontalLine(final Canvas canvas, final float y, final float w,
-            final int color, final Paint paint) {
-        paint.setStyle(Paint.Style.STROKE);
-        paint.setStrokeWidth(1.0f);
-        paint.setColor(color);
-        canvas.drawLine(0.0f, y, w, y, paint);
-    }
-
-    private static void drawVerticalLine(final Canvas canvas, final float x, final float h,
-            final int color, final Paint paint) {
-        paint.setStyle(Paint.Style.STROKE);
-        paint.setStrokeWidth(1.0f);
-        paint.setColor(color);
-        canvas.drawLine(x, 0.0f, x, h, paint);
-    }
-
-    private static void drawRectangle(final Canvas canvas, final float x, final float y,
-            final float w, final float h, final int color, final Paint paint) {
-        paint.setStyle(Paint.Style.STROKE);
-        paint.setStrokeWidth(1.0f);
-        paint.setColor(color);
-        canvas.translate(x, y);
-        canvas.drawRect(0.0f, 0.0f, w, h, paint);
-        canvas.translate(-x, -y);
-    }
-
     public Paint newLabelPaint(final Key key) {
         final Paint paint = new Paint();
         paint.setAntiAlias(true);
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 86036cc..95258cc 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -52,17 +52,12 @@
 import com.android.inputmethod.keyboard.internal.SlidingKeyInputDrawingPreview;
 import com.android.inputmethod.keyboard.internal.TimerHandler;
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.define.ProductionFlag;
 import com.android.inputmethod.latin.settings.DebugSettings;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.CoordinateUtils;
 import com.android.inputmethod.latin.utils.SpacebarLanguageUtils;
 import com.android.inputmethod.latin.utils.TypefaceUtils;
-import com.android.inputmethod.latin.utils.UsabilityStudyLogUtils;
-import com.android.inputmethod.research.ResearchLogger;
 
 import java.util.WeakHashMap;
 
@@ -150,8 +145,7 @@
     private final Paint mBackgroundDimAlphaPaint = new Paint();
     private boolean mNeedsToDimEntireKeyboard;
     private final View mMoreKeysKeyboardContainer;
-    private final WeakHashMap<Key, Keyboard> mMoreKeysKeyboardCache =
-            CollectionUtils.newWeakHashMap();
+    private final WeakHashMap<Key, Keyboard> mMoreKeysKeyboardCache = new WeakHashMap<>();
     private final boolean mConfigShowMoreKeysKeyboardAtTouchedPoint;
     // More keys panel (used by both more keys keyboard and more suggestions view)
     // TODO: Consider extending to support multiple more keys panels
@@ -389,10 +383,6 @@
         mSpaceKey = keyboard.getKey(Constants.CODE_SPACE);
         final int keyHeight = keyboard.mMostCommonKeyHeight - keyboard.mVerticalGap;
         mLanguageOnSpacebarTextSize = keyHeight * mLanguageOnSpacebarTextRatio;
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            final int orientation = getContext().getResources().getConfiguration().orientation;
-            ResearchLogger.mainKeyboardView_setKeyboard(keyboard, orientation);
-        }
 
         mAccessibilityDelegate.setKeyboard(keyboard);
     }
@@ -554,24 +544,12 @@
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
         installPreviewPlacerView();
-        // Notify the ResearchLogger (development only diagnostics) that the keyboard view has
-        // been attached.  This is needed to properly show the splash screen, which requires that
-        // the window token of the KeyboardView be non-null.
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.getInstance().mainKeyboardView_onAttachedToWindow(this);
-        }
     }
 
     @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
         mDrawingPreviewPlacerView.removeAllViews();
-        // Notify the ResearchLogger (development only diagnostics) that the keyboard view has
-        // been detached.  This is needed to invalidate the reference of {@link MainKeyboardView}
-        // to null.
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.getInstance().mainKeyboardView_onDetachedFromWindow();
-        }
     }
 
     private MoreKeysPanel onCreateMoreKeysPanel(final Key key, final Context context) {
@@ -607,9 +585,6 @@
         if (key == null) {
             return;
         }
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.mainKeyboardView_onLongPress();
-        }
         final KeyboardActionListener listener = mKeyboardActionListener;
         if (key.hasNoPanelAutoMoreKey()) {
             final int moreKeyCode = key.getMoreKeys()[0].mCode;
@@ -722,14 +697,6 @@
     }
 
     public boolean processMotionEvent(final MotionEvent me) {
-        if (LatinImeLogger.sUsabilityStudy) {
-            UsabilityStudyLogUtils.writeMotionEvent(me);
-        }
-        // Currently the same "move" event is being logged twice.
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.mainKeyboardView_processMotionEvent(me);
-        }
-
         final int index = me.getActionIndex();
         final int id = me.getPointerId(index);
         final PointerTracker tracker = PointerTracker.getPointerTracker(id);
@@ -765,19 +732,14 @@
     }
 
     /**
-     * Receives hover events from the input framework.
-     *
-     * @param event The motion event to be dispatched.
-     * @return {@code true} if the event was handled by the view, {@code false}
-     *         otherwise
+     * {@inheritDoc}
      */
     @Override
-    public boolean dispatchHoverEvent(final MotionEvent event) {
-        if (!AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
-            // Reflection doesn't support calling superclass methods.
-            return false;
+    public boolean onHoverEvent(final MotionEvent event) {
+        if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
+            return mAccessibilityDelegate.onHoverEvent(event);
         }
-        return mAccessibilityDelegate.dispatchHoverEvent(event);
+        return super.onHoverEvent(event);
     }
 
     public void updateShortcutKey(final boolean available) {
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 4777166..f807611 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -35,12 +35,9 @@
 import com.android.inputmethod.latin.InputPointers;
 import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.define.ProductionFlag;
 import com.android.inputmethod.latin.settings.Settings;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.CoordinateUtils;
 import com.android.inputmethod.latin.utils.ResourceUtils;
-import com.android.inputmethod.research.ResearchLogger;
 
 import java.util.ArrayList;
 
@@ -144,7 +141,7 @@
     // TODO: Device specific parameter would be better for device specific hack?
     private static final float PHANTOM_SUDDEN_MOVE_THRESHOLD = 0.25f; // in keyWidth
 
-    private static final ArrayList<PointerTracker> sTrackers = CollectionUtils.newArrayList();
+    private static final ArrayList<PointerTracker> sTrackers = new ArrayList<>();
     private static final PointerTrackerQueue sPointerTrackerQueue = new PointerTrackerQueue();
 
     public final int mPointerId;
@@ -336,10 +333,6 @@
                     output, ignoreModifierKey ? " ignoreModifier" : "",
                     altersCode ? " altersCode" : "", key.isEnabled() ? "" : " disabled"));
         }
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.pointerTracker_callListenerOnCodeInput(key, x, y, ignoreModifierKey,
-                    altersCode, code);
-        }
         if (ignoreModifierKey) {
             return;
         }
@@ -374,10 +367,6 @@
                     withSliding ? " sliding" : "", ignoreModifierKey ? " ignoreModifier" : "",
                     key.isEnabled() ?  "": " disabled"));
         }
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.pointerTracker_callListenerOnRelease(key, primaryCode, withSliding,
-                    ignoreModifierKey);
-        }
         if (ignoreModifierKey) {
             return;
         }
@@ -397,9 +386,6 @@
         if (DEBUG_LISTENER) {
             Log.d(TAG, String.format("[%d] onCancelInput", mPointerId));
         }
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.pointerTracker_callListenerOnCancelInput();
-        }
         sListener.onCancelInput();
     }
 
@@ -703,9 +689,6 @@
                     Log.w(TAG, String.format("[%d] onDownEvent:"
                             + " ignore potential noise: time=%d distance=%d",
                             mPointerId, deltaT, distance));
-                if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                    ResearchLogger.pointerTracker_onDownEvent(deltaT, distance * distance);
-                }
                 cancelTrackingForAction();
                 return;
             }
@@ -877,10 +860,6 @@
                     lastX, lastY, Constants.printableCode(oldKey.getCode()),
                     x, y, Constants.printableCode(key.getCode())));
         }
-        // TODO: This should be moved to outside of this nested if-clause?
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.pointerTracker_onMoveEvent(x, y, lastX, lastY);
-        }
         onUpEventInternal(x, y, eventTime);
         onDownEventInternal(x, y, eventTime);
     }
diff --git a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
index c89bda4..c19cd67 100644
--- a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
+++ b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
@@ -22,7 +22,6 @@
 
 import com.android.inputmethod.keyboard.internal.TouchPositionCorrection;
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.JniUtils;
 
 import java.util.ArrayList;
@@ -55,6 +54,7 @@
     private final List<Key>[] mGridNeighbors;
     private final String mLocaleStr;
 
+    @SuppressWarnings("unchecked")
     ProximityInfo(final String localeStr, final int gridWidth, final int gridHeight,
             final int minWidth, final int height, final int mostCommonKeyWidth,
             final int mostCommonKeyHeight, final List<Key> sortedKeys,
@@ -360,7 +360,7 @@
         for (int i = 0; i < gridSize; ++i) {
             final int indexStart = i * keyCount;
             final int indexEnd = indexStart + neighborCountPerCell[i];
-            final ArrayList<Key> neighbors = CollectionUtils.newArrayList(indexEnd - indexStart);
+            final ArrayList<Key> neighbors = new ArrayList<>(indexEnd - indexStart);
             for (int index = indexStart; index < indexEnd; index++) {
                 neighbors.add(neighborsFlatBuffer[index]);
             }
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/DynamicGridKeyboard.java b/java/src/com/android/inputmethod/keyboard/emoji/DynamicGridKeyboard.java
index c7a9025..daeb1f9 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/DynamicGridKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/DynamicGridKeyboard.java
@@ -23,7 +23,6 @@
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.latin.settings.Settings;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.JsonUtils;
 
 import java.util.ArrayDeque;
@@ -47,8 +46,8 @@
     private final int mColumnsNum;
     private final int mMaxKeyCount;
     private final boolean mIsRecents;
-    private final ArrayDeque<GridKey> mGridKeys = CollectionUtils.newArrayDeque();
-    private final ArrayDeque<Key> mPendingKeys = CollectionUtils.newArrayDeque();
+    private final ArrayDeque<GridKey> mGridKeys = new ArrayDeque<>();
+    private final ArrayDeque<Key> mPendingKeys = new ArrayDeque<>();
 
     private List<Key> mCachedGridKeys;
 
@@ -131,7 +130,7 @@
     }
 
     private void saveRecentKeys() {
-        final ArrayList<Object> keys = CollectionUtils.newArrayList();
+        final ArrayList<Object> keys = new ArrayList<>();
         for (final Key key : mGridKeys) {
             if (key.getOutputText() != null) {
                 keys.add(key.getOutputText());
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java
index 8590991..512d461 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java
@@ -31,7 +31,6 @@
 import com.android.inputmethod.latin.Constants;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.settings.Settings;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -101,12 +100,11 @@
     private final Resources mRes;
     private final int mMaxPageKeyCount;
     private final KeyboardLayoutSet mLayoutSet;
-    private final HashMap<String, Integer> mCategoryNameToIdMap = CollectionUtils.newHashMap();
+    private final HashMap<String, Integer> mCategoryNameToIdMap = new HashMap<>();
     private final int[] mCategoryTabIconId = new int[sCategoryName.length];
-    private final ArrayList<CategoryProperties> mShownCategories =
-            CollectionUtils.newArrayList();
-    private final ConcurrentHashMap<Long, DynamicGridKeyboard>
-            mCategoryKeyboardMap = new ConcurrentHashMap<Long, DynamicGridKeyboard>();
+    private final ArrayList<CategoryProperties> mShownCategories = new ArrayList<>();
+    private final ConcurrentHashMap<Long, DynamicGridKeyboard> mCategoryKeyboardMap =
+            new ConcurrentHashMap<>();
 
     private int mCurrentCategoryId = EmojiCategory.ID_UNSPECIFIED;
     private int mCurrentCategoryPageId = 0;
@@ -257,7 +255,7 @@
             final int temp = sum;
             sum += properties.mPageCount;
             if (sum > position) {
-                return new Pair<Integer, Integer>(properties.mCategoryId, position - temp);
+                return new Pair<>(properties.mCategoryId, position - temp);
             }
         }
         return null;
@@ -343,7 +341,7 @@
     };
 
     private static Key[][] sortKeysIntoPages(final List<Key> inKeys, final int maxPageCount) {
-        final ArrayList<Key> keys = CollectionUtils.newArrayList(inKeys);
+        final ArrayList<Key> keys = new ArrayList<>(inKeys);
         Collections.sort(keys, EMOJI_KEY_COMPARATOR);
         final int pageCount = (keys.size() - 1) / maxPageCount + 1;
         final Key[][] retval = new Key[pageCount][maxPageCount];
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java
index a6b0891..43d62c7 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java
@@ -17,14 +17,11 @@
 package com.android.inputmethod.keyboard.emoji;
 
 import android.content.Context;
-import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.util.AttributeSet;
 import android.view.View;
 
-import com.android.inputmethod.latin.R;
-
 public final class EmojiCategoryPageIndicatorView extends View {
     private static final float BOTTOM_MARGIN_RATIO = 1.0f;
     private final Paint mPaint = new Paint();
@@ -33,19 +30,17 @@
     private float mOffset = 0.0f;
 
     public EmojiCategoryPageIndicatorView(final Context context, final AttributeSet attrs) {
-        this(context, attrs, R.attr.emojiCategoryPageIndicatorViewStyle);
+        this(context, attrs, 0);
     }
 
     public EmojiCategoryPageIndicatorView(final Context context, final AttributeSet attrs,
             final int defStyle) {
         super(context, attrs, defStyle);
-        final TypedArray indicatorViewAttr = context.obtainStyledAttributes(attrs,
-                R.styleable.EmojiCategoryPageIndicatorView, defStyle,
-                R.style.EmojiCategoryPageIndicatorView);
-        final int indicatorColor = indicatorViewAttr.getColor(
-                R.styleable.EmojiCategoryPageIndicatorView_emojiCategoryPageIndicatorColor, 0);
-        indicatorViewAttr.recycle();
-        mPaint.setColor(indicatorColor);
+    }
+
+    public void setColors(final int foregroundColor, final int backgroundColor) {
+        mPaint.setColor(foregroundColor);
+        setBackgroundColor(backgroundColor);
     }
 
     public void setCategoryPageId(final int size, final int id, final float offset) {
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
index 48efa17..0166802 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
@@ -83,13 +83,15 @@
         mKeyDetector.setKeyboard(keyboard, 0 /* correctionX */, 0 /* correctionY */);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
-    public boolean dispatchHoverEvent(final MotionEvent event) {
-        if (!AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
-            // Reflection doesn't support calling superclass methods.
-            return false;
+    public boolean onHoverEvent(final MotionEvent event) {
+        if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
+            return mAccessibilityDelegate.onHoverEvent(event);
         }
-        return mAccessibilityDelegate.dispatchHoverEvent(event);
+        return super.onHoverEvent(event);
     }
 
     /**
@@ -102,7 +104,7 @@
         }
         final Key key = getKey(e);
         if (key != null && key != mCurrentKey) {
-            releaseCurrentKey();
+            releaseCurrentKey(false /* withKeyRegistering */);
         }
         return true;
     }
@@ -119,7 +121,7 @@
         return mKeyDetector.detectHitKey(x, y);
     }
 
-    public void releaseCurrentKey() {
+    public void releaseCurrentKey(final boolean withKeyRegistering) {
         mHandler.removeCallbacks(mPendingKeyDown);
         mPendingKeyDown = null;
         final Key currentKey = mCurrentKey;
@@ -128,13 +130,16 @@
         }
         currentKey.onReleased();
         invalidateKey(currentKey);
+        if (withKeyRegistering) {
+            mListener.onReleaseKey(currentKey);
+        }
         mCurrentKey = null;
     }
 
     @Override
     public boolean onDown(final MotionEvent e) {
         final Key key = getKey(e);
-        releaseCurrentKey();
+        releaseCurrentKey(false /* withKeyRegistering */);
         mCurrentKey = key;
         if (key == null) {
             return false;
@@ -163,7 +168,7 @@
         final Key key = getKey(e);
         final Runnable pendingKeyDown = mPendingKeyDown;
         final Key currentKey = mCurrentKey;
-        releaseCurrentKey();
+        releaseCurrentKey(false /* withKeyRegistering */);
         if (key == null) {
             return false;
         }
@@ -189,14 +194,14 @@
     @Override
     public boolean onScroll(final MotionEvent e1, final MotionEvent e2, final float distanceX,
            final float distanceY) {
-        releaseCurrentKey();
+        releaseCurrentKey(false /* withKeyRegistering */);
         return false;
     }
 
     @Override
     public boolean onFling(final MotionEvent e1, final MotionEvent e2, final float velocityX,
             final float velocityY) {
-        releaseCurrentKey();
+        releaseCurrentKey(false /* withKeyRegistering */);
         return false;
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java
index 52a4dde..68056e0 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java
@@ -27,7 +27,6 @@
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardView;
 import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 final class EmojiPalettesAdapter extends PagerAdapter {
     private static final String TAG = EmojiPalettesAdapter.class.getSimpleName();
@@ -35,8 +34,7 @@
 
     private final EmojiPageKeyboardView.OnKeyEventListener mListener;
     private final DynamicGridKeyboard mRecentsKeyboard;
-    private final SparseArray<EmojiPageKeyboardView> mActiveKeyboardViews =
-            CollectionUtils.newSparseArray();
+    private final SparseArray<EmojiPageKeyboardView> mActiveKeyboardViews = new SparseArray<>();
     private final EmojiCategory mEmojiCategory;
     private int mActivePosition = 0;
 
@@ -70,13 +68,18 @@
     }
 
     public void onPageScrolled() {
+        releaseCurrentKey(false /* withKeyRegistering */);
+    }
+
+    public void releaseCurrentKey(final boolean withKeyRegistering) {
         // Make sure the delayed key-down event (highlight effect and haptic feedback) will be
         // canceled.
         final EmojiPageKeyboardView currentKeyboardView =
                 mActiveKeyboardViews.get(mActivePosition);
-        if (currentKeyboardView != null) {
-            currentKeyboardView.releaseCurrentKey();
+        if (currentKeyboardView == null) {
+            return;
         }
+        currentKeyboardView.releaseCurrentKey(withKeyRegistering);
     }
 
     @Override
@@ -92,7 +95,7 @@
         }
         final EmojiPageKeyboardView oldKeyboardView = mActiveKeyboardViews.get(mActivePosition);
         if (oldKeyboardView != null) {
-            oldKeyboardView.releaseCurrentKey();
+            oldKeyboardView.releaseCurrentKey(false /* withKeyRegistering */);
             oldKeyboardView.deallocateMemory();
         }
         mActivePosition = position;
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java
index 7b4bd3d..0c4f902 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java
@@ -36,6 +36,7 @@
 import android.widget.LinearLayout;
 import android.widget.TabHost;
 import android.widget.TabHost.OnTabChangeListener;
+import android.widget.TabWidget;
 import android.widget.TextView;
 
 import com.android.inputmethod.keyboard.Key;
@@ -68,6 +69,11 @@
         EmojiPageKeyboardView.OnKeyEventListener {
     private final int mFunctionalKeyBackgroundId;
     private final int mSpacebarBackgroundId;
+    private final boolean mCategoryIndicatorEnabled;
+    private final int mCategoryIndicatorDrawableResId;
+    private final int mCategoryIndicatorBackgroundResId;
+    private final int mCategoryPageIndicatorColor;
+    private final int mCategoryPageIndicatorBackground;
     private final DeleteKeyOnTouchListener mDeleteKeyOnTouchListener;
     private EmojiPalettesAdapter mEmojiPalettesAdapter;
     private final EmojiLayoutParams mEmojiLayoutParams;
@@ -114,6 +120,16 @@
                 R.styleable.EmojiPalettesView, defStyle, R.style.EmojiPalettesView);
         mEmojiCategory = new EmojiCategory(PreferenceManager.getDefaultSharedPreferences(context),
                 res, layoutSet, emojiPalettesViewAttr);
+        mCategoryIndicatorEnabled = emojiPalettesViewAttr.getBoolean(
+                R.styleable.EmojiPalettesView_categoryIndicatorEnabled, false);
+        mCategoryIndicatorDrawableResId = emojiPalettesViewAttr.getResourceId(
+                R.styleable.EmojiPalettesView_categoryIndicatorDrawable, 0);
+        mCategoryIndicatorBackgroundResId = emojiPalettesViewAttr.getResourceId(
+                R.styleable.EmojiPalettesView_categoryIndicatorBackground, 0);
+        mCategoryPageIndicatorColor = emojiPalettesViewAttr.getColor(
+                R.styleable.EmojiPalettesView_categoryPageIndicatorColor, 0);
+        mCategoryPageIndicatorBackground = emojiPalettesViewAttr.getColor(
+                R.styleable.EmojiPalettesView_categoryPageIndicatorBackground, 0);
         emojiPalettesViewAttr.recycle();
         mDeleteKeyOnTouchListener = new DeleteKeyOnTouchListener(context);
     }
@@ -152,7 +168,15 @@
             addTab(mTabHost, properties.mCategoryId);
         }
         mTabHost.setOnTabChangedListener(this);
-        mTabHost.getTabWidget().setStripEnabled(true);
+        final TabWidget tabWidget = mTabHost.getTabWidget();
+        tabWidget.setStripEnabled(mCategoryIndicatorEnabled);
+        if (mCategoryIndicatorEnabled) {
+            // On TabWidget's strip, what looks like an indicator is actually a background.
+            // And what looks like a background are actually left and right drawables.
+            tabWidget.setBackgroundResource(mCategoryIndicatorDrawableResId);
+            tabWidget.setLeftStripDrawable(mCategoryIndicatorBackgroundResId);
+            tabWidget.setRightStripDrawable(mCategoryIndicatorBackgroundResId);
+        }
 
         mEmojiPalettesAdapter = new EmojiPalettesAdapter(mEmojiCategory, this);
 
@@ -165,6 +189,8 @@
 
         mEmojiCategoryPageIndicatorView =
                 (EmojiCategoryPageIndicatorView)findViewById(R.id.emoji_category_page_id_view);
+        mEmojiCategoryPageIndicatorView.setColors(
+                mCategoryPageIndicatorColor, mCategoryPageIndicatorBackground);
         mEmojiLayoutParams.setCategoryPageIdViewProperties(mEmojiCategoryPageIndicatorView);
 
         setCurrentCategoryId(mEmojiCategory.getCurrentCategoryId(), true /* force */);
@@ -360,6 +386,7 @@
     }
 
     public void stopEmojiPalettes() {
+        mEmojiPalettesAdapter.releaseCurrentKey(true /* withKeyRegistering */);
         mEmojiPalettesAdapter.flushPendingRecentKeys();
         mEmojiPager.setAdapter(null);
     }
diff --git a/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java b/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
index fdc2458..3b4c434 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
@@ -24,7 +24,6 @@
 import android.util.AttributeSet;
 import android.widget.RelativeLayout;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.CoordinateUtils;
 
 import java.util.ArrayList;
@@ -32,7 +31,7 @@
 public final class DrawingPreviewPlacerView extends RelativeLayout {
     private final int[] mKeyboardViewOrigin = CoordinateUtils.newInstance();
 
-    private final ArrayList<AbstractDrawingPreview> mPreviews = CollectionUtils.newArrayList();
+    private final ArrayList<AbstractDrawingPreview> mPreviews = new ArrayList<>();
 
     public DrawingPreviewPlacerView(final Context context, final AttributeSet attrs) {
         super(context, attrs);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
index d8b00c7..72628e3 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
@@ -29,15 +29,13 @@
 import android.view.View;
 
 import com.android.inputmethod.keyboard.PointerTracker;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;
 
 /**
  * Draw preview graphics of multiple gesture trails during gesture input.
  */
 public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
-    private final SparseArray<GestureTrailDrawingPoints> mGestureTrails =
-            CollectionUtils.newSparseArray();
+    private final SparseArray<GestureTrailDrawingPoints> mGestureTrails = new SparseArray<>();
     private final GestureTrailDrawingParams mDrawingParams;
     private final Paint mGesturePaint;
     private int mOffscreenWidth;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java
index 625d1f0..605519b 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java
@@ -32,7 +32,6 @@
 
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.CoordinateUtils;
 import com.android.inputmethod.latin.utils.ViewLayoutUtils;
 
@@ -48,9 +47,9 @@
  */
 public final class KeyPreviewChoreographer {
     // Free {@link TextView} pool that can be used for key preview.
-    private final ArrayDeque<TextView> mFreeKeyPreviewTextViews = CollectionUtils.newArrayDeque();
+    private final ArrayDeque<TextView> mFreeKeyPreviewTextViews = new ArrayDeque<>();
     // Map from {@link Key} to {@link TextView} that is currently being displayed as key preview.
-    private final HashMap<Key,TextView> mShowingKeyPreviewTextViews = CollectionUtils.newHashMap();
+    private final HashMap<Key,TextView> mShowingKeyPreviewTextViews = new HashMap<>();
 
     private final KeyPreviewDrawParams mParams;
 
@@ -83,7 +82,7 @@
     }
 
     public void dismissAllKeyPreviews() {
-        for (final Key key : new HashSet<Key>(mShowingKeyPreviewTextViews.keySet())) {
+        for (final Key key : new HashSet<>(mShowingKeyPreviewTextViews.keySet())) {
             dismissKeyPreview(key, false /* withAnimation */);
         }
     }
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java
index 700c9b0..0b0e761 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java
@@ -21,7 +21,6 @@
 import android.util.SparseArray;
 
 import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.XmlParseUtils;
 
 import org.xmlpull.v1.XmlPullParser;
@@ -34,7 +33,7 @@
     private static final String TAG = KeyStylesSet.class.getSimpleName();
     private static final boolean DEBUG = false;
 
-    private final HashMap<String, KeyStyle> mStyles = CollectionUtils.newHashMap();
+    private final HashMap<String, KeyStyle> mStyles = new HashMap<>();
 
     private final KeyboardTextsSet mTextsSet;
     private final KeyStyle mEmptyKeyStyle;
@@ -75,7 +74,7 @@
     private static final class DeclaredKeyStyle extends KeyStyle {
         private final HashMap<String, KeyStyle> mStyles;
         private final String mParentStyleName;
-        private final SparseArray<Object> mStyleAttributes = CollectionUtils.newSparseArray();
+        private final SparseArray<Object> mStyleAttributes = new SparseArray<>();
 
         public DeclaredKeyStyle(final String parentStyleName, final KeyboardTextsSet textsSet,
                 final HashMap<String, KeyStyle> styles) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
index 06da571..62b69dc 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
@@ -17,14 +17,13 @@
 package com.android.inputmethod.keyboard.internal;
 
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.HashMap;
 
 public final class KeyboardCodesSet {
     public static final String PREFIX_CODE = "!code/";
 
-    private static final HashMap<String, Integer> sNameToIdMap = CollectionUtils.newHashMap();
+    private static final HashMap<String, Integer> sNameToIdMap = new HashMap<>();
 
     private KeyboardCodesSet() {
         // This utility class is not publicly instantiable.
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
index f79bde0..7146deb 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
@@ -23,7 +23,6 @@
 import android.util.SparseIntArray;
 
 import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.HashMap;
 
@@ -60,7 +59,7 @@
     private static final SparseIntArray ATTR_ID_TO_ICON_ID = new SparseIntArray();
 
     // Icon name to icon id map.
-    private static final HashMap<String, Integer> sNameToIdsMap = CollectionUtils.newHashMap();
+    private static final HashMap<String, Integer> sNameToIdsMap = new HashMap<>();
 
     private static final Object[] NAMES_AND_ATTR_IDS = {
         NAME_UNDEFINED,                   ATTR_UNDEFINED,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
index a61a79b..5df9d3e 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
@@ -21,7 +21,6 @@
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.KeyboardId;
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -61,9 +60,9 @@
     public int GRID_HEIGHT;
 
     // Keys are sorted from top-left to bottom-right order.
-    public final SortedSet<Key> mSortedKeys = new TreeSet<Key>(ROW_COLUMN_COMPARATOR);
-    public final ArrayList<Key> mShiftKeys = CollectionUtils.newArrayList();
-    public final ArrayList<Key> mAltCodeKeysWhileTyping = CollectionUtils.newArrayList();
+    public final SortedSet<Key> mSortedKeys = new TreeSet<>(ROW_COLUMN_COMPARATOR);
+    public final ArrayList<Key> mShiftKeys = new ArrayList<>();
+    public final ArrayList<Key> mAltCodeKeysWhileTyping = new ArrayList<>();
     public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet();
     public final KeyboardTextsSet mTextsSet = new KeyboardTextsSet();
     public final KeyStylesSet mKeyStyles = new KeyStylesSet(mTextsSet);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java
index 0f9497c..6db1d02 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java
@@ -23,7 +23,6 @@
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.ResourceUtils;
 
 import org.xmlpull.v1.XmlPullParser;
@@ -44,7 +43,7 @@
     /** The height of this row. */
     private final int mRowHeight;
 
-    private final ArrayDeque<RowAttributes> mRowAttributesStack = CollectionUtils.newArrayDeque();
+    private final ArrayDeque<RowAttributes> mRowAttributesStack = new ArrayDeque<>();
 
     private static class RowAttributes {
         /** Default width of a key in this row. */
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 0047aa4..cd6abee 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -22,7 +22,6 @@
 
 import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.RunInLocale;
 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
 
@@ -38,7 +37,7 @@
 
     private String[] mTextsTable;
     // Resource name to text map.
-    private HashMap<String, String> mResourceNameToTextsMap = CollectionUtils.newHashMap();
+    private HashMap<String, String> mResourceNameToTextsMap = new HashMap<>();
 
     public void setLocale(final Locale locale, final Context context) {
         mTextsTable = KeyboardTextsTable.getTextsTable(locale);
@@ -141,6 +140,7 @@
         "label_send_key",
         "label_next_key",
         "label_done_key",
+        "label_search_key",
         "label_previous_key",
         // Other labels.
         "label_pause_key",
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index 7e6181a..40c915c 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -16,8 +16,6 @@
 
 package com.android.inputmethod.keyboard.internal;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
 import java.util.HashMap;
 import java.util.Locale;
 
@@ -44,14 +42,12 @@
  */
 public final class KeyboardTextsTable {
     // Name to index map.
-    private static final HashMap<String, Integer> sNameToIndexesMap = CollectionUtils.newHashMap();
+    private static final HashMap<String, Integer> sNameToIndexesMap = new HashMap<>();
     // Locale to texts table map.
-    private static final HashMap<String, String[]> sLocaleToTextsTableMap =
-            CollectionUtils.newHashMap();
+    private static final HashMap<String, String[]> sLocaleToTextsTableMap = new HashMap<>();
     // TODO: Remove this variable after debugging.
     // Texts table to locale maps.
-    private static final HashMap<String[], String> sTextsTableToLocaleMap =
-            CollectionUtils.newHashMap();
+    private static final HashMap<String[], String> sTextsTableToLocaleMap = new HashMap<>();
 
     public static String getText(final String name, final String[] textsTable) {
         final Integer indexObj = sNameToIndexesMap.get(name);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeysCache.java b/java/src/com/android/inputmethod/keyboard/internal/KeysCache.java
index 7c2e3e1..7743d47 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeysCache.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeysCache.java
@@ -17,12 +17,11 @@
 package com.android.inputmethod.keyboard.internal;
 
 import com.android.inputmethod.keyboard.Key;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.HashMap;
 
 public final class KeysCache {
-    private final HashMap<Key, Key> mMap = CollectionUtils.newHashMap();
+    private final HashMap<Key, Key> mMap = new HashMap<>();
 
     public void clear() {
         mMap.clear();
diff --git a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpec.java b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpec.java
index 56ef476..e0d5173 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpec.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpec.java
@@ -149,7 +149,7 @@
                 // Skip empty entry.
                 if (pos - start > 0) {
                     if (list == null) {
-                        list = CollectionUtils.newArrayList();
+                        list = new ArrayList<>();
                     }
                     list.add(text.substring(start, pos));
                 }
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
index 5ac3418..8e89e61e 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
@@ -18,8 +18,6 @@
 
 import android.util.Log;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
 import java.util.ArrayList;
 
 public final class PointerTrackerQueue {
@@ -37,7 +35,7 @@
     // Note: {@link #mExpandableArrayOfActivePointers} and {@link #mArraySize} are synchronized by
     // {@link #mExpandableArrayOfActivePointers}
     private final ArrayList<Element> mExpandableArrayOfActivePointers =
-            CollectionUtils.newArrayList(INITIAL_CAPACITY);
+            new ArrayList<>(INITIAL_CAPACITY);
     private int mArraySize = 0;
 
     public int size() {
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index e7ab02a..096b946 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -30,7 +30,6 @@
 import com.android.inputmethod.latin.makedict.WordProperty;
 import com.android.inputmethod.latin.settings.NativeSuggestOptions;
 import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.FileUtils;
 import com.android.inputmethod.latin.utils.JniUtils;
 import com.android.inputmethod.latin.utils.LanguageModelParam;
@@ -104,8 +103,7 @@
 
     private final NativeSuggestOptions mNativeSuggestOptions = new NativeSuggestOptions();
 
-    private final SparseArray<DicTraverseSession> mDicTraverseSessions =
-            CollectionUtils.newSparseArray();
+    private final SparseArray<DicTraverseSession> mDicTraverseSessions = new SparseArray<>();
 
     // TODO: There should be a way to remove used DicTraverseSession objects from
     // {@code mDicTraverseSessions}.
@@ -185,13 +183,14 @@
     private static native void getHeaderInfoNative(long dict, int[] outHeaderSize,
             int[] outFormatVersion, ArrayList<int[]> outAttributeKeys,
             ArrayList<int[]> outAttributeValues);
-    private static native void flushNative(long dict, String filePath);
+    private static native boolean flushNative(long dict, String filePath);
     private static native boolean needsToRunGCNative(long dict, boolean mindsBlockByGC);
-    private static native void flushWithGCNative(long dict, String filePath);
+    private static native boolean flushWithGCNative(long dict, String filePath);
     private static native void closeNative(long dict);
     private static native int getFormatVersionNative(long dict);
     private static native int getProbabilityNative(long dict, int[] word);
-    private static native int getBigramProbabilityNative(long dict, int[] word0, int[] word1);
+    private static native int getBigramProbabilityNative(long dict, int[] word0,
+            boolean isBeginningOfSentence, int[] word1);
     private static native void getWordPropertyNative(long dict, int[] word,
             int[] outCodePoints, boolean[] outFlags, int[] outProbabilityInfo,
             ArrayList<int[]> outBigramTargets, ArrayList<int[]> outBigramProbabilityInfo,
@@ -200,15 +199,17 @@
     private static native void getSuggestionsNative(long dict, long proximityInfo,
             long traverseSession, int[] xCoordinates, int[] yCoordinates, int[] times,
             int[] pointerIds, int[] inputCodePoints, int inputSize, int[] suggestOptions,
-            int[] prevWordCodePointArray, int[] outputSuggestionCount, int[] outputCodePoints,
-            int[] outputScores, int[] outputIndices, int[] outputTypes,
-            int[] outputAutoCommitFirstWordConfidence, float[] inOutLanguageWeight);
-    private static native void addUnigramWordNative(long dict, int[] word, int probability,
-            int[] shortcutTarget, int shortcutProbability, boolean isNotAWord,
-            boolean isBlacklisted, int timestamp);
-    private static native void addBigramWordsNative(long dict, int[] word0, int[] word1,
-            int probability, int timestamp);
-    private static native void removeBigramWordsNative(long dict, int[] word0, int[] word1);
+            int[] prevWordCodePointArray, boolean isBeginningOfSentence,
+            int[] outputSuggestionCount, int[] outputCodePoints, int[] outputScores,
+            int[] outputIndices, int[] outputTypes, int[] outputAutoCommitFirstWordConfidence,
+            float[] inOutLanguageWeight);
+    private static native boolean addUnigramWordNative(long dict, int[] word, int probability,
+            int[] shortcutTarget, int shortcutProbability, boolean isBeginningOfSentence,
+            boolean isNotAWord, boolean isBlacklisted, int timestamp);
+    private static native boolean addBigramWordsNative(long dict, int[] word0,
+            boolean isBeginningOfSentence, int[] word1, int probability, int timestamp);
+    private static native boolean removeBigramWordsNative(long dict, int[] word0,
+            boolean isBeginningOfSentence, int[] word1);
     private static native int addMultipleDictionaryEntriesNative(long dict,
             LanguageModelParam[] languageModelParams, int startIndex);
     private static native String getPropertyNative(long dict, String query);
@@ -245,11 +246,11 @@
         }
         final int[] outHeaderSize = new int[1];
         final int[] outFormatVersion = new int[1];
-        final ArrayList<int[]> outAttributeKeys = CollectionUtils.newArrayList();
-        final ArrayList<int[]> outAttributeValues = CollectionUtils.newArrayList();
+        final ArrayList<int[]> outAttributeKeys = new ArrayList<>();
+        final ArrayList<int[]> outAttributeValues = new ArrayList<>();
         getHeaderInfoNative(mNativeDict, outHeaderSize, outFormatVersion, outAttributeKeys,
                 outAttributeValues);
-        final HashMap<String, String> attributes = new HashMap<String, String>();
+        final HashMap<String, String> attributes = new HashMap<>();
         for (int i = 0; i < outAttributeKeys.size(); i++) {
             final String attributeKey = StringUtils.getStringFromNullTerminatedCodePointArray(
                     outAttributeKeys.get(i));
@@ -301,14 +302,15 @@
                 getTraverseSession(sessionId).getSession(), inputPointers.getXCoordinates(),
                 inputPointers.getYCoordinates(), inputPointers.getTimes(),
                 inputPointers.getPointerIds(), mInputCodePoints, inputSize,
-                mNativeSuggestOptions.getOptions(), prevWordCodePointArray, mOutputSuggestionCount,
+                mNativeSuggestOptions.getOptions(), prevWordCodePointArray,
+                prevWordsInfo.mIsBeginningOfSentence, mOutputSuggestionCount,
                 mOutputCodePoints, mOutputScores, mSpaceIndices, mOutputTypes,
                 mOutputAutoCommitFirstWordConfidence, mInputOutputLanguageWeight);
         if (inOutLanguageWeight != null) {
             inOutLanguageWeight[0] = mInputOutputLanguageWeight[0];
         }
         final int count = mOutputSuggestionCount[0];
-        final ArrayList<SuggestedWordInfo> suggestions = CollectionUtils.newArrayList();
+        final ArrayList<SuggestedWordInfo> suggestions = new ArrayList<>();
         for (int j = 0; j < count; ++j) {
             final int start = j * MAX_WORD_LENGTH;
             int len = 0;
@@ -316,23 +318,18 @@
                 ++len;
             }
             if (len > 0) {
-                final int flags = mOutputTypes[j] & SuggestedWordInfo.KIND_MASK_FLAGS;
-                if (blockOffensiveWords
-                        && 0 != (flags & SuggestedWordInfo.KIND_FLAG_POSSIBLY_OFFENSIVE)
-                        && 0 == (flags & SuggestedWordInfo.KIND_FLAG_EXACT_MATCH)) {
+                final SuggestedWordInfo suggestedWordInfo =
+                        new SuggestedWordInfo(new String(mOutputCodePoints, start, len),
+                                mOutputScores[j], mOutputTypes[j], this /* sourceDict */,
+                                mSpaceIndices[j] /* indexOfTouchPointOfSecondWord */,
+                                mOutputAutoCommitFirstWordConfidence[0]);
+                if (blockOffensiveWords && suggestedWordInfo.isPossiblyOffensive()
+                        && !suggestedWordInfo.isExactMatch()) {
                     // If we block potentially offensive words, and if the word is possibly
                     // offensive, then we don't output it unless it's also an exact match.
                     continue;
                 }
-                final int kind = mOutputTypes[j] & SuggestedWordInfo.KIND_MASK_KIND;
-                final int score = SuggestedWordInfo.KIND_WHITELIST == kind
-                        ? SuggestedWordInfo.MAX_SCORE : mOutputScores[j];
-                // TODO: check that all users of the `kind' parameter are ready to accept
-                // flags too and pass mOutputTypes[j] instead of kind
-                suggestions.add(new SuggestedWordInfo(new String(mOutputCodePoints, start, len),
-                        score, kind, this /* sourceDict */,
-                        mSpaceIndices[j] /* indexOfTouchPointOfSecondWord */,
-                        mOutputAutoCommitFirstWordConfidence[0]));
+                suggestions.add(suggestedWordInfo);
             }
         }
         return suggestions;
@@ -364,12 +361,13 @@
     }
 
     public int getNgramProbability(final PrevWordsInfo prevWordsInfo, final String word) {
-        if (TextUtils.isEmpty(prevWordsInfo.mPrevWord) || TextUtils.isEmpty(word)) {
+        if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) {
             return NOT_A_PROBABILITY;
         }
         final int[] codePoints0 = StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
         final int[] codePoints1 = StringUtils.toCodePointArray(word);
-        return getBigramProbabilityNative(mNativeDict, codePoints0, codePoints1);
+        return getBigramProbabilityNative(mNativeDict, codePoints0,
+                prevWordsInfo.mIsBeginningOfSentence, codePoints1);
     }
 
     public WordProperty getWordProperty(final String word) {
@@ -381,10 +379,10 @@
         final boolean[] outFlags = new boolean[FORMAT_WORD_PROPERTY_OUTPUT_FLAG_COUNT];
         final int[] outProbabilityInfo =
                 new int[FORMAT_WORD_PROPERTY_OUTPUT_PROBABILITY_INFO_COUNT];
-        final ArrayList<int[]> outBigramTargets = CollectionUtils.newArrayList();
-        final ArrayList<int[]> outBigramProbabilityInfo = CollectionUtils.newArrayList();
-        final ArrayList<int[]> outShortcutTargets = CollectionUtils.newArrayList();
-        final ArrayList<Integer> outShortcutProbabilities = CollectionUtils.newArrayList();
+        final ArrayList<int[]> outBigramTargets = new ArrayList<>();
+        final ArrayList<int[]> outBigramProbabilityInfo = new ArrayList<>();
+        final ArrayList<int[]> outShortcutTargets = new ArrayList<>();
+        final ArrayList<Integer> outShortcutProbabilities = new ArrayList<>();
         getWordPropertyNative(mNativeDict, codePoints, outCodePoints, outFlags, outProbabilityInfo,
                 outBigramTargets, outBigramProbabilityInfo, outShortcutTargets,
                 outShortcutProbabilities);
@@ -419,42 +417,53 @@
     }
 
     // Add a unigram entry to binary dictionary with unigram attributes in native code.
-    public void addUnigramEntry(final String word, final int probability,
-            final String shortcutTarget, final int shortcutProbability, final boolean isNotAWord,
+    public boolean addUnigramEntry(final String word, final int probability,
+            final String shortcutTarget, final int shortcutProbability,
+            final boolean isBeginningOfSentence, final boolean isNotAWord,
             final boolean isBlacklisted, final int timestamp) {
-        if (TextUtils.isEmpty(word)) {
-            return;
+        if (word == null || (word.isEmpty() && !isBeginningOfSentence)) {
+            return false;
         }
         final int[] codePoints = StringUtils.toCodePointArray(word);
         final int[] shortcutTargetCodePoints = (shortcutTarget != null) ?
                 StringUtils.toCodePointArray(shortcutTarget) : null;
-        addUnigramWordNative(mNativeDict, codePoints, probability, shortcutTargetCodePoints,
-                shortcutProbability, isNotAWord, isBlacklisted, timestamp);
+        if (!addUnigramWordNative(mNativeDict, codePoints, probability, shortcutTargetCodePoints,
+                shortcutProbability, isBeginningOfSentence, isNotAWord, isBlacklisted, timestamp)) {
+            return false;
+        }
         mHasUpdated = true;
+        return true;
     }
 
     // Add an n-gram entry to the binary dictionary with timestamp in native code.
-    public void addNgramEntry(final PrevWordsInfo prevWordsInfo, final String word,
-            final int probability,
-            final int timestamp) {
-        if (TextUtils.isEmpty(prevWordsInfo.mPrevWord) || TextUtils.isEmpty(word)) {
-            return;
+    public boolean addNgramEntry(final PrevWordsInfo prevWordsInfo, final String word,
+            final int probability, final int timestamp) {
+        if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) {
+            return false;
         }
         final int[] codePoints0 = StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
         final int[] codePoints1 = StringUtils.toCodePointArray(word);
-        addBigramWordsNative(mNativeDict, codePoints0, codePoints1, probability, timestamp);
+        if (!addBigramWordsNative(mNativeDict, codePoints0, prevWordsInfo.mIsBeginningOfSentence,
+                codePoints1, probability, timestamp)) {
+            return false;
+        }
         mHasUpdated = true;
+        return true;
     }
 
     // Remove an n-gram entry from the binary dictionary in native code.
-    public void removeNgramEntry(final PrevWordsInfo prevWordsInfo, final String word) {
-        if (TextUtils.isEmpty(prevWordsInfo.mPrevWord) || TextUtils.isEmpty(word)) {
-            return;
+    public boolean removeNgramEntry(final PrevWordsInfo prevWordsInfo, final String word) {
+        if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) {
+            return false;
         }
         final int[] codePoints0 = StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
         final int[] codePoints1 = StringUtils.toCodePointArray(word);
-        removeBigramWordsNative(mNativeDict, codePoints0, codePoints1);
+        if (!removeBigramWordsNative(mNativeDict, codePoints0, prevWordsInfo.mIsBeginningOfSentence,
+                codePoints1)) {
+            return false;
+        }
         mHasUpdated = true;
+        return true;
     }
 
     public void addMultipleDictionaryEntries(final LanguageModelParam[] languageModelParams) {
@@ -484,26 +493,33 @@
     }
 
     // Flush to dict file if the dictionary has been updated.
-    public void flush() {
-        if (!isValidDictionary()) return;
+    public boolean flush() {
+        if (!isValidDictionary()) return false;
         if (mHasUpdated) {
-            flushNative(mNativeDict, mDictFilePath);
+            if (!flushNative(mNativeDict, mDictFilePath)) {
+                return false;
+            }
             reopen();
         }
+        return true;
     }
 
     // Run GC and flush to dict file if the dictionary has been updated.
-    public void flushWithGCIfHasUpdated() {
+    public boolean flushWithGCIfHasUpdated() {
         if (mHasUpdated) {
-            flushWithGC();
+            return flushWithGC();
         }
+        return true;
     }
 
     // Run GC and flush to dict file.
-    public void flushWithGC() {
-        if (!isValidDictionary()) return;
-        flushWithGCNative(mNativeDict, mDictFilePath);
+    public boolean flushWithGC() {
+        if (!isValidDictionary()) return false;
+        if (!flushWithGCNative(mNativeDict, mDictFilePath)) {
+            return false;
+        }
         reopen();
+        return true;
     }
 
     /**
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index 72757e0..10b1f1b 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -29,7 +29,6 @@
 
 import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
 import com.android.inputmethod.dictionarypack.MD5Calculator;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
 import com.android.inputmethod.latin.utils.DictionaryInfoUtils.DictionaryInfo;
 import com.android.inputmethod.latin.utils.FileTransforms;
@@ -44,8 +43,8 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Arrays;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
@@ -165,7 +164,7 @@
             if (cursor.getCount() <= 0 || !cursor.moveToFirst()) {
                 return Collections.<WordListInfo>emptyList();
             }
-            final ArrayList<WordListInfo> list = CollectionUtils.newArrayList();
+            final ArrayList<WordListInfo> list = new ArrayList<>();
             do {
                 final String wordListId = cursor.getString(0);
                 final String wordListLocale = cursor.getString(1);
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
index 4c49cb3..867c186 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
@@ -24,7 +24,6 @@
 import com.android.inputmethod.latin.makedict.DictionaryHeader;
 import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
 import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
 import com.android.inputmethod.latin.utils.LocaleUtils;
 
@@ -160,7 +159,7 @@
     public static File[] getCachedWordLists(final String locale, final Context context) {
         final File[] directoryList = DictionaryInfoUtils.getCachedDirectoryList(context);
         if (null == directoryList) return EMPTY_FILE_ARRAY;
-        final HashMap<String, FileAndMatchLevel> cacheFiles = CollectionUtils.newHashMap();
+        final HashMap<String, FileAndMatchLevel> cacheFiles = new HashMap<>();
         for (File directory : directoryList) {
             if (!directory.isDirectory()) continue;
             final String dirLocale =
@@ -273,7 +272,7 @@
         final DictPackSettings dictPackSettings = new DictPackSettings(context);
 
         boolean foundMainDict = false;
-        final ArrayList<AssetFileAddress> fileList = CollectionUtils.newArrayList();
+        final ArrayList<AssetFileAddress> fileList = new ArrayList<>();
         // cachedWordLists may not be null, see doc for getCachedDictionaryList
         for (final File f : cachedWordLists) {
             final String wordListId = DictionaryInfoUtils.getWordListIdFromFileName(f.getName());
diff --git a/java/src/com/android/inputmethod/latin/Constants.java b/java/src/com/android/inputmethod/latin/Constants.java
index 67ca595..05d3476 100644
--- a/java/src/com/android/inputmethod/latin/Constants.java
+++ b/java/src/com/android/inputmethod/latin/Constants.java
@@ -158,6 +158,10 @@
     // A hint on how many characters to cache from the TextView. A good value of this is given by
     // how many characters we need to be able to almost always find the caps mode.
     public static final int EDITOR_CONTENTS_CACHE_SIZE = 1024;
+    // How many characters we accept for the recapitalization functionality. This needs to be
+    // large enough for all reasonable purposes, but avoid purposeful attacks. 100k sounds about
+    // right for this.
+    public static final int MAX_CHARACTERS_FOR_RECAPITALIZATION = 1024 * 100;
 
     // Must be equal to MAX_WORD_LENGTH in native/jni/src/defines.h
     public static final int DICTIONARY_MAX_WORD_LENGTH = 48;
@@ -192,7 +196,6 @@
     public static final int CODE_SPACE = ' ';
     public static final int CODE_PERIOD = '.';
     public static final int CODE_COMMA = ',';
-    public static final int CODE_ARMENIAN_PERIOD = 0x0589;
     public static final int CODE_DASH = '-';
     public static final int CODE_SINGLE_QUOTE = '\'';
     public static final int CODE_DOUBLE_QUOTE = '"';
@@ -208,6 +211,8 @@
     public static final int CODE_CLOSING_SQUARE_BRACKET = ']';
     public static final int CODE_CLOSING_CURLY_BRACKET = '}';
     public static final int CODE_CLOSING_ANGLE_BRACKET = '>';
+    public static final int CODE_INVERTED_QUESTION_MARK = 0xBF; // ¿
+    public static final int CODE_INVERTED_EXCLAMATION_MARK = 0xA1; // ¡
 
     /**
      * Special keys code. Must be negative.
diff --git a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
index 3fb76b1..dd5b376 100644
--- a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
@@ -31,7 +31,6 @@
 
 import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.latin.personalization.AccountUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.ExecutorUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 
@@ -180,7 +179,7 @@
 
     private void addWordsLocked(final Cursor cursor) {
         int count = 0;
-        final ArrayList<String> names = CollectionUtils.newArrayList();
+        final ArrayList<String> names = new ArrayList<>();
         while (!cursor.isAfterLast() && count < MAX_CONTACT_COUNT) {
             String name = cursor.getString(INDEX_NAME);
             if (isValidName(name)) {
@@ -224,7 +223,7 @@
      */
     private void addNameLocked(final String name) {
         int len = StringUtils.codePointCount(name);
-        PrevWordsInfo prevWordsInfo = new PrevWordsInfo(null);
+        PrevWordsInfo prevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
         // TODO: Better tokenization for non-Latin writing systems
         for (int i = 0; i < len; i++) {
             if (Character.isLetter(name.codePointAt(i))) {
@@ -298,7 +297,7 @@
         if (null == cursor) {
             return false;
         }
-        final ArrayList<String> names = CollectionUtils.newArrayList();
+        final ArrayList<String> names = new ArrayList<>();
         try {
             if (cursor.moveToFirst()) {
                 while (!cursor.isAfterLast()) {
diff --git a/java/src/com/android/inputmethod/latin/DictionaryCollection.java b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
index e6e4e09..53be281 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryCollection.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
@@ -20,7 +20,6 @@
 
 import com.android.inputmethod.keyboard.ProximityInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -36,22 +35,22 @@
 
     public DictionaryCollection(final String dictType) {
         super(dictType);
-        mDictionaries = CollectionUtils.newCopyOnWriteArrayList();
+        mDictionaries = new CopyOnWriteArrayList<>();
     }
 
     public DictionaryCollection(final String dictType, final Dictionary... dictionaries) {
         super(dictType);
         if (null == dictionaries) {
-            mDictionaries = CollectionUtils.newCopyOnWriteArrayList();
+            mDictionaries = new CopyOnWriteArrayList<>();
         } else {
-            mDictionaries = CollectionUtils.newCopyOnWriteArrayList(dictionaries);
+            mDictionaries = new CopyOnWriteArrayList<>(dictionaries);
             mDictionaries.removeAll(Collections.singleton(null));
         }
     }
 
     public DictionaryCollection(final String dictType, final Collection<Dictionary> dictionaries) {
         super(dictType);
-        mDictionaries = CollectionUtils.newCopyOnWriteArrayList(dictionaries);
+        mDictionaries = new CopyOnWriteArrayList<>(dictionaries);
         mDictionaries.removeAll(Collections.singleton(null));
     }
 
@@ -67,7 +66,7 @@
         ArrayList<SuggestedWordInfo> suggestions = dictionaries.get(0).getSuggestions(composer,
                 prevWordsInfo, proximityInfo, blockOffensiveWords, additionalFeaturesOptions,
                 sessionId, inOutLanguageWeight);
-        if (null == suggestions) suggestions = CollectionUtils.newArrayList();
+        if (null == suggestions) suggestions = new ArrayList<>();
         final int length = dictionaries.size();
         for (int i = 1; i < length; ++ i) {
             final ArrayList<SuggestedWordInfo> sugg = dictionaries.get(i).getSuggestions(composer,
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
similarity index 92%
rename from java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
rename to java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
index 301b832..7fa3d04 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
@@ -19,14 +19,17 @@
 import android.content.Context;
 import android.text.TextUtils;
 import android.util.Log;
+import android.view.inputmethod.InputMethodSubtype;
 
 import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.keyboard.ProximityInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.personalization.ContextualDictionary;
+import com.android.inputmethod.latin.personalization.PersonalizationDataChunk;
 import com.android.inputmethod.latin.personalization.PersonalizationDictionary;
 import com.android.inputmethod.latin.personalization.UserHistoryDictionary;
-import com.android.inputmethod.latin.utils.CollectionUtils;
+import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
+import com.android.inputmethod.latin.utils.DistracterFilter;
 import com.android.inputmethod.latin.utils.ExecutorUtils;
 import com.android.inputmethod.latin.utils.LanguageModelParam;
 import com.android.inputmethod.latin.utils.SuggestionResults;
@@ -37,16 +40,17 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 // TODO: Consolidate dictionaries in native code.
-public class DictionaryFacilitatorForSuggest {
-    public static final String TAG = DictionaryFacilitatorForSuggest.class.getSimpleName();
+public class DictionaryFacilitator {
+    public static final String TAG = DictionaryFacilitator.class.getSimpleName();
 
     // HACK: This threshold is being used when adding a capitalized entry in the User History
     // dictionary.
@@ -57,6 +61,7 @@
     private volatile CountDownLatch mLatchForWaitingLoadingMainDictionary = new CountDownLatch(0);
     // To synchronize assigning mDictionaries to ensure closing dictionaries.
     private final Object mLock = new Object();
+    private final DistracterFilter mDistracterFilter;
 
     private static final String[] DICT_TYPES_ORDERED_TO_GET_SUGGESTION =
             new String[] {
@@ -69,7 +74,7 @@
             };
 
     private static final Map<String, Class<? extends ExpandableBinaryDictionary>>
-            DICT_TYPE_TO_CLASS = CollectionUtils.newHashMap();
+            DICT_TYPE_TO_CLASS = new HashMap<>();
 
     static {
         DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_USER_HISTORY, UserHistoryDictionary.class);
@@ -94,7 +99,7 @@
         public final Locale mLocale;
         private Dictionary mMainDict;
         public final ConcurrentHashMap<String, ExpandableBinaryDictionary> mSubDictMap =
-                CollectionUtils.newConcurrentHashMap();
+                new ConcurrentHashMap<>();
 
         public Dictionaries() {
             mLocale = null;
@@ -162,7 +167,17 @@
         public void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable);
     }
 
-    public DictionaryFacilitatorForSuggest() {}
+    public DictionaryFacilitator() {
+        mDistracterFilter = DistracterFilter.EMPTY_DISTRACTER_FILTER;
+    }
+
+    public DictionaryFacilitator(final DistracterFilter distracterFilter) {
+        mDistracterFilter = distracterFilter;
+    }
+
+    public void updateEnabledSubtypes(final List<InputMethodSubtype> enabledSubtypes) {
+        mDistracterFilter.updateEnabledSubtypes(enabledSubtypes);
+    }
 
     public Locale getLocale() {
         return mDictionaries.mLocale;
@@ -196,7 +211,7 @@
         // We always try to have the main dictionary. Other dictionaries can be unused.
         final boolean reloadMainDictionary = localeHasBeenChanged || forceReloadMainDictionary;
         // TODO: Make subDictTypesToUse configurable by resource or a static final list.
-        final Set<String> subDictTypesToUse = CollectionUtils.newHashSet();
+        final HashSet<String> subDictTypesToUse = new HashSet<>();
         if (useContactsDict) {
             subDictTypesToUse.add(Dictionary.TYPE_CONTACTS);
         }
@@ -215,7 +230,7 @@
             newMainDict = mDictionaries.getDict(Dictionary.TYPE_MAIN);
         }
 
-        final Map<String, ExpandableBinaryDictionary> subDicts = CollectionUtils.newHashMap();
+        final Map<String, ExpandableBinaryDictionary> subDicts = new HashMap<>();
         for (final String dictType : SUB_DICT_TYPES) {
             if (!subDictTypesToUse.contains(dictType)) {
                 // This dictionary will not be used.
@@ -288,7 +303,7 @@
             final ArrayList<String> dictionaryTypes, final HashMap<String, File> dictionaryFiles,
             final Map<String, Map<String, String>> additionalDictAttributes) {
         Dictionary mainDictionary = null;
-        final Map<String, ExpandableBinaryDictionary> subDicts = CollectionUtils.newHashMap();
+        final Map<String, ExpandableBinaryDictionary> subDicts = new HashMap<>();
 
         for (final String dictType : dictionaryTypes) {
             if (dictType.equals(Dictionary.TYPE_MAIN)) {
@@ -321,6 +336,7 @@
         for (final String dictType : DICT_TYPES_ORDERED_TO_GET_SUGGESTION) {
             dictionaries.closeDict(dictType);
         }
+        mDistracterFilter.close();
     }
 
     // The main dictionary could have been loaded asynchronously.  Don't cache the return value
@@ -392,7 +408,7 @@
         if (userHistoryDictionary == null) {
             return;
         }
-        final int maxFreq = getMaxFrequency(word);
+        final int maxFreq = getFrequency(word);
         if (maxFreq == 0 && blockPotentiallyOffensive) {
             return;
         }
@@ -432,7 +448,7 @@
         // We don't add words with 0-frequency (assuming they would be profanity etc.).
         final boolean isValid = maxFreq > 0;
         UserHistoryDictionary.addToDictionary(userHistoryDictionary, prevWordsInfo, secondWord,
-                isValid, timeStampInSeconds);
+                isValid, timeStampInSeconds, mDistracterFilter);
     }
 
     public void cancelAddingUserHistory(final PrevWordsInfo prevWordsInfo,
@@ -500,7 +516,7 @@
         return false;
     }
 
-    private int getMaxFrequency(final String word) {
+    public int getFrequency(final String word) {
         if (TextUtils.isEmpty(word)) {
             return Dictionary.NOT_A_PROBABILITY;
         }
@@ -537,9 +553,16 @@
         personalizationDict.clear();
     }
 
-    public void addMultipleDictionaryEntriesToPersonalizationDictionary(
-            final ArrayList<LanguageModelParam> languageModelParams,
+    public void addEntriesToPersonalizationDictionary(
+            final PersonalizationDataChunk personalizationDataChunk,
+            final SpacingAndPunctuations spacingAndPunctuations,
             final ExpandableBinaryDictionary.AddMultipleDictionaryEntriesCallback callback) {
+        final ArrayList<LanguageModelParam> languageModelParams =
+                LanguageModelParam.createLanguageModelParamsFrom(
+                        personalizationDataChunk.mTokens,
+                        personalizationDataChunk.mTimestampInSeconds,
+                        this /* dictionaryFacilitator */, spacingAndPunctuations,
+                        mDistracterFilter);
         final ExpandableBinaryDictionary personalizationDict =
                 mDictionaries.getSubDict(Dictionary.TYPE_PERSONALIZATION);
         if (personalizationDict == null || languageModelParams == null
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFactory.java b/java/src/com/android/inputmethod/latin/DictionaryFactory.java
index e09c309..59de4f8 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFactory.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFactory.java
@@ -23,7 +23,6 @@
 import android.util.Log;
 
 import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
 
 import java.io.File;
@@ -55,7 +54,7 @@
                     createReadOnlyBinaryDictionary(context, locale));
         }
 
-        final LinkedList<Dictionary> dictList = CollectionUtils.newLinkedList();
+        final LinkedList<Dictionary> dictList = new LinkedList<>();
         final ArrayList<AssetFileAddress> assetFileList =
                 BinaryDictionaryGetter.getDictionaryFiles(locale, context);
         if (null != assetFileList) {
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index d67253c..b10bae0 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -27,6 +27,7 @@
 import com.android.inputmethod.latin.makedict.WordProperty;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.utils.CombinedFormatUtils;
+import com.android.inputmethod.latin.utils.DistracterFilter;
 import com.android.inputmethod.latin.utils.ExecutorUtils;
 import com.android.inputmethod.latin.utils.FileUtils;
 import com.android.inputmethod.latin.utils.LanguageModelParam;
@@ -53,7 +54,6 @@
     private static final String TAG = ExpandableBinaryDictionary.class.getSimpleName();
 
     /** Whether to print debug output to log */
-    private static boolean DEBUG = false;
     private static final boolean DBG_STRESS_TEST = false;
 
     private static final int TIMEOUT_FOR_READ_OPS_IN_MILLISECONDS = 100;
@@ -114,7 +114,8 @@
     private boolean needsToMigrateDictionary(final int formatVersion) {
         // When we bump up the dictionary format version, the old version should be added to here
         // for supporting migration. Note that native code has to support reading such formats.
-        return formatVersion == FormatSpec.VERSION4_ONLY_FOR_TESTING;
+        return formatVersion == FormatSpec.VERSION4_ONLY_FOR_TESTING
+                || formatVersion == FormatSpec.VERSION401;
     }
 
     public boolean isValidDictionaryLocked() {
@@ -191,7 +192,7 @@
     }
 
     protected Map<String, String> getHeaderAttributeMap() {
-        HashMap<String, String> attributeMap = new HashMap<String, String>();
+        HashMap<String, String> attributeMap = new HashMap<>();
         if (mAdditionalAttributeMap != null) {
             attributeMap.putAll(mAdditionalAttributeMap);
         }
@@ -271,9 +272,10 @@
     /**
      * Adds unigram information of a word to the dictionary. May overwrite an existing entry.
      */
-    public void addUnigramEntry(final String word, final int frequency,
+    public void addUnigramEntryWithCheckingDistracter(final String word, final int frequency,
             final String shortcutTarget, final int shortcutFreq, final boolean isNotAWord,
-            final boolean isBlacklisted, final int timestamp) {
+            final boolean isBlacklisted, final int timestamp,
+            final DistracterFilter distracterFilter) {
         reloadDictionaryIfRequired();
         asyncExecuteTaskWithWriteLock(new Runnable() {
             @Override
@@ -281,6 +283,11 @@
                 if (mBinaryDictionary == null) {
                     return;
                 }
+                if (distracterFilter.isDistracterToWordsInDictionaries(
+                        PrevWordsInfo.EMPTY_PREV_WORDS_INFO, word, mLocale)) {
+                    // The word is a distracter.
+                    return;
+                }
                 runGCIfRequiredLocked(true /* mindsBlockByGC */);
                 addUnigramLocked(word, frequency, shortcutTarget, shortcutFreq,
                         isNotAWord, isBlacklisted, timestamp);
@@ -291,8 +298,10 @@
     protected void addUnigramLocked(final String word, final int frequency,
             final String shortcutTarget, final int shortcutFreq, final boolean isNotAWord,
             final boolean isBlacklisted, final int timestamp) {
-        mBinaryDictionary.addUnigramEntry(word, frequency, shortcutTarget, shortcutFreq,
-                isNotAWord, isBlacklisted, timestamp);
+        if (!mBinaryDictionary.addUnigramEntry(word, frequency, shortcutTarget, shortcutFreq,
+                false /* isBeginningOfSentence */, isNotAWord, isBlacklisted, timestamp)) {
+            Log.e(TAG, "Cannot add unigram entry. word: " + word);
+        }
     }
 
     /**
@@ -315,7 +324,11 @@
 
     protected void addNgramEntryLocked(final PrevWordsInfo prevWordsInfo, final String word,
             final int frequency, final int timestamp) {
-        mBinaryDictionary.addNgramEntry(prevWordsInfo, word, frequency, timestamp);
+        if (!mBinaryDictionary.addNgramEntry(prevWordsInfo, word, frequency, timestamp)) {
+            Log.e(TAG, "Cannot add n-gram entry.");
+            Log.e(TAG, "  PrevWordsInfo: " + prevWordsInfo);
+            Log.e(TAG, "  word: " + word);
+        }
     }
 
     /**
diff --git a/java/src/com/android/inputmethod/latin/InputAttributes.java b/java/src/com/android/inputmethod/latin/InputAttributes.java
index df49483..e778a14 100644
--- a/java/src/com/android/inputmethod/latin/InputAttributes.java
+++ b/java/src/com/android/inputmethod/latin/InputAttributes.java
@@ -20,7 +20,6 @@
 import android.util.Log;
 import android.view.inputmethod.EditorInfo;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.InputTypeUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 
@@ -214,7 +213,7 @@
     }
 
     private static String toFlagsString(final int flags) {
-        final ArrayList<String> flagsArray = CollectionUtils.newArrayList();
+        final ArrayList<String> flagsArray = new ArrayList<>();
         if (0 != (flags & InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS))
             flagsArray.add("TYPE_TEXT_FLAG_NO_SUGGESTIONS");
         if (0 != (flags & InputType.TYPE_TEXT_FLAG_MULTI_LINE))
diff --git a/java/src/com/android/inputmethod/latin/LastComposedWord.java b/java/src/com/android/inputmethod/latin/LastComposedWord.java
index 9caec3e..8cbf837 100644
--- a/java/src/com/android/inputmethod/latin/LastComposedWord.java
+++ b/java/src/com/android/inputmethod/latin/LastComposedWord.java
@@ -69,7 +69,7 @@
             mInputPointers.copy(inputPointers);
         }
         mTypedWord = typedWord;
-        mEvents = new ArrayList<Event>(events);
+        mEvents = new ArrayList<>(events);
         mCommittedWord = committedWord;
         mSeparatorString = separatorString;
         mActive = true;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index ab7e66a..d329d2c 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -28,7 +28,6 @@
 import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.SharedPreferences;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Rect;
@@ -38,7 +37,6 @@
 import android.os.Debug;
 import android.os.IBinder;
 import android.os.Message;
-import android.preference.PreferenceManager;
 import android.text.InputType;
 import android.text.TextUtils;
 import android.util.Log;
@@ -83,18 +81,18 @@
 import com.android.inputmethod.latin.utils.CapsModeUtils;
 import com.android.inputmethod.latin.utils.CoordinateUtils;
 import com.android.inputmethod.latin.utils.DialogUtils;
-import com.android.inputmethod.latin.utils.DistracterFilter;
+import com.android.inputmethod.latin.utils.DistracterFilterUsingSuggestion;
 import com.android.inputmethod.latin.utils.ImportantNoticeUtils;
 import com.android.inputmethod.latin.utils.IntentUtils;
 import com.android.inputmethod.latin.utils.JniUtils;
 import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;
 import com.android.inputmethod.latin.utils.StatsUtils;
 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
-import com.android.inputmethod.research.ResearchLogger;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.TimeUnit;
 
@@ -103,7 +101,7 @@
  */
 public class LatinIME extends InputMethodService implements KeyboardActionListener,
         SuggestionStripView.Listener, SuggestionStripViewAccessor,
-        DictionaryFacilitatorForSuggest.DictionaryInitializationListener,
+        DictionaryFacilitator.DictionaryInitializationListener,
         ImportantNoticeDialog.ImportantNoticeDialogListener {
     private static final String TAG = LatinIME.class.getSimpleName();
     private static final boolean TRACE = false;
@@ -122,12 +120,13 @@
     private static final String SCHEME_PACKAGE = "package";
 
     private final Settings mSettings;
+    private final DictionaryFacilitator mDictionaryFacilitator =
+            new DictionaryFacilitator(new DistracterFilterUsingSuggestion(this /* context */));
     private final InputLogic mInputLogic = new InputLogic(this /* LatinIME */,
-            this /* SuggestionStripViewAccessor */);
+            this /* SuggestionStripViewAccessor */, mDictionaryFacilitator);
     // We expect to have only one decoder in almost all cases, hence the default capacity of 1.
     // If it turns out we need several, it will get grown seamlessly.
-    final SparseArray<HardwareEventDecoder> mHardwareEventDecoders
-            = new SparseArray<HardwareEventDecoder>(1);
+    final SparseArray<HardwareEventDecoder> mHardwareEventDecoders = new SparseArray<>(1);
 
     private View mExtractArea;
     private View mKeyPreviewBackingView;
@@ -256,7 +255,8 @@
             if (latinIme == null) {
                 return;
             }
-            if (!latinIme.mSettings.getCurrent().isSuggestionStripVisible()) {
+            if (!latinIme.mSettings.getCurrent()
+                    .isCurrentOrientationAllowingSuggestionsPerUserSettings()) {
                 return;
             }
             removeMessages(MSG_RESUME_SUGGESTIONS);
@@ -491,12 +491,6 @@
         loadSettings();
         resetSuggest();
 
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.getInstance().init(this, mKeyboardSwitcher);
-            ResearchLogger.getInstance().initDictionary(
-                    mInputLogic.mSuggest.mDictionaryFacilitator);
-        }
-
         // Register to receive ringer mode change and network state change.
         // Also receive installation and removal of a dictionary pack.
         final IntentFilter filter = new IntentFilter();
@@ -538,13 +532,13 @@
         if (!mHandler.hasPendingReopenDictionaries()) {
             resetSuggestForLocale(locale);
         }
+        mDictionaryFacilitator.updateEnabledSubtypes(mRichImm.getMyEnabledInputMethodSubtypeList(
+                true /* allowsImplicitlySelectedSubtypes */));
         refreshPersonalizationDictionarySession();
         StatsUtils.onLoadSettings(currentSettingsValues);
     }
 
     private void refreshPersonalizationDictionarySession() {
-        final DictionaryFacilitatorForSuggest dictionaryFacilitator =
-                mInputLogic.mSuggest.mDictionaryFacilitator;
         final boolean shouldKeepUserHistoryDictionaries;
         final boolean shouldKeepPersonalizationDictionaries;
         if (mSettings.getCurrent().mUsePersonalizedDicts) {
@@ -559,16 +553,14 @@
         if (!shouldKeepUserHistoryDictionaries) {
             // Remove user history dictionaries.
             PersonalizationHelper.removeAllUserHistoryDictionaries(this);
-            dictionaryFacilitator.clearUserHistoryDictionary();
+            mDictionaryFacilitator.clearUserHistoryDictionary();
         }
         if (!shouldKeepPersonalizationDictionaries) {
             // Remove personalization dictionaries.
             PersonalizationHelper.removeAllPersonalizationDictionaries(this);
             PersonalizationDictionarySessionRegistrar.resetAll(this);
         } else {
-            final DistracterFilter distracterFilter = createDistracterFilter();
-            PersonalizationDictionarySessionRegistrar.init(
-                    this, dictionaryFacilitator, distracterFilter);
+            PersonalizationDictionarySessionRegistrar.init(this, mDictionaryFacilitator);
         }
     }
 
@@ -606,10 +598,8 @@
      * @param locale the locale
      */
     private void resetSuggestForLocale(final Locale locale) {
-        final DictionaryFacilitatorForSuggest dictionaryFacilitator =
-                mInputLogic.mSuggest.mDictionaryFacilitator;
         final SettingsValues settingsValues = mSettings.getCurrent();
-        dictionaryFacilitator.resetDictionaries(this /* context */, locale,
+        mDictionaryFacilitator.resetDictionaries(this /* context */, locale,
                 settingsValues.mUseContactsDict, settingsValues.mUsePersonalizedDicts,
                 false /* forceReloadMainDictionary */, this);
         if (settingsValues.mCorrectionEnabled) {
@@ -622,27 +612,20 @@
      * Reset suggest by loading the main dictionary of the current locale.
      */
     /* package private */ void resetSuggestMainDict() {
-        final DictionaryFacilitatorForSuggest dictionaryFacilitator =
-                mInputLogic.mSuggest.mDictionaryFacilitator;
         final SettingsValues settingsValues = mSettings.getCurrent();
-        dictionaryFacilitator.resetDictionaries(this /* context */,
-                dictionaryFacilitator.getLocale(), settingsValues.mUseContactsDict,
+        mDictionaryFacilitator.resetDictionaries(this /* context */,
+                mDictionaryFacilitator.getLocale(), settingsValues.mUseContactsDict,
                 settingsValues.mUsePersonalizedDicts, true /* forceReloadMainDictionary */, this);
     }
 
     @Override
     public void onDestroy() {
-        mInputLogic.mSuggest.mDictionaryFacilitator.closeDictionaries();
+        mDictionaryFacilitator.closeDictionaries();
         mSettings.onDestroy();
         unregisterReceiver(mConnectivityAndRingerModeChangeReceiver);
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.getInstance().onDestroy();
-        }
         unregisterReceiver(mDictionaryPackInstallReceiver);
         unregisterReceiver(mDictionaryDumpBroadcastReceiver);
         PersonalizationDictionarySessionRegistrar.close(this);
-        LatinImeLogger.commit();
-        LatinImeLogger.onDestroy();
         StatsUtils.onDestroy();
         super.onDestroy();
     }
@@ -666,9 +649,8 @@
             mInputLogic.mConnection.finishComposingText();
             mInputLogic.mConnection.endBatchEdit();
         }
-        final DistracterFilter distracterFilter = createDistracterFilter();
         PersonalizationDictionarySessionRegistrar.onConfigurationChanged(this, conf,
-                mInputLogic.mSuggest.mDictionaryFacilitator, distracterFilter);
+                mDictionaryFacilitator);
         super.onConfigurationChanged(conf);
     }
 
@@ -687,9 +669,6 @@
         if (hasSuggestionStripView()) {
             mSuggestionStripView.setListener(this, view);
         }
-        if (LatinImeLogger.sVISUALDEBUG) {
-            mKeyPreviewBackingView.setBackgroundColor(0x10FF0000);
-        }
     }
 
     @Override
@@ -762,10 +741,6 @@
         }
         Log.i(TAG, "Starting input. Cursor position = "
                 + editorInfo.initialSelStart + "," + editorInfo.initialSelEnd);
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-            ResearchLogger.latinIME_onStartInputViewInternal(editorInfo, prefs);
-        }
         if (InputAttributes.inPrivateImeOptions(null, NO_MICROPHONE_COMPAT, editorInfo)) {
             Log.w(TAG, "Deprecated private IME option specified: " + editorInfo.privateImeOptions);
             Log.w(TAG, "Use " + getPackageName() + "." + NO_MICROPHONE + " instead");
@@ -775,7 +750,6 @@
             Log.w(TAG, "Use EditorInfo.IME_FLAG_FORCE_ASCII flag instead");
         }
 
-        LatinImeLogger.onStartInputView(editorInfo);
         // In landscape mode, this method gets called without the input view being created.
         if (mainKeyboardView == null) {
             return;
@@ -841,7 +815,8 @@
             currentSettingsValues = mSettings.getCurrent();
 
             if (currentSettingsValues.mCorrectionEnabled) {
-                suggest.setAutoCorrectionThreshold(currentSettingsValues.mAutoCorrectionThreshold);
+                suggest.setAutoCorrectionThreshold(
+                        currentSettingsValues.mAutoCorrectionThreshold);
             }
 
             switcher.loadKeyboard(editorInfo, currentSettingsValues, getCurrentAutoCapsState(),
@@ -870,7 +845,7 @@
         mHandler.cancelUpdateSuggestionStrip();
 
         mainKeyboardView.setMainDictionaryAvailability(
-                suggest.mDictionaryFacilitator.hasInitializedMainDictionary());
+                mDictionaryFacilitator.hasInitializedMainDictionary());
         mainKeyboardView.setKeyPreviewPopupEnabled(currentSettingsValues.mKeyPreviewPopupOn,
                 currentSettingsValues.mKeyPreviewPopupDismissDelay);
         mainKeyboardView.setSlidingKeyInputPreviewEnabled(
@@ -895,7 +870,6 @@
     private void onFinishInputInternal() {
         super.onFinishInput();
 
-        LatinImeLogger.commit();
         final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView();
         if (mainKeyboardView != null) {
             mainKeyboardView.closing();
@@ -909,10 +883,6 @@
         mHandler.cancelUpdateSuggestionStrip();
         // Should do the following in onFinishInputInternal but until JB MR2 it's not called :(
         mInputLogic.finishInput();
-        // Notify ResearchLogger
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_onFinishInputViewInternal(finishingInput);
-        }
     }
 
     @Override
@@ -926,11 +896,6 @@
                     + ", nss=" + newSelStart + ", nse=" + newSelEnd
                     + ", cs=" + composingSpanStart + ", ce=" + composingSpanEnd);
         }
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_onUpdateSelection(oldSelStart, oldSelEnd,
-                    oldSelStart, oldSelEnd, newSelStart, newSelEnd, composingSpanStart,
-                    composingSpanEnd, mInputLogic.mConnection);
-        }
 
         // If the keyboard is not visible, we don't need to do all the housekeeping work, as it
         // will be reset when the keyboard shows up anyway.
@@ -991,7 +956,6 @@
 
     @Override
     public void hideWindow() {
-        LatinImeLogger.commit();
         mKeyboardSwitcher.onHideWindow();
 
         if (TRACE) Debug.stopMethodTracing();
@@ -1017,9 +981,6 @@
         }
         if (applicationSpecifiedCompletions == null) {
             setNeutralSuggestionStrip();
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.latinIME_onDisplayCompletions(null);
-            }
             return;
         }
 
@@ -1031,9 +992,6 @@
                 false /* isObsoleteSuggestions */, false /* isPrediction */);
         // When in fullscreen mode, show completions generated by the application forcibly
         setSuggestedWords(suggestedWords, true /* isSuggestionStripVisible */);
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_onDisplayCompletions(applicationSpecifiedCompletions);
-        }
     }
 
     private int getAdjustedBackingViewHeight() {
@@ -1167,8 +1125,7 @@
         } else {
             wordToEdit = word;
         }
-        mInputLogic.mSuggest.mDictionaryFacilitator.addWordToUserDictionary(
-                this /* context */, wordToEdit);
+        mDictionaryFacilitator.addWordToUserDictionary(this /* context */, wordToEdit);
     }
 
     // Callback for the {@link SuggestionStripView}, to call when the important notice strip is
@@ -1352,7 +1309,7 @@
                 currentSettings.mInputAttributes)) {
             return true;
         }
-        if (!currentSettings.isSuggestionStripVisible()) {
+        if (!currentSettings.isCurrentOrientationAllowingSuggestionsPerUserSettings()) {
             return false;
         }
         if (currentSettings.isApplicationSpecifiedCompletionsOn()) {
@@ -1397,8 +1354,14 @@
 
         final SettingsValues currentSettings = mSettings.getCurrent();
         final boolean showSuggestions;
-        if (SuggestedWords.EMPTY == suggestedWords || suggestedWords.isPunctuationSuggestions()
-                || !currentSettings.isSuggestionsRequested()) {
+        // May show the important notice when there are no suggestions to show,
+        if (SuggestedWords.EMPTY == suggestedWords
+                // or the suggestion strip is expected to show punctuation suggestions,
+                || suggestedWords.isPunctuationSuggestions()
+                // or it's not requested to show suggestions by the input field,
+                || !currentSettings.isSuggestionsRequested()
+                // or the "show correction suggestions" settings is off by users preference.
+                || !currentSettings.isCurrentOrientationAllowingSuggestionsPerUserSettings()) {
             showSuggestions = !mSuggestionStripView.maybeShowImportantNoticeTitle(
                     currentSettings.mInputAttributes);
         } else {
@@ -1725,15 +1688,14 @@
     @UsedForTesting
     /* package for test */ void waitForLoadingDictionaries(final long timeout, final TimeUnit unit)
             throws InterruptedException {
-        mInputLogic.mSuggest.mDictionaryFacilitator.waitForLoadingDictionariesForTesting(
-                timeout, unit);
+        mDictionaryFacilitator.waitForLoadingDictionariesForTesting(timeout, unit);
     }
 
     // DO NOT USE THIS for any other purpose than testing. This can break the keyboard badly.
     @UsedForTesting
     /* package for test */ void replaceDictionariesForTest(final Locale locale) {
         final SettingsValues settingsValues = mSettings.getCurrent();
-        mInputLogic.mSuggest.mDictionaryFacilitator.resetDictionaries(this, locale,
+        mDictionaryFacilitator.resetDictionaries(this, locale,
             settingsValues.mUseContactsDict, settingsValues.mUsePersonalizedDicts,
             false /* forceReloadMainDictionary */, this /* listener */);
     }
@@ -1741,24 +1703,21 @@
     // DO NOT USE THIS for any other purpose than testing.
     @UsedForTesting
     /* package for test */ void clearPersonalizedDictionariesForTest() {
-        mInputLogic.mSuggest.mDictionaryFacilitator.clearUserHistoryDictionary();
-        mInputLogic.mSuggest.mDictionaryFacilitator.clearPersonalizationDictionary();
+        mDictionaryFacilitator.clearUserHistoryDictionary();
+        mDictionaryFacilitator.clearPersonalizationDictionary();
     }
 
     @UsedForTesting
-    /* package for test */ DistracterFilter createDistracterFilter() {
-        return new DistracterFilter(this /* Context */,
-                mRichImm.getMyEnabledInputMethodSubtypeList(
-                        true /* allowsImplicitlySelectedSubtypes */));
+    /* package for test */ List<InputMethodSubtype> getEnabledSubtypesForTest() {
+        return (mRichImm != null) ? mRichImm.getMyEnabledInputMethodSubtypeList(
+                true /* allowsImplicitlySelectedSubtypes */) : new ArrayList<InputMethodSubtype>();
     }
 
     public void dumpDictionaryForDebug(final String dictName) {
-        final DictionaryFacilitatorForSuggest dictionaryFacilitator =
-                mInputLogic.mSuggest.mDictionaryFacilitator;
-        if (dictionaryFacilitator.getLocale() == null) {
+        if (mDictionaryFacilitator.getLocale() == null) {
             resetSuggest();
         }
-        mInputLogic.mSuggest.mDictionaryFacilitator.dumpDictionaryForDebug(dictName);
+        mDictionaryFacilitator.dumpDictionaryForDebug(dictName);
     }
 
     public void debugDumpStateAndCrashWithException(final String context) {
diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
index 3f2b0a3..8fd36b9 100644
--- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java
+++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
@@ -16,76 +16,12 @@
 
 package com.android.inputmethod.latin;
 
-import android.content.SharedPreferences;
-import android.view.inputmethod.EditorInfo;
+import android.content.Context;
 
-import com.android.inputmethod.keyboard.Keyboard;
+// TODO: Rename this class name to make it more relevant.
+public final class LatinImeLogger {
+    public static final boolean sDBG = false;
 
-public final class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChangeListener {
-
-    public static boolean sDBG = false;
-    public static boolean sVISUALDEBUG = false;
-    public static boolean sUsabilityStudy = false;
-
-    @Override
-    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
-    }
-
-    public static void init(LatinIME context) {
-    }
-
-    public static void commit() {
-    }
-
-    public static boolean getUsabilityStudyMode(final SharedPreferences prefs) {
-        return false;
-    }
-
-    public static void onDestroy() {
-    }
-
-    public static void logOnManualSuggestion(
-            String before, String after, int position, SuggestedWords suggestedWords) {
-    }
-
-    public static void logOnAutoCorrectionForTyping(
-            String before, String after, int separatorCode) {
-    }
-
-    public static void logOnAutoCorrectionForGeometric(String before, String after,
-            int separatorCode, InputPointers inputPointers) {
-    }
-
-    public static void logOnAutoCorrectionCancelled() {
-    }
-
-    public static void logOnDelete(int x, int y) {
-    }
-
-    public static void logOnInputChar() {
-    }
-
-    public static void logOnInputSeparator() {
-    }
-
-    public static void logOnException(String metaData, Throwable e) {
-    }
-
-    public static void logOnWarning(String warning) {
-    }
-
-    public static void onStartInputView(EditorInfo editorInfo) {
-    }
-
-    public static void onStartSuggestion(CharSequence previousWords) {
-    }
-
-    public static void onAddSuggestedWord(String word, String sourceDictionaryId) {
-    }
-
-    public static void onSetKeyboard(Keyboard kb) {
-    }
-
-    public static void onPrintAllUsabilityStudyLogs() {
+    public static void init(Context context) {
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/PrevWordsInfo.java b/java/src/com/android/inputmethod/latin/PrevWordsInfo.java
index ecc8947..42b311c 100644
--- a/java/src/com/android/inputmethod/latin/PrevWordsInfo.java
+++ b/java/src/com/android/inputmethod/latin/PrevWordsInfo.java
@@ -16,23 +16,32 @@
 
 package com.android.inputmethod.latin;
 
-import android.util.Log;
-
+/**
+ * Class to represent information of previous words. This class is used to add n-gram entries
+ * into binary dictionaries, to get predictions, and to get suggestions.
+ */
 // TODO: Support multiple previous words for n-gram.
 public class PrevWordsInfo {
-    // The previous word. May be null after resetting and before starting a new composing word, or
-    // when there is no context like at the start of text for example. It can also be set to null
-    // externally when the user enters a separator that does not let bigrams across, like a period
-    // or a comma.
+    public static final PrevWordsInfo EMPTY_PREV_WORDS_INFO = new PrevWordsInfo(null);
+    public static final PrevWordsInfo BEGINNING_OF_SENTENCE = new PrevWordsInfo();
+
+    // The word immediately before the considered word. null means we don't have any context
+    // including the "beginning of sentence context" - we just don't know what to predict.
+    // An example of that is after a comma.
+    // For simplicity of implementation, this may also be null transiently after the WordComposer
+    // was reset and before starting a new composing word, but we should never be calling
+    // getSuggetions* in this situation.
+    // This is an empty string when mIsBeginningOfSentence is true.
     public final String mPrevWord;
 
     // TODO: Have sentence separator.
-    // Whether the current context is beginning of sentence or not.
+    // Whether the current context is beginning of sentence or not. This is true when composing at
+    // the beginning of an input field or composing a word after a sentence separator.
     public final boolean mIsBeginningOfSentence;
 
     // Beginning of sentence.
     public PrevWordsInfo() {
-        mPrevWord = null;
+        mPrevWord = "";
         mIsBeginningOfSentence = true;
     }
 
@@ -40,4 +49,14 @@
         mPrevWord = prevWord;
         mIsBeginningOfSentence = false;
     }
+
+    public boolean isValid() {
+        return mPrevWord != null;
+    }
+
+    @Override
+    public String toString() {
+        return "PrevWord: " + mPrevWord + ", isBeginningOfSentence: "
+                    + mIsBeginningOfSentence + ".";
+    }
 }
diff --git a/java/src/com/android/inputmethod/latin/PunctuationSuggestions.java b/java/src/com/android/inputmethod/latin/PunctuationSuggestions.java
index 4911bcd..0fba37c 100644
--- a/java/src/com/android/inputmethod/latin/PunctuationSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/PunctuationSuggestions.java
@@ -17,8 +17,6 @@
 package com.android.inputmethod.latin;
 
 import com.android.inputmethod.keyboard.internal.KeySpecParser;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 
 import java.util.ArrayList;
@@ -49,7 +47,7 @@
      */
     public static PunctuationSuggestions newPunctuationSuggestions(
             final String[] punctuationSpecs) {
-        final ArrayList<SuggestedWordInfo> puncuationsList = CollectionUtils.newArrayList();
+        final ArrayList<SuggestedWordInfo> puncuationsList = new ArrayList<>();
         for (final String puncSpec : punctuationSpecs) {
             puncuationsList.add(newHardCodedWordInfo(puncSpec));
         }
diff --git a/java/src/com/android/inputmethod/latin/RichInputConnection.java b/java/src/com/android/inputmethod/latin/RichInputConnection.java
index 2c54e10..46c0151 100644
--- a/java/src/com/android/inputmethod/latin/RichInputConnection.java
+++ b/java/src/com/android/inputmethod/latin/RichInputConnection.java
@@ -26,14 +26,12 @@
 import android.view.inputmethod.ExtractedTextRequest;
 import android.view.inputmethod.InputConnection;
 
-import com.android.inputmethod.latin.define.ProductionFlag;
 import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
 import com.android.inputmethod.latin.utils.CapsModeUtils;
 import com.android.inputmethod.latin.utils.DebugLogUtils;
 import com.android.inputmethod.latin.utils.SpannableStringUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 import com.android.inputmethod.latin.utils.TextRange;
-import com.android.inputmethod.research.ResearchLogger;
 
 import java.util.Arrays;
 import java.util.regex.Pattern;
@@ -174,9 +172,6 @@
         }
         if (null != mIC && shouldFinishComposition) {
             mIC.finishComposingText();
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.richInputConnection_finishComposingText();
-            }
         }
         return true;
     }
@@ -223,9 +218,6 @@
         mComposingText.setLength(0);
         if (null != mIC) {
             mIC.finishComposingText();
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.richInputConnection_finishComposingText();
-            }
         }
     }
 
@@ -363,9 +355,6 @@
         }
         if (null != mIC) {
             mIC.deleteSurroundingText(beforeLength, afterLength);
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.richInputConnection_deleteSurroundingText(beforeLength, afterLength);
-            }
         }
         if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug();
     }
@@ -374,9 +363,6 @@
         mIC = mParent.getCurrentInputConnection();
         if (null != mIC) {
             mIC.performEditorAction(actionId);
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.richInputConnection_performEditorAction(actionId);
-            }
         }
     }
 
@@ -429,9 +415,6 @@
         }
         if (null != mIC) {
             mIC.sendKeyEvent(keyEvent);
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.richInputConnection_sendKeyEvent(keyEvent);
-            }
         }
     }
 
@@ -469,9 +452,6 @@
         // newCursorPosition != 1.
         if (null != mIC) {
             mIC.setComposingText(text, newCursorPosition);
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.richInputConnection_setComposingText(text, newCursorPosition);
-            }
         }
         if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug();
     }
@@ -500,9 +480,6 @@
             if (!isIcValid) {
                 return false;
             }
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.richInputConnection_setSelection(start, end);
-            }
         }
         return reloadTextCache();
     }
@@ -530,9 +507,6 @@
         mComposingText.setLength(0);
         if (null != mIC) {
             mIC.commitCompletion(completionInfo);
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.richInputConnection_commitCompletion(completionInfo);
-            }
         }
         if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug();
     }
@@ -542,7 +516,7 @@
             final SpacingAndPunctuations spacingAndPunctuations, final int n) {
         mIC = mParent.getCurrentInputConnection();
         if (null == mIC) {
-            return new PrevWordsInfo(null);
+            return PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
         }
         final CharSequence prev = getTextBeforeCursor(LOOKBACK_CHARACTER_NUM, 0);
         if (DEBUG_PREVIOUS_TEXT && null != prev) {
@@ -588,30 +562,30 @@
     // (n = 2) "abc. def|" -> beginning-of-sentence
     public static PrevWordsInfo getPrevWordsInfoFromNthPreviousWord(final CharSequence prev,
             final SpacingAndPunctuations spacingAndPunctuations, final int n) {
-        if (prev == null) return new PrevWordsInfo(null);
+        if (prev == null) return PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
         final String[] w = spaceRegex.split(prev);
 
         // If we can't find n words, or we found an empty word, the context is
         // beginning-of-sentence.
         if (w.length < n) {
-            return new PrevWordsInfo();
+            return PrevWordsInfo.BEGINNING_OF_SENTENCE;
         }
         final String nthPrevWord = w[w.length - n];
         final int length = nthPrevWord.length();
         if (length <= 0) {
-            return  new PrevWordsInfo();
+            return PrevWordsInfo.BEGINNING_OF_SENTENCE;
         }
 
         // If ends in a sentence separator, the context is beginning-of-sentence.
         final char lastChar = nthPrevWord.charAt(length - 1);
         if (spacingAndPunctuations.isSentenceSeparator(lastChar)) {
-            new PrevWordsInfo();
+            return PrevWordsInfo.BEGINNING_OF_SENTENCE;
         }
         // If ends in a word separator or connector, the context is unclear.
         // TODO: Return meaningful context for this case.
         if (spacingAndPunctuations.isWordSeparator(lastChar)
                 || spacingAndPunctuations.isWordConnector(lastChar)) {
-            return new PrevWordsInfo(null);
+            return PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
         }
         return new PrevWordsInfo(nthPrevWord);
     }
@@ -765,9 +739,6 @@
         deleteSurroundingText(2, 0);
         final String singleSpace = " ";
         commitText(singleSpace, 1);
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.richInputConnection_revertDoubleSpacePeriod();
-        }
         return true;
     }
 
@@ -790,9 +761,6 @@
         deleteSurroundingText(2, 0);
         final String text = " " + textBeforeCursor.subSequence(0, 1);
         commitText(text, 1);
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.richInputConnection_revertSwapPunctuation();
-        }
         return true;
     }
 
diff --git a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
index 64cc562..cbdc4b9 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
@@ -31,7 +31,6 @@
 import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
 import com.android.inputmethod.latin.settings.Settings;
 import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
 
 import java.util.Collections;
@@ -53,9 +52,9 @@
     private InputMethodManagerCompatWrapper mImmWrapper;
     private InputMethodInfoCache mInputMethodInfoCache;
     final HashMap<InputMethodInfo, List<InputMethodSubtype>>
-            mSubtypeListCacheWithImplicitlySelectedSubtypes = CollectionUtils.newHashMap();
+            mSubtypeListCacheWithImplicitlySelectedSubtypes = new HashMap<>();
     final HashMap<InputMethodInfo, List<InputMethodSubtype>>
-            mSubtypeListCacheWithoutImplicitlySelectedSubtypes = CollectionUtils.newHashMap();
+            mSubtypeListCacheWithoutImplicitlySelectedSubtypes = new HashMap<>();
 
     private static final int INDEX_NOT_FOUND = -1;
 
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index c8a2fb2..a3d0956 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -255,8 +255,7 @@
 
     public boolean isSystemLocaleSameAsLocaleOfAllEnabledSubtypesOfEnabledImes() {
         final Locale systemLocale = mResources.getConfiguration().locale;
-        final Set<InputMethodSubtype> enabledSubtypesOfEnabledImes =
-                new HashSet<InputMethodSubtype>();
+        final Set<InputMethodSubtype> enabledSubtypesOfEnabledImes = new HashSet<>();
         final InputMethodManager inputMethodManager = mRichImm.getInputMethodManager();
         final List<InputMethodInfo> enabledInputMethodInfoList =
                 inputMethodManager.getEnabledInputMethodList();
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 43daee4..9da0f84 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -23,7 +23,6 @@
 import com.android.inputmethod.latin.define.ProductionFlag;
 import com.android.inputmethod.latin.utils.AutoCorrectionUtils;
 import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 import com.android.inputmethod.latin.utils.SuggestionResults;
 
@@ -52,11 +51,14 @@
     private static final int SUPPRESS_SUGGEST_THRESHOLD = -2000000000;
 
     private static final boolean DBG = LatinImeLogger.sDBG;
-    public final DictionaryFacilitatorForSuggest mDictionaryFacilitator =
-            new DictionaryFacilitatorForSuggest();
+    private final DictionaryFacilitator mDictionaryFacilitator;
 
     private float mAutoCorrectionThreshold;
 
+    public Suggest(final DictionaryFacilitator dictionaryFacilitator) {
+        mDictionaryFacilitator = dictionaryFacilitator;
+    }
+
     public Locale getLocale() {
         return mDictionaryFacilitator.getLocale();
     }
@@ -74,7 +76,6 @@
             final boolean blockOffensiveWords, final boolean isCorrectionEnabled,
             final int[] additionalFeaturesOptions, final int sessionId, final int sequenceNumber,
             final OnGetSuggestedWordsCallback callback) {
-        LatinImeLogger.onStartSuggestion(prevWordsInfo.mPrevWord);
         if (wordComposer.isBatchMode()) {
             getSuggestedWordsForBatchInput(wordComposer, prevWordsInfo, proximityInfo,
                     blockOffensiveWords, additionalFeaturesOptions, sessionId, sequenceNumber,
@@ -98,11 +99,10 @@
         final String consideredWord = trailingSingleQuotesCount > 0
                 ? typedWord.substring(0, typedWord.length() - trailingSingleQuotesCount)
                 : typedWord;
-        LatinImeLogger.onAddSuggestedWord(typedWord, Dictionary.TYPE_USER_TYPED);
 
         final ArrayList<SuggestedWordInfo> rawSuggestions;
         if (ProductionFlag.INCLUDE_RAW_SUGGESTIONS) {
-            rawSuggestions = CollectionUtils.newArrayList();
+            rawSuggestions = new ArrayList<>();
         } else {
             rawSuggestions = null;
         }
@@ -124,7 +124,7 @@
                     suggestionResults.first(), suggestionResults.mLocale, isAllUpperCase,
                     isFirstCharCapitalized, trailingSingleQuotesCount);
             firstSuggestion = firstSuggestedWordInfo.mWord;
-            if (SuggestedWordInfo.KIND_WHITELIST != firstSuggestedWordInfo.mKind) {
+            if (!firstSuggestedWordInfo.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) {
                 whitelistedWord = null;
             } else {
                 whitelistedWord = firstSuggestion;
@@ -155,7 +155,7 @@
                 || suggestionResults.isEmpty() || wordComposer.hasDigits()
                 || wordComposer.isMostlyCaps() || wordComposer.isResumed()
                 || !mDictionaryFacilitator.hasInitializedMainDictionary()
-                || SuggestedWordInfo.KIND_SHORTCUT == suggestionResults.first().mKind) {
+                || suggestionResults.first().isKindOf(SuggestedWordInfo.KIND_SHORTCUT)) {
             // If we don't have a main dictionary, we never want to auto-correct. The reason for
             // this is, the user may have a contact whose name happens to match a valid word in
             // their language, and it will unexpectedly auto-correct. For example, if the user
@@ -171,7 +171,7 @@
         }
 
         final ArrayList<SuggestedWordInfo> suggestionsContainer =
-                CollectionUtils.newArrayList(suggestionResults);
+                new ArrayList<>(suggestionResults);
         final int suggestionsCount = suggestionsContainer.size();
         if (isFirstCharCapitalized || isAllUpperCase || 0 != trailingSingleQuotesCount) {
             for (int i = 0; i < suggestionsCount; ++i) {
@@ -183,12 +183,6 @@
             }
         }
 
-        for (int i = 0; i < suggestionsCount; ++i) {
-            final SuggestedWordInfo wordInfo = suggestionsContainer.get(i);
-            LatinImeLogger.onAddSuggestedWord(wordInfo.mWord.toString(),
-                    wordInfo.mSourceDict.mDictType);
-        }
-
         if (!TextUtils.isEmpty(typedWord)) {
             suggestionsContainer.add(0, new SuggestedWordInfo(typedWord,
                     SuggestedWordInfo.MAX_SCORE, SuggestedWordInfo.KIND_TYPED,
@@ -223,19 +217,15 @@
             final OnGetSuggestedWordsCallback callback) {
         final ArrayList<SuggestedWordInfo> rawSuggestions;
         if (ProductionFlag.INCLUDE_RAW_SUGGESTIONS) {
-            rawSuggestions = CollectionUtils.newArrayList();
+            rawSuggestions = new ArrayList<>();
         } else {
             rawSuggestions = null;
         }
         final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
                 wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords,
                 additionalFeaturesOptions, sessionId, rawSuggestions);
-        for (SuggestedWordInfo wordInfo : suggestionResults) {
-            LatinImeLogger.onAddSuggestedWord(wordInfo.mWord, wordInfo.mSourceDict.mDictType);
-        }
-
         final ArrayList<SuggestedWordInfo> suggestionsContainer =
-                CollectionUtils.newArrayList(suggestionResults);
+                new ArrayList<>(suggestionResults);
         final int suggestionsCount = suggestionsContainer.size();
         final boolean isFirstCharCapitalized = wordComposer.wasShiftedNoLock();
         final boolean isAllUpperCase = wordComposer.isAllUpperCase();
@@ -278,8 +268,7 @@
         final SuggestedWordInfo typedWordInfo = suggestions.get(0);
         typedWordInfo.setDebugString("+");
         final int suggestionsSize = suggestions.size();
-        final ArrayList<SuggestedWordInfo> suggestionsList =
-                CollectionUtils.newArrayList(suggestionsSize);
+        final ArrayList<SuggestedWordInfo> suggestionsList = new ArrayList<>(suggestionsSize);
         suggestionsList.add(typedWordInfo);
         // Note: i here is the index in mScores[], but the index in mSuggestions is one more
         // than i because we added the typed word to mSuggestions without touching mScores.
@@ -320,7 +309,7 @@
         for (int i = quotesToAppend - 1; i >= 0; --i) {
             sb.appendCodePoint(Constants.CODE_SINGLE_QUOTE);
         }
-        return new SuggestedWordInfo(sb.toString(), wordInfo.mScore, wordInfo.mKind,
+        return new SuggestedWordInfo(sb.toString(), wordInfo.mScore, wordInfo.mKindAndFlags,
                 wordInfo.mSourceDict, wordInfo.mIndexOfTouchPointOfSecondWord,
                 wordInfo.mAutoCommitFirstWordConfidence);
     }
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index dc2c9fd..72461e1 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -19,7 +19,6 @@
 import android.text.TextUtils;
 import android.view.inputmethod.CompletionInfo;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 
 import java.util.ArrayList;
@@ -34,8 +33,7 @@
     // The maximum number of suggestions available.
     public static final int MAX_SUGGESTIONS = 18;
 
-    private static final ArrayList<SuggestedWordInfo> EMPTY_WORD_INFO_LIST =
-            CollectionUtils.newArrayList(0);
+    private static final ArrayList<SuggestedWordInfo> EMPTY_WORD_INFO_LIST = new ArrayList<>(0);
     public static final SuggestedWords EMPTY = new SuggestedWords(
             EMPTY_WORD_INFO_LIST, null /* rawSuggestions */, false, false, false, false);
 
@@ -165,7 +163,7 @@
 
     public static ArrayList<SuggestedWordInfo> getFromApplicationSpecifiedCompletions(
             final CompletionInfo[] infos) {
-        final ArrayList<SuggestedWordInfo> result = CollectionUtils.newArrayList();
+        final ArrayList<SuggestedWordInfo> result = new ArrayList<>();
         for (final CompletionInfo info : infos) {
             if (null == info || null == info.getText()) {
                 continue;
@@ -179,8 +177,8 @@
     // and replace it with what the user currently typed.
     public static ArrayList<SuggestedWordInfo> getTypedWordAndPreviousSuggestions(
             final String typedWord, final SuggestedWords previousSuggestions) {
-        final ArrayList<SuggestedWordInfo> suggestionsList = CollectionUtils.newArrayList();
-        final HashSet<String> alreadySeen = CollectionUtils.newHashSet();
+        final ArrayList<SuggestedWordInfo> suggestionsList = new ArrayList<>();
+        final HashSet<String> alreadySeen = new HashSet<>();
         suggestionsList.add(new SuggestedWordInfo(typedWord, SuggestedWordInfo.MAX_SCORE,
                 SuggestedWordInfo.KIND_TYPED, Dictionary.DICTIONARY_USER_TYPED,
                 SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
@@ -209,7 +207,8 @@
         public static final int NOT_AN_INDEX = -1;
         public static final int NOT_A_CONFIDENCE = -1;
         public static final int MAX_SCORE = Integer.MAX_VALUE;
-        public static final int KIND_MASK_KIND = 0xFF; // Mask to get only the kind
+
+        private static final int KIND_MASK_KIND = 0xFF; // Mask to get only the kind
         public static final int KIND_TYPED = 0; // What user typed
         public static final int KIND_CORRECTION = 1; // Simple correction/suggestion
         public static final int KIND_COMPLETION = 2; // Completion (suggestion with appended chars)
@@ -224,16 +223,16 @@
         public static final int KIND_RESUMED = 9;
         public static final int KIND_OOV_CORRECTION = 10; // Most probable string correction
 
-        public static final int KIND_MASK_FLAGS = 0xFFFFFF00; // Mask to get the flags
         public static final int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000;
         public static final int KIND_FLAG_EXACT_MATCH = 0x40000000;
+        public static final int KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION = 0x20000000;
 
         public final String mWord;
         // The completion info from the application. Null for suggestions that don't come from
         // the application (including keyboard-computed ones, so this is almost always null)
         public final CompletionInfo mApplicationSpecifiedCompletionInfo;
         public final int mScore;
-        public final int mKind; // one of the KIND_* constants above
+        public final int mKindAndFlags;
         public final int mCodePointCount;
         public final Dictionary mSourceDict;
         // For auto-commit. This keeps track of the index inside the touch coordinates array
@@ -249,18 +248,19 @@
          * Create a new suggested word info.
          * @param word The string to suggest.
          * @param score A measure of how likely this suggestion is.
-         * @param kind The kind of suggestion, as one of the above KIND_* constants.
+         * @param kindAndFlags The kind of suggestion, as one of the above KIND_* constants with
+         * flags.
          * @param sourceDict What instance of Dictionary produced this suggestion.
          * @param indexOfTouchPointOfSecondWord See mIndexOfTouchPointOfSecondWord.
          * @param autoCommitFirstWordConfidence See mAutoCommitFirstWordConfidence.
          */
-        public SuggestedWordInfo(final String word, final int score, final int kind,
+        public SuggestedWordInfo(final String word, final int score, final int kindAndFlags,
                 final Dictionary sourceDict, final int indexOfTouchPointOfSecondWord,
                 final int autoCommitFirstWordConfidence) {
             mWord = word;
             mApplicationSpecifiedCompletionInfo = null;
             mScore = score;
-            mKind = kind;
+            mKindAndFlags = kindAndFlags;
             mSourceDict = sourceDict;
             mCodePointCount = StringUtils.codePointCount(mWord);
             mIndexOfTouchPointOfSecondWord = indexOfTouchPointOfSecondWord;
@@ -276,7 +276,7 @@
             mWord = applicationSpecifiedCompletion.getText().toString();
             mApplicationSpecifiedCompletionInfo = applicationSpecifiedCompletion;
             mScore = SuggestedWordInfo.MAX_SCORE;
-            mKind = SuggestedWordInfo.KIND_APP_DEFINED;
+            mKindAndFlags = SuggestedWordInfo.KIND_APP_DEFINED;
             mSourceDict = Dictionary.DICTIONARY_APPLICATION_DEFINED;
             mCodePointCount = StringUtils.codePointCount(mWord);
             mIndexOfTouchPointOfSecondWord = SuggestedWordInfo.NOT_AN_INDEX;
@@ -284,7 +284,27 @@
         }
 
         public boolean isEligibleForAutoCommit() {
-            return (KIND_CORRECTION == mKind && NOT_AN_INDEX != mIndexOfTouchPointOfSecondWord);
+            return (isKindOf(KIND_CORRECTION) && NOT_AN_INDEX != mIndexOfTouchPointOfSecondWord);
+        }
+
+        public int getKind() {
+            return (mKindAndFlags & KIND_MASK_KIND);
+        }
+
+        public boolean isKindOf(final int kind) {
+            return getKind() == kind;
+        }
+
+        public boolean isPossiblyOffensive() {
+            return (mKindAndFlags & KIND_FLAG_POSSIBLY_OFFENSIVE) != 0;
+        }
+
+        public boolean isExactMatch() {
+            return (mKindAndFlags & KIND_FLAG_EXACT_MATCH) != 0;
+        }
+
+        public boolean isExactMatchWithIntentionalOmission() {
+            return (mKindAndFlags & KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION) != 0;
         }
 
         public void setDebugString(final String str) {
@@ -337,11 +357,11 @@
     // SuggestedWords is an immutable object, as much as possible. We must not just remove
     // words from the member ArrayList as some other parties may expect the object to never change.
     public SuggestedWords getSuggestedWordsExcludingTypedWord() {
-        final ArrayList<SuggestedWordInfo> newSuggestions = CollectionUtils.newArrayList();
+        final ArrayList<SuggestedWordInfo> newSuggestions = new ArrayList<>();
         String typedWord = null;
         for (int i = 0; i < mSuggestedWordInfoList.size(); ++i) {
             final SuggestedWordInfo info = mSuggestedWordInfoList.get(i);
-            if (SuggestedWordInfo.KIND_TYPED != info.mKind) {
+            if (!info.isKindOf(SuggestedWordInfo.KIND_TYPED)) {
                 newSuggestions.add(info);
             } else {
                 assert(null == typedWord);
@@ -361,12 +381,12 @@
     // we should only suggest replacements for this last word.
     // TODO: make this work with languages without spaces.
     public SuggestedWords getSuggestedWordsForLastWordOfPhraseGesture() {
-        final ArrayList<SuggestedWordInfo> newSuggestions = CollectionUtils.newArrayList();
+        final ArrayList<SuggestedWordInfo> newSuggestions = new ArrayList<>();
         for (int i = 0; i < mSuggestedWordInfoList.size(); ++i) {
             final SuggestedWordInfo info = mSuggestedWordInfoList.get(i);
             final int indexOfLastSpace = info.mWord.lastIndexOf(Constants.CODE_SPACE) + 1;
             final String lastWord = info.mWord.substring(indexOfLastSpace);
-            newSuggestions.add(new SuggestedWordInfo(lastWord, info.mScore, info.mKind,
+            newSuggestions.add(new SuggestedWordInfo(lastWord, info.mScore, info.mKindAndFlags,
                     info.mSourceDict, SuggestedWordInfo.NOT_AN_INDEX,
                     SuggestedWordInfo.NOT_A_CONFIDENCE));
         }
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 6ecb373..864942d 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -18,7 +18,6 @@
 
 import com.android.inputmethod.event.CombinerChain;
 import com.android.inputmethod.event.Event;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.CoordinateUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 
@@ -79,13 +78,13 @@
 
     public WordComposer() {
         mCombinerChain = new CombinerChain("");
-        mEvents = CollectionUtils.newArrayList();
+        mEvents = new ArrayList<>();
         mAutoCorrection = null;
         mIsResumed = false;
         mIsBatchMode = false;
         mCursorPositionWithinWord = 0;
         mRejectedBatchModeSuggestion = null;
-        mPrevWordsInfo = new PrevWordsInfo(null);
+        mPrevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
         refreshTypedWordCache();
     }
 
@@ -117,7 +116,7 @@
         mIsBatchMode = false;
         mCursorPositionWithinWord = 0;
         mRejectedBatchModeSuggestion = null;
-        mPrevWordsInfo = new PrevWordsInfo(null);
+        mPrevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
         refreshTypedWordCache();
     }
 
@@ -445,7 +444,7 @@
     // when the user inputs a separator that's not whitespace (including the case of the
     // double-space-to-period feature).
     public void discardPreviousWordForSuggestion() {
-        mPrevWordsInfo = new PrevWordsInfo(null);
+        mPrevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
     }
 
     public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord,
diff --git a/java/src/com/android/inputmethod/latin/debug/ExternalDictionaryGetterForDebug.java b/java/src/com/android/inputmethod/latin/debug/ExternalDictionaryGetterForDebug.java
index 139e73a..7071d86 100644
--- a/java/src/com/android/inputmethod/latin/debug/ExternalDictionaryGetterForDebug.java
+++ b/java/src/com/android/inputmethod/latin/debug/ExternalDictionaryGetterForDebug.java
@@ -27,7 +27,6 @@
 import com.android.inputmethod.latin.BinaryDictionaryGetter;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.makedict.DictionaryHeader;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.DialogUtils;
 import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
 import com.android.inputmethod.latin.utils.LocaleUtils;
@@ -50,7 +49,7 @@
 
     private static String[] findDictionariesInTheDownloadedFolder() {
         final File[] files = new File(SOURCE_FOLDER).listFiles();
-        final ArrayList<String> eligibleList = CollectionUtils.newArrayList();
+        final ArrayList<String> eligibleList = new ArrayList<>();
         for (File f : files) {
             final DictionaryHeader header = DictionaryInfoUtils.getDictionaryFileHeaderOrNull(f);
             if (null == header) continue;
diff --git a/java/src/com/android/inputmethod/latin/define/ProductionFlag.java b/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
index 761f457..9725802 100644
--- a/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
+++ b/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
@@ -21,13 +21,6 @@
         // This class is not publicly instantiable.
     }
 
-    public static final boolean USES_DEVELOPMENT_ONLY_DIAGNOSTICS = false;
-
-    // When false, USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG suggests that all guarded
-    // class-private DEBUG flags should be false, and any privacy controls should be enforced.
-    // USES_DEVELOPMENT_ONLY_DIAGNOSTICS must be false for any production build.
-    public static final boolean USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG = false;
-
     public static final boolean IS_HARDWARE_KEYBOARD_SUPPORTED = false;
 
     // When true, enable {@link InputMethodService#onUpdateCursor} callback with
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 7536ff9..d4833f5 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -32,7 +32,7 @@
 import com.android.inputmethod.keyboard.KeyboardSwitcher;
 import com.android.inputmethod.latin.Constants;
 import com.android.inputmethod.latin.Dictionary;
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
+import com.android.inputmethod.latin.DictionaryFacilitator;
 import com.android.inputmethod.latin.InputPointers;
 import com.android.inputmethod.latin.LastComposedWord;
 import com.android.inputmethod.latin.LatinIME;
@@ -44,18 +44,14 @@
 import com.android.inputmethod.latin.SuggestedWords;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.WordComposer;
-import com.android.inputmethod.latin.define.ProductionFlag;
 import com.android.inputmethod.latin.settings.SettingsValues;
 import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
 import com.android.inputmethod.latin.suggestions.SuggestionStripViewAccessor;
 import com.android.inputmethod.latin.utils.AsyncResultHolder;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.InputTypeUtils;
-import com.android.inputmethod.latin.utils.LatinImeLoggerUtils;
 import com.android.inputmethod.latin.utils.RecapitalizeStatus;
 import com.android.inputmethod.latin.utils.StringUtils;
 import com.android.inputmethod.latin.utils.TextRange;
-import com.android.inputmethod.research.ResearchLogger;
 
 import java.util.ArrayList;
 import java.util.TreeSet;
@@ -79,7 +75,8 @@
     private int mSpaceState;
     // Never null
     public SuggestedWords mSuggestedWords = SuggestedWords.EMPTY;
-    public final Suggest mSuggest = new Suggest();
+    public final Suggest mSuggest;
+    private final DictionaryFacilitator mDictionaryFacilitator;
 
     public LastComposedWord mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD;
     public final WordComposer mWordComposer;
@@ -88,7 +85,7 @@
 
     private int mDeleteCount;
     private long mLastKeyTime;
-    public final TreeSet<Long> mCurrentlyPressedHardwareKeys = CollectionUtils.newTreeSet();
+    public final TreeSet<Long> mCurrentlyPressedHardwareKeys = new TreeSet<>();
 
     // Keeps track of most recently inserted text (multi-character key) for reverting
     private String mEnteredText;
@@ -102,14 +99,19 @@
      * Create a new instance of the input logic.
      * @param latinIME the instance of the parent LatinIME. We should remove this when we can.
      * @param suggestionStripViewAccessor an object to access the suggestion strip view.
+     * @param dictionaryFacilitator facilitator for getting suggestions and updating user history
+     * dictionary.
      */
     public InputLogic(final LatinIME latinIME,
-            final SuggestionStripViewAccessor suggestionStripViewAccessor) {
+            final SuggestionStripViewAccessor suggestionStripViewAccessor,
+            final DictionaryFacilitator dictionaryFacilitator) {
         mLatinIME = latinIME;
         mSuggestionStripViewAccessor = suggestionStripViewAccessor;
         mWordComposer = new WordComposer();
         mConnection = new RichInputConnection(latinIME);
         mInputLogicHandler = InputLogicHandler.NULL_HANDLER;
+        mSuggest = new Suggest(dictionaryFacilitator);
+        mDictionaryFacilitator = dictionaryFacilitator;
     }
 
     /**
@@ -173,7 +175,7 @@
         final InputLogicHandler inputLogicHandler = mInputLogicHandler;
         mInputLogicHandler = InputLogicHandler.NULL_HANDLER;
         inputLogicHandler.destroy();
-        mSuggest.mDictionaryFacilitator.closeDictionaries();
+        mDictionaryFacilitator.closeDictionaries();
     }
 
     /**
@@ -196,19 +198,11 @@
             resetComposingState(true /* alsoResetLastComposedWord */);
         }
         handler.postUpdateSuggestionStrip();
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS
-                && ResearchLogger.RESEARCH_KEY_OUTPUT_TEXT.equals(rawText)) {
-            ResearchLogger.getInstance().onResearchKeySelected(mLatinIME);
-            return;
-        }
         final String text = performSpecificTldProcessingOnTextInput(rawText);
         if (SpaceState.PHANTOM == mSpaceState) {
             promotePhantomSpace(settingsValues);
         }
         mConnection.commitText(text, 1);
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_onTextInput(text, false /* isBatchMode */);
-        }
         mConnection.endBatchEdit();
         // Space state must be updated before calling updateShiftState
         mSpaceState = SpaceState.NONE;
@@ -235,14 +229,8 @@
         // If this is a punctuation picked from the suggestion strip, pass it to onCodeInput
         if (suggestion.length() == 1 && suggestedWords.isPunctuationSuggestions()) {
             // Word separators are suggested before the user inputs something.
-            // So, LatinImeLogger logs "" as a user's input.
-            LatinImeLogger.logOnManualSuggestion("", suggestion, index, suggestedWords);
             // Rely on onCodeInput to do the complicated swapping/stripping logic consistently.
             final Event event = Event.createPunctuationSuggestionPickedEvent(suggestionInfo);
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.latinIME_punctuationSuggestion(index, suggestion,
-                        false /* isBatchMode */, suggestedWords.mIsPrediction);
-            }
             return onCodeInput(settingsValues, event, keyboardShiftState, handler);
         }
 
@@ -265,7 +253,7 @@
         // code path as for other kinds, use commitChosenWord, and do everything normally. We will
         // however need to reset the suggestion strip right away, because we know we can't take
         // the risk of calling commitCompletion twice because we don't know how the app will react.
-        if (SuggestedWordInfo.KIND_APP_DEFINED == suggestionInfo.mKind) {
+        if (suggestionInfo.isKindOf(SuggestedWordInfo.KIND_APP_DEFINED)) {
             mSuggestedWords = SuggestedWords.EMPTY;
             mSuggestionStripViewAccessor.setNeutralSuggestionStrip();
             inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
@@ -278,14 +266,8 @@
         // We need to log before we commit, because the word composer will store away the user
         // typed word.
         final String replacedWord = mWordComposer.getTypedWord();
-        LatinImeLogger.logOnManualSuggestion(replacedWord, suggestion, index, suggestedWords);
         commitChosenWord(settingsValues, suggestion,
                 LastComposedWord.COMMIT_TYPE_MANUAL_PICK, LastComposedWord.NOT_A_SEPARATOR);
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_pickSuggestionManually(replacedWord, index, suggestion,
-                    mWordComposer.isBatchMode(), suggestionInfo.mScore,
-                    suggestionInfo.mKind, suggestionInfo.mSourceDict.mDictType);
-        }
         mConnection.endBatchEdit();
         // Don't allow cancellation of manual pick
         mLastComposedWord.deactivate();
@@ -295,18 +277,12 @@
 
         // We should show the "Touch again to save" hint if the user pressed the first entry
         // AND it's in none of our current dictionaries (main, user or otherwise).
-        final DictionaryFacilitatorForSuggest dictionaryFacilitator =
-                mSuggest.mDictionaryFacilitator;
         final boolean showingAddToDictionaryHint =
-                (SuggestedWordInfo.KIND_TYPED == suggestionInfo.mKind
-                        || SuggestedWordInfo.KIND_OOV_CORRECTION == suggestionInfo.mKind)
-                        && !dictionaryFacilitator.isValidWord(suggestion, true /* ignoreCase */);
+                (suggestionInfo.isKindOf(SuggestedWordInfo.KIND_TYPED)
+                        || suggestionInfo.isKindOf(SuggestedWordInfo.KIND_OOV_CORRECTION))
+                        && !mDictionaryFacilitator.isValidWord(suggestion, true /* ignoreCase */);
 
-        if (settingsValues.mIsInternal) {
-            LatinImeLoggerUtils.onSeparator((char)Constants.CODE_SPACE,
-                    Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
-        }
-        if (showingAddToDictionaryHint && dictionaryFacilitator.isUserDictionaryEnabled()) {
+        if (showingAddToDictionaryHint && mDictionaryFacilitator.isUserDictionaryEnabled()) {
             mSuggestionStripViewAccessor.showAddToDictionaryHint(suggestion);
         } else {
             // If we're not showing the "Touch again to save", then update the suggestion strip.
@@ -400,9 +376,6 @@
         final InputTransaction inputTransaction = new InputTransaction(settingsValues, event,
                 SystemClock.uptimeMillis(), mSpaceState,
                 getActualCapsMode(settingsValues, keyboardShiftMode));
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_onCodeInput(code, event.mX, event.mY);
-        }
         if (event.mKeyCode != Constants.CODE_DELETE
                 || inputTransaction.mTimestamp > mLastKeyTime + Constants.LONG_PRESS_MILLISECONDS) {
             mDeleteCount = 0;
@@ -424,7 +397,6 @@
             switch (event.mKeyCode) {
             case Constants.CODE_DELETE:
                 handleBackspace(inputTransaction);
-                LatinImeLogger.logOnDelete(event.mX, event.mY);
                 break;
             case Constants.CODE_SHIFT:
                 performRecapitalization(inputTransaction.mSettingsValues);
@@ -530,12 +502,6 @@
         ++mAutoCommitSequenceNumber;
         mConnection.beginBatchEdit();
         if (mWordComposer.isComposingWord()) {
-            if (settingsValues.mIsInternal) {
-                if (mWordComposer.isBatchMode()) {
-                    LatinImeLoggerUtils.onAutoCorrection("", mWordComposer.getTypedWord(), " ",
-                            mWordComposer);
-                }
-            }
             if (mWordComposer.isCursorFrontOrMiddleOfComposingWord()) {
                 // If we are in the middle of a recorrection, we need to commit the recorrection
                 // first so that we can insert the batch input at the current cursor position.
@@ -675,19 +641,9 @@
                 || Character.getType(codePoint) == Character.OTHER_SYMBOL) {
             didAutoCorrect = handleSeparator(inputTransaction,
                     inputTransaction.mEvent.isSuggestionStripPress(), handler);
-            if (inputTransaction.mSettingsValues.mIsInternal) {
-                LatinImeLoggerUtils.onSeparator((char)codePoint,
-                        inputTransaction.mEvent.mX, inputTransaction.mEvent.mY);
-            }
         } else {
             didAutoCorrect = false;
             if (SpaceState.PHANTOM == inputTransaction.mSpaceState) {
-                if (inputTransaction.mSettingsValues.mIsInternal) {
-                    if (mWordComposer.isComposingWord() && mWordComposer.isBatchMode()) {
-                        LatinImeLoggerUtils.onAutoCorrection("", mWordComposer.getTypedWord(), " ",
-                                mWordComposer);
-                    }
-                }
                 if (mWordComposer.isCursorFrontOrMiddleOfComposingWord()) {
                     // If we are in the middle of a recorrection, we need to commit the recorrection
                     // first so that we can insert the character at the current cursor position.
@@ -786,10 +742,6 @@
             mSuggestionStripViewAccessor.dismissAddToDictionaryHint();
         }
         inputTransaction.setRequiresUpdateSuggestions();
-        if (settingsValues.mIsInternal) {
-            LatinImeLoggerUtils.onNonSeparator((char)codePoint, inputTransaction.mEvent.mX,
-                    inputTransaction.mEvent.mY);
-        }
     }
 
     /**
@@ -852,9 +804,6 @@
         if (needsPrecedingSpace) {
             promotePhantomSpace(settingsValues);
         }
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_handleSeparator(codePoint, wasComposingWord);
-        }
 
         if (!shouldAvoidSendingCode) {
             sendKeyCodePoint(settingsValues, codePoint);
@@ -863,6 +812,7 @@
         if (Constants.CODE_SPACE == codePoint) {
             if (maybeDoubleSpacePeriod(inputTransaction)) {
                 inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
+                inputTransaction.setRequiresUpdateSuggestions();
                 mSpaceState = SpaceState.DOUBLE;
             } else if (!mSuggestedWords.isPunctuationSuggestions()) {
                 mSpaceState = SpaceState.WEAK;
@@ -932,10 +882,6 @@
         }
         if (mWordComposer.isComposingWord()) {
             if (mWordComposer.isBatchMode()) {
-                if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                    final String word = mWordComposer.getTypedWord();
-                    ResearchLogger.latinIME_handleBackspace_batch(word, 1);
-                }
                 final String rejectedSuggestion = mWordComposer.getTypedWord();
                 mWordComposer.reset();
                 mWordComposer.setRejectedBatchModeSuggestion(rejectedSuggestion);
@@ -950,9 +896,6 @@
             inputTransaction.setRequiresUpdateSuggestions();
         } else {
             if (mLastComposedWord.canRevertCommit()) {
-                if (inputTransaction.mSettingsValues.mIsInternal) {
-                    LatinImeLoggerUtils.onAutoCorrectionCancellation();
-                }
                 revertCommit(inputTransaction);
                 return;
             }
@@ -961,9 +904,6 @@
                 // This is triggered on backspace after a key that inputs multiple characters,
                 // like the smiley key or the .com key.
                 mConnection.deleteSurroundingText(mEnteredText.length(), 0);
-                if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                    ResearchLogger.latinIME_handleBackspace_cancelTextInput(mEnteredText);
-                }
                 mEnteredText = null;
                 // If we have mEnteredText, then we know that mHasUncommittedTypedChars == false.
                 // In addition we know that spaceState is false, and that we should not be
@@ -975,6 +915,11 @@
                 if (mConnection.revertDoubleSpacePeriod()) {
                     // No need to reset mSpaceState, it has already be done (that's why we
                     // receive it as a parameter)
+                    inputTransaction.setRequiresUpdateSuggestions();
+                    mWordComposer.setCapitalizedModeAndPreviousWordAtStartComposingTime(
+                            WordComposer.CAPS_MODE_OFF,
+                            getPrevWordsInfoFromNthPreviousWordForSuggestion(
+                                    inputTransaction.mSettingsValues.mSpacingAndPunctuations, 1));
                     return;
                 }
             } else if (SpaceState.SWAP_PUNCTUATION == inputTransaction.mSpaceState) {
@@ -993,10 +938,6 @@
                 mConnection.setSelection(mConnection.getExpectedSelectionEnd(),
                         mConnection.getExpectedSelectionEnd());
                 mConnection.deleteSurroundingText(numCharsDeleted, 0);
-                if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                    ResearchLogger.latinIME_handleBackspace(numCharsDeleted,
-                            false /* shouldUncommitLogUnit */);
-                }
             } else {
                 // There is no selection, just delete one character.
                 if (Constants.NOT_A_CURSOR_POSITION == mConnection.getExpectedSelectionEnd()) {
@@ -1031,10 +972,6 @@
                     final int lengthToDelete =
                             Character.isSupplementaryCodePoint(codePointBeforeCursor) ? 2 : 1;
                     mConnection.deleteSurroundingText(lengthToDelete, 0);
-                    if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                        ResearchLogger.latinIME_handleBackspace(lengthToDelete,
-                                true /* shouldUncommitLogUnit */);
-                    }
                     if (mDeleteCount > Constants.DELETE_ACCELERATE_AT) {
                         final int codePointBeforeCursorToDeleteAgain =
                                 mConnection.getCodePointBeforeCursor();
@@ -1042,15 +979,12 @@
                             final int lengthToDeleteAgain = Character.isSupplementaryCodePoint(
                                     codePointBeforeCursorToDeleteAgain) ? 2 : 1;
                             mConnection.deleteSurroundingText(lengthToDeleteAgain, 0);
-                            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                                ResearchLogger.latinIME_handleBackspace(lengthToDeleteAgain,
-                                        true /* shouldUncommitLogUnit */);
-                            }
                         }
                     }
                 }
             }
-            if (inputTransaction.mSettingsValues.isSuggestionStripVisible()
+            if (inputTransaction.mSettingsValues
+                    .isCurrentOrientationAllowingSuggestionsPerUserSettings()
                     && inputTransaction.mSettingsValues.mSpacingAndPunctuations
                             .mCurrentLanguageHasSpaces
                     && !mConnection.isCursorFollowedByWordCharacter(
@@ -1082,9 +1016,6 @@
             mConnection.deleteSurroundingText(2, 0);
             final String text = lastTwo.charAt(1) + " ";
             mConnection.commitText(text, 1);
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.latinIME_swapSwapperAndSpace(lastTwo, text);
-            }
             inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
         }
     }
@@ -1168,10 +1099,6 @@
             final String textToInsert = inputTransaction.mSettingsValues.mSpacingAndPunctuations
                     .mSentenceSeparatorAndSpace;
             mConnection.commitText(textToInsert, 1);
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.latinIME_maybeDoubleSpacePeriod(textToInsert,
-                        false /* isBatchMode */);
-            }
             mWordComposer.discardPreviousWordForSuggestion();
             return true;
         }
@@ -1212,15 +1139,21 @@
         if (!mConnection.hasSelection()) {
             return; // No selection
         }
+        final int selectionStart = mConnection.getExpectedSelectionStart();
+        final int selectionEnd = mConnection.getExpectedSelectionEnd();
+        final int numCharsSelected = selectionEnd - selectionStart;
+        if (numCharsSelected > Constants.MAX_CHARACTERS_FOR_RECAPITALIZATION) {
+            // We bail out if we have too many characters for performance reasons. We don't want
+            // to suck possibly multiple-megabyte data.
+            return;
+        }
         // If we have a recapitalize in progress, use it; otherwise, create a new one.
         if (!mRecapitalizeStatus.isActive()
-                || !mRecapitalizeStatus.isSetAt(mConnection.getExpectedSelectionStart(),
-                        mConnection.getExpectedSelectionEnd())) {
+                || !mRecapitalizeStatus.isSetAt(selectionStart, selectionEnd)) {
             final CharSequence selectedText =
                     mConnection.getSelectedText(0 /* flags, 0 for no styles */);
             if (TextUtils.isEmpty(selectedText)) return; // Race condition with the input connection
-            mRecapitalizeStatus.initialize(mConnection.getExpectedSelectionStart(),
-                    mConnection.getExpectedSelectionEnd(), selectedText.toString(),
+            mRecapitalizeStatus.initialize(selectionStart, selectionEnd, selectedText.toString(),
                     settingsValues.mLocale,
                     settingsValues.mSpacingAndPunctuations.mSortedWordSeparators);
             // We trim leading and trailing whitespace.
@@ -1228,11 +1161,8 @@
         }
         mConnection.finishComposingText();
         mRecapitalizeStatus.rotate();
-        final int numCharsDeleted = mConnection.getExpectedSelectionEnd()
-                - mConnection.getExpectedSelectionStart();
-        mConnection.setSelection(mConnection.getExpectedSelectionEnd(),
-                mConnection.getExpectedSelectionEnd());
-        mConnection.deleteSurroundingText(numCharsDeleted, 0);
+        mConnection.setSelection(selectionEnd, selectionEnd);
+        mConnection.deleteSurroundingText(numCharsSelected, 0);
         mConnection.commitText(mRecapitalizeStatus.getRecapitalizedString(), 0);
         mConnection.setSelection(mRecapitalizeStatus.getNewCursorStart(),
                 mRecapitalizeStatus.getNewCursorEnd());
@@ -1250,7 +1180,7 @@
                 mWordComposer.wasAutoCapitalized() && !mWordComposer.isMostlyCaps();
         final int timeStampInSeconds = (int)TimeUnit.MILLISECONDS.toSeconds(
                 System.currentTimeMillis());
-        mSuggest.mDictionaryFacilitator.addToUserHistory(suggestion, wasAutoCapitalized,
+        mDictionaryFacilitator.addToUserHistory(suggestion, wasAutoCapitalized,
                 prevWordsInfo, timeStampInSeconds, settingsValues.mBlockPotentiallyOffensive);
     }
 
@@ -1269,7 +1199,7 @@
             return;
         }
 
-        final AsyncResultHolder<SuggestedWords> holder = new AsyncResultHolder<SuggestedWords>();
+        final AsyncResultHolder<SuggestedWords> holder = new AsyncResultHolder<>();
         mInputLogicHandler.getSuggestedWords(Suggest.SESSION_TYPING,
                 SuggestedWords.NOT_A_SEQUENCE_NUMBER, new OnGetSuggestedWordsCallback() {
                     @Override
@@ -1349,7 +1279,7 @@
         // we just do not resume because it's safer.
         final int numberOfCharsInWordBeforeCursor = range.getNumberOfCharsInWordBeforeCursor();
         if (numberOfCharsInWordBeforeCursor > expectedCursorPosition) return;
-        final ArrayList<SuggestedWordInfo> suggestions = CollectionUtils.newArrayList();
+        final ArrayList<SuggestedWordInfo> suggestions = new ArrayList<>();
         final String typedWord = range.mWord.toString();
         if (includeResumedWordInSuggestions) {
             suggestions.add(new SuggestedWordInfo(typedWord,
@@ -1462,8 +1392,7 @@
         }
         mConnection.deleteSurroundingText(deleteLength, 0);
         if (!TextUtils.isEmpty(prevWordsInfo.mPrevWord) && !TextUtils.isEmpty(committedWord)) {
-            mSuggest.mDictionaryFacilitator.cancelAddingUserHistory(
-                    prevWordsInfo, committedWordString);
+            mDictionaryFacilitator.cancelAddingUserHistory(prevWordsInfo, committedWordString);
         }
         final String stringToCommit = originallyTypedWord + mLastComposedWord.mSeparatorString;
         final SpannableString textToCommit = new SpannableString(stringToCommit);
@@ -1473,7 +1402,7 @@
                     committedWord.length(), Object.class);
             final int lastCharIndex = textToCommit.length() - 1;
             // We will collect all suggestions in the following array.
-            final ArrayList<String> suggestions = CollectionUtils.newArrayList();
+            final ArrayList<String> suggestions = new ArrayList<>();
             // First, add the committed word to the list of suggestions.
             suggestions.add(committedWordString);
             for (final Object span : spans) {
@@ -1515,17 +1444,7 @@
                     mLatinIME.getCoordinatesForCurrentKeyboard(codePoints), prevWordsInfo);
             mConnection.setComposingText(textToCommit, 1);
         }
-        if (inputTransaction.mSettingsValues.mIsInternal) {
-            LatinImeLoggerUtils.onSeparator(mLastComposedWord.mSeparatorString,
-                    Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
-        }
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_revertCommit(committedWord.toString(),
-                    originallyTypedWord.toString(),
-                    mWordComposer.isBatchMode(), mLastComposedWord.mSeparatorString);
-        }
-        // Don't restart suggestion yet. We'll restart if the user deletes the
-        // separator.
+        // Don't restart suggestion yet. We'll restart if the user deletes the separator.
         mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD;
         // We have a separator between the word and the cursor: we should show predictions.
         inputTransaction.setRequiresUpdateSuggestions();
@@ -1609,8 +1528,9 @@
             return mConnection.getPrevWordsInfoFromNthPreviousWord(
                     spacingAndPunctuations, nthPreviousWord);
         } else {
-            return LastComposedWord.NOT_A_COMPOSED_WORD == mLastComposedWord ? new PrevWordsInfo()
-                    : new PrevWordsInfo(mLastComposedWord.mCommittedWord.toString());
+            return LastComposedWord.NOT_A_COMPOSED_WORD == mLastComposedWord ?
+                    PrevWordsInfo.BEGINNING_OF_SENTENCE :
+                            new PrevWordsInfo(mLastComposedWord.mCommittedWord.toString());
         }
     }
 
@@ -1788,9 +1708,6 @@
      */
     // TODO: replace these two parameters with an InputTransaction
     private void sendKeyCodePoint(final SettingsValues settingsValues, final int codePoint) {
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_sendKeyCodePoint(codePoint);
-        }
         // TODO: Remove this special handling of digit letters.
         // For backward compatibility. See {@link InputMethodService#sendKeyChar(char)}.
         if (codePoint >= '0' && codePoint <= '9') {
@@ -1822,9 +1739,6 @@
         if (settingsValues.shouldInsertSpacesAutomatically()
                 && settingsValues.mSpacingAndPunctuations.mCurrentLanguageHasSpaces
                 && !mConnection.textBeforeCursorLooksLikeURL()) {
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.latinIME_promotePhantomSpace();
-            }
             sendKeyCodePoint(settingsValues, Constants.CODE_SPACE);
         }
     }
@@ -1866,9 +1780,6 @@
             mConnection.setComposingText(batchInputText, 1);
         }
         mConnection.endBatchEdit();
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.latinIME_onEndBatchInput(batchInputText, 0, suggestedWords);
-        }
         // Space state must be updated before calling updateShiftState
         mSpaceState = SpaceState.PHANTOM;
         keyboardSwitcher.requestUpdatingShiftState(getCurrentAutoCapsState(settingsValues),
@@ -1895,9 +1806,6 @@
         if (!mWordComposer.isComposingWord()) return;
         final String typedWord = mWordComposer.getTypedWord();
         if (typedWord.length() > 0) {
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                ResearchLogger.getInstance().onWordFinished(typedWord, mWordComposer.isBatchMode());
-            }
             commitChosenWord(settingsValues, typedWord,
                     LastComposedWord.COMMIT_TYPE_USER_TYPED_WORD, separatorString);
         }
@@ -1937,15 +1845,6 @@
                 throw new RuntimeException("We have an auto-correction but the typed word "
                         + "is empty? Impossible! I must commit suicide.");
             }
-            if (settingsValues.mIsInternal) {
-                LatinImeLoggerUtils.onAutoCorrection(
-                        typedWord, autoCorrection, separator, mWordComposer);
-            }
-            if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-                final SuggestedWords suggestedWords = mSuggestedWords;
-                ResearchLogger.latinIme_commitCurrentAutoCorrection(typedWord, autoCorrection,
-                        separator, mWordComposer.isBatchMode(), suggestedWords);
-            }
             commitChosenWord(settingsValues, autoCorrection,
                     LastComposedWord.COMMIT_TYPE_DECIDED_WORD, separator);
             if (!typedWord.equals(autoCorrection)) {
diff --git a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
index f5f072b..a2ae74b 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
@@ -192,8 +192,9 @@
     public static final int VERSION2 = 2;
     // Dictionary version used for testing.
     public static final int VERSION4_ONLY_FOR_TESTING = 399;
-    public static final int VERSION4 = 401;
-    public static final int VERSION4_DEV = 402;
+    public static final int VERSION401 = 401;
+    public static final int VERSION4 = 402;
+    public static final int VERSION4_DEV = 403;
     static final int MINIMUM_SUPPORTED_VERSION = VERSION2;
     static final int MAXIMUM_SUPPORTED_VERSION = VERSION4_DEV;
 
diff --git a/java/src/com/android/inputmethod/latin/makedict/WordProperty.java b/java/src/com/android/inputmethod/latin/makedict/WordProperty.java
index 8533922..31cb597 100644
--- a/java/src/com/android/inputmethod/latin/makedict/WordProperty.java
+++ b/java/src/com/android/inputmethod/latin/makedict/WordProperty.java
@@ -18,7 +18,6 @@
 
 import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.latin.BinaryDictionary;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.CombinedFormatUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 
@@ -35,6 +34,8 @@
     public final ProbabilityInfo mProbabilityInfo;
     public final ArrayList<WeightedString> mShortcutTargets;
     public final ArrayList<WeightedString> mBigrams;
+    // TODO: Support mIsBeginningOfSentence.
+    public final boolean mIsBeginningOfSentence;
     public final boolean mIsNotAWord;
     public final boolean mIsBlacklistEntry;
     public final boolean mHasShortcuts;
@@ -51,6 +52,7 @@
         mProbabilityInfo = probabilityInfo;
         mShortcutTargets = shortcutTargets;
         mBigrams = bigrams;
+        mIsBeginningOfSentence = false;
         mIsNotAWord = isNotAWord;
         mIsBlacklistEntry = isBlacklistEntry;
         mHasBigrams = bigrams != null && !bigrams.isEmpty();
@@ -75,8 +77,9 @@
             final ArrayList<Integer> shortcutProbabilities) {
         mWord = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints);
         mProbabilityInfo = createProbabilityInfoFromArray(probabilityInfo);
-        mShortcutTargets = CollectionUtils.newArrayList();
-        mBigrams = CollectionUtils.newArrayList();
+        mShortcutTargets = new ArrayList<>();
+        mBigrams = new ArrayList<>();
+        mIsBeginningOfSentence = false;
         mIsNotAWord = isNotAWord;
         mIsBlacklistEntry = isBlacklisted;
         mHasShortcuts = hasShortcuts;
diff --git a/java/src/com/android/inputmethod/latin/personalization/AccountUtils.java b/java/src/com/android/inputmethod/latin/personalization/AccountUtils.java
index a446672..ab3ef96 100644
--- a/java/src/com/android/inputmethod/latin/personalization/AccountUtils.java
+++ b/java/src/com/android/inputmethod/latin/personalization/AccountUtils.java
@@ -35,7 +35,7 @@
     }
 
     public static List<String> getDeviceAccountsEmailAddresses(final Context context) {
-        final ArrayList<String> retval = new ArrayList<String>();
+        final ArrayList<String> retval = new ArrayList<>();
         for (final Account account : getAccounts(context)) {
             final String name = account.name;
             if (Patterns.EMAIL_ADDRESS.matcher(name).matches()) {
@@ -54,7 +54,7 @@
      */
     public static List<String> getDeviceAccountsWithDomain(
             final Context context, final String domain) {
-        final ArrayList<String> retval = new ArrayList<String>();
+        final ArrayList<String> retval = new ArrayList<>();
         final String atDomain = "@" + domain.toLowerCase(Locale.ROOT);
         for (final Account account : getAccounts(context)) {
             if (account.name.toLowerCase(Locale.ROOT).endsWith(atDomain)) {
diff --git a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
index 06bdba0..be658ce 100644
--- a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
+++ b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
@@ -31,7 +31,6 @@
  * model.
  */
 public abstract class DecayingExpandableBinaryDictionaryBase extends ExpandableBinaryDictionary {
-    private static final String TAG = DecayingExpandableBinaryDictionaryBase.class.getSimpleName();
     private static final boolean DBG_DUMP_ON_CLOSE = false;
 
     /** Any pair being typed or picked */
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDataChunk.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDataChunk.java
new file mode 100644
index 0000000..9d72de8
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDataChunk.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin.personalization;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+
+public class PersonalizationDataChunk {
+    public final boolean mInputByUser;
+    public final List<String> mTokens;
+    public final int mTimestampInSeconds;
+    public final String mPackageName;
+    public final Locale mlocale = null;
+
+    public PersonalizationDataChunk(boolean inputByUser, final List<String> tokens,
+            final int timestampInSeconds, final String packageName) {
+        mInputByUser = inputByUser;
+        mTokens = Collections.unmodifiableList(tokens);
+        mTimestampInSeconds = timestampInSeconds;
+        mPackageName = packageName;
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegistrar.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegistrar.java
index 9bef7a1..4506440 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegistrar.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegistrar.java
@@ -19,18 +19,15 @@
 import android.content.Context;
 import android.content.res.Configuration;
 
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
-import com.android.inputmethod.latin.utils.DistracterFilter;
+import com.android.inputmethod.latin.DictionaryFacilitator;
 
 public class PersonalizationDictionarySessionRegistrar {
     public static void init(final Context context,
-            final DictionaryFacilitatorForSuggest dictionaryFacilitator,
-            final DistracterFilter distracterFilter) {
+            final DictionaryFacilitator dictionaryFacilitator) {
     }
 
     public static void onConfigurationChanged(final Context context, final Configuration conf,
-            final DictionaryFacilitatorForSuggest dictionaryFacilitator,
-            final DistracterFilter distracterFilter) {
+            final DictionaryFacilitator dictionaryFacilitator) {
     }
 
     public static void onUpdateData(final Context context, final String type) {
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
index 6ef505e..aac4094 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
@@ -16,12 +16,11 @@
 
 package com.android.inputmethod.latin.personalization;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
-import com.android.inputmethod.latin.utils.FileUtils;
-
 import android.content.Context;
 import android.util.Log;
 
+import com.android.inputmethod.latin.utils.FileUtils;
+
 import java.io.File;
 import java.io.FilenameFilter;
 import java.lang.ref.SoftReference;
@@ -33,9 +32,9 @@
     private static final String TAG = PersonalizationHelper.class.getSimpleName();
     private static final boolean DEBUG = false;
     private static final ConcurrentHashMap<String, SoftReference<UserHistoryDictionary>>
-            sLangUserHistoryDictCache = CollectionUtils.newConcurrentHashMap();
+            sLangUserHistoryDictCache = new ConcurrentHashMap<>();
     private static final ConcurrentHashMap<String, SoftReference<PersonalizationDictionary>>
-            sLangPersonalizationDictCache = CollectionUtils.newConcurrentHashMap();
+            sLangPersonalizationDictCache = new ConcurrentHashMap<>();
 
     public static UserHistoryDictionary getUserHistoryDictionary(
             final Context context, final Locale locale) {
@@ -54,8 +53,7 @@
                 }
             }
             final UserHistoryDictionary dict = new UserHistoryDictionary(context, locale);
-            sLangUserHistoryDictCache.put(localeStr,
-                    new SoftReference<UserHistoryDictionary>(dict));
+            sLangUserHistoryDictCache.put(localeStr, new SoftReference<>(dict));
             return dict;
         }
     }
@@ -108,8 +106,7 @@
                 }
             }
             final PersonalizationDictionary dict = new PersonalizationDictionary(context, locale);
-            sLangPersonalizationDictCache.put(
-                    localeStr, new SoftReference<PersonalizationDictionary>(dict));
+            sLangPersonalizationDictCache.put(localeStr, new SoftReference<>(dict));
             return dict;
         }
     }
diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
index f89caf9..67ad54f 100644
--- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
@@ -23,6 +23,7 @@
 import com.android.inputmethod.latin.Dictionary;
 import com.android.inputmethod.latin.ExpandableBinaryDictionary;
 import com.android.inputmethod.latin.PrevWordsInfo;
+import com.android.inputmethod.latin.utils.DistracterFilter;
 
 import java.io.File;
 import java.util.Locale;
@@ -60,10 +61,11 @@
      * @param word the word the user inputted
      * @param isValid whether the word is valid or not
      * @param timestamp the timestamp when the word has been inputted
+     * @param distracterFilter the filter to check whether the word is a distracter
      */
     public static void addToDictionary(final ExpandableBinaryDictionary userHistoryDictionary,
             final PrevWordsInfo prevWordsInfo, final String word, final boolean isValid,
-            final int timestamp) {
+            final int timestamp, final DistracterFilter distracterFilter) {
         final String prevWord = prevWordsInfo.mPrevWord;
         if (word.length() >= Constants.DICTIONARY_MAX_WORD_LENGTH ||
                 (prevWord != null && prevWord.length() >= Constants.DICTIONARY_MAX_WORD_LENGTH)) {
@@ -71,8 +73,9 @@
         }
         final int frequency = isValid ?
                 FREQUENCY_FOR_WORDS_IN_DICTS : FREQUENCY_FOR_WORDS_NOT_IN_DICTS;
-        userHistoryDictionary.addUnigramEntry(word, frequency, null /* shortcutTarget */,
-                0 /* shortcutFreq */, false /* isNotAWord */, false /* isBlacklisted */, timestamp);
+        userHistoryDictionary.addUnigramEntryWithCheckingDistracter(word, frequency,
+                null /* shortcutTarget */, 0 /* shortcutFreq */, false /* isNotAWord */,
+                false /* isBlacklisted */, timestamp, distracterFilter);
         // Do not insert a word as a bigram of itself
         if (word.equals(prevWord)) {
             return;
diff --git a/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java b/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java
index 39977e7..31fa867 100644
--- a/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java
+++ b/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java
@@ -47,7 +47,6 @@
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.RichInputMethodManager;
 import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.DialogUtils;
 import com.android.inputmethod.latin.utils.IntentUtils;
 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
@@ -101,7 +100,7 @@
             super(context, android.R.layout.simple_spinner_item);
             setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
-            final TreeSet<SubtypeLocaleItem> items = CollectionUtils.newTreeSet();
+            final TreeSet<SubtypeLocaleItem> items = new TreeSet<>();
             final InputMethodInfo imi = RichInputMethodManager.getInstance()
                     .getInputMethodInfoOfThisIme();
             final int count = imi.getSubtypeCount();
@@ -369,7 +368,6 @@
                 mSubtype = (InputMethodSubtype)source.readParcelable(null);
             }
 
-            @SuppressWarnings("hiding")
             public static final Parcelable.Creator<SavedState> CREATOR =
                     new Parcelable.Creator<SavedState>() {
                         @Override
@@ -516,8 +514,7 @@
                 localeString, keyboardLayoutSetName);
     }
 
-    private AlertDialog createDialog(
-            @SuppressWarnings("unused") final SubtypePreference subtypePref) {
+    private AlertDialog createDialog(final SubtypePreference subtypePref) {
         final AlertDialog.Builder builder = new AlertDialog.Builder(
                 DialogUtils.getPlatformDialogThemeContext(getActivity()));
         builder.setTitle(R.string.custom_input_styles_title)
@@ -555,7 +552,7 @@
 
     private InputMethodSubtype[] getSubtypes() {
         final PreferenceGroup group = getPreferenceScreen();
-        final ArrayList<InputMethodSubtype> subtypes = CollectionUtils.newArrayList();
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<>();
         final int count = group.getPreferenceCount();
         for (int i = 0; i < count; i++) {
             final Preference pref = group.getPreference(i);
diff --git a/java/src/com/android/inputmethod/latin/settings/DebugSettings.java b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
index c4c1234..9e7e07e 100644
--- a/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
+++ b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
@@ -29,7 +29,6 @@
 
 import com.android.inputmethod.latin.Dictionary;
 import com.android.inputmethod.latin.DictionaryDumpBroadcastReceiver;
-import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.debug.ExternalDictionaryGetterForDebug;
 import com.android.inputmethod.latin.utils.ApplicationUtils;
@@ -40,8 +39,6 @@
 
     public static final String PREF_DEBUG_MODE = "debug_mode";
     public static final String PREF_FORCE_NON_DISTINCT_MULTITOUCH = "force_non_distinct_multitouch";
-    public static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode";
-    public static final String PREF_STATISTICS_LOGGING = "enable_logging";
     public static final String PREF_KEY_PREVIEW_SHOW_UP_START_SCALE =
             "pref_key_preview_show_up_start_scale";
     public static final String PREF_KEY_PREVIEW_DISMISS_END_SCALE =
@@ -58,11 +55,8 @@
     public static final String PREF_SLIDING_KEY_INPUT_PREVIEW = "pref_sliding_key_input_preview";
     public static final String PREF_KEY_LONGPRESS_TIMEOUT = "pref_key_longpress_timeout";
 
-    private static final boolean SHOW_STATISTICS_LOGGING = false;
-
     private boolean mServiceNeedsRestart = false;
     private CheckBoxPreference mDebugMode;
-    private CheckBoxPreference mStatisticsLoggingPref;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -71,21 +65,6 @@
         SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
         prefs.registerOnSharedPreferenceChangeListener(this);
 
-        final Preference usabilityStudyPref = findPreference(PREF_USABILITY_STUDY_MODE);
-        if (usabilityStudyPref instanceof CheckBoxPreference) {
-            final CheckBoxPreference checkbox = (CheckBoxPreference)usabilityStudyPref;
-            checkbox.setChecked(prefs.getBoolean(PREF_USABILITY_STUDY_MODE,
-                    LatinImeLogger.getUsabilityStudyMode(prefs)));
-            checkbox.setSummary(R.string.settings_warning_researcher_mode);
-        }
-        final Preference statisticsLoggingPref = findPreference(PREF_STATISTICS_LOGGING);
-        if (statisticsLoggingPref instanceof CheckBoxPreference) {
-            mStatisticsLoggingPref = (CheckBoxPreference) statisticsLoggingPref;
-            if (!SHOW_STATISTICS_LOGGING) {
-                getPreferenceScreen().removePreference(statisticsLoggingPref);
-            }
-        }
-
         final PreferenceScreen readExternalDictionary =
                 (PreferenceScreen) findPreference(PREF_READ_EXTERNAL_DICTIONARY);
         if (null != readExternalDictionary) {
@@ -163,27 +142,22 @@
     @Override
     public void onStop() {
         super.onStop();
-        if (mServiceNeedsRestart) Process.killProcess(Process.myPid());
+        if (mServiceNeedsRestart) {
+            Process.killProcess(Process.myPid());
+        }
     }
 
     @Override
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
-        if (key.equals(PREF_DEBUG_MODE)) {
-            if (mDebugMode != null) {
-                mDebugMode.setChecked(prefs.getBoolean(PREF_DEBUG_MODE, false));
-                final boolean checked = mDebugMode.isChecked();
-                if (mStatisticsLoggingPref != null) {
-                    if (checked) {
-                        getPreferenceScreen().addPreference(mStatisticsLoggingPref);
-                    } else {
-                        getPreferenceScreen().removePreference(mStatisticsLoggingPref);
-                    }
-                }
-                updateDebugMode();
-                mServiceNeedsRestart = true;
-            }
-        } else if (key.equals(PREF_FORCE_NON_DISTINCT_MULTITOUCH)) {
+        if (key.equals(PREF_DEBUG_MODE) && mDebugMode != null) {
+            mDebugMode.setChecked(prefs.getBoolean(PREF_DEBUG_MODE, false));
+            updateDebugMode();
             mServiceNeedsRestart = true;
+            return;
+        }
+        if (key.equals(PREF_FORCE_NON_DISTINCT_MULTITOUCH)) {
+            mServiceNeedsRestart = true;
+            return;
         }
     }
 
diff --git a/java/src/com/android/inputmethod/latin/settings/Settings.java b/java/src/com/android/inputmethod/latin/settings/Settings.java
index d4f6bcd..2358477 100644
--- a/java/src/com/android/inputmethod/latin/settings/Settings.java
+++ b/java/src/com/android/inputmethod/latin/settings/Settings.java
@@ -20,6 +20,7 @@
 import android.content.SharedPreferences;
 import android.content.pm.ApplicationInfo;
 import android.content.res.Resources;
+import android.os.Build;
 import android.preference.PreferenceManager;
 import android.util.Log;
 
@@ -60,6 +61,10 @@
             "pref_key_use_double_space_period";
     public static final String PREF_BLOCK_POTENTIALLY_OFFENSIVE =
             "pref_key_block_potentially_offensive";
+    public static final boolean ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS =
+            (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
+            || (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT
+                    && Build.VERSION.CODENAME.equals("REL"));
     public static final String PREF_SHOW_LANGUAGE_SWITCH_KEY =
             "pref_show_language_switch_key";
     public static final String PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST =
@@ -327,10 +332,6 @@
                 R.array.keypress_vibration_durations, DEFAULT_KEYPRESS_VIBRATION_DURATION));
     }
 
-    public static boolean readUsabilityStudyMode(final SharedPreferences prefs) {
-        return prefs.getBoolean(DebugSettings.PREF_USABILITY_STUDY_MODE, true);
-    }
-
     public static float readKeyPreviewAnimationScale(final SharedPreferences prefs,
             final String prefKey, final float defaultValue) {
         final float fraction = prefs.getFloat(prefKey, UNDEFINED_PREFERENCE_VALUE_FLOAT);
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
index e1d38e7..af46aad 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
@@ -41,7 +41,6 @@
 import com.android.inputmethod.latin.AudioAndHapticFeedbackManager;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.SubtypeSwitcher;
-import com.android.inputmethod.latin.define.ProductionFlag;
 import com.android.inputmethod.latin.setup.LauncherIconVisibilityManager;
 import com.android.inputmethod.latin.userdictionary.UserDictionaryList;
 import com.android.inputmethod.latin.userdictionary.UserDictionarySettings;
@@ -59,7 +58,7 @@
     private static final boolean DBG_USE_INTERNAL_PERSONAL_DICTIONARY_SETTINGS = false;
     private static final boolean USE_INTERNAL_PERSONAL_DICTIONARY_SETTIGS =
             DBG_USE_INTERNAL_PERSONAL_DICTIONARY_SETTINGS
-                    || Build.VERSION.SDK_INT <= 18 /* Build.VERSION.JELLY_BEAN_MR2 */;
+            || Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR2;
 
     private void setPreferenceEnabled(final String preferenceKey, final boolean enabled) {
         final Preference preference = findPreference(preferenceKey);
@@ -152,10 +151,6 @@
                 miscSettings.removePreference(aboutSettings);
             }
         }
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            // The about screen contains items that may be confusing in development-only versions.
-            miscSettings.removePreference(aboutSettings);
-        }
 
         final boolean showVoiceKeyOption = res.getBoolean(
                 R.bool.config_enable_show_voice_key_option);
@@ -169,6 +164,13 @@
             removePreference(Settings.PREF_VIBRATE_ON, generalSettings);
             removePreference(Settings.PREF_VIBRATION_DURATION_SETTINGS, advancedSettings);
         }
+        if (!Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS) {
+            removePreference(
+                    Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY, advancedSettings);
+            removePreference(
+                    Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, advancedSettings);
+        }
+
 
         // TODO: consolidate key preview dismiss delay with the key preview animation parameters.
         if (!Settings.readFromBuildConfigIfToShowKeyPreviewPopupOption(res)) {
@@ -199,9 +201,6 @@
             removePreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON, advancedSettings);
         }
 
-        setPreferenceEnabled(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST,
-                Settings.readShowsLanguageSwitchKey(prefs));
-
         final PreferenceGroup textCorrectionGroup =
                 (PreferenceGroup) findPreference(Settings.PREF_CORRECTION_SETTINGS);
         final PreferenceScreen dictionaryLink =
@@ -299,9 +298,6 @@
         if (key.equals(Settings.PREF_POPUP_ON)) {
             setPreferenceEnabled(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY,
                     Settings.readKeyPreviewPopupEnabled(prefs, res));
-        } else if (key.equals(Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY)) {
-            setPreferenceEnabled(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST,
-                    Settings.readShowsLanguageSwitchKey(prefs));
         } else if (key.equals(Settings.PREF_SHOW_SETUP_WIZARD_ICON)) {
             LauncherIconVisibilityManager.updateSetupWizardIconVisibility(getActivity());
         }
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
index 16fd058..6c6e79e 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
@@ -125,9 +125,11 @@
         final String autoCorrectionThresholdRawValue = prefs.getString(
                 Settings.PREF_AUTO_CORRECTION_THRESHOLD,
                 res.getString(R.string.auto_correction_threshold_mode_index_modest));
-        mIncludesOtherImesInLanguageSwitchList = prefs.getBoolean(
-                Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, false);
-        mShowsLanguageSwitchKey = Settings.readShowsLanguageSwitchKey(prefs);
+        mIncludesOtherImesInLanguageSwitchList = Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS
+                ? prefs.getBoolean(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, false)
+                : true /* forcibly */;
+        mShowsLanguageSwitchKey = Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS
+                ? Settings.readShowsLanguageSwitchKey(prefs) : true /* forcibly */;
         mUseContactsDict = prefs.getBoolean(Settings.PREF_KEY_USE_CONTACTS_DICT, true);
         mUsePersonalizedDicts = prefs.getBoolean(Settings.PREF_KEY_USE_PERSONALIZED_DICTS, true);
         mUseDoubleSpacePeriod = prefs.getBoolean(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, true);
@@ -171,7 +173,7 @@
                 ResourceUtils.getFloatFromFraction(
                         res, R.fraction.config_key_preview_dismiss_end_scale));
         mDisplayOrientation = res.getConfiguration().orientation;
-        mAppWorkarounds = new AsyncResultHolder<AppWorkaroundsUtils>();
+        mAppWorkarounds = new AsyncResultHolder<>();
         final PackageInfo packageInfo = TargetPackageInfoGetterTask.getCachedPackageInfo(
                 mInputAttributes.mTargetApplicationPackageName);
         if (null != packageInfo) {
@@ -188,10 +190,11 @@
 
     public boolean isSuggestionsRequested() {
         return mInputAttributes.mIsSettingsSuggestionStripOn
-                && (mCorrectionEnabled || isSuggestionStripVisible());
+                && (mCorrectionEnabled
+                        || isCurrentOrientationAllowingSuggestionsPerUserSettings());
     }
 
-    public boolean isSuggestionStripVisible() {
+    public boolean isCurrentOrientationAllowingSuggestionsPerUserSettings() {
         return (mSuggestionVisibility == SUGGESTION_VISIBILITY_SHOW_VALUE)
                 || (mSuggestionVisibility == SUGGESTION_VISIBILITY_SHOW_ONLY_PORTRAIT_VALUE
                         && mDisplayOrientation == Configuration.ORIENTATION_PORTRAIT);
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java b/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java
index 974dfdd..73d25f6 100644
--- a/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java
+++ b/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java
@@ -21,13 +21,13 @@
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.Path;
+import android.support.v4.view.ViewCompat;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import com.android.inputmethod.compat.ViewCompatUtils;
 import com.android.inputmethod.latin.R;
 
 public final class SetupStartIndicatorView extends LinearLayout {
@@ -96,13 +96,13 @@
         @Override
         protected void onDraw(final Canvas canvas) {
             super.onDraw(canvas);
-            final int layoutDirection = ViewCompatUtils.getLayoutDirection(this);
+            final int layoutDirection = ViewCompat.getLayoutDirection(this);
             final int width = getWidth();
             final int height = getHeight();
             final float halfHeight = height / 2.0f;
             final Path path = mIndicatorPath;
             path.rewind();
-            if (layoutDirection == ViewCompatUtils.LAYOUT_DIRECTION_RTL) {
+            if (layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL) {
                 // Left arrow
                 path.moveTo(width, 0.0f);
                 path.lineTo(0.0f, halfHeight);
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupStepIndicatorView.java b/java/src/com/android/inputmethod/latin/setup/SetupStepIndicatorView.java
index c909507..6734e61 100644
--- a/java/src/com/android/inputmethod/latin/setup/SetupStepIndicatorView.java
+++ b/java/src/com/android/inputmethod/latin/setup/SetupStepIndicatorView.java
@@ -20,10 +20,10 @@
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.Path;
+import android.support.v4.view.ViewCompat;
 import android.util.AttributeSet;
 import android.view.View;
 
-import com.android.inputmethod.compat.ViewCompatUtils;
 import com.android.inputmethod.latin.R;
 
 public final class SetupStepIndicatorView extends View {
@@ -38,12 +38,12 @@
     }
 
     public void setIndicatorPosition(final int stepPos, final int totalStepNum) {
-        final int layoutDirection = ViewCompatUtils.getLayoutDirection(this);
+        final int layoutDirection = ViewCompat.getLayoutDirection(this);
         // The indicator position is the center of the partition that is equally divided into
         // the total step number.
         final float partionWidth = 1.0f / totalStepNum;
         final float pos = stepPos * partionWidth + partionWidth / 2.0f;
-        mXRatio = (layoutDirection == ViewCompatUtils.LAYOUT_DIRECTION_RTL) ? 1.0f - pos : pos;
+        mXRatio = (layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL) ? 1.0f - pos : pos;
         invalidate();
     }
 
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java b/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java
index 5072fab..bcac05a 100644
--- a/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java
+++ b/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java
@@ -37,7 +37,6 @@
 import com.android.inputmethod.compat.ViewCompatUtils;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.settings.SettingsActivity;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;
 
 import java.util.ArrayList;
@@ -482,7 +481,7 @@
 
     static final class SetupStepGroup {
         private final SetupStepIndicatorView mIndicatorView;
-        private final ArrayList<SetupStep> mGroup = CollectionUtils.newArrayList();
+        private final ArrayList<SetupStep> mGroup = new ArrayList<>();
 
         public SetupStepGroup(final SetupStepIndicatorView indicatorView) {
             mIndicatorView = indicatorView;
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 65ebcf5..8d49564 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -27,7 +27,6 @@
 import android.view.textservice.SuggestionsInfo;
 
 import com.android.inputmethod.keyboard.KeyboardLayoutSet;
-import com.android.inputmethod.latin.BinaryDictionary;
 import com.android.inputmethod.latin.ContactsBinaryDictionary;
 import com.android.inputmethod.latin.Dictionary;
 import com.android.inputmethod.latin.DictionaryCollection;
@@ -77,7 +76,7 @@
     private final Object mUseContactsLock = new Object();
 
     private final HashSet<WeakReference<DictionaryCollection>> mDictionaryCollectionsList =
-            CollectionUtils.newHashSet();
+            new HashSet<>();
 
     public static final int SCRIPT_LATIN = 0;
     public static final int SCRIPT_CYRILLIC = 1;
@@ -94,7 +93,7 @@
         // proximity to pass to the dictionary descent algorithm.
         // IMPORTANT: this only contains languages - do not write countries in there.
         // Only the language is searched from the map.
-        mLanguageToScript = CollectionUtils.newTreeMap();
+        mLanguageToScript = new TreeMap<>();
         mLanguageToScript.put("cs", SCRIPT_LATIN);
         mLanguageToScript.put("da", SCRIPT_LATIN);
         mLanguageToScript.put("de", SCRIPT_LATIN);
@@ -255,7 +254,7 @@
             mOriginalText = originalText;
             mRecommendedThreshold = recommendedThreshold;
             mMaxLength = maxLength;
-            mSuggestions = CollectionUtils.newArrayList(maxLength + 1);
+            mSuggestions = new ArrayList<>(maxLength + 1);
             mScores = new int[mMaxLength];
         }
 
@@ -441,8 +440,7 @@
                 }
             }
             dictionaryCollection.addDictionary(mContactsDictionary);
-            mDictionaryCollectionsList.add(
-                    new WeakReference<DictionaryCollection>(dictionaryCollection));
+            mDictionaryCollectionsList.add(new WeakReference<>(dictionaryCollection));
         }
         return new DictAndKeyboard(dictionaryCollection, keyboardLayoutSet);
     }
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
index e951f5a..cc80e6f 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
@@ -24,7 +24,6 @@
 import android.view.textservice.TextInfo;
 
 import com.android.inputmethod.latin.PrevWordsInfo;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.ArrayList;
 
@@ -44,10 +43,9 @@
             return null;
         }
         final int N = ssi.getSuggestionsCount();
-        final ArrayList<Integer> additionalOffsets = CollectionUtils.newArrayList();
-        final ArrayList<Integer> additionalLengths = CollectionUtils.newArrayList();
-        final ArrayList<SuggestionsInfo> additionalSuggestionsInfos =
-                CollectionUtils.newArrayList();
+        final ArrayList<Integer> additionalOffsets = new ArrayList<>();
+        final ArrayList<Integer> additionalLengths = new ArrayList<>();
+        final ArrayList<SuggestionsInfo> additionalSuggestionsInfos = new ArrayList<>();
         String currentWord = null;
         for (int i = 0; i < N; ++i) {
             final SuggestionsInfo si = ssi.getSuggestionsInfoAt(i);
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
index cf26000..d7953e6 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
@@ -28,7 +28,6 @@
 import android.view.textservice.TextInfo;
 
 import com.android.inputmethod.compat.SuggestionsInfoCompatUtils;
-import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.latin.Constants;
 import com.android.inputmethod.latin.Dictionary;
 import com.android.inputmethod.latin.PrevWordsInfo;
@@ -69,7 +68,7 @@
         private static final char CHAR_DELIMITER = '\uFFFC';
         private static final int MAX_CACHE_SIZE = 50;
         private final LruCache<String, SuggestionsParams> mUnigramSuggestionsInfoCache =
-                new LruCache<String, SuggestionsParams>(MAX_CACHE_SIZE);
+                new LruCache<>(MAX_CACHE_SIZE);
 
         // TODO: Support n-gram input
         private static String generateKey(final String query, final PrevWordsInfo prevWordsInfo) {
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java b/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
index 1ffe506..b33739f 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
@@ -16,11 +16,11 @@
 
 package com.android.inputmethod.latin.spellcheck;
 
-import com.android.inputmethod.latin.Dictionary;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardId;
 import com.android.inputmethod.keyboard.KeyboardLayoutSet;
 import com.android.inputmethod.keyboard.ProximityInfo;
+import com.android.inputmethod.latin.Dictionary;
 
 /**
  * A container for a Dictionary and a Keyboard.
@@ -28,19 +28,15 @@
 public final class DictAndKeyboard {
     public final Dictionary mDictionary;
     public final Keyboard mKeyboard;
-    private final Keyboard mManualShiftedKeyboard;
 
     public DictAndKeyboard(
             final Dictionary dictionary, final KeyboardLayoutSet keyboardLayoutSet) {
         mDictionary = dictionary;
         if (keyboardLayoutSet == null) {
             mKeyboard = null;
-            mManualShiftedKeyboard = null;
             return;
         }
         mKeyboard = keyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
-        mManualShiftedKeyboard =
-                keyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED);
     }
 
     public ProximityInfo getProximityInfo() {
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
index ba2e0c3..1331d52 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
@@ -23,7 +23,6 @@
 import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.WordComposer;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Locale;
@@ -47,7 +46,7 @@
     private final Locale mLocale;
     private int mSize;
     private volatile boolean mClosed;
-    final static ArrayList<SuggestedWordInfo> noSuggestions = CollectionUtils.newArrayList();
+    final static ArrayList<SuggestedWordInfo> noSuggestions = new ArrayList<>();
     private final static DictAndKeyboard dummyDict = new DictAndKeyboard(
             new Dictionary(Dictionary.TYPE_MAIN) {
                 // TODO: this dummy dictionary should be a singleton in the Dictionary class.
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
index e90b15c..346aea3 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
@@ -23,23 +23,17 @@
 
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardActionListener;
 import com.android.inputmethod.keyboard.internal.KeyboardBuilder;
 import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
 import com.android.inputmethod.keyboard.internal.KeyboardParams;
 import com.android.inputmethod.latin.Constants;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.utils.TypefaceUtils;
 
 public final class MoreSuggestions extends Keyboard {
     public final SuggestedWords mSuggestedWords;
 
-    public static abstract class MoreSuggestionsListener extends KeyboardActionListener.Adapter {
-        public abstract void onSuggestionSelected(final int index, final SuggestedWordInfo info);
-    }
-
     MoreSuggestions(final MoreSuggestionsParam params, final SuggestedWords suggestedWords) {
         super(params);
         mSuggestedWords = suggestedWords;
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
index 7fd64c4..aa59db6 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
@@ -22,11 +22,12 @@
 
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardActionListener;
 import com.android.inputmethod.keyboard.MoreKeysKeyboardView;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.SuggestedWords;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.suggestions.MoreSuggestions.MoreSuggestionKey;
-import com.android.inputmethod.latin.suggestions.MoreSuggestions.MoreSuggestionsListener;
 
 /**
  * A view that renders a virtual {@link MoreSuggestions}. It handles rendering of keys and detecting
@@ -35,6 +36,10 @@
 public final class MoreSuggestionsView extends MoreKeysKeyboardView {
     private static final String TAG = MoreSuggestionsView.class.getSimpleName();
 
+    public static abstract class MoreSuggestionsListener extends KeyboardActionListener.Adapter {
+        public abstract void onSuggestionSelected(final int index, final SuggestedWordInfo info);
+    }
+
     public MoreSuggestionsView(final Context context, final AttributeSet attrs) {
         this(context, attrs, R.attr.moreKeysKeyboardViewStyle);
     }
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
index 619804a..4a5a7f0 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
@@ -47,12 +47,9 @@
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.SuggestedWords;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.define.ProductionFlag;
 import com.android.inputmethod.latin.settings.Settings;
-import com.android.inputmethod.latin.suggestions.MoreSuggestions.MoreSuggestionsListener;
-import com.android.inputmethod.latin.utils.CollectionUtils;
+import com.android.inputmethod.latin.suggestions.MoreSuggestionsView.MoreSuggestionsListener;
 import com.android.inputmethod.latin.utils.ImportantNoticeUtils;
-import com.android.inputmethod.research.ResearchLogger;
 
 import java.util.ArrayList;
 
@@ -78,9 +75,9 @@
     private final MoreSuggestionsView mMoreSuggestionsView;
     private final MoreSuggestions.Builder mMoreSuggestionsBuilder;
 
-    private final ArrayList<TextView> mWordViews = CollectionUtils.newArrayList();
-    private final ArrayList<TextView> mDebugInfoViews = CollectionUtils.newArrayList();
-    private final ArrayList<View> mDividerViews = CollectionUtils.newArrayList();
+    private final ArrayList<TextView> mWordViews = new ArrayList<>();
+    private final ArrayList<TextView> mDebugInfoViews = new ArrayList<>();
+    private final ArrayList<View> mDividerViews = new ArrayList<>();
 
     Listener mListener;
     private SuggestedWords mSuggestedWords = SuggestedWords.EMPTY;
@@ -90,13 +87,16 @@
     private final StripVisibilityGroup mStripVisibilityGroup;
 
     private static class StripVisibilityGroup {
+        private final View mSuggestionStripView;
         private final View mSuggestionsStrip;
         private final View mVoiceKey;
         private final View mAddToDictionaryStrip;
         private final View mImportantNoticeStrip;
 
-        public StripVisibilityGroup(final View suggestionsStrip, final View voiceKey,
-                final View addToDictionaryStrip, final View importantNoticeStrip) {
+        public StripVisibilityGroup(final View suggestionStripView,
+                final ViewGroup suggestionsStrip, final ImageButton voiceKey,
+                final ViewGroup addToDictionaryStrip, final View importantNoticeStrip) {
+            mSuggestionStripView = suggestionStripView;
             mSuggestionsStrip = suggestionsStrip;
             mVoiceKey = voiceKey;
             mAddToDictionaryStrip = addToDictionaryStrip;
@@ -104,7 +104,10 @@
             showSuggestionsStrip(false /* voiceKeyEnabled */);
         }
 
-        public void setLayoutDirection(final int layoutDirection) {
+        public void setLayoutDirection(final boolean isRtlLanguage) {
+            final int layoutDirection = isRtlLanguage ? ViewCompat.LAYOUT_DIRECTION_RTL
+                    : ViewCompat.LAYOUT_DIRECTION_LTR;
+            ViewCompat.setLayoutDirection(mSuggestionStripView, layoutDirection);
             ViewCompat.setLayoutDirection(mSuggestionsStrip, layoutDirection);
             ViewCompat.setLayoutDirection(mAddToDictionaryStrip, layoutDirection);
             ViewCompat.setLayoutDirection(mImportantNoticeStrip, layoutDirection);
@@ -156,7 +159,7 @@
         mVoiceKey = (ImageButton)findViewById(R.id.suggestions_strip_voice_key);
         mAddToDictionaryStrip = (ViewGroup)findViewById(R.id.add_to_dictionary_strip);
         mImportantNoticeStrip = findViewById(R.id.important_notice_strip);
-        mStripVisibilityGroup = new StripVisibilityGroup(mSuggestionsStrip, mVoiceKey,
+        mStripVisibilityGroup = new StripVisibilityGroup(this, mSuggestionsStrip, mVoiceKey,
                 mAddToDictionaryStrip, mImportantNoticeStrip);
 
         for (int pos = 0; pos < SuggestedWords.MAX_SUGGESTIONS; pos++) {
@@ -217,16 +220,10 @@
 
     public void setSuggestions(final SuggestedWords suggestedWords, final boolean isRtlLanguage) {
         clear();
-        final int layoutDirection = isRtlLanguage ? ViewCompat.LAYOUT_DIRECTION_RTL
-                : ViewCompat.LAYOUT_DIRECTION_LTR;
-        setLayoutDirection(layoutDirection);
-        mStripVisibilityGroup.setLayoutDirection(layoutDirection);
+        mStripVisibilityGroup.setLayoutDirection(isRtlLanguage);
         mSuggestedWords = suggestedWords;
         mSuggestionsCountInStrip = mLayoutHelper.layoutAndReturnSuggestionCountInStrip(
                 mSuggestedWords, mSuggestionsStrip, this);
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            ResearchLogger.suggestionStripView_setSuggestions(mSuggestedWords);
-        }
         mStripVisibilityGroup.showSuggestionsStrip(isVoiceKeyEnabled());
     }
 
diff --git a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java
index 21426d1..80d4cc4 100644
--- a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java
+++ b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java
@@ -256,7 +256,7 @@
         // The system locale should be inside. We want it at the 2nd spot.
         locales.remove(systemLocale); // system locale may not be null
         locales.remove(""); // Remove the empty string if it's there
-        final ArrayList<LocaleRenderer> localesList = new ArrayList<LocaleRenderer>();
+        final ArrayList<LocaleRenderer> localesList = new ArrayList<>();
         // Add the passed locale, then the system locale at the top of the list. Add an
         // "all languages" entry at the bottom of the list.
         addLocaleDisplayNameToList(activity, localesList, mLocale);
diff --git a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordFragment.java b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordFragment.java
index 4fc132f..1634430 100644
--- a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordFragment.java
+++ b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordFragment.java
@@ -134,8 +134,8 @@
 
         final Spinner localeSpinner =
                 (Spinner)mRootView.findViewById(R.id.user_dictionary_add_locale);
-        final ArrayAdapter<LocaleRenderer> adapter = new ArrayAdapter<LocaleRenderer>(getActivity(),
-                android.R.layout.simple_spinner_item, localesList);
+        final ArrayAdapter<LocaleRenderer> adapter = new ArrayAdapter<>(
+                getActivity(), android.R.layout.simple_spinner_item, localesList);
         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
         localeSpinner.setAdapter(adapter);
         localeSpinner.setOnItemSelectedListener(this);
diff --git a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryList.java b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryList.java
index 97a924d..624783a 100644
--- a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryList.java
+++ b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryList.java
@@ -56,7 +56,7 @@
         final Cursor cursor = activity.getContentResolver().query(UserDictionary.Words.CONTENT_URI,
                 new String[] { UserDictionary.Words.LOCALE },
                 null, null, null);
-        final TreeSet<String> localeSet = new TreeSet<String>();
+        final TreeSet<String> localeSet = new TreeSet<>();
         if (null == cursor) {
             // The user dictionary service is not present or disabled. Return null.
             return null;
diff --git a/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java b/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java
index 2bb30a2..3ca7c7e 100644
--- a/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java
@@ -95,8 +95,7 @@
             return EMPTY_SUBTYPE_ARRAY;
         }
         final String[] prefSubtypeArray = prefSubtypes.split(PREF_SUBTYPE_SEPARATOR);
-        final ArrayList<InputMethodSubtype> subtypesList =
-                CollectionUtils.newArrayList(prefSubtypeArray.length);
+        final ArrayList<InputMethodSubtype> subtypesList = new ArrayList<>(prefSubtypeArray.length);
         for (final String prefSubtype : prefSubtypeArray) {
             final String elems[] = prefSubtype.split(LOCALE_AND_LAYOUT_SEPARATOR);
             if (elems.length != LENGTH_WITHOUT_EXTRA_VALUE
diff --git a/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java b/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java
index 22b9b77..34ee215 100644
--- a/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java
@@ -16,12 +16,11 @@
 
 package com.android.inputmethod.latin.utils;
 
-import com.android.inputmethod.latin.BinaryDictionary;
+import android.util.Log;
+
 import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 
-import android.util.Log;
-
 public final class AutoCorrectionUtils {
     private static final boolean DBG = LatinImeLogger.sDBG;
     private static final String TAG = AutoCorrectionUtils.class.getSimpleName();
@@ -36,7 +35,9 @@
             final float autoCorrectionThreshold) {
         if (null != suggestion) {
             // Shortlist a whitelisted word
-            if (suggestion.mKind == SuggestedWordInfo.KIND_WHITELIST) return true;
+            if (suggestion.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) {
+                return true;
+            }
             final int autoCorrectionSuggestionScore = suggestion.mScore;
             // TODO: when the normalized score of the first suggestion is nearly equals to
             //       the normalized score of the second suggestion, behave less aggressive.
diff --git a/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java b/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
index 702688f..9362193 100644
--- a/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
@@ -62,6 +62,22 @@
     }
 
     /**
+     * Helper method to find out if a code point is starting punctuation.
+     *
+     * This include the Unicode START_PUNCTUATION category, but also some other symbols that are
+     * starting, like the inverted question mark or the double quote.
+     *
+     * @param codePoint the code point
+     * @return true if it's starting punctuation, false otherwise.
+     */
+    private static boolean isStartPunctuation(final int codePoint) {
+        return (codePoint == Constants.CODE_DOUBLE_QUOTE || codePoint == Constants.CODE_SINGLE_QUOTE
+                || codePoint == Constants.CODE_INVERTED_QUESTION_MARK
+                || codePoint == Constants.CODE_INVERTED_EXCLAMATION_MARK
+                || Character.getType(codePoint) == Character.START_PUNCTUATION);
+    }
+
+    /**
      * Determine what caps mode should be in effect at the current offset in
      * the text. Only the mode bits set in <var>reqModes</var> will be
      * checked. Note that the caps mode flags here are explicitly defined
@@ -115,8 +131,7 @@
         } else {
             for (i = cs.length(); i > 0; i--) {
                 final char c = cs.charAt(i - 1);
-                if (c != Constants.CODE_DOUBLE_QUOTE && c != Constants.CODE_SINGLE_QUOTE
-                        && Character.getType(c) != Character.START_PUNCTUATION) {
+                if (!isStartPunctuation(c)) {
                     break;
                 }
             }
@@ -210,11 +225,14 @@
 
         // We found out that we have a period. We need to determine if this is a full stop or
         // otherwise sentence-ending period, or an abbreviation like "e.g.". An abbreviation
-        // looks like (\w\.){2,}
+        // looks like (\w\.){2,}. Moreover, in German, you put periods after digits for dates
+        // and some other things, and in German specifically we need to not go into autocaps after
+        // a whitespace-digits-period sequence.
         // To find out, we will have a simple state machine with the following states :
-        // START, WORD, PERIOD, ABBREVIATION
+        // START, WORD, PERIOD, ABBREVIATION, NUMBER
         // On START : (just before the first period)
         //           letter => WORD
+        //           digit => NUMBER if German; end with caps otherwise
         //           whitespace => end with no caps (it was a stand-alone period)
         //           otherwise => end with caps (several periods/symbols in a row)
         // On WORD : (within the word just before the first period)
@@ -228,6 +246,11 @@
         //           letter => LETTER
         //           period => PERIOD
         //           otherwise => end with no caps (it was an abbreviation)
+        // On NUMBER : (period immediately preceded by one or more digits)
+        //           digit => NUMBER
+        //           letter => LETTER (promote to word)
+        //           otherwise => end with no caps (it was a whitespace-digits-period sequence,
+        //            or a punctuation-digits-period sequence like "11.11.")
         // "Not an abbreviation" in the above chart essentially covers cases like "...yes.". This
         // should capitalize.
 
@@ -235,6 +258,7 @@
         final int WORD = 1;
         final int PERIOD = 2;
         final int LETTER = 3;
+        final int NUMBER = 4;
         final int caps = (TextUtils.CAP_MODE_CHARACTERS | TextUtils.CAP_MODE_WORDS
                 | TextUtils.CAP_MODE_SENTENCES) & reqModes;
         final int noCaps = (TextUtils.CAP_MODE_CHARACTERS | TextUtils.CAP_MODE_WORDS) & reqModes;
@@ -247,6 +271,8 @@
                     state = WORD;
                 } else if (Character.isWhitespace(c)) {
                     return noCaps;
+                } else if (Character.isDigit(c) && spacingAndPunctuations.mUsesGermanRules) {
+                    state = NUMBER;
                 } else {
                     return caps;
                 }
@@ -275,6 +301,15 @@
                 } else {
                     return noCaps;
                 }
+                break;
+            case NUMBER:
+                if (Character.isLetter(c)) {
+                    state = WORD;
+                } else if (Character.isDigit(c)) {
+                    state = NUMBER;
+                } else {
+                    return noCaps;
+                }
             }
         }
         // Here we arrived at the start of the line. This should behave exactly like whitespace.
diff --git a/java/src/com/android/inputmethod/latin/utils/CollectionUtils.java b/java/src/com/android/inputmethod/latin/utils/CollectionUtils.java
index bbfa0f0..e3aef29 100644
--- a/java/src/com/android/inputmethod/latin/utils/CollectionUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CollectionUtils.java
@@ -16,93 +16,21 @@
 
 package com.android.inputmethod.latin.utils;
 
-import android.util.SparseArray;
-
-import java.util.ArrayDeque;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.WeakHashMap;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
 
 public final class CollectionUtils {
     private CollectionUtils() {
         // This utility class is not publicly instantiable.
     }
 
-    public static <K,V> HashMap<K,V> newHashMap() {
-        return new HashMap<K,V>();
-    }
-
-    public static <K, V> WeakHashMap<K, V> newWeakHashMap() {
-        return new WeakHashMap<K, V>();
-    }
-
-    public static <K,V> TreeMap<K,V> newTreeMap() {
-        return new TreeMap<K,V>();
-    }
-
     public static <K, V> Map<K,V> newSynchronizedTreeMap() {
-        final TreeMap<K,V> treeMap = newTreeMap();
+        final TreeMap<K,V> treeMap = new TreeMap<>();
         return Collections.synchronizedMap(treeMap);
     }
 
-    public static <K,V> ConcurrentHashMap<K,V> newConcurrentHashMap() {
-        return new ConcurrentHashMap<K,V>();
-    }
-
-    public static <E> HashSet<E> newHashSet() {
-        return new HashSet<E>();
-    }
-
-    public static <E> TreeSet<E> newTreeSet() {
-        return new TreeSet<E>();
-    }
-
-    public static <E> ArrayList<E> newArrayList() {
-        return new ArrayList<E>();
-    }
-
-    public static <E> ArrayList<E> newArrayList(final int initialCapacity) {
-        return new ArrayList<E>(initialCapacity);
-    }
-
-    public static <E> ArrayList<E> newArrayList(final Collection<E> collection) {
-        return new ArrayList<E>(collection);
-    }
-
-    public static <E> LinkedList<E> newLinkedList() {
-        return new LinkedList<E>();
-    }
-
-    public static <E> CopyOnWriteArrayList<E> newCopyOnWriteArrayList() {
-        return new CopyOnWriteArrayList<E>();
-    }
-
-    public static <E> CopyOnWriteArrayList<E> newCopyOnWriteArrayList(
-            final Collection<E> collection) {
-        return new CopyOnWriteArrayList<E>(collection);
-    }
-
-    public static <E> CopyOnWriteArrayList<E> newCopyOnWriteArrayList(final E[] array) {
-        return new CopyOnWriteArrayList<E>(array);
-    }
-
-    public static <E> ArrayDeque<E> newArrayDeque() {
-        return new ArrayDeque<E>();
-    }
-
-    public static <E> SparseArray<E> newSparseArray() {
-        return new SparseArray<E>();
-    }
-
     public static <E> ArrayList<E> arrayAsList(final E[] array, final int start, final int end) {
         if (array == null) {
             throw new NullPointerException();
@@ -111,7 +39,7 @@
             throw new IllegalArgumentException();
         }
 
-        final ArrayList<E> list = newArrayList(end - start);
+        final ArrayList<E> list = new ArrayList<>(end - start);
         for (int i = start; i < end; i++) {
             list.add(array[i]);
         }
diff --git a/java/src/com/android/inputmethod/latin/utils/CsvUtils.java b/java/src/com/android/inputmethod/latin/utils/CsvUtils.java
index b18a1d8..a21a137 100644
--- a/java/src/com/android/inputmethod/latin/utils/CsvUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CsvUtils.java
@@ -209,7 +209,7 @@
     @UsedForTesting
     public static String[] split(final int splitFlags, final String line) throws CsvParseException {
         final boolean trimSpaces = (splitFlags & SPLIT_FLAGS_TRIM_SPACES) != 0;
-        final ArrayList<String> fields = CollectionUtils.newArrayList();
+        final ArrayList<String> fields = new ArrayList<>();
         final int length = line.length();
         int start = 0;
         do {
diff --git a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
index 315913e..d76ea10 100644
--- a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
@@ -336,7 +336,7 @@
 
     public static ArrayList<DictionaryInfo> getCurrentDictionaryFileNameAndVersionInfo(
             final Context context) {
-        final ArrayList<DictionaryInfo> dictList = CollectionUtils.newArrayList();
+        final ArrayList<DictionaryInfo> dictList = new ArrayList<>();
 
         // Retrieve downloaded dictionaries
         final File[] directoryList = getCachedDirectoryList(context);
diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
index f1057da..787e4a5 100644
--- a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
+++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
@@ -16,129 +16,14 @@
 
 package com.android.inputmethod.latin.utils;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
 
-import android.content.Context;
-import android.content.res.Resources;
-import android.text.InputType;
-import android.util.Log;
-import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodSubtype;
 
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.KeyboardLayoutSet;
-import com.android.inputmethod.latin.Constants;
 import com.android.inputmethod.latin.PrevWordsInfo;
-import com.android.inputmethod.latin.Suggest;
-import com.android.inputmethod.latin.Suggest.OnGetSuggestedWordsCallback;
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.WordComposer;
 
-/**
- * This class is used to prevent distracters being added to personalization
- * or user history dictionaries
- */
-public class DistracterFilter {
-    private static final String TAG = DistracterFilter.class.getSimpleName();
-
-    private static final long TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS = 120;
-
-    private final Context mContext;
-    private final Map<Locale, InputMethodSubtype> mLocaleToSubtypeMap;
-    private final Map<Locale, Keyboard> mLocaleToKeyboardMap;
-    private final Suggest mSuggest;
-    private Keyboard mKeyboard;
-
-    // If the score of the top suggestion exceeds this value, the tested word (e.g.,
-    // an OOV, a misspelling, or an in-vocabulary word) would be considered as a distracter to
-    // words in dictionary. The greater the threshold is, the less likely the tested word would
-    // become a distracter, which means the tested word will be more likely to be added to
-    // the dictionary.
-    private static final float DISTRACTER_WORD_SCORE_THRESHOLD = 2.0f;
-
-    // Create empty distracter filter.
-    public DistracterFilter() {
-        this(null, new ArrayList<InputMethodSubtype>());
-    }
-
-    /**
-     * Create a DistracterFilter instance.
-     *
-     * @param context the context.
-     * @param enabledSubtypes the enabled subtypes.
-     */
-    public DistracterFilter(final Context context, final List<InputMethodSubtype> enabledSubtypes) {
-        mContext = context;
-        mLocaleToSubtypeMap = new HashMap<>();
-        if (enabledSubtypes != null) {
-            for (final InputMethodSubtype subtype : enabledSubtypes) {
-                final Locale locale = SubtypeLocaleUtils.getSubtypeLocale(subtype);
-                if (mLocaleToSubtypeMap.containsKey(locale)) {
-                    // Multiple subtypes are enabled for one locale.
-                    // TODO: Investigate what we should do for this case.
-                    continue;
-                }
-                mLocaleToSubtypeMap.put(locale, subtype);
-            }
-        }
-        mLocaleToKeyboardMap = new HashMap<>();
-        mSuggest = new Suggest();
-        mKeyboard = null;
-    }
-
-    private static boolean suggestionExceedsDistracterThreshold(
-            final SuggestedWordInfo suggestion, final String consideredWord,
-            final float distracterThreshold) {
-        if (null != suggestion) {
-            final int suggestionScore = suggestion.mScore;
-            final float normalizedScore = BinaryDictionaryUtils.calcNormalizedScore(
-                    consideredWord, suggestion.mWord, suggestionScore);
-            if (normalizedScore > distracterThreshold) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private void loadKeyboardForLocale(final Locale newLocale) {
-        final Keyboard cachedKeyboard = mLocaleToKeyboardMap.get(newLocale);
-        if (cachedKeyboard != null) {
-            mKeyboard = cachedKeyboard;
-            return;
-        }
-        final InputMethodSubtype subtype = mLocaleToSubtypeMap.get(newLocale);
-        if (subtype == null) {
-            return;
-        }
-        final EditorInfo editorInfo = new EditorInfo();
-        editorInfo.inputType = InputType.TYPE_CLASS_TEXT;
-        final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(
-                mContext, editorInfo);
-        final Resources res = mContext.getResources();
-        final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res);
-        final int keyboardHeight = ResourceUtils.getDefaultKeyboardHeight(res);
-        builder.setKeyboardGeometry(keyboardWidth, keyboardHeight);
-        builder.setSubtype(subtype);
-        builder.setIsSpellChecker(false /* isSpellChecker */);
-        final KeyboardLayoutSet layoutSet = builder.build();
-        mKeyboard = layoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
-    }
-
-    private void loadDictionariesForLocale(final Locale newlocale) throws InterruptedException {
-        mSuggest.mDictionaryFacilitator.resetDictionaries(mContext, newlocale,
-                false /* useContactsDict */, false /* usePersonalizedDicts */,
-                false /* forceReloadMainDictionary */, null /* listener */);
-        mSuggest.mDictionaryFacilitator.waitForLoadingMainDictionary(
-                TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS, TimeUnit.SECONDS);
-    }
-
+public interface DistracterFilter {
     /**
      * Determine whether a word is a distracter to words in dictionaries.
      *
@@ -149,56 +34,25 @@
      * @return true if testedWord is a distracter, otherwise false.
      */
     public boolean isDistracterToWordsInDictionaries(final PrevWordsInfo prevWordsInfo,
-            final String testedWord, final Locale locale) {
-        if (locale == null) {
+            final String testedWord, final Locale locale);
+
+    public void updateEnabledSubtypes(final List<InputMethodSubtype> enabledSubtypes);
+
+    public void close();
+
+    public static final DistracterFilter EMPTY_DISTRACTER_FILTER = new DistracterFilter() {
+        @Override
+        public boolean isDistracterToWordsInDictionaries(PrevWordsInfo prevWordsInfo,
+                String testedWord, Locale locale) {
             return false;
         }
-        if (!locale.equals(mSuggest.mDictionaryFacilitator.getLocale())) {
-            if (!mLocaleToSubtypeMap.containsKey(locale)) {
-                Log.e(TAG, "Locale " + locale + " is not enabled.");
-                // TODO: Investigate what we should do for disabled locales.
-                return false;
-            }
-            loadKeyboardForLocale(locale);
-            // Reset dictionaries for the locale.
-            try {
-                loadDictionariesForLocale(locale);
-            } catch (final InterruptedException e) {
-                Log.e(TAG, "Interrupted while waiting for loading dicts in DistracterFilter", e);
-                return false;
-            }
-        }
-        if (mKeyboard == null) {
-            return false;
-        }
-        final WordComposer composer = new WordComposer();
-        final int[] codePoints = StringUtils.toCodePointArray(testedWord);
-        final int[] coordinates = mKeyboard.getCoordinates(codePoints);
-        composer.setComposingWord(codePoints, coordinates, prevWordsInfo);
 
-        final int trailingSingleQuotesCount = StringUtils.getTrailingSingleQuotesCount(testedWord);
-        final String consideredWord = trailingSingleQuotesCount > 0 ?
-                testedWord.substring(0, testedWord.length() - trailingSingleQuotesCount) :
-                testedWord;
-        final AsyncResultHolder<Boolean> holder = new AsyncResultHolder<Boolean>();
-        final OnGetSuggestedWordsCallback callback = new OnGetSuggestedWordsCallback() {
-            @Override
-            public void onGetSuggestedWords(final SuggestedWords suggestedWords) {
-                if (suggestedWords != null && suggestedWords.size() > 1) {
-                    // The suggestedWordInfo at 0 is the typed word. The 1st suggestion from
-                    // the decoder is at index 1.
-                    final SuggestedWordInfo firstSuggestion = suggestedWords.getInfo(1);
-                    final boolean hasStrongDistractor = suggestionExceedsDistracterThreshold(
-                            firstSuggestion, consideredWord, DISTRACTER_WORD_SCORE_THRESHOLD);
-                    holder.set(hasStrongDistractor);
-                }
-            }
-        };
-        mSuggest.getSuggestedWords(composer, prevWordsInfo, mKeyboard.getProximityInfo(),
-                true /* blockOffensiveWords */, true /* isCorrectionEnbaled */,
-                null /* additionalFeaturesOptions */, 0 /* sessionId */,
-                SuggestedWords.NOT_A_SEQUENCE_NUMBER, callback);
+        @Override
+        public void close() {
+        }
 
-        return holder.get(false /* defaultValue */, Constants.GET_SUGGESTED_WORDS_TIMEOUT);
-    }
+        @Override
+        public void updateEnabledSubtypes(List<InputMethodSubtype> enabledSubtypes) {
+        }
+    };
 }
diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilterUsingSuggestion.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilterUsingSuggestion.java
new file mode 100644
index 0000000..b9c7f56
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilterUsingSuggestion.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin.utils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.text.InputType;
+import android.util.Log;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodSubtype;
+
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardId;
+import com.android.inputmethod.keyboard.KeyboardLayoutSet;
+import com.android.inputmethod.latin.Constants;
+import com.android.inputmethod.latin.Dictionary;
+import com.android.inputmethod.latin.DictionaryFacilitator;
+import com.android.inputmethod.latin.PrevWordsInfo;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
+import com.android.inputmethod.latin.WordComposer;
+
+/**
+ * This class is used to prevent distracters being added to personalization
+ * or user history dictionaries
+ */
+public class DistracterFilterUsingSuggestion implements DistracterFilter {
+    private static final String TAG = DistracterFilterUsingSuggestion.class.getSimpleName();
+    private static final boolean DEBUG = false;
+
+    private static final long TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS = 120;
+
+    private final Context mContext;
+    private final Map<Locale, InputMethodSubtype> mLocaleToSubtypeMap;
+    private final Map<Locale, Keyboard> mLocaleToKeyboardMap;
+    private final DictionaryFacilitator mDictionaryFacilitator;
+    private Keyboard mKeyboard;
+    private final Object mLock = new Object();
+
+    /**
+     * Create a DistracterFilter instance.
+     *
+     * @param context the context.
+     */
+    public DistracterFilterUsingSuggestion(final Context context) {
+        mContext = context;
+        mLocaleToSubtypeMap = new HashMap<>();
+        mLocaleToKeyboardMap = new HashMap<>();
+        mDictionaryFacilitator = new DictionaryFacilitator();
+        mKeyboard = null;
+    }
+
+    @Override
+    public void close() {
+        mDictionaryFacilitator.closeDictionaries();
+    }
+
+    @Override
+    public void updateEnabledSubtypes(final List<InputMethodSubtype> enabledSubtypes) {
+        final Map<Locale, InputMethodSubtype> newLocaleToSubtypeMap = new HashMap<>();
+        if (enabledSubtypes != null) {
+            for (final InputMethodSubtype subtype : enabledSubtypes) {
+                final Locale locale = SubtypeLocaleUtils.getSubtypeLocale(subtype);
+                if (newLocaleToSubtypeMap.containsKey(locale)) {
+                    // Multiple subtypes are enabled for one locale.
+                    // TODO: Investigate what we should do for this case.
+                    continue;
+                }
+                newLocaleToSubtypeMap.put(locale, subtype);
+            }
+        }
+        if (mLocaleToSubtypeMap.equals(newLocaleToSubtypeMap)) {
+            // Enabled subtypes have not been changed.
+            return;
+        }
+        synchronized (mLock) {
+            mLocaleToSubtypeMap.clear();
+            mLocaleToSubtypeMap.putAll(newLocaleToSubtypeMap);
+            mLocaleToKeyboardMap.clear();
+        }
+    }
+
+    private boolean isDistracter(
+            final SuggestionResults suggestionResults, final String consideredWord) {
+        int perfectMatchProbability = Dictionary.NOT_A_PROBABILITY;
+        for (final SuggestedWordInfo suggestedWordInfo : suggestionResults) {
+            if (suggestedWordInfo.mWord.equals(consideredWord)) {
+                perfectMatchProbability = mDictionaryFacilitator.getFrequency(consideredWord);
+                continue;
+            }
+            // Exact match can include case errors, accent errors, digraph conversions.
+            final boolean isExactMatch = suggestedWordInfo.isExactMatch();
+            final boolean isExactMatchWithIntentionalOmission =
+                    suggestedWordInfo.isExactMatchWithIntentionalOmission();
+
+            if (DEBUG) {
+                final float normalizedScore = BinaryDictionaryUtils.calcNormalizedScore(
+                        consideredWord, suggestedWordInfo.mWord, suggestedWordInfo.mScore);
+                Log.d(TAG, "consideredWord: " +  consideredWord);
+                Log.d(TAG, "top suggestion: " +  suggestedWordInfo.mWord);
+                Log.d(TAG, "suggestionScore: " +  suggestedWordInfo.mScore);
+                Log.d(TAG, "normalizedScore: " +  normalizedScore);
+                Log.d(TAG, "isExactMatch: " + isExactMatch);
+                Log.d(TAG, "isExactMatchWithIntentionalOmission: "
+                            + isExactMatchWithIntentionalOmission);
+            }
+            if (perfectMatchProbability != Dictionary.NOT_A_PROBABILITY) {
+                final int topNonPerfectProbability = mDictionaryFacilitator.getFrequency(
+                        suggestedWordInfo.mWord);
+                if (DEBUG) {
+                    Log.d(TAG, "perfectMatchProbability: " + perfectMatchProbability);
+                    Log.d(TAG, "topNonPerfectProbability: " + topNonPerfectProbability);
+                }
+                if (perfectMatchProbability > topNonPerfectProbability) {
+                    return false;
+                }
+            }
+            return isExactMatch || isExactMatchWithIntentionalOmission;
+        }
+        return false;
+    }
+
+    private void loadKeyboardForLocale(final Locale newLocale) {
+        final Keyboard cachedKeyboard = mLocaleToKeyboardMap.get(newLocale);
+        if (cachedKeyboard != null) {
+            mKeyboard = cachedKeyboard;
+            return;
+        }
+        final InputMethodSubtype subtype;
+        synchronized (mLock) {
+            subtype = mLocaleToSubtypeMap.get(newLocale);
+        }
+        if (subtype == null) {
+            return;
+        }
+        final EditorInfo editorInfo = new EditorInfo();
+        editorInfo.inputType = InputType.TYPE_CLASS_TEXT;
+        final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(
+                mContext, editorInfo);
+        final Resources res = mContext.getResources();
+        final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res);
+        final int keyboardHeight = ResourceUtils.getDefaultKeyboardHeight(res);
+        builder.setKeyboardGeometry(keyboardWidth, keyboardHeight);
+        builder.setSubtype(subtype);
+        builder.setIsSpellChecker(false /* isSpellChecker */);
+        final KeyboardLayoutSet layoutSet = builder.build();
+        mKeyboard = layoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
+    }
+
+    private void loadDictionariesForLocale(final Locale newlocale) throws InterruptedException {
+        mDictionaryFacilitator.resetDictionaries(mContext, newlocale,
+                false /* useContactsDict */, false /* usePersonalizedDicts */,
+                false /* forceReloadMainDictionary */, null /* listener */);
+        mDictionaryFacilitator.waitForLoadingMainDictionary(
+                TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS, TimeUnit.SECONDS);
+    }
+
+    /**
+     * Determine whether a word is a distracter to words in dictionaries.
+     *
+     * @param prevWordsInfo the information of previous words. Not used for now.
+     * @param testedWord the word that will be tested to see whether it is a distracter to words
+     *                   in dictionaries.
+     * @param locale the locale of word.
+     * @return true if testedWord is a distracter, otherwise false.
+     */
+    @Override
+    public boolean isDistracterToWordsInDictionaries(final PrevWordsInfo prevWordsInfo,
+            final String testedWord, final Locale locale) {
+        if (locale == null) {
+            return false;
+        }
+        if (!locale.equals(mDictionaryFacilitator.getLocale())) {
+            synchronized (mLock) {
+                if (!mLocaleToSubtypeMap.containsKey(locale)) {
+                    Log.e(TAG, "Locale " + locale + " is not enabled.");
+                    // TODO: Investigate what we should do for disabled locales.
+                    return false;
+                }
+                loadKeyboardForLocale(locale);
+                // Reset dictionaries for the locale.
+                try {
+                    loadDictionariesForLocale(locale);
+                } catch (final InterruptedException e) {
+                    Log.e(TAG, "Interrupted while waiting for loading dicts in DistracterFilter",
+                            e);
+                    return false;
+                }
+            }
+        }
+        if (mKeyboard == null) {
+            return false;
+        }
+        final WordComposer composer = new WordComposer();
+        final int[] codePoints = StringUtils.toCodePointArray(testedWord);
+        final int[] coordinates = mKeyboard.getCoordinates(codePoints);
+        composer.setComposingWord(codePoints, coordinates, PrevWordsInfo.EMPTY_PREV_WORDS_INFO);
+
+        final int trailingSingleQuotesCount = StringUtils.getTrailingSingleQuotesCount(testedWord);
+        final String consideredWord = trailingSingleQuotesCount > 0 ?
+                testedWord.substring(0, testedWord.length() - trailingSingleQuotesCount) :
+                testedWord;
+        final AsyncResultHolder<Boolean> holder = new AsyncResultHolder<>();
+        ExecutorUtils.getExecutor("check distracters").execute(new Runnable() {
+            @Override
+            public void run() {
+                final SuggestionResults suggestionResults =
+                        mDictionaryFacilitator.getSuggestionResults(
+                                composer, PrevWordsInfo.EMPTY_PREV_WORDS_INFO,
+                                mKeyboard.getProximityInfo(), true /* blockOffensiveWords */,
+                                null /* additionalFeaturesOptions */, 0 /* sessionId */,
+                                null /* rawSuggestions */);
+                if (suggestionResults.isEmpty()) {
+                    holder.set(false);
+                    return;
+                }
+                holder.set(isDistracter(suggestionResults, consideredWord));
+            }
+        });
+        // It's OK to block the distracter filtering, but the dictionary lookup should be done
+        // sequentially using ExecutorUtils.
+        return holder.get(false /* defaultValue */, Constants.GET_SUGGESTED_WORDS_TIMEOUT);
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java b/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java
index ed502ed..61da1b7 100644
--- a/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java
@@ -19,22 +19,42 @@
 import com.android.inputmethod.annotations.UsedForTesting;
 
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 /**
  * Utilities to manage executors.
  */
 public class ExecutorUtils {
-    private static final ConcurrentHashMap<String, PrioritizedSerialExecutor>
-            sExecutorMap = CollectionUtils.newConcurrentHashMap();
+    private static final ConcurrentHashMap<String, ExecutorService> sExecutorMap =
+            new ConcurrentHashMap<>();
+
+    private static class ThreadFactoryWithId implements ThreadFactory {
+        private final String mId;
+
+        public ThreadFactoryWithId(final String id) {
+            mId = id;
+        }
+
+        @Override
+        public Thread newThread(final Runnable r) {
+            return new Thread(r, "Executor - " + mId);
+        }
+    }
+
     /**
-     * Gets the executor for the given dictionary name.
+     * Gets the executor for the given id.
      */
-    public static PrioritizedSerialExecutor getExecutor(final String dictName) {
-        PrioritizedSerialExecutor executor = sExecutorMap.get(dictName);
+    public static ExecutorService getExecutor(final String id) {
+        ExecutorService executor = sExecutorMap.get(id);
         if (executor == null) {
             synchronized(sExecutorMap) {
-                executor = new PrioritizedSerialExecutor();
-                sExecutorMap.put(dictName, executor);
+                executor = sExecutorMap.get(id);
+                if (executor == null) {
+                    executor = Executors.newSingleThreadExecutor(new ThreadFactoryWithId(id));
+                    sExecutorMap.put(id, executor);
+                }
             }
         }
         return executor;
@@ -46,7 +66,7 @@
     @UsedForTesting
     public static void shutdownAllExecutors() {
         synchronized(sExecutorMap) {
-            for (final PrioritizedSerialExecutor executor : sExecutorMap.values()) {
+            for (final ExecutorService executor : sExecutorMap.values()) {
                 executor.execute(new Runnable() {
                     @Override
                     public void run() {
diff --git a/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java b/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java
index ee2b97b..e300bd1 100644
--- a/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java
@@ -26,12 +26,11 @@
 import com.android.inputmethod.latin.userdictionary.UserDictionaryList;
 import com.android.inputmethod.latin.userdictionary.UserDictionaryLocalePicker;
 import com.android.inputmethod.latin.userdictionary.UserDictionarySettings;
-import com.android.inputmethod.research.FeedbackFragment;
 
 import java.util.HashSet;
 
 public class FragmentUtils {
-    private static final HashSet<String> sLatinImeFragments = new HashSet<String>();
+    private static final HashSet<String> sLatinImeFragments = new HashSet<>();
     static {
         sLatinImeFragments.add(DictionarySettingsFragment.class.getName());
         sLatinImeFragments.add(AboutPreferences.class.getName());
@@ -43,7 +42,6 @@
         sLatinImeFragments.add(UserDictionaryList.class.getName());
         sLatinImeFragments.add(UserDictionaryLocalePicker.class.getName());
         sLatinImeFragments.add(UserDictionarySettings.class.getName());
-        sLatinImeFragments.add(FeedbackFragment.class.getName());
     }
 
     public static boolean isValidFragment(String fragmentName) {
diff --git a/java/src/com/android/inputmethod/latin/utils/JsonUtils.java b/java/src/com/android/inputmethod/latin/utils/JsonUtils.java
index 764ef72..6dd8d97 100644
--- a/java/src/com/android/inputmethod/latin/utils/JsonUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/JsonUtils.java
@@ -37,7 +37,7 @@
     private static final String EMPTY_STRING = "";
 
     public static List<Object> jsonStrToList(final String s) {
-        final ArrayList<Object> list = CollectionUtils.newArrayList();
+        final ArrayList<Object> list = new ArrayList<>();
         final JsonReader reader = new JsonReader(new StringReader(s));
         try {
             reader.beginArray();
diff --git a/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java b/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java
index aaf4a40..4248beb 100644
--- a/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java
+++ b/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java
@@ -19,11 +19,12 @@
 import android.util.Log;
 
 import com.android.inputmethod.latin.Dictionary;
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
+import com.android.inputmethod.latin.DictionaryFacilitator;
 import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
 
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Locale;
 
 // Note: this class is used as a parameter type of a native method. You should be careful when you
@@ -79,14 +80,13 @@
 
     // Process a list of words and return a list of {@link LanguageModelParam} objects.
     public static ArrayList<LanguageModelParam> createLanguageModelParamsFrom(
-            final ArrayList<String> tokens, final int timestamp,
-            final DictionaryFacilitatorForSuggest dictionaryFacilitator,
+            final List<String> tokens, final int timestamp,
+            final DictionaryFacilitator dictionaryFacilitator,
             final SpacingAndPunctuations spacingAndPunctuations,
             final DistracterFilter distracterFilter) {
-        final ArrayList<LanguageModelParam> languageModelParams =
-                CollectionUtils.newArrayList();
+        final ArrayList<LanguageModelParam> languageModelParams = new ArrayList<>();
         final int N = tokens.size();
-        PrevWordsInfo prevWordsInfo = new PrevWordsInfo(null);
+        PrevWordsInfo prevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
         for (int i = 0; i < N; ++i) {
             final String tempWord = tokens.get(i);
             if (StringUtils.isEmptyStringOrWhiteSpaces(tempWord)) {
@@ -103,7 +103,7 @@
                             + tempWord + "\"");
                 }
                 // Sentence terminator found. Split.
-                prevWordsInfo = new PrevWordsInfo(null);
+                prevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
                 continue;
             }
             if (DEBUG_TOKEN) {
@@ -124,43 +124,33 @@
 
     private static LanguageModelParam detectWhetherVaildWordOrNotAndGetLanguageModelParam(
             final PrevWordsInfo prevWordsInfo, final String targetWord, final int timestamp,
-            final DictionaryFacilitatorForSuggest dictionaryFacilitator,
+            final DictionaryFacilitator dictionaryFacilitator,
             final DistracterFilter distracterFilter) {
         final Locale locale = dictionaryFacilitator.getLocale();
         if (locale == null) {
             return null;
         }
-        // TODO: Though targetWord is an IV (in-vocabulary) word, we should still apply
-        // distracterFilter in the following code. If targetWord is a distracter,
-        // it should be filtered out.
         if (dictionaryFacilitator.isValidWord(targetWord, false /* ignoreCase */)) {
             return createAndGetLanguageModelParamOfWord(prevWordsInfo, targetWord, timestamp,
-                    true /* isValidWord */, locale);
+                    true /* isValidWord */, locale, distracterFilter);
         }
 
         final String lowerCaseTargetWord = targetWord.toLowerCase(locale);
         if (dictionaryFacilitator.isValidWord(lowerCaseTargetWord, false /* ignoreCase */)) {
             // Add the lower-cased word.
             return createAndGetLanguageModelParamOfWord(prevWordsInfo, lowerCaseTargetWord,
-                    timestamp, true /* isValidWord */, locale);
+                    timestamp, true /* isValidWord */, locale, distracterFilter);
         }
 
-        // Treat the word as an OOV word. The following statement checks whether this OOV
-        // is a distracter to words in dictionaries. Being a distracter means the OOV word is
-        // too close to a common word in dictionaries (e.g., the OOV "mot" is very close to "not").
-        // Adding such a word to dictonaries would interfere with entering in-dictionary words. For
-        // example, adding "mot" to dictionaries might interfere with entering "not".
-        // This kind of OOV should be filtered out.
-        if (distracterFilter.isDistracterToWordsInDictionaries(prevWordsInfo, targetWord, locale)) {
-            return null;
-        }
+        // Treat the word as an OOV word.
         return createAndGetLanguageModelParamOfWord(prevWordsInfo, targetWord, timestamp,
-                false /* isValidWord */, locale);
+                false /* isValidWord */, locale, distracterFilter);
     }
 
     private static LanguageModelParam createAndGetLanguageModelParamOfWord(
             final PrevWordsInfo prevWordsInfo, final String targetWord, final int timestamp,
-            final boolean isValidWord, final Locale locale) {
+            final boolean isValidWord, final Locale locale,
+            final DistracterFilter distracterFilter) {
         final String word;
         if (StringUtils.getCapitalizationType(targetWord) == StringUtils.CAPITALIZE_FIRST
                 && prevWordsInfo.mPrevWord == null && !isValidWord) {
@@ -168,6 +158,13 @@
         } else {
             word = targetWord;
         }
+        // Check whether the word is a distracter to words in the dictionaries.
+        if (distracterFilter.isDistracterToWordsInDictionaries(prevWordsInfo, word, locale)) {
+            if (DEBUG) {
+                Log.d(TAG, "The word (" + word + ") is a distracter. Skip this word.");
+            }
+            return null;
+        }
         final int unigramProbability = isValidWord ?
                 UNIGRAM_PROBABILITY_FOR_VALID_WORD : UNIGRAM_PROBABILITY_FOR_OOV_WORD;
         if (prevWordsInfo.mPrevWord == null) {
diff --git a/java/src/com/android/inputmethod/latin/utils/LatinImeLoggerUtils.java b/java/src/com/android/inputmethod/latin/utils/LatinImeLoggerUtils.java
deleted file mode 100644
index d14ba50..0000000
--- a/java/src/com/android/inputmethod/latin/utils/LatinImeLoggerUtils.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import android.text.TextUtils;
-
-import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.LatinImeLogger;
-import com.android.inputmethod.latin.WordComposer;
-
-public final class LatinImeLoggerUtils {
-    private LatinImeLoggerUtils() {
-        // This utility class is not publicly instantiable.
-    }
-
-    public static void onNonSeparator(final char code, final int x, final int y) {
-        UserLogRingCharBuffer.getInstance().push(code, x, y);
-        LatinImeLogger.logOnInputChar();
-    }
-
-    public static void onSeparator(final int code, final int x, final int y) {
-        // Helper method to log a single code point separator
-        // TODO: cache this mapping of a code point to a string in a sparse array in StringUtils
-        onSeparator(StringUtils.newSingleCodePointString(code), x, y);
-    }
-
-    public static void onSeparator(final String separator, final int x, final int y) {
-        final int length = separator.length();
-        for (int i = 0; i < length; i = Character.offsetByCodePoints(separator, i, 1)) {
-            int codePoint = Character.codePointAt(separator, i);
-            // TODO: accept code points
-            UserLogRingCharBuffer.getInstance().push((char)codePoint, x, y);
-        }
-        LatinImeLogger.logOnInputSeparator();
-    }
-
-    public static void onAutoCorrection(final String typedWord, final String correctedWord,
-            final String separatorString, final WordComposer wordComposer) {
-        final boolean isBatchMode = wordComposer.isBatchMode();
-        if (!isBatchMode && TextUtils.isEmpty(typedWord)) {
-            return;
-        }
-        // TODO: this fails when the separator is more than 1 code point long, but
-        // the backend can't handle it yet. The only case when this happens is with
-        // smileys and other multi-character keys.
-        final int codePoint = TextUtils.isEmpty(separatorString) ? Constants.NOT_A_CODE
-                : separatorString.codePointAt(0);
-        if (!isBatchMode) {
-            LatinImeLogger.logOnAutoCorrectionForTyping(typedWord, correctedWord, codePoint);
-        } else {
-            if (!TextUtils.isEmpty(correctedWord)) {
-                // We must make sure that InputPointer contains only the relative timestamps,
-                // not actual timestamps.
-                LatinImeLogger.logOnAutoCorrectionForGeometric(
-                        "", correctedWord, codePoint, wordComposer.getInputPointers());
-            }
-        }
-    }
-
-    public static void onAutoCorrectionCancellation() {
-        LatinImeLogger.logOnAutoCorrectionCancelled();
-    }
-}
diff --git a/java/src/com/android/inputmethod/latin/utils/LeakGuardHandlerWrapper.java b/java/src/com/android/inputmethod/latin/utils/LeakGuardHandlerWrapper.java
index 8469c87..dd6fac6 100644
--- a/java/src/com/android/inputmethod/latin/utils/LeakGuardHandlerWrapper.java
+++ b/java/src/com/android/inputmethod/latin/utils/LeakGuardHandlerWrapper.java
@@ -33,7 +33,7 @@
         if (ownerInstance == null) {
             throw new NullPointerException("ownerInstance is null");
         }
-        mOwnerInstanceRef = new WeakReference<T>(ownerInstance);
+        mOwnerInstanceRef = new WeakReference<>(ownerInstance);
     }
 
     public T getOwnerInstance() {
diff --git a/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java b/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java
index 0c55484..c519a0d 100644
--- a/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java
@@ -159,7 +159,7 @@
         return LOCALE_MATCH <= level;
     }
 
-    private static final HashMap<String, Locale> sLocaleCache = CollectionUtils.newHashMap();
+    private static final HashMap<String, Locale> sLocaleCache = new HashMap<>();
 
     /**
      * Creates a locale from a string specification.
diff --git a/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java b/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
deleted file mode 100644
index bf38abc..0000000
--- a/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-
-import java.util.Queue;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-/**
- * An object that executes submitted tasks using a thread.
- */
-public class PrioritizedSerialExecutor {
-    public static final String TAG = PrioritizedSerialExecutor.class.getSimpleName();
-
-    private final Object mLock = new Object();
-
-    private final Queue<Runnable> mTasks;
-    private final Queue<Runnable> mPrioritizedTasks;
-    private boolean mIsShutdown;
-    private final ThreadPoolExecutor mThreadPoolExecutor;
-
-    // The task which is running now.
-    private Runnable mActive;
-
-    public PrioritizedSerialExecutor() {
-        mTasks = new ConcurrentLinkedQueue<Runnable>();
-        mPrioritizedTasks = new ConcurrentLinkedQueue<Runnable>();
-        mIsShutdown = false;
-        mThreadPoolExecutor = new ThreadPoolExecutor(1 /* corePoolSize */, 1 /* maximumPoolSize */,
-                0 /* keepAliveTime */, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1));
-    }
-
-    /**
-     * Enqueues the given task into the task queue.
-     * @param r the enqueued task
-     */
-    public void execute(final Runnable r) {
-        synchronized(mLock) {
-            if (!mIsShutdown) {
-                mTasks.offer(new Runnable() {
-                    @Override
-                    public void run() {
-                        try {
-                            r.run();
-                        } finally {
-                            scheduleNext();
-                        }
-                    }
-                });
-                if (mActive == null) {
-                    scheduleNext();
-                }
-            }
-        }
-    }
-
-    /**
-     * Enqueues the given task into the prioritized task queue.
-     * @param r the enqueued task
-     */
-    @UsedForTesting
-    public void executePrioritized(final Runnable r) {
-        synchronized(mLock) {
-            if (!mIsShutdown) {
-                mPrioritizedTasks.offer(new Runnable() {
-                    @Override
-                    public void run() {
-                        try {
-                            r.run();
-                        } finally {
-                            scheduleNext();
-                        }
-                    }
-                });
-                if (mActive == null) {
-                    scheduleNext();
-                }
-            }
-        }
-    }
-
-    private boolean fetchNextTasksLocked() {
-        mActive = mPrioritizedTasks.poll();
-        if (mActive == null) {
-            mActive = mTasks.poll();
-        }
-        return mActive != null;
-    }
-
-    private void scheduleNext() {
-        synchronized(mLock) {
-            if (fetchNextTasksLocked()) {
-                mThreadPoolExecutor.execute(mActive);
-            }
-        }
-    }
-
-    public void shutdown() {
-        synchronized(mLock) {
-            mIsShutdown = true;
-            mThreadPoolExecutor.shutdown();
-        }
-    }
-}
diff --git a/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java b/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java
index 49f4929..093c5a6 100644
--- a/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java
@@ -41,8 +41,7 @@
         // This utility class is not publicly instantiable.
     }
 
-    private static final HashMap<String, String> sDeviceOverrideValueMap =
-            CollectionUtils.newHashMap();
+    private static final HashMap<String, String> sDeviceOverrideValueMap = new HashMap<>();
 
     private static final String[] BUILD_KEYS_AND_VALUES = {
         "HARDWARE", Build.HARDWARE,
@@ -54,8 +53,8 @@
     private static final String sBuildKeyValuesDebugString;
 
     static {
-        sBuildKeyValues = CollectionUtils.newHashMap();
-        final ArrayList<String> keyValuePairs = CollectionUtils.newArrayList();
+        sBuildKeyValues = new HashMap<>();
+        final ArrayList<String> keyValuePairs = new ArrayList<>();
         final int keyCount = BUILD_KEYS_AND_VALUES.length / 2;
         for (int i = 0; i < keyCount; i++) {
             final int index = i * 2;
diff --git a/java/src/com/android/inputmethod/latin/utils/StringUtils.java b/java/src/com/android/inputmethod/latin/utils/StringUtils.java
index 73ac9a5..4ed0f0a 100644
--- a/java/src/com/android/inputmethod/latin/utils/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/StringUtils.java
@@ -28,7 +28,6 @@
 import java.util.Locale;
 
 public final class StringUtils {
-    private static final String TAG = StringUtils.class.getSimpleName();
     public static final int CAPITALIZE_NONE = 0;  // No caps, or mixed case
     public static final int CAPITALIZE_FIRST = 1; // First only
     public static final int CAPITALIZE_ALL = 2;   // All caps
@@ -110,7 +109,7 @@
         if (!containsInArray(text, elements)) {
             return extraValues;
         }
-        final ArrayList<String> result = CollectionUtils.newArrayList(elements.length - 1);
+        final ArrayList<String> result = new ArrayList<>(elements.length - 1);
         for (final String element : elements) {
             if (!text.equals(element)) {
                 result.add(element);
diff --git a/java/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtils.java b/java/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtils.java
index 938d271..351d014 100644
--- a/java/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtils.java
@@ -49,17 +49,14 @@
     private static Resources sResources;
     private static String[] sPredefinedKeyboardLayoutSet;
     // Keyboard layout to its display name map.
-    private static final HashMap<String, String> sKeyboardLayoutToDisplayNameMap =
-            CollectionUtils.newHashMap();
+    private static final HashMap<String, String> sKeyboardLayoutToDisplayNameMap = new HashMap<>();
     // Keyboard layout to subtype name resource id map.
-    private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap =
-            CollectionUtils.newHashMap();
+    private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap = new HashMap<>();
     // Exceptional locale to subtype name resource id map.
-    private static final HashMap<String, Integer> sExceptionalLocaleToNameIdsMap =
-            CollectionUtils.newHashMap();
+    private static final HashMap<String, Integer> sExceptionalLocaleToNameIdsMap = new HashMap<>();
     // Exceptional locale to subtype name with layout resource id map.
     private static final HashMap<String, Integer> sExceptionalLocaleToWithLayoutNameIdsMap =
-            CollectionUtils.newHashMap();
+            new HashMap<>();
     private static final String SUBTYPE_NAME_RESOURCE_PREFIX =
             "string/subtype_";
     private static final String SUBTYPE_NAME_RESOURCE_GENERIC_PREFIX =
@@ -71,7 +68,7 @@
     // Keyboard layout set name for the subtypes that don't have a keyboardLayoutSet extra value.
     // This is for compatibility to keep the same subtype ids as pre-JellyBean.
     private static final HashMap<String, String> sLocaleAndExtraValueToKeyboardLayoutSetMap =
-            CollectionUtils.newHashMap();
+            new HashMap<>();
 
     private SubtypeLocaleUtils() {
         // Intentional empty constructor for utility class.
diff --git a/java/src/com/android/inputmethod/latin/utils/TargetPackageInfoGetterTask.java b/java/src/com/android/inputmethod/latin/utils/TargetPackageInfoGetterTask.java
index 42ea3c9..ab2b00e 100644
--- a/java/src/com/android/inputmethod/latin/utils/TargetPackageInfoGetterTask.java
+++ b/java/src/com/android/inputmethod/latin/utils/TargetPackageInfoGetterTask.java
@@ -27,8 +27,7 @@
 public final class TargetPackageInfoGetterTask extends
         AsyncTask<String, Void, PackageInfo> {
     private static final int MAX_CACHE_ENTRIES = 64; // arbitrary
-    private static final LruCache<String, PackageInfo> sCache =
-            new LruCache<String, PackageInfo>(MAX_CACHE_ENTRIES);
+    private static final LruCache<String, PackageInfo> sCache = new LruCache<>(MAX_CACHE_ENTRIES);
 
     public static PackageInfo getCachedPackageInfo(final String packageName) {
         if (null == packageName) return null;
diff --git a/java/src/com/android/inputmethod/latin/utils/TypefaceUtils.java b/java/src/com/android/inputmethod/latin/utils/TypefaceUtils.java
index 087a7f2..fafba79 100644
--- a/java/src/com/android/inputmethod/latin/utils/TypefaceUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/TypefaceUtils.java
@@ -30,7 +30,7 @@
     }
 
     // This sparse array caches key label text height in pixel indexed by key label text size.
-    private static final SparseArray<Float> sTextHeightCache = CollectionUtils.newSparseArray();
+    private static final SparseArray<Float> sTextHeightCache = new SparseArray<>();
     // Working variable for the following method.
     private static final Rect sTextHeightBounds = new Rect();
 
@@ -50,7 +50,7 @@
     }
 
     // This sparse array caches key label text width in pixel indexed by key label text size.
-    private static final SparseArray<Float> sTextWidthCache = CollectionUtils.newSparseArray();
+    private static final SparseArray<Float> sTextWidthCache = new SparseArray<>();
     // Working variable for the following method.
     private static final Rect sTextWidthBounds = new Rect();
 
diff --git a/java/src/com/android/inputmethod/latin/utils/UsabilityStudyLogUtils.java b/java/src/com/android/inputmethod/latin/utils/UsabilityStudyLogUtils.java
deleted file mode 100644
index 06826da..0000000
--- a/java/src/com/android/inputmethod/latin/utils/UsabilityStudyLogUtils.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.inputmethodservice.InputMethodService;
-import android.net.Uri;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Process;
-import android.util.Log;
-import android.view.MotionEvent;
-
-import com.android.inputmethod.latin.LatinImeLogger;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.nio.channels.FileChannel;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-public final class UsabilityStudyLogUtils {
-    // TODO: remove code duplication with ResearchLog class
-    private static final String USABILITY_TAG = UsabilityStudyLogUtils.class.getSimpleName();
-    private static final String FILENAME = "log.txt";
-    private final Handler mLoggingHandler;
-    private File mFile;
-    private File mDirectory;
-    private InputMethodService mIms;
-    private PrintWriter mWriter;
-    private final Date mDate;
-    private final SimpleDateFormat mDateFormat;
-
-    private UsabilityStudyLogUtils() {
-        mDate = new Date();
-        mDateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss.SSSZ", Locale.US);
-
-        HandlerThread handlerThread = new HandlerThread("UsabilityStudyLogUtils logging task",
-                Process.THREAD_PRIORITY_BACKGROUND);
-        handlerThread.start();
-        mLoggingHandler = new Handler(handlerThread.getLooper());
-    }
-
-    // Initialization-on-demand holder
-    private static final class OnDemandInitializationHolder {
-        public static final UsabilityStudyLogUtils sInstance = new UsabilityStudyLogUtils();
-    }
-
-    public static UsabilityStudyLogUtils getInstance() {
-        return OnDemandInitializationHolder.sInstance;
-    }
-
-    public void init(final InputMethodService ims) {
-        mIms = ims;
-        mDirectory = ims.getFilesDir();
-    }
-
-    private void createLogFileIfNotExist() {
-        if ((mFile == null || !mFile.exists())
-                && (mDirectory != null && mDirectory.exists())) {
-            try {
-                mWriter = getPrintWriter(mDirectory, FILENAME, false);
-            } catch (final IOException e) {
-                Log.e(USABILITY_TAG, "Can't create log file.");
-            }
-        }
-    }
-
-    public static void writeBackSpace(final int x, final int y) {
-        UsabilityStudyLogUtils.getInstance().write("<backspace>\t" + x + "\t" + y);
-    }
-
-    public static void writeChar(final char c, final int x, final int y) {
-        String inputChar = String.valueOf(c);
-        switch (c) {
-            case '\n':
-                inputChar = "<enter>";
-                break;
-            case '\t':
-                inputChar = "<tab>";
-                break;
-            case ' ':
-                inputChar = "<space>";
-                break;
-        }
-        UsabilityStudyLogUtils.getInstance().write(inputChar + "\t" + x + "\t" + y);
-        LatinImeLogger.onPrintAllUsabilityStudyLogs();
-    }
-
-    public static void writeMotionEvent(final MotionEvent me) {
-        final int action = me.getActionMasked();
-        final long eventTime = me.getEventTime();
-        final int pointerCount = me.getPointerCount();
-        for (int index = 0; index < pointerCount; index++) {
-            final int id = me.getPointerId(index);
-            final int x = (int)me.getX(index);
-            final int y = (int)me.getY(index);
-            final float size = me.getSize(index);
-            final float pressure = me.getPressure(index);
-
-            final String eventTag;
-            switch (action) {
-            case MotionEvent.ACTION_UP:
-                eventTag = "[Up]";
-                break;
-            case MotionEvent.ACTION_DOWN:
-                eventTag = "[Down]";
-                break;
-            case MotionEvent.ACTION_POINTER_UP:
-                eventTag = "[PointerUp]";
-                break;
-            case MotionEvent.ACTION_POINTER_DOWN:
-                eventTag = "[PointerDown]";
-                break;
-            case MotionEvent.ACTION_MOVE:
-                eventTag = "[Move]";
-                break;
-            default:
-                eventTag = "[Action" + action + "]";
-                break;
-            }
-            getInstance().write(eventTag + eventTime + "," + id + "," + x + "," + y + "," + size
-                    + "," + pressure);
-        }
-    }
-
-    public void write(final String log) {
-        mLoggingHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                createLogFileIfNotExist();
-                final long currentTime = System.currentTimeMillis();
-                mDate.setTime(currentTime);
-
-                final String printString = String.format(Locale.US, "%s\t%d\t%s\n",
-                        mDateFormat.format(mDate), currentTime, log);
-                if (LatinImeLogger.sDBG) {
-                    Log.d(USABILITY_TAG, "Write: " + log);
-                }
-                mWriter.print(printString);
-            }
-        });
-    }
-
-    private synchronized String getBufferedLogs() {
-        mWriter.flush();
-        final StringBuilder sb = new StringBuilder();
-        final BufferedReader br = getBufferedReader();
-        String line;
-        try {
-            while ((line = br.readLine()) != null) {
-                sb.append('\n');
-                sb.append(line);
-            }
-        } catch (final IOException e) {
-            Log.e(USABILITY_TAG, "Can't read log file.");
-        } finally {
-            if (LatinImeLogger.sDBG) {
-                Log.d(USABILITY_TAG, "Got all buffered logs\n" + sb.toString());
-            }
-            try {
-                br.close();
-            } catch (final IOException e) {
-                // ignore.
-            }
-        }
-        return sb.toString();
-    }
-
-    public void emailResearcherLogsAll() {
-        mLoggingHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                final Date date = new Date();
-                date.setTime(System.currentTimeMillis());
-                final String currentDateTimeString =
-                        new SimpleDateFormat("yyyyMMdd-HHmmssZ", Locale.US).format(date);
-                if (mFile == null) {
-                    Log.w(USABILITY_TAG, "No internal log file found.");
-                    return;
-                }
-                if (mIms.checkCallingOrSelfPermission(
-                            android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
-                                    != PackageManager.PERMISSION_GRANTED) {
-                    Log.w(USABILITY_TAG, "Doesn't have the permission WRITE_EXTERNAL_STORAGE");
-                    return;
-                }
-                mWriter.flush();
-                final String destPath = Environment.getExternalStorageDirectory()
-                        + "/research-" + currentDateTimeString + ".log";
-                final File destFile = new File(destPath);
-                try {
-                    final FileInputStream srcStream = new FileInputStream(mFile);
-                    final FileOutputStream destStream = new FileOutputStream(destFile);
-                    final FileChannel src = srcStream.getChannel();
-                    final FileChannel dest = destStream.getChannel();
-                    src.transferTo(0, src.size(), dest);
-                    src.close();
-                    srcStream.close();
-                    dest.close();
-                    destStream.close();
-                } catch (final FileNotFoundException e1) {
-                    Log.w(USABILITY_TAG, e1);
-                    return;
-                } catch (final IOException e2) {
-                    Log.w(USABILITY_TAG, e2);
-                    return;
-                }
-                if (!destFile.exists()) {
-                    Log.w(USABILITY_TAG, "Dest file doesn't exist.");
-                    return;
-                }
-                final Intent intent = new Intent(Intent.ACTION_SEND);
-                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                if (LatinImeLogger.sDBG) {
-                    Log.d(USABILITY_TAG, "Destination file URI is " + destFile.toURI());
-                }
-                intent.setType("text/plain");
-                intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + destPath));
-                intent.putExtra(Intent.EXTRA_SUBJECT,
-                        "[Research Logs] " + currentDateTimeString);
-                mIms.startActivity(intent);
-            }
-        });
-    }
-
-    public void printAll() {
-        mLoggingHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mIms.getCurrentInputConnection().commitText(getBufferedLogs(), 0);
-            }
-        });
-    }
-
-    public void clearAll() {
-        mLoggingHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (mFile != null && mFile.exists()) {
-                    if (LatinImeLogger.sDBG) {
-                        Log.d(USABILITY_TAG, "Delete log file.");
-                    }
-                    mFile.delete();
-                    mWriter.close();
-                }
-            }
-        });
-    }
-
-    private BufferedReader getBufferedReader() {
-        createLogFileIfNotExist();
-        try {
-            return new BufferedReader(new FileReader(mFile));
-        } catch (final FileNotFoundException e) {
-            return null;
-        }
-    }
-
-    private PrintWriter getPrintWriter(final File dir, final String filename,
-            final boolean renew) throws IOException {
-        mFile = new File(dir, filename);
-        if (mFile.exists()) {
-            if (renew) {
-                mFile.delete();
-            }
-        }
-        return new PrintWriter(new FileOutputStream(mFile), true /* autoFlush */);
-    }
-}
diff --git a/java/src/com/android/inputmethod/latin/utils/UserLogRingCharBuffer.java b/java/src/com/android/inputmethod/latin/utils/UserLogRingCharBuffer.java
deleted file mode 100644
index a75d353..0000000
--- a/java/src/com/android/inputmethod/latin/utils/UserLogRingCharBuffer.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import android.inputmethodservice.InputMethodService;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.LatinImeLogger;
-import com.android.inputmethod.latin.settings.Settings;
-
-public final class UserLogRingCharBuffer {
-    public /* for test */ static final int BUFSIZE = 20;
-    public /* for test */ int mLength = 0;
-
-    private static UserLogRingCharBuffer sUserLogRingCharBuffer = new UserLogRingCharBuffer();
-    private static final char PLACEHOLDER_DELIMITER_CHAR = '\uFFFC';
-    private static final int INVALID_COORDINATE = -2;
-    private boolean mEnabled = false;
-    private int mEnd = 0;
-    private char[] mCharBuf = new char[BUFSIZE];
-    private int[] mXBuf = new int[BUFSIZE];
-    private int[] mYBuf = new int[BUFSIZE];
-
-    private UserLogRingCharBuffer() {
-        // Intentional empty constructor for singleton.
-    }
-
-    @UsedForTesting
-    public static UserLogRingCharBuffer getInstance() {
-        return sUserLogRingCharBuffer;
-    }
-
-    public static UserLogRingCharBuffer init(final InputMethodService context,
-            final boolean enabled, final boolean usabilityStudy) {
-        if (!(enabled || usabilityStudy)) {
-            return null;
-        }
-        sUserLogRingCharBuffer.mEnabled = true;
-        UsabilityStudyLogUtils.getInstance().init(context);
-        return sUserLogRingCharBuffer;
-    }
-
-    private static int normalize(final int in) {
-        int ret = in % BUFSIZE;
-        return ret < 0 ? ret + BUFSIZE : ret;
-    }
-
-    // TODO: accept code points
-    @UsedForTesting
-    public void push(final char c, final int x, final int y) {
-        if (!mEnabled) {
-            return;
-        }
-        if (LatinImeLogger.sUsabilityStudy) {
-            UsabilityStudyLogUtils.getInstance().writeChar(c, x, y);
-        }
-        mCharBuf[mEnd] = c;
-        mXBuf[mEnd] = x;
-        mYBuf[mEnd] = y;
-        mEnd = normalize(mEnd + 1);
-        if (mLength < BUFSIZE) {
-            ++mLength;
-        }
-    }
-
-    public char pop() {
-        if (mLength < 1) {
-            return PLACEHOLDER_DELIMITER_CHAR;
-        }
-        mEnd = normalize(mEnd - 1);
-        --mLength;
-        return mCharBuf[mEnd];
-    }
-
-    public char getBackwardNthChar(final int n) {
-        if (mLength <= n || n < 0) {
-            return PLACEHOLDER_DELIMITER_CHAR;
-        }
-        return mCharBuf[normalize(mEnd - n - 1)];
-    }
-
-    public int getPreviousX(final char c, final int back) {
-        final int index = normalize(mEnd - 2 - back);
-        if (mLength <= back
-                || Character.toLowerCase(c) != Character.toLowerCase(mCharBuf[index])) {
-            return INVALID_COORDINATE;
-        }
-        return mXBuf[index];
-    }
-
-    public int getPreviousY(final char c, final int back) {
-        int index = normalize(mEnd - 2 - back);
-        if (mLength <= back
-                || Character.toLowerCase(c) != Character.toLowerCase(mCharBuf[index])) {
-            return INVALID_COORDINATE;
-        }
-        return mYBuf[index];
-    }
-
-    public String getLastWord(final int ignoreCharCount) {
-        final StringBuilder sb = new StringBuilder();
-        int i = ignoreCharCount;
-        for (; i < mLength; ++i) {
-            final char c = mCharBuf[normalize(mEnd - 1 - i)];
-            if (!Settings.getInstance().isWordSeparator(c)) {
-                break;
-            }
-        }
-        for (; i < mLength; ++i) {
-            char c = mCharBuf[normalize(mEnd - 1 - i)];
-            if (!Settings.getInstance().isWordSeparator(c)) {
-                sb.append(c);
-            } else {
-                break;
-            }
-        }
-        return sb.reverse().toString();
-    }
-
-    public void reset() {
-        mLength = 0;
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/BootBroadcastReceiver.java b/java/src/com/android/inputmethod/research/BootBroadcastReceiver.java
deleted file mode 100644
index 4f86526..0000000
--- a/java/src/com/android/inputmethod/research/BootBroadcastReceiver.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * Arrange for the uploading service to be run on regular intervals.
- */
-public final class BootBroadcastReceiver extends BroadcastReceiver {
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
-            UploaderService.cancelAndRescheduleUploadingService(context,
-                    true /* needsRescheduling */);
-        }
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/FeedbackActivity.java b/java/src/com/android/inputmethod/research/FeedbackActivity.java
deleted file mode 100644
index 520b88d..0000000
--- a/java/src/com/android/inputmethod/research/FeedbackActivity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-import com.android.inputmethod.latin.R;
-
-public class FeedbackActivity extends Activity {
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.research_feedback_activity);
-        final FeedbackLayout layout = (FeedbackLayout) findViewById(R.id.research_feedback_layout);
-        layout.setActivity(this);
-    }
-
-    @Override
-    public void onBackPressed() {
-        ResearchLogger.getInstance().onLeavingSendFeedbackDialog();
-        super.onBackPressed();
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/FeedbackFragment.java b/java/src/com/android/inputmethod/research/FeedbackFragment.java
deleted file mode 100644
index 75fbbf1..0000000
--- a/java/src/com/android/inputmethod/research/FeedbackFragment.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.Fragment;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.EditText;
-import android.widget.Toast;
-
-import com.android.inputmethod.latin.R;
-
-public class FeedbackFragment extends Fragment implements OnClickListener {
-    private static final String TAG = FeedbackFragment.class.getSimpleName();
-
-    public static final String KEY_FEEDBACK_STRING = "FeedbackString";
-    public static final String KEY_INCLUDE_ACCOUNT_NAME = "IncludeAccountName";
-    public static final String KEY_HAS_USER_RECORDING = "HasRecording";
-
-    private EditText mEditText;
-    private CheckBox mIncludingAccountNameCheckBox;
-    private CheckBox mIncludingUserRecordingCheckBox;
-    private Button mSendButton;
-    private Button mCancelButton;
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        final View view = inflater.inflate(R.layout.research_feedback_fragment_layout, container,
-                false);
-        mEditText = (EditText) view.findViewById(R.id.research_feedback_contents);
-        mEditText.requestFocus();
-        mIncludingAccountNameCheckBox = (CheckBox) view.findViewById(
-                R.id.research_feedback_include_account_name);
-        mIncludingUserRecordingCheckBox = (CheckBox) view.findViewById(
-                R.id.research_feedback_include_recording_checkbox);
-        mIncludingUserRecordingCheckBox.setOnClickListener(this);
-
-        mSendButton = (Button) view.findViewById(R.id.research_feedback_send_button);
-        mSendButton.setOnClickListener(this);
-        mCancelButton = (Button) view.findViewById(R.id.research_feedback_cancel_button);
-        mCancelButton.setOnClickListener(this);
-
-        if (savedInstanceState != null) {
-            restoreState(savedInstanceState);
-        } else {
-            final Bundle bundle = getActivity().getIntent().getExtras();
-            if (bundle != null) {
-                restoreState(bundle);
-            }
-        }
-        return view;
-    }
-
-    @Override
-    public void onClick(final View view) {
-        final ResearchLogger researchLogger = ResearchLogger.getInstance();
-        if (view == mIncludingUserRecordingCheckBox) {
-            if (mIncludingUserRecordingCheckBox.isChecked()) {
-                final Bundle bundle = new Bundle();
-                onSaveInstanceState(bundle);
-
-                // Let the user make a recording
-                getActivity().finish();
-
-                researchLogger.setFeedbackDialogBundle(bundle);
-                researchLogger.onLeavingSendFeedbackDialog();
-                researchLogger.startRecording();
-            }
-        } else if (view == mSendButton) {
-            final Editable editable = mEditText.getText();
-            final String feedbackContents = editable.toString();
-            if (TextUtils.isEmpty(feedbackContents)) {
-                Toast.makeText(getActivity(),
-                        R.string.research_feedback_empty_feedback_error_message,
-                        Toast.LENGTH_LONG).show();
-            } else {
-                final boolean isIncludingAccountName = mIncludingAccountNameCheckBox.isChecked();
-                researchLogger.sendFeedback(feedbackContents, false /* isIncludingHistory */,
-                        isIncludingAccountName, mIncludingUserRecordingCheckBox.isChecked());
-                getActivity().finish();
-                researchLogger.setFeedbackDialogBundle(null);
-                researchLogger.onLeavingSendFeedbackDialog();
-            }
-        } else if (view == mCancelButton) {
-            Log.d(TAG, "Finishing");
-            getActivity().finish();
-            researchLogger.setFeedbackDialogBundle(null);
-            researchLogger.onLeavingSendFeedbackDialog();
-        } else {
-            Log.e(TAG, "Unknown view passed to FeedbackFragment.onClick()");
-        }
-    }
-
-    @Override
-    public void onSaveInstanceState(final Bundle bundle) {
-        final String savedFeedbackString = mEditText.getText().toString();
-
-        bundle.putString(KEY_FEEDBACK_STRING, savedFeedbackString);
-        bundle.putBoolean(KEY_INCLUDE_ACCOUNT_NAME, mIncludingAccountNameCheckBox.isChecked());
-        bundle.putBoolean(KEY_HAS_USER_RECORDING, mIncludingUserRecordingCheckBox.isChecked());
-    }
-
-    private void restoreState(final Bundle bundle) {
-        mEditText.setText(bundle.getString(KEY_FEEDBACK_STRING));
-        mIncludingAccountNameCheckBox.setChecked(bundle.getBoolean(KEY_INCLUDE_ACCOUNT_NAME));
-        mIncludingUserRecordingCheckBox.setChecked(bundle.getBoolean(KEY_HAS_USER_RECORDING));
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/FeedbackLayout.java b/java/src/com/android/inputmethod/research/FeedbackLayout.java
deleted file mode 100644
index d283d14..0000000
--- a/java/src/com/android/inputmethod/research/FeedbackLayout.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.Activity;
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.KeyEvent;
-import android.widget.LinearLayout;
-
-public class FeedbackLayout extends LinearLayout {
-    private Activity mActivity;
-
-    public FeedbackLayout(Context context) {
-        super(context);
-    }
-
-    public FeedbackLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public FeedbackLayout(Context context, AttributeSet attrs, int defstyle) {
-        super(context, attrs, defstyle);
-    }
-
-    public void setActivity(Activity activity) {
-        mActivity = activity;
-    }
-
-    @Override
-    public boolean dispatchKeyEventPreIme(KeyEvent event) {
-        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
-            KeyEvent.DispatcherState state = getKeyDispatcherState();
-            if (state != null) {
-                if (event.getAction() == KeyEvent.ACTION_DOWN
-                        && event.getRepeatCount() == 0) {
-                    state.startTracking(event, this);
-                    return true;
-                } else if (event.getAction() == KeyEvent.ACTION_UP
-                        && !event.isCanceled() && state.isTracking(event)) {
-                    mActivity.onBackPressed();
-                    return true;
-                }
-            }
-        }
-        return super.dispatchKeyEventPreIme(event);
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/FeedbackLog.java b/java/src/com/android/inputmethod/research/FeedbackLog.java
deleted file mode 100644
index 5af194c..0000000
--- a/java/src/com/android/inputmethod/research/FeedbackLog.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.Context;
-
-import java.io.File;
-
-public class FeedbackLog extends ResearchLog {
-    public FeedbackLog(final File outputFile, final Context context) {
-        super(outputFile, context);
-    }
-
-    @Override
-    public boolean isFeedbackLog() {
-        return true;
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/FixedLogBuffer.java b/java/src/com/android/inputmethod/research/FixedLogBuffer.java
deleted file mode 100644
index 8b64de8..0000000
--- a/java/src/com/android/inputmethod/research/FixedLogBuffer.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-
-/**
- * A buffer that holds a fixed number of LogUnits.
- *
- * LogUnits are added in and shifted out in temporal order.  Only a subset of the LogUnits are
- * actual words; the other LogUnits do not count toward the word limit.  Once the buffer reaches
- * capacity, adding another LogUnit that is a word evicts the oldest LogUnits out one at a time to
- * stay under the capacity limit.
- *
- * This variant of a LogBuffer has a limited memory footprint because of its limited size.  This
- * makes it useful, for example, for recording a window of the user's most recent actions in case
- * they want to report an observed error that they do not know how to reproduce.
- */
-public class FixedLogBuffer extends LogBuffer {
-    /* package for test */ int mWordCapacity;
-    // The number of members of mLogUnits that are actual words.
-    private int mNumActualWords;
-
-    /**
-     * Create a new LogBuffer that can hold a fixed number of LogUnits that are words (and
-     * unlimited number of non-word LogUnits), and that outputs its result to a researchLog.
-     *
-     * @param wordCapacity maximum number of words
-     */
-    public FixedLogBuffer(final int wordCapacity) {
-        super();
-        if (wordCapacity <= 0) {
-            throw new IllegalArgumentException("wordCapacity must be 1 or greater.");
-        }
-        mWordCapacity = wordCapacity;
-        mNumActualWords = 0;
-    }
-
-    /**
-     * Adds a new LogUnit to the front of the LIFO queue, evicting existing LogUnit's
-     * (oldest first) if word capacity is reached.
-     */
-    @Override
-    public void shiftIn(final LogUnit newLogUnit) {
-        if (!newLogUnit.hasOneOrMoreWords()) {
-            // This LogUnit doesn't contain any word, so it doesn't count toward the word-limit.
-            super.shiftIn(newLogUnit);
-            return;
-        }
-        final int numWordsIncoming = newLogUnit.getNumWords();
-        if (mNumActualWords >= mWordCapacity) {
-            // Give subclass a chance to handle the buffer full condition by shifting out logUnits.
-            // TODO: Tell onBufferFull() how much space it needs to make to avoid forced eviction.
-            onBufferFull();
-            // If still full, evict.
-            if (mNumActualWords >= mWordCapacity) {
-                shiftOutWords(numWordsIncoming);
-            }
-        }
-        super.shiftIn(newLogUnit);
-        mNumActualWords += numWordsIncoming;
-    }
-
-    @Override
-    public LogUnit unshiftIn() {
-        final LogUnit logUnit = super.unshiftIn();
-        if (logUnit != null && logUnit.hasOneOrMoreWords()) {
-            mNumActualWords -= logUnit.getNumWords();
-        }
-        return logUnit;
-    }
-
-    public int getNumWords() {
-        return mNumActualWords;
-    }
-
-    /**
-     * Removes all LogUnits from the buffer without calling onShiftOut().
-     */
-    @Override
-    public void clear() {
-        super.clear();
-        mNumActualWords = 0;
-    }
-
-    /**
-     * Called when the buffer has just shifted in one more word than its maximum, and its about to
-     * shift out LogUnits to bring it back down to the maximum.
-     *
-     * Base class does nothing; subclasses may override if they want to record non-privacy sensitive
-     * events that fall off the end.
-     */
-    protected void onBufferFull() {
-    }
-
-    @Override
-    public LogUnit shiftOut() {
-        final LogUnit logUnit = super.shiftOut();
-        if (logUnit != null && logUnit.hasOneOrMoreWords()) {
-            mNumActualWords -= logUnit.getNumWords();
-        }
-        return logUnit;
-    }
-
-    /**
-     * Remove LogUnits from the front of the LogBuffer until {@code numWords} have been removed.
-     *
-     * If there are less than {@code numWords} in the buffer, shifts out all {@code LogUnit}s.
-     *
-     * @param numWords the minimum number of words in {@link LogUnit}s to shift out
-     * @return the number of actual words LogUnit}s shifted out
-     */
-    protected int shiftOutWords(final int numWords) {
-        int numWordsShiftedOut = 0;
-        do {
-            final LogUnit logUnit = shiftOut();
-            if (logUnit == null) break;
-            numWordsShiftedOut += logUnit.getNumWords();
-        } while (numWordsShiftedOut < numWords);
-        return numWordsShiftedOut;
-    }
-
-    public void shiftOutAll() {
-        final LinkedList<LogUnit> logUnits = getLogUnits();
-        while (!logUnits.isEmpty()) {
-            shiftOut();
-        }
-        mNumActualWords = 0;
-    }
-
-    /**
-     * Returns a list of {@link LogUnit}s at the front of the buffer that have words associated with
-     * them.
-     *
-     * There will be no more than {@code n} words in the returned list.  So if 2 words are
-     * requested, and the first LogUnit has 3 words, it is not returned.  If 2 words are requested,
-     * and the first LogUnit has only 1 word, and the next LogUnit 2 words, only the first LogUnit
-     * is returned.  If the first LogUnit has no words associated with it, and the second LogUnit
-     * has three words, then only the first LogUnit (which has no associated words) is returned.  If
-     * there are not enough LogUnits in the buffer to meet the word requirement, then all LogUnits
-     * will be returned.
-     *
-     * @param n The maximum number of {@link LogUnit}s with words to return.
-     * @return The list of the {@link LogUnit}s containing the first n words
-     */
-    public ArrayList<LogUnit> peekAtFirstNWords(int n) {
-        final LinkedList<LogUnit> logUnits = getLogUnits();
-        // Allocate space for n*2 logUnits.  There will be at least n, one for each word, and
-        // there may be additional for punctuation, between-word commands, etc.  This should be
-        // enough that reallocation won't be necessary.
-        final ArrayList<LogUnit> resultList = new ArrayList<LogUnit>(n * 2);
-        for (final LogUnit logUnit : logUnits) {
-            n -= logUnit.getNumWords();
-            if (n < 0) break;
-            resultList.add(logUnit);
-        }
-        return resultList;
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/JsonUtils.java b/java/src/com/android/inputmethod/research/JsonUtils.java
deleted file mode 100644
index 6170b43..0000000
--- a/java/src/com/android/inputmethod/research/JsonUtils.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.SharedPreferences;
-import android.util.JsonWriter;
-import android.view.MotionEvent;
-import android.view.inputmethod.CompletionInfo;
-
-import com.android.inputmethod.keyboard.Key;
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-
-import java.io.IOException;
-import java.util.Map;
-
-/**
- * Routines for mapping classes and variables to JSON representations for logging.
- */
-/* package */ class JsonUtils {
-    private JsonUtils() {
-        // This utility class is not publicly instantiable.
-    }
-
-    /* package */ static void writeJson(final CompletionInfo[] ci, final JsonWriter jsonWriter)
-            throws IOException {
-        jsonWriter.beginArray();
-        for (int j = 0; j < ci.length; j++) {
-            jsonWriter.value(ci[j].toString());
-        }
-        jsonWriter.endArray();
-    }
-
-    /* package */ static void writeJson(final SharedPreferences prefs, final JsonWriter jsonWriter)
-            throws IOException {
-        jsonWriter.beginObject();
-        for (Map.Entry<String,?> entry : prefs.getAll().entrySet()) {
-            jsonWriter.name(entry.getKey());
-            final Object innerValue = entry.getValue();
-            if (innerValue == null) {
-                jsonWriter.nullValue();
-            } else if (innerValue instanceof Boolean) {
-                jsonWriter.value((Boolean) innerValue);
-            } else if (innerValue instanceof Number) {
-                jsonWriter.value((Number) innerValue);
-            } else {
-                jsonWriter.value(innerValue.toString());
-            }
-        }
-        jsonWriter.endObject();
-    }
-
-    /* package */ static void writeJson(final Key[] keys, final JsonWriter jsonWriter)
-            throws IOException {
-        jsonWriter.beginArray();
-        for (Key key : keys) {
-            writeJson(key, jsonWriter);
-        }
-        jsonWriter.endArray();
-    }
-
-    private static void writeJson(final Key key, final JsonWriter jsonWriter) throws IOException {
-        jsonWriter.beginObject();
-        jsonWriter.name("code").value(key.getCode());
-        jsonWriter.name("altCode").value(key.getAltCode());
-        jsonWriter.name("x").value(key.getX());
-        jsonWriter.name("y").value(key.getY());
-        jsonWriter.name("w").value(key.getWidth());
-        jsonWriter.name("h").value(key.getHeight());
-        jsonWriter.endObject();
-    }
-
-    /* package */ static void writeJson(final SuggestedWords words, final JsonWriter jsonWriter)
-            throws IOException {
-        jsonWriter.beginObject();
-        jsonWriter.name("typedWordValid").value(words.mTypedWordValid);
-        jsonWriter.name("willAutoCorrect")
-                .value(words.mWillAutoCorrect);
-        jsonWriter.name("isPunctuationSuggestions")
-                .value(words.isPunctuationSuggestions());
-        jsonWriter.name("isObsoleteSuggestions").value(words.mIsObsoleteSuggestions);
-        jsonWriter.name("isPrediction").value(words.mIsPrediction);
-        jsonWriter.name("suggestedWords");
-        jsonWriter.beginArray();
-        final int size = words.size();
-        for (int j = 0; j < size; j++) {
-            final SuggestedWordInfo wordInfo = words.getInfo(j);
-            jsonWriter.beginObject();
-            jsonWriter.name("word").value(wordInfo.toString());
-            jsonWriter.name("score").value(wordInfo.mScore);
-            jsonWriter.name("kind").value(wordInfo.mKind);
-            jsonWriter.name("sourceDict").value(wordInfo.mSourceDict.mDictType);
-            jsonWriter.endObject();
-        }
-        jsonWriter.endArray();
-        jsonWriter.endObject();
-    }
-
-    /* package */ static void writeJson(final MotionEvent me, final JsonWriter jsonWriter)
-            throws IOException {
-        jsonWriter.beginObject();
-        jsonWriter.name("pointerIds");
-        jsonWriter.beginArray();
-        final int pointerCount = me.getPointerCount();
-        for (int index = 0; index < pointerCount; index++) {
-            jsonWriter.value(me.getPointerId(index));
-        }
-        jsonWriter.endArray();
-
-        jsonWriter.name("xyt");
-        jsonWriter.beginArray();
-        final int historicalSize = me.getHistorySize();
-        for (int index = 0; index < historicalSize; index++) {
-            jsonWriter.beginObject();
-            jsonWriter.name("t");
-            jsonWriter.value(me.getHistoricalEventTime(index));
-            jsonWriter.name("d");
-            jsonWriter.beginArray();
-            for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) {
-                jsonWriter.beginObject();
-                jsonWriter.name("x");
-                jsonWriter.value(me.getHistoricalX(pointerIndex, index));
-                jsonWriter.name("y");
-                jsonWriter.value(me.getHistoricalY(pointerIndex, index));
-                jsonWriter.endObject();
-            }
-            jsonWriter.endArray();
-            jsonWriter.endObject();
-        }
-        jsonWriter.beginObject();
-        jsonWriter.name("t");
-        jsonWriter.value(me.getEventTime());
-        jsonWriter.name("d");
-        jsonWriter.beginArray();
-        for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) {
-            jsonWriter.beginObject();
-            jsonWriter.name("x");
-            jsonWriter.value(me.getX(pointerIndex));
-            jsonWriter.name("y");
-            jsonWriter.value(me.getY(pointerIndex));
-            jsonWriter.endObject();
-        }
-        jsonWriter.endArray();
-        jsonWriter.endObject();
-        jsonWriter.endArray();
-        jsonWriter.endObject();
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/LogBuffer.java b/java/src/com/android/inputmethod/research/LogBuffer.java
deleted file mode 100644
index b07b761..0000000
--- a/java/src/com/android/inputmethod/research/LogBuffer.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import java.util.LinkedList;
-
-/**
- * Maintain a FIFO queue of LogUnits.
- *
- * This class provides an unbounded queue.  This is useful when the user is aware that their actions
- * are being recorded, such as when they are trying to reproduce a bug.  In this case, there should
- * not be artificial restrictions on how many events that can be saved.
- */
-public class LogBuffer {
-    // TODO: Gracefully handle situations in which this LogBuffer is consuming too much memory.
-    // This may happen, for example, if the user has forgotten that data is being logged.
-    private final LinkedList<LogUnit> mLogUnits;
-
-    public LogBuffer() {
-        mLogUnits = new LinkedList<LogUnit>();
-    }
-
-    protected LinkedList<LogUnit> getLogUnits() {
-        return mLogUnits;
-    }
-
-    public void clear() {
-        mLogUnits.clear();
-    }
-
-    public void shiftIn(final LogUnit logUnit) {
-        mLogUnits.add(logUnit);
-    }
-
-    public LogUnit unshiftIn() {
-        if (mLogUnits.isEmpty()) {
-            return null;
-        }
-        return mLogUnits.removeLast();
-    }
-
-    public LogUnit peekLastLogUnit() {
-        if (mLogUnits.isEmpty()) {
-            return null;
-        }
-        return mLogUnits.peekLast();
-    }
-
-    public boolean isEmpty() {
-        return mLogUnits.isEmpty();
-    }
-
-    public LogUnit shiftOut() {
-        if (isEmpty()) {
-            return null;
-        }
-        return mLogUnits.removeFirst();
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/LogStatement.java b/java/src/com/android/inputmethod/research/LogStatement.java
deleted file mode 100644
index 06b918a..0000000
--- a/java/src/com/android/inputmethod/research/LogStatement.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.SharedPreferences;
-import android.util.JsonWriter;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.inputmethod.CompletionInfo;
-
-import com.android.inputmethod.keyboard.Key;
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.IOException;
-
-/**
- * A template for typed information stored in the logs.
- *
- * A LogStatement contains a name, keys, and flags about whether the {@code Object[] values}
- * associated with the {@code String[] keys} are likely to reveal information about the user.  The
- * actual values are stored separately.
- */
-public class LogStatement {
-    private static final String TAG = LogStatement.class.getSimpleName();
-    private static final boolean DEBUG = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-
-    // Constants for particular statements
-    public static final String TYPE_POINTER_TRACKER_CALL_LISTENER_ON_CODE_INPUT =
-            "PointerTrackerCallListenerOnCodeInput";
-    public static final String KEY_CODE = "code";
-    public static final String VALUE_RESEARCH = "research";
-    public static final String TYPE_MAIN_KEYBOARD_VIEW_ON_LONG_PRESS =
-            "MainKeyboardViewOnLongPress";
-    public static final String ACTION = "action";
-    public static final String VALUE_DOWN = "DOWN";
-    public static final String TYPE_MOTION_EVENT = "MotionEvent";
-    public static final String KEY_IS_LOGGING_RELATED = "isLoggingRelated";
-
-    // Keys for internal key/value pairs
-    private static final String CURRENT_TIME_KEY = "_ct";
-    private static final String UPTIME_KEY = "_ut";
-    private static final String EVENT_TYPE_KEY = "_ty";
-
-    // Name specifying the LogStatement type.
-    private final String mType;
-
-    // mIsPotentiallyPrivate indicates that event contains potentially private information.  If
-    // the word that this event is a part of is determined to be privacy-sensitive, then this
-    // event should not be included in the output log.  The system waits to output until the
-    // containing word is known.
-    private final boolean mIsPotentiallyPrivate;
-
-    // mIsPotentiallyRevealing indicates that this statement may disclose details about other
-    // words typed in other LogUnits.  This can happen if the user is not inserting spaces, and
-    // data from Suggestions and/or Composing text reveals the entire "megaword".  For example,
-    // say the user is typing "for the win", and the system wants to record the bigram "the
-    // win".  If the user types "forthe", omitting the space, the system will give "for the" as
-    // a suggestion.  If the user accepts the autocorrection, the suggestion for "for the" is
-    // included in the log for the word "the", disclosing that the previous word had been "for".
-    // For now, we simply do not include this data when logging part of a "megaword".
-    private final boolean mIsPotentiallyRevealing;
-
-    // mKeys stores the names that are the attributes in the output json objects
-    private final String[] mKeys;
-    private static final String[] NULL_KEYS = new String[0];
-
-    LogStatement(final String name, final boolean isPotentiallyPrivate,
-            final boolean isPotentiallyRevealing, final String... keys) {
-        mType = name;
-        mIsPotentiallyPrivate = isPotentiallyPrivate;
-        mIsPotentiallyRevealing = isPotentiallyRevealing;
-        mKeys = (keys == null) ? NULL_KEYS : keys;
-    }
-
-    public String getType() {
-        return mType;
-    }
-
-    public boolean isPotentiallyPrivate() {
-        return mIsPotentiallyPrivate;
-    }
-
-    public boolean isPotentiallyRevealing() {
-        return mIsPotentiallyRevealing;
-    }
-
-    public String[] getKeys() {
-        return mKeys;
-    }
-
-    /**
-     * Utility function to test whether a key-value pair exists in a LogStatement.
-     *
-     * A LogStatement is really just a template -- it does not contain the values, only the
-     * keys.  So the values must be passed in as an argument.
-     *
-     * @param queryKey the String that is tested by {@code String.equals()} to the keys in the
-     * LogStatement
-     * @param queryValue an Object that must be {@code Object.equals()} to the key's corresponding
-     * value in the {@code values} array
-     * @param values the values corresponding to mKeys
-     *
-     * @returns {@true} if {@code queryKey} exists in the keys for this LogStatement, and {@code
-     * queryValue} matches the corresponding value in {@code values}
-     *
-     * @throws IllegalArgumentException if {@code values.length} is not equal to keys().length()
-     */
-    public boolean containsKeyValuePair(final String queryKey, final Object queryValue,
-            final Object[] values) {
-        if (mKeys.length != values.length) {
-            throw new IllegalArgumentException("Mismatched number of keys and values.");
-        }
-        final int length = mKeys.length;
-        for (int i = 0; i < length; i++) {
-            if (mKeys[i].equals(queryKey) && values[i].equals(queryValue)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Utility function to set a value in a LogStatement.
-     *
-     * A LogStatement is really just a template -- it does not contain the values, only the
-     * keys.  So the values must be passed in as an argument.
-     *
-     * @param queryKey the String that is tested by {@code String.equals()} to the keys in the
-     * LogStatement
-     * @param values the array of values corresponding to mKeys
-     * @param newValue the replacement value to go into the {@code values} array
-     *
-     * @returns {@true} if the key exists and the value was successfully set, {@false} otherwise
-     *
-     * @throws IllegalArgumentException if {@code values.length} is not equal to keys().length()
-     */
-    public boolean setValue(final String queryKey, final Object[] values, final Object newValue) {
-        if (mKeys.length != values.length) {
-            throw new IllegalArgumentException("Mismatched number of keys and values.");
-        }
-        final int length = mKeys.length;
-        for (int i = 0; i < length; i++) {
-            if (mKeys[i].equals(queryKey)) {
-                values[i] = newValue;
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Write the contents out through jsonWriter.
-     *
-     * The JsonWriter class must have already had {@code JsonWriter.beginArray} called on it.
-     *
-     * Note that this method is not thread safe for the same jsonWriter.  Callers must ensure
-     * thread safety.
-     */
-    public boolean outputToLocked(final JsonWriter jsonWriter, final Long time,
-            final Object... values) {
-        if (DEBUG) {
-            if (mKeys.length != values.length) {
-                Log.d(TAG, "Key and Value list sizes do not match. " + mType);
-            }
-        }
-        try {
-            jsonWriter.beginObject();
-            jsonWriter.name(CURRENT_TIME_KEY).value(System.currentTimeMillis());
-            jsonWriter.name(UPTIME_KEY).value(time);
-            jsonWriter.name(EVENT_TYPE_KEY).value(mType);
-            final int length = values.length;
-            for (int i = 0; i < length; i++) {
-                jsonWriter.name(mKeys[i]);
-                final Object value = values[i];
-                if (value instanceof CharSequence) {
-                    jsonWriter.value(value.toString());
-                } else if (value instanceof Number) {
-                    jsonWriter.value((Number) value);
-                } else if (value instanceof Boolean) {
-                    jsonWriter.value((Boolean) value);
-                } else if (value instanceof CompletionInfo[]) {
-                    JsonUtils.writeJson((CompletionInfo[]) value, jsonWriter);
-                } else if (value instanceof SharedPreferences) {
-                    JsonUtils.writeJson((SharedPreferences) value, jsonWriter);
-                } else if (value instanceof Key[]) {
-                    JsonUtils.writeJson((Key[]) value, jsonWriter);
-                } else if (value instanceof SuggestedWords) {
-                    JsonUtils.writeJson((SuggestedWords) value, jsonWriter);
-                } else if (value instanceof MotionEvent) {
-                    JsonUtils.writeJson((MotionEvent) value, jsonWriter);
-                } else if (value == null) {
-                    jsonWriter.nullValue();
-                } else {
-                    if (DEBUG) {
-                        Log.w(TAG, "Unrecognized type to be logged: "
-                                + (value == null ? "<null>" : value.getClass().getName()));
-                    }
-                    jsonWriter.nullValue();
-                }
-            }
-            jsonWriter.endObject();
-        } catch (IOException e) {
-            e.printStackTrace();
-            Log.w(TAG, "Error in JsonWriter; skipping LogStatement");
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/LogUnit.java b/java/src/com/android/inputmethod/research/LogUnit.java
deleted file mode 100644
index 3366df1..0000000
--- a/java/src/com/android/inputmethod/research/LogUnit.java
+++ /dev/null
@@ -1,496 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.os.SystemClock;
-import android.text.TextUtils;
-import android.util.JsonWriter;
-import android.util.Log;
-
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.regex.Pattern;
-
-/**
- * A group of log statements related to each other.
- *
- * A LogUnit is collection of LogStatements, each of which is generated by at a particular point
- * in the code.  (There is no LogStatement class; the data is stored across the instance variables
- * here.)  A single LogUnit's statements can correspond to all the calls made while in the same
- * composing region, or all the calls between committing the last composing region, and the first
- * character of the next composing region.
- *
- * Individual statements in a log may be marked as potentially private.  If so, then they are only
- * published to a ResearchLog if the ResearchLogger determines that publishing the entire LogUnit
- * will not violate the user's privacy.  Checks for this may include whether other LogUnits have
- * been published recently, or whether the LogUnit contains numbers, etc.
- */
-public class LogUnit {
-    private static final String TAG = LogUnit.class.getSimpleName();
-    private static final boolean DEBUG = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-
-    private static final Pattern WHITESPACE_PATTERN = Pattern.compile("\\s+");
-    private static final String[] EMPTY_STRING_ARRAY = new String[0];
-
-    private final ArrayList<LogStatement> mLogStatementList;
-    private final ArrayList<Object[]> mValuesList;
-    // Assume that mTimeList is sorted in increasing order.  Do not insert null values into
-    // mTimeList.
-    private final ArrayList<Long> mTimeList;
-    // Words that this LogUnit generates.  Should be null if the data in the LogUnit does not
-    // generate a genuine word (i.e. separators alone do not count as a word).  Should never be
-    // empty.  Note that if the user types spaces explicitly, then normally mWords should contain
-    // only a single word; it will only contain space-separate multiple words if the user does not
-    // enter a space, and the system enters one automatically.
-    private String mWords;
-    private String[] mWordArray = EMPTY_STRING_ARRAY;
-    private boolean mMayContainDigit;
-    private boolean mIsPartOfMegaword;
-    private boolean mContainsUserDeletions;
-
-    // mCorrectionType indicates whether the word was corrected at all, and if so, the nature of the
-    // correction.
-    private int mCorrectionType;
-    // LogUnits start in this state.  If a word is entered without being corrected, it will have
-    // this CorrectiontType.
-    public static final int CORRECTIONTYPE_NO_CORRECTION = 0;
-    // The LogUnit was corrected manually by the user in an unspecified way.
-    public static final int CORRECTIONTYPE_CORRECTION = 1;
-    // The LogUnit was corrected manually by the user to a word not in the list of suggestions of
-    // the first word typed here.  (Note: this is a heuristic value, it may be incorrect, for
-    // example, if the user repositions the cursor).
-    public static final int CORRECTIONTYPE_DIFFERENT_WORD = 2;
-    // The LogUnit was corrected manually by the user to a word that was in the list of suggestions
-    // of the first word typed here.  (Again, a heuristic).  It is probably a typo correction.
-    public static final int CORRECTIONTYPE_TYPO = 3;
-    // TODO: Rather than just tracking the current state, keep a historical record of the LogUnit's
-    // state and statistics.  This should include how many times it has been corrected, whether
-    // other LogUnit edits were done between edits to this LogUnit, etc.  Also track when a LogUnit
-    // previously contained a word, but was corrected to empty (because it was deleted, and there is
-    // no known replacement).
-
-    private SuggestedWords mSuggestedWords;
-
-    public LogUnit() {
-        mLogStatementList = new ArrayList<LogStatement>();
-        mValuesList = new ArrayList<Object[]>();
-        mTimeList = new ArrayList<Long>();
-        mIsPartOfMegaword = false;
-        mCorrectionType = CORRECTIONTYPE_NO_CORRECTION;
-        mSuggestedWords = null;
-    }
-
-    private LogUnit(final ArrayList<LogStatement> logStatementList,
-            final ArrayList<Object[]> valuesList,
-            final ArrayList<Long> timeList,
-            final boolean isPartOfMegaword) {
-        mLogStatementList = logStatementList;
-        mValuesList = valuesList;
-        mTimeList = timeList;
-        mIsPartOfMegaword = isPartOfMegaword;
-        mCorrectionType = CORRECTIONTYPE_NO_CORRECTION;
-        mSuggestedWords = null;
-    }
-
-    private static final Object[] NULL_VALUES = new Object[0];
-    /**
-     * Adds a new log statement.  The time parameter in successive calls to this method must be
-     * monotonically increasing, or splitByTime() will not work.
-     */
-    public void addLogStatement(final LogStatement logStatement, final long time,
-            Object... values) {
-        if (values == null) {
-            values = NULL_VALUES;
-        }
-        mLogStatementList.add(logStatement);
-        mValuesList.add(values);
-        mTimeList.add(time);
-    }
-
-    /**
-     * Publish the contents of this LogUnit to {@code researchLog}.
-     *
-     * For each publishable {@code LogStatement}, invoke {@link LogStatement#outputToLocked}.
-     *
-     * @param researchLog where to publish the contents of this {@code LogUnit}
-     * @param canIncludePrivateData whether the private data in this {@code LogUnit} should be
-     * included
-     *
-     * @throws IOException if publication to the log file is not possible
-     */
-    public synchronized void publishTo(final ResearchLog researchLog,
-            final boolean canIncludePrivateData) throws IOException {
-        // Write out any logStatement that passes the privacy filter.
-        final int size = mLogStatementList.size();
-        if (size != 0) {
-            // Note that jsonWriter is only set to a non-null value if the logUnit start text is
-            // output and at least one logStatement is output.
-            JsonWriter jsonWriter = researchLog.getInitializedJsonWriterLocked();
-            outputLogUnitStart(jsonWriter, canIncludePrivateData);
-            for (int i = 0; i < size; i++) {
-                final LogStatement logStatement = mLogStatementList.get(i);
-                if (!canIncludePrivateData && logStatement.isPotentiallyPrivate()) {
-                    continue;
-                }
-                if (mIsPartOfMegaword && logStatement.isPotentiallyRevealing()) {
-                    continue;
-                }
-                logStatement.outputToLocked(jsonWriter, mTimeList.get(i), mValuesList.get(i));
-            }
-            outputLogUnitStop(jsonWriter);
-        }
-    }
-
-    private static final String WORD_KEY = "_wo";
-    private static final String NUM_WORDS_KEY = "_nw";
-    private static final String CORRECTION_TYPE_KEY = "_corType";
-    private static final String LOG_UNIT_BEGIN_KEY = "logUnitStart";
-    private static final String LOG_UNIT_END_KEY = "logUnitEnd";
-
-    final LogStatement LOGSTATEMENT_LOG_UNIT_BEGIN_WITH_PRIVATE_DATA =
-            new LogStatement(LOG_UNIT_BEGIN_KEY, false /* isPotentiallyPrivate */,
-                    false /* isPotentiallyRevealing */, WORD_KEY, CORRECTION_TYPE_KEY,
-                    NUM_WORDS_KEY);
-    final LogStatement LOGSTATEMENT_LOG_UNIT_BEGIN_WITHOUT_PRIVATE_DATA =
-            new LogStatement(LOG_UNIT_BEGIN_KEY, false /* isPotentiallyPrivate */,
-                    false /* isPotentiallyRevealing */, NUM_WORDS_KEY);
-    private void outputLogUnitStart(final JsonWriter jsonWriter,
-            final boolean canIncludePrivateData) {
-        final LogStatement logStatement;
-        if (canIncludePrivateData) {
-            LOGSTATEMENT_LOG_UNIT_BEGIN_WITH_PRIVATE_DATA.outputToLocked(jsonWriter,
-                    SystemClock.uptimeMillis(), getWordsAsString(), getCorrectionType(),
-                    getNumWords());
-        } else {
-            LOGSTATEMENT_LOG_UNIT_BEGIN_WITHOUT_PRIVATE_DATA.outputToLocked(jsonWriter,
-                    SystemClock.uptimeMillis(), getNumWords());
-        }
-    }
-
-    final LogStatement LOGSTATEMENT_LOG_UNIT_END =
-            new LogStatement(LOG_UNIT_END_KEY, false /* isPotentiallyPrivate */,
-                    false /* isPotentiallyRevealing */);
-    private void outputLogUnitStop(final JsonWriter jsonWriter) {
-        LOGSTATEMENT_LOG_UNIT_END.outputToLocked(jsonWriter, SystemClock.uptimeMillis());
-    }
-
-    /**
-     * Mark the current logUnit as containing data to generate {@code newWords}.
-     *
-     * If {@code setWord()} was previously called for this LogUnit, then the method will try to
-     * determine what kind of correction it is, and update its internal state of the correctionType
-     * accordingly.
-     *
-     * @param newWords The words this LogUnit generates.  Caller should not pass null or the empty
-     * string.
-     */
-    public void setWords(final String newWords) {
-        if (hasOneOrMoreWords()) {
-            // The word was already set once, and it is now being changed.  See if the new word
-            // is close to the old word.  If so, then the change is probably a typo correction.
-            // If not, the user may have decided to enter a different word, so flag it.
-            if (mSuggestedWords != null) {
-                if (isInSuggestedWords(newWords, mSuggestedWords)) {
-                    mCorrectionType = CORRECTIONTYPE_TYPO;
-                } else {
-                    mCorrectionType = CORRECTIONTYPE_DIFFERENT_WORD;
-                }
-            } else {
-                // No suggested words, so it's not clear whether it's a typo or different word.
-                // Mark it as a generic correction.
-                mCorrectionType = CORRECTIONTYPE_CORRECTION;
-            }
-        } else {
-            mCorrectionType = CORRECTIONTYPE_NO_CORRECTION;
-        }
-        mWords = newWords;
-
-        // Update mWordArray
-        mWordArray = (TextUtils.isEmpty(mWords)) ? EMPTY_STRING_ARRAY
-                : WHITESPACE_PATTERN.split(mWords);
-        if (mWordArray.length > 0 && TextUtils.isEmpty(mWordArray[0])) {
-            // Empty string at beginning of array.  Must have been whitespace at the start of the
-            // word.  Remove the empty string.
-            mWordArray = Arrays.copyOfRange(mWordArray, 1, mWordArray.length);
-        }
-    }
-
-    public String getWordsAsString() {
-        return mWords;
-    }
-
-    /**
-     * Retuns the words generated by the data in this LogUnit.
-     *
-     * The first word may be an empty string, if the data in the LogUnit started by generating
-     * whitespace.
-     *
-     * @return the array of words. an empty list of there are no words associated with this LogUnit.
-     */
-    public String[] getWordsAsStringArray() {
-        return mWordArray;
-    }
-
-    public boolean hasOneOrMoreWords() {
-        return mWordArray.length >= 1;
-    }
-
-    public int getNumWords() {
-        return mWordArray.length;
-    }
-
-    // TODO: Refactor to eliminate getter/setters
-    public void setMayContainDigit() {
-        mMayContainDigit = true;
-    }
-
-    // TODO: Refactor to eliminate getter/setters
-    public boolean mayContainDigit() {
-        return mMayContainDigit;
-    }
-
-    // TODO: Refactor to eliminate getter/setters
-    public void setContainsUserDeletions() {
-        mContainsUserDeletions = true;
-    }
-
-    // TODO: Refactor to eliminate getter/setters
-    public boolean containsUserDeletions() {
-        return mContainsUserDeletions;
-    }
-
-    // TODO: Refactor to eliminate getter/setters
-    public void setCorrectionType(final int correctionType) {
-        mCorrectionType = correctionType;
-    }
-
-    // TODO: Refactor to eliminate getter/setters
-    public int getCorrectionType() {
-        return mCorrectionType;
-    }
-
-    public boolean isEmpty() {
-        return mLogStatementList.isEmpty();
-    }
-
-    /**
-     * Split this logUnit, with all events before maxTime staying in the current logUnit, and all
-     * events after maxTime going into a new LogUnit that is returned.
-     */
-    public LogUnit splitByTime(final long maxTime) {
-        // Assume that mTimeList is in sorted order.
-        final int length = mTimeList.size();
-        // TODO: find time by binary search, e.g. using Collections#binarySearch()
-        for (int index = 0; index < length; index++) {
-            if (mTimeList.get(index) > maxTime) {
-                final List<LogStatement> laterLogStatements =
-                        mLogStatementList.subList(index, length);
-                final List<Object[]> laterValues = mValuesList.subList(index, length);
-                final List<Long> laterTimes = mTimeList.subList(index, length);
-
-                // Create the LogUnit containing the later logStatements and associated data.
-                final LogUnit newLogUnit = new LogUnit(
-                        new ArrayList<LogStatement>(laterLogStatements),
-                        new ArrayList<Object[]>(laterValues),
-                        new ArrayList<Long>(laterTimes),
-                        true /* isPartOfMegaword */);
-                newLogUnit.mWords = null;
-                newLogUnit.mMayContainDigit = mMayContainDigit;
-                newLogUnit.mContainsUserDeletions = mContainsUserDeletions;
-
-                // Purge the logStatements and associated data from this LogUnit.
-                laterLogStatements.clear();
-                laterValues.clear();
-                laterTimes.clear();
-                mIsPartOfMegaword = true;
-
-                return newLogUnit;
-            }
-        }
-        return new LogUnit();
-    }
-
-    public void append(final LogUnit logUnit) {
-        mLogStatementList.addAll(logUnit.mLogStatementList);
-        mValuesList.addAll(logUnit.mValuesList);
-        mTimeList.addAll(logUnit.mTimeList);
-        mWords = null;
-        if (logUnit.mWords != null) {
-            setWords(logUnit.mWords);
-        }
-        mMayContainDigit = mMayContainDigit || logUnit.mMayContainDigit;
-        mContainsUserDeletions = mContainsUserDeletions || logUnit.mContainsUserDeletions;
-        mIsPartOfMegaword = false;
-    }
-
-    public SuggestedWords getSuggestions() {
-        return mSuggestedWords;
-    }
-
-    /**
-     * Initialize the suggestions.
-     *
-     * Once set to a non-null value, the suggestions may not be changed again.  This is to keep
-     * track of the list of words that are close to the user's initial effort to type the word.
-     * Only words that are close to the initial effort are considered typo corrections.
-     */
-    public void initializeSuggestions(final SuggestedWords suggestedWords) {
-        if (mSuggestedWords == null) {
-            mSuggestedWords = suggestedWords;
-        }
-    }
-
-    private static boolean isInSuggestedWords(final String queryWord,
-            final SuggestedWords suggestedWords) {
-        if (TextUtils.isEmpty(queryWord)) {
-            return false;
-        }
-        final int size = suggestedWords.size();
-        for (int i = 0; i < size; i++) {
-            final SuggestedWordInfo wordInfo = suggestedWords.getInfo(i);
-            if (queryWord.equals(wordInfo.mWord)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Remove data associated with selecting the Research button.
-     *
-     * A LogUnit will capture all user interactions with the IME, including the "meta-interactions"
-     * of using the Research button to control the logging (e.g. by starting and stopping recording
-     * of a test case).  Because meta-interactions should not be part of the normal log, calling
-     * this method will set a field in the LogStatements of the motion events to indiciate that
-     * they should be disregarded.
-     *
-     * This implementation assumes that the data recorded by the meta-interaction takes the
-     * form of all events following the first MotionEvent.ACTION_DOWN before the first long-press
-     * before the last onCodeEvent containing a code matching {@code LogStatement.VALUE_RESEARCH}.
-     *
-     * @returns true if data was removed
-     */
-    public boolean removeResearchButtonInvocation() {
-        // This method is designed to be idempotent.
-
-        // First, find last invocation of "research" key
-        final int indexOfLastResearchKey = findLastIndexContainingKeyValue(
-                LogStatement.TYPE_POINTER_TRACKER_CALL_LISTENER_ON_CODE_INPUT,
-                LogStatement.KEY_CODE, LogStatement.VALUE_RESEARCH);
-        if (indexOfLastResearchKey < 0) {
-            // Could not find invocation of "research" key.  Leave log as is.
-            if (DEBUG) {
-                Log.d(TAG, "Could not find research key");
-            }
-            return false;
-        }
-
-        // Look for the long press that started the invocation of the research key code input.
-        final int indexOfLastLongPressBeforeResearchKey =
-                findLastIndexBefore(LogStatement.TYPE_MAIN_KEYBOARD_VIEW_ON_LONG_PRESS,
-                        indexOfLastResearchKey);
-
-        // Look for DOWN event preceding the long press
-        final int indexOfLastDownEventBeforeLongPress =
-                findLastIndexContainingKeyValueBefore(LogStatement.TYPE_MOTION_EVENT,
-                        LogStatement.ACTION, LogStatement.VALUE_DOWN,
-                        indexOfLastLongPressBeforeResearchKey);
-
-        // Flag all LatinKeyboardViewProcessMotionEvents from the DOWN event to the research key as
-        // logging-related
-        final int startingIndex = indexOfLastDownEventBeforeLongPress == -1 ? 0
-                : indexOfLastDownEventBeforeLongPress;
-        for (int index = startingIndex; index < indexOfLastResearchKey; index++) {
-            final LogStatement logStatement = mLogStatementList.get(index);
-            final String type = logStatement.getType();
-            final Object[] values = mValuesList.get(index);
-            if (type.equals(LogStatement.TYPE_MOTION_EVENT)) {
-                logStatement.setValue(LogStatement.KEY_IS_LOGGING_RELATED, values, true);
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Find the index of the last LogStatement before {@code startingIndex} of type {@code type}.
-     *
-     * @param queryType a String that must be {@code String.equals()} to the LogStatement type
-     * @param startingIndex the index to start the backward search from.  Must be less than the
-     * length of mLogStatementList, or an IndexOutOfBoundsException is thrown.  Can be negative,
-     * in which case -1 is returned.
-     *
-     * @return The index of the last LogStatement, -1 if none exists.
-     */
-    private int findLastIndexBefore(final String queryType, final int startingIndex) {
-        return findLastIndexContainingKeyValueBefore(queryType, null, null, startingIndex);
-    }
-
-    /**
-     * Find the index of the last LogStatement before {@code startingIndex} of type {@code type}
-     * containing the given key-value pair.
-     *
-     * @param queryType a String that must be {@code String.equals()} to the LogStatement type
-     * @param queryKey a String that must be {@code String.equals()} to a key in the LogStatement
-     * @param queryValue an Object that must be {@code String.equals()} to the key's corresponding
-     * value
-     *
-     * @return The index of the last LogStatement, -1 if none exists.
-     */
-    private int findLastIndexContainingKeyValue(final String queryType, final String queryKey,
-            final Object queryValue) {
-        return findLastIndexContainingKeyValueBefore(queryType, queryKey, queryValue,
-                mLogStatementList.size() - 1);
-    }
-
-    /**
-     * Find the index of the last LogStatement before {@code startingIndex} of type {@code type}
-     * containing the given key-value pair.
-     *
-     * @param queryType a String that must be {@code String.equals()} to the LogStatement type
-     * @param queryKey a String that must be {@code String.equals()} to a key in the LogStatement
-     * @param queryValue an Object that must be {@code String.equals()} to the key's corresponding
-     * value
-     * @param startingIndex the index to start the backward search from.  Must be less than the
-     * length of mLogStatementList, or an IndexOutOfBoundsException is thrown.  Can be negative,
-     * in which case -1 is returned.
-     *
-     * @return The index of the last LogStatement, -1 if none exists.
-     */
-    private int findLastIndexContainingKeyValueBefore(final String queryType, final String queryKey,
-            final Object queryValue, final int startingIndex) {
-        if (startingIndex < 0) {
-            return -1;
-        }
-        for (int index = startingIndex; index >= 0; index--) {
-            final LogStatement logStatement = mLogStatementList.get(index);
-            final String type = logStatement.getType();
-            if (type.equals(queryType) && (queryKey == null
-                    || logStatement.containsKeyValuePair(queryKey, queryValue,
-                            mValuesList.get(index)))) {
-                return index;
-            }
-        }
-        return -1;
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/LoggingUtils.java b/java/src/com/android/inputmethod/research/LoggingUtils.java
deleted file mode 100644
index 1261d67..0000000
--- a/java/src/com/android/inputmethod/research/LoggingUtils.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.view.MotionEvent;
-
-/* package */ class LoggingUtils {
-    private LoggingUtils() {
-        // This utility class is not publicly instantiable.
-    }
-
-    /* package */ static String getMotionEventActionTypeString(final int actionType) {
-        switch (actionType) {
-        case MotionEvent.ACTION_CANCEL: return "CANCEL";
-        case MotionEvent.ACTION_UP: return "UP";
-        case MotionEvent.ACTION_DOWN: return "DOWN";
-        case MotionEvent.ACTION_POINTER_UP: return "POINTER_UP";
-        case MotionEvent.ACTION_POINTER_DOWN: return "POINTER_DOWN";
-        case MotionEvent.ACTION_MOVE: return "MOVE";
-        case MotionEvent.ACTION_OUTSIDE: return "OUTSIDE";
-        default: return "ACTION_" + actionType;
-        }
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/MainLogBuffer.java b/java/src/com/android/inputmethod/research/MainLogBuffer.java
deleted file mode 100644
index ffdb43c..0000000
--- a/java/src/com/android/inputmethod/research/MainLogBuffer.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.util.Log;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.Dictionary;
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.LinkedList;
-
-/**
- * MainLogBuffer is a FixedLogBuffer that tracks the state of LogUnits to make privacy guarantees.
- *
- * There are three forms of privacy protection: 1) only words in the main dictionary are allowed to
- * be logged in enough detail to determine their contents, 2) only a subset of words are logged
- * in detail, such as 10%, and 3) no numbers are logged.
- *
- * This class maintains a list of LogUnits, each corresponding to a word.  As the user completes
- * words, they are added here.  But if the user backs up over their current word to edit a word
- * entered earlier, then it is pulled out of this LogBuffer, changes are then added to the end of
- * the LogUnit, and it is pushed back in here when the user is done.  Because words may be pulled
- * back out even after they are pushed in, we must not publish the contents of this LogBuffer too
- * quickly.  However, we cannot let the contents pile up either, or it will limit the editing that
- * a user can perform.
- *
- * To balance these requirements (keep history so user can edit, flush history so it does not pile
- * up), the LogBuffer is considered "complete" when the user has entered enough words to form an
- * n-gram, followed by enough additional non-detailed words (that are in the 90%, as per above).
- * Once complete, the n-gram may be published to flash storage (via the ResearchLog class).
- * However, the additional non-detailed words are retained, in case the user backspaces to edit
- * them.  The MainLogBuffer then continues to add words, publishing individual non-detailed words
- * as new words arrive.  After enough non-detailed words have been pushed out to account for the
- * 90% between words, the words at the front of the LogBuffer can be published as an n-gram again.
- *
- * If the words that would form the valid n-gram are not in the dictionary, then words are pushed
- * through the LogBuffer one at a time until an n-gram is found that is entirely composed of
- * dictionary words.
- *
- * If the user closes a session, then the entire LogBuffer is flushed, publishing any embedded
- * n-gram containing dictionary words.
- */
-public abstract class MainLogBuffer extends FixedLogBuffer {
-    private static final String TAG = MainLogBuffer.class.getSimpleName();
-    private static final boolean DEBUG = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-
-    // Keep consistent with switch statement in Statistics.recordPublishabilityResultCode()
-    public static final int PUBLISHABILITY_PUBLISHABLE = 0;
-    public static final int PUBLISHABILITY_UNPUBLISHABLE_STOPPING = 1;
-    public static final int PUBLISHABILITY_UNPUBLISHABLE_INCORRECT_WORD_COUNT = 2;
-    public static final int PUBLISHABILITY_UNPUBLISHABLE_SAMPLED_TOO_RECENTLY = 3;
-    public static final int PUBLISHABILITY_UNPUBLISHABLE_DICTIONARY_UNAVAILABLE = 4;
-    public static final int PUBLISHABILITY_UNPUBLISHABLE_MAY_CONTAIN_DIGIT = 5;
-    public static final int PUBLISHABILITY_UNPUBLISHABLE_NOT_IN_DICTIONARY = 6;
-
-    // The size of the n-grams logged.  E.g. N_GRAM_SIZE = 2 means to sample bigrams.
-    public static final int N_GRAM_SIZE = 2;
-
-    private final DictionaryFacilitatorForSuggest mDictionaryFacilitator;
-    @UsedForTesting
-    private Dictionary mDictionaryForTesting;
-    private boolean mIsStopping = false;
-
-    /* package for test */ int mNumWordsBetweenNGrams;
-
-    // Counter for words left to suppress before an n-gram can be sampled.  Reset to mMinWordPeriod
-    // after a sample is taken.
-    /* package for test */ int mNumWordsUntilSafeToSample;
-
-    public MainLogBuffer(final int wordsBetweenSamples, final int numInitialWordsToIgnore,
-            final DictionaryFacilitatorForSuggest dictionaryFacilitator) {
-        super(N_GRAM_SIZE + wordsBetweenSamples);
-        mNumWordsBetweenNGrams = wordsBetweenSamples;
-        mNumWordsUntilSafeToSample = DEBUG ? 0 : numInitialWordsToIgnore;
-        mDictionaryFacilitator = dictionaryFacilitator;
-    }
-
-    @UsedForTesting
-    /* package for test */ void setDictionaryForTesting(final Dictionary dictionary) {
-        mDictionaryForTesting = dictionary;
-    }
-
-    private boolean isValidDictWord(final String word) {
-        if (mDictionaryForTesting != null) {
-            return mDictionaryForTesting.isValidWord(word);
-        }
-        if (mDictionaryFacilitator != null) {
-            return mDictionaryFacilitator.isValidMainDictWord(word);
-        }
-        return false;
-    }
-
-    public void setIsStopping() {
-        mIsStopping = true;
-    }
-
-    /**
-     * Determines whether the string determined by a series of LogUnits will not violate user
-     * privacy if published.
-     *
-     * @param logUnits a LogUnit list to check for publishability
-     * @param nGramSize the smallest n-gram acceptable to be published.  if
-     * {@link ResearchLogger#IS_LOGGING_EVERYTHING} is true, then publish if there are more than
-     * {@code minNGramSize} words in the logUnits, otherwise wait.  if {@link
-     * ResearchLogger#IS_LOGGING_EVERYTHING} is false, then ensure that there are exactly nGramSize
-     * words in the LogUnits.
-     *
-     * @return one of the {@code PUBLISHABILITY_*} result codes defined in this class.
-     */
-    private int getPublishabilityResultCode(final ArrayList<LogUnit> logUnits,
-            final int nGramSize) {
-        // Bypass privacy checks when debugging.
-        if (ResearchLogger.IS_LOGGING_EVERYTHING) {
-            if (mIsStopping) {
-                return PUBLISHABILITY_UNPUBLISHABLE_STOPPING;
-            }
-            // Only check that it is the right length.  If not, wait for later words to make
-            // complete n-grams.
-            int numWordsInLogUnitList = 0;
-            final int length = logUnits.size();
-            for (int i = 0; i < length; i++) {
-                final LogUnit logUnit = logUnits.get(i);
-                numWordsInLogUnitList += logUnit.getNumWords();
-            }
-            if (numWordsInLogUnitList >= nGramSize) {
-                return PUBLISHABILITY_PUBLISHABLE;
-            } else {
-                return PUBLISHABILITY_UNPUBLISHABLE_INCORRECT_WORD_COUNT;
-            }
-        }
-
-        // Check that we are not sampling too frequently.  Having sampled recently might disclose
-        // too much of the user's intended meaning.
-        if (mNumWordsUntilSafeToSample > 0) {
-            return PUBLISHABILITY_UNPUBLISHABLE_SAMPLED_TOO_RECENTLY;
-        }
-        // Reload the dictionary in case it has changed (e.g., because the user has changed
-        // languages).
-        if ((mDictionaryFacilitator == null
-                || !mDictionaryFacilitator.hasInitializedMainDictionary())
-                        && mDictionaryForTesting == null) {
-            // Main dictionary is unavailable.  Since we cannot check it, we cannot tell if a
-            // word is out-of-vocabulary or not.  Therefore, we must judge the entire buffer
-            // contents to potentially pose a privacy risk.
-            return PUBLISHABILITY_UNPUBLISHABLE_DICTIONARY_UNAVAILABLE;
-        }
-
-        // Check each word in the buffer.  If any word poses a privacy threat, we cannot upload
-        // the complete buffer contents in detail.
-        int numWordsInLogUnitList = 0;
-        for (final LogUnit logUnit : logUnits) {
-            if (!logUnit.hasOneOrMoreWords()) {
-                // Digits outside words are a privacy threat.
-                if (logUnit.mayContainDigit()) {
-                    return PUBLISHABILITY_UNPUBLISHABLE_MAY_CONTAIN_DIGIT;
-                }
-            } else {
-                numWordsInLogUnitList += logUnit.getNumWords();
-                final String[] words = logUnit.getWordsAsStringArray();
-                for (final String word : words) {
-                    // Words not in the dictionary are a privacy threat.
-                    if (ResearchLogger.hasLetters(word) && !isValidDictWord(word)) {
-                        if (DEBUG) {
-                            Log.d(TAG, "\"" + word + "\" NOT SAFE!: hasLetters: "
-                                    + ResearchLogger.hasLetters(word)
-                                    + ", isValid: " + isValidDictWord(word));
-                        }
-                        return PUBLISHABILITY_UNPUBLISHABLE_NOT_IN_DICTIONARY;
-                    }
-                }
-            }
-        }
-
-        // Finally, only return true if the ngram is the right size.
-        if (numWordsInLogUnitList == nGramSize) {
-            return PUBLISHABILITY_PUBLISHABLE;
-        } else {
-            return PUBLISHABILITY_UNPUBLISHABLE_INCORRECT_WORD_COUNT;
-        }
-    }
-
-    public void shiftAndPublishAll() throws IOException {
-        final LinkedList<LogUnit> logUnits = getLogUnits();
-        while (!logUnits.isEmpty()) {
-            publishLogUnitsAtFrontOfBuffer();
-        }
-    }
-
-    @Override
-    protected final void onBufferFull() {
-        try {
-            publishLogUnitsAtFrontOfBuffer();
-        } catch (final IOException e) {
-            if (DEBUG) {
-                Log.w(TAG, "IOException when publishing front of LogBuffer", e);
-            }
-        }
-    }
-
-    /**
-     * If there is a safe n-gram at the front of this log buffer, publish it with all details, and
-     * remove the LogUnits that constitute it.
-     *
-     * An n-gram might not be "safe" if it violates privacy controls.  E.g., it might contain
-     * numbers, an out-of-vocabulary word, or another n-gram may have been published recently.  If
-     * there is no safe n-gram, then the LogUnits up through the first word-containing LogUnit are
-     * published, but without disclosing any privacy-related details, such as the word the LogUnit
-     * generated, motion data, etc.
-     *
-     * Note that a LogUnit can hold more than one word if the user types without explicit spaces.
-     * In this case, the words may be grouped together in such a way that pulling an n-gram off the
-     * front would require splitting a LogUnit.  Splitting a LogUnit is not possible, so this case
-     * is treated just as the unsafe n-gram case.  This may cause n-grams to be sampled at slightly
-     * less than the target frequency.
-     */
-    protected final void publishLogUnitsAtFrontOfBuffer() throws IOException {
-        // TODO: Refactor this method to require fewer passes through the LogUnits.  Should really
-        // require only one pass.
-        ArrayList<LogUnit> logUnits = peekAtFirstNWords(N_GRAM_SIZE);
-        final int publishabilityResultCode = getPublishabilityResultCode(logUnits, N_GRAM_SIZE);
-        ResearchLogger.recordPublishabilityResultCode(publishabilityResultCode);
-        if (publishabilityResultCode == MainLogBuffer.PUBLISHABILITY_PUBLISHABLE) {
-            // Good n-gram at the front of the buffer.  Publish it, disclosing details.
-            publish(logUnits, true /* canIncludePrivateData */);
-            shiftOutWords(N_GRAM_SIZE);
-            mNumWordsUntilSafeToSample = mNumWordsBetweenNGrams;
-            return;
-        }
-        // No good n-gram at front, and buffer is full.  Shift out up through the first logUnit
-        // with associated words (or if there is none, all the existing logUnits).
-        logUnits.clear();
-        LogUnit logUnit = shiftOut();
-        while (logUnit != null) {
-            logUnits.add(logUnit);
-            final int numWords = logUnit.getNumWords();
-            if (numWords > 0) {
-                mNumWordsUntilSafeToSample = Math.max(0, mNumWordsUntilSafeToSample - numWords);
-                break;
-            }
-            logUnit = shiftOut();
-        }
-        publish(logUnits, false /* canIncludePrivateData */);
-    }
-
-    /**
-     * Called when a list of logUnits should be published.
-     *
-     * It is the subclass's responsibility to implement the publication.
-     *
-     * @param logUnits The list of logUnits to be published.
-     * @param canIncludePrivateData Whether the private data in the logUnits can be included in
-     * publication.
-     *
-     * @throws IOException if publication to the log file is not possible
-     */
-    protected abstract void publish(final ArrayList<LogUnit> logUnits,
-            final boolean canIncludePrivateData) throws IOException;
-
-    @Override
-    protected int shiftOutWords(final int numWords) {
-        final int numWordsShiftedOut = super.shiftOutWords(numWords);
-        mNumWordsUntilSafeToSample = Math.max(0, mNumWordsUntilSafeToSample - numWordsShiftedOut);
-        if (DEBUG) {
-            Log.d(TAG, "wordsUntilSafeToSample now at " + mNumWordsUntilSafeToSample);
-        }
-        return numWordsShiftedOut;
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/MotionEventReader.java b/java/src/com/android/inputmethod/research/MotionEventReader.java
deleted file mode 100644
index 3388645..0000000
--- a/java/src/com/android/inputmethod/research/MotionEventReader.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.util.JsonReader;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.MotionEvent.PointerCoords;
-import android.view.MotionEvent.PointerProperties;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-
-public class MotionEventReader {
-    private static final String TAG = MotionEventReader.class.getSimpleName();
-    private static final boolean DEBUG = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-    // Assumes that MotionEvent.ACTION_MASK does not have all bits set.`
-    private static final int UNINITIALIZED_ACTION = ~MotionEvent.ACTION_MASK;
-    // No legitimate int is negative
-    private static final int UNINITIALIZED_INT = -1;
-    // No legitimate long is negative
-    private static final long UNINITIALIZED_LONG = -1L;
-    // No legitimate float is negative
-    private static final float UNINITIALIZED_FLOAT = -1.0f;
-
-    public ReplayData readMotionEventData(final File file) {
-        final ReplayData replayData = new ReplayData();
-        try {
-            // Read file
-            final JsonReader jsonReader = new JsonReader(new BufferedReader(new InputStreamReader(
-                    new FileInputStream(file))));
-            jsonReader.beginArray();
-            while (jsonReader.hasNext()) {
-                readLogStatement(jsonReader, replayData);
-            }
-            jsonReader.endArray();
-        } catch (FileNotFoundException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return replayData;
-    }
-
-    @UsedForTesting
-    static class ReplayData {
-        final ArrayList<Integer> mActions = new ArrayList<Integer>();
-        final ArrayList<PointerProperties[]> mPointerPropertiesArrays
-                = new ArrayList<PointerProperties[]>();
-        final ArrayList<PointerCoords[]> mPointerCoordsArrays = new ArrayList<PointerCoords[]>();
-        final ArrayList<Long> mTimes = new ArrayList<Long>();
-    }
-
-    /**
-     * Read motion data from a logStatement and store it in {@code replayData}.
-     *
-     * Two kinds of logStatements can be read.  In the first variant, the MotionEvent data is
-     * represented as attributes at the top level like so:
-     *
-     * <pre>
-     * {
-     *   "_ct": 1359590400000,
-     *   "_ut": 4381933,
-     *   "_ty": "MotionEvent",
-     *   "action": "UP",
-     *   "isLoggingRelated": false,
-     *   "x": 100,
-     *   "y": 200
-     * }
-     * </pre>
-     *
-     * In the second variant, there is a separate attribute for the MotionEvent that includes
-     * historical data if present:
-     *
-     * <pre>
-     * {
-     *   "_ct": 135959040000,
-     *   "_ut": 4382702,
-     *   "_ty": "MotionEvent",
-     *   "action": "MOVE",
-     *   "isLoggingRelated": false,
-     *   "motionEvent": {
-     *     "pointerIds": [
-     *       0
-     *     ],
-     *     "xyt": [
-     *       {
-     *         "t": 4382551,
-     *         "d": [
-     *           {
-     *             "x": 141.25,
-     *             "y": 151.8485107421875,
-     *             "toma": 101.82337188720703,
-     *             "tomi": 101.82337188720703,
-     *             "o": 0.0
-     *           }
-     *         ]
-     *       },
-     *       {
-     *         "t": 4382559,
-     *         "d": [
-     *           {
-     *             "x": 140.7266082763672,
-     *             "y": 151.8485107421875,
-     *             "toma": 101.82337188720703,
-     *             "tomi": 101.82337188720703,
-     *             "o": 0.0
-     *           }
-     *         ]
-     *       }
-     *     ]
-     *   }
-     * },
-     * </pre>
-     */
-    @UsedForTesting
-    /* package for test */ void readLogStatement(final JsonReader jsonReader,
-            final ReplayData replayData) throws IOException {
-        String logStatementType = null;
-        int actionType = UNINITIALIZED_ACTION;
-        int x = UNINITIALIZED_INT;
-        int y = UNINITIALIZED_INT;
-        long time = UNINITIALIZED_LONG;
-        boolean isLoggingRelated = false;
-
-        jsonReader.beginObject();
-        while (jsonReader.hasNext()) {
-            final String key = jsonReader.nextName();
-            if (key.equals("_ty")) {
-                logStatementType = jsonReader.nextString();
-            } else if (key.equals("_ut")) {
-                time = jsonReader.nextLong();
-            } else if (key.equals("x")) {
-                x = jsonReader.nextInt();
-            } else if (key.equals("y")) {
-                y = jsonReader.nextInt();
-            } else if (key.equals("action")) {
-                final String s = jsonReader.nextString();
-                if (s.equals("UP")) {
-                    actionType = MotionEvent.ACTION_UP;
-                } else if (s.equals("DOWN")) {
-                    actionType = MotionEvent.ACTION_DOWN;
-                } else if (s.equals("MOVE")) {
-                    actionType = MotionEvent.ACTION_MOVE;
-                }
-            } else if (key.equals("loggingRelated")) {
-                isLoggingRelated = jsonReader.nextBoolean();
-            } else if (logStatementType != null && logStatementType.equals("MotionEvent")
-                    && key.equals("motionEvent")) {
-                if (actionType == UNINITIALIZED_ACTION) {
-                    Log.e(TAG, "no actionType assigned in MotionEvent json");
-                }
-                // Second variant of LogStatement.
-                if (isLoggingRelated) {
-                    jsonReader.skipValue();
-                } else {
-                    readEmbeddedMotionEvent(jsonReader, replayData, actionType);
-                }
-            } else {
-                if (DEBUG) {
-                    Log.w(TAG, "Unknown JSON key in LogStatement: " + key);
-                }
-                jsonReader.skipValue();
-            }
-        }
-        jsonReader.endObject();
-
-        if (logStatementType != null && time != UNINITIALIZED_LONG && x != UNINITIALIZED_INT
-                && y != UNINITIALIZED_INT && actionType != UNINITIALIZED_ACTION
-                && logStatementType.equals("MotionEvent") && !isLoggingRelated) {
-            // First variant of LogStatement.
-            final PointerProperties pointerProperties = new PointerProperties();
-            pointerProperties.id = 0;
-            pointerProperties.toolType = MotionEvent.TOOL_TYPE_UNKNOWN;
-            final PointerProperties[] pointerPropertiesArray = {
-                pointerProperties
-            };
-            final PointerCoords pointerCoords = new PointerCoords();
-            pointerCoords.x = x;
-            pointerCoords.y = y;
-            pointerCoords.pressure = 1.0f;
-            pointerCoords.size = 1.0f;
-            final PointerCoords[] pointerCoordsArray = {
-                pointerCoords
-            };
-            addMotionEventData(replayData, actionType, time, pointerPropertiesArray,
-                    pointerCoordsArray);
-        }
-    }
-
-    private void readEmbeddedMotionEvent(final JsonReader jsonReader, final ReplayData replayData,
-            final int actionType) throws IOException {
-        jsonReader.beginObject();
-        PointerProperties[] pointerPropertiesArray = null;
-        while (jsonReader.hasNext()) {  // pointerIds/xyt
-            final String name = jsonReader.nextName();
-            if (name.equals("pointerIds")) {
-                pointerPropertiesArray = readPointerProperties(jsonReader);
-            } else if (name.equals("xyt")) {
-                readPointerData(jsonReader, replayData, actionType, pointerPropertiesArray);
-            }
-        }
-        jsonReader.endObject();
-    }
-
-    private PointerProperties[] readPointerProperties(final JsonReader jsonReader)
-            throws IOException {
-        final ArrayList<PointerProperties> pointerPropertiesArrayList =
-                new ArrayList<PointerProperties>();
-        jsonReader.beginArray();
-        while (jsonReader.hasNext()) {
-            final PointerProperties pointerProperties = new PointerProperties();
-            pointerProperties.id = jsonReader.nextInt();
-            pointerProperties.toolType = MotionEvent.TOOL_TYPE_UNKNOWN;
-            pointerPropertiesArrayList.add(pointerProperties);
-        }
-        jsonReader.endArray();
-        return pointerPropertiesArrayList.toArray(
-                new PointerProperties[pointerPropertiesArrayList.size()]);
-    }
-
-    private void readPointerData(final JsonReader jsonReader, final ReplayData replayData,
-            final int actionType, final PointerProperties[] pointerPropertiesArray)
-            throws IOException {
-        if (pointerPropertiesArray == null) {
-            Log.e(TAG, "PointerIDs must be given before xyt data in json for MotionEvent");
-            jsonReader.skipValue();
-            return;
-        }
-        long time = UNINITIALIZED_LONG;
-        jsonReader.beginArray();
-        while (jsonReader.hasNext()) {  // Array of historical data
-            jsonReader.beginObject();
-            final ArrayList<PointerCoords> pointerCoordsArrayList = new ArrayList<PointerCoords>();
-            while (jsonReader.hasNext()) {  // Time/data object
-                final String name = jsonReader.nextName();
-                if (name.equals("t")) {
-                    time = jsonReader.nextLong();
-                } else if (name.equals("d")) {
-                    jsonReader.beginArray();
-                    while (jsonReader.hasNext()) {  // array of data per pointer
-                        final PointerCoords pointerCoords = readPointerCoords(jsonReader);
-                        if (pointerCoords != null) {
-                            pointerCoordsArrayList.add(pointerCoords);
-                        }
-                    }
-                    jsonReader.endArray();
-                } else {
-                    jsonReader.skipValue();
-                }
-            }
-            jsonReader.endObject();
-            // Data was recorded as historical events, but must be split apart into
-            // separate MotionEvents for replaying
-            if (time != UNINITIALIZED_LONG) {
-                addMotionEventData(replayData, actionType, time, pointerPropertiesArray,
-                        pointerCoordsArrayList.toArray(
-                                new PointerCoords[pointerCoordsArrayList.size()]));
-            } else {
-                Log.e(TAG, "Time not assigned in json for MotionEvent");
-            }
-        }
-        jsonReader.endArray();
-    }
-
-    private PointerCoords readPointerCoords(final JsonReader jsonReader) throws IOException {
-        jsonReader.beginObject();
-        float x = UNINITIALIZED_FLOAT;
-        float y = UNINITIALIZED_FLOAT;
-        while (jsonReader.hasNext()) {  // x,y
-            final String name = jsonReader.nextName();
-            if (name.equals("x")) {
-                x = (float) jsonReader.nextDouble();
-            } else if (name.equals("y")) {
-                y = (float) jsonReader.nextDouble();
-            } else {
-                jsonReader.skipValue();
-            }
-        }
-        jsonReader.endObject();
-
-        if (Float.compare(x, UNINITIALIZED_FLOAT) == 0
-                || Float.compare(y, UNINITIALIZED_FLOAT) == 0) {
-            Log.w(TAG, "missing x or y value in MotionEvent json");
-            return null;
-        }
-        final PointerCoords pointerCoords = new PointerCoords();
-        pointerCoords.x = x;
-        pointerCoords.y = y;
-        pointerCoords.pressure = 1.0f;
-        pointerCoords.size = 1.0f;
-        return pointerCoords;
-    }
-
-    private void addMotionEventData(final ReplayData replayData, final int actionType,
-            final long time, final PointerProperties[] pointerProperties,
-            final PointerCoords[] pointerCoords) {
-        replayData.mActions.add(actionType);
-        replayData.mTimes.add(time);
-        replayData.mPointerPropertiesArrays.add(pointerProperties);
-        replayData.mPointerCoordsArrays.add(pointerCoords);
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/Replayer.java b/java/src/com/android/inputmethod/research/Replayer.java
deleted file mode 100644
index 903875f..0000000
--- a/java/src/com/android/inputmethod/research/Replayer.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.SystemClock;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.MotionEvent.PointerCoords;
-import android.view.MotionEvent.PointerProperties;
-
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import com.android.inputmethod.keyboard.MainKeyboardView;
-import com.android.inputmethod.latin.define.ProductionFlag;
-import com.android.inputmethod.research.MotionEventReader.ReplayData;
-
-/**
- * Replays a sequence of motion events in realtime on the screen.
- *
- * Useful for user inspection of logged data.
- */
-public class Replayer {
-    private static final String TAG = Replayer.class.getSimpleName();
-    private static final boolean DEBUG = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-    private static final long START_TIME_DELAY_MS = 500;
-
-    private boolean mIsReplaying = false;
-    private KeyboardSwitcher mKeyboardSwitcher;
-
-    private Replayer() {
-    }
-
-    private static final Replayer sInstance = new Replayer();
-    public static Replayer getInstance() {
-        return sInstance;
-    }
-
-    public void setKeyboardSwitcher(final KeyboardSwitcher keyboardSwitcher) {
-        mKeyboardSwitcher = keyboardSwitcher;
-    }
-
-    private static final int MSG_MOTION_EVENT = 0;
-    private static final int MSG_DONE = 1;
-    private static final int COMPLETION_TIME_MS = 500;
-
-    // TODO: Support historical events and multi-touch.
-    public void replay(final ReplayData replayData, final Runnable callback) {
-        if (mIsReplaying) {
-            return;
-        }
-        mIsReplaying = true;
-        final int numActions = replayData.mActions.size();
-        if (DEBUG) {
-            Log.d(TAG, "replaying " + numActions + " actions");
-        }
-        if (numActions == 0) {
-            mIsReplaying = false;
-            return;
-        }
-        final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView();
-
-        // The reference time relative to the times stored in events.
-        final long origStartTime = replayData.mTimes.get(0);
-        // The reference time relative to which events are replayed in the present.
-        final long currentStartTime = SystemClock.uptimeMillis() + START_TIME_DELAY_MS;
-        // The adjustment needed to translate times from the original recorded time to the current
-        // time.
-        final long timeAdjustment = currentStartTime - origStartTime;
-        final Handler handler = new Handler(Looper.getMainLooper()) {
-            // Track the time of the most recent DOWN event, to be passed as a parameter when
-            // constructing a MotionEvent.  It's initialized here to the origStartTime, but this is
-            // only a precaution.  The value should be overwritten by the first ACTION_DOWN event
-            // before the first use of the variable.  Note that this may cause the first few events
-            // to have incorrect {@code downTime}s.
-            private long mOrigDownTime = origStartTime;
-
-            @Override
-            public void handleMessage(final Message msg) {
-                switch (msg.what) {
-                case MSG_MOTION_EVENT:
-                    final int index = msg.arg1;
-                    final int action = replayData.mActions.get(index);
-                    final PointerProperties[] pointerPropertiesArray =
-                            replayData.mPointerPropertiesArrays.get(index);
-                    final PointerCoords[] pointerCoordsArray =
-                            replayData.mPointerCoordsArrays.get(index);
-                    final long origTime = replayData.mTimes.get(index);
-                    if (action == MotionEvent.ACTION_DOWN) {
-                        mOrigDownTime = origTime;
-                    }
-
-                    final MotionEvent me = MotionEvent.obtain(mOrigDownTime + timeAdjustment,
-                            origTime + timeAdjustment, action,
-                            pointerPropertiesArray.length, pointerPropertiesArray,
-                            pointerCoordsArray, 0, 0, 1.0f, 1.0f, 0, 0, 0, 0);
-                    mainKeyboardView.processMotionEvent(me);
-                    me.recycle();
-                    break;
-                case MSG_DONE:
-                    mIsReplaying = false;
-                    ResearchLogger.getInstance().requestIndicatorRedraw();
-                    break;
-                }
-            }
-        };
-
-        handler.post(new Runnable() {
-            @Override
-            public void run() {
-                ResearchLogger.getInstance().requestIndicatorRedraw();
-            }
-        });
-        for (int i = 0; i < numActions; i++) {
-            final Message msg = Message.obtain(handler, MSG_MOTION_EVENT, i, 0);
-            final long msgTime = replayData.mTimes.get(i) + timeAdjustment;
-            handler.sendMessageAtTime(msg, msgTime);
-            if (DEBUG) {
-                Log.d(TAG, "queuing event at " + msgTime);
-            }
-        }
-
-        final long presentDoneTime = replayData.mTimes.get(numActions - 1) + timeAdjustment
-                + COMPLETION_TIME_MS;
-        handler.sendMessageAtTime(Message.obtain(handler, MSG_DONE), presentDoneTime);
-        if (callback != null) {
-            handler.postAtTime(callback, presentDoneTime + 1);
-        }
-    }
-
-    public boolean isReplaying() {
-        return mIsReplaying;
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/ReplayerService.java b/java/src/com/android/inputmethod/research/ReplayerService.java
deleted file mode 100644
index 88d9033..0000000
--- a/java/src/com/android/inputmethod/research/ReplayerService.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.IntentService;
-import android.content.Intent;
-import android.util.Log;
-
-import com.android.inputmethod.research.MotionEventReader.ReplayData;
-
-import java.io.File;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Provide a mechanism to invoke the replayer from outside.
- *
- * In particular, makes access from a host possible through {@code adb am startservice}.
- */
-public class ReplayerService extends IntentService {
-    private static final String TAG = ReplayerService.class.getSimpleName();
-    private static final String EXTRA_FILENAME = "com.android.inputmethod.research.extra.FILENAME";
-    private static final long MAX_REPLAY_TIME = TimeUnit.SECONDS.toMillis(60);
-
-    public ReplayerService() {
-        super(ReplayerService.class.getSimpleName());
-    }
-
-    @Override
-    protected void onHandleIntent(final Intent intent) {
-        final String filename = intent.getStringExtra(EXTRA_FILENAME);
-        if (filename == null) return;
-
-        final ReplayData replayData = new MotionEventReader().readMotionEventData(
-                new File(filename));
-        synchronized (this) {
-            Replayer.getInstance().replay(replayData, new Runnable() {
-                @Override
-                public void run() {
-                    synchronized (ReplayerService.this) {
-                        ReplayerService.this.notify();
-                    }
-                }
-            });
-            try {
-                wait(MAX_REPLAY_TIME);
-            } catch (InterruptedException e) {
-                Log.e(TAG, "Timeout while replaying.", e);
-            }
-        }
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/ResearchLog.java b/java/src/com/android/inputmethod/research/ResearchLog.java
deleted file mode 100644
index 46e620a..0000000
--- a/java/src/com/android/inputmethod/research/ResearchLog.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.Context;
-import android.util.JsonWriter;
-import android.util.Log;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Executors;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Logs the use of the LatinIME keyboard.
- *
- * This class logs operations on the IME keyboard, including what the user has typed.  Data is
- * written to a {@link JsonWriter}, which will write to a local file.
- *
- * The JsonWriter is created on-demand by calling {@link #getInitializedJsonWriterLocked}.
- *
- * This class uses an executor to perform file-writing operations on a separate thread.  It also
- * tries to avoid creating unnecessary files if there is nothing to write.  It also handles
- * flushing, making sure it happens, but not too frequently.
- *
- * This functionality is off by default. See
- * {@link ProductionFlag#USES_DEVELOPMENT_ONLY_DIAGNOSTICS}.
- */
-public class ResearchLog {
-    // TODO: Automatically initialize the JsonWriter rather than requiring the caller to manage it.
-    private static final String TAG = ResearchLog.class.getSimpleName();
-    private static final boolean DEBUG = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-    private static final long FLUSH_DELAY_IN_MS = TimeUnit.SECONDS.toMillis(5);
-
-    /* package */ final ScheduledExecutorService mExecutor;
-    /* package */ final File mFile;
-    private final Context mContext;
-
-    // Earlier implementations used a dummy JsonWriter that just swallowed what it was given, but
-    // this was tricky to do well, because JsonWriter throws an exception if it is passed more than
-    // one top-level object.
-    private JsonWriter mJsonWriter = null;
-
-    // true if at least one byte of data has been written out to the log file.  This must be
-    // remembered because JsonWriter requires that calls matching calls to beginObject and
-    // endObject, as well as beginArray and endArray, and the file is opened lazily, only when
-    // it is certain that data will be written.  Alternatively, the matching call exceptions
-    // could be caught, but this might suppress other errors.
-    private boolean mHasWrittenData = false;
-
-    public ResearchLog(final File outputFile, final Context context) {
-        mExecutor = Executors.newSingleThreadScheduledExecutor();
-        mFile = outputFile;
-        mContext = context;
-    }
-
-    /**
-     * Returns true if this is a FeedbackLog.
-     *
-     * FeedbackLogs record only the data associated with a Feedback dialog. Instead of normal
-     * logging, they contain a LogStatement with the complete feedback string and optionally a
-     * recording of the user's supplied demo of the problem.
-     */
-    public boolean isFeedbackLog() {
-        return false;
-    }
-
-    /**
-     * Waits for any publication requests to finish and closes the {@link JsonWriter} used for
-     * output.
-     *
-     * See class comment for details about {@code JsonWriter} construction.
-     *
-     * @param onClosed run after the close() operation has completed asynchronously
-     */
-    private synchronized void close(final Runnable onClosed) {
-        mExecutor.submit(new Callable<Object>() {
-            @Override
-            public Object call() throws Exception {
-                try {
-                    if (mJsonWriter == null) return null;
-                    // TODO: This is necessary to avoid an exception.  Better would be to not even
-                    // open the JsonWriter if the file is not even opened unless there is valid data
-                    // to write.
-                    if (!mHasWrittenData) {
-                        mJsonWriter.beginArray();
-                    }
-                    mJsonWriter.endArray();
-                    mHasWrittenData = false;
-                    mJsonWriter.flush();
-                    mJsonWriter.close();
-                    if (DEBUG) {
-                        Log.d(TAG, "closed " + mFile);
-                    }
-                } catch (final Exception e) {
-                    Log.d(TAG, "error when closing ResearchLog:", e);
-                } finally {
-                    // Marking the file as read-only signals that this log file is ready to be
-                    // uploaded.
-                    if (mFile != null && mFile.exists()) {
-                        mFile.setWritable(false, false);
-                    }
-                    if (onClosed != null) {
-                        onClosed.run();
-                    }
-                }
-                return null;
-            }
-        });
-        removeAnyScheduledFlush();
-        mExecutor.shutdown();
-    }
-
-    /**
-     * Block until the research log has shut down and spooled out all output or {@code timeout}
-     * occurs.
-     *
-     * @param timeout time to wait for close in milliseconds
-     */
-    public void blockingClose(final long timeout) {
-        close(null);
-        awaitTermination(timeout, TimeUnit.MILLISECONDS);
-    }
-
-    /**
-     * Waits for publication requests to finish, closes the JsonWriter, but then deletes the backing
-     * output file.
-     *
-     * @param onAbort run after the abort() operation has completed asynchronously
-     */
-    private synchronized void abort(final Runnable onAbort) {
-        mExecutor.submit(new Callable<Object>() {
-            @Override
-            public Object call() throws Exception {
-                try {
-                    if (mJsonWriter == null) return null;
-                    if (mHasWrittenData) {
-                        // TODO: This is necessary to avoid an exception.  Better would be to not
-                        // even open the JsonWriter if the file is not even opened unless there is
-                        // valid data to write.
-                        if (!mHasWrittenData) {
-                            mJsonWriter.beginArray();
-                        }
-                        mJsonWriter.endArray();
-                        mJsonWriter.close();
-                        mHasWrittenData = false;
-                    }
-                } finally {
-                    if (mFile != null) {
-                        mFile.delete();
-                    }
-                    if (onAbort != null) {
-                        onAbort.run();
-                    }
-                }
-                return null;
-            }
-        });
-        removeAnyScheduledFlush();
-        mExecutor.shutdown();
-    }
-
-    /**
-     * Block until the research log has aborted or {@code timeout} occurs.
-     *
-     * @param timeout time to wait for close in milliseconds
-     */
-    public void blockingAbort(final long timeout) {
-        abort(null);
-        awaitTermination(timeout, TimeUnit.MILLISECONDS);
-    }
-
-    @UsedForTesting
-    public void awaitTermination(final long delay, final TimeUnit timeUnit) {
-        try {
-            if (!mExecutor.awaitTermination(delay, timeUnit)) {
-                Log.e(TAG, "ResearchLog executor timed out while awaiting terminaion");
-            }
-        } catch (final InterruptedException e) {
-            Log.e(TAG, "ResearchLog executor interrupted while awaiting terminaion", e);
-        }
-    }
-
-    /* package */ synchronized void flush() {
-        removeAnyScheduledFlush();
-        mExecutor.submit(mFlushCallable);
-    }
-
-    private final Callable<Object> mFlushCallable = new Callable<Object>() {
-        @Override
-        public Object call() throws Exception {
-            if (mJsonWriter != null) mJsonWriter.flush();
-            return null;
-        }
-    };
-
-    private ScheduledFuture<Object> mFlushFuture;
-
-    private void removeAnyScheduledFlush() {
-        if (mFlushFuture != null) {
-            mFlushFuture.cancel(false);
-            mFlushFuture = null;
-        }
-    }
-
-    private void scheduleFlush() {
-        removeAnyScheduledFlush();
-        mFlushFuture = mExecutor.schedule(mFlushCallable, FLUSH_DELAY_IN_MS, TimeUnit.MILLISECONDS);
-    }
-
-    /**
-     * Queues up {@code logUnit} to be published in the background.
-     *
-     * @param logUnit the {@link LogUnit} to be published
-     * @param canIncludePrivateData whether private data in the LogUnit should be included
-     */
-    public synchronized void publish(final LogUnit logUnit, final boolean canIncludePrivateData) {
-        try {
-            mExecutor.submit(new Callable<Object>() {
-                @Override
-                public Object call() throws Exception {
-                    logUnit.publishTo(ResearchLog.this, canIncludePrivateData);
-                    scheduleFlush();
-                    return null;
-                }
-            });
-        } catch (final RejectedExecutionException e) {
-            // TODO: Add code to record loss of data, and report.
-            if (DEBUG) {
-                Log.d(TAG, "ResearchLog.publish() rejecting scheduled execution", e);
-            }
-        }
-    }
-
-    /**
-     * Return a JsonWriter for this ResearchLog.  It is initialized the first time this method is
-     * called.  The cached value is returned in future calls.
-     *
-     * @throws IOException if opening the JsonWriter is not possible
-     */
-    public JsonWriter getInitializedJsonWriterLocked() throws IOException {
-        if (mJsonWriter != null) return mJsonWriter;
-        if (mFile == null) throw new FileNotFoundException();
-        try {
-            final JsonWriter jsonWriter = createJsonWriter(mContext, mFile);
-            if (jsonWriter == null) throw new IOException("Could not create JsonWriter");
-
-            jsonWriter.beginArray();
-            mJsonWriter = jsonWriter;
-            mHasWrittenData = true;
-            return mJsonWriter;
-        } catch (final IOException e) {
-            if (DEBUG) {
-                Log.w(TAG, "Exception when creating JsonWriter", e);
-                Log.w(TAG, "Closing JsonWriter");
-            }
-            if (mJsonWriter != null) mJsonWriter.close();
-            mJsonWriter = null;
-            throw e;
-        }
-    }
-
-    /**
-     * Create the JsonWriter to write the ResearchLog to.
-     *
-     * This method may be overriden in testing to redirect the output.
-     */
-    /* package for test */ JsonWriter createJsonWriter(final Context context, final File file)
-            throws IOException {
-        return new JsonWriter(new BufferedWriter(new OutputStreamWriter(
-                context.openFileOutput(file.getName(), Context.MODE_PRIVATE))));
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/ResearchLogDirectory.java b/java/src/com/android/inputmethod/research/ResearchLogDirectory.java
deleted file mode 100644
index d156068..0000000
--- a/java/src/com/android/inputmethod/research/ResearchLogDirectory.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.Context;
-import android.util.Log;
-
-import java.io.File;
-import java.io.FileFilter;
-
-/**
- * Manages log files.
- *
- * This class handles all aspects where and how research log data is stored.  This includes
- * generating log filenames in the correct place with the correct names, and cleaning up log files
- * under this directory.
- */
-public class ResearchLogDirectory {
-    public static final String TAG = ResearchLogDirectory.class.getSimpleName();
-    /* package */ static final String LOG_FILENAME_PREFIX = "researchLog";
-    private static final String FILENAME_SUFFIX = ".txt";
-    private static final String USER_RECORDING_FILENAME_PREFIX = "recording";
-
-    private static final ReadOnlyLogFileFilter sUploadableLogFileFilter =
-            new ReadOnlyLogFileFilter();
-
-    private final File mFilesDir;
-
-    static class ReadOnlyLogFileFilter implements FileFilter {
-        @Override
-        public boolean accept(final File pathname) {
-            return pathname.getName().startsWith(ResearchLogDirectory.LOG_FILENAME_PREFIX)
-                    && !pathname.canWrite();
-        }
-    }
-
-    /**
-     * Creates a new ResearchLogDirectory, creating the storage directory if it does not exist.
-     */
-    public ResearchLogDirectory(final Context context) {
-        mFilesDir = getLoggingDirectory(context);
-        if (mFilesDir == null) {
-            throw new NullPointerException("No files directory specified");
-        }
-        if (!mFilesDir.exists()) {
-            mFilesDir.mkdirs();
-        }
-    }
-
-    private File getLoggingDirectory(final Context context) {
-        // TODO: Switch to using a subdirectory of getFilesDir().
-        return context.getFilesDir();
-    }
-
-    /**
-     * Get an array of log files that are ready for uploading.
-     *
-     * A file is ready for uploading if it is marked as read-only.
-     *
-     * @return the array of uploadable files
-     */
-    public File[] getUploadableLogFiles() {
-        try {
-            return mFilesDir.listFiles(sUploadableLogFileFilter);
-        } catch (final SecurityException e) {
-            Log.e(TAG, "Could not cleanup log directory, permission denied", e);
-            return new File[0];
-        }
-    }
-
-    public void cleanupLogFilesOlderThan(final long time) {
-        try {
-            for (final File file : mFilesDir.listFiles()) {
-                final String filename = file.getName();
-                if ((filename.startsWith(LOG_FILENAME_PREFIX)
-                        || filename.startsWith(USER_RECORDING_FILENAME_PREFIX))
-                        && (file.lastModified() < time)) {
-                    file.delete();
-                }
-            }
-        } catch (final SecurityException e) {
-            Log.e(TAG, "Could not cleanup log directory, permission denied", e);
-        }
-    }
-
-    public File getLogFilePath(final long time, final long nanoTime) {
-        return new File(mFilesDir, getUniqueFilename(LOG_FILENAME_PREFIX, time, nanoTime));
-    }
-
-    public File getUserRecordingFilePath(final long time, final long nanoTime) {
-        return new File(mFilesDir, getUniqueFilename(USER_RECORDING_FILENAME_PREFIX, time,
-                nanoTime));
-    }
-
-    private static String getUniqueFilename(final String prefix, final long time,
-            final long nanoTime) {
-        return prefix + "-" + time + "-" + nanoTime + FILENAME_SUFFIX;
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java
deleted file mode 100644
index d907dd1..0000000
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ /dev/null
@@ -1,1885 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import static com.android.inputmethod.latin.Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.SystemClock;
-import android.preference.PreferenceManager;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.inputmethod.CompletionInfo;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputConnection;
-import android.widget.Toast;
-
-import com.android.inputmethod.keyboard.Key;
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import com.android.inputmethod.keyboard.KeyboardView;
-import com.android.inputmethod.keyboard.MainKeyboardView;
-import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
-import com.android.inputmethod.latin.LatinIME;
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.RichInputConnection;
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.define.ProductionFlag;
-import com.android.inputmethod.latin.utils.InputTypeUtils;
-import com.android.inputmethod.latin.utils.StringUtils;
-import com.android.inputmethod.latin.utils.TextRange;
-import com.android.inputmethod.research.MotionEventReader.ReplayData;
-import com.android.inputmethod.research.ui.SplashScreen;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.concurrent.TimeUnit;
-import java.util.regex.Pattern;
-
-// TODO: Add a unit test for every "logging" method (i.e. that is called from the IME and calls
-// enqueueEvent to record a LogStatement).
-/**
- * Logs the use of the LatinIME keyboard.
- *
- * This class logs operations on the IME keyboard, including what the user has typed.
- * Data is stored locally in a file in app-specific storage.
- *
- * This functionality is off by default. See
- * {@link ProductionFlag#USES_DEVELOPMENT_ONLY_DIAGNOSTICS}.
- */
-public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChangeListener,
-        SplashScreen.UserConsentListener {
-    // TODO: This class has grown quite large and combines several concerns that should be
-    // separated.  The following refactorings will be applied as soon as possible after adding
-    // support for replaying historical events, fixing some replay bugs, adding some ui constraints
-    // on the feedback dialog, and adding the survey dialog.
-    // TODO: Refactor.  Move feedback screen code into separate class.
-    // TODO: Refactor.  Move logging invocations into their own class.
-    // TODO: Refactor.  Move currentLogUnit management into separate class.
-    private static final String TAG = ResearchLogger.class.getSimpleName();
-    private static final boolean DEBUG = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-    private static final boolean DEBUG_REPLAY_AFTER_FEEDBACK = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-    // Whether the feedback dialog preserves the editable text across invocations.  Should be false
-    // for normal research builds so users do not have to delete the same feedback string they
-    // entered earlier.  Should be true for builds internal to a development team so when the text
-    // field holds a channel name, the developer does not have to re-enter it when using the
-    // feedback mechanism to generate multiple tests.
-    private static final boolean FEEDBACK_DIALOG_SHOULD_PRESERVE_TEXT_FIELD = false;
-    /* package */ static boolean sIsLogging = false;
-    private static final int OUTPUT_FORMAT_VERSION = 6;
-    // Whether all words should be recorded, leaving unsampled word between bigrams.  Useful for
-    // testing.
-    /* package for test */ static final boolean IS_LOGGING_EVERYTHING = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-    // The number of words between n-grams to omit from the log.
-    private static final int NUMBER_OF_WORDS_BETWEEN_SAMPLES =
-            IS_LOGGING_EVERYTHING ? 0 : (DEBUG ? 2 : 18);
-
-    // Whether to show an indicator on the screen that logging is on.  Currently a very small red
-    // dot in the lower right hand corner.  Most users should not notice it.
-    private static final boolean IS_SHOWING_INDICATOR = true;
-    // Change the default indicator to something very visible.  Currently two red vertical bars on
-    // either side of they keyboard.
-    private static final boolean IS_SHOWING_INDICATOR_CLEARLY = false ||
-            (IS_LOGGING_EVERYTHING && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG);
-    // FEEDBACK_WORD_BUFFER_SIZE should add 1 because it must also hold the feedback LogUnit itself.
-    public static final int FEEDBACK_WORD_BUFFER_SIZE = (Integer.MAX_VALUE - 1) + 1;
-
-    // The special output text to invoke a research feedback dialog.
-    public static final String RESEARCH_KEY_OUTPUT_TEXT = ".research.";
-
-    // constants related to specific log points
-    private static final int[] WHITESPACE_SEPARATORS =
-            StringUtils.toSortedCodePointArray(" \t\n\r");
-    private static final int MAX_INPUTVIEW_LENGTH_TO_CAPTURE = 8192; // must be >=1
-    private static final String PREF_RESEARCH_SAVED_CHANNEL = "pref_research_saved_channel";
-
-    private static final long RESEARCHLOG_CLOSE_TIMEOUT_IN_MS = TimeUnit.SECONDS.toMillis(5);
-    private static final long RESEARCHLOG_ABORT_TIMEOUT_IN_MS = TimeUnit.SECONDS.toMillis(5);
-    private static final long DURATION_BETWEEN_DIR_CLEANUP_IN_MS = TimeUnit.DAYS.toMillis(1);
-    private static final long MAX_LOGFILE_AGE_IN_MS = TimeUnit.DAYS.toMillis(4);
-
-    private static final ResearchLogger sInstance = new ResearchLogger();
-    private static String sAccountType = null;
-    private static String sAllowedAccountDomain = null;
-    private ResearchLog mMainResearchLog; // always non-null after init() is called
-    // mFeedbackLog records all events for the session, private or not (excepting
-    // passwords).  It is written to permanent storage only if the user explicitly commands
-    // the system to do so.
-    // LogUnits are queued in the LogBuffers and published to the ResearchLogs when words are
-    // complete.
-    /* package for test */ MainLogBuffer mMainLogBuffer; // always non-null after init() is called
-    /* package */ ResearchLog mUserRecordingLog;
-    /* package */ LogBuffer mUserRecordingLogBuffer;
-    private File mUserRecordingFile = null;
-
-    private boolean mIsPasswordView = false;
-    private SharedPreferences mPrefs;
-
-    // digits entered by the user are replaced with this codepoint.
-    /* package for test */ static final int DIGIT_REPLACEMENT_CODEPOINT =
-            Character.codePointAt("\uE000", 0);  // U+E000 is in the "private-use area"
-    // U+E001 is in the "private-use area"
-    /* package for test */ static final String WORD_REPLACEMENT_STRING = "\uE001";
-    protected static final int SUSPEND_DURATION_IN_MINUTES = 1;
-
-    // used to check whether words are not unique
-    private DictionaryFacilitatorForSuggest mDictionaryFacilitator;
-    private MainKeyboardView mMainKeyboardView;
-    // TODO: Check whether a superclass can be used instead of LatinIME.
-    /* package for test */ LatinIME mLatinIME;
-    private final Statistics mStatistics;
-    private final MotionEventReader mMotionEventReader = new MotionEventReader();
-    private final Replayer mReplayer = Replayer.getInstance();
-    private ResearchLogDirectory mResearchLogDirectory;
-    private SplashScreen mSplashScreen;
-
-    private Intent mUploadNowIntent;
-
-    /* package for test */ LogUnit mCurrentLogUnit = new LogUnit();
-
-    // Gestured or tapped words may be committed after the gesture of the next word has started.
-    // To ensure that the gesture data of the next word is not associated with the previous word,
-    // thereby leaking private data, we store the time of the down event that started the second
-    // gesture, and when committing the earlier word, split the LogUnit.
-    private long mSavedDownEventTime;
-    private Bundle mFeedbackDialogBundle = null;
-    // Whether the feedback dialog is visible, and the user is typing into it.  Normal logging is
-    // not performed on text that the user types into the feedback dialog.
-    private boolean mInFeedbackDialog = false;
-    private Handler mUserRecordingTimeoutHandler;
-    private static final long USER_RECORDING_TIMEOUT_MS = TimeUnit.SECONDS.toMillis(30);
-
-    // Stores a temporary LogUnit while generating a phantom space.  Needed because phantom spaces
-    // are issued out-of-order, immediately before the characters generated by other operations that
-    // have already outputted LogStatements.
-    private LogUnit mPhantomSpaceLogUnit = null;
-
-    private ResearchLogger() {
-        mStatistics = Statistics.getInstance();
-    }
-
-    public static ResearchLogger getInstance() {
-        return sInstance;
-    }
-
-    public void init(final LatinIME latinIME, final KeyboardSwitcher keyboardSwitcher) {
-        assert latinIME != null;
-        mLatinIME = latinIME;
-        mPrefs = PreferenceManager.getDefaultSharedPreferences(latinIME);
-        mPrefs.registerOnSharedPreferenceChangeListener(this);
-
-        // Initialize fields from preferences
-        sIsLogging = ResearchSettings.readResearchLoggerEnabledFlag(mPrefs);
-
-        // Initialize fields from resources
-        final Resources res = latinIME.getResources();
-        sAccountType = res.getString(R.string.research_account_type);
-        sAllowedAccountDomain = res.getString(R.string.research_allowed_account_domain);
-
-        // Initialize directory manager
-        mResearchLogDirectory = new ResearchLogDirectory(mLatinIME);
-        cleanLogDirectoryIfNeeded(mResearchLogDirectory, System.currentTimeMillis());
-
-        // Initialize log buffers
-        resetLogBuffers();
-
-        // Initialize external services
-        mUploadNowIntent = new Intent(mLatinIME, UploaderService.class);
-        mUploadNowIntent.putExtra(UploaderService.EXTRA_UPLOAD_UNCONDITIONALLY, true);
-        if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
-            UploaderService.cancelAndRescheduleUploadingService(mLatinIME,
-                    true /* needsRescheduling */);
-        }
-        mReplayer.setKeyboardSwitcher(keyboardSwitcher);
-    }
-
-    private void resetLogBuffers() {
-        mMainResearchLog = new ResearchLog(mResearchLogDirectory.getLogFilePath(
-                System.currentTimeMillis(), System.nanoTime()), mLatinIME);
-        final int numWordsToIgnore = new Random().nextInt(NUMBER_OF_WORDS_BETWEEN_SAMPLES + 1);
-        mMainLogBuffer = new MainLogBuffer(NUMBER_OF_WORDS_BETWEEN_SAMPLES, numWordsToIgnore,
-                mDictionaryFacilitator) {
-            @Override
-            protected void publish(final ArrayList<LogUnit> logUnits,
-                    boolean canIncludePrivateData) {
-                canIncludePrivateData |= IS_LOGGING_EVERYTHING;
-                for (final LogUnit logUnit : logUnits) {
-                    if (DEBUG) {
-                        final String wordsString = logUnit.getWordsAsString();
-                        Log.d(TAG, "onPublish: '" + wordsString
-                                + "', hc: " + logUnit.containsUserDeletions()
-                                + ", cipd: " + canIncludePrivateData);
-                    }
-                    for (final String word : logUnit.getWordsAsStringArray()) {
-                        final boolean isDictionaryWord = mDictionaryFacilitator != null
-                                && mDictionaryFacilitator.isValidMainDictWord(word);
-                        mStatistics.recordWordEntered(
-                                isDictionaryWord, logUnit.containsUserDeletions());
-                    }
-                }
-                publishLogUnits(logUnits, mMainResearchLog, canIncludePrivateData);
-            }
-        };
-    }
-
-    private void cleanLogDirectoryIfNeeded(final ResearchLogDirectory researchLogDirectory,
-            final long now) {
-        final long lastCleanupTime = ResearchSettings.readResearchLastDirCleanupTime(mPrefs);
-        if (now - lastCleanupTime < DURATION_BETWEEN_DIR_CLEANUP_IN_MS) return;
-        final long oldestAllowedFileTime = now - MAX_LOGFILE_AGE_IN_MS;
-        mResearchLogDirectory.cleanupLogFilesOlderThan(oldestAllowedFileTime);
-        ResearchSettings.writeResearchLastDirCleanupTime(mPrefs, now);
-    }
-
-    public void mainKeyboardView_onAttachedToWindow(final MainKeyboardView mainKeyboardView) {
-        mMainKeyboardView = mainKeyboardView;
-        maybeShowSplashScreen();
-    }
-
-    public void mainKeyboardView_onDetachedFromWindow() {
-        mMainKeyboardView = null;
-    }
-
-    public void onDestroy() {
-        if (mPrefs != null) {
-            mPrefs.unregisterOnSharedPreferenceChangeListener(this);
-        }
-    }
-
-    private void maybeShowSplashScreen() {
-        if (ResearchSettings.readHasSeenSplash(mPrefs)) return;
-        if (mSplashScreen != null && mSplashScreen.isShowing()) return;
-        if (mMainKeyboardView == null) return;
-        final IBinder windowToken = mMainKeyboardView.getWindowToken();
-        if (windowToken == null) return;
-
-        mSplashScreen = new SplashScreen(mLatinIME, this);
-        mSplashScreen.showSplashScreen(windowToken);
-    }
-
-    @Override
-    public void onSplashScreenUserClickedOk() {
-        if (mPrefs == null) {
-            mPrefs = PreferenceManager.getDefaultSharedPreferences(mLatinIME);
-            if (mPrefs == null) return;
-        }
-        sIsLogging = true;
-        ResearchSettings.writeResearchLoggerEnabledFlag(mPrefs, true);
-        ResearchSettings.writeHasSeenSplash(mPrefs, true);
-        restart();
-    }
-
-    private void checkForEmptyEditor() {
-        if (mLatinIME == null) {
-            return;
-        }
-        final InputConnection ic = mLatinIME.getCurrentInputConnection();
-        if (ic == null) {
-            return;
-        }
-        final CharSequence textBefore = ic.getTextBeforeCursor(1, 0);
-        if (!TextUtils.isEmpty(textBefore)) {
-            mStatistics.setIsEmptyUponStarting(false);
-            return;
-        }
-        final CharSequence textAfter = ic.getTextAfterCursor(1, 0);
-        if (!TextUtils.isEmpty(textAfter)) {
-            mStatistics.setIsEmptyUponStarting(false);
-            return;
-        }
-        if (textBefore != null && textAfter != null) {
-            mStatistics.setIsEmptyUponStarting(true);
-        }
-    }
-
-    private void start() {
-        if (DEBUG) {
-            Log.d(TAG, "start called");
-        }
-        maybeShowSplashScreen();
-        requestIndicatorRedraw();
-        mStatistics.reset();
-        checkForEmptyEditor();
-    }
-
-    /* package */ void stop() {
-        if (DEBUG) {
-            Log.d(TAG, "stop called");
-        }
-        // Commit mCurrentLogUnit before closing.
-        commitCurrentLogUnit();
-
-        try {
-            mMainLogBuffer.shiftAndPublishAll();
-        } catch (final IOException e) {
-            Log.w(TAG, "IOException when publishing LogBuffer", e);
-        }
-        logStatistics();
-        commitCurrentLogUnit();
-        mMainLogBuffer.setIsStopping();
-        try {
-            mMainLogBuffer.shiftAndPublishAll();
-        } catch (final IOException e) {
-            Log.w(TAG, "IOException when publishing LogBuffer", e);
-        }
-        mMainResearchLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
-
-        resetLogBuffers();
-        cancelFeedbackDialog();
-    }
-
-    public void abort() {
-        if (DEBUG) {
-            Log.d(TAG, "abort called");
-        }
-        mMainLogBuffer.clear();
-        mMainResearchLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
-
-        resetLogBuffers();
-    }
-
-    private void restart() {
-        stop();
-        start();
-    }
-
-    @Override
-    public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
-        if (key == null || prefs == null) {
-            return;
-        }
-        requestIndicatorRedraw();
-        mPrefs = prefs;
-        prefsChanged(prefs);
-    }
-
-    public void onResearchKeySelected(final LatinIME latinIME) {
-        mCurrentLogUnit.removeResearchButtonInvocation();
-        if (mInFeedbackDialog) {
-            Toast.makeText(latinIME, R.string.research_please_exit_feedback_form,
-                    Toast.LENGTH_LONG).show();
-            return;
-        }
-        presentFeedbackDialog(latinIME);
-    }
-
-    public void presentFeedbackDialogFromSettings() {
-        if (mLatinIME != null) {
-            presentFeedbackDialog(mLatinIME);
-        }
-    }
-
-    public void presentFeedbackDialog(final LatinIME latinIME) {
-        if (isMakingUserRecording()) {
-            saveRecording();
-        }
-        mInFeedbackDialog = true;
-
-        final Intent intent = new Intent();
-        intent.setClass(mLatinIME, FeedbackActivity.class);
-        if (mFeedbackDialogBundle == null) {
-            // Restore feedback field with channel name
-            final Bundle bundle = new Bundle();
-            bundle.putBoolean(FeedbackFragment.KEY_INCLUDE_ACCOUNT_NAME, true);
-            bundle.putBoolean(FeedbackFragment.KEY_HAS_USER_RECORDING, false);
-            if (FEEDBACK_DIALOG_SHOULD_PRESERVE_TEXT_FIELD) {
-                final String savedChannelName = mPrefs.getString(PREF_RESEARCH_SAVED_CHANNEL, "");
-                bundle.putString(FeedbackFragment.KEY_FEEDBACK_STRING, savedChannelName);
-            }
-            mFeedbackDialogBundle = bundle;
-        }
-        intent.putExtras(mFeedbackDialogBundle);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        latinIME.startActivity(intent);
-    }
-
-    public void setFeedbackDialogBundle(final Bundle bundle) {
-        mFeedbackDialogBundle = bundle;
-    }
-
-    public void startRecording() {
-        final Resources res = mLatinIME.getResources();
-        Toast.makeText(mLatinIME,
-                res.getString(R.string.research_feedback_demonstration_instructions),
-                Toast.LENGTH_LONG).show();
-        startRecordingInternal();
-    }
-
-    private void startRecordingInternal() {
-        if (mUserRecordingLog != null) {
-            mUserRecordingLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
-        }
-        mUserRecordingFile = mResearchLogDirectory.getUserRecordingFilePath(
-                System.currentTimeMillis(), System.nanoTime());
-        mUserRecordingLog = new ResearchLog(mUserRecordingFile, mLatinIME);
-        mUserRecordingLogBuffer = new LogBuffer();
-        resetRecordingTimer();
-    }
-
-    private boolean isMakingUserRecording() {
-        return mUserRecordingLog != null;
-    }
-
-    private void resetRecordingTimer() {
-        if (mUserRecordingTimeoutHandler == null) {
-            mUserRecordingTimeoutHandler = new Handler();
-        }
-        clearRecordingTimer();
-        mUserRecordingTimeoutHandler.postDelayed(mRecordingHandlerTimeoutRunnable,
-                USER_RECORDING_TIMEOUT_MS);
-    }
-
-    private void clearRecordingTimer() {
-        mUserRecordingTimeoutHandler.removeCallbacks(mRecordingHandlerTimeoutRunnable);
-    }
-
-    private Runnable mRecordingHandlerTimeoutRunnable = new Runnable() {
-        @Override
-        public void run() {
-            cancelRecording();
-            requestIndicatorRedraw();
-            final Resources res = mLatinIME.getResources();
-            Toast.makeText(mLatinIME, res.getString(R.string.research_feedback_recording_failure),
-                    Toast.LENGTH_LONG).show();
-        }
-    };
-
-    private void cancelRecording() {
-        if (mUserRecordingLog != null) {
-            mUserRecordingLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
-        }
-        mUserRecordingLog = null;
-        mUserRecordingLogBuffer = null;
-        if (mFeedbackDialogBundle != null) {
-            mFeedbackDialogBundle.putBoolean("HasRecording", false);
-        }
-    }
-
-    private void saveRecording() {
-        commitCurrentLogUnit();
-        publishLogBuffer(mUserRecordingLogBuffer, mUserRecordingLog, true);
-        mUserRecordingLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
-        mUserRecordingLog = null;
-        mUserRecordingLogBuffer = null;
-
-        if (mFeedbackDialogBundle != null) {
-            mFeedbackDialogBundle.putBoolean(FeedbackFragment.KEY_HAS_USER_RECORDING, true);
-        }
-        clearRecordingTimer();
-    }
-
-    // TODO: currently unreachable.  Remove after being sure enable/disable is
-    // not needed.
-    /*
-    public void enableOrDisable(final boolean showEnable, final LatinIME latinIME) {
-        if (showEnable) {
-            if (!sIsLogging) {
-                setLoggingAllowed(true);
-            }
-            resumeLogging();
-            Toast.makeText(latinIME,
-                    R.string.research_notify_session_logging_enabled,
-                    Toast.LENGTH_LONG).show();
-        } else {
-            Toast toast = Toast.makeText(latinIME,
-                    R.string.research_notify_session_log_deleting,
-                    Toast.LENGTH_LONG);
-            toast.show();
-            boolean isLogDeleted = abort();
-            final long currentTime = System.currentTimeMillis();
-            final long resumeTime = currentTime
-                    + TimeUnit.MINUTES.toMillis(SUSPEND_DURATION_IN_MINUTES);
-            suspendLoggingUntil(resumeTime);
-            toast.cancel();
-            Toast.makeText(latinIME, R.string.research_notify_logging_suspended,
-                    Toast.LENGTH_LONG).show();
-        }
-    }
-    */
-
-    /**
-     * Get the name of the first allowed account on the device.
-     *
-     * Allowed accounts must be in the domain given by ALLOWED_ACCOUNT_DOMAIN.
-     *
-     * @return The user's account name.
-     */
-    public String getAccountName() {
-        if (sAccountType == null || sAccountType.isEmpty()) {
-            return null;
-        }
-        if (sAllowedAccountDomain == null || sAllowedAccountDomain.isEmpty()) {
-            return null;
-        }
-        final AccountManager manager = AccountManager.get(mLatinIME);
-        // Filter first by account type.
-        final Account[] accounts = manager.getAccountsByType(sAccountType);
-
-        for (final Account account : accounts) {
-            if (DEBUG) {
-                Log.d(TAG, account.name);
-            }
-            final String[] parts = account.name.split("@");
-            if (parts.length > 1 && parts[1].equals(sAllowedAccountDomain)) {
-                return parts[0];
-            }
-        }
-        return null;
-    }
-
-    private static final LogStatement LOGSTATEMENT_FEEDBACK =
-            new LogStatement("UserFeedback", false, false, "contents", "accountName", "recording");
-    public void sendFeedback(final String feedbackContents, final boolean includeHistory,
-            final boolean isIncludingAccountName, final boolean isIncludingRecording) {
-        String recording = "";
-        if (isIncludingRecording) {
-            // Try to read recording from recently written json file
-            if (mUserRecordingFile != null) {
-                FileChannel channel = null;
-                try {
-                    channel = new FileInputStream(mUserRecordingFile).getChannel();
-                    final MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0,
-                            channel.size());
-                    // Android's openFileOutput() creates the file, so we use Android's default
-                    // Charset (UTF-8) here to read it.
-                    recording = Charset.defaultCharset().decode(buffer).toString();
-                } catch (FileNotFoundException e) {
-                    Log.e(TAG, "Could not find recording file", e);
-                } catch (IOException e) {
-                    Log.e(TAG, "Error reading recording file", e);
-                } finally {
-                    if (channel != null) {
-                        try {
-                            channel.close();
-                        } catch (IOException e) {
-                            Log.e(TAG, "Error closing recording file", e);
-                        }
-                    }
-                }
-            }
-        }
-        final LogUnit feedbackLogUnit = new LogUnit();
-        final String accountName = isIncludingAccountName ? getAccountName() : "";
-        feedbackLogUnit.addLogStatement(LOGSTATEMENT_FEEDBACK, SystemClock.uptimeMillis(),
-                feedbackContents, accountName, recording);
-
-        final ResearchLog feedbackLog = new FeedbackLog(mResearchLogDirectory.getLogFilePath(
-                System.currentTimeMillis(), System.nanoTime()), mLatinIME);
-        final LogBuffer feedbackLogBuffer = new LogBuffer();
-        feedbackLogBuffer.shiftIn(feedbackLogUnit);
-        publishLogBuffer(feedbackLogBuffer, feedbackLog, true /* isIncludingPrivateData */);
-        feedbackLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
-        uploadNow();
-
-        if (isIncludingRecording && DEBUG_REPLAY_AFTER_FEEDBACK) {
-            final Handler handler = new Handler();
-            handler.postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    final ReplayData replayData =
-                            mMotionEventReader.readMotionEventData(mUserRecordingFile);
-                    mReplayer.replay(replayData, null);
-                }
-            }, TimeUnit.SECONDS.toMillis(1));
-        }
-
-        if (FEEDBACK_DIALOG_SHOULD_PRESERVE_TEXT_FIELD) {
-            // Use feedback string as a channel name to label feedback strings.  Here we record the
-            // string for prepopulating the field next time.
-            final String channelName = feedbackContents;
-            if (mPrefs == null) {
-                return;
-            }
-            mPrefs.edit().putString(PREF_RESEARCH_SAVED_CHANNEL, channelName).apply();
-        }
-    }
-
-    public void uploadNow() {
-        if (DEBUG) {
-            Log.d(TAG, "calling uploadNow()");
-        }
-        mLatinIME.startService(mUploadNowIntent);
-    }
-
-    public void onLeavingSendFeedbackDialog() {
-        mInFeedbackDialog = false;
-    }
-
-    private void cancelFeedbackDialog() {
-        if (isMakingUserRecording()) {
-            cancelRecording();
-        }
-        mInFeedbackDialog = false;
-    }
-
-    public void initDictionary(final DictionaryFacilitatorForSuggest dictionaryFacilitator) {
-        mDictionaryFacilitator = dictionaryFacilitator;
-        // MainLogBuffer now has an out-of-date Suggest object.  Close down MainLogBuffer and create
-        // a new one.
-        if (mMainLogBuffer != null) {
-            restart();
-        }
-    }
-
-    private void setIsPasswordView(boolean isPasswordView) {
-        mIsPasswordView = isPasswordView;
-    }
-
-    /**
-     * Returns true if logging is permitted.
-     *
-     * This method is called when adding a LogStatement to a LogUnit, and when adding a LogUnit to a
-     * ResearchLog.  It is checked in both places in case conditions change between these times, and
-     * as a defensive measure in case refactoring changes the logging pipeline.
-     */
-    private boolean isAllowedToLogTo(final ResearchLog researchLog) {
-        // Logging is never allowed in these circumstances
-        if (mIsPasswordView) return false;
-        if (!sIsLogging) return false;
-        if (mInFeedbackDialog) {
-            // The FeedbackDialog is up.  Normal logging should not happen (the user might be trying
-            // out things while the dialog is up, and their reporting of an issue may not be
-            // representative of what they normally type).  However, after the user has finished
-            // entering their feedback, the logger packs their comments and an encoded version of
-            // any demonstration of the issue into a special "FeedbackLog".  So if the FeedbackLog
-            // is the destination, we do want to allow logging to it.
-            return researchLog.isFeedbackLog();
-        }
-        // No other exclusions.  Logging is permitted.
-        return true;
-    }
-
-    public void requestIndicatorRedraw() {
-        if (!IS_SHOWING_INDICATOR) {
-            return;
-        }
-        if (mMainKeyboardView == null) {
-            return;
-        }
-        mMainKeyboardView.invalidateAllKeys();
-    }
-
-    private boolean isReplaying() {
-        return mReplayer.isReplaying();
-    }
-
-    private int getIndicatorColor() {
-        if (isMakingUserRecording()) {
-            return Color.YELLOW;
-        }
-        if (isReplaying()) {
-            return Color.GREEN;
-        }
-        return Color.RED;
-    }
-
-    public void paintIndicator(KeyboardView view, Paint paint, Canvas canvas, int width,
-            int height) {
-        // TODO: Reimplement using a keyboard background image specific to the ResearchLogger
-        // and remove this method.
-        // The check for MainKeyboardView ensures that the indicator only decorates the main
-        // keyboard, not every keyboard.
-        if (IS_SHOWING_INDICATOR && (isAllowedToLogTo(mMainResearchLog) || isReplaying())
-                && view instanceof MainKeyboardView) {
-            final int savedColor = paint.getColor();
-            paint.setColor(getIndicatorColor());
-            final Style savedStyle = paint.getStyle();
-            paint.setStyle(Style.STROKE);
-            final float savedStrokeWidth = paint.getStrokeWidth();
-            if (IS_SHOWING_INDICATOR_CLEARLY) {
-                paint.setStrokeWidth(5);
-                canvas.drawLine(0, 0, 0, height, paint);
-                canvas.drawLine(width, 0, width, height, paint);
-            } else {
-                // Put a tiny dot on the screen so a knowledgeable user can check whether it is
-                // enabled.  The dot is actually a zero-width, zero-height rectangle, placed at the
-                // lower-right corner of the canvas, painted with a non-zero border width.
-                paint.setStrokeWidth(3);
-                canvas.drawRect(width - 1, height - 1, width, height, paint);
-            }
-            paint.setColor(savedColor);
-            paint.setStyle(savedStyle);
-            paint.setStrokeWidth(savedStrokeWidth);
-        }
-    }
-
-    /**
-     * Buffer a research log event, flagging it as privacy-sensitive.
-     */
-    private synchronized void enqueueEvent(final LogStatement logStatement,
-            final Object... values) {
-        enqueueEvent(mCurrentLogUnit, logStatement, values);
-    }
-
-    private synchronized void enqueueEvent(final LogUnit logUnit, final LogStatement logStatement,
-            final Object... values) {
-        assert values.length == logStatement.getKeys().length;
-        if (isAllowedToLogTo(mMainResearchLog) && logUnit != null) {
-            final long time = SystemClock.uptimeMillis();
-            logUnit.addLogStatement(logStatement, time, values);
-        }
-    }
-
-    private void setCurrentLogUnitContainsDigitFlag() {
-        mCurrentLogUnit.setMayContainDigit();
-    }
-
-    private void setCurrentLogUnitContainsUserDeletions() {
-        mCurrentLogUnit.setContainsUserDeletions();
-    }
-
-    private void setCurrentLogUnitCorrectionType(final int correctionType) {
-        mCurrentLogUnit.setCorrectionType(correctionType);
-    }
-
-    /* package for test */ void commitCurrentLogUnit() {
-        if (DEBUG) {
-            Log.d(TAG, "commitCurrentLogUnit" + (mCurrentLogUnit.hasOneOrMoreWords() ?
-                    ": " + mCurrentLogUnit.getWordsAsString() : ""));
-        }
-        if (!mCurrentLogUnit.isEmpty()) {
-            mMainLogBuffer.shiftIn(mCurrentLogUnit);
-            if (mUserRecordingLogBuffer != null) {
-                mUserRecordingLogBuffer.shiftIn(mCurrentLogUnit);
-            }
-            mCurrentLogUnit = new LogUnit();
-        } else {
-            if (DEBUG) {
-                Log.d(TAG, "Warning: tried to commit empty log unit.");
-            }
-        }
-    }
-
-    private static final LogStatement LOGSTATEMENT_UNCOMMIT_CURRENT_LOGUNIT =
-            new LogStatement("UncommitCurrentLogUnit", false, false);
-    public void uncommitCurrentLogUnit(final String expectedWord,
-            final boolean dumpCurrentLogUnit) {
-        // The user has deleted this word and returned to the previous.  Check that the word in the
-        // logUnit matches the expected word.  If so, restore the last log unit committed to be the
-        // current logUnit.  I.e., pull out the last LogUnit from all the LogBuffers, and make
-        // it the mCurrentLogUnit so the new edits are captured with the word.  Optionally dump the
-        // contents of mCurrentLogUnit (useful if they contain deletions of the next word that
-        // should not be reported to protect user privacy)
-        //
-        // Note that we don't use mLastLogUnit here, because it only goes one word back and is only
-        // needed for reverts, which only happen one back.
-        final LogUnit oldLogUnit = mMainLogBuffer.peekLastLogUnit();
-
-        // Check that expected word matches.  It's ok if both strings are null, because this is the
-        // case where the LogUnit is storing a non-word, e.g. a separator.
-        if (oldLogUnit != null) {
-            // Because the word is stored in the LogUnit with digits scrubbed, the comparison must
-            // be made on a scrubbed version of the expectedWord as well.
-            final String scrubbedExpectedWord = scrubDigitsFromString(expectedWord);
-            final String oldLogUnitWords = oldLogUnit.getWordsAsString();
-            if (!TextUtils.equals(scrubbedExpectedWord, oldLogUnitWords)) return;
-        }
-
-        // Uncommit, merging if necessary.
-        mMainLogBuffer.unshiftIn();
-        if (oldLogUnit != null && !dumpCurrentLogUnit) {
-            oldLogUnit.append(mCurrentLogUnit);
-            mSavedDownEventTime = Long.MAX_VALUE;
-        }
-        if (oldLogUnit == null) {
-            mCurrentLogUnit = new LogUnit();
-        } else {
-            mCurrentLogUnit = oldLogUnit;
-        }
-        enqueueEvent(LOGSTATEMENT_UNCOMMIT_CURRENT_LOGUNIT);
-        if (DEBUG) {
-            Log.d(TAG, "uncommitCurrentLogUnit (dump=" + dumpCurrentLogUnit + ") back to "
-                    + (mCurrentLogUnit.hasOneOrMoreWords() ? ": '"
-                        + mCurrentLogUnit.getWordsAsString() + "'" : ""));
-        }
-    }
-
-    /**
-     * Publish all the logUnits in the logBuffer, without doing any privacy filtering.
-     */
-    /* package for test */ void publishLogBuffer(final LogBuffer logBuffer,
-            final ResearchLog researchLog, final boolean canIncludePrivateData) {
-        publishLogUnits(logBuffer.getLogUnits(), researchLog, canIncludePrivateData);
-    }
-
-    private static final LogStatement LOGSTATEMENT_LOG_SEGMENT_OPENING =
-            new LogStatement("logSegmentStart", false, false, "isIncludingPrivateData");
-    private static final LogStatement LOGSTATEMENT_LOG_SEGMENT_CLOSING =
-            new LogStatement("logSegmentEnd", false, false);
-    /**
-     * Publish all LogUnits in a list.
-     *
-     * Any privacy checks should be performed before calling this method.
-     */
-    /* package for test */ void publishLogUnits(final List<LogUnit> logUnits,
-            final ResearchLog researchLog, final boolean canIncludePrivateData) {
-        final LogUnit openingLogUnit = new LogUnit();
-        if (logUnits.isEmpty()) return;
-        if (!isAllowedToLogTo(researchLog)) return;
-        // LogUnits not containing private data, such as contextual data for the log, do not require
-        // logSegment boundary statements.
-        if (canIncludePrivateData) {
-            openingLogUnit.addLogStatement(LOGSTATEMENT_LOG_SEGMENT_OPENING,
-                    SystemClock.uptimeMillis(), canIncludePrivateData);
-            researchLog.publish(openingLogUnit, true /* isIncludingPrivateData */);
-        }
-        for (LogUnit logUnit : logUnits) {
-            if (DEBUG) {
-                Log.d(TAG, "publishLogBuffer: " + (logUnit.hasOneOrMoreWords()
-                        ? logUnit.getWordsAsString() : "<wordless>")
-                        + ", correction?: " + logUnit.containsUserDeletions());
-            }
-            researchLog.publish(logUnit, canIncludePrivateData);
-        }
-        if (canIncludePrivateData) {
-            final LogUnit closingLogUnit = new LogUnit();
-            closingLogUnit.addLogStatement(LOGSTATEMENT_LOG_SEGMENT_CLOSING,
-                    SystemClock.uptimeMillis());
-            researchLog.publish(closingLogUnit, true /* isIncludingPrivateData */);
-        }
-    }
-
-    public static boolean hasLetters(final String word) {
-        final int length = word.length();
-        for (int i = 0; i < length; i = word.offsetByCodePoints(i, 1)) {
-            final int codePoint = word.codePointAt(i);
-            if (Character.isLetter(codePoint)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Commit the portion of mCurrentLogUnit before maxTime as a worded logUnit.
-     *
-     * After this operation completes, mCurrentLogUnit will hold any logStatements that happened
-     * after maxTime.
-     */
-    /* package for test */ void commitCurrentLogUnitAsWord(final String word, final long maxTime,
-            final boolean isBatchMode) {
-        if (word == null) {
-            return;
-        }
-        if (word.length() > 0 && hasLetters(word)) {
-            mCurrentLogUnit.setWords(word);
-        }
-        final LogUnit newLogUnit = mCurrentLogUnit.splitByTime(maxTime);
-        enqueueCommitText(word, isBatchMode);
-        commitCurrentLogUnit();
-        mCurrentLogUnit = newLogUnit;
-    }
-
-    /**
-     * Record the time of a MotionEvent.ACTION_DOWN.
-     *
-     * Warning: Not thread safe.  Only call from the main thread.
-     */
-    private void setSavedDownEventTime(final long time) {
-        mSavedDownEventTime = time;
-    }
-
-    public void onWordFinished(final String word, final boolean isBatchMode) {
-        commitCurrentLogUnitAsWord(word, mSavedDownEventTime, isBatchMode);
-        mSavedDownEventTime = Long.MAX_VALUE;
-    }
-
-    private static int scrubDigitFromCodePoint(int codePoint) {
-        return Character.isDigit(codePoint) ? DIGIT_REPLACEMENT_CODEPOINT : codePoint;
-    }
-
-    /* package for test */ static String scrubDigitsFromString(final String s) {
-        if (s == null) return null;
-        StringBuilder sb = null;
-        final int length = s.length();
-        for (int i = 0; i < length; i = s.offsetByCodePoints(i, 1)) {
-            final int codePoint = Character.codePointAt(s, i);
-            if (Character.isDigit(codePoint)) {
-                if (sb == null) {
-                    sb = new StringBuilder(length);
-                    sb.append(s.substring(0, i));
-                }
-                sb.appendCodePoint(DIGIT_REPLACEMENT_CODEPOINT);
-            } else {
-                if (sb != null) {
-                    sb.appendCodePoint(codePoint);
-                }
-            }
-        }
-        if (sb == null) {
-            return s;
-        } else {
-            return sb.toString();
-        }
-    }
-
-    private String scrubWord(String word) {
-        if (mDictionaryFacilitator != null && mDictionaryFacilitator.isValidMainDictWord(word)) {
-            return word;
-        }
-        return WORD_REPLACEMENT_STRING;
-    }
-
-    // Specific logging methods follow below.  The comments for each logging method should
-    // indicate what specific method is logged, and how to trigger it from the user interface.
-    //
-    // Logging methods can be generally classified into two flavors, "UserAction", which should
-    // correspond closely to an event that is sensed by the IME, and is usually generated
-    // directly by the user, and "SystemResponse" which corresponds to an event that the IME
-    // generates, often after much processing of user input.  SystemResponses should correspond
-    // closely to user-visible events.
-    // TODO: Consider exposing the UserAction classification in the log output.
-
-    /**
-     * Log a call to LatinIME.onStartInputViewInternal().
-     *
-     * UserAction: called each time the keyboard is opened up.
-     */
-    private static final LogStatement LOGSTATEMENT_LATIN_IME_ON_START_INPUT_VIEW_INTERNAL =
-            new LogStatement("LatinImeOnStartInputViewInternal", false, false, "uuid",
-                    "packageName", "inputType", "imeOptions", "fieldId", "display", "model",
-                    "prefs", "versionCode", "versionName", "outputFormatVersion", "logEverything",
-                    "isDevTeamBuild");
-    public static void latinIME_onStartInputViewInternal(final EditorInfo editorInfo,
-            final SharedPreferences prefs) {
-        final ResearchLogger researchLogger = getInstance();
-        if (editorInfo != null) {
-            final boolean isPassword = InputTypeUtils.isPasswordInputType(editorInfo.inputType)
-                    || InputTypeUtils.isVisiblePasswordInputType(editorInfo.inputType);
-            getInstance().setIsPasswordView(isPassword);
-            researchLogger.start();
-            final Context context = researchLogger.mLatinIME;
-            try {
-                final PackageInfo packageInfo;
-                packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(),
-                        0);
-                final Integer versionCode = packageInfo.versionCode;
-                final String versionName = packageInfo.versionName;
-                final String uuid = ResearchSettings.readResearchLoggerUuid(researchLogger.mPrefs);
-                researchLogger.enqueueEvent(LOGSTATEMENT_LATIN_IME_ON_START_INPUT_VIEW_INTERNAL,
-                        uuid, editorInfo.packageName, Integer.toHexString(editorInfo.inputType),
-                        Integer.toHexString(editorInfo.imeOptions), editorInfo.fieldId,
-                        Build.DISPLAY, Build.MODEL, prefs, versionCode, versionName,
-                        OUTPUT_FORMAT_VERSION, IS_LOGGING_EVERYTHING,
-                        researchLogger.isDevTeamBuild());
-                // Commit the logUnit so the LatinImeOnStartInputViewInternal event is in its own
-                // logUnit at the beginning of the log.
-                researchLogger.commitCurrentLogUnit();
-            } catch (final NameNotFoundException e) {
-                Log.e(TAG, "NameNotFound", e);
-            }
-        }
-    }
-
-    // TODO: Update this heuristic pattern to something more reliable.  Developer builds tend to
-    // have the developer name and year embedded.
-    private static final Pattern developerBuildRegex = Pattern.compile("[A-Za-z]\\.20[1-9]");
-    private boolean isDevTeamBuild() {
-        try {
-            final PackageInfo packageInfo;
-            packageInfo = mLatinIME.getPackageManager().getPackageInfo(mLatinIME.getPackageName(),
-                    0);
-            final String versionName = packageInfo.versionName;
-            return developerBuildRegex.matcher(versionName).find();
-        } catch (final NameNotFoundException e) {
-            Log.e(TAG, "Could not determine package name", e);
-            return false;
-        }
-    }
-
-    /**
-     * Log a change in preferences.
-     *
-     * UserAction: called when the user changes the settings.
-     */
-    private static final LogStatement LOGSTATEMENT_PREFS_CHANGED =
-            new LogStatement("PrefsChanged", false, false, "prefs");
-    public static void prefsChanged(final SharedPreferences prefs) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.enqueueEvent(LOGSTATEMENT_PREFS_CHANGED, prefs);
-    }
-
-    /**
-     * Log a call to MainKeyboardView.processMotionEvent().
-     *
-     * UserAction: called when the user puts their finger onto the screen (ACTION_DOWN).
-     *
-     */
-    private static final LogStatement LOGSTATEMENT_MAIN_KEYBOARD_VIEW_PROCESS_MOTION_EVENT =
-            new LogStatement("MotionEvent", true, false, "action",
-                    LogStatement.KEY_IS_LOGGING_RELATED, "motionEvent");
-    public static void mainKeyboardView_processMotionEvent(final MotionEvent me) {
-        if (me == null) {
-            return;
-        }
-        final int action = me.getActionMasked();
-        final long eventTime = me.getEventTime();
-        final String actionString = LoggingUtils.getMotionEventActionTypeString(action);
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.enqueueEvent(LOGSTATEMENT_MAIN_KEYBOARD_VIEW_PROCESS_MOTION_EVENT,
-                actionString, false /* IS_LOGGING_RELATED */, MotionEvent.obtain(me));
-        if (action == MotionEvent.ACTION_DOWN) {
-            // Subtract 1 from eventTime so the down event is included in the later
-            // LogUnit, not the earlier (the test is for inequality).
-            researchLogger.setSavedDownEventTime(eventTime - 1);
-        }
-        // Refresh the timer in case we are capturing user feedback.
-        if (researchLogger.isMakingUserRecording()) {
-            researchLogger.resetRecordingTimer();
-        }
-    }
-
-    /**
-     * Log a call to LatinIME.onCodeInput().
-     *
-     * SystemResponse: The main processing step for entering text.  Called when the user performs a
-     * tap, a flick, a long press, releases a gesture, or taps a punctuation suggestion.
-     */
-    private static final LogStatement LOGSTATEMENT_LATIN_IME_ON_CODE_INPUT =
-            new LogStatement("LatinImeOnCodeInput", true, false, "code", "x", "y");
-    public static void latinIME_onCodeInput(final int code, final int x, final int y) {
-        final long time = SystemClock.uptimeMillis();
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.enqueueEvent(LOGSTATEMENT_LATIN_IME_ON_CODE_INPUT,
-                Constants.printableCode(scrubDigitFromCodePoint(code)), x, y);
-        if (Character.isDigit(code)) {
-            researchLogger.setCurrentLogUnitContainsDigitFlag();
-        }
-        researchLogger.mStatistics.recordChar(code, time);
-    }
-    /**
-     * Log a call to LatinIME.onDisplayCompletions().
-     *
-     * SystemResponse: The IME has displayed application-specific completions.  They may show up
-     * in the suggestion strip, such as a landscape phone.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_ONDISPLAYCOMPLETIONS =
-            new LogStatement("LatinIMEOnDisplayCompletions", true, true,
-                    "applicationSpecifiedCompletions");
-    public static void latinIME_onDisplayCompletions(
-            final CompletionInfo[] applicationSpecifiedCompletions) {
-        // Note; passing an array as a single element in a vararg list.  Must create a new
-        // dummy array around it or it will get expanded.
-        getInstance().enqueueEvent(LOGSTATEMENT_LATINIME_ONDISPLAYCOMPLETIONS,
-                new Object[] { applicationSpecifiedCompletions });
-    }
-
-    /**
-     * The IME is finishing; it is either being destroyed, or is about to be hidden.
-     *
-     * UserAction: The user has performed an action that has caused the IME to be closed.  They may
-     * have focused on something other than a text field, or explicitly closed it.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_ONFINISHINPUTVIEWINTERNAL =
-            new LogStatement("LatinIMEOnFinishInputViewInternal", false, false, "isTextTruncated",
-                    "text");
-    public static void latinIME_onFinishInputViewInternal(final boolean finishingInput) {
-        // The finishingInput flag is set in InputMethodService.  It is true if called from
-        // doFinishInput(), which can be called as part of doStartInput().  This can happen at times
-        // when the IME is not closing, such as when powering up.  The finishinInput flag is false
-        // if called from finishViews(), which is called from hideWindow() and onDestroy().  These
-        // are the situations in which we want to finish up the researchLog.
-        if (!finishingInput) {
-            final ResearchLogger researchLogger = getInstance();
-            // Assume that OUTPUT_ENTIRE_BUFFER is only true when we don't care about privacy (e.g.
-            // during a live user test), so the normal isPotentiallyPrivate and
-            // isPotentiallyRevealing flags do not apply
-            researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_ONFINISHINPUTVIEWINTERNAL,
-                    true /* isTextTruncated */, "" /* text */);
-            researchLogger.commitCurrentLogUnit();
-            getInstance().stop();
-        }
-    }
-
-    /**
-     * Log a call to LatinIME.onUpdateSelection().
-     *
-     * UserAction/SystemResponse: The user has moved the cursor or selection.  This function may
-     * be called, however, when the system has moved the cursor, say by inserting a character.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_ONUPDATESELECTION =
-            new LogStatement("LatinIMEOnUpdateSelection", true, false, "lastSelectionStart",
-                    "lastSelectionEnd", "oldSelStart", "oldSelEnd", "newSelStart", "newSelEnd",
-                    "composingSpanStart", "composingSpanEnd", "expectingUpdateSelection",
-                    "expectingUpdateSelectionFromLogger", "context");
-    public static void latinIME_onUpdateSelection(final int lastSelectionStart,
-            final int lastSelectionEnd, final int oldSelStart, final int oldSelEnd,
-            final int newSelStart, final int newSelEnd, final int composingSpanStart,
-            final int composingSpanEnd, final RichInputConnection connection) {
-        String word = "";
-        if (connection != null) {
-            TextRange range = connection.getWordRangeAtCursor(WHITESPACE_SEPARATORS, 1);
-            if (range != null) {
-                word = range.mWord.toString();
-            }
-        }
-        final ResearchLogger researchLogger = getInstance();
-        final String scrubbedWord = researchLogger.scrubWord(word);
-        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_ONUPDATESELECTION, lastSelectionStart,
-                lastSelectionEnd, oldSelStart, oldSelEnd, newSelStart, newSelEnd,
-                composingSpanStart, composingSpanEnd, false /* expectingUpdateSelection */,
-                false /* expectingUpdateSelectionFromLogger */, scrubbedWord);
-    }
-
-    /**
-     * Log a call to LatinIME.onTextInput().
-     *
-     * SystemResponse: Raw text is added to the TextView.
-     */
-    public static void latinIME_onTextInput(final String text, final boolean isBatchMode) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.commitCurrentLogUnitAsWord(text, Long.MAX_VALUE, isBatchMode);
-    }
-
-    /**
-     * Log a revert of onTextInput() (known in the IME as "EnteredText").
-     *
-     * SystemResponse: Remove the LogUnit recording the textInput
-     */
-    public static void latinIME_handleBackspace_cancelTextInput(final String text) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.uncommitCurrentLogUnit(text, true /* dumpCurrentLogUnit */);
-    }
-
-    /**
-     * Log a call to LatinIME.pickSuggestionManually().
-     *
-     * UserAction: The user has chosen a specific word from the suggestion strip.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_PICKSUGGESTIONMANUALLY =
-            new LogStatement("LatinIMEPickSuggestionManually", true, false, "replacedWord", "index",
-                    "suggestion", "x", "y", "isBatchMode", "score", "kind", "sourceDict");
-    /**
-     * Log a call to LatinIME.pickSuggestionManually().
-     *
-     * @param replacedWord the typed word that this manual suggestion replaces. May not be null.
-     * @param index the index in the suggestion strip
-     * @param suggestion the committed suggestion. May not be null.
-     * @param isBatchMode whether this was input in batch mode, aka gesture.
-     * @param score the internal score of the suggestion, as output by the dictionary
-     * @param kind the kind of suggestion, as one of the SuggestedWordInfo#KIND_* constants
-     * @param sourceDict the source origin of this word, as one of the Dictionary#TYPE_* constants.
-     */
-    public static void latinIME_pickSuggestionManually(final String replacedWord,
-            final int index, final String suggestion, final boolean isBatchMode,
-            final int score, final int kind, final String sourceDict) {
-        final ResearchLogger researchLogger = getInstance();
-        // Note : suggestion can't be null here, because it's only called in a place where it
-        // can't be null.
-        if (!replacedWord.equals(suggestion.toString())) {
-            // The user chose something other than what was already there.
-            researchLogger.setCurrentLogUnitContainsUserDeletions();
-            researchLogger.setCurrentLogUnitCorrectionType(LogUnit.CORRECTIONTYPE_TYPO);
-        }
-        final String scrubbedWord = scrubDigitsFromString(suggestion);
-        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_PICKSUGGESTIONMANUALLY,
-                scrubDigitsFromString(replacedWord), index,
-                scrubbedWord, Constants.SUGGESTION_STRIP_COORDINATE,
-                Constants.SUGGESTION_STRIP_COORDINATE, isBatchMode, score, kind, sourceDict);
-        researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, Long.MAX_VALUE, isBatchMode);
-        researchLogger.mStatistics.recordManualSuggestion(SystemClock.uptimeMillis());
-    }
-
-    /**
-     * Log a call to LatinIME.punctuationSuggestion().
-     *
-     * UserAction: The user has chosen punctuation from the punctuation suggestion strip.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_PUNCTUATIONSUGGESTION =
-            new LogStatement("LatinIMEPunctuationSuggestion", false, false, "index", "suggestion",
-                    "x", "y", "isPrediction");
-    public static void latinIME_punctuationSuggestion(final int index, final String suggestion,
-            final boolean isBatchMode, final boolean isPrediction) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_PUNCTUATIONSUGGESTION, index, suggestion,
-                Constants.SUGGESTION_STRIP_COORDINATE, Constants.SUGGESTION_STRIP_COORDINATE,
-                isPrediction);
-        researchLogger.commitCurrentLogUnitAsWord(suggestion, Long.MAX_VALUE, isBatchMode);
-    }
-
-    /**
-     * Log a call to LatinIME.sendKeyCodePoint().
-     *
-     * SystemResponse: The IME is inserting text into the TextView for non-word-constituent,
-     * strings (separators, numbers, other symbols).
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_SENDKEYCODEPOINT =
-            new LogStatement("LatinIMESendKeyCodePoint", true, false, "code");
-    public static void latinIME_sendKeyCodePoint(final int code) {
-        final ResearchLogger researchLogger = getInstance();
-        final LogUnit phantomSpaceLogUnit = researchLogger.mPhantomSpaceLogUnit;
-        if (phantomSpaceLogUnit == null) {
-            researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_SENDKEYCODEPOINT,
-                    Constants.printableCode(scrubDigitFromCodePoint(code)));
-            if (Character.isDigit(code)) {
-                researchLogger.setCurrentLogUnitContainsDigitFlag();
-            }
-            researchLogger.commitCurrentLogUnit();
-        } else {
-            researchLogger.enqueueEvent(phantomSpaceLogUnit, LOGSTATEMENT_LATINIME_SENDKEYCODEPOINT,
-                    Constants.printableCode(scrubDigitFromCodePoint(code)));
-            if (Character.isDigit(code)) {
-                phantomSpaceLogUnit.setMayContainDigit();
-            }
-            researchLogger.mMainLogBuffer.shiftIn(phantomSpaceLogUnit);
-            if (researchLogger.mUserRecordingLogBuffer != null) {
-                researchLogger.mUserRecordingLogBuffer.shiftIn(phantomSpaceLogUnit);
-            }
-            researchLogger.mPhantomSpaceLogUnit = null;
-        }
-    }
-
-    /**
-     * Log a call to LatinIME.promotePhantomSpace().
-     *
-     * SystemResponse: The IME is inserting a real space in place of a phantom space.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_PROMOTEPHANTOMSPACE =
-            new LogStatement("LatinIMEPromotePhantomSpace", false, false);
-    public static void latinIME_promotePhantomSpace() {
-        // A phantom space is always added before the text that triggered it.  The triggering text
-        // and the events that created it will be in mCurrentLogUnit, but the phantom space should
-        // be in its own LogUnit, committed before the triggering text.  Although it is created
-        // here, it is not added to the LogBuffer until the following call to
-        // latinIME_sendKeyCodePoint, because SENDKEYCODEPOINT LogStatement also must go into that
-        // LogUnit.
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.mPhantomSpaceLogUnit = new LogUnit();
-        researchLogger.enqueueEvent(researchLogger.mPhantomSpaceLogUnit,
-                LOGSTATEMENT_LATINIME_PROMOTEPHANTOMSPACE);
-    }
-
-    /**
-     * Log a call to LatinIME.swapSwapperAndSpace().
-     *
-     * SystemResponse: A symbol has been swapped with a space character.  E.g. punctuation may swap
-     * if a soft space is inserted after a word.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE =
-            new LogStatement("LatinIMESwapSwapperAndSpace", false, false, "originalCharacters",
-                    "charactersAfterSwap");
-    public static void latinIME_swapSwapperAndSpace(final CharSequence originalCharacters,
-            final String charactersAfterSwap) {
-        final ResearchLogger researchLogger = getInstance();
-        final LogUnit logUnit;
-        logUnit = researchLogger.mMainLogBuffer.peekLastLogUnit();
-        if (logUnit != null) {
-            researchLogger.enqueueEvent(logUnit, LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE,
-                    originalCharacters, charactersAfterSwap);
-        }
-    }
-
-    /**
-     * Log a call to LatinIME.maybeDoubleSpacePeriod().
-     *
-     * SystemResponse: Two spaces have been replaced by period space.
-     */
-    public static void latinIME_maybeDoubleSpacePeriod(final String text,
-            final boolean isBatchMode) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.commitCurrentLogUnitAsWord(text, Long.MAX_VALUE, isBatchMode);
-    }
-
-    /**
-     * Log a call to MainKeyboardView.onLongPress().
-     *
-     * UserAction: The user has performed a long-press on a key.
-     */
-    private static final LogStatement LOGSTATEMENT_MAINKEYBOARDVIEW_ONLONGPRESS =
-            new LogStatement("MainKeyboardViewOnLongPress", false, false);
-    public static void mainKeyboardView_onLongPress() {
-        getInstance().enqueueEvent(LOGSTATEMENT_MAINKEYBOARDVIEW_ONLONGPRESS);
-    }
-
-    /**
-     * Log a call to MainKeyboardView.setKeyboard().
-     *
-     * SystemResponse: The IME has switched to a new keyboard (e.g. French, English).
-     * This is typically called right after LatinIME.onStartInputViewInternal (when starting a new
-     * IME), but may happen at other times if the user explicitly requests a keyboard change.
-     */
-    private static final LogStatement LOGSTATEMENT_MAINKEYBOARDVIEW_SETKEYBOARD =
-            new LogStatement("MainKeyboardViewSetKeyboard", false, false, "elementId", "locale",
-                    "orientation", "width", "modeName", "action", "navigateNext",
-                    "navigatePrevious", "clobberSettingsKey", "passwordInput",
-                    "supportsSwitchingToShortcutIme", "hasShortcutKey", "languageSwitchKeyEnabled",
-                    "isMultiLine", "tw", "th",
-                    "keys");
-    public static void mainKeyboardView_setKeyboard(final Keyboard keyboard,
-            final int orientation) {
-        final KeyboardId kid = keyboard.mId;
-        final boolean isPasswordView = kid.passwordInput();
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.setIsPasswordView(isPasswordView);
-        researchLogger.enqueueEvent(LOGSTATEMENT_MAINKEYBOARDVIEW_SETKEYBOARD,
-                KeyboardId.elementIdToName(kid.mElementId),
-                kid.mLocale + ":" + kid.mSubtype.getExtraValueOf(KEYBOARD_LAYOUT_SET),
-                orientation, kid.mWidth, KeyboardId.modeName(kid.mMode), kid.imeAction(),
-                kid.navigateNext(), kid.navigatePrevious(), kid.mClobberSettingsKey,
-                isPasswordView, kid.mSupportsSwitchingToShortcutIme, kid.mHasShortcutKey,
-                kid.mLanguageSwitchKeyEnabled, kid.isMultiLine(), keyboard.mOccupiedWidth,
-                keyboard.mOccupiedHeight, keyboard.getSortedKeys());
-    }
-
-    /**
-     * Log a call to LatinIME.revertCommit().
-     *
-     * SystemResponse: The IME has reverted commited text.  This happens when the user enters
-     * a word, commits it by pressing space or punctuation, and then reverts the commit by hitting
-     * backspace.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_REVERTCOMMIT =
-            new LogStatement("LatinIMERevertCommit", true, false, "committedWord",
-                    "originallyTypedWord", "separatorString");
-    public static void latinIME_revertCommit(final String committedWord,
-            final String originallyTypedWord, final boolean isBatchMode,
-            final String separatorString) {
-        // TODO: Prioritize adding a unit test for this method (as it is especially complex)
-        // TODO: Update the UserRecording LogBuffer as well as the MainLogBuffer
-        final ResearchLogger researchLogger = getInstance();
-        //
-        // 1. Remove separator LogUnit
-        final LogUnit lastLogUnit = researchLogger.mMainLogBuffer.peekLastLogUnit();
-        // Check that we're not at the beginning of input
-        if (lastLogUnit == null) return;
-        // Check that we're after a separator
-        if (lastLogUnit.getWordsAsString() != null) return;
-        // Remove separator
-        final LogUnit separatorLogUnit = researchLogger.mMainLogBuffer.unshiftIn();
-
-        // 2. Add revert LogStatement
-        final LogUnit revertedLogUnit = researchLogger.mMainLogBuffer.peekLastLogUnit();
-        if (revertedLogUnit == null) return;
-        if (!revertedLogUnit.getWordsAsString().equals(scrubDigitsFromString(committedWord))) {
-            // Any word associated with the reverted LogUnit has already had its digits scrubbed, so
-            // any digits in the committedWord argument must also be scrubbed for an accurate
-            // comparison.
-            return;
-        }
-        researchLogger.enqueueEvent(revertedLogUnit, LOGSTATEMENT_LATINIME_REVERTCOMMIT,
-                committedWord, originallyTypedWord, separatorString);
-
-        // 3. Update the word associated with the LogUnit
-        revertedLogUnit.setWords(originallyTypedWord);
-        revertedLogUnit.setContainsUserDeletions();
-
-        // 4. Re-add the separator LogUnit
-        researchLogger.mMainLogBuffer.shiftIn(separatorLogUnit);
-
-        // 5. Record stats
-        researchLogger.mStatistics.recordRevertCommit(SystemClock.uptimeMillis());
-    }
-
-    /**
-     * Log a call to PointerTracker.callListenerOnCancelInput().
-     *
-     * UserAction: The user has canceled the input, e.g., by pressing down, but then removing
-     * outside the keyboard area.
-     * TODO: Verify
-     */
-    private static final LogStatement LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONCANCELINPUT =
-            new LogStatement("PointerTrackerCallListenerOnCancelInput", false, false);
-    public static void pointerTracker_callListenerOnCancelInput() {
-        getInstance().enqueueEvent(LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONCANCELINPUT);
-    }
-
-    /**
-     * Log a call to PointerTracker.callListenerOnCodeInput().
-     *
-     * SystemResponse: The user has entered a key through the normal tapping mechanism.
-     * LatinIME.onCodeInput will also be called.
-     */
-    private static final LogStatement LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONCODEINPUT =
-            new LogStatement("PointerTrackerCallListenerOnCodeInput", true, false, "code",
-                    "outputText", "x", "y", "ignoreModifierKey", "altersCode", "isEnabled");
-    public static void pointerTracker_callListenerOnCodeInput(final Key key, final int x,
-            final int y, final boolean ignoreModifierKey, final boolean altersCode,
-            final int code) {
-        if (key != null) {
-            String outputText = key.getOutputText();
-            final ResearchLogger researchLogger = getInstance();
-            researchLogger.enqueueEvent(LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONCODEINPUT,
-                    Constants.printableCode(scrubDigitFromCodePoint(code)),
-                    outputText == null ? null : scrubDigitsFromString(outputText.toString()),
-                    x, y, ignoreModifierKey, altersCode, key.isEnabled());
-        }
-    }
-
-    /**
-     * Log a call to PointerTracker.callListenerCallListenerOnRelease().
-     *
-     * UserAction: The user has released their finger or thumb from the screen.
-     */
-    private static final LogStatement LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONRELEASE =
-            new LogStatement("PointerTrackerCallListenerOnRelease", true, false, "code",
-                    "withSliding", "ignoreModifierKey", "isEnabled");
-    public static void pointerTracker_callListenerOnRelease(final Key key, final int primaryCode,
-            final boolean withSliding, final boolean ignoreModifierKey) {
-        if (key != null) {
-            getInstance().enqueueEvent(LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONRELEASE,
-                    Constants.printableCode(scrubDigitFromCodePoint(primaryCode)), withSliding,
-                    ignoreModifierKey, key.isEnabled());
-        }
-    }
-
-    /**
-     * Log a call to PointerTracker.onDownEvent().
-     *
-     * UserAction: The user has pressed down on a key.
-     * TODO: Differentiate with LatinIME.processMotionEvent.
-     */
-    private static final LogStatement LOGSTATEMENT_POINTERTRACKER_ONDOWNEVENT =
-            new LogStatement("PointerTrackerOnDownEvent", true, false, "deltaT", "distanceSquared");
-    public static void pointerTracker_onDownEvent(long deltaT, int distanceSquared) {
-        getInstance().enqueueEvent(LOGSTATEMENT_POINTERTRACKER_ONDOWNEVENT, deltaT,
-                distanceSquared);
-    }
-
-    /**
-     * Log a call to PointerTracker.onMoveEvent().
-     *
-     * UserAction: The user has moved their finger while pressing on the screen.
-     * TODO: Differentiate with LatinIME.processMotionEvent().
-     */
-    private static final LogStatement LOGSTATEMENT_POINTERTRACKER_ONMOVEEVENT =
-            new LogStatement("PointerTrackerOnMoveEvent", true, false, "x", "y", "lastX", "lastY");
-    public static void pointerTracker_onMoveEvent(final int x, final int y, final int lastX,
-            final int lastY) {
-        getInstance().enqueueEvent(LOGSTATEMENT_POINTERTRACKER_ONMOVEEVENT, x, y, lastX, lastY);
-    }
-
-    /**
-     * Log a call to RichInputConnection.commitCompletion().
-     *
-     * SystemResponse: The IME has committed a completion.  A completion is an application-
-     * specific suggestion that is presented in a pop-up menu in the TextView.
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_COMMITCOMPLETION =
-            new LogStatement("RichInputConnectionCommitCompletion", true, false, "completionInfo");
-    public static void richInputConnection_commitCompletion(final CompletionInfo completionInfo) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_COMMITCOMPLETION,
-                completionInfo);
-    }
-
-    /**
-     * Log a call to RichInputConnection.revertDoubleSpacePeriod().
-     *
-     * SystemResponse: The IME has reverted ". ", which had previously replaced two typed spaces.
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_REVERTDOUBLESPACEPERIOD =
-            new LogStatement("RichInputConnectionRevertDoubleSpacePeriod", false, false);
-    public static void richInputConnection_revertDoubleSpacePeriod() {
-        final ResearchLogger researchLogger = getInstance();
-        // An extra LogUnit is added for the period; this is removed here because of the revert.
-        researchLogger.uncommitCurrentLogUnit(null, true /* dumpCurrentLogUnit */);
-        // TODO: This will probably be lost as the user backspaces further.  Figure out how to put
-        // it into the right logUnit.
-        researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_REVERTDOUBLESPACEPERIOD);
-    }
-
-    /**
-     * Log a call to RichInputConnection.revertSwapPunctuation().
-     *
-     * SystemResponse: The IME has reverted a punctuation swap.
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_REVERTSWAPPUNCTUATION =
-            new LogStatement("RichInputConnectionRevertSwapPunctuation", false, false);
-    public static void richInputConnection_revertSwapPunctuation() {
-        getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_REVERTSWAPPUNCTUATION);
-    }
-
-    /**
-     * Log a call to LatinIME.commitCurrentAutoCorrection().
-     *
-     * SystemResponse: The IME has committed an auto-correction.  An auto-correction changes the raw
-     * text input to another word (or words) that the user more likely desired to type.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION =
-            new LogStatement("LatinIMECommitCurrentAutoCorrection", true, true, "typedWord",
-                    "autoCorrection", "separatorString");
-    public static void latinIme_commitCurrentAutoCorrection(final String typedWord,
-            final String autoCorrection, final String separatorString, final boolean isBatchMode,
-            final SuggestedWords suggestedWords) {
-        final String scrubbedTypedWord = scrubDigitsFromString(typedWord);
-        final String scrubbedAutoCorrection = scrubDigitsFromString(autoCorrection);
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.mCurrentLogUnit.initializeSuggestions(suggestedWords);
-        researchLogger.onWordFinished(scrubbedAutoCorrection, isBatchMode);
-
-        // Add the autocorrection logStatement at the end of the logUnit for the committed word.
-        // We have to do this after calling commitCurrentLogUnitAsWord, because it may split the
-        // current logUnit, and then we have to peek to get the logUnit reference back.
-        final LogUnit logUnit = researchLogger.mMainLogBuffer.peekLastLogUnit();
-        // TODO: Add test to confirm that the commitCurrentAutoCorrection log statement should
-        // always be added to logUnit (if non-null) and not mCurrentLogUnit.
-        researchLogger.enqueueEvent(logUnit, LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION,
-                scrubbedTypedWord, scrubbedAutoCorrection, separatorString);
-    }
-
-    private boolean isExpectingCommitText = false;
-
-    /**
-     * Log a call to RichInputConnection.commitText().
-     *
-     * SystemResponse: The IME is committing text.  This happens after the user has typed a word
-     * and then a space or punctuation key.
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTIONCOMMITTEXT =
-            new LogStatement("RichInputConnectionCommitText", true, false, "newCursorPosition");
-    public static void richInputConnection_commitText(final String committedWord,
-            final int newCursorPosition, final boolean isBatchMode) {
-        final ResearchLogger researchLogger = getInstance();
-        // Only include opening and closing logSegments if private data is included
-        final String scrubbedWord = scrubDigitsFromString(committedWord);
-        if (!researchLogger.isExpectingCommitText) {
-            researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTIONCOMMITTEXT,
-                    newCursorPosition);
-            researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, Long.MAX_VALUE, isBatchMode);
-        }
-        researchLogger.isExpectingCommitText = false;
-    }
-
-    /**
-     * Shared events for logging committed text.
-     *
-     * The "CommitTextEventHappened" LogStatement is written to the log even if privacy rules
-     * indicate that the word contents should not be logged.  It has no contents, and only serves to
-     * record the event and thereby make it easier to calculate word-level statistics even when the
-     * word contents are unknown.
-     */
-    private static final LogStatement LOGSTATEMENT_COMMITTEXT =
-            new LogStatement("CommitText", true /* isPotentiallyPrivate */,
-                    false /* isPotentiallyRevealing */, "committedText", "isBatchMode");
-    private static final LogStatement LOGSTATEMENT_COMMITTEXT_EVENT_HAPPENED =
-            new LogStatement("CommitTextEventHappened", false /* isPotentiallyPrivate */,
-                    false /* isPotentiallyRevealing */);
-    private void enqueueCommitText(final String word, final boolean isBatchMode) {
-        // Event containing the word; will be published only if privacy checks pass
-        enqueueEvent(LOGSTATEMENT_COMMITTEXT, word, isBatchMode);
-        // Event not containing the word; will always be published
-        enqueueEvent(LOGSTATEMENT_COMMITTEXT_EVENT_HAPPENED);
-    }
-
-    /**
-     * Log a call to RichInputConnection.deleteSurroundingText().
-     *
-     * SystemResponse: The IME has deleted text.
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_DELETESURROUNDINGTEXT =
-            new LogStatement("RichInputConnectionDeleteSurroundingText", true, false,
-                    "beforeLength", "afterLength");
-    public static void richInputConnection_deleteSurroundingText(final int beforeLength,
-            final int afterLength) {
-        getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_DELETESURROUNDINGTEXT,
-                beforeLength, afterLength);
-    }
-
-    /**
-     * Log a call to RichInputConnection.finishComposingText().
-     *
-     * SystemResponse: The IME has left the composing text as-is.
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_FINISHCOMPOSINGTEXT =
-            new LogStatement("RichInputConnectionFinishComposingText", false, false);
-    public static void richInputConnection_finishComposingText() {
-        getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_FINISHCOMPOSINGTEXT);
-    }
-
-    /**
-     * Log a call to RichInputConnection.performEditorAction().
-     *
-     * SystemResponse: The IME is invoking an action specific to the editor.
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_PERFORMEDITORACTION =
-            new LogStatement("RichInputConnectionPerformEditorAction", false, false,
-                    "imeActionId");
-    public static void richInputConnection_performEditorAction(final int imeActionId) {
-        getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_PERFORMEDITORACTION,
-                imeActionId);
-    }
-
-    /**
-     * Log a call to RichInputConnection.sendKeyEvent().
-     *
-     * SystemResponse: The IME is telling the TextView that a key is being pressed through an
-     * alternate channel.
-     * TODO: only for hardware keys?
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_SENDKEYEVENT =
-            new LogStatement("RichInputConnectionSendKeyEvent", true, false, "eventTime", "action",
-                    "code");
-    public static void richInputConnection_sendKeyEvent(final KeyEvent keyEvent) {
-        getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_SENDKEYEVENT,
-                keyEvent.getEventTime(), keyEvent.getAction(), keyEvent.getKeyCode());
-    }
-
-    /**
-     * Log a call to RichInputConnection.setComposingText().
-     *
-     * SystemResponse: The IME is setting the composing text.  Happens each time a character is
-     * entered.
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_SETCOMPOSINGTEXT =
-            new LogStatement("RichInputConnectionSetComposingText", true, true, "text",
-                    "newCursorPosition");
-    public static void richInputConnection_setComposingText(final CharSequence text,
-            final int newCursorPosition) {
-        if (text == null) {
-            throw new RuntimeException("setComposingText is null");
-        }
-        getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_SETCOMPOSINGTEXT, text,
-                newCursorPosition);
-    }
-
-    /**
-     * Log a call to RichInputConnection.setSelection().
-     *
-     * SystemResponse: The IME is requesting that the selection change.  User-initiated selection-
-     * change requests do not go through this method -- it's only when the system wants to change
-     * the selection.
-     */
-    private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_SETSELECTION =
-            new LogStatement("RichInputConnectionSetSelection", true, false, "from", "to");
-    public static void richInputConnection_setSelection(final int from, final int to) {
-        getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_SETSELECTION, from, to);
-    }
-
-    /**
-     * Log a call to SuddenJumpingTouchEventHandler.onTouchEvent().
-     *
-     * SystemResponse: The IME has filtered input events in case of an erroneous sensor reading.
-     */
-    private static final LogStatement LOGSTATEMENT_SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT =
-            new LogStatement("SuddenJumpingTouchEventHandlerOnTouchEvent", true, false,
-                    "motionEvent");
-    public static void suddenJumpingTouchEventHandler_onTouchEvent(final MotionEvent me) {
-        if (me != null) {
-            getInstance().enqueueEvent(LOGSTATEMENT_SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT,
-                    MotionEvent.obtain(me));
-        }
-    }
-
-    /**
-     * Log a call to SuggestionsView.setSuggestions().
-     *
-     * SystemResponse: The IME is setting the suggestions in the suggestion strip.
-     */
-    private static final LogStatement LOGSTATEMENT_SUGGESTIONSTRIPVIEW_SETSUGGESTIONS =
-            new LogStatement("SuggestionStripViewSetSuggestions", true, true, "suggestedWords");
-    public static void suggestionStripView_setSuggestions(final SuggestedWords suggestedWords) {
-        if (suggestedWords != null) {
-            getInstance().enqueueEvent(LOGSTATEMENT_SUGGESTIONSTRIPVIEW_SETSUGGESTIONS,
-                    suggestedWords);
-        }
-    }
-
-    /**
-     * The user has indicated a particular point in the log that is of interest.
-     *
-     * UserAction: From direct menu invocation.
-     */
-    private static final LogStatement LOGSTATEMENT_USER_TIMESTAMP =
-            new LogStatement("UserTimestamp", false, false);
-    public void userTimestamp() {
-        getInstance().enqueueEvent(LOGSTATEMENT_USER_TIMESTAMP);
-    }
-
-    /**
-     * Log a call to LatinIME.onEndBatchInput().
-     *
-     * SystemResponse: The system has completed a gesture.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_ONENDBATCHINPUT =
-            new LogStatement("LatinIMEOnEndBatchInput", true, false, "enteredText",
-                    "enteredWordPos", "suggestedWords");
-    public static void latinIME_onEndBatchInput(final CharSequence enteredText,
-            final int enteredWordPos, final SuggestedWords suggestedWords) {
-        final ResearchLogger researchLogger = getInstance();
-        if (!TextUtils.isEmpty(enteredText) && hasLetters(enteredText.toString())) {
-            researchLogger.mCurrentLogUnit.setWords(enteredText.toString());
-        }
-        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_ONENDBATCHINPUT, enteredText,
-                enteredWordPos, suggestedWords);
-        researchLogger.mCurrentLogUnit.initializeSuggestions(suggestedWords);
-        researchLogger.mStatistics.recordGestureInput(enteredText.length(),
-                SystemClock.uptimeMillis());
-    }
-
-    private static final LogStatement LOGSTATEMENT_LATINIME_HANDLEBACKSPACE =
-            new LogStatement("LatinIMEHandleBackspace", true, false, "numCharacters");
-    /**
-     * Log a call to LatinIME.handleBackspace() that is not a batch delete.
-     *
-     * UserInput: The user is deleting one or more characters by hitting the backspace key once.
-     * The covers single character deletes as well as deleting selections.
-     *
-     * @param numCharacters how many characters the backspace operation deleted
-     * @param shouldUncommitLogUnit whether to uncommit the last {@code LogUnit} in the
-     * {@code LogBuffer}
-     */
-    public static void latinIME_handleBackspace(final int numCharacters,
-            final boolean shouldUncommitLogUnit) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_HANDLEBACKSPACE, numCharacters);
-        if (shouldUncommitLogUnit) {
-            ResearchLogger.getInstance().uncommitCurrentLogUnit(
-                    null, true /* dumpCurrentLogUnit */);
-        }
-    }
-
-    /**
-     * Log a call to LatinIME.handleBackspace() that is a batch delete.
-     *
-     * UserInput: The user is deleting a gestured word by hitting the backspace key once.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_HANDLEBACKSPACE_BATCH =
-            new LogStatement("LatinIMEHandleBackspaceBatch", true, false, "deletedText",
-                    "numCharacters");
-    public static void latinIME_handleBackspace_batch(final CharSequence deletedText,
-            final int numCharacters) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_HANDLEBACKSPACE_BATCH, deletedText,
-                numCharacters);
-        researchLogger.mStatistics.recordGestureDelete(deletedText.length(),
-                SystemClock.uptimeMillis());
-        researchLogger.uncommitCurrentLogUnit(deletedText.toString(),
-                false /* dumpCurrentLogUnit */);
-    }
-
-    /**
-     * Log a long interval between user operation.
-     *
-     * UserInput: The user has not done anything for a while.
-     */
-    private static final LogStatement LOGSTATEMENT_ONUSERPAUSE = new LogStatement("OnUserPause",
-            false, false, "intervalInMs");
-    public static void onUserPause(final long interval) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.enqueueEvent(LOGSTATEMENT_ONUSERPAUSE, interval);
-    }
-
-    /**
-     * Record the current time in case the LogUnit is later split.
-     *
-     * If the current logUnit is split, then tapping, motion events, etc. before this time should
-     * be assigned to one LogUnit, and events after this time should go into the following LogUnit.
-     */
-    public static void recordTimeForLogUnitSplit() {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.setSavedDownEventTime(SystemClock.uptimeMillis());
-        researchLogger.mSavedDownEventTime = Long.MAX_VALUE;
-    }
-
-    /**
-     * Log a call to LatinIME.handleSeparator()
-     *
-     * SystemResponse: The system is inserting a separator character, possibly performing auto-
-     * correction or other actions appropriate at the end of a word.
-     */
-    private static final LogStatement LOGSTATEMENT_LATINIME_HANDLESEPARATOR =
-            new LogStatement("LatinIMEHandleSeparator", false, false, "primaryCode",
-                    "isComposingWord");
-    public static void latinIME_handleSeparator(final int primaryCode,
-            final boolean isComposingWord) {
-        final ResearchLogger researchLogger = getInstance();
-        researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_HANDLESEPARATOR, primaryCode,
-                isComposingWord);
-    }
-
-    /**
-     * Call this method when the logging system has attempted publication of an n-gram.
-     *
-     * Statistics are gathered about the success or failure.
-     *
-     * @param publishabilityResultCode a result code as defined by
-     * {@code MainLogBuffer.PUBLISHABILITY_*}
-     */
-    static void recordPublishabilityResultCode(final int publishabilityResultCode) {
-        final ResearchLogger researchLogger = getInstance();
-        final Statistics statistics = researchLogger.mStatistics;
-        statistics.recordPublishabilityResultCode(publishabilityResultCode);
-    }
-
-    /**
-     * Log statistics.
-     *
-     * ContextualData, recorded at the end of a session.
-     */
-    private static final LogStatement LOGSTATEMENT_STATISTICS =
-            new LogStatement("Statistics", false, false, "charCount", "letterCount", "numberCount",
-                    "spaceCount", "deleteOpsCount", "wordCount", "isEmptyUponStarting",
-                    "isEmptinessStateKnown", "averageTimeBetweenKeys", "averageTimeBeforeDelete",
-                    "averageTimeDuringRepeatedDelete", "averageTimeAfterDelete",
-                    "dictionaryWordCount", "splitWordsCount", "gestureInputCount",
-                    "gestureCharsCount", "gesturesDeletedCount", "manualSuggestionsCount",
-                    "revertCommitsCount", "correctedWordsCount", "autoCorrectionsCount",
-                    "publishableCount", "unpublishableStoppingCount",
-                    "unpublishableIncorrectWordCount", "unpublishableSampledTooRecentlyCount",
-                    "unpublishableDictionaryUnavailableCount", "unpublishableMayContainDigitCount",
-                    "unpublishableNotInDictionaryCount");
-    private static void logStatistics() {
-        final ResearchLogger researchLogger = getInstance();
-        final Statistics statistics = researchLogger.mStatistics;
-        researchLogger.enqueueEvent(LOGSTATEMENT_STATISTICS, statistics.mCharCount,
-                statistics.mLetterCount, statistics.mNumberCount, statistics.mSpaceCount,
-                statistics.mDeleteKeyCount, statistics.mWordCount, statistics.mIsEmptyUponStarting,
-                statistics.mIsEmptinessStateKnown, statistics.mKeyCounter.getAverageTime(),
-                statistics.mBeforeDeleteKeyCounter.getAverageTime(),
-                statistics.mDuringRepeatedDeleteKeysCounter.getAverageTime(),
-                statistics.mAfterDeleteKeyCounter.getAverageTime(),
-                statistics.mDictionaryWordCount, statistics.mSplitWordsCount,
-                statistics.mGesturesInputCount, statistics.mGesturesCharsCount,
-                statistics.mGesturesDeletedCount, statistics.mManualSuggestionsCount,
-                statistics.mRevertCommitsCount, statistics.mCorrectedWordsCount,
-                statistics.mAutoCorrectionsCount, statistics.mPublishableCount,
-                statistics.mUnpublishableStoppingCount, statistics.mUnpublishableIncorrectWordCount,
-                statistics.mUnpublishableSampledTooRecently,
-                statistics.mUnpublishableDictionaryUnavailable,
-                statistics.mUnpublishableMayContainDigit, statistics.mUnpublishableNotInDictionary);
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/ResearchSettings.java b/java/src/com/android/inputmethod/research/ResearchSettings.java
deleted file mode 100644
index c0bc03f..0000000
--- a/java/src/com/android/inputmethod/research/ResearchSettings.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.SharedPreferences;
-
-import java.util.UUID;
-
-public final class ResearchSettings {
-    public static final String PREF_RESEARCH_LOGGER_UUID = "pref_research_logger_uuid";
-    public static final String PREF_RESEARCH_LOGGER_ENABLED_FLAG =
-            "pref_research_logger_enabled_flag";
-    public static final String PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH =
-            "pref_research_logger_has_seen_splash";
-    public static final String PREF_RESEARCH_LAST_DIR_CLEANUP_TIME =
-            "pref_research_last_dir_cleanup_time";
-
-    private ResearchSettings() {
-        // Intentional empty constructor for singleton.
-    }
-
-    public static String readResearchLoggerUuid(final SharedPreferences prefs) {
-        if (prefs.contains(PREF_RESEARCH_LOGGER_UUID)) {
-            return prefs.getString(PREF_RESEARCH_LOGGER_UUID, null);
-        }
-        // Generate a random string as uuid if not yet set
-        final String newUuid = UUID.randomUUID().toString();
-        prefs.edit().putString(PREF_RESEARCH_LOGGER_UUID, newUuid).apply();
-        return newUuid;
-    }
-
-    public static boolean readResearchLoggerEnabledFlag(final SharedPreferences prefs) {
-        return prefs.getBoolean(PREF_RESEARCH_LOGGER_ENABLED_FLAG, false);
-    }
-
-    public static void writeResearchLoggerEnabledFlag(final SharedPreferences prefs,
-            final boolean isEnabled) {
-        prefs.edit().putBoolean(PREF_RESEARCH_LOGGER_ENABLED_FLAG, isEnabled).apply();
-    }
-
-    public static boolean readHasSeenSplash(final SharedPreferences prefs) {
-        return prefs.getBoolean(PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH, false);
-    }
-
-    public static void writeHasSeenSplash(final SharedPreferences prefs,
-            final boolean hasSeenSplash) {
-        prefs.edit().putBoolean(PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH, hasSeenSplash).apply();
-    }
-
-    public static long readResearchLastDirCleanupTime(final SharedPreferences prefs) {
-        return prefs.getLong(PREF_RESEARCH_LAST_DIR_CLEANUP_TIME, 0L);
-    }
-
-    public static void writeResearchLastDirCleanupTime(final SharedPreferences prefs,
-            final long lastDirCleanupTime) {
-        prefs.edit().putLong(PREF_RESEARCH_LAST_DIR_CLEANUP_TIME, lastDirCleanupTime).apply();
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/Statistics.java b/java/src/com/android/inputmethod/research/Statistics.java
deleted file mode 100644
index fd323a1..0000000
--- a/java/src/com/android/inputmethod/research/Statistics.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.util.Log;
-
-import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.util.concurrent.TimeUnit;
-
-public class Statistics {
-    private static final String TAG = Statistics.class.getSimpleName();
-    private static final boolean DEBUG = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-
-    // TODO: Cleanup comments to only including those giving meaningful information.
-    // Number of characters entered during a typing session
-    int mCharCount;
-    // Number of letter characters entered during a typing session
-    int mLetterCount;
-    // Number of number characters entered
-    int mNumberCount;
-    // Number of space characters entered
-    int mSpaceCount;
-    // Number of delete operations entered (taps on the backspace key)
-    int mDeleteKeyCount;
-    // Number of words entered during a session.
-    int mWordCount;
-    // Number of words found in the dictionary.
-    int mDictionaryWordCount;
-    // Number of words split and spaces automatically entered.
-    int mSplitWordsCount;
-    // Number of words entered during a session.
-    int mCorrectedWordsCount;
-    // Number of gestures that were input.
-    int mGesturesInputCount;
-    // Number of gestures that were deleted.
-    int mGesturesDeletedCount;
-    // Total number of characters in words entered by gesture.
-    int mGesturesCharsCount;
-    // Number of manual suggestions chosen.
-    int mManualSuggestionsCount;
-    // Number of times that autocorrection was invoked.
-    int mAutoCorrectionsCount;
-    // Number of times a commit was reverted in this session.
-    int mRevertCommitsCount;
-    // Whether the text field was empty upon editing
-    boolean mIsEmptyUponStarting;
-    boolean mIsEmptinessStateKnown;
-
-    // Counts of how often an n-gram is collected or not, and the reasons for the decision.
-    // Keep consistent with publishability result code list in MainLogBuffer
-    int mPublishableCount;
-    int mUnpublishableStoppingCount;
-    int mUnpublishableIncorrectWordCount;
-    int mUnpublishableSampledTooRecently;
-    int mUnpublishableDictionaryUnavailable;
-    int mUnpublishableMayContainDigit;
-    int mUnpublishableNotInDictionary;
-
-    // Timers to count average time to enter a key, first press a delete key,
-    // between delete keys, and then to return typing after a delete key.
-    final AverageTimeCounter mKeyCounter = new AverageTimeCounter();
-    final AverageTimeCounter mBeforeDeleteKeyCounter = new AverageTimeCounter();
-    final AverageTimeCounter mDuringRepeatedDeleteKeysCounter = new AverageTimeCounter();
-    final AverageTimeCounter mAfterDeleteKeyCounter = new AverageTimeCounter();
-
-    static class AverageTimeCounter {
-        int mCount;
-        int mTotalTime;
-
-        public void reset() {
-            mCount = 0;
-            mTotalTime = 0;
-        }
-
-        public void add(long deltaTime) {
-            mCount++;
-            mTotalTime += deltaTime;
-        }
-
-        public int getAverageTime() {
-            if (mCount == 0) {
-                return 0;
-            }
-            return mTotalTime / mCount;
-        }
-    }
-
-    // To account for the interruptions when the user's attention is directed elsewhere, times
-    // longer than MIN_TYPING_INTERMISSION are not counted when estimating this statistic.
-    public static final long MIN_TYPING_INTERMISSION = TimeUnit.SECONDS.toMillis(2);
-    public static final long MIN_DELETION_INTERMISSION = TimeUnit.SECONDS.toMillis(10);
-
-    // The last time that a tap was performed
-    private long mLastTapTime;
-    // The type of the last keypress (delete key or not)
-    boolean mIsLastKeyDeleteKey;
-
-    private static final Statistics sInstance = new Statistics();
-
-    public static Statistics getInstance() {
-        return sInstance;
-    }
-
-    private Statistics() {
-        reset();
-    }
-
-    public void reset() {
-        mCharCount = 0;
-        mLetterCount = 0;
-        mNumberCount = 0;
-        mSpaceCount = 0;
-        mDeleteKeyCount = 0;
-        mWordCount = 0;
-        mDictionaryWordCount = 0;
-        mSplitWordsCount = 0;
-        mCorrectedWordsCount = 0;
-        mGesturesInputCount = 0;
-        mGesturesDeletedCount = 0;
-        mManualSuggestionsCount = 0;
-        mRevertCommitsCount = 0;
-        mAutoCorrectionsCount = 0;
-        mIsEmptyUponStarting = true;
-        mIsEmptinessStateKnown = false;
-        mKeyCounter.reset();
-        mBeforeDeleteKeyCounter.reset();
-        mDuringRepeatedDeleteKeysCounter.reset();
-        mAfterDeleteKeyCounter.reset();
-        mGesturesCharsCount = 0;
-        mGesturesDeletedCount = 0;
-        mPublishableCount = 0;
-        mUnpublishableStoppingCount = 0;
-        mUnpublishableIncorrectWordCount = 0;
-        mUnpublishableSampledTooRecently = 0;
-        mUnpublishableDictionaryUnavailable = 0;
-        mUnpublishableMayContainDigit = 0;
-        mUnpublishableNotInDictionary = 0;
-
-        mLastTapTime = 0;
-        mIsLastKeyDeleteKey = false;
-    }
-
-    public void recordChar(int codePoint, long time) {
-        if (DEBUG) {
-            Log.d(TAG, "recordChar() called");
-        }
-        if (codePoint == Constants.CODE_DELETE) {
-            mDeleteKeyCount++;
-            recordUserAction(time, true /* isDeletion */);
-        } else {
-            mCharCount++;
-            if (Character.isDigit(codePoint)) {
-                mNumberCount++;
-            }
-            if (Character.isLetter(codePoint)) {
-                mLetterCount++;
-            }
-            if (Character.isSpaceChar(codePoint)) {
-                mSpaceCount++;
-            }
-            recordUserAction(time, false /* isDeletion */);
-        }
-    }
-
-    public void recordWordEntered(final boolean isDictionaryWord,
-            final boolean containsCorrection) {
-        mWordCount++;
-        if (isDictionaryWord) {
-            mDictionaryWordCount++;
-        }
-        if (containsCorrection) {
-            mCorrectedWordsCount++;
-        }
-    }
-
-    public void recordSplitWords() {
-        mSplitWordsCount++;
-    }
-
-    public void recordGestureInput(final int numCharsEntered, final long time) {
-        mGesturesInputCount++;
-        mGesturesCharsCount += numCharsEntered;
-        recordUserAction(time, false /* isDeletion */);
-    }
-
-    public void setIsEmptyUponStarting(final boolean isEmpty) {
-        mIsEmptyUponStarting = isEmpty;
-        mIsEmptinessStateKnown = true;
-    }
-
-    public void recordGestureDelete(final int length, final long time) {
-        mGesturesDeletedCount++;
-        recordUserAction(time, true /* isDeletion */);
-    }
-
-    public void recordManualSuggestion(final long time) {
-        mManualSuggestionsCount++;
-        recordUserAction(time, false /* isDeletion */);
-    }
-
-    public void recordAutoCorrection(final long time) {
-        mAutoCorrectionsCount++;
-        recordUserAction(time, false /* isDeletion */);
-    }
-
-    public void recordRevertCommit(final long time) {
-        mRevertCommitsCount++;
-        recordUserAction(time, true /* isDeletion */);
-    }
-
-    private void recordUserAction(final long time, final boolean isDeletion) {
-        final long delta = time - mLastTapTime;
-        if (isDeletion) {
-            if (delta < MIN_DELETION_INTERMISSION) {
-                if (mIsLastKeyDeleteKey) {
-                    mDuringRepeatedDeleteKeysCounter.add(delta);
-                } else {
-                    mBeforeDeleteKeyCounter.add(delta);
-                }
-            } else {
-                ResearchLogger.onUserPause(delta);
-            }
-        } else {
-            if (mIsLastKeyDeleteKey && delta < MIN_DELETION_INTERMISSION) {
-                mAfterDeleteKeyCounter.add(delta);
-            } else if (!mIsLastKeyDeleteKey && delta < MIN_TYPING_INTERMISSION) {
-                mKeyCounter.add(delta);
-            } else {
-                ResearchLogger.onUserPause(delta);
-            }
-        }
-        mIsLastKeyDeleteKey = isDeletion;
-        mLastTapTime = time;
-    }
-
-    public void recordPublishabilityResultCode(final int publishabilityResultCode) {
-        // Keep consistent with publishability result code list in MainLogBuffer
-        switch (publishabilityResultCode) {
-        case MainLogBuffer.PUBLISHABILITY_PUBLISHABLE:
-            mPublishableCount++;
-            break;
-        case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_STOPPING:
-            mUnpublishableStoppingCount++;
-            break;
-        case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_INCORRECT_WORD_COUNT:
-            mUnpublishableIncorrectWordCount++;
-            break;
-        case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_SAMPLED_TOO_RECENTLY:
-            mUnpublishableSampledTooRecently++;
-            break;
-        case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_DICTIONARY_UNAVAILABLE:
-            mUnpublishableDictionaryUnavailable++;
-            break;
-        case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_MAY_CONTAIN_DIGIT:
-            mUnpublishableMayContainDigit++;
-            break;
-        case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_NOT_IN_DICTIONARY:
-            mUnpublishableNotInDictionary++;
-            break;
-        }
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/Uploader.java b/java/src/com/android/inputmethod/research/Uploader.java
deleted file mode 100644
index c7ea3e6..0000000
--- a/java/src/com/android/inputmethod/research/Uploader.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.Manifest;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.BatteryManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-/**
- * Manages the uploading of ResearchLog files.
- */
-public final class Uploader {
-    private static final String TAG = Uploader.class.getSimpleName();
-    private static final boolean DEBUG = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-    // Set IS_INHIBITING_AUTO_UPLOAD to true for local testing
-    private static final boolean IS_INHIBITING_UPLOAD = false
-            && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-    private static final int BUF_SIZE = 1024 * 8;
-
-    private final Context mContext;
-    private final ResearchLogDirectory mResearchLogDirectory;
-    private final URL mUrl;
-
-    public Uploader(final Context context) {
-        mContext = context;
-        mResearchLogDirectory = new ResearchLogDirectory(context);
-
-        final String urlString = context.getString(R.string.research_logger_upload_url);
-        if (TextUtils.isEmpty(urlString)) {
-            mUrl = null;
-            return;
-        }
-        URL url = null;
-        try {
-            url = new URL(urlString);
-        } catch (final MalformedURLException e) {
-            Log.e(TAG, "Bad URL for uploading", e);
-        }
-        mUrl = url;
-    }
-
-    public boolean isPossibleToUpload() {
-        return hasUploadingPermission() && mUrl != null && !IS_INHIBITING_UPLOAD;
-    }
-
-    private boolean hasUploadingPermission() {
-        final PackageManager packageManager = mContext.getPackageManager();
-        return packageManager.checkPermission(Manifest.permission.INTERNET,
-                mContext.getPackageName()) == PackageManager.PERMISSION_GRANTED;
-    }
-
-    public boolean isConvenientToUpload() {
-        return isExternallyPowered() && hasWifiConnection();
-    }
-
-    private boolean isExternallyPowered() {
-        final Intent intent = mContext.registerReceiver(null, new IntentFilter(
-                Intent.ACTION_BATTERY_CHANGED));
-        final int pluggedState = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
-        return pluggedState == BatteryManager.BATTERY_PLUGGED_AC
-                || pluggedState == BatteryManager.BATTERY_PLUGGED_USB;
-    }
-
-    private boolean hasWifiConnection() {
-        final ConnectivityManager manager =
-                (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
-        final NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
-        return wifiInfo.isConnected();
-    }
-
-    public void doUpload() {
-        final File[] files = mResearchLogDirectory.getUploadableLogFiles();
-        if (files == null) return;
-        for (final File file : files) {
-            uploadFile(file);
-        }
-    }
-
-    private void uploadFile(final File file) {
-        if (DEBUG) {
-            Log.d(TAG, "attempting upload of " + file.getAbsolutePath());
-        }
-        final int contentLength = (int) file.length();
-        HttpURLConnection connection = null;
-        InputStream fileInputStream = null;
-        try {
-            fileInputStream = new FileInputStream(file);
-            connection = (HttpURLConnection) mUrl.openConnection();
-            connection.setRequestMethod("PUT");
-            connection.setDoOutput(true);
-            connection.setFixedLengthStreamingMode(contentLength);
-            final OutputStream outputStream = connection.getOutputStream();
-            uploadContents(fileInputStream, outputStream);
-            if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
-                Log.d(TAG, "upload failed: " + connection.getResponseCode());
-                final InputStream netInputStream = connection.getInputStream();
-                final BufferedReader reader = new BufferedReader(new InputStreamReader(
-                        netInputStream));
-                String line;
-                while ((line = reader.readLine()) != null) {
-                    Log.d(TAG, "| " + reader.readLine());
-                }
-                reader.close();
-                return;
-            }
-            file.delete();
-            if (DEBUG) {
-                Log.d(TAG, "upload successful");
-            }
-        } catch (final IOException e) {
-            Log.e(TAG, "Exception uploading file", e);
-        } finally {
-            if (fileInputStream != null) {
-                try {
-                    fileInputStream.close();
-                } catch (final IOException e) {
-                    Log.e(TAG, "Exception closing uploaded file", e);
-                }
-            }
-            if (connection != null) {
-                connection.disconnect();
-            }
-        }
-    }
-
-    private static void uploadContents(final InputStream is, final OutputStream os)
-            throws IOException {
-        // TODO: Switch to NIO.
-        final byte[] buf = new byte[BUF_SIZE];
-        int numBytesRead;
-        while ((numBytesRead = is.read(buf)) != -1) {
-            os.write(buf, 0, numBytesRead);
-        }
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/UploaderService.java b/java/src/com/android/inputmethod/research/UploaderService.java
deleted file mode 100644
index fd3f2f6..0000000
--- a/java/src/com/android/inputmethod/research/UploaderService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.AlarmManager;
-import android.app.IntentService;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.SystemClock;
-
-/**
- * Service to invoke the uploader.
- *
- * Can be regularly invoked, invoked on boot, etc.
- */
-public final class UploaderService extends IntentService {
-    private static final String TAG = UploaderService.class.getSimpleName();
-    public static final long RUN_INTERVAL = AlarmManager.INTERVAL_HOUR;
-    public static final String EXTRA_UPLOAD_UNCONDITIONALLY = UploaderService.class.getName()
-            + ".extra.UPLOAD_UNCONDITIONALLY";
-
-    public UploaderService() {
-        super("Research Uploader Service");
-    }
-
-    @Override
-    protected void onHandleIntent(final Intent intent) {
-        // We may reach this point either because the alarm fired, or because the system explicitly
-        // requested that an Upload occur.  In the latter case, we want to cancel the alarm in case
-        // it's about to fire.
-        cancelAndRescheduleUploadingService(this, false /* needsRescheduling */);
-
-        final Uploader uploader = new Uploader(this);
-        if (!uploader.isPossibleToUpload()) return;
-        if (isUploadingUnconditionally(intent.getExtras()) || uploader.isConvenientToUpload()) {
-            uploader.doUpload();
-        }
-        cancelAndRescheduleUploadingService(this, true /* needsRescheduling */);
-    }
-
-    private boolean isUploadingUnconditionally(final Bundle bundle) {
-        if (bundle == null) return false;
-        if (bundle.containsKey(EXTRA_UPLOAD_UNCONDITIONALLY)) {
-            return bundle.getBoolean(EXTRA_UPLOAD_UNCONDITIONALLY);
-        }
-        return false;
-    }
-
-    /**
-     * Arrange for the UploaderService to be run on a regular basis.
-     *
-     * Any existing scheduled invocation of UploaderService is removed and optionally rescheduled.
-     * This may cause problems if this method is called so often that no scheduled invocation is
-     * ever run.  But if the delay is short enough that it will go off when the user is sleeping,
-     * then there should be no starvation.
-     *
-     * @param context {@link Context} object
-     * @param needsRescheduling whether to schedule a future intent to be delivered to this service
-     */
-    public static void cancelAndRescheduleUploadingService(final Context context,
-            final boolean needsRescheduling) {
-        final Intent intent = new Intent(context, UploaderService.class);
-        final PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
-        final AlarmManager alarmManager = (AlarmManager) context.getSystemService(
-                Context.ALARM_SERVICE);
-        alarmManager.cancel(pendingIntent);
-        if (needsRescheduling) {
-            alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()
-                    + UploaderService.RUN_INTERVAL, pendingIntent);
-        }
-    }
-}
diff --git a/java/src/com/android/inputmethod/research/ui/SplashScreen.java b/java/src/com/android/inputmethod/research/ui/SplashScreen.java
deleted file mode 100644
index 78ed668..0000000
--- a/java/src/com/android/inputmethod/research/ui/SplashScreen.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research.ui;
-
-import android.app.AlertDialog.Builder;
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
-import android.content.Intent;
-import android.inputmethodservice.InputMethodService;
-import android.net.Uri;
-import android.os.IBinder;
-import android.view.Window;
-import android.view.WindowManager.LayoutParams;
-
-import com.android.inputmethod.latin.R.string;
-
-/**
- * Show a dialog when the user first opens the keyboard.
- *
- * The splash screen is a modal dialog box presented when the user opens this keyboard for the first
- * time.  It is useful for giving specific warnings that must be shown to the user before use.
- *
- * While the splash screen does share with the setup wizard the common goal of presenting
- * information to the user before use, they are presented at different times and with different
- * capabilities.  The setup wizard is launched by tapping on the icon, and walks the user through
- * the setup process.  It can, however, be bypassed by enabling the keyboard from Settings directly.
- * The splash screen cannot be bypassed, and is therefore more appropriate for obtaining user
- * consent.
- */
-public class SplashScreen {
-    public interface UserConsentListener {
-        public void onSplashScreenUserClickedOk();
-    }
-
-    final UserConsentListener mListener;
-    final Dialog mSplashDialog;
-
-    public SplashScreen(final InputMethodService inputMethodService,
-            final UserConsentListener listener) {
-        mListener = listener;
-        final Builder builder = new Builder(inputMethodService)
-                .setTitle(string.research_splash_title)
-                .setMessage(string.research_splash_content)
-                .setPositiveButton(android.R.string.yes,
-                        new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int which) {
-                                mListener.onSplashScreenUserClickedOk();
-                                mSplashDialog.dismiss();
-                            }
-                })
-                .setNegativeButton(android.R.string.no,
-                        new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int which) {
-                                final String packageName = inputMethodService.getPackageName();
-                                final Uri packageUri = Uri.parse("package:" + packageName);
-                                final Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE,
-                                        packageUri);
-                                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                                inputMethodService.startActivity(intent);
-                            }
-                })
-                .setCancelable(true)
-                .setOnCancelListener(
-                        new OnCancelListener() {
-                            @Override
-                            public void onCancel(DialogInterface dialog) {
-                                inputMethodService.requestHideSelf(0);
-                            }
-                });
-        mSplashDialog = builder.create();
-    }
-
-    /**
-     * Show the splash screen.
-     *
-     * The user must consent to the terms presented in the SplashScreen before they can use the
-     * keyboard.  If they cancel instead, they are given the option to uninstall the keybard.
-     *
-     * @param windowToken {@link IBinder} to attach dialog to
-     */
-    public void showSplashScreen(final IBinder windowToken) {
-        final Window window = mSplashDialog.getWindow();
-        final LayoutParams lp = window.getAttributes();
-        lp.token = windowToken;
-        lp.type = LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
-        window.setAttributes(lp);
-        window.addFlags(LayoutParams.FLAG_ALT_FOCUSABLE_IM);
-        mSplashDialog.show();
-    }
-
-    public boolean isShowing() {
-        return mSplashDialog.isShowing();
-    }
-}
diff --git a/native/jni/Application.mk b/native/jni/Application.mk
index caf3b26..ce09535 100644
--- a/native/jni/Application.mk
+++ b/native/jni/Application.mk
@@ -1 +1 @@
-APP_STL := stlport_static
+APP_STL := c++_static
diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
index 6223f86..d6a6196 100644
--- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
@@ -95,15 +95,15 @@
     return reinterpret_cast<jlong>(dictionary);
 }
 
-static void latinime_BinaryDictionary_flush(JNIEnv *env, jclass clazz, jlong dict,
+static bool latinime_BinaryDictionary_flush(JNIEnv *env, jclass clazz, jlong dict,
         jstring filePath) {
     Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
-    if (!dictionary) return;
+    if (!dictionary) return false;
     const jsize filePathUtf8Length = env->GetStringUTFLength(filePath);
     char filePathChars[filePathUtf8Length + 1];
     env->GetStringUTFRegion(filePath, 0, env->GetStringLength(filePath), filePathChars);
     filePathChars[filePathUtf8Length] = '\0';
-    dictionary->flush(filePathChars);
+    return dictionary->flush(filePathChars);
 }
 
 static bool latinime_BinaryDictionary_needsToRunGC(JNIEnv *env, jclass clazz,
@@ -113,15 +113,15 @@
     return dictionary->needsToRunGC(mindsBlockByGC == JNI_TRUE);
 }
 
-static void latinime_BinaryDictionary_flushWithGC(JNIEnv *env, jclass clazz, jlong dict,
+static bool latinime_BinaryDictionary_flushWithGC(JNIEnv *env, jclass clazz, jlong dict,
         jstring filePath) {
     Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
-    if (!dictionary) return;
+    if (!dictionary) return false;
     const jsize filePathUtf8Length = env->GetStringUTFLength(filePath);
     char filePathChars[filePathUtf8Length + 1];
     env->GetStringUTFRegion(filePath, 0, env->GetStringLength(filePath), filePathChars);
     filePathChars[filePathUtf8Length] = '\0';
-    dictionary->flushWithGC(filePathChars);
+    return dictionary->flushWithGC(filePathChars);
 }
 
 static void latinime_BinaryDictionary_close(JNIEnv *env, jclass clazz, jlong dict) {
@@ -178,10 +178,10 @@
         jlong proximityInfo, jlong dicTraverseSession, jintArray xCoordinatesArray,
         jintArray yCoordinatesArray, jintArray timesArray, jintArray pointerIdsArray,
         jintArray inputCodePointsArray, jint inputSize, jintArray suggestOptions,
-        jintArray prevWordCodePointsForBigrams, jintArray outSuggestionCount,
-        jintArray outCodePointsArray, jintArray outScoresArray, jintArray outSpaceIndicesArray,
-        jintArray outTypesArray, jintArray outAutoCommitFirstWordConfidenceArray,
-        jfloatArray inOutLanguageWeight) {
+        jintArray prevWordCodePointsForBigrams, jboolean isBeginningOfSentence,
+        jintArray outSuggestionCount, jintArray outCodePointsArray, jintArray outScoresArray,
+        jintArray outSpaceIndicesArray, jintArray outTypesArray,
+        jintArray outAutoCommitFirstWordConfidenceArray, jfloatArray inOutLanguageWeight) {
     Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
     // Assign 0 to outSuggestionCount here in case of returning earlier in this method.
     JniDataUtils::putIntToArray(env, outSuggestionCount, 0 /* index */, 0);
@@ -274,7 +274,7 @@
 }
 
 static jint latinime_BinaryDictionary_getBigramProbability(JNIEnv *env, jclass clazz,
-        jlong dict, jintArray word0, jintArray word1) {
+        jlong dict, jintArray word0, jboolean isBeginningOfSentence, jintArray word1) {
     Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
     if (!dictionary) return JNI_FALSE;
     const jsize word0Length = env->GetArrayLength(word0);
@@ -283,7 +283,7 @@
     int word1CodePoints[word1Length];
     env->GetIntArrayRegion(word0, 0, word0Length, word0CodePoints);
     env->GetIntArrayRegion(word1, 0, word1Length, word1CodePoints);
-    const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length, false /* isStartOfSentence */);
+    const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length, isBeginningOfSentence);
     return dictionary->getBigramProbability(&prevWordsInfo, word1CodePoints, word1Length);
 }
 
@@ -324,12 +324,13 @@
             outShortcutProbabilities);
 }
 
-static void latinime_BinaryDictionary_addUnigramWord(JNIEnv *env, jclass clazz, jlong dict,
+static bool latinime_BinaryDictionary_addUnigramWord(JNIEnv *env, jclass clazz, jlong dict,
         jintArray word, jint probability, jintArray shortcutTarget, jint shortcutProbability,
-        jboolean isNotAWord, jboolean isBlacklisted, jint timestamp) {
+        jboolean isBeginningOfSentence, jboolean isNotAWord, jboolean isBlacklisted,
+        jint timestamp) {
     Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
     if (!dictionary) {
-        return;
+        return false;
     }
     jsize codePointCount = env->GetArrayLength(word);
     int codePoints[codePointCount];
@@ -341,16 +342,17 @@
         shortcuts.emplace_back(&shortcutTargetCodePoints, shortcutProbability);
     }
     // Use 1 for count to indicate the word has inputted.
-    const UnigramProperty unigramProperty(isNotAWord, isBlacklisted,
-            probability, timestamp, 0 /* level */, 1 /* count */, &shortcuts);
-    dictionary->addUnigramEntry(codePoints, codePointCount, &unigramProperty);
+    const UnigramProperty unigramProperty(isBeginningOfSentence, isNotAWord,
+            isBlacklisted, probability, timestamp, 0 /* level */, 1 /* count */, &shortcuts);
+    return dictionary->addUnigramEntry(codePoints, codePointCount, &unigramProperty);
 }
 
-static void latinime_BinaryDictionary_addBigramWords(JNIEnv *env, jclass clazz, jlong dict,
-        jintArray word0, jintArray word1, jint probability, jint timestamp) {
+static bool latinime_BinaryDictionary_addBigramWords(JNIEnv *env, jclass clazz, jlong dict,
+        jintArray word0, jboolean isBeginningOfSentence, jintArray word1, jint probability,
+        jint timestamp) {
     Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
     if (!dictionary) {
-        return;
+        return false;
     }
     jsize word0Length = env->GetArrayLength(word0);
     int word0CodePoints[word0Length];
@@ -363,16 +365,15 @@
     // Use 1 for count to indicate the bigram has inputted.
     const BigramProperty bigramProperty(&bigramTargetCodePoints, probability,
             timestamp, 0 /* level */, 1 /* count */);
-    const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length,
-            false /* isBeginningOfSentence */);
-    dictionary->addNgramEntry(&prevWordsInfo, &bigramProperty);
+    const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length, isBeginningOfSentence);
+    return dictionary->addNgramEntry(&prevWordsInfo, &bigramProperty);
 }
 
-static void latinime_BinaryDictionary_removeBigramWords(JNIEnv *env, jclass clazz, jlong dict,
-        jintArray word0, jintArray word1) {
+static bool latinime_BinaryDictionary_removeBigramWords(JNIEnv *env, jclass clazz, jlong dict,
+        jintArray word0, jboolean isBeginningOfSentence, jintArray word1) {
     Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
     if (!dictionary) {
-        return;
+        return false;
     }
     jsize word0Length = env->GetArrayLength(word0);
     int word0CodePoints[word0Length];
@@ -380,9 +381,8 @@
     jsize word1Length = env->GetArrayLength(word1);
     int word1CodePoints[word1Length];
     env->GetIntArrayRegion(word1, 0, word1Length, word1CodePoints);
-    const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length,
-            false /* isBeginningOfSentence */);
-    dictionary->removeNgramEntry(&prevWordsInfo, word1CodePoints, word1Length);
+    const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length, isBeginningOfSentence);
+    return dictionary->removeNgramEntry(&prevWordsInfo, word1CodePoints, word1Length);
 }
 
 // Returns how many language model params are processed.
@@ -450,8 +450,9 @@
             shortcuts.emplace_back(&shortcutTargetCodePoints, shortcutProbability);
         }
         // Use 1 for count to indicate the word has inputted.
-        const UnigramProperty unigramProperty(isNotAWord, isBlacklisted,
-                unigramProbability, timestamp, 0 /* level */, 1 /* count */, &shortcuts);
+        const UnigramProperty unigramProperty(false /* isBeginningOfSentence */, isNotAWord,
+                isBlacklisted, unigramProbability, timestamp, 0 /* level */, 1 /* count */,
+                &shortcuts);
         dictionary->addUnigramEntry(word1CodePoints, word1Length, &unigramProperty);
         if (word0) {
             jint bigramProbability = env->GetIntField(languageModelParam, bigramProbabilityFieldId);
@@ -609,7 +610,7 @@
     },
     {
         const_cast<char *>("flushNative"),
-        const_cast<char *>("(JLjava/lang/String;)V"),
+        const_cast<char *>("(JLjava/lang/String;)Z"),
         reinterpret_cast<void *>(latinime_BinaryDictionary_flush)
     },
     {
@@ -619,12 +620,12 @@
     },
     {
         const_cast<char *>("flushWithGCNative"),
-        const_cast<char *>("(JLjava/lang/String;)V"),
+        const_cast<char *>("(JLjava/lang/String;)Z"),
         reinterpret_cast<void *>(latinime_BinaryDictionary_flushWithGC)
     },
     {
         const_cast<char *>("getSuggestionsNative"),
-        const_cast<char *>("(JJJ[I[I[I[I[II[I[I[I[I[I[I[I[I[F)V"),
+        const_cast<char *>("(JJJ[I[I[I[I[II[I[IZ[I[I[I[I[I[I[F)V"),
         reinterpret_cast<void *>(latinime_BinaryDictionary_getSuggestions)
     },
     {
@@ -634,7 +635,7 @@
     },
     {
         const_cast<char *>("getBigramProbabilityNative"),
-        const_cast<char *>("(J[I[I)I"),
+        const_cast<char *>("(J[IZ[I)I"),
         reinterpret_cast<void *>(latinime_BinaryDictionary_getBigramProbability)
     },
     {
@@ -650,17 +651,17 @@
     },
     {
         const_cast<char *>("addUnigramWordNative"),
-        const_cast<char *>("(J[II[IIZZI)V"),
+        const_cast<char *>("(J[II[IIZZZI)Z"),
         reinterpret_cast<void *>(latinime_BinaryDictionary_addUnigramWord)
     },
     {
         const_cast<char *>("addBigramWordsNative"),
-        const_cast<char *>("(J[I[III)V"),
+        const_cast<char *>("(J[IZ[III)Z"),
         reinterpret_cast<void *>(latinime_BinaryDictionary_addBigramWords)
     },
     {
         const_cast<char *>("removeBigramWordsNative"),
-        const_cast<char *>("(J[I[I)V"),
+        const_cast<char *>("(J[IZ[I)Z"),
         reinterpret_cast<void *>(latinime_BinaryDictionary_removeBigramWords)
     },
     {
diff --git a/native/jni/src/suggest/core/dictionary/dictionary.cpp b/native/jni/src/suggest/core/dictionary/dictionary.cpp
index fe3167a..898b44f 100644
--- a/native/jni/src/suggest/core/dictionary/dictionary.cpp
+++ b/native/jni/src/suggest/core/dictionary/dictionary.cpp
@@ -80,32 +80,38 @@
     return mBigramDictionary.getBigramProbability(prevWordsInfo, word, length);
 }
 
-void Dictionary::addUnigramEntry(const int *const word, const int length,
+bool Dictionary::addUnigramEntry(const int *const word, const int length,
         const UnigramProperty *const unigramProperty) {
+    if (unigramProperty->representsBeginningOfSentence()
+            && !mDictionaryStructureWithBufferPolicy->getHeaderStructurePolicy()
+                    ->supportsBeginningOfSentence()) {
+        AKLOGE("The dictionary doesn't support Beginning-of-Sentence.");
+        return false;
+    }
     TimeKeeper::setCurrentTime();
-    mDictionaryStructureWithBufferPolicy->addUnigramEntry(word, length, unigramProperty);
+    return mDictionaryStructureWithBufferPolicy->addUnigramEntry(word, length, unigramProperty);
 }
 
-void Dictionary::addNgramEntry(const PrevWordsInfo *const prevWordsInfo,
+bool Dictionary::addNgramEntry(const PrevWordsInfo *const prevWordsInfo,
         const BigramProperty *const bigramProperty) {
     TimeKeeper::setCurrentTime();
-    mDictionaryStructureWithBufferPolicy->addNgramEntry(prevWordsInfo, bigramProperty);
+    return mDictionaryStructureWithBufferPolicy->addNgramEntry(prevWordsInfo, bigramProperty);
 }
 
-void Dictionary::removeNgramEntry(const PrevWordsInfo *const prevWordsInfo,
+bool Dictionary::removeNgramEntry(const PrevWordsInfo *const prevWordsInfo,
         const int *const word, const int length) {
     TimeKeeper::setCurrentTime();
-    mDictionaryStructureWithBufferPolicy->removeNgramEntry(prevWordsInfo, word, length);
+    return mDictionaryStructureWithBufferPolicy->removeNgramEntry(prevWordsInfo, word, length);
 }
 
-void Dictionary::flush(const char *const filePath) {
+bool Dictionary::flush(const char *const filePath) {
     TimeKeeper::setCurrentTime();
-    mDictionaryStructureWithBufferPolicy->flush(filePath);
+    return mDictionaryStructureWithBufferPolicy->flush(filePath);
 }
 
-void Dictionary::flushWithGC(const char *const filePath) {
+bool Dictionary::flushWithGC(const char *const filePath) {
     TimeKeeper::setCurrentTime();
-    mDictionaryStructureWithBufferPolicy->flushWithGC(filePath);
+    return mDictionaryStructureWithBufferPolicy->flushWithGC(filePath);
 }
 
 bool Dictionary::needsToRunGC(const bool mindsBlockByGC) {
diff --git a/native/jni/src/suggest/core/dictionary/dictionary.h b/native/jni/src/suggest/core/dictionary/dictionary.h
index 817d9f7..f6d406f 100644
--- a/native/jni/src/suggest/core/dictionary/dictionary.h
+++ b/native/jni/src/suggest/core/dictionary/dictionary.h
@@ -57,6 +57,7 @@
     static const int KIND_MASK_FLAGS = 0xFFFFFF00; // Mask to get the flags
     static const int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000;
     static const int KIND_FLAG_EXACT_MATCH = 0x40000000;
+    static const int KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION = 0x20000000;
 
     Dictionary(JNIEnv *env, DictionaryStructureWithBufferPolicy::StructurePolicyPtr
             dictionaryStructureWithBufferPolicy);
@@ -75,18 +76,18 @@
     int getBigramProbability(const PrevWordsInfo *const prevWordsInfo,
             const int *word, int length) const;
 
-    void addUnigramEntry(const int *const codePoints, const int codePointCount,
+    bool addUnigramEntry(const int *const codePoints, const int codePointCount,
             const UnigramProperty *const unigramProperty);
 
-    void addNgramEntry(const PrevWordsInfo *const prevWordsInfo,
+    bool addNgramEntry(const PrevWordsInfo *const prevWordsInfo,
             const BigramProperty *const bigramProperty);
 
-    void removeNgramEntry(const PrevWordsInfo *const prevWordsInfo, const int *const word,
+    bool removeNgramEntry(const PrevWordsInfo *const prevWordsInfo, const int *const word,
             const int length);
 
-    void flush(const char *const filePath);
+    bool flush(const char *const filePath);
 
-    void flushWithGC(const char *const filePath);
+    bool flushWithGC(const char *const filePath);
 
     bool needsToRunGC(const bool mindsBlockByGC);
 
diff --git a/native/jni/src/suggest/core/dictionary/error_type_utils.cpp b/native/jni/src/suggest/core/dictionary/error_type_utils.cpp
index 0635fef..b6bf7a9 100644
--- a/native/jni/src/suggest/core/dictionary/error_type_utils.cpp
+++ b/native/jni/src/suggest/core/dictionary/error_type_utils.cpp
@@ -31,4 +31,8 @@
 const ErrorTypeUtils::ErrorType ErrorTypeUtils::ERRORS_TREATED_AS_AN_EXACT_MATCH =
         NOT_AN_ERROR | MATCH_WITH_CASE_ERROR | MATCH_WITH_ACCENT_ERROR | MATCH_WITH_DIGRAPH;
 
+const ErrorTypeUtils::ErrorType
+        ErrorTypeUtils::ERRORS_TREATED_AS_AN_EXACT_MATCH_WITH_INTENTIONAL_OMISSION =
+                ERRORS_TREATED_AS_AN_EXACT_MATCH | INTENTIONAL_OMISSION;
+
 } // namespace latinime
diff --git a/native/jni/src/suggest/core/dictionary/error_type_utils.h b/native/jni/src/suggest/core/dictionary/error_type_utils.h
index 0e8e5b6..e3e76b2 100644
--- a/native/jni/src/suggest/core/dictionary/error_type_utils.h
+++ b/native/jni/src/suggest/core/dictionary/error_type_utils.h
@@ -51,6 +51,11 @@
         return (containedErrorTypes & ~ERRORS_TREATED_AS_AN_EXACT_MATCH) == 0;
     }
 
+    static bool isExactMatchWithIntentionalOmission(const ErrorType containedErrorTypes) {
+        return (containedErrorTypes
+                & ~ERRORS_TREATED_AS_AN_EXACT_MATCH_WITH_INTENTIONAL_OMISSION) == 0;
+    }
+
     static bool isEditCorrectionError(const ErrorType errorType) {
         return (errorType & EDIT_CORRECTION) != 0;
     }
@@ -67,6 +72,7 @@
     DISALLOW_IMPLICIT_CONSTRUCTORS(ErrorTypeUtils);
 
     static const ErrorType ERRORS_TREATED_AS_AN_EXACT_MATCH;
+    static const ErrorType ERRORS_TREATED_AS_AN_EXACT_MATCH_WITH_INTENTIONAL_OMISSION;
 };
 } // namespace latinime
 #endif // LATINIME_ERROR_TYPE_UTILS_H
diff --git a/native/jni/src/suggest/core/dictionary/property/unigram_property.h b/native/jni/src/suggest/core/dictionary/property/unigram_property.h
index d255105..902eb00 100644
--- a/native/jni/src/suggest/core/dictionary/property/unigram_property.h
+++ b/native/jni/src/suggest/core/dictionary/property/unigram_property.h
@@ -48,15 +48,21 @@
     };
 
     UnigramProperty()
-            : mIsNotAWord(false), mIsBlacklisted(false), mProbability(NOT_A_PROBABILITY),
-              mTimestamp(NOT_A_TIMESTAMP), mLevel(0), mCount(0), mShortcuts() {}
+            : mRepresentsBeginningOfSentence(false), mIsNotAWord(false), mIsBlacklisted(false),
+              mProbability(NOT_A_PROBABILITY), mTimestamp(NOT_A_TIMESTAMP), mLevel(0), mCount(0),
+              mShortcuts() {}
 
-    UnigramProperty(const bool isNotAWord, const bool isBlacklisted, const int probability,
-            const int timestamp, const int level, const int count,
-            const std::vector<ShortcutProperty> *const shortcuts)
-            : mIsNotAWord(isNotAWord), mIsBlacklisted(isBlacklisted), mProbability(probability),
+    UnigramProperty(const bool representsBeginningOfSentence, const bool isNotAWord,
+            const bool isBlacklisted, const int probability, const int timestamp, const int level,
+            const int count, const std::vector<ShortcutProperty> *const shortcuts)
+            : mRepresentsBeginningOfSentence(representsBeginningOfSentence),
+              mIsNotAWord(isNotAWord), mIsBlacklisted(isBlacklisted), mProbability(probability),
               mTimestamp(timestamp), mLevel(level), mCount(count), mShortcuts(*shortcuts) {}
 
+    bool representsBeginningOfSentence() const {
+        return mRepresentsBeginningOfSentence;
+    }
+
     bool isNotAWord() const {
         return mIsNotAWord;
     }
@@ -94,6 +100,7 @@
     DISALLOW_ASSIGNMENT_OPERATOR(UnigramProperty);
 
     // TODO: Make members const.
+    bool mRepresentsBeginningOfSentence;
     bool mIsNotAWord;
     bool mIsBlacklisted;
     int mProbability;
diff --git a/native/jni/src/suggest/core/policy/dictionary_header_structure_policy.h b/native/jni/src/suggest/core/policy/dictionary_header_structure_policy.h
index 845e629..a612276 100644
--- a/native/jni/src/suggest/core/policy/dictionary_header_structure_policy.h
+++ b/native/jni/src/suggest/core/policy/dictionary_header_structure_policy.h
@@ -51,6 +51,8 @@
 
     virtual const std::vector<int> *getLocale() const = 0;
 
+    virtual bool supportsBeginningOfSentence() const = 0;
+
  protected:
     DictionaryHeaderStructurePolicy() {}
 
diff --git a/native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h b/native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h
index 3fd815f..cda8940 100644
--- a/native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h
+++ b/native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h
@@ -81,9 +81,11 @@
     virtual bool removeNgramEntry(const PrevWordsInfo *const prevWordsInfo,
             const int *const word, const int length) = 0;
 
-    virtual void flush(const char *const filePath) = 0;
+    // Returns whether the flush was success or not.
+    virtual bool flush(const char *const filePath) = 0;
 
-    virtual void flushWithGC(const char *const filePath) = 0;
+    // Returns whether the GC and flush were success or not.
+    virtual bool flushWithGC(const char *const filePath) = 0;
 
     virtual bool needsToRunGC(const bool mindsBlockByGC) const = 0;
 
diff --git a/native/jni/src/suggest/core/result/suggestions_output_utils.cpp b/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
index a307cb4..2390825 100644
--- a/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
+++ b/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
@@ -89,6 +89,9 @@
                     terminalDicNode->getProbability(), NOT_A_PROBABILITY) <= 0;
     const bool isExactMatch =
             ErrorTypeUtils::isExactMatch(terminalDicNode->getContainedErrorTypes());
+    const bool isExactMatchWithIntentionalOmission =
+            ErrorTypeUtils::isExactMatchWithIntentionalOmission(
+                    terminalDicNode->getContainedErrorTypes());
     const bool isFirstCharUppercase = terminalDicNode->isFirstCharUppercase();
     // Heuristic: We exclude probability=0 first-char-uppercase words from exact match.
     // (e.g. "AMD" and "and")
@@ -96,7 +99,9 @@
             && !(isPossiblyOffensiveWord && isFirstCharUppercase);
     const int outputTypeFlags =
             (isPossiblyOffensiveWord ? Dictionary::KIND_FLAG_POSSIBLY_OFFENSIVE : 0)
-            | ((isSafeExactMatch && boostExactMatches) ? Dictionary::KIND_FLAG_EXACT_MATCH : 0);
+            | ((isSafeExactMatch && boostExactMatches) ? Dictionary::KIND_FLAG_EXACT_MATCH : 0)
+            | (isExactMatchWithIntentionalOmission ?
+                    Dictionary::KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION : 0);
 
     // Entries that are blacklisted or do not represent a word should not be output.
     const bool isValidWord = !terminalDicNode->isBlacklistedOrNotAWord();
diff --git a/native/jni/src/suggest/core/session/prev_words_info.h b/native/jni/src/suggest/core/session/prev_words_info.h
index e4de1f4..56c53c1 100644
--- a/native/jni/src/suggest/core/session/prev_words_info.h
+++ b/native/jni/src/suggest/core/session/prev_words_info.h
@@ -20,11 +20,11 @@
 #include "defines.h"
 #include "suggest/core/dictionary/binary_dictionary_bigrams_iterator.h"
 #include "suggest/core/policy/dictionary_structure_with_buffer_policy.h"
+#include "utils/char_utils.h"
 
 namespace latinime {
 
 // TODO: Support n-gram.
-// TODO: Support beginning of sentence.
 // This class does not take ownership of any code point buffers.
 class PrevWordsInfo {
  public:
@@ -52,8 +52,7 @@
 
     void getPrevWordsTerminalPtNodePos(
             const DictionaryStructureWithBufferPolicy *const dictStructurePolicy,
-            int *const outPrevWordsTerminalPtNodePos,
-            const bool tryLowerCaseSearch) const {
+            int *const outPrevWordsTerminalPtNodePos, const bool tryLowerCaseSearch) const {
         for (size_t i = 0; i < NELEMS(mPrevWordCodePoints); ++i) {
             outPrevWordsTerminalPtNodePos[i] = getTerminalPtNodePosOfWord(dictStructurePolicy,
                     mPrevWordCodePoints[i], mPrevWordCodePointCount[i],
@@ -63,17 +62,11 @@
 
     BinaryDictionaryBigramsIterator getBigramsIteratorForPrediction(
             const DictionaryStructureWithBufferPolicy *const dictStructurePolicy) const {
-        int pos = getBigramListPositionForWord(dictStructurePolicy, mPrevWordCodePoints[0],
-                mPrevWordCodePointCount[0], false /* forceLowerCaseSearch */);
-        // getBigramListPositionForWord returns NOT_A_DICT_POS if this word isn't in the
-        // dictionary or has no bigrams
-        if (NOT_A_DICT_POS == pos) {
-            // If no bigrams for this exact word, search again in lower case.
-            pos = getBigramListPositionForWord(dictStructurePolicy, mPrevWordCodePoints[0],
-                    mPrevWordCodePointCount[0], true /* forceLowerCaseSearch */);
-        }
-        return BinaryDictionaryBigramsIterator(
-                dictStructurePolicy->getBigramsStructurePolicy(), pos);
+        const int bigramListPos = getBigramListPositionForWordWithTryingLowerCaseSearch(
+                dictStructurePolicy, mPrevWordCodePoints[0], mPrevWordCodePointCount[0],
+                mIsBeginningOfSentence[0]);
+        return BinaryDictionaryBigramsIterator(dictStructurePolicy->getBigramsStructurePolicy(),
+                bigramListPos);
     }
 
     // n is 1-indexed.
@@ -99,11 +92,21 @@
             const DictionaryStructureWithBufferPolicy *const dictStructurePolicy,
             const int *const wordCodePoints, const int wordCodePointCount,
             const bool isBeginningOfSentence, const bool tryLowerCaseSearch) {
-        if (!dictStructurePolicy || !wordCodePoints) {
+        if (!dictStructurePolicy || !wordCodePoints || wordCodePointCount > MAX_WORD_LENGTH) {
             return NOT_A_DICT_POS;
         }
+        int codePoints[MAX_WORD_LENGTH];
+        int codePointCount = wordCodePointCount;
+        memmove(codePoints, wordCodePoints, sizeof(int) * codePointCount);
+        if (isBeginningOfSentence) {
+            codePointCount = CharUtils::attachBeginningOfSentenceMarker(codePoints,
+                    codePointCount, MAX_WORD_LENGTH);
+            if (codePointCount <= 0) {
+                return NOT_A_DICT_POS;
+            }
+        }
         const int wordPtNodePos = dictStructurePolicy->getTerminalPtNodePositionOfWord(
-                wordCodePoints, wordCodePointCount, false /* forceLowerCaseSearch */);
+                codePoints, codePointCount, false /* forceLowerCaseSearch */);
         if (wordPtNodePos != NOT_A_DICT_POS || !tryLowerCaseSearch) {
             // Return the position when when the word was found or doesn't try lower case
             // search.
@@ -112,7 +115,36 @@
         // Check bigrams for lower-cased previous word if original was not found. Useful for
         // auto-capitalized words like "The [current_word]".
         return dictStructurePolicy->getTerminalPtNodePositionOfWord(
-                wordCodePoints, wordCodePointCount, true /* forceLowerCaseSearch */);
+                codePoints, codePointCount, true /* forceLowerCaseSearch */);
+    }
+
+    static int getBigramListPositionForWordWithTryingLowerCaseSearch(
+            const DictionaryStructureWithBufferPolicy *const dictStructurePolicy,
+            const int *const wordCodePoints, const int wordCodePointCount,
+            const bool isBeginningOfSentence) {
+        if (!dictStructurePolicy || !wordCodePoints || wordCodePointCount > MAX_WORD_LENGTH) {
+            return NOT_A_DICT_POS;
+        }
+        int codePoints[MAX_WORD_LENGTH];
+        int codePointCount = wordCodePointCount;
+        memmove(codePoints, wordCodePoints, sizeof(int) * codePointCount);
+        if (isBeginningOfSentence) {
+            codePointCount = CharUtils::attachBeginningOfSentenceMarker(codePoints,
+                    codePointCount, MAX_WORD_LENGTH);
+            if (codePointCount <= 0) {
+                return NOT_A_DICT_POS;
+            }
+        }
+        int pos = getBigramListPositionForWord(dictStructurePolicy, codePoints,
+                codePointCount, false /* forceLowerCaseSearch */);
+        // getBigramListPositionForWord returns NOT_A_DICT_POS if this word isn't in the
+        // dictionary or has no bigrams
+        if (NOT_A_DICT_POS == pos) {
+            // If no bigrams for this exact word, search again in lower case.
+            pos = getBigramListPositionForWord(dictStructurePolicy, codePoints,
+                    codePointCount, true /* forceLowerCaseSearch */);
+        }
+        return pos;
     }
 
     static int getBigramListPositionForWord(
diff --git a/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.h b/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.h
index 479d151..75f4fef 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.h
@@ -139,6 +139,8 @@
         switch (mDictFormatVersion) {
             case FormatUtils::VERSION_2:
                 return FormatUtils::VERSION_2;
+            case FormatUtils::VERSION_401:
+                return FormatUtils::VERSION_401;
             case FormatUtils::VERSION_4_ONLY_FOR_TESTING:
                 return FormatUtils::VERSION_4_ONLY_FOR_TESTING;
             case FormatUtils::VERSION_4:
@@ -246,6 +248,10 @@
         return &mLocale;
     }
 
+    bool supportsBeginningOfSentence() const {
+        return mDictFormatVersion > FormatUtils::VERSION_401;
+    }
+
  private:
     DISALLOW_COPY_AND_ASSIGN(HeaderPolicy);
 
diff --git a/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp
index a8f8f28..b13ad18 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp
@@ -98,6 +98,7 @@
         case FormatUtils::VERSION_2:
             // Version 2 dictionary writing is not supported.
             return false;
+        case FormatUtils::VERSION_401:
         case FormatUtils::VERSION_4_ONLY_FOR_TESTING:
         case FormatUtils::VERSION_4:
         case FormatUtils::VERSION_4_DEV:
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v401/ver4_patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v401/ver4_patricia_trie_policy.cpp
index 97e1120..0f60a89 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v401/ver4_patricia_trie_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v401/ver4_patricia_trie_policy.cpp
@@ -296,26 +296,30 @@
     }
 }
 
-void Ver4PatriciaTriePolicy::flush(const char *const filePath) {
+bool Ver4PatriciaTriePolicy::flush(const char *const filePath) {
     if (!mBuffers->isUpdatable()) {
         AKLOGI("Warning: flush() is called for non-updatable dictionary. filePath: %s", filePath);
-        return;
+        return false;
     }
     if (!mWritingHelper.writeToDictFile(filePath, mUnigramCount, mBigramCount)) {
         AKLOGE("Cannot flush the dictionary to file.");
         mIsCorrupted = true;
+        return false;
     }
+    return true;
 }
 
-void Ver4PatriciaTriePolicy::flushWithGC(const char *const filePath) {
+bool Ver4PatriciaTriePolicy::flushWithGC(const char *const filePath) {
     if (!mBuffers->isUpdatable()) {
         AKLOGI("Warning: flushWithGC() is called for non-updatable dictionary.");
-        return;
+        return false;
     }
     if (!mWritingHelper.writeToDictFileWithGC(getRootPosition(), filePath)) {
         AKLOGE("Cannot flush the dictionary to file with GC.");
         mIsCorrupted = true;
+        return false;
     }
+    return true;
 }
 
 bool Ver4PatriciaTriePolicy::needsToRunGC(const bool mindsBlockByGC) const {
@@ -432,8 +436,8 @@
             shortcuts.emplace_back(&target, shortcutProbability);
         }
     }
-    const UnigramProperty unigramProperty(ptNodeParams.isNotAWord(),
-            ptNodeParams.isBlacklisted(), ptNodeParams.getProbability(),
+    const UnigramProperty unigramProperty(false /* representsBeginningOfSentence */,
+            ptNodeParams.isNotAWord(), ptNodeParams.isBlacklisted(), ptNodeParams.getProbability(),
             historicalInfo->getTimeStamp(), historicalInfo->getLevel(),
             historicalInfo->getCount(), &shortcuts);
     return WordProperty(&codePointVector, &unigramProperty, &bigrams);
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v401/ver4_patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v401/ver4_patricia_trie_policy.h
index 9581388..b064aaf 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v401/ver4_patricia_trie_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v401/ver4_patricia_trie_policy.h
@@ -117,9 +117,9 @@
     bool removeNgramEntry(const PrevWordsInfo *const prevWordsInfo, const int *const word,
             const int length);
 
-    void flush(const char *const filePath);
+    bool flush(const char *const filePath);
 
-    void flushWithGC(const char *const filePath);
+    bool flushWithGC(const char *const filePath);
 
     bool needsToRunGC(const bool mindsBlockByGC) const;
 
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/dictionary_structure_with_buffer_policy_factory.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/dictionary_structure_with_buffer_policy_factory.cpp
index f93d289..93e330a 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/dictionary_structure_with_buffer_policy_factory.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/dictionary_structure_with_buffer_policy_factory.cpp
@@ -57,13 +57,14 @@
                 const DictionaryHeaderStructurePolicy::AttributeMap *const attributeMap) {
     FormatUtils::FORMAT_VERSION dictFormatVersion = FormatUtils::getFormatVersion(formatVersion);
     switch (dictFormatVersion) {
-        case FormatUtils::VERSION_4: {
+        case FormatUtils::VERSION_401: {
             return newPolicyForOnMemoryV4Dict<backward::v401::Ver4DictConstants,
                     backward::v401::Ver4DictBuffers,
                     backward::v401::Ver4DictBuffers::Ver4DictBuffersPtr,
                     backward::v401::Ver4PatriciaTriePolicy>(
                             dictFormatVersion, locale, attributeMap);
         }
+        case FormatUtils::VERSION_4:
         case FormatUtils::VERSION_4_ONLY_FOR_TESTING:
         case FormatUtils::VERSION_4_DEV: {
             return newPolicyForOnMemoryV4Dict<Ver4DictConstants, Ver4DictBuffers,
@@ -115,13 +116,14 @@
         case FormatUtils::VERSION_2:
             AKLOGE("Given path is a directory but the format is version 2. path: %s", path);
             break;
-        case FormatUtils::VERSION_4: {
+        case FormatUtils::VERSION_401: {
             return newPolicyForV4Dict<backward::v401::Ver4DictConstants,
                     backward::v401::Ver4DictBuffers,
                     backward::v401::Ver4DictBuffers::Ver4DictBuffersPtr,
                     backward::v401::Ver4PatriciaTriePolicy>(
                             headerFilePath, formatVersion, std::move(mmappedBuffer));
         }
+        case FormatUtils::VERSION_4:
         case FormatUtils::VERSION_4_ONLY_FOR_TESTING:
         case FormatUtils::VERSION_4_DEV: {
             return newPolicyForV4Dict<Ver4DictConstants, Ver4DictBuffers,
@@ -177,6 +179,7 @@
         case FormatUtils::VERSION_2:
             return DictionaryStructureWithBufferPolicy::StructurePolicyPtr(
                     new PatriciaTriePolicy(std::move(mmappedBuffer)));
+        case FormatUtils::VERSION_401:
         case FormatUtils::VERSION_4_ONLY_FOR_TESTING:
         case FormatUtils::VERSION_4:
         case FormatUtils::VERSION_4_DEV:
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_gc_event_listeners.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_gc_event_listeners.cpp
index 028e9ec..1f00fc6 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_gc_event_listeners.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_gc_event_listeners.cpp
@@ -56,7 +56,7 @@
         }
     } else {
         mValueStack.back() += 1;
-        if (ptNodeParams->isTerminal()) {
+        if (ptNodeParams->isTerminal() && !ptNodeParams->representsNonWordInfo()) {
             mValidUnigramCount += 1;
         }
     }
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h
index 5704c2e..b2e60a8 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h
@@ -160,7 +160,12 @@
     }
 
     AK_FORCE_INLINE bool representsNonWordInfo() const {
-        return getCodePointCount() > 0 && CharUtils::isInUnicodeSpace(getCodePoints()[0])
+        return getCodePointCount() > 0 && !CharUtils::isInUnicodeSpace(getCodePoints()[0])
+                && isNotAWord();
+    }
+
+    AK_FORCE_INLINE int representsBeginningOfSentence() const {
+        return getCodePointCount() > 0 && getCodePoints()[0] == CODE_POINT_BEGINNING_OF_SENTENCE
                 && isNotAWord();
     }
 
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
index 30dcfba..a6a470c 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
@@ -383,8 +383,8 @@
             shortcuts.emplace_back(&shortcutTarget, shortcutProbability);
         }
     }
-    const UnigramProperty unigramProperty(ptNodeParams.isNotAWord(),
-            ptNodeParams.isBlacklisted(), ptNodeParams.getProbability(),
+    const UnigramProperty unigramProperty(ptNodeParams.representsBeginningOfSentence(),
+            ptNodeParams.isNotAWord(), ptNodeParams.isBlacklisted(), ptNodeParams.getProbability(),
             NOT_A_TIMESTAMP /* timestamp */, 0 /* level */, 0 /* count */, &shortcuts);
     return WordProperty(&codePointVector, &unigramProperty, &bigrams);
 }
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
index 6240d46..88bbfd9 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
@@ -102,14 +102,16 @@
         return false;
     }
 
-    void flush(const char *const filePath) {
+    bool flush(const char *const filePath) {
         // This method should not be called for non-updatable dictionary.
         AKLOGI("Warning: flush() is called for non-updatable dictionary.");
+        return false;
     }
 
-    void flushWithGC(const char *const filePath) {
+    bool flushWithGC(const char *const filePath) {
         // This method should not be called for non-updatable dictionary.
         AKLOGI("Warning: flushWithGC() is called for non-updatable dictionary.");
+        return false;
     }
 
     bool needsToRunGC(const bool mindsBlockByGC) const {
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.cpp
index d539227..e1ceaee 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.cpp
@@ -23,9 +23,11 @@
 const BigramEntry BigramDictContent::getBigramEntryAndAdvancePosition(
         int *const bigramEntryPos) const {
     const BufferWithExtendableBuffer *const bigramListBuffer = getContentBuffer();
-    if (*bigramEntryPos < 0 || *bigramEntryPos >=  bigramListBuffer->getTailPosition()) {
-        AKLOGE("Invalid bigram entry position. bigramEntryPos: %d, bufSize: %d",
-                *bigramEntryPos, bigramListBuffer->getTailPosition());
+    const int bigramEntryTailPos = (*bigramEntryPos) + getBigramEntrySize();
+    if (*bigramEntryPos < 0 || bigramEntryTailPos > bigramListBuffer->getTailPosition()) {
+        AKLOGE("Invalid bigram entry position. bigramEntryPos: %d, bigramEntryTailPos: %d, "
+                "bufSize: %d", *bigramEntryPos, bigramEntryTailPos,
+                        bigramListBuffer->getTailPosition());
         ASSERT(false);
         return BigramEntry(false /* hasNext */, NOT_A_PROBABILITY,
                 Ver4DictConstants::NOT_A_TERMINAL_ID);
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.h
index b8bdb63..52447a3 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/bigram_dict_content.h
@@ -99,6 +99,20 @@
         return hasNext ? Ver4DictConstants::BIGRAM_HAS_NEXT_MASK : 0;
     }
 
+    int getBigramEntrySize() const {
+        if (mHasHistoricalInfo) {
+            return Ver4DictConstants::BIGRAM_FLAGS_FIELD_SIZE
+                    + Ver4DictConstants::TIME_STAMP_FIELD_SIZE
+                    + Ver4DictConstants::WORD_LEVEL_FIELD_SIZE
+                    + Ver4DictConstants::WORD_COUNT_FIELD_SIZE
+                    + Ver4DictConstants::BIGRAM_TARGET_TERMINAL_ID_FIELD_SIZE;
+        } else {
+            return Ver4DictConstants::BIGRAM_FLAGS_FIELD_SIZE
+                    + Ver4DictConstants::PROBABILITY_SIZE
+                    + Ver4DictConstants::BIGRAM_TARGET_TERMINAL_ID_FIELD_SIZE;
+        }
+    }
+
     bool runGCBigramList(const int bigramListPos,
             const BigramDictContent *const sourceBigramDictContent, const int toPos,
             const TerminalPositionLookupTable::TerminalIdMap *const terminalIdMap,
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp
index 439e90e..09c7b7d 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp
@@ -61,7 +61,7 @@
             isTerminal = ptNodeParams.getProbability() != NOT_A_PROBABILITY;
         }
         readingHelper.readNextSiblingNode(ptNodeParams);
-        if (!ptNodeParams.representsNonWordInfo()) {
+        if (ptNodeParams.representsNonWordInfo()) {
             // Skip PtNodes that represent non-word information.
             continue;
         }
@@ -181,9 +181,19 @@
     DynamicPtReadingHelper readingHelper(&mNodeReader, &mPtNodeArrayReader);
     readingHelper.initWithPtNodeArrayPos(getRootPosition());
     bool addedNewUnigram = false;
-    if (mUpdatingHelper.addUnigramWord(&readingHelper, word, length,
+    int codePointsToAdd[MAX_WORD_LENGTH];
+    int codePointCountToAdd = length;
+    memmove(codePointsToAdd, word, sizeof(int) * length);
+    if (unigramProperty->representsBeginningOfSentence()) {
+        codePointCountToAdd = CharUtils::attachBeginningOfSentenceMarker(codePointsToAdd,
+                codePointCountToAdd, MAX_WORD_LENGTH);
+    }
+    if (codePointCountToAdd <= 0) {
+        return false;
+    }
+    if (mUpdatingHelper.addUnigramWord(&readingHelper, codePointsToAdd, codePointCountToAdd,
             unigramProperty, &addedNewUnigram)) {
-        if (addedNewUnigram) {
+        if (addedNewUnigram && !unigramProperty->representsBeginningOfSentence()) {
             mUnigramCount++;
         }
         if (unigramProperty->getShortcuts().size() > 0) {
@@ -294,26 +304,30 @@
     }
 }
 
-void Ver4PatriciaTriePolicy::flush(const char *const filePath) {
+bool Ver4PatriciaTriePolicy::flush(const char *const filePath) {
     if (!mBuffers->isUpdatable()) {
         AKLOGI("Warning: flush() is called for non-updatable dictionary. filePath: %s", filePath);
-        return;
+        return false;
     }
     if (!mWritingHelper.writeToDictFile(filePath, mUnigramCount, mBigramCount)) {
         AKLOGE("Cannot flush the dictionary to file.");
         mIsCorrupted = true;
+        return false;
     }
+    return true;
 }
 
-void Ver4PatriciaTriePolicy::flushWithGC(const char *const filePath) {
+bool Ver4PatriciaTriePolicy::flushWithGC(const char *const filePath) {
     if (!mBuffers->isUpdatable()) {
         AKLOGI("Warning: flushWithGC() is called for non-updatable dictionary.");
-        return;
+        return false;
     }
     if (!mWritingHelper.writeToDictFileWithGC(getRootPosition(), filePath)) {
         AKLOGE("Cannot flush the dictionary to file with GC.");
         mIsCorrupted = true;
+        return false;
     }
+    return true;
 }
 
 bool Ver4PatriciaTriePolicy::needsToRunGC(const bool mindsBlockByGC) const {
@@ -430,8 +444,8 @@
             shortcuts.emplace_back(&target, shortcutProbability);
         }
     }
-    const UnigramProperty unigramProperty(ptNodeParams.isNotAWord(),
-            ptNodeParams.isBlacklisted(), ptNodeParams.getProbability(),
+    const UnigramProperty unigramProperty(ptNodeParams.representsBeginningOfSentence(),
+            ptNodeParams.isNotAWord(), ptNodeParams.isBlacklisted(), ptNodeParams.getProbability(),
             historicalInfo->getTimeStamp(), historicalInfo->getLevel(),
             historicalInfo->getCount(), &shortcuts);
     return WordProperty(&codePointVector, &unigramProperty, &bigrams);
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h
index 008f2e4..d198c97 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h
@@ -99,9 +99,9 @@
     bool removeNgramEntry(const PrevWordsInfo *const prevWordsInfo, const int *const word1,
             const int length1);
 
-    void flush(const char *const filePath);
+    bool flush(const char *const filePath);
 
-    void flushWithGC(const char *const filePath);
+    bool flushWithGC(const char *const filePath);
 
     bool needsToRunGC(const bool mindsBlockByGC) const;
 
diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/dict_file_writing_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/utils/dict_file_writing_utils.cpp
index 105363d..a04551a 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/utils/dict_file_writing_utils.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/utils/dict_file_writing_utils.cpp
@@ -41,11 +41,12 @@
     TimeKeeper::setCurrentTime();
     const FormatUtils::FORMAT_VERSION formatVersion = FormatUtils::getFormatVersion(dictVersion);
     switch (formatVersion) {
-        case FormatUtils::VERSION_4:
+        case FormatUtils::VERSION_401:
             return createEmptyV4DictFile<backward::v401::Ver4DictConstants,
                     backward::v401::Ver4DictBuffers,
                     backward::v401::Ver4DictBuffers::Ver4DictBuffersPtr>(
                             filePath, localeAsCodePointVector, attributeMap, formatVersion);
+        case FormatUtils::VERSION_4:
         case FormatUtils::VERSION_4_ONLY_FOR_TESTING:
         case FormatUtils::VERSION_4_DEV:
             return createEmptyV4DictFile<Ver4DictConstants, Ver4DictBuffers,
diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.cpp
index ba405b0..18f5580 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.cpp
@@ -29,6 +29,8 @@
     switch (formatVersion) {
         case VERSION_2:
             return VERSION_2;
+        case VERSION_401:
+            return VERSION_401;
         case VERSION_4_ONLY_FOR_TESTING:
             return VERSION_4_ONLY_FOR_TESTING;
         case VERSION_4:
@@ -60,6 +62,8 @@
             // same so we use them for both here.
             if (ByteArrayUtils::readUint16(dict, 4) == VERSION_2) {
                 return VERSION_2;
+            } else if (ByteArrayUtils::readUint16(dict, 4) == VERSION_401) {
+                return VERSION_401;
             } else if (ByteArrayUtils::readUint16(dict, 4) == VERSION_4_ONLY_FOR_TESTING) {
                 return VERSION_4_ONLY_FOR_TESTING;
             } else if (ByteArrayUtils::readUint16(dict, 4) == VERSION_4) {
diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.h b/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.h
index c47f30c..b05cb2f 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.h
@@ -32,8 +32,9 @@
         // These MUST have the same values as the relevant constants in FormatSpec.java.
         VERSION_2 = 2,
         VERSION_4_ONLY_FOR_TESTING = 399,
-        VERSION_4 = 401,
-        VERSION_4_DEV = 402,
+        VERSION_401 = 401,
+        VERSION_4 = 402,
+        VERSION_4_DEV = 403,
         UNKNOWN_VERSION = -1
     };
 
diff --git a/native/jni/src/utils/char_utils.h b/native/jni/src/utils/char_utils.h
index 634c45b..f28ed56 100644
--- a/native/jni/src/utils/char_utils.h
+++ b/native/jni/src/utils/char_utils.h
@@ -18,6 +18,7 @@
 #define LATINIME_CHAR_UTILS_H
 
 #include <cctype>
+#include <cstring>
 #include <vector>
 
 #include "defines.h"
@@ -93,6 +94,19 @@
     static unsigned short latin_tolower(const unsigned short c);
     static const std::vector<int> EMPTY_STRING;
 
+    // Returns updated code point count. Returns 0 when the code points cannot be marked as a
+    // Beginning-of-Sentence.
+    static AK_FORCE_INLINE int attachBeginningOfSentenceMarker(int *const codePoints,
+            const int codePointCount, const int maxCodePoint) {
+        if (codePointCount >= maxCodePoint) {
+            // the code points cannot be marked as a Beginning-of-Sentence.
+            return 0;
+        }
+        memmove(codePoints + 1, codePoints, sizeof(int) * codePointCount);
+        codePoints[0] = CODE_POINT_BEGINNING_OF_SENTENCE;
+        return codePointCount + 1;
+    }
+
  private:
     DISALLOW_IMPLICIT_CONSTRUCTORS(CharUtils);
 
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java
index 75bd609..1ccb58c 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java
@@ -32,7 +32,6 @@
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.RichInputMethodManager;
 import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.ResourceUtils;
 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
 
@@ -42,11 +41,9 @@
 @SmallTest
 public class KeyboardLayoutSetTestsBase extends AndroidTestCase {
     // All input method subtypes of LatinIME.
-    private final ArrayList<InputMethodSubtype> mAllSubtypesList = CollectionUtils.newArrayList();
-    private final ArrayList<InputMethodSubtype> mAsciiCapableSubtypesList =
-            CollectionUtils.newArrayList();
-    private final ArrayList<InputMethodSubtype> mAdditionalSubtypesList =
-            CollectionUtils.newArrayList();
+    private final ArrayList<InputMethodSubtype> mAllSubtypesList = new ArrayList<>();
+    private final ArrayList<InputMethodSubtype> mAsciiCapableSubtypesList = new ArrayList<>();
+    private final ArrayList<InputMethodSubtype> mAdditionalSubtypesList = new ArrayList<>();
 
     private Context mThemeContext;
     private int mScreenMetrics;
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSetTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSetTests.java
index eb906cd..7221101 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSetTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSetTests.java
@@ -23,7 +23,6 @@
 import android.view.inputmethod.InputMethodSubtype;
 
 import com.android.inputmethod.latin.RichInputMethodManager;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
 
 import java.util.ArrayList;
@@ -42,7 +41,7 @@
         RichInputMethodManager.init(getContext());
         final RichInputMethodManager richImm = RichInputMethodManager.getInstance();
 
-        final ArrayList<InputMethodSubtype> allSubtypesList = CollectionUtils.newArrayList();
+        final ArrayList<InputMethodSubtype> allSubtypesList = new ArrayList<>();
         final InputMethodInfo imi = richImm.getInputMethodInfoOfThisIme();
         final int subtypeCount = imi.getSubtypeCount();
         for (int index = 0; index < subtypeCount; index++) {
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecSplitTests.java b/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecSplitTests.java
index 514ad1c..29b169d 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecSplitTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecSplitTests.java
@@ -22,8 +22,6 @@
 import android.test.InstrumentationTestCase;
 import android.test.suitebuilder.annotation.MediumTest;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -53,7 +51,7 @@
     }
 
     private static String[] getAllResourceIdNames(final Class<?> resourceIdClass) {
-        final ArrayList<String> names = CollectionUtils.newArrayList();
+        final ArrayList<String> names = new ArrayList<>();
         for (final Field field : resourceIdClass.getFields()) {
             if (field.getType() == Integer.TYPE) {
                 names.add(field.getName());
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/ActualKeyboardBuilder.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/ActualKeyboardBuilder.java
index d0fea58..5614918 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/expected/ActualKeyboardBuilder.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/ActualKeyboardBuilder.java
@@ -20,7 +20,6 @@
 import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
 import com.android.inputmethod.keyboard.internal.MoreKeySpec;
 import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 
 import java.util.ArrayList;
@@ -34,7 +33,7 @@
  */
 public final class ActualKeyboardBuilder extends AbstractKeyboardBuilder<Key> {
     private static ArrayList<Key> filterOutSpacer(final List<Key> keys) {
-        final ArrayList<Key> filteredKeys = CollectionUtils.newArrayList();
+        final ArrayList<Key> filteredKeys = new ArrayList<>();
         for (final Key key : keys) {
             if (key.isSpacer()) {
                 continue;
@@ -55,15 +54,15 @@
         final ArrayList<Key> filteredSortedKeys = filterOutSpacer(sortedKeys);
 
         // Grouping keys into rows.
-        final ArrayList<ArrayList<Key>> rows = CollectionUtils.newArrayList();
-        ArrayList<Key> elements = CollectionUtils.newArrayList();
+        final ArrayList<ArrayList<Key>> rows = new ArrayList<>();
+        ArrayList<Key> elements = new ArrayList<>();
         int lastY = filteredSortedKeys.get(0).getY();
         for (final Key key : filteredSortedKeys) {
             if (lastY != key.getY()) {
                 // A new row is starting.
                 lastY = key.getY();
                 rows.add(elements);
-                elements = CollectionUtils.newArrayList();
+                elements = new ArrayList<>();
             }
             elements.add(key);
         }
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKey.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKey.java
index ad08ba5..0e1c71c 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKey.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKey.java
@@ -18,7 +18,6 @@
 
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.internal.MoreKeySpec;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -73,9 +72,8 @@
         // The additional more keys can be defined independently from other more keys.
         // The position of the additional more keys in the long press popup keyboard can be
         // controlled by specifying special marker "%" in the usual more keys definitions.
-        final ArrayList<ExpectedKey> moreKeysList = CollectionUtils.newArrayList();
-        final ArrayList<ExpectedAdditionalMoreKey> additionalMoreKeys =
-                CollectionUtils.newArrayList();
+        final ArrayList<ExpectedKey> moreKeysList = new ArrayList<>();
+        final ArrayList<ExpectedAdditionalMoreKey> additionalMoreKeys = new ArrayList<>();
         int firstAdditionalMoreKeyIndex = -1;
         for (int index = 0; index < moreKeys.length; index++) {
             final ExpectedKey moreKey = moreKeys[index];
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyboardBuilder.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyboardBuilder.java
index e06d34d..9b7de88 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyboardBuilder.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyboardBuilder.java
@@ -16,8 +16,6 @@
 
 package com.android.inputmethod.keyboard.layout.expected;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Locale;
@@ -116,7 +114,7 @@
     // Helper method to create {@link ExpectedKey} array by joining {@link ExpectedKey},
     // {@link ExpectedKey} array, and {@link String}.
     static ExpectedKey[] joinKeys(final Object ... keys) {
-        final ArrayList<ExpectedKey> list = CollectionUtils.newArrayList();
+        final ArrayList<ExpectedKey> list = new ArrayList<>();
         for (final Object key : keys) {
             if (key instanceof ExpectedKey) {
                 list.add((ExpectedKey)key);
diff --git a/tests/src/com/android/inputmethod/latin/BinaryDictionaryDecayingTests.java b/tests/src/com/android/inputmethod/latin/BinaryDictionaryDecayingTests.java
index 2c2fed3..28cce83 100644
--- a/tests/src/com/android/inputmethod/latin/BinaryDictionaryDecayingTests.java
+++ b/tests/src/com/android/inputmethod/latin/BinaryDictionaryDecayingTests.java
@@ -63,12 +63,16 @@
         super.tearDown();
     }
 
+    private static boolean supportsBeginningOfSentence(final int formatVersion) {
+        return formatVersion > FormatSpec.VERSION401;
+    }
+
     private void addUnigramWord(final BinaryDictionary binaryDictionary, final String word,
             final int probability) {
         binaryDictionary.addUnigramEntry(word, probability, "" /* shortcutTarget */,
                 BinaryDictionary.NOT_A_PROBABILITY /* shortcutProbability */,
-                false /* isNotAWord */, false /* isBlacklisted */,
-                mCurrentTime /* timestamp */);
+                false /* isBeginningOfSentence */, false /* isNotAWord */,
+                false /* isBlacklisted */, mCurrentTime /* timestamp */);
     }
 
     private void addBigramWords(final BinaryDictionary binaryDictionary, final String word0,
@@ -115,7 +119,7 @@
         final File file = File.createTempFile(dictId, TEST_DICT_FILE_EXTENSION,
                 getContext().getCacheDir());
         FileUtils.deleteRecursively(file);
-        Map<String, String> attributeMap = new HashMap<String, String>();
+        Map<String, String> attributeMap = new HashMap<>();
         attributeMap.put(DictionaryHeader.DICTIONARY_ID_KEY, dictId);
         attributeMap.put(DictionaryHeader.DICTIONARY_VERSION_KEY,
                 String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
@@ -329,7 +333,7 @@
         setCurrentTimeForTestMode(mCurrentTime);
 
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
-        final ArrayList<String> words = new ArrayList<String>();
+        final ArrayList<String> words = new ArrayList<>();
 
         for (int i = 0; i < unigramCount; i++) {
             final String word = CodePointUtils.generateWord(random, codePointSet);
@@ -452,8 +456,8 @@
         setCurrentTimeForTestMode(mCurrentTime);
 
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
-        final ArrayList<String> words = new ArrayList<String>();
-        final ArrayList<Pair<String, String>> bigrams = new ArrayList<Pair<String, String>>();
+        final ArrayList<String> words = new ArrayList<>();
+        final ArrayList<Pair<String, String>> bigrams = new ArrayList<>();
 
         for (int i = 0; i < unigramCount; ++i) {
             final String word = CodePointUtils.generateWord(random, codePointSet);
@@ -467,7 +471,7 @@
             }
             final String word0 = words.get(word0Index);
             final String word1 = words.get(word1Index);
-            final Pair<String, String> bigram = new Pair<String, String>(word0, word1);
+            final Pair<String, String> bigram = new Pair<>(word0, word1);
             bigrams.add(bigram);
         }
 
@@ -531,7 +535,7 @@
         setCurrentTimeForTestMode(mCurrentTime);
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
 
-        final ArrayList<String> words = new ArrayList<String>();
+        final ArrayList<String> words = new ArrayList<>();
         for (int i = 0; i < unigramCount; i++) {
             final String word = CodePointUtils.generateWord(random, codePointSet);
             words.add(word);
@@ -631,4 +635,57 @@
         binaryDictionary.close();
         dictFile.delete();
     }
+
+    public void testBeginningOfSentence() {
+        for (final int formatVersion : DICT_FORMAT_VERSIONS) {
+            if (supportsBeginningOfSentence(formatVersion)) {
+                testBeginningOfSentence(formatVersion);
+            }
+        }
+    }
+
+    private void testBeginningOfSentence(final int formatVersion) {
+        setCurrentTimeForTestMode(mCurrentTime);
+        File dictFile = null;
+        try {
+            dictFile = createEmptyDictionaryAndGetFile("TestBinaryDictionary", formatVersion);
+        } catch (IOException e) {
+            fail("IOException while writing an initial dictionary : " + e);
+        }
+        final BinaryDictionary binaryDictionary = new BinaryDictionary(dictFile.getAbsolutePath(),
+                0 /* offset */, dictFile.length(), true /* useFullEditDistance */,
+                Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */);
+
+        binaryDictionary.addUnigramEntry("", DUMMY_PROBABILITY, "" /* shortcutTarget */,
+                BinaryDictionary.NOT_A_PROBABILITY /* shortcutProbability */,
+                true /* isBeginningOfSentence */, true /* isNotAWord */, false /* isBlacklisted */,
+                mCurrentTime);
+        final PrevWordsInfo prevWordsInfoStartOfSentence = PrevWordsInfo.BEGINNING_OF_SENTENCE;
+        addUnigramWord(binaryDictionary, "aaa", DUMMY_PROBABILITY);
+        binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "aaa", DUMMY_PROBABILITY,
+                mCurrentTime);
+        assertTrue(binaryDictionary.isValidNgram(prevWordsInfoStartOfSentence, "aaa"));
+        binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "aaa", DUMMY_PROBABILITY,
+                mCurrentTime);
+        addUnigramWord(binaryDictionary, "bbb", DUMMY_PROBABILITY);
+        binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "bbb", DUMMY_PROBABILITY,
+                mCurrentTime);
+        assertTrue(binaryDictionary.isValidNgram(prevWordsInfoStartOfSentence, "aaa"));
+        assertTrue(binaryDictionary.isValidNgram(prevWordsInfoStartOfSentence, "bbb"));
+
+        forcePassingLongTime(binaryDictionary);
+        assertFalse(binaryDictionary.isValidNgram(prevWordsInfoStartOfSentence, "aaa"));
+        assertFalse(binaryDictionary.isValidNgram(prevWordsInfoStartOfSentence, "bbb"));
+
+        addUnigramWord(binaryDictionary, "aaa", DUMMY_PROBABILITY);
+        binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "aaa", DUMMY_PROBABILITY,
+                mCurrentTime);
+        addUnigramWord(binaryDictionary, "bbb", DUMMY_PROBABILITY);
+        binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "bbb", DUMMY_PROBABILITY,
+                mCurrentTime);
+        assertTrue(binaryDictionary.isValidNgram(prevWordsInfoStartOfSentence, "aaa"));
+        assertTrue(binaryDictionary.isValidNgram(prevWordsInfoStartOfSentence, "bbb"));
+        binaryDictionary.close();
+        dictFile.delete();
+    }
 }
diff --git a/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java b/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java
index 2b82e54..ccede0e 100644
--- a/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java
+++ b/tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java
@@ -47,7 +47,11 @@
             new int[] { FormatSpec.VERSION4, FormatSpec.VERSION4_DEV };
 
     private static boolean canCheckBigramProbability(final int formatVersion) {
-        return formatVersion >= FormatSpec.VERSION4_DEV;
+        return formatVersion > FormatSpec.VERSION401;
+    }
+
+    private static boolean supportsBeginningOfSentence(final int formatVersion) {
+        return formatVersion > FormatSpec.VERSION401;
     }
 
     private File createEmptyDictionaryAndGetFile(final String dictId,
@@ -68,7 +72,7 @@
                 getContext().getCacheDir());
         file.delete();
         file.mkdir();
-        Map<String, String> attributeMap = new HashMap<String, String>();
+        Map<String, String> attributeMap = new HashMap<>();
         if (BinaryDictionaryUtils.createEmptyDictFile(file.getAbsolutePath(), formatVersion,
                 Locale.ENGLISH, attributeMap)) {
             return file;
@@ -171,7 +175,8 @@
         addUnigramWord(binaryDictionary, invalidLongWord, probability);
         // Too long short cut.
         binaryDictionary.addUnigramEntry("a", probability, invalidLongWord,
-                10 /* shortcutProbability */, false /* isNotAWord */, false /* isBlacklisted */,
+                10 /* shortcutProbability */, false /* isBeginningOfSentence */,
+                false /* isNotAWord */, false /* isBlacklisted */,
                 BinaryDictionary.NOT_A_VALID_TIMESTAMP);
         addUnigramWord(binaryDictionary, "abc", probability);
         final int updatedProbability = 200;
@@ -192,8 +197,8 @@
             final int probability) {
         binaryDictionary.addUnigramEntry(word, probability, "" /* shortcutTarget */,
                 BinaryDictionary.NOT_A_PROBABILITY /* shortcutProbability */,
-                false /* isNotAWord */, false /* isBlacklisted */,
-                BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */);
+                false /* isBeginningOfSentence */, false /* isNotAWord */,
+                false /* isBlacklisted */, BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */);
     }
 
     private static void addBigramWords(final BinaryDictionary binaryDictionary, final String word0,
@@ -282,7 +287,7 @@
                 0 /* offset */, dictFile.length(), true /* useFullEditDistance */,
                 Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */);
 
-        final HashMap<String, Integer> probabilityMap = new HashMap<String, Integer>();
+        final HashMap<String, Integer> probabilityMap = new HashMap<>();
         // Test a word that isn't contained within the dictionary.
         final Random random = new Random(seed);
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
@@ -400,12 +405,11 @@
                 0 /* offset */, dictFile.length(), true /* useFullEditDistance */,
                 Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */);
 
-        final ArrayList<String> words = new ArrayList<String>();
-        final ArrayList<Pair<String, String>> bigramWords = new ArrayList<Pair<String,String>>();
+        final ArrayList<String> words = new ArrayList<>();
+        final ArrayList<Pair<String, String>> bigramWords = new ArrayList<>();
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
-        final HashMap<String, Integer> unigramProbabilities = new HashMap<String, Integer>();
-        final HashMap<Pair<String, String>, Integer> bigramProbabilities =
-                new HashMap<Pair<String, String>, Integer>();
+        final HashMap<String, Integer> unigramProbabilities = new HashMap<>();
+        final HashMap<Pair<String, String>, Integer> bigramProbabilities = new HashMap<>();
 
         for (int i = 0; i < wordCount; ++i) {
             final String word = CodePointUtils.generateWord(random, codePointSet);
@@ -421,7 +425,7 @@
             if (TextUtils.equals(word0, word1)) {
                 continue;
             }
-            final Pair<String, String> bigram = new Pair<String, String>(word0, word1);
+            final Pair<String, String> bigram = new Pair<>(word0, word1);
             bigramWords.add(bigram);
             final int unigramProbability = unigramProbabilities.get(word1);
             final int bigramProbability =
@@ -624,12 +628,11 @@
                 0 /* offset */, dictFile.length(), true /* useFullEditDistance */,
                 Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */);
 
-        final ArrayList<String> words = new ArrayList<String>();
-        final ArrayList<Pair<String, String>> bigramWords = new ArrayList<Pair<String,String>>();
+        final ArrayList<String> words = new ArrayList<>();
+        final ArrayList<Pair<String, String>> bigramWords = new ArrayList<>();
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
-        final HashMap<String, Integer> unigramProbabilities = new HashMap<String, Integer>();
-        final HashMap<Pair<String, String>, Integer> bigramProbabilities =
-                new HashMap<Pair<String, String>, Integer>();
+        final HashMap<String, Integer> unigramProbabilities = new HashMap<>();
+        final HashMap<Pair<String, String>, Integer> bigramProbabilities = new HashMap<>();
 
         for (int i = 0; i < wordCount; ++i) {
             final String word = CodePointUtils.generateWord(random, codePointSet);
@@ -645,7 +648,7 @@
             if (TextUtils.equals(word0, word1)) {
                 continue;
             }
-            final Pair<String, String> bigram = new Pair<String, String>(word0, word1);
+            final Pair<String, String> bigram = new Pair<>(word0, word1);
             bigramWords.add(bigram);
             final int unigramProbability = unigramProbabilities.get(word1);
             final int bigramProbability =
@@ -702,12 +705,11 @@
         BinaryDictionary binaryDictionary = new BinaryDictionary(dictFile.getAbsolutePath(),
                 0 /* offset */, dictFile.length(), true /* useFullEditDistance */,
                 Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */);
-        final ArrayList<String> words = new ArrayList<String>();
-        final ArrayList<Pair<String, String>> bigramWords = new ArrayList<Pair<String,String>>();
+        final ArrayList<String> words = new ArrayList<>();
+        final ArrayList<Pair<String, String>> bigramWords = new ArrayList<>();
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
-        final HashMap<String, Integer> unigramProbabilities = new HashMap<String, Integer>();
-        final HashMap<Pair<String, String>, Integer> bigramProbabilities =
-                new HashMap<Pair<String, String>, Integer>();
+        final HashMap<String, Integer> unigramProbabilities = new HashMap<>();
+        final HashMap<Pair<String, String>, Integer> bigramProbabilities = new HashMap<>();
         for (int i = 0; i < initialUnigramCount; ++i) {
             final String word = CodePointUtils.generateWord(random, codePointSet);
             words.add(word);
@@ -746,7 +748,7 @@
                     final int unigramProbability = unigramProbabilities.get(word1);
                     final int bigramProbability =
                             unigramProbability + random.nextInt(0xFF - unigramProbability);
-                    final Pair<String, String> bigram = new Pair<String, String>(word0, word1);
+                    final Pair<String, String> bigram = new Pair<>(word0, word1);
                     bigramWords.add(bigram);
                     bigramProbabilities.put(bigram, bigramProbability);
                     addBigramWords(binaryDictionary, word0, word1, bigramProbability);
@@ -812,8 +814,8 @@
             fail("IOException while writing an initial dictionary : " + e);
         }
 
-        final ArrayList<String> words = new ArrayList<String>();
-        final HashMap<String, Integer> unigramProbabilities = new HashMap<String, Integer>();
+        final ArrayList<String> words = new ArrayList<>();
+        final HashMap<String, Integer> unigramProbabilities = new HashMap<>();
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
 
         BinaryDictionary binaryDictionary;
@@ -863,8 +865,8 @@
             fail("IOException while writing an initial dictionary : " + e);
         }
 
-        final ArrayList<String> words = new ArrayList<String>();
-        final HashSet<Pair<String, String>> bigrams = new HashSet<Pair<String, String>>();
+        final ArrayList<String> words = new ArrayList<>();
+        final HashSet<Pair<String, String>> bigrams = new HashSet<>();
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
 
         BinaryDictionary binaryDictionary;
@@ -884,18 +886,18 @@
                 if (TextUtils.equals(word0, word1)) {
                     continue;
                 }
-                bigrams.add(new Pair<String, String>(word0, word1));
+                bigrams.add(new Pair<>(word0, word1));
                 final int bigramProbability = random.nextInt(0xF);
                 addBigramWords(binaryDictionary, word0, word1, bigramProbability);
             }
-            assertEquals(new HashSet<String>(words).size(), Integer.parseInt(
+            assertEquals(new HashSet<>(words).size(), Integer.parseInt(
                     binaryDictionary.getPropertyForTest(BinaryDictionary.UNIGRAM_COUNT_QUERY)));
-            assertEquals(new HashSet<Pair<String, String>>(bigrams).size(), Integer.parseInt(
+            assertEquals(new HashSet<>(bigrams).size(), Integer.parseInt(
                     binaryDictionary.getPropertyForTest(BinaryDictionary.BIGRAM_COUNT_QUERY)));
             binaryDictionary.flushWithGC();
-            assertEquals(new HashSet<String>(words).size(), Integer.parseInt(
+            assertEquals(new HashSet<>(words).size(), Integer.parseInt(
                     binaryDictionary.getPropertyForTest(BinaryDictionary.UNIGRAM_COUNT_QUERY)));
-            assertEquals(new HashSet<Pair<String, String>>(bigrams).size(), Integer.parseInt(
+            assertEquals(new HashSet<>(bigrams).size(), Integer.parseInt(
                     binaryDictionary.getPropertyForTest(BinaryDictionary.BIGRAM_COUNT_QUERY)));
             binaryDictionary.close();
         }
@@ -924,9 +926,8 @@
         }
 
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
-        final HashMap<String, Integer> unigramProbabilities = new HashMap<String, Integer>();
-        final HashMap<Pair<String, String>, Integer> bigramProbabilities =
-                new HashMap<Pair<String, String>, Integer>();
+        final HashMap<String, Integer> unigramProbabilities = new HashMap<>();
+        final HashMap<Pair<String, String>, Integer> bigramProbabilities = new HashMap<>();
 
         final LanguageModelParam[] languageModelParams = new LanguageModelParam[lmParamCount];
         String prevWord = null;
@@ -941,7 +942,7 @@
             } else {
                 languageModelParams[i] = new LanguageModelParam(prevWord, word, probability,
                         bigramProbability, BinaryDictionary.NOT_A_VALID_TIMESTAMP);
-                bigramProbabilities.put(new Pair<String, String>(prevWord, word),
+                bigramProbabilities.put(new Pair<>(prevWord, word),
                         bigramProbability);
             }
             prevWord = (random.nextDouble() < bigramContinueRate) ? word : null;
@@ -996,11 +997,10 @@
         final WordProperty invalidWordProperty = binaryDictionary.getWordProperty("dummyWord");
         assertFalse(invalidWordProperty.isValid());
 
-        final ArrayList<String> words = new ArrayList<String>();
-        final HashMap<String, Integer> wordProbabilities = new HashMap<String, Integer>();
-        final HashMap<String, HashSet<String>> bigrams = new HashMap<String, HashSet<String>>();
-        final HashMap<Pair<String, String>, Integer> bigramProbabilities =
-                new HashMap<Pair<String, String>, Integer>();
+        final ArrayList<String> words = new ArrayList<>();
+        final HashMap<String, Integer> wordProbabilities = new HashMap<>();
+        final HashMap<String, HashSet<String>> bigrams = new HashMap<>();
+        final HashMap<Pair<String, String>, Integer> bigramProbabilities = new HashMap<>();
 
         for (int i = 0; i < UNIGRAM_COUNT; i++) {
             final String word = CodePointUtils.generateWord(random, codePointSet);
@@ -1010,7 +1010,8 @@
             // TODO: Add tests for historical info.
             binaryDictionary.addUnigramEntry(word, unigramProbability,
                     null /* shortcutTarget */, BinaryDictionary.NOT_A_PROBABILITY,
-                    isNotAWord, isBlacklisted, BinaryDictionary.NOT_A_VALID_TIMESTAMP);
+                    false /* isBeginningOfSentence */, isNotAWord, isBlacklisted,
+                    BinaryDictionary.NOT_A_VALID_TIMESTAMP);
             if (binaryDictionary.needsToRunGC(false /* mindsBlockByGC */)) {
                 binaryDictionary.flushWithGC();
             }
@@ -1043,11 +1044,11 @@
                 binaryDictionary.flushWithGC();
             }
             if (!bigrams.containsKey(word0)) {
-                final HashSet<String> bigramWord1s = new HashSet<String>();
+                final HashSet<String> bigramWord1s = new HashSet<>();
                 bigrams.put(word0, bigramWord1s);
             }
             bigrams.get(word0).add(word1);
-            bigramProbabilities.put(new Pair<String, String>(word0, word1), bigramProbability);
+            bigramProbabilities.put(new Pair<>(word0, word1), bigramProbability);
         }
 
         for (int i = 0; i < words.size(); i++) {
@@ -1062,8 +1063,7 @@
                 final String word1 = wordProperty.mBigrams.get(j).mWord;
                 assertTrue(bigramWord1s.contains(word1));
                 if (canCheckBigramProbability(formatVersion)) {
-                    final int bigramProbability = bigramProbabilities.get(
-                            new Pair<String, String>(word0, word1));
+                    final int bigramProbability = bigramProbabilities.get(new Pair<>(word0, word1));
                     assertEquals(bigramProbability, wordProperty.mBigrams.get(j).getProbability());
                 }
             }
@@ -1097,12 +1097,11 @@
         final WordProperty invalidWordProperty = binaryDictionary.getWordProperty("dummyWord");
         assertFalse(invalidWordProperty.isValid());
 
-        final ArrayList<String> words = new ArrayList<String>();
-        final HashMap<String, Integer> wordProbabilitiesToCheckLater =
-                new HashMap<String, Integer>();
-        final HashMap<String, HashSet<String>> bigrams = new HashMap<String, HashSet<String>>();
+        final ArrayList<String> words = new ArrayList<>();
+        final HashMap<String, Integer> wordProbabilitiesToCheckLater = new HashMap<>();
+        final HashMap<String, HashSet<String>> bigrams = new HashMap<>();
         final HashMap<Pair<String, String>, Integer> bigramProbabilitiesToCheckLater =
-                new HashMap<Pair<String, String>, Integer>();
+                new HashMap<>();
 
         for (int i = 0; i < UNIGRAM_COUNT; i++) {
             final String word = CodePointUtils.generateWord(random, codePointSet);
@@ -1131,17 +1130,16 @@
                 binaryDictionary.flushWithGC();
             }
             if (!bigrams.containsKey(word0)) {
-                final HashSet<String> bigramWord1s = new HashSet<String>();
+                final HashSet<String> bigramWord1s = new HashSet<>();
                 bigrams.put(word0, bigramWord1s);
             }
             bigrams.get(word0).add(word1);
-            bigramProbabilitiesToCheckLater.put(
-                    new Pair<String, String>(word0, word1), bigramProbability);
+            bigramProbabilitiesToCheckLater.put(new Pair<>(word0, word1), bigramProbability);
         }
 
-        final HashSet<String> wordSet = new HashSet<String>(words);
+        final HashSet<String> wordSet = new HashSet<>(words);
         final HashSet<Pair<String, String>> bigramSet =
-                new HashSet<Pair<String,String>>(bigramProbabilitiesToCheckLater.keySet());
+                new HashSet<>(bigramProbabilitiesToCheckLater.keySet());
         int token = 0;
         do {
             final BinaryDictionary.GetNextWordPropertyResult result =
@@ -1155,7 +1153,7 @@
             for (int j = 0; j < wordProperty.mBigrams.size(); j++) {
                 final String word1 = wordProperty.mBigrams.get(j).mWord;
                 assertTrue(bigramWord1s.contains(word1));
-                final Pair<String, String> bigram = new Pair<String, String>(word0, word1);
+                final Pair<String, String> bigram = new Pair<>(word0, word1);
                 if (canCheckBigramProbability(formatVersion)) {
                     final int bigramProbability = bigramProbabilitiesToCheckLater.get(bigram);
                     assertEquals(bigramProbability, wordProperty.mBigrams.get(j).getProbability());
@@ -1188,25 +1186,25 @@
         final int unigramProbability = 100;
         final int shortcutProbability = 10;
         binaryDictionary.addUnigramEntry("aaa", unigramProbability, "zzz",
-                shortcutProbability, false /* isNotAWord */, false /* isBlacklisted */,
-                0 /* timestamp */);
+                shortcutProbability, false /* isBeginningOfSentence */,
+                false /* isNotAWord */, false /* isBlacklisted */, 0 /* timestamp */);
         WordProperty wordProperty = binaryDictionary.getWordProperty("aaa");
         assertEquals(1, wordProperty.mShortcutTargets.size());
         assertEquals("zzz", wordProperty.mShortcutTargets.get(0).mWord);
         assertEquals(shortcutProbability, wordProperty.mShortcutTargets.get(0).getProbability());
         final int updatedShortcutProbability = 2;
         binaryDictionary.addUnigramEntry("aaa", unigramProbability, "zzz",
-                updatedShortcutProbability, false /* isNotAWord */, false /* isBlacklisted */,
-                0 /* timestamp */);
+                updatedShortcutProbability, false /* isBeginningOfSentence */,
+                false /* isNotAWord */, false /* isBlacklisted */, 0 /* timestamp */);
         wordProperty = binaryDictionary.getWordProperty("aaa");
         assertEquals(1, wordProperty.mShortcutTargets.size());
         assertEquals("zzz", wordProperty.mShortcutTargets.get(0).mWord);
         assertEquals(updatedShortcutProbability,
                 wordProperty.mShortcutTargets.get(0).getProbability());
         binaryDictionary.addUnigramEntry("aaa", unigramProbability, "yyy",
-                shortcutProbability, false /* isNotAWord */, false /* isBlacklisted */,
-                0 /* timestamp */);
-        final HashMap<String, Integer> shortcutTargets = new HashMap<String, Integer>();
+                shortcutProbability, false /* isBeginningOfSentence */, false /* isNotAWord */,
+                false /* isBlacklisted */, 0 /* timestamp */);
+        final HashMap<String, Integer> shortcutTargets = new HashMap<>();
         shortcutTargets.put("zzz", updatedShortcutProbability);
         shortcutTargets.put("yyy", shortcutProbability);
         wordProperty = binaryDictionary.getWordProperty("aaa");
@@ -1244,10 +1242,9 @@
         final int codePointSetSize = 20;
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
 
-        final ArrayList<String> words = new ArrayList<String>();
-        final HashMap<String, Integer> unigramProbabilities = new HashMap<String, Integer>();
-        final HashMap<String, HashMap<String, Integer>> shortcutTargets =
-                new HashMap<String, HashMap<String, Integer>>();
+        final ArrayList<String> words = new ArrayList<>();
+        final HashMap<String, Integer> unigramProbabilities = new HashMap<>();
+        final HashMap<String, HashMap<String, Integer>> shortcutTargets = new HashMap<>();
 
         File dictFile = null;
         try {
@@ -1275,14 +1272,13 @@
             final String word = words.get(random.nextInt(words.size()));
             final int unigramProbability = unigramProbabilities.get(word);
             binaryDictionary.addUnigramEntry(word, unigramProbability, shortcutTarget,
-                    shortcutProbability, false /* isNotAWord */, false /* isBlacklisted */,
-                    0 /* timestamp */);
+                    shortcutProbability, false /* isBeginningOfSentence */, false /* isNotAWord */,
+                    false /* isBlacklisted */, 0 /* timestamp */);
             if (shortcutTargets.containsKey(word)) {
                 final HashMap<String, Integer> shortcutTargetsOfWord = shortcutTargets.get(word);
                 shortcutTargetsOfWord.put(shortcutTarget, shortcutProbability);
             } else {
-                final HashMap<String, Integer> shortcutTargetsOfWord =
-                        new HashMap<String, Integer>();
+                final HashMap<String, Integer> shortcutTargetsOfWord = new HashMap<>();
                 shortcutTargetsOfWord.put(shortcutTarget, shortcutProbability);
                 shortcutTargets.put(word, shortcutTargetsOfWord);
             }
@@ -1331,10 +1327,11 @@
         addBigramWords(binaryDictionary, "aaa", "bbb", bigramProbability);
         final int shortcutProbability = 10;
         binaryDictionary.addUnigramEntry("ccc", unigramProbability, "xxx", shortcutProbability,
-                false /* isNotAWord */, false /* isBlacklisted */, 0 /* timestamp */);
+                false /* isBeginningOfSentence */, false /* isNotAWord */,
+                false /* isBlacklisted */, 0 /* timestamp */);
         binaryDictionary.addUnigramEntry("ddd", unigramProbability, null /* shortcutTarget */,
-                Dictionary.NOT_A_PROBABILITY, true /* isNotAWord */,
-                true /* isBlacklisted */, 0 /* timestamp */);
+                Dictionary.NOT_A_PROBABILITY, false /* isBeginningOfSentence */,
+                true /* isNotAWord */, true /* isBlacklisted */, 0 /* timestamp */);
         assertEquals(unigramProbability, binaryDictionary.getFrequency("aaa"));
         assertEquals(unigramProbability, binaryDictionary.getFrequency("bbb"));
         assertTrue(isValidBigram(binaryDictionary, "aaa", "bbb"));
@@ -1379,12 +1376,11 @@
                 0 /* offset */, dictFile.length(), true /* useFullEditDistance */,
                 Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */);
 
-        final ArrayList<String> words = new ArrayList<String>();
-        final ArrayList<Pair<String, String>> bigrams = new ArrayList<Pair<String,String>>();
+        final ArrayList<String> words = new ArrayList<>();
+        final ArrayList<Pair<String, String>> bigrams = new ArrayList<>();
         final int[] codePointSet = CodePointUtils.generateCodePointSet(codePointSetSize, random);
-        final HashMap<String, Integer> unigramProbabilities = new HashMap<String, Integer>();
-        final HashMap<Pair<String, String>, Integer> bigramProbabilities =
-                new HashMap<Pair<String, String>, Integer>();
+        final HashMap<String, Integer> unigramProbabilities = new HashMap<>();
+        final HashMap<Pair<String, String>, Integer> bigramProbabilities = new HashMap<>();
 
         for (int i = 0; i < UNIGRAM_COUNT; i++) {
             final String word = CodePointUtils.generateWord(random, codePointSet);
@@ -1412,7 +1408,7 @@
             if (binaryDictionary.needsToRunGC(true /* mindsBlockByGC */)) {
                 binaryDictionary.flushWithGC();
             }
-            final Pair<String, String> bigram = new Pair<String, String>(word0, word1);
+            final Pair<String, String> bigram = new Pair<>(word0, word1);
             bigrams.add(bigram);
             bigramProbabilities.put(bigram, bigramProbability);
         }
@@ -1434,4 +1430,46 @@
         assertEquals(bigramProbabilities.size(), Integer.parseInt(
                 binaryDictionary.getPropertyForTest(BinaryDictionary.BIGRAM_COUNT_QUERY)));
     }
+
+    public void testBeginningOfSentence() {
+        for (final int formatVersion : DICT_FORMAT_VERSIONS) {
+            if (supportsBeginningOfSentence(formatVersion)) {
+                testBeginningOfSentence(formatVersion);
+            }
+        }
+    }
+
+    private void testBeginningOfSentence(final int formatVersion) {
+        File dictFile = null;
+        try {
+            dictFile = createEmptyDictionaryAndGetFile("TestBinaryDictionary", formatVersion);
+        } catch (IOException e) {
+            fail("IOException while writing an initial dictionary : " + e);
+        }
+        final BinaryDictionary binaryDictionary = new BinaryDictionary(dictFile.getAbsolutePath(),
+                0 /* offset */, dictFile.length(), true /* useFullEditDistance */,
+                Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */);
+        final int dummyProbability = 0;
+        binaryDictionary.addUnigramEntry("", dummyProbability, "" /* shortcutTarget */,
+                BinaryDictionary.NOT_A_PROBABILITY /* shortcutProbability */,
+                true /* isBeginningOfSentence */, true /* isNotAWord */, false /* isBlacklisted */,
+                BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */);
+        final PrevWordsInfo prevWordsInfoStartOfSentence = PrevWordsInfo.BEGINNING_OF_SENTENCE;
+        final int bigramProbability = 200;
+        addUnigramWord(binaryDictionary, "aaa", dummyProbability);
+        binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "aaa", bigramProbability,
+                BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */);
+        assertEquals(bigramProbability,
+                binaryDictionary.getNgramProbability(prevWordsInfoStartOfSentence, "aaa"));
+        binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "aaa", bigramProbability,
+                BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */);
+        addUnigramWord(binaryDictionary, "bbb", dummyProbability);
+        binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "bbb", bigramProbability,
+                BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */);
+        binaryDictionary.flushWithGC();
+        assertEquals(bigramProbability,
+                binaryDictionary.getNgramProbability(prevWordsInfoStartOfSentence, "aaa"));
+        assertEquals(bigramProbability,
+                binaryDictionary.getNgramProbability(prevWordsInfoStartOfSentence, "bbb"));
+    }
 }
diff --git a/tests/src/com/android/inputmethod/latin/DistracterFilterTest.java b/tests/src/com/android/inputmethod/latin/DistracterFilterTest.java
index e98f9ea..406e9a9 100644
--- a/tests/src/com/android/inputmethod/latin/DistracterFilterTest.java
+++ b/tests/src/com/android/inputmethod/latin/DistracterFilterTest.java
@@ -20,53 +20,76 @@
 
 import android.test.suitebuilder.annotation.LargeTest;
 
-import com.android.inputmethod.latin.utils.DistracterFilter;
+import com.android.inputmethod.latin.utils.DistracterFilterUsingSuggestion;
 
 /**
  * Unit test for DistracterFilter
  */
 @LargeTest
 public class DistracterFilterTest extends InputTestsBase {
-    private DistracterFilter mDistracterFilter;
+    private DistracterFilterUsingSuggestion mDistracterFilter;
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        mDistracterFilter = mLatinIME.createDistracterFilter();
+        mDistracterFilter = new DistracterFilterUsingSuggestion(getContext());
+        mDistracterFilter.updateEnabledSubtypes(mLatinIME.getEnabledSubtypesForTest());
     }
 
     public void testIsDistractorToWordsInDictionaries() {
-        final PrevWordsInfo EMPTY_PREV_WORDS_INFO = new PrevWordsInfo(null);
+        final PrevWordsInfo EMPTY_PREV_WORDS_INFO = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
 
         final Locale localeEnUs = new Locale("en", "US");
-        String typedWord = "alot";
-        // For this test case, we consider "alot" is a distracter to "a lot".
+        String typedWord;
+
+        typedWord = "google";
+        // For this test case, we consider "google" is a distracter to "Google".
         assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
                 EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
-        typedWord = "mot";
-        // For this test case, we consider "mot" is a distracter to "not".
+        typedWord = "Bill";
+        // For this test case, we consider "Bill" is a distracter to "bill".
         assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
                 EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
-        typedWord = "wierd";
-        // For this test case, we consider "wierd" is a distracter to "weird".
+        typedWord = "nOt";
+        // For this test case, we consider "nOt" is a distracter to "not".
         assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
                 EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
-        typedWord = "hoe";
-        // For this test case, we consider "hoe" is a distracter to "how".
+        typedWord = "youre";
+        // For this test case, we consider "youre" is a distracter to "you're".
         assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
                 EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
-        typedWord = "nit";
-        // For this test case, we consider "nit" is a distracter to "not".
+        typedWord = "Banana";
+        // For this test case, we consider "Banana" is a distracter to "banana".
         assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
                 EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
+        typedWord = "orange";
+        // For this test case, we consider "orange" is not a distracter to any word in dictionaries.
+        assertFalse(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
+
+        typedWord = "Orange";
+        // For this test case, we consider "Orange" is a distracter to "orange".
+        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
+
+        typedWord = "café";
+        // For this test case, we consider "café" is a distracter to "cafe".
+        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
+
+        typedWord = "cafe";
+        // For this test case, we consider "café" is not a distracter to any word in dictionaries.
+        assertFalse(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
+
         typedWord = "ill";
-        // For this test case, we consider "ill" is a distracter to "I'll".
-        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
+        // For this test case, we consider "ill" is not a distracter to any word in dictionaries.
+        assertFalse(mDistracterFilter.isDistracterToWordsInDictionaries(
                 EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
         typedWord = "asdfd";
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTests.java b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
index a944416..460f600 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicTests.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
@@ -481,6 +481,27 @@
                 suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null);
     }
 
+    public void testPredictionsWithDoubleSpaceToPeriod() {
+        final String WORD_TO_TYPE = "Barack ";
+        type(WORD_TO_TYPE);
+        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS);
+        runMessages();
+        // No need to test here, testPredictionsAfterSpace is testing it already
+        type(" ");
+        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS);
+        runMessages();
+        // Test the predictions have been cleared
+        SuggestedWords suggestedWords = mLatinIME.getSuggestedWordsForTest();
+        assertEquals("predictions cleared after double-space-to-period", suggestedWords.size(), 0);
+        type(Constants.CODE_DELETE);
+        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS);
+        runMessages();
+        // Test the first prediction is displayed
+        suggestedWords = mLatinIME.getSuggestedWordsForTest();
+        assertEquals("predictions after cancel double-space-to-period", "Obama",
+                suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null);
+    }
+
     public void testPredictionsAfterManualPick() {
         final String WORD_TO_TYPE = "Barack";
         type(WORD_TO_TYPE);
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTestsLanguageWithoutSpaces.java b/tests/src/com/android/inputmethod/latin/InputLogicTestsLanguageWithoutSpaces.java
index e38ba72..2560407 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicTestsLanguageWithoutSpaces.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTestsLanguageWithoutSpaces.java
@@ -19,8 +19,6 @@
 import android.test.suitebuilder.annotation.LargeTest;
 import android.view.inputmethod.BaseInputConnection;
 
-import com.android.inputmethod.latin.suggestions.SuggestionStripView;
-
 @LargeTest
 public class InputLogicTestsLanguageWithoutSpaces extends InputTestsBase {
     public void testAutoCorrectForLanguageWithoutSpaces() {
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java b/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java
index 68b6ee6..914b0bb 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java
@@ -18,8 +18,6 @@
 
 import android.test.suitebuilder.annotation.LargeTest;
 
-import com.android.inputmethod.latin.suggestions.SuggestionStripView;
-
 @LargeTest
 public class InputLogicTestsNonEnglish extends InputTestsBase {
     final String NEXT_WORD_PREDICTION_OPTION = "next_word_prediction";
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTestsReorderingMyanmar.java b/tests/src/com/android/inputmethod/latin/InputLogicTestsReorderingMyanmar.java
index bb36a2a..61eae4e 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicTestsReorderingMyanmar.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTestsReorderingMyanmar.java
@@ -77,6 +77,7 @@
  */
 
 @LargeTest
+@SuppressWarnings("rawtypes")
 public class InputLogicTestsReorderingMyanmar extends InputTestsBase {
     // The tests are formatted as follows.
     // Each test is an entry in the array of Pair arrays.
@@ -202,6 +203,7 @@
         */
     };
 
+    @SuppressWarnings("unchecked")
     private void doMyanmarTest(final int testNumber, final Pair[] test) {
         int stepNumber = 0;
         for (final Pair<int[], String> step : test) {
diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
index 09c5320..8406c90 100644
--- a/tests/src/com/android/inputmethod/latin/InputTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
@@ -162,9 +162,9 @@
         return previousSetting;
     }
 
-    // returns the previous setting value
-    protected boolean setDebugMode(final boolean value) {
-        return setBooleanPreference(DebugSettings.PREF_DEBUG_MODE, value, false);
+    protected void setDebugMode(final boolean value) {
+        setBooleanPreference(DebugSettings.PREF_DEBUG_MODE, value, false);
+        setBooleanPreference(Settings.PREF_KEY_IS_INTERNAL, value, false);
     }
 
     protected EditorInfo enrichEditorInfo(final EditorInfo ei) {
diff --git a/tests/src/com/android/inputmethod/latin/LatinImeStressTests.java b/tests/src/com/android/inputmethod/latin/LatinImeStressTests.java
index 0a29d83..f5e993d 100644
--- a/tests/src/com/android/inputmethod/latin/LatinImeStressTests.java
+++ b/tests/src/com/android/inputmethod/latin/LatinImeStressTests.java
@@ -30,7 +30,6 @@
         final int maxWordCountToTypeInEachIteration = 20;
         final long seed = System.currentTimeMillis();
         final Random random = new Random(seed);
-        final int codePointSetSize = 30;
         final int[] codePointSet = CodePointUtils.LATIN_ALPHABETS_LOWER;
         for (int i = 0; i < switchCount; ++i) {
             changeLanguageWithoutWait(locales[random.nextInt(locales.length)],
diff --git a/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java b/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java
index f3351ff..c471eca 100644
--- a/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java
+++ b/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java
@@ -157,10 +157,10 @@
         // If one of the following cases breaks, the bigram suggestions won't work.
         assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
                 "abc def", mSpacingAndPunctuations, 2).mPrevWord, "abc");
-        assertNull(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
-                "abc", mSpacingAndPunctuations, 2).mPrevWord);
-        assertNull(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
-                "abc. def", mSpacingAndPunctuations, 2).mPrevWord);
+        assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
+                "abc", mSpacingAndPunctuations, 2), PrevWordsInfo.BEGINNING_OF_SENTENCE);
+        assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
+                "abc. def", mSpacingAndPunctuations, 2), PrevWordsInfo.BEGINNING_OF_SENTENCE);
 
         assertFalse(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
                 "abc def", mSpacingAndPunctuations, 2).mIsBeginningOfSentence);
@@ -180,16 +180,22 @@
         assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
                 "abc def .", mSpacingAndPunctuations, 2).mPrevWord, "def");
         assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
-                "abc ", mSpacingAndPunctuations, 2).mPrevWord, null);
+                "abc ", mSpacingAndPunctuations, 2), PrevWordsInfo.BEGINNING_OF_SENTENCE);
 
         assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
                 "abc def", mSpacingAndPunctuations, 1).mPrevWord, "def");
         assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
                 "abc def ", mSpacingAndPunctuations, 1).mPrevWord, "def");
-        assertNull(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
-                "abc def.", mSpacingAndPunctuations, 1).mPrevWord);
-        assertNull(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
-                "abc def .", mSpacingAndPunctuations, 1).mPrevWord);
+        assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
+                "abc def.", mSpacingAndPunctuations, 1), PrevWordsInfo.BEGINNING_OF_SENTENCE);
+        assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
+                "abc def .", mSpacingAndPunctuations, 1), PrevWordsInfo.BEGINNING_OF_SENTENCE);
+        assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
+                "abc, def", mSpacingAndPunctuations, 2), PrevWordsInfo.EMPTY_PREV_WORDS_INFO);
+        assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
+                "abc? def", mSpacingAndPunctuations, 2), PrevWordsInfo.EMPTY_PREV_WORDS_INFO);
+        assertEquals(RichInputConnection.getPrevWordsInfoFromNthPreviousWord(
+                "abc! def", mSpacingAndPunctuations, 2), PrevWordsInfo.EMPTY_PREV_WORDS_INFO);
     }
 
     /**
diff --git a/tests/src/com/android/inputmethod/latin/ShiftModeTests.java b/tests/src/com/android/inputmethod/latin/ShiftModeTests.java
index 6fc9df7..a319ffd 100644
--- a/tests/src/com/android/inputmethod/latin/ShiftModeTests.java
+++ b/tests/src/com/android/inputmethod/latin/ShiftModeTests.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.latin;
 
+import android.os.Build;
 import android.test.suitebuilder.annotation.LargeTest;
 import android.text.TextUtils;
 import android.view.inputmethod.EditorInfo;
@@ -78,4 +79,56 @@
         runMessages();
         assertTrue("Caps after a while after repeating Backspace a lot", isCapsModeAutoShifted());
     }
+
+    public void testAutoCapsAfterDigitsPeriod() {
+        changeLanguage("en");
+        type("On 22.11.");
+        assertFalse("(English) Auto caps after digits-period", isCapsModeAutoShifted());
+        type(" ");
+        assertTrue("(English) Auto caps after digits-period-whitespace", isCapsModeAutoShifted());
+        mEditText.setText("");
+        changeLanguage("fr");
+        type("Le 22.");
+        assertFalse("(French) Auto caps after digits-period", isCapsModeAutoShifted());
+        type(" ");
+        assertTrue("(French) Auto caps after digits-period-whitespace", isCapsModeAutoShifted());
+        mEditText.setText("");
+        changeLanguage("de");
+        type("Am 22.");
+        assertFalse("(German) Auto caps after digits-period", isCapsModeAutoShifted());
+        type(" ");
+        // For German, no auto-caps in this case
+        assertFalse("(German) Auto caps after digits-period-whitespace", isCapsModeAutoShifted());
+    }
+
+    public void testAutoCapsAfterInvertedMarks() {
+        changeLanguage("es");
+        assertTrue("(Spanish) Auto caps at start", isCapsModeAutoShifted());
+        type("Hey. ¿");
+        assertTrue("(Spanish) Auto caps after inverted what", isCapsModeAutoShifted());
+        mEditText.setText("");
+        type("¡");
+        assertTrue("(Spanish) Auto caps after inverted bang", isCapsModeAutoShifted());
+    }
+
+    public void DISABLED_testOtherSentenceSeparators() {
+        // We only run this test on Kitkat+ because previous versions of Android don't
+        // have an Armenian locale. For some reason I don't know, when the requested
+        // locale is not present as a device locale, then the application under test can't
+        // access the resources in that locale -- though it works when the app is actually
+        // running on the device and not under test. If we ever figure out what's going
+        // on, remove this test.
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            changeLanguage("hy-AM");
+            assertTrue("(Armenian) Auto caps at start", isCapsModeAutoShifted());
+            type("Hey. ");
+            assertFalse("(Armenian) No auto-caps after latin period", isCapsModeAutoShifted());
+            type("Hey\u0589");
+            assertFalse("(Armenian) No auto-caps directly after armenian period",
+                    isCapsModeAutoShifted());
+            type(" ");
+            assertTrue("(Armenian) Auto-caps after armenian period-whitespace",
+                    isCapsModeAutoShifted());
+        }
+    }
 }
diff --git a/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java
index 8fe4735..66b4a9c 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java
@@ -16,12 +16,10 @@
 
 package com.android.inputmethod.latin;
 
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 
 import java.util.ArrayList;
 import java.util.Locale;
@@ -33,7 +31,7 @@
         final String TYPED_WORD = "typed";
         final int TYPED_WORD_FREQ = 5;
         final int NUMBER_OF_ADDED_SUGGESTIONS = 5;
-        final ArrayList<SuggestedWordInfo> list = CollectionUtils.newArrayList();
+        final ArrayList<SuggestedWordInfo> list = new ArrayList<>();
         list.add(new SuggestedWordInfo(TYPED_WORD, TYPED_WORD_FREQ,
                 SuggestedWordInfo.KIND_TYPED, null /* sourceDict */,
                 SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
@@ -53,16 +51,16 @@
                 false /* isPrediction*/);
         assertEquals(NUMBER_OF_ADDED_SUGGESTIONS + 1, words.size());
         assertEquals("typed", words.getWord(0));
-        assertEquals(SuggestedWordInfo.KIND_TYPED, words.getInfo(0).mKind);
+        assertTrue(words.getInfo(0).isKindOf(SuggestedWordInfo.KIND_TYPED));
         assertEquals("0", words.getWord(1));
-        assertEquals(SuggestedWordInfo.KIND_CORRECTION, words.getInfo(1).mKind);
+        assertTrue(words.getInfo(1).isKindOf(SuggestedWordInfo.KIND_CORRECTION));
         assertEquals("4", words.getWord(5));
-        assertEquals(SuggestedWordInfo.KIND_CORRECTION, words.getInfo(5).mKind);
+        assertTrue(words.getInfo(5).isKindOf(SuggestedWordInfo.KIND_CORRECTION));
 
         final SuggestedWords wordsWithoutTyped = words.getSuggestedWordsExcludingTypedWord();
         assertEquals(words.size() - 1, wordsWithoutTyped.size());
         assertEquals("0", wordsWithoutTyped.getWord(0));
-        assertEquals(SuggestedWordInfo.KIND_CORRECTION, wordsWithoutTyped.getInfo(0).mKind);
+        assertTrue(wordsWithoutTyped.getInfo(0).isKindOf(SuggestedWordInfo.KIND_CORRECTION));
     }
 
     // Helper for testGetTransformedWordInfo
diff --git a/tests/src/com/android/inputmethod/latin/WordComposerTests.java b/tests/src/com/android/inputmethod/latin/WordComposerTests.java
index 17e7185..274555a 100644
--- a/tests/src/com/android/inputmethod/latin/WordComposerTests.java
+++ b/tests/src/com/android/inputmethod/latin/WordComposerTests.java
@@ -74,7 +74,7 @@
                 CoordinateUtils.newCoordinateArray(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR.length,
                         Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
         wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
-                new PrevWordsInfo(null));
+                PrevWordsInfo.EMPTY_PREV_WORDS_INFO);
         assertEquals(wc.size(), CODEPOINTS_WITH_SUPPLEMENTARY_CHAR.length);
         assertFalse(wc.isCursorFrontOrMiddleOfComposingWord());
         wc.setCursorPositionWithinWord(3);
@@ -109,7 +109,7 @@
         assertEquals(PREV_WORDS_INFO_STR_WITHIN_BMP, wc.getPrevWordsInfoForSuggestion());
 
 
-        final PrevWordsInfo PREV_WORDS_INFO_NULL = new PrevWordsInfo(null);
+        final PrevWordsInfo PREV_WORDS_INFO_NULL = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
         wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
                 PREV_WORDS_INFO_NULL);
         wc.setCursorPositionWithinWord(3);
diff --git a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderEncoderTests.java b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderEncoderTests.java
index f29fc21..4b332ca 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderEncoderTests.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderEncoderTests.java
@@ -28,10 +28,8 @@
 import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
 import com.android.inputmethod.latin.makedict.FusionDictionary.PtNode;
 import com.android.inputmethod.latin.makedict.FusionDictionary.PtNodeArray;
-import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
 import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
 import com.android.inputmethod.latin.utils.ByteArrayDictBuffer;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.io.File;
 import java.io.IOException;
@@ -61,15 +59,12 @@
     private static final int NUM_OF_NODES_HAVING_SHORTCUTS = 50;
     private static final int NUM_OF_SHORTCUTS = 5;
 
-    private static final ArrayList<String> sWords = CollectionUtils.newArrayList();
-    private static final ArrayList<String> sWordsWithVariousCodePoints =
-            CollectionUtils.newArrayList();
-    private static final SparseArray<List<Integer>> sEmptyBigrams =
-            CollectionUtils.newSparseArray();
-    private static final SparseArray<List<Integer>> sStarBigrams = CollectionUtils.newSparseArray();
-    private static final SparseArray<List<Integer>> sChainBigrams =
-            CollectionUtils.newSparseArray();
-    private static final HashMap<String, List<String>> sShortcuts = CollectionUtils.newHashMap();
+    private static final ArrayList<String> sWords = new ArrayList<>();
+    private static final ArrayList<String> sWordsWithVariousCodePoints = new ArrayList<>();
+    private static final SparseArray<List<Integer>> sEmptyBigrams = new SparseArray<>();
+    private static final SparseArray<List<Integer>> sStarBigrams = new SparseArray<>();
+    private static final SparseArray<List<Integer>> sChainBigrams = new SparseArray<>();
+    private static final HashMap<String, List<String>> sShortcuts = new HashMap<>();
 
     public BinaryDictDecoderEncoderTests() {
         this(System.currentTimeMillis(), DEFAULT_MAX_UNIGRAMS);
@@ -125,7 +120,7 @@
     private void generateWords(final int number, final Random random) {
         final int[] codePointSet = CodePointUtils.generateCodePointSet(DEFAULT_CODE_POINT_SET_SIZE,
                 random);
-        final Set<String> wordSet = CollectionUtils.newHashSet();
+        final Set<String> wordSet = new HashSet<>();
         while (wordSet.size() < number) {
             wordSet.add(CodePointUtils.generateWord(random, codePointSet));
         }
@@ -147,7 +142,7 @@
             final List<String> words, final HashMap<String, List<String>> shortcutMap) {
         for (int i = 0; i < number; ++i) {
             final String word = words.get(i);
-            final ArrayList<WeightedString> shortcuts = CollectionUtils.newArrayList();
+            final ArrayList<WeightedString> shortcuts = new ArrayList<>();
             if (shortcutMap != null && shortcutMap.containsKey(word)) {
                 for (final String shortcut : shortcutMap.get(word)) {
                     shortcuts.add(new WeightedString(shortcut, UNIGRAM_FREQ));
@@ -325,7 +320,7 @@
     }
 
     public void testReadAndWriteWithByteBuffer() {
-        final List<String> results = CollectionUtils.newArrayList();
+        final List<String> results = new ArrayList<>();
 
         runReadAndWriteTests(results, BinaryDictUtils.USE_BYTE_BUFFER,
                 BinaryDictUtils.VERSION2_OPTIONS);
@@ -339,7 +334,7 @@
     }
 
     public void testReadAndWriteWithByteArray() {
-        final List<String> results = CollectionUtils.newArrayList();
+        final List<String> results = new ArrayList<>();
 
         runReadAndWriteTests(results, BinaryDictUtils.USE_BYTE_ARRAY,
                 BinaryDictUtils.VERSION2_OPTIONS);
@@ -362,8 +357,8 @@
             final TreeMap<Integer, ArrayList<PendingAttribute>> resultBigrams,
             final boolean checkProbability) {
         // check unigrams
-        final Set<String> actualWordsSet = new HashSet<String>(resultWords.values());
-        final Set<String> expectedWordsSet = new HashSet<String>(expectedWords);
+        final Set<String> actualWordsSet = new HashSet<>(resultWords.values());
+        final Set<String> expectedWordsSet = new HashSet<>(expectedWords);
         assertEquals(actualWordsSet, expectedWordsSet);
         if (checkProbability) {
             for (int freq : resultFrequencies.values()) {
@@ -372,7 +367,7 @@
         }
 
         // check bigrams
-        final HashMap<String, Set<String>> expBigrams = new HashMap<String, Set<String>>();
+        final HashMap<String, Set<String>> expBigrams = new HashMap<>();
         for (int i = 0; i < expectedBigrams.size(); ++i) {
             final String word1 = expectedWords.get(expectedBigrams.keyAt(i));
             for (int w2 : expectedBigrams.valueAt(i)) {
@@ -383,7 +378,7 @@
             }
         }
 
-        final HashMap<String, Set<String>> actBigrams = new HashMap<String, Set<String>>();
+        final HashMap<String, Set<String>> actBigrams = new HashMap<>();
         for (Entry<Integer, ArrayList<PendingAttribute>> entry : resultBigrams.entrySet()) {
             final String word1 = resultWords.get(entry.getKey());
             final int unigramFreq = resultFrequencies.get(entry.getKey());
@@ -407,10 +402,9 @@
     private long timeAndCheckReadUnigramsAndBigramsBinary(final File file, final List<String> words,
             final SparseArray<List<Integer>> bigrams, final int bufferType,
             final boolean checkProbability) {
-        final TreeMap<Integer, String> resultWords = CollectionUtils.newTreeMap();
-        final TreeMap<Integer, ArrayList<PendingAttribute>> resultBigrams =
-                CollectionUtils.newTreeMap();
-        final TreeMap<Integer, Integer> resultFreqs = CollectionUtils.newTreeMap();
+        final TreeMap<Integer, String> resultWords = new TreeMap<>();
+        final TreeMap<Integer, ArrayList<PendingAttribute>> resultBigrams = new TreeMap<>();
+        final TreeMap<Integer, Integer> resultFreqs = new TreeMap<>();
 
         long now = -1, diff = -1;
         try {
@@ -468,7 +462,7 @@
     }
 
     public void testReadUnigramsAndBigramsBinaryWithByteBuffer() {
-        final ArrayList<String> results = CollectionUtils.newArrayList();
+        final ArrayList<String> results = new ArrayList<>();
 
         runReadUnigramsAndBigramsTests(results, BinaryDictUtils.USE_BYTE_BUFFER,
                 BinaryDictUtils.VERSION2_OPTIONS);
@@ -479,7 +473,7 @@
     }
 
     public void testReadUnigramsAndBigramsBinaryWithByteArray() {
-        final ArrayList<String> results = CollectionUtils.newArrayList();
+        final ArrayList<String> results = new ArrayList<>();
 
         runReadUnigramsAndBigramsTests(results, BinaryDictUtils.USE_BYTE_ARRAY,
                 BinaryDictUtils.VERSION2_OPTIONS);
@@ -590,7 +584,7 @@
     }
 
     public void testGetTerminalPosition() {
-        final ArrayList<String> results = CollectionUtils.newArrayList();
+        final ArrayList<String> results = new ArrayList<>();
 
         runGetTerminalPositionTests(BinaryDictUtils.USE_BYTE_ARRAY,
                 BinaryDictUtils.VERSION2_OPTIONS);
@@ -656,15 +650,15 @@
                 0 /* offset */, file.length(), true /* useFullEditDistance */,
                 Locale.ENGLISH, dictName, false /* isUpdatable */);
 
-        final HashSet<String> wordSet = new HashSet<String>(words);
-        final HashSet<Pair<String, String>> bigramSet = new HashSet<Pair<String,String>>();
+        final HashSet<String> wordSet = new HashSet<>(words);
+        final HashSet<Pair<String, String>> bigramSet = new HashSet<>();
 
         for (int i = 0; i < words.size(); i++) {
             final List<Integer> bigramList = bigrams.get(i);
             if (bigramList != null) {
                 for (final Integer word1Index : bigramList) {
                     final String word1 = words.get(word1Index);
-                    bigramSet.add(new Pair<String, String>(words.get(i), word1));
+                    bigramSet.add(new Pair<>(words.get(i), word1));
                 }
             }
         }
@@ -689,7 +683,7 @@
             }
             for (int j = 0; j < wordProperty.mBigrams.size(); j++) {
                 final String word1 = wordProperty.mBigrams.get(j).mWord;
-                final Pair<String, String> bigram = new Pair<String, String>(word0, word1);
+                final Pair<String, String> bigram = new Pair<>(word0, word1);
                 assertTrue(bigramSet.contains(bigram));
                 bigramSet.remove(bigram);
             }
diff --git a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java
index 6f8b07a..96604a1 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java
@@ -32,9 +32,6 @@
  * TODO: Rename this class to DictDecoderUtils.
  */
 public final class BinaryDictDecoderUtils {
-
-    private static final boolean DBG = MakedictLog.DBG;
-
     private BinaryDictDecoderUtils() {
         // This utility class is not publicly instantiable.
     }
diff --git a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
index 39bd98b..0843719 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
@@ -258,7 +258,7 @@
             final PtNodeArray rootNodeArray) {
         final int treeSize = FusionDictionary.countPtNodes(rootNodeArray);
         MakedictLog.i("Counted nodes : " + treeSize);
-        final ArrayList<PtNodeArray> flatTree = new ArrayList<PtNodeArray>(treeSize);
+        final ArrayList<PtNodeArray> flatTree = new ArrayList<>(treeSize);
         return flattenTreeInner(flatTree, rootNodeArray);
     }
 
diff --git a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
index 42a50be..9c3b373 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
@@ -90,7 +90,7 @@
             final Map<Integer, ArrayList<PendingAttribute>> bigrams) {
         int[] pushedChars = new int[FormatSpec.MAX_WORD_LENGTH + 1];
 
-        Stack<Position> stack = new Stack<Position>();
+        Stack<Position> stack = new Stack<>();
         int index = 0;
 
         Position initPos = new Position(bodyOffset, 0);
diff --git a/tests/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/tests/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
index f60b3af..4a8c178 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
@@ -57,7 +57,7 @@
         int mCachedParentAddress = 0;
 
         public PtNodeArray() {
-            mData = new ArrayList<PtNode>();
+            mData = new ArrayList<>();
         }
         public PtNodeArray(ArrayList<PtNode> data) {
             Collections.sort(data, PTNODE_COMPARATOR);
@@ -161,14 +161,14 @@
             // We don't want write permission to escape outside the package, so we return a copy
             if (null == mShortcutTargets) return null;
             final ArrayList<WeightedString> copyOfShortcutTargets =
-                    new ArrayList<WeightedString>(mShortcutTargets);
+                    new ArrayList<>(mShortcutTargets);
             return copyOfShortcutTargets;
         }
 
         public ArrayList<WeightedString> getBigrams() {
             // We don't want write permission to escape outside the package, so we return a copy
             if (null == mBigrams) return null;
-            final ArrayList<WeightedString> copyOfBigrams = new ArrayList<WeightedString>(mBigrams);
+            final ArrayList<WeightedString> copyOfBigrams = new ArrayList<>(mBigrams);
             return copyOfBigrams;
         }
 
@@ -183,7 +183,7 @@
          */
         public void addBigram(final String word, final ProbabilityInfo probabilityInfo) {
             if (mBigrams == null) {
-                mBigrams = new ArrayList<WeightedString>();
+                mBigrams = new ArrayList<>();
             }
             WeightedString bigram = getBigram(word);
             if (bigram != null) {
@@ -571,7 +571,6 @@
     /**
      * Helper method to find a word in a given branch.
      */
-    @SuppressWarnings("unused")
     public static PtNode findWordInTree(PtNodeArray nodeArray, final String string) {
         int index = 0;
         final StringBuilder checker = DBG ? new StringBuilder() : null;
@@ -651,7 +650,7 @@
 
         public DictionaryIterator(ArrayList<PtNode> ptRoot) {
             mCurrentString = new StringBuilder();
-            mPositions = new LinkedList<Position>();
+            mPositions = new LinkedList<>();
             final Position rootPos = new Position(ptRoot);
             mPositions.add(rootPos);
         }
diff --git a/tests/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java b/tests/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java
index 7091c11..65b84d5 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java
@@ -20,7 +20,6 @@
 import com.android.inputmethod.latin.BinaryDictionary;
 import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.CharEncoding;
 import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.DictBuffer;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -34,8 +33,6 @@
 // TODO: Separate logics that are used only for testing.
 @UsedForTesting
 public class Ver2DictDecoder extends AbstractDictDecoder {
-    private static final String TAG = Ver2DictDecoder.class.getSimpleName();
-
     /**
      * A utility class for reading a PtNode.
      */
@@ -233,7 +230,7 @@
         final ArrayList<WeightedString> shortcutTargets;
         if (0 != (flags & FormatSpec.FLAG_HAS_SHORTCUT_TARGETS)) {
             // readShortcut will add shortcuts to shortcutTargets.
-            shortcutTargets = new ArrayList<WeightedString>();
+            shortcutTargets = new ArrayList<>();
             addressPointer += PtNodeReader.readShortcut(mDictBuffer, shortcutTargets);
         } else {
             shortcutTargets = null;
@@ -241,7 +238,7 @@
 
         final ArrayList<PendingAttribute> bigrams;
         if (0 != (flags & FormatSpec.FLAG_HAS_BIGRAMS)) {
-            bigrams = new ArrayList<PendingAttribute>();
+            bigrams = new ArrayList<>();
             addressPointer += PtNodeReader.readBigramAddresses(mDictBuffer, bigrams,
                     addressPointer);
             if (bigrams.size() >= FormatSpec.MAX_BIGRAMS_IN_A_PTNODE) {
@@ -267,7 +264,7 @@
         final FusionDictionary fusionDict =
                 new FusionDictionary(new FusionDictionary.PtNodeArray(), header.mDictionaryOptions);
         int token = 0;
-        final ArrayList<WordProperty> wordProperties = CollectionUtils.newArrayList();
+        final ArrayList<WordProperty> wordProperties = new ArrayList<>();
         do {
             final BinaryDictionary.GetNextWordPropertyResult result =
                     binaryDictionary.getNextWordProperty(token);
diff --git a/tests/src/com/android/inputmethod/latin/makedict/Ver2DictDecoderTests.java b/tests/src/com/android/inputmethod/latin/makedict/Ver2DictDecoderTests.java
index 9dc2b10..3882c2c 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/Ver2DictDecoderTests.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/Ver2DictDecoderTests.java
@@ -58,7 +58,6 @@
         }
     }
 
-    @SuppressWarnings("null")
     public void runTestOpenBuffer(final String testName, final DictionaryBufferFactory factory) {
         File testFile = null;
         try {
@@ -102,7 +101,6 @@
                 new DictionaryBufferFromWritableByteBufferFactory());
     }
 
-    @SuppressWarnings("null")
     public void runTestGetBuffer(final String testName, final DictionaryBufferFactory factory) {
         File testFile = null;
         try {
diff --git a/tests/src/com/android/inputmethod/latin/makedict/Ver4DictDecoder.java b/tests/src/com/android/inputmethod/latin/makedict/Ver4DictDecoder.java
index f3fad7e..5e8417e 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/Ver4DictDecoder.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/Ver4DictDecoder.java
@@ -18,7 +18,6 @@
 
 import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.latin.BinaryDictionary;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.FileUtils;
 
 import java.io.File;
@@ -31,8 +30,6 @@
  */
 @UsedForTesting
 public class Ver4DictDecoder extends AbstractDictDecoder {
-    private static final String TAG = Ver4DictDecoder.class.getSimpleName();
-
     final File mDictDirectory;
 
     @UsedForTesting
@@ -73,7 +70,7 @@
         final FusionDictionary fusionDict =
                 new FusionDictionary(new FusionDictionary.PtNodeArray(), header.mDictionaryOptions);
         int token = 0;
-        final ArrayList<WordProperty> wordProperties = CollectionUtils.newArrayList();
+        final ArrayList<WordProperty> wordProperties = new ArrayList<>();
         do {
             final BinaryDictionary.GetNextWordPropertyResult result =
                     binaryDictionary.getNextWordProperty(token);
diff --git a/tests/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java b/tests/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java
index a04b810..8f32e53 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java
@@ -75,33 +75,54 @@
         for (final WordProperty wordProperty : dict) {
             // TODO: switch to addMultipleDictionaryEntries when they support shortcuts
             if (null == wordProperty.mShortcutTargets || wordProperty.mShortcutTargets.isEmpty()) {
-                binaryDict.addUnigramEntry(wordProperty.mWord, wordProperty.getProbability(),
+                if (!binaryDict.addUnigramEntry(wordProperty.mWord, wordProperty.getProbability(),
                         null /* shortcutTarget */, 0 /* shortcutProbability */,
-                        wordProperty.mIsNotAWord, wordProperty.mIsBlacklistEntry,
-                        0 /* timestamp */);
+                        wordProperty.mIsBeginningOfSentence, wordProperty.mIsNotAWord,
+                        wordProperty.mIsBlacklistEntry, 0 /* timestamp */)) {
+                    MakedictLog.e("Cannot add unigram entry for " + wordProperty.mWord);
+                }
             } else {
                 for (final WeightedString shortcutTarget : wordProperty.mShortcutTargets) {
-                    binaryDict.addUnigramEntry(wordProperty.mWord, wordProperty.getProbability(),
+                    if (!binaryDict.addUnigramEntry(wordProperty.mWord,
+                            wordProperty.getProbability(),
                             shortcutTarget.mWord, shortcutTarget.getProbability(),
-                            wordProperty.mIsNotAWord, wordProperty.mIsBlacklistEntry,
-                            0 /* timestamp */);
+                            wordProperty.mIsBeginningOfSentence, wordProperty.mIsNotAWord,
+                            wordProperty.mIsBlacklistEntry, 0 /* timestamp */)) {
+                        MakedictLog.e("Cannot add unigram entry for " + wordProperty.mWord
+                                + ", shortcutTarget: " + shortcutTarget.mWord);
+                        return;
+                    }
                 }
             }
             if (binaryDict.needsToRunGC(true /* mindsBlockByGC */)) {
-                binaryDict.flushWithGC();
+                if (!binaryDict.flushWithGC()) {
+                    MakedictLog.e("Cannot flush dict with GC.");
+                    return;
+                }
             }
         }
         for (final WordProperty word0Property : dict) {
             if (null == word0Property.mBigrams) continue;
             for (final WeightedString word1 : word0Property.mBigrams) {
-                binaryDict.addNgramEntry(new PrevWordsInfo(word0Property.mWord), word1.mWord,
-                        word1.getProbability(), 0 /* timestamp */);
+                final PrevWordsInfo prevWordsInfo = new PrevWordsInfo(word0Property.mWord);
+                if (!binaryDict.addNgramEntry(prevWordsInfo, word1.mWord,
+                        word1.getProbability(), 0 /* timestamp */)) {
+                    MakedictLog.e("Cannot add n-gram entry for "
+                            + prevWordsInfo + " -> " + word1.mWord);
+                    return;
+                }
                 if (binaryDict.needsToRunGC(true /* mindsBlockByGC */)) {
-                    binaryDict.flushWithGC();
+                    if (!binaryDict.flushWithGC()) {
+                        MakedictLog.e("Cannot flush dict with GC.");
+                        return;
+                    }
                 }
             }
         }
-        binaryDict.flushWithGC();
+        if (!binaryDict.flushWithGC()) {
+            MakedictLog.e("Cannot flush dict with GC.");
+            return;
+        }
         binaryDict.close();
     }
 
diff --git a/tests/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryTests.java b/tests/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryTests.java
new file mode 100644
index 0000000..0f2f981
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryTests.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin.personalization;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import com.android.inputmethod.latin.BinaryDictionary;
+import com.android.inputmethod.latin.Dictionary;
+import com.android.inputmethod.latin.DictionaryFacilitator;
+import com.android.inputmethod.latin.ExpandableBinaryDictionary;
+import com.android.inputmethod.latin.ExpandableBinaryDictionary.AddMultipleDictionaryEntriesCallback;
+import com.android.inputmethod.latin.makedict.CodePointUtils;
+import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+
+/**
+ * Unit tests for personalization dictionary
+ */
+@LargeTest
+public class PersonalizationDictionaryTests extends AndroidTestCase {
+    private static final String TAG = PersonalizationDictionaryTests.class.getSimpleName();
+
+    private static final Locale LOCALE_EN_US = new Locale("en", "US");
+    private static final String DUMMY_PACKAGE_NAME = "test.package.name";
+    private static final long TIMEOUT_TO_WAIT_DICTIONARY_OPERATIONS_IN_SECONDS = 120;
+
+    private DictionaryFacilitator getDictionaryFacilitator() {
+        final ArrayList<String> dictTypes = new ArrayList<>();
+        dictTypes.add(Dictionary.TYPE_MAIN);
+        dictTypes.add(Dictionary.TYPE_PERSONALIZATION);
+        final DictionaryFacilitator dictionaryFacilitator = new DictionaryFacilitator();
+        dictionaryFacilitator.resetDictionariesForTesting(getContext(), LOCALE_EN_US, dictTypes,
+                new HashMap<String, File>(), new HashMap<String, Map<String, String>>());
+        return dictionaryFacilitator;
+    }
+
+    public void testAddManyTokens() {
+        final DictionaryFacilitator dictionaryFacilitator = getDictionaryFacilitator();
+        dictionaryFacilitator.clearPersonalizationDictionary();
+        final int dataChunkCount = 20;
+        final int wordCountInOneChunk = 2000;
+        final Random random = new Random(System.currentTimeMillis());
+        final int[] codePointSet = CodePointUtils.LATIN_ALPHABETS_LOWER;
+
+        final SpacingAndPunctuations spacingAndPunctuations =
+                new SpacingAndPunctuations(getContext().getResources());
+
+        final int timeStampInSeconds = (int)TimeUnit.MILLISECONDS.toSeconds(
+                System.currentTimeMillis());
+
+        for (int i = 0; i < dataChunkCount; i++) {
+            final ArrayList<String> tokens = new ArrayList<>();
+            for (int j = 0; j < wordCountInOneChunk; j++) {
+                tokens.add(CodePointUtils.generateWord(random, codePointSet));
+            }
+            final PersonalizationDataChunk personalizationDataChunk = new PersonalizationDataChunk(
+                    true /* inputByUser */, tokens, timeStampInSeconds, DUMMY_PACKAGE_NAME);
+            final CountDownLatch countDownLatch = new CountDownLatch(1);
+            final AddMultipleDictionaryEntriesCallback callback =
+                    new AddMultipleDictionaryEntriesCallback() {
+                        @Override
+                        public void onFinished() {
+                            countDownLatch.countDown();
+                        }
+                    };
+            dictionaryFacilitator.addEntriesToPersonalizationDictionary(personalizationDataChunk,
+                    spacingAndPunctuations, callback);
+            try {
+                countDownLatch.await(TIMEOUT_TO_WAIT_DICTIONARY_OPERATIONS_IN_SECONDS,
+                        TimeUnit.SECONDS);
+            } catch (InterruptedException e) {
+                Log.e(TAG, "Interrupted while waiting for finishing dictionary operations.", e);
+            }
+        }
+        dictionaryFacilitator.flushPersonalizationDictionary();
+        try {
+            dictionaryFacilitator.waitForLoadingDictionariesForTesting(
+                    TIMEOUT_TO_WAIT_DICTIONARY_OPERATIONS_IN_SECONDS, TimeUnit.SECONDS);
+        } catch (InterruptedException e) {
+            Log.e(TAG, "Interrupted while waiting for finishing dictionary operations.", e);
+        }
+        final String dictName = ExpandableBinaryDictionary.getDictName(
+                PersonalizationDictionary.NAME, LOCALE_EN_US, null /* dictFile */);
+        final File dictFile = ExpandableBinaryDictionary.getDictFile(
+                getContext(), dictName, null /* dictFile */);
+
+        final BinaryDictionary binaryDictionary = new BinaryDictionary(dictFile.getAbsolutePath(),
+                0 /* offset */, 0 /* size */,
+                true /* useFullEditDistance */, LOCALE_EN_US, Dictionary.TYPE_PERSONALIZATION,
+                true /* isUpdatable */);
+        assertTrue(binaryDictionary.isValidDictionary());
+    }
+}
diff --git a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
index bc86864..c67d1fa 100644
--- a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
+++ b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
@@ -23,15 +23,15 @@
 import com.android.inputmethod.latin.ExpandableBinaryDictionary;
 import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
+import com.android.inputmethod.latin.utils.DistracterFilter;
 import com.android.inputmethod.latin.utils.FileUtils;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Random;
-import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -102,18 +102,19 @@
     }
 
     private static List<String> generateWords(final int number, final Random random) {
-        final Set<String> wordSet = CollectionUtils.newHashSet();
+        final HashSet<String> wordSet = new HashSet<>();
         while (wordSet.size() < number) {
             wordSet.add(generateWord(random.nextInt()));
         }
-        return new ArrayList<String>(wordSet);
+        return new ArrayList<>(wordSet);
     }
 
     private static void addToDict(final UserHistoryDictionary dict, final List<String> words) {
-        PrevWordsInfo prevWordsInfo = new PrevWordsInfo(null);
+        PrevWordsInfo prevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
         for (String word : words) {
             UserHistoryDictionary.addToDictionary(dict, prevWordsInfo, word, true,
-                    (int)TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
+                    (int)TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()),
+                    DistracterFilter.EMPTY_DISTRACTER_FILTER);
             prevWordsInfo = new PrevWordsInfo(word);
         }
     }
@@ -263,7 +264,8 @@
         dict.waitAllTasksForTests();
         PrevWordsInfo prevWordsInfo = new PrevWordsInfo(null);
         for (final String word : words) {
-            UserHistoryDictionary.addToDictionary(dict, prevWordsInfo, word, true, mCurrentTime);
+            UserHistoryDictionary.addToDictionary(dict, prevWordsInfo, word, true, mCurrentTime,
+                    DistracterFilter.EMPTY_DISTRACTER_FILTER);
             prevWordsInfo = new PrevWordsInfo(word);
             dict.waitAllTasksForTests();
             assertTrue(dict.isInUnderlyingBinaryDictionaryForTests(word));
diff --git a/tests/src/com/android/inputmethod/latin/utils/AsyncResultHolderTests.java b/tests/src/com/android/inputmethod/latin/utils/AsyncResultHolderTests.java
index 7fd1679..1501e94 100644
--- a/tests/src/com/android/inputmethod/latin/utils/AsyncResultHolderTests.java
+++ b/tests/src/com/android/inputmethod/latin/utils/AsyncResultHolderTests.java
@@ -45,27 +45,27 @@
     }
 
     public void testGetWithoutSet() {
-        final AsyncResultHolder<Integer> holder = new AsyncResultHolder<Integer>();
+        final AsyncResultHolder<Integer> holder = new AsyncResultHolder<>();
         final int resultValue = holder.get(DEFAULT_VALUE, TIMEOUT_IN_MILLISECONDS);
         assertEquals(DEFAULT_VALUE, resultValue);
     }
 
     public void testGetBeforeSet() {
-        final AsyncResultHolder<Integer> holder = new AsyncResultHolder<Integer>();
+        final AsyncResultHolder<Integer> holder = new AsyncResultHolder<>();
         setAfterGivenTime(holder, SET_VALUE, TIMEOUT_IN_MILLISECONDS + MARGIN_IN_MILLISECONDS);
         final int resultValue = holder.get(DEFAULT_VALUE, TIMEOUT_IN_MILLISECONDS);
         assertEquals(DEFAULT_VALUE, resultValue);
     }
 
     public void testGetAfterSet() {
-        final AsyncResultHolder<Integer> holder = new AsyncResultHolder<Integer>();
+        final AsyncResultHolder<Integer> holder = new AsyncResultHolder<>();
         holder.set(SET_VALUE);
         final int resultValue = holder.get(DEFAULT_VALUE, TIMEOUT_IN_MILLISECONDS);
         assertEquals(SET_VALUE, resultValue);
     }
 
     public void testGetBeforeTimeout() {
-        final AsyncResultHolder<Integer> holder = new AsyncResultHolder<Integer>();
+        final AsyncResultHolder<Integer> holder = new AsyncResultHolder<>();
         setAfterGivenTime(holder, SET_VALUE, TIMEOUT_IN_MILLISECONDS - MARGIN_IN_MILLISECONDS);
         final int resultValue = holder.get(DEFAULT_VALUE, TIMEOUT_IN_MILLISECONDS);
         assertEquals(SET_VALUE, resultValue);
diff --git a/tests/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtilsTests.java
index d866391..a333ee9 100644
--- a/tests/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtilsTests.java
@@ -48,7 +48,7 @@
     private File createEmptyVer4DictionaryAndGetFile(final String dictId) throws IOException {
         final File file = getDictFile(dictId);
         FileUtils.deleteRecursively(file);
-        Map<String, String> attributeMap = new HashMap<String, String>();
+        Map<String, String> attributeMap = new HashMap<>();
         attributeMap.put(DictionaryHeader.DICTIONARY_ID_KEY, dictId);
         attributeMap.put(DictionaryHeader.DICTIONARY_VERSION_KEY,
                 String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
diff --git a/tests/src/com/android/inputmethod/latin/utils/ExecutorUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/ExecutorUtilsTests.java
new file mode 100644
index 0000000..ae2623d
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/utils/ExecutorUtilsTests.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin.utils;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.util.Log;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Unit tests for ExecutorUtils.
+ */
+@MediumTest
+public class ExecutorUtilsTests extends AndroidTestCase {
+    private static final String TAG = ExecutorUtilsTests.class.getSimpleName();
+
+    private static final String TEST_EXECUTOR_ID = "test";
+    private static final int NUM_OF_TASKS = 10;
+    private static final int DELAY_FOR_WAITING_TASKS_MILLISECONDS = 500;
+
+    public void testExecute() {
+        final ExecutorService executor = ExecutorUtils.getExecutor(TEST_EXECUTOR_ID);
+        final AtomicInteger v = new AtomicInteger(0);
+        for (int i = 0; i < NUM_OF_TASKS; ++i) {
+            executor.execute(new Runnable() {
+                @Override
+                public void run() {
+                    v.incrementAndGet();
+                }
+            });
+        }
+        try {
+            executor.awaitTermination(DELAY_FOR_WAITING_TASKS_MILLISECONDS, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException e) {
+            Log.d(TAG, "Exception while sleeping.", e);
+        }
+
+        assertEquals(NUM_OF_TASKS, v.get());
+    }
+}
diff --git a/tests/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutorTests.java b/tests/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutorTests.java
deleted file mode 100644
index e075548..0000000
--- a/tests/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutorTests.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.util.Log;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Unit tests for PrioritizedSerialExecutor.
- * TODO: Add more detailed tests to make use of priorities, etc.
- */
-@MediumTest
-public class PrioritizedSerialExecutorTests extends AndroidTestCase {
-    private static final String TAG = PrioritizedSerialExecutorTests.class.getSimpleName();
-
-    private static final int NUM_OF_TASKS = 10;
-    private static final int DELAY_FOR_WAITING_TASKS_MILLISECONDS = 500;
-
-    public void testExecute() {
-        final PrioritizedSerialExecutor executor = new PrioritizedSerialExecutor();
-        final AtomicInteger v = new AtomicInteger(0);
-        for (int i = 0; i < NUM_OF_TASKS; ++i) {
-            executor.execute(new Runnable() {
-                @Override
-                public void run() {
-                    v.incrementAndGet();
-                }
-            });
-        }
-        try {
-            Thread.sleep(DELAY_FOR_WAITING_TASKS_MILLISECONDS);
-        } catch (InterruptedException e) {
-            Log.d(TAG, "Exception while sleeping.", e);
-        }
-
-        assertEquals(NUM_OF_TASKS, v.get());
-    }
-
-    public void testExecutePrioritized() {
-        final PrioritizedSerialExecutor executor = new PrioritizedSerialExecutor();
-        final AtomicInteger v = new AtomicInteger(0);
-        for (int i = 0; i < NUM_OF_TASKS; ++i) {
-            executor.executePrioritized(new Runnable() {
-                @Override
-                public void run() {
-                    v.incrementAndGet();
-                }
-            });
-        }
-        try {
-            Thread.sleep(DELAY_FOR_WAITING_TASKS_MILLISECONDS);
-        } catch (InterruptedException e) {
-            Log.d(TAG, "Exception while sleeping.", e);
-        }
-
-        assertEquals(NUM_OF_TASKS, v.get());
-    }
-
-    public void testExecuteCombined() {
-        final PrioritizedSerialExecutor executor = new PrioritizedSerialExecutor();
-        final AtomicInteger v = new AtomicInteger(0);
-        for (int i = 0; i < NUM_OF_TASKS; ++i) {
-            executor.execute(new Runnable() {
-                @Override
-                public void run() {
-                    v.incrementAndGet();
-                }
-            });
-        }
-
-        for (int i = 0; i < NUM_OF_TASKS; ++i) {
-            executor.executePrioritized(new Runnable() {
-                @Override
-                public void run() {
-                    v.incrementAndGet();
-                }
-            });
-        }
-
-        try {
-            Thread.sleep(DELAY_FOR_WAITING_TASKS_MILLISECONDS);
-        } catch (InterruptedException e) {
-            Log.d(TAG, "Exception while sleeping.", e);
-        }
-
-        assertEquals(2 * NUM_OF_TASKS, v.get());
-    }
-}
diff --git a/tests/src/com/android/inputmethod/latin/utils/ResourceUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/ResourceUtilsTests.java
index 3eb7040..8e764e4 100644
--- a/tests/src/com/android/inputmethod/latin/utils/ResourceUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/utils/ResourceUtilsTests.java
@@ -24,10 +24,10 @@
 @SmallTest
 public class ResourceUtilsTests extends AndroidTestCase {
     public void testFindConstantForKeyValuePairsSimple() {
-        final HashMap<String,String> anyKeyValue = CollectionUtils.newHashMap();
+        final HashMap<String,String> anyKeyValue = new HashMap<>();
         anyKeyValue.put("anyKey", "anyValue");
         final HashMap<String,String> nullKeyValue = null;
-        final HashMap<String,String> emptyKeyValue = CollectionUtils.newHashMap();
+        final HashMap<String,String> emptyKeyValue = new HashMap<>();
 
         final String[] nullArray = null;
         assertNull(ResourceUtils.findConstantForKeyValuePairs(anyKeyValue, nullArray));
@@ -48,7 +48,7 @@
             "HARDWARE=mako,0.5",
         };
 
-        final HashMap<String,String> keyValues = CollectionUtils.newHashMap();
+        final HashMap<String,String> keyValues = new HashMap<>();
         keyValues.put(HARDWARE_KEY, "grouper");
         assertEquals("0.3", ResourceUtils.findConstantForKeyValuePairs(keyValues, array));
         keyValues.put(HARDWARE_KEY, "mako");
@@ -88,7 +88,7 @@
             "HARDWARE=mantaray:MODEL=Nexus 10:MANUFACTURER=samsung,0.2"
         };
 
-        final HashMap<String,String> keyValues = CollectionUtils.newHashMap();
+        final HashMap<String,String> keyValues = new HashMap<>();
         keyValues.put(HARDWARE_KEY, "grouper");
         keyValues.put(MODEL_KEY, "Nexus 7");
         keyValues.put(MANUFACTURER_KEY, "asus");
@@ -126,7 +126,7 @@
             "HARDWARE=manta.*:MODEL=Nexus 10:MANUFACTURER=samsung,0.2"
         };
 
-        final HashMap<String,String> keyValues = CollectionUtils.newHashMap();
+        final HashMap<String,String> keyValues = new HashMap<>();
         keyValues.put(HARDWARE_KEY, "grouper");
         keyValues.put(MODEL_KEY, "Nexus 7");
         keyValues.put(MANUFACTURER_KEY, "asus");
diff --git a/tests/src/com/android/inputmethod/latin/utils/SpacebarLanguagetUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/SpacebarLanguagetUtilsTests.java
index ff1103e..4156de7 100644
--- a/tests/src/com/android/inputmethod/latin/utils/SpacebarLanguagetUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/utils/SpacebarLanguagetUtilsTests.java
@@ -31,7 +31,7 @@
 @SmallTest
 public class SpacebarLanguagetUtilsTests extends AndroidTestCase {
     // All input method subtypes of LatinIME.
-    private final ArrayList<InputMethodSubtype> mSubtypesList = CollectionUtils.newArrayList();
+    private final ArrayList<InputMethodSubtype> mSubtypesList = new ArrayList<>();
 
     private RichInputMethodManager mRichImm;
     private Resources mRes;
diff --git a/tests/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtilsTests.java
index ee34590..8e409ab 100644
--- a/tests/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtilsTests.java
@@ -31,7 +31,7 @@
 @SmallTest
 public class SubtypeLocaleUtilsTests extends AndroidTestCase {
     // All input method subtypes of LatinIME.
-    private final ArrayList<InputMethodSubtype> mSubtypesList = CollectionUtils.newArrayList();
+    private final ArrayList<InputMethodSubtype> mSubtypesList = new ArrayList<>();
 
     private RichInputMethodManager mRichImm;
     private Resources mRes;
diff --git a/tests/src/com/android/inputmethod/research/MotionEventReaderTests.java b/tests/src/com/android/inputmethod/research/MotionEventReaderTests.java
deleted file mode 100644
index 28a9f3d..0000000
--- a/tests/src/com/android/inputmethod/research/MotionEventReaderTests.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.util.JsonReader;
-
-import com.android.inputmethod.research.MotionEventReader.ReplayData;
-
-import java.io.IOException;
-import java.io.StringReader;
-
-@SmallTest
-public class MotionEventReaderTests extends AndroidTestCase {
-    private MotionEventReader mMotionEventReader = new MotionEventReader();
-    private ReplayData mReplayData;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mReplayData = new ReplayData();
-    }
-
-    private JsonReader jsonReaderForString(final String s) {
-        return new JsonReader(new StringReader(s));
-    }
-
-    public void testTopLevelDataVariant() {
-        final JsonReader jsonReader = jsonReaderForString(
-                "{"
-                + "\"_ct\": 1359590400000,"
-                + "\"_ut\": 4381933,"
-                + "\"_ty\": \"MotionEvent\","
-                + "\"action\": \"UP\","
-                + "\"isLoggingRelated\": false,"
-                + "\"x\": 100.0,"
-                + "\"y\": 200.0"
-                + "}"
-                );
-        try {
-            mMotionEventReader.readLogStatement(jsonReader, mReplayData);
-        } catch (IOException e) {
-            e.printStackTrace();
-            fail("IOException thrown");
-        }
-        assertEquals("x set correctly", (int) mReplayData.mPointerCoordsArrays.get(0)[0].x, 100);
-        assertEquals("y set correctly", (int) mReplayData.mPointerCoordsArrays.get(0)[0].y, 200);
-        assertEquals("only one pointer", mReplayData.mPointerCoordsArrays.get(0).length, 1);
-        assertEquals("only one MotionEvent", mReplayData.mPointerCoordsArrays.size(), 1);
-    }
-
-    public void testNestedDataVariant() {
-        final JsonReader jsonReader = jsonReaderForString(
-                "{"
-                + "  \"_ct\": 135959040000,"
-                + "  \"_ut\": 4382702,"
-                + "  \"_ty\": \"MotionEvent\","
-                + "  \"action\": \"MOVE\","
-                + "  \"isLoggingRelated\": false,"
-                + "  \"motionEvent\": {"
-                + "    \"pointerIds\": ["
-                + "      0"
-                + "    ],"
-                + "    \"xyt\": ["
-                + "      {"
-                + "        \"t\": 4382551,"
-                + "        \"d\": ["
-                + "          {"
-                + "            \"x\": 100.0,"
-                + "            \"y\": 200.0,"
-                + "            \"toma\": 999.0,"
-                + "            \"tomi\": 999.0,"
-                + "            \"o\": 0.0"
-                + "          }"
-                + "        ]"
-                + "      },"
-                + "      {"
-                + "        \"t\": 4382559,"
-                + "        \"d\": ["
-                + "          {"
-                + "            \"x\": 300.0,"
-                + "            \"y\": 400.0,"
-                + "            \"toma\": 999.0,"
-                + "            \"tomi\": 999.0,"
-                + "            \"o\": 0.0"
-                + "          }"
-                + "        ]"
-                + "      }"
-                + "    ]"
-                + "  }"
-                + "}"
-                );
-        try {
-            mMotionEventReader.readLogStatement(jsonReader, mReplayData);
-        } catch (IOException e) {
-            e.printStackTrace();
-            fail("IOException thrown");
-        }
-        assertEquals("x1 set correctly", (int) mReplayData.mPointerCoordsArrays.get(0)[0].x, 100);
-        assertEquals("y1 set correctly", (int) mReplayData.mPointerCoordsArrays.get(0)[0].y, 200);
-        assertEquals("x2 set correctly", (int) mReplayData.mPointerCoordsArrays.get(1)[0].x, 300);
-        assertEquals("y2 set correctly", (int) mReplayData.mPointerCoordsArrays.get(1)[0].y, 400);
-        assertEquals("only one pointer", mReplayData.mPointerCoordsArrays.get(0).length, 1);
-        assertEquals("two MotionEvents", mReplayData.mPointerCoordsArrays.size(), 2);
-    }
-
-    public void testNestedDataVariantMultiPointer() {
-        final JsonReader jsonReader = jsonReaderForString(
-                "{"
-                + "  \"_ct\": 135959040000,"
-                + "  \"_ut\": 4382702,"
-                + "  \"_ty\": \"MotionEvent\","
-                + "  \"action\": \"MOVE\","
-                + "  \"isLoggingRelated\": false,"
-                + "  \"motionEvent\": {"
-                + "    \"pointerIds\": ["
-                + "      1"
-                + "    ],"
-                + "    \"xyt\": ["
-                + "      {"
-                + "        \"t\": 4382551,"
-                + "        \"d\": ["
-                + "          {"
-                + "            \"x\": 100.0,"
-                + "            \"y\": 200.0,"
-                + "            \"toma\": 999.0,"
-                + "            \"tomi\": 999.0,"
-                + "            \"o\": 0.0"
-                + "          },"
-                + "          {"
-                + "            \"x\": 300.0,"
-                + "            \"y\": 400.0,"
-                + "            \"toma\": 999.0,"
-                + "            \"tomi\": 999.0,"
-                + "            \"o\": 0.0"
-                + "          }"
-                + "        ]"
-                + "      }"
-                + "    ]"
-                + "  }"
-                + "}"
-                );
-        try {
-            mMotionEventReader.readLogStatement(jsonReader, mReplayData);
-        } catch (IOException e) {
-            e.printStackTrace();
-            fail("IOException thrown");
-        }
-        assertEquals("x1 set correctly", (int) mReplayData.mPointerCoordsArrays.get(0)[0].x, 100);
-        assertEquals("y1 set correctly", (int) mReplayData.mPointerCoordsArrays.get(0)[0].y, 200);
-        assertEquals("x2 set correctly", (int) mReplayData.mPointerCoordsArrays.get(0)[1].x, 300);
-        assertEquals("y2 set correctly", (int) mReplayData.mPointerCoordsArrays.get(0)[1].y, 400);
-        assertEquals("two pointers", mReplayData.mPointerCoordsArrays.get(0).length, 2);
-        assertEquals("one MotionEvent", mReplayData.mPointerCoordsArrays.size(), 1);
-    }
-}
diff --git a/tools/dicttool/Android.mk b/tools/dicttool/Android.mk
index 10104cf..ba57fbe 100644
--- a/tools/dicttool/Android.mk
+++ b/tools/dicttool/Android.mk
@@ -15,7 +15,9 @@
 
 # HACK: Temporarily disable host tool build on Mac until the build system is ready for C++11.
 LATINIME_HOST_OSNAME := $(shell uname -s)
-ifneq ($(LATINIME_HOST_OSNAME), Darwin) # TODO: Remove this
+ifeq ($(LATINIME_HOST_OSNAME), Darwin) # TODO: Remove this
+$(warning dicttool_aosp is not supported on $(LATINIME_HOST_OSNAME))
+else # TODO: Remove this
 
 LATINIME_DICTTOOL_AOSP_LOCAL_PATH := $(call my-dir)
 LOCAL_PATH := $(LATINIME_DICTTOOL_AOSP_LOCAL_PATH)
@@ -49,7 +51,6 @@
         latin/WordComposer.java \
         latin/settings/NativeSuggestOptions.java \
         latin/utils/BinaryDictionaryUtils.java \
-        latin/utils/CollectionUtils.java \
         latin/utils/CombinedFormatUtils.java \
         latin/utils/CoordinateUtils.java \
         latin/utils/FileUtils.java \
diff --git a/tools/dicttool/compat/android/content/Context.java b/tools/dicttool/compat/android/content/Context.java
new file mode 100644
index 0000000..afe1322
--- /dev/null
+++ b/tools/dicttool/compat/android/content/Context.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content;
+
+public class Context {
+}
diff --git a/tools/dicttool/compat/android/test/AndroidTestCase.java b/tools/dicttool/compat/android/test/AndroidTestCase.java
index d01b7ad..f765ce0 100644
--- a/tools/dicttool/compat/android/test/AndroidTestCase.java
+++ b/tools/dicttool/compat/android/test/AndroidTestCase.java
@@ -16,6 +16,8 @@
 
 package android.test;
 
+import com.android.inputmethod.latin.dicttool.Test;
+
 import junit.framework.TestCase;
 
 import java.io.File;
@@ -27,7 +29,11 @@
  */
 public class AndroidTestCase extends TestCase {
     public File getCacheDir() {
-        return new File(".");
+        final File dir = Test.TEST_TMP_DIR;
+        if (!dir.isDirectory()) {
+            dir.mkdirs();
+        }
+        return dir;
     }
     public AndroidTestCase getContext() {
         return this;
diff --git a/tools/dicttool/compat/android/util/SparseArray.java b/tools/dicttool/compat/android/util/SparseArray.java
index 6c76f19..9efbd39 100644
--- a/tools/dicttool/compat/android/util/SparseArray.java
+++ b/tools/dicttool/compat/android/util/SparseArray.java
@@ -16,8 +16,6 @@
 
 package android.util;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
 import java.util.ArrayList;
 import java.util.Collections;
 
@@ -30,8 +28,8 @@
     }
 
     public SparseArray(final int initialCapacity) {
-        mKeys = CollectionUtils.newArrayList(initialCapacity);
-        mValues = CollectionUtils.newArrayList(initialCapacity);
+        mKeys = new ArrayList<>(initialCapacity);
+        mValues = new ArrayList<>(initialCapacity);
     }
 
     public int size() {
diff --git a/tools/dicttool/compat/android/util/SparseIntArray.java b/tools/dicttool/compat/android/util/SparseIntArray.java
index ac8a04c..e4d3dfd 100644
--- a/tools/dicttool/compat/android/util/SparseIntArray.java
+++ b/tools/dicttool/compat/android/util/SparseIntArray.java
@@ -24,7 +24,7 @@
     }
 
     public SparseIntArray(final int initialCapacity) {
-        mArray = new SparseArray<Integer>(initialCapacity);
+        mArray = new SparseArray<>(initialCapacity);
     }
 
     public int size() {
diff --git a/tools/dicttool/compat/com/android/inputmethod/event/CombinerChain.java b/tools/dicttool/compat/com/android/inputmethod/event/CombinerChain.java
index 538d759..458f22c 100644
--- a/tools/dicttool/compat/com/android/inputmethod/event/CombinerChain.java
+++ b/tools/dicttool/compat/com/android/inputmethod/event/CombinerChain.java
@@ -16,8 +16,6 @@
 
 package com.android.inputmethod.event;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
 import java.util.ArrayList;
 
 /**
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
index f9771c8..2cbc041 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
@@ -19,15 +19,14 @@
 import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils;
 import com.android.inputmethod.latin.makedict.BinaryDictIOUtils;
 import com.android.inputmethod.latin.makedict.DictDecoder;
-import com.android.inputmethod.latin.makedict.FormatSpec;
 import com.android.inputmethod.latin.makedict.FusionDictionary;
 import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
 
 import org.xml.sax.SAXException;
 
-import java.io.File;
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -54,7 +53,7 @@
     private final static int MAX_DECODE_DEPTH = 8;
 
     public static class DecoderChainSpec {
-        ArrayList<String> mDecoderSpec = new ArrayList<String>();
+        ArrayList<String> mDecoderSpec = new ArrayList<>();
         File mFile;
         public DecoderChainSpec addStep(final String stepDescription) {
             mDecoderSpec.add(stepDescription);
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CombinedInputOutput.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CombinedInputOutput.java
index 391328f..6a0e1b7 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CombinedInputOutput.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CombinedInputOutput.java
@@ -98,7 +98,7 @@
             headerLine = reader.readLine();
         }
         final String header[] = headerLine.split(",");
-        final HashMap<String, String> attributes = new HashMap<String, String>();
+        final HashMap<String, String> attributes = new HashMap<>();
         for (String item : header) {
             final String keyValue[] = item.split("=");
             if (2 != keyValue.length) {
@@ -115,8 +115,8 @@
         String word = null;
         ProbabilityInfo probabilityInfo = new ProbabilityInfo(0);
         boolean isNotAWord = false;
-        ArrayList<WeightedString> bigrams = new ArrayList<WeightedString>();
-        ArrayList<WeightedString> shortcuts = new ArrayList<WeightedString>();
+        ArrayList<WeightedString> bigrams = new ArrayList<>();
+        ArrayList<WeightedString> shortcuts = new ArrayList<>();
         while (null != (line = reader.readLine())) {
             if (line.startsWith(COMMENT_LINE_STARTER)) continue;
             final String args[] = line.trim().split(",");
@@ -128,8 +128,8 @@
                         dict.setBigram(word, s.mWord, s.mProbabilityInfo);
                     }
                 }
-                if (!shortcuts.isEmpty()) shortcuts = new ArrayList<WeightedString>();
-                if (!bigrams.isEmpty()) bigrams = new ArrayList<WeightedString>();
+                if (!shortcuts.isEmpty()) shortcuts = new ArrayList<>();
+                if (!bigrams.isEmpty()) bigrams = new ArrayList<>();
                 isNotAWord = false;
                 for (String param : args) {
                     final String params[] = param.split("=", 2);
@@ -223,7 +223,7 @@
      */
     public static void writeDictionaryCombined(
             final Writer destination, final FusionDictionary dict) throws IOException {
-        final TreeSet<WordProperty> wordPropertiesInDict = new TreeSet<WordProperty>();
+        final TreeSet<WordProperty> wordPropertiesInDict = new TreeSet<>();
         for (final WordProperty wordProperty : dict) {
             // This for ordering by frequency, then by asciibetic order
             wordPropertiesInDict.add(wordProperty);
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/DictionaryMaker.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/DictionaryMaker.java
index 8e8ab19..37c8d41 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/DictionaryMaker.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/DictionaryMaker.java
@@ -138,7 +138,7 @@
         }
 
         public Arguments(String[] argsArray) throws IOException {
-            final LinkedList<String> args = new LinkedList<String>(Arrays.asList(argsArray));
+            final LinkedList<String> args = new LinkedList<>(Arrays.asList(argsArray));
             if (args.isEmpty()) {
                 displayHelp();
             }
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Dicttool.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Dicttool.java
index cacee52..8ae035f 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Dicttool.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Dicttool.java
@@ -29,8 +29,7 @@
         abstract public String getHelp();
         abstract public void run() throws Exception;
     }
-    static HashMap<String, Class<? extends Command>> sCommands =
-            new HashMap<String, Class<? extends Command>>();
+    static HashMap<String, Class<? extends Command>> sCommands = new HashMap<>();
     static {
         CommandList.populate();
     }
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java
index cd3d4d3..94d1ae8 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java
@@ -85,8 +85,7 @@
 
     private static void diffHeaders(final FusionDictionary dict0, final FusionDictionary dict1) {
         boolean hasDifferences = false;
-        final HashMap<String, String> options1 =
-                new HashMap<String, String>(dict1.mOptions.mAttributes);
+        final HashMap<String, String> options1 = new HashMap<>(dict1.mOptions.mAttributes);
         for (final String optionKey : dict0.mOptions.mAttributes.keySet()) {
             if (!dict0.mOptions.mAttributes.get(optionKey).equals(
                     dict1.mOptions.mAttributes.get(optionKey))) {
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Test.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Test.java
index 48817b1..b6383d7 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Test.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Test.java
@@ -19,16 +19,29 @@
 import com.android.inputmethod.latin.makedict.BinaryDictDecoderEncoderTests;
 import com.android.inputmethod.latin.makedict.BinaryDictEncoderFlattenTreeTests;
 import com.android.inputmethod.latin.makedict.FusionDictionaryTest;
+import com.android.inputmethod.latin.utils.FileUtils;
 
+import java.io.File;
+import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.nio.file.Files;
 import java.util.ArrayList;
 
 /**
  * Dicttool command implementing self-tests.
  */
 public class Test extends Dicttool.Command {
+    private static final String getTmpDir() {
+        try {
+            return Files.createTempDirectory("dicttool").toString();
+        } catch (IOException e) {
+            throw new RuntimeException("Can't get temporary directory", e);
+        }
+    }
+    private static final String TEST_TMP_DIR_BASE = getTmpDir();
+    public static final File TEST_TMP_DIR = new File(TEST_TMP_DIR_BASE);
     public static final String COMMAND = "test";
     private static final int DEFAULT_MAX_UNIGRAMS = 1500;
     private long mSeed = System.currentTimeMillis();
@@ -40,8 +53,8 @@
         BinaryDictDecoderEncoderTests.class,
         BinaryDictEncoderFlattenTreeTests.class,
     };
-    private ArrayList<Method> mAllTestMethods = new ArrayList<Method>();
-    private ArrayList<String> mUsedTestMethods = new ArrayList<String>();
+    private ArrayList<Method> mAllTestMethods = new ArrayList<>();
+    private ArrayList<String> mUsedTestMethods = new ArrayList<>();
 
     public Test() {
         for (final Class<?> c : sClassesToTest) {
@@ -56,8 +69,12 @@
 
     @Override
     public String getHelp() {
-        final StringBuilder s = new StringBuilder("test [-s seed] [-m maxUnigrams] [testName...]\n"
-                + "If seed is not specified, the current time is used.\nTest list is:\n");
+        final StringBuilder s = new StringBuilder(
+                "test [-s seed] [-m maxUnigrams] [-n] [testName...]\n"
+                + "If seed is not specified, the current time is used.\n"
+                + "If -n option is provided, do not delete temporary files in "
+                + TEST_TMP_DIR_BASE + "/*.\n"
+                + "Test list is:\n");
         for (final Method m : mAllTestMethods) {
             s.append("  ");
             s.append(m.getName());
@@ -70,17 +87,26 @@
     public void run() throws IllegalAccessException, InstantiationException,
             InvocationTargetException {
         int i = 0;
+        boolean deleteTmpDir = true;
         while (i < mArgs.length) {
             final String arg = mArgs[i++];
             if ("-s".equals(arg)) {
                 mSeed = Long.parseLong(mArgs[i++]);
             } else if ("-m".equals(arg)) {
                 mMaxUnigrams = Integer.parseInt(mArgs[i++]);
+            } else if ("-n".equals(arg)) {
+                deleteTmpDir = false;
             } else {
                 mUsedTestMethods.add(arg);
             }
         }
-        runChosenTests();
+        try {
+            runChosenTests();
+        } finally {
+            if (deleteTmpDir) {
+                FileUtils.deleteRecursively(TEST_TMP_DIR);
+            }
+        }
     }
 
     private void runChosenTests() throws IllegalAccessException, InstantiationException,
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java
index 17e77dc..7435fa7 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java
@@ -115,7 +115,7 @@
                     }
                 }
             } else if (ROOT_TAG.equals(localName)) {
-                final HashMap<String, String> attributes = new HashMap<String, String>();
+                final HashMap<String, String> attributes = new HashMap<>();
                 for (int attrIndex = 0; attrIndex < attrs.getLength(); ++attrIndex) {
                     final String attrName = attrs.getLocalName(attrIndex);
                     attributes.put(attrName, attrs.getValue(attrIndex));
@@ -172,7 +172,7 @@
             DST_ATTRIBUTE = dstAttribute;
             DST_FREQ = dstFreq;
             mSrc = null;
-            mAssocMap = new HashMap<String, ArrayList<WeightedString>>();
+            mAssocMap = new HashMap<>();
         }
 
         @Override
@@ -184,7 +184,7 @@
                 int freq = getValueFromFreqString(attrs.getValue(uri, DST_FREQ));
                 WeightedString bigram = new WeightedString(dst, freq / XML_TO_MEMORY_RATIO);
                 ArrayList<WeightedString> bigramList = mAssocMap.get(mSrc);
-                if (null == bigramList) bigramList = new ArrayList<WeightedString>();
+                if (null == bigramList) bigramList = new ArrayList<>();
                 bigramList.add(bigram);
                 mAssocMap.put(mSrc, bigramList);
             }
@@ -352,7 +352,7 @@
      */
     public static void writeDictionaryXml(Writer destination, FusionDictionary dict)
             throws IOException {
-        final TreeSet<WordProperty> wordPropertiesInDict = new TreeSet<WordProperty>();
+        final TreeSet<WordProperty> wordPropertiesInDict = new TreeSet<>();
         for (WordProperty wordProperty : dict) {
             wordPropertiesInDict.add(wordProperty);
         }
diff --git a/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java b/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
index 4f1273b..fccb654 100644
--- a/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
+++ b/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
@@ -16,12 +16,10 @@
 
 package com.android.inputmethod.latin.dicttool;
 
-import com.android.inputmethod.latin.Dictionary;
 import com.android.inputmethod.latin.makedict.BinaryDictIOUtils;
 import com.android.inputmethod.latin.makedict.DictDecoder;
 import com.android.inputmethod.latin.makedict.DictEncoder;
 import com.android.inputmethod.latin.makedict.DictionaryHeader;
-import com.android.inputmethod.latin.makedict.FormatSpec;
 import com.android.inputmethod.latin.makedict.FormatSpec.DictionaryOptions;
 import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
 import com.android.inputmethod.latin.makedict.FusionDictionary;
@@ -32,8 +30,8 @@
 
 import junit.framework.TestCase;
 
-import java.io.File;
 import java.io.BufferedOutputStream;
+import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
diff --git a/tools/dicttool/tests/com/android/inputmethod/latin/makedict/FusionDictionaryTest.java b/tools/dicttool/tests/com/android/inputmethod/latin/makedict/FusionDictionaryTest.java
index 6e81c3f..71f8ac8 100644
--- a/tools/dicttool/tests/com/android/inputmethod/latin/makedict/FusionDictionaryTest.java
+++ b/tools/dicttool/tests/com/android/inputmethod/latin/makedict/FusionDictionaryTest.java
@@ -32,7 +32,7 @@
  * Unit tests for FusionDictionary.
  */
 public class FusionDictionaryTest extends TestCase {
-    private static final ArrayList<String> sWords = new ArrayList<String>();
+    private static final ArrayList<String> sWords = new ArrayList<>();
     private static final int MAX_UNIGRAMS = 1000;
 
     private void prepare(final long seed) {
diff --git a/tools/make-keyboard-text/res/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl b/tools/make-keyboard-text/res/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl
index 2b5494f..6a7469c 100644
--- a/tools/make-keyboard-text/res/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl
+++ b/tools/make-keyboard-text/res/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl
@@ -16,8 +16,6 @@
 
 package com.android.inputmethod.keyboard.internal;
 
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
 import java.util.HashMap;
 import java.util.Locale;
 
@@ -44,14 +42,12 @@
  */
 public final class KeyboardTextsTable {
     // Name to index map.
-    private static final HashMap<String, Integer> sNameToIndexesMap = CollectionUtils.newHashMap();
+    private static final HashMap<String, Integer> sNameToIndexesMap = new HashMap<>();
     // Locale to texts table map.
-    private static final HashMap<String, String[]> sLocaleToTextsTableMap =
-            CollectionUtils.newHashMap();
+    private static final HashMap<String, String[]> sLocaleToTextsTableMap = new HashMap<>();
     // TODO: Remove this variable after debugging.
     // Texts table to locale maps.
-    private static final HashMap<String[], String> sTextsTableToLocaleMap =
-            CollectionUtils.newHashMap();
+    private static final HashMap<String[], String> sTextsTableToLocaleMap = new HashMap<>();
 
     public static String getText(final String name, final String[] textsTable) {
         final Integer indexObj = sNameToIndexesMap.get(name);
diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/JarUtils.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/JarUtils.java
index c947a63..abb3339 100644
--- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/JarUtils.java
+++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/JarUtils.java
@@ -61,7 +61,7 @@
     }
 
     public static ArrayList<String> getEntryNameListing(final JarFile jar, final JarFilter filter) {
-        final ArrayList<String> result = new ArrayList<String>();
+        final ArrayList<String> result = new ArrayList<>();
         final Enumeration<JarEntry> entries = jar.entries();
         while (entries.hasMoreElements()) {
             final JarEntry entry = entries.nextElement();
diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/LocaleUtils.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/LocaleUtils.java
index 0dfa376..c1a7ec5 100644
--- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/LocaleUtils.java
+++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/LocaleUtils.java
@@ -35,7 +35,7 @@
         // Intentional empty constructor for utility class.
     }
 
-    private static final HashMap<String, Locale> sLocaleCache = new HashMap<String, Locale>();
+    private static final HashMap<String, Locale> sLocaleCache = new HashMap<>();
 
     private static final int INDEX_LANGUAGE = 0;
     private static final int INDEX_SCRIPT = 1;
diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MakeKeyboardText.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MakeKeyboardText.java
index 36a03f8..6c15ce6 100644
--- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MakeKeyboardText.java
+++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MakeKeyboardText.java
@@ -36,7 +36,7 @@
         }
 
         public Options(final String[] argsArray) {
-            final LinkedList<String> args = new LinkedList<String>(Arrays.asList(argsArray));
+            final LinkedList<String> args = new LinkedList<>(Arrays.asList(argsArray));
             String arg = null;
             String java = null;
             try {
diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java
index c8cb4ac..563acc5 100644
--- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java
+++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java
@@ -43,12 +43,11 @@
     private final JarFile mJar;
     // String resources maps sorted by its language. The language is determined from the jar entry
     // name by calling {@link JarUtils#getLocaleFromEntryName(String)}.
-    private final TreeMap<String, StringResourceMap> mResourcesMap =
-            new TreeMap<String, StringResourceMap>();
+    private final TreeMap<String, StringResourceMap> mResourcesMap = new TreeMap<>();
     // Default string resources map.
     private final StringResourceMap mDefaultResourceMap;
     // Histogram of string resource names. This is used to sort {@link #mSortedResourceNames}.
-    private final HashMap<String, Integer> mNameHistogram = new HashMap<String, Integer>();
+    private final HashMap<String, Integer> mNameHistogram = new HashMap<>();
     // Sorted string resource names array; Descending order of histogram count.
     // The string resource name is specified as an attribute "name" in string resource files.
     // The string resource can be accessed by specifying name "!text/<name>"
@@ -68,7 +67,7 @@
 
         // Initialize name histogram and names list.
         final HashMap<String, Integer> nameHistogram = mNameHistogram;
-        final ArrayList<String> resourceNamesList = new ArrayList<String>();
+        final ArrayList<String> resourceNamesList = new ArrayList<>();
         for (final StringResource res : mDefaultResourceMap.getResources()) {
             nameHistogram.put(res.mName, 0); // Initialize histogram value.
             resourceNamesList.add(res.mName);
diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java
index 6a79268..cf44f2c 100644
--- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java
+++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java
@@ -73,7 +73,7 @@
         }
 
         mResources = Collections.unmodifiableList(handler.mResources);
-        final HashMap<String,StringResource> map = new HashMap<String,StringResource>();
+        final HashMap<String, StringResource> map = new HashMap<>();
         for (final StringResource res : mResources) {
             map.put(res.mName, res);
         }
@@ -105,7 +105,7 @@
         private static final String TAG_STRING = "string";
         private static final String ATTR_NAME = "name";
 
-        final ArrayList<StringResource> mResources = new ArrayList<StringResource>();
+        final ArrayList<StringResource> mResources = new ArrayList<>();
 
         private String mName;
         private final StringBuilder mValue = new StringBuilder();