From 71e6b63158639807bd752408a3a6d11bc38389a3 Mon Sep 17 00:00:00 2001 From: Naveen Date: Sat, 30 Jul 2022 21:28:01 +0530 Subject: [PATCH 01/35] Add emoji key --- .../keyboard/helpers/MyKeyboard.kt | 6 +- .../res/xml/keys_letters_english_dvorak.xml | 7 +- .../res/xml/keys_letters_english_qwerty.xml | 7 +- .../res/xml/keys_letters_english_qwertz.xml | 7 +- app/src/main/res/xml/keys_letters_french.xml | 7 +- app/src/main/res/xml/keys_letters_german.xml | 7 +- .../main/res/xml/keys_letters_romanian.xml | 7 +- app/src/main/res/xml/keys_letters_russian.xml | 7 +- .../main/res/xml/keys_letters_slovenian.xml | 7 +- .../res/xml/keys_letters_spanish_qwerty.xml | 73 ++++++++++--------- 10 files changed, 90 insertions(+), 45 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt index 42cfb9e..777d35f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt @@ -12,7 +12,6 @@ import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo.IME_ACTION_NONE import androidx.annotation.XmlRes import com.simplemobiletools.keyboard.R -import java.util.* /** * Loads an XML description of a keyboard and stores the attributes of the keys. A keyboard consists of rows of keys. @@ -61,6 +60,7 @@ class MyKeyboard { const val KEYCODE_ENTER = -4 const val KEYCODE_DELETE = -5 const val KEYCODE_SPACE = 32 + const val KEYCODE_EMOJI = -6 fun getDimensionOrFraction(a: TypedArray, index: Int, base: Int, defValue: Int): Int { val value = a.peekValue(index) ?: return defValue @@ -203,7 +203,7 @@ class MyKeyboard { topSmallNumber = a.getString(R.styleable.MyKeyboard_Key_topSmallNumber) ?: "" if (label.isNotEmpty() && code != KEYCODE_MODE_CHANGE && code != KEYCODE_SHIFT) { - code = label[0].toInt() + code = label[0].code } a.recycle() } @@ -281,7 +281,7 @@ class MyKeyboard { key.x = x key.y = y key.label = character.toString() - key.code = character.toInt() + key.code = character.code column++ x += key.width + key.gap mKeys!!.add(key) diff --git a/app/src/main/res/xml/keys_letters_english_dvorak.xml b/app/src/main/res/xml/keys_letters_english_dvorak.xml index 3da740e..f23a93f 100644 --- a/app/src/main/res/xml/keys_letters_english_dvorak.xml +++ b/app/src/main/res/xml/keys_letters_english_dvorak.xml @@ -122,10 +122,15 @@ + + app:keyWidth="40%p" /> + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_english_qwertz.xml b/app/src/main/res/xml/keys_letters_english_qwertz.xml index 60cc165..c1ea8f4 100644 --- a/app/src/main/res/xml/keys_letters_english_qwertz.xml +++ b/app/src/main/res/xml/keys_letters_english_qwertz.xml @@ -121,10 +121,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_french.xml b/app/src/main/res/xml/keys_letters_french.xml index 94fc391..9f532f3 100644 --- a/app/src/main/res/xml/keys_letters_french.xml +++ b/app/src/main/res/xml/keys_letters_french.xml @@ -102,10 +102,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_german.xml b/app/src/main/res/xml/keys_letters_german.xml index a55ec3f..0c1cd9c 100644 --- a/app/src/main/res/xml/keys_letters_german.xml +++ b/app/src/main/res/xml/keys_letters_german.xml @@ -121,10 +121,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_romanian.xml b/app/src/main/res/xml/keys_letters_romanian.xml index cfb7e81..5a27c75 100644 --- a/app/src/main/res/xml/keys_letters_romanian.xml +++ b/app/src/main/res/xml/keys_letters_romanian.xml @@ -105,10 +105,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_russian.xml b/app/src/main/res/xml/keys_letters_russian.xml index 55514b3..ea8c795 100644 --- a/app/src/main/res/xml/keys_letters_russian.xml +++ b/app/src/main/res/xml/keys_letters_russian.xml @@ -155,10 +155,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_slovenian.xml b/app/src/main/res/xml/keys_letters_slovenian.xml index 6bc4da3..0f4a798 100644 --- a/app/src/main/res/xml/keys_letters_slovenian.xml +++ b/app/src/main/res/xml/keys_letters_slovenian.xml @@ -108,10 +108,15 @@ + + app:keyWidth="40%p" /> diff --git a/app/src/main/res/xml/keys_letters_spanish_qwerty.xml b/app/src/main/res/xml/keys_letters_spanish_qwerty.xml index b4148b8..f839cad 100644 --- a/app/src/main/res/xml/keys_letters_spanish_qwerty.xml +++ b/app/src/main/res/xml/keys_letters_spanish_qwerty.xml @@ -6,130 +6,135 @@ app:keyLabel="q" app:popupCharacters="1" app:popupKeyboard="@xml/keyboard_popup_template" - app:topSmallNumber="1"/> + app:topSmallNumber="1" /> + app:topSmallNumber="2" /> + app:topSmallNumber="3" /> + app:topSmallNumber="4" /> + app:topSmallNumber="5" /> + app:topSmallNumber="6" /> + app:topSmallNumber="7" /> + app:topSmallNumber="8" /> + app:topSmallNumber="9" /> + app:topSmallNumber="0" /> + app:popupKeyboard="@xml/keyboard_popup_template" /> + app:popupKeyboard="@xml/keyboard_popup_template" /> - - - - - + app:popupKeyboard="@xml/keyboard_popup_template" /> + + + + + + app:popupKeyboard="@xml/keyboard_popup_template" /> + app:keyLabel="ñ" /> + app:keyWidth="15%p" /> - + app:popupKeyboard="@xml/keyboard_popup_template" /> + - - + app:popupKeyboard="@xml/keyboard_popup_template" /> + + - + app:popupKeyboard="@xml/keyboard_popup_template" /> + + app:keyWidth="15%p" /> + app:keyWidth="15%p" /> + app:keyWidth="10%p" /> + + app:keyWidth="40%p" /> + app:keyWidth="10%p" /> + app:keyWidth="15%p" /> From 45e41471e27fdb7365276113180ff9f7e4924690 Mon Sep 17 00:00:00 2001 From: Naveen Date: Sat, 30 Jul 2022 21:29:18 +0530 Subject: [PATCH 02/35] Add emoji palette --- app/src/main/assets/media/emoji_spec.txt | 3642 +++++++++++++++++ .../keyboard/adapters/EmojisAdapter.kt | 50 + .../keyboard/extensions/View.kt | 19 + .../keyboard/helpers/Constants.kt | 3 + .../keyboard/media/emoji/Emoji.kt | 8 + .../keyboard/media/emoji/EmojiData.kt | 63 + .../keyboard/services/SimpleKeyboardIME.kt | 7 +- .../keyboard/views/AutoGridLayoutManager.kt | 36 + .../keyboard/views/MyKeyboardView.kt | 112 +- .../res/drawable/ic_clear_outline_vector.xml | 10 + .../ic_emoji_emotions_outline_vector.xml | 18 + .../drawable/ripple_all_corners_medium.xml | 10 + app/src/main/res/layout/item_emoji.xml | 11 + .../res/layout/keyboard_view_keyboard.xml | 94 + app/src/main/res/values-ar/strings.xml | 5 +- app/src/main/res/values-az/strings.xml | 3 + app/src/main/res/values-be/strings.xml | 3 + app/src/main/res/values-bg/strings.xml | 5 +- app/src/main/res/values-ca/strings.xml | 3 + app/src/main/res/values-cs/strings.xml | 5 +- app/src/main/res/values-da/strings.xml | 3 + app/src/main/res/values-de/strings.xml | 3 + app/src/main/res/values-el/strings.xml | 5 +- app/src/main/res/values-eo/strings.xml | 3 + app/src/main/res/values-es/strings.xml | 3 + app/src/main/res/values-et/strings.xml | 3 + app/src/main/res/values-fi/strings.xml | 3 + app/src/main/res/values-fr/strings.xml | 3 + app/src/main/res/values-gl/strings.xml | 3 + app/src/main/res/values-hr/strings.xml | 3 + app/src/main/res/values-hu/strings.xml | 3 + app/src/main/res/values-in/strings.xml | 3 + app/src/main/res/values-it/strings.xml | 3 + app/src/main/res/values-iw/strings.xml | 3 + app/src/main/res/values-ja/strings.xml | 3 + app/src/main/res/values-lt/strings.xml | 3 + app/src/main/res/values-nb-rNO/strings.xml | 3 + app/src/main/res/values-nl/strings.xml | 3 + app/src/main/res/values-pl/strings.xml | 3 + app/src/main/res/values-pt-rBR/strings.xml | 3 + app/src/main/res/values-pt/strings.xml | 3 + app/src/main/res/values-ro/strings.xml | 5 +- app/src/main/res/values-ru/strings.xml | 3 + app/src/main/res/values-sk/strings.xml | 3 + app/src/main/res/values-sv/strings.xml | 3 + app/src/main/res/values-th/strings.xml | 3 + app/src/main/res/values-tr/strings.xml | 3 + app/src/main/res/values-uk/strings.xml | 3 + app/src/main/res/values-zh-rCN/strings.xml | 3 + app/src/main/res/values-zh-rTW/strings.xml | 3 + app/src/main/res/values/dimens.xml | 3 + app/src/main/res/values/strings.xml | 3 + 52 files changed, 4193 insertions(+), 14 deletions(-) create mode 100644 app/src/main/assets/media/emoji_spec.txt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/extensions/View.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/Emoji.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/EmojiData.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/keyboard/views/AutoGridLayoutManager.kt create mode 100644 app/src/main/res/drawable/ic_clear_outline_vector.xml create mode 100644 app/src/main/res/drawable/ic_emoji_emotions_outline_vector.xml create mode 100644 app/src/main/res/drawable/ripple_all_corners_medium.xml create mode 100644 app/src/main/res/layout/item_emoji.xml diff --git a/app/src/main/assets/media/emoji_spec.txt b/app/src/main/assets/media/emoji_spec.txt new file mode 100644 index 0000000..80200c8 --- /dev/null +++ b/app/src/main/assets/media/emoji_spec.txt @@ -0,0 +1,3642 @@ +[smileys_emotion] +😀;; +😃;; +😄;; +😁;; +😆;; +😅;; +🤣;; +😂;; +🙂;; +🙃;; +🫠;; +😉;; +😊;; +😇;; +🥰;; +😍;; +🤩;; +😘;; +😗;; +☺️;; +😚;; +😙;; +🥲;; +😋;; +😛;; +😜;; +🤪;; +😝;; +🤑;; +🤗;; +🤭;; +🫢;; +🫣;; +🤫;; +🤔;; +🫡;; +🤐;; +🤨;; +😐;; +😑;; +😶;; +🫥;; +😶‍🌫️;; +😏;; +😒;; +🙄;; +😬;; +😮‍💨;; +🤥;; +😌;; +😔;; +😪;; +🤤;; +😴;; +😷;; +🤒;; +🤕;; +🤢;; +🤮;; +🤧;; +🥵;; +🥶;; +🥴;; +😵;; +😵‍💫;; +🤯;; +🤠;; +🥳;; +🥸;; +😎;; +🤓;; +🧐;; +😕;; +🫤;; +😟;; +🙁;; +☹️;; +😮;; +😯;; +😲;; +😳;; +🥺;; +🥹;; +😦;; +😧;; +😨;; +😰;; +😥;; +😢;; +😭;; +😱;; +😖;; +😣;; +😞;; +😓;; +😩;; +😫;; +🥱;; +😤;; +😡;; +😠;; +🤬;; +😈;; +👿;; +💀;; +☠️;; +💩;; +🤡;; +👹;; +👺;; +👻;; +👽;; +👾;; +🤖;; +😺;; +😸;; +😹;; +😻;; +😼;; +😽;; +🙀;; +😿;; +😾;; +🙈;; +🙉;; +🙊;; +💋;; +💌;; +💘;; +💝;; +💖;; +💗;; +💓;; +💞;; +💕;; +💟;; +❣️;; +💔;; +❤️‍🔥;; +❤️‍🩹;; +❤️;; +🧡;; +💛;; +💚;; +💙;; +💜;; +🤎;; +🖤;; +🤍;; +💯;; +💢;; +💥;; +💫;; +💦;; +💨;; +🕳️;; +💣;; +💬;; +👁️‍🗨️;; +🗨️;; +🗯️;; +💭;; +💤;; + +[people_body] +👋;; + 👋🏻;; + 👋🏼;; + 👋🏽;; + 👋🏾;; + 👋🏿;; +🤚;; + 🤚🏻;; + 🤚🏼;; + 🤚🏽;; + 🤚🏾;; + 🤚🏿;; +🖐️;; + 🖐🏻;; + 🖐🏼;; + 🖐🏽;; + 🖐🏾;; + 🖐🏿;; +✋;; + ✋🏻;; + ✋🏼;; + ✋🏽;; + ✋🏾;; + ✋🏿;; +🖖;; + 🖖🏻;; + 🖖🏼;; + 🖖🏽;; + 🖖🏾;; + 🖖🏿;; +🫱;; + 🫱🏻;; + 🫱🏼;; + 🫱🏽;; + 🫱🏾;; + 🫱🏿;; +🫲;; + 🫲🏻;; + 🫲🏼;; + 🫲🏽;; + 🫲🏾;; + 🫲🏿;; +🫳;; + 🫳🏻;; + 🫳🏼;; + 🫳🏽;; + 🫳🏾;; + 🫳🏿;; +🫴;; + 🫴🏻;; + 🫴🏼;; + 🫴🏽;; + 🫴🏾;; + 🫴🏿;; +👌;; + 👌🏻;; + 👌🏼;; + 👌🏽;; + 👌🏾;; + 👌🏿;; +🤌;; + 🤌🏻;; + 🤌🏼;; + 🤌🏽;; + 🤌🏾;; + 🤌🏿;; +🤏;; + 🤏🏻;; + 🤏🏼;; + 🤏🏽;; + 🤏🏾;; + 🤏🏿;; +✌️;; + ✌🏻;; + ✌🏼;; + ✌🏽;; + ✌🏾;; + ✌🏿;; +🤞;; + 🤞🏻;; + 🤞🏼;; + 🤞🏽;; + 🤞🏾;; + 🤞🏿;; +🫰;; + 🫰🏻;; + 🫰🏼;; + 🫰🏽;; + 🫰🏾;; + 🫰🏿;; +🤟;; + 🤟🏻;; + 🤟🏼;; + 🤟🏽;; + 🤟🏾;; + 🤟🏿;; +🤘;; + 🤘🏻;; + 🤘🏼;; + 🤘🏽;; + 🤘🏾;; + 🤘🏿;; +🤙;; + 🤙🏻;; + 🤙🏼;; + 🤙🏽;; + 🤙🏾;; + 🤙🏿;; +👈;; + 👈🏻;; + 👈🏼;; + 👈🏽;; + 👈🏾;; + 👈🏿;; +👉;; + 👉🏻;; + 👉🏼;; + 👉🏽;; + 👉🏾;; + 👉🏿;; +👆;; + 👆🏻;; + 👆🏼;; + 👆🏽;; + 👆🏾;; + 👆🏿;; +🖕;; + 🖕🏻;; + 🖕🏼;; + 🖕🏽;; + 🖕🏾;; + 🖕🏿;; +👇;; + 👇🏻;; + 👇🏼;; + 👇🏽;; + 👇🏾;; + 👇🏿;; +☝️;; + ☝🏻;; + ☝🏼;; + ☝🏽;; + ☝🏾;; + ☝🏿;; +🫵;; + 🫵🏻;; + 🫵🏼;; + 🫵🏽;; + 🫵🏾;; + 🫵🏿;; +👍;; + 👍🏻;; + 👍🏼;; + 👍🏽;; + 👍🏾;; + 👍🏿;; +👎;; + 👎🏻;; + 👎🏼;; + 👎🏽;; + 👎🏾;; + 👎🏿;; +✊;; + ✊🏻;; + ✊🏼;; + ✊🏽;; + ✊🏾;; + ✊🏿;; +👊;; + 👊🏻;; + 👊🏼;; + 👊🏽;; + 👊🏾;; + 👊🏿;; +🤛;; + 🤛🏻;; + 🤛🏼;; + 🤛🏽;; + 🤛🏾;; + 🤛🏿;; +🤜;; + 🤜🏻;; + 🤜🏼;; + 🤜🏽;; + 🤜🏾;; + 🤜🏿;; +👏;; + 👏🏻;; + 👏🏼;; + 👏🏽;; + 👏🏾;; + 👏🏿;; +🙌;; + 🙌🏻;; + 🙌🏼;; + 🙌🏽;; + 🙌🏾;; + 🙌🏿;; +🫶;; + 🫶🏻;; + 🫶🏼;; + 🫶🏽;; + 🫶🏾;; + 🫶🏿;; +👐;; + 👐🏻;; + 👐🏼;; + 👐🏽;; + 👐🏾;; + 👐🏿;; +🤲;; + 🤲🏻;; + 🤲🏼;; + 🤲🏽;; + 🤲🏾;; + 🤲🏿;; +🤝;; + 🤝🏻;; + 🤝🏼;; + 🤝🏽;; + 🤝🏾;; + 🤝🏿;; + 🫱🏻‍🫲🏼;; + 🫱🏻‍🫲🏽;; + 🫱🏻‍🫲🏾;; + 🫱🏻‍🫲🏿;; + 🫱🏼‍🫲🏻;; + 🫱🏼‍🫲🏽;; + 🫱🏼‍🫲🏾;; + 🫱🏼‍🫲🏿;; + 🫱🏽‍🫲🏻;; + 🫱🏽‍🫲🏼;; + 🫱🏽‍🫲🏾;; + 🫱🏽‍🫲🏿;; + 🫱🏾‍🫲🏻;; + 🫱🏾‍🫲🏼;; + 🫱🏾‍🫲🏽;; + 🫱🏾‍🫲🏿;; + 🫱🏿‍🫲🏻;; + 🫱🏿‍🫲🏼;; + 🫱🏿‍🫲🏽;; + 🫱🏿‍🫲🏾;; +🙏;; + 🙏🏻;; + 🙏🏼;; + 🙏🏽;; + 🙏🏾;; + 🙏🏿;; +✍️;; + ✍🏻;; + ✍🏼;; + ✍🏽;; + ✍🏾;; + ✍🏿;; +💅;; + 💅🏻;; + 💅🏼;; + 💅🏽;; + 💅🏾;; + 💅🏿;; +🤳;; + 🤳🏻;; + 🤳🏼;; + 🤳🏽;; + 🤳🏾;; + 🤳🏿;; +💪;; + 💪🏻;; + 💪🏼;; + 💪🏽;; + 💪🏾;; + 💪🏿;; +🦾;; +🦿;; +🦵;; + 🦵🏻;; + 🦵🏼;; + 🦵🏽;; + 🦵🏾;; + 🦵🏿;; +🦶;; + 🦶🏻;; + 🦶🏼;; + 🦶🏽;; + 🦶🏾;; + 🦶🏿;; +👂;; + 👂🏻;; + 👂🏼;; + 👂🏽;; + 👂🏾;; + 👂🏿;; +🦻;; + 🦻🏻;; + 🦻🏼;; + 🦻🏽;; + 🦻🏾;; + 🦻🏿;; +👃;; + 👃🏻;; + 👃🏼;; + 👃🏽;; + 👃🏾;; + 👃🏿;; +🧠;; +🫀;; +🫁;; +🦷;; +🦴;; +👀;; +👁️;; +👅;; +👄;; +🫦;; +👶;; + 👶🏻;; + 👶🏼;; + 👶🏽;; + 👶🏾;; + 👶🏿;; +🧒;; + 🧒🏻;; + 🧒🏼;; + 🧒🏽;; + 🧒🏾;; + 🧒🏿;; +👦;; + 👦🏻;; + 👦🏼;; + 👦🏽;; + 👦🏾;; + 👦🏿;; +👧;; + 👧🏻;; + 👧🏼;; + 👧🏽;; + 👧🏾;; + 👧🏿;; +🧑;; + 🧑🏻;; + 🧑🏼;; + 🧑🏽;; + 🧑🏾;; + 🧑🏿;; +👱;; + 👱🏻;; + 👱🏼;; + 👱🏽;; + 👱🏾;; + 👱🏿;; +👨;; + 👨🏻;; + 👨🏼;; + 👨🏽;; + 👨🏾;; + 👨🏿;; +🧔;; + 🧔🏻;; + 🧔🏼;; + 🧔🏽;; + 🧔🏾;; + 🧔🏿;; +🧔‍♂️;; + 🧔🏻‍♂️;; + 🧔🏼‍♂️;; + 🧔🏽‍♂️;; + 🧔🏾‍♂️;; + 🧔🏿‍♂️;; +🧔‍♀️;; + 🧔🏻‍♀️;; + 🧔🏼‍♀️;; + 🧔🏽‍♀️;; + 🧔🏾‍♀️;; + 🧔🏿‍♀️;; +👨‍🦰;; + 👨🏻‍🦰;; + 👨🏼‍🦰;; + 👨🏽‍🦰;; + 👨🏾‍🦰;; + 👨🏿‍🦰;; +👨‍🦱;; + 👨🏻‍🦱;; + 👨🏼‍🦱;; + 👨🏽‍🦱;; + 👨🏾‍🦱;; + 👨🏿‍🦱;; +👨‍🦳;; + 👨🏻‍🦳;; + 👨🏼‍🦳;; + 👨🏽‍🦳;; + 👨🏾‍🦳;; + 👨🏿‍🦳;; +👨‍🦲;; + 👨🏻‍🦲;; + 👨🏼‍🦲;; + 👨🏽‍🦲;; + 👨🏾‍🦲;; + 👨🏿‍🦲;; +👩;; + 👩🏻;; + 👩🏼;; + 👩🏽;; + 👩🏾;; + 👩🏿;; +👩‍🦰;; + 👩🏻‍🦰;; + 👩🏼‍🦰;; + 👩🏽‍🦰;; + 👩🏾‍🦰;; + 👩🏿‍🦰;; +🧑‍🦰;; + 🧑🏻‍🦰;; + 🧑🏼‍🦰;; + 🧑🏽‍🦰;; + 🧑🏾‍🦰;; + 🧑🏿‍🦰;; +👩‍🦱;; + 👩🏻‍🦱;; + 👩🏼‍🦱;; + 👩🏽‍🦱;; + 👩🏾‍🦱;; + 👩🏿‍🦱;; +🧑‍🦱;; + 🧑🏻‍🦱;; + 🧑🏼‍🦱;; + 🧑🏽‍🦱;; + 🧑🏾‍🦱;; + 🧑🏿‍🦱;; +👩‍🦳;; + 👩🏻‍🦳;; + 👩🏼‍🦳;; + 👩🏽‍🦳;; + 👩🏾‍🦳;; + 👩🏿‍🦳;; +🧑‍🦳;; + 🧑🏻‍🦳;; + 🧑🏼‍🦳;; + 🧑🏽‍🦳;; + 🧑🏾‍🦳;; + 🧑🏿‍🦳;; +👩‍🦲;; + 👩🏻‍🦲;; + 👩🏼‍🦲;; + 👩🏽‍🦲;; + 👩🏾‍🦲;; + 👩🏿‍🦲;; +🧑‍🦲;; + 🧑🏻‍🦲;; + 🧑🏼‍🦲;; + 🧑🏽‍🦲;; + 🧑🏾‍🦲;; + 🧑🏿‍🦲;; +👱‍♀️;; + 👱🏻‍♀️;; + 👱🏼‍♀️;; + 👱🏽‍♀️;; + 👱🏾‍♀️;; + 👱🏿‍♀️;; +👱‍♂️;; + 👱🏻‍♂️;; + 👱🏼‍♂️;; + 👱🏽‍♂️;; + 👱🏾‍♂️;; + 👱🏿‍♂️;; +🧓;; + 🧓🏻;; + 🧓🏼;; + 🧓🏽;; + 🧓🏾;; + 🧓🏿;; +👴;; + 👴🏻;; + 👴🏼;; + 👴🏽;; + 👴🏾;; + 👴🏿;; +👵;; + 👵🏻;; + 👵🏼;; + 👵🏽;; + 👵🏾;; + 👵🏿;; +🙍;; + 🙍🏻;; + 🙍🏼;; + 🙍🏽;; + 🙍🏾;; + 🙍🏿;; +🙍‍♂️;; + 🙍🏻‍♂️;; + 🙍🏼‍♂️;; + 🙍🏽‍♂️;; + 🙍🏾‍♂️;; + 🙍🏿‍♂️;; +🙍‍♀️;; + 🙍🏻‍♀️;; + 🙍🏼‍♀️;; + 🙍🏽‍♀️;; + 🙍🏾‍♀️;; + 🙍🏿‍♀️;; +🙎;; + 🙎🏻;; + 🙎🏼;; + 🙎🏽;; + 🙎🏾;; + 🙎🏿;; +🙎‍♂️;; + 🙎🏻‍♂️;; + 🙎🏼‍♂️;; + 🙎🏽‍♂️;; + 🙎🏾‍♂️;; + 🙎🏿‍♂️;; +🙎‍♀️;; + 🙎🏻‍♀️;; + 🙎🏼‍♀️;; + 🙎🏽‍♀️;; + 🙎🏾‍♀️;; + 🙎🏿‍♀️;; +🙅;; + 🙅🏻;; + 🙅🏼;; + 🙅🏽;; + 🙅🏾;; + 🙅🏿;; +🙅‍♂️;; + 🙅🏻‍♂️;; + 🙅🏼‍♂️;; + 🙅🏽‍♂️;; + 🙅🏾‍♂️;; + 🙅🏿‍♂️;; +🙅‍♀️;; + 🙅🏻‍♀️;; + 🙅🏼‍♀️;; + 🙅🏽‍♀️;; + 🙅🏾‍♀️;; + 🙅🏿‍♀️;; +🙆;; + 🙆🏻;; + 🙆🏼;; + 🙆🏽;; + 🙆🏾;; + 🙆🏿;; +🙆‍♂️;; + 🙆🏻‍♂️;; + 🙆🏼‍♂️;; + 🙆🏽‍♂️;; + 🙆🏾‍♂️;; + 🙆🏿‍♂️;; +🙆‍♀️;; + 🙆🏻‍♀️;; + 🙆🏼‍♀️;; + 🙆🏽‍♀️;; + 🙆🏾‍♀️;; + 🙆🏿‍♀️;; +💁;; + 💁🏻;; + 💁🏼;; + 💁🏽;; + 💁🏾;; + 💁🏿;; +💁‍♂️;; + 💁🏻‍♂️;; + 💁🏼‍♂️;; + 💁🏽‍♂️;; + 💁🏾‍♂️;; + 💁🏿‍♂️;; +💁‍♀️;; + 💁🏻‍♀️;; + 💁🏼‍♀️;; + 💁🏽‍♀️;; + 💁🏾‍♀️;; + 💁🏿‍♀️;; +🙋;; + 🙋🏻;; + 🙋🏼;; + 🙋🏽;; + 🙋🏾;; + 🙋🏿;; +🙋‍♂️;; + 🙋🏻‍♂️;; + 🙋🏼‍♂️;; + 🙋🏽‍♂️;; + 🙋🏾‍♂️;; + 🙋🏿‍♂️;; +🙋‍♀️;; + 🙋🏻‍♀️;; + 🙋🏼‍♀️;; + 🙋🏽‍♀️;; + 🙋🏾‍♀️;; + 🙋🏿‍♀️;; +🧏;; + 🧏🏻;; + 🧏🏼;; + 🧏🏽;; + 🧏🏾;; + 🧏🏿;; +🧏‍♂️;; + 🧏🏻‍♂️;; + 🧏🏼‍♂️;; + 🧏🏽‍♂️;; + 🧏🏾‍♂️;; + 🧏🏿‍♂️;; +🧏‍♀️;; + 🧏🏻‍♀️;; + 🧏🏼‍♀️;; + 🧏🏽‍♀️;; + 🧏🏾‍♀️;; + 🧏🏿‍♀️;; +🙇;; + 🙇🏻;; + 🙇🏼;; + 🙇🏽;; + 🙇🏾;; + 🙇🏿;; +🙇‍♂️;; + 🙇🏻‍♂️;; + 🙇🏼‍♂️;; + 🙇🏽‍♂️;; + 🙇🏾‍♂️;; + 🙇🏿‍♂️;; +🙇‍♀️;; + 🙇🏻‍♀️;; + 🙇🏼‍♀️;; + 🙇🏽‍♀️;; + 🙇🏾‍♀️;; + 🙇🏿‍♀️;; +🤦;; + 🤦🏻;; + 🤦🏼;; + 🤦🏽;; + 🤦🏾;; + 🤦🏿;; +🤦‍♂️;; + 🤦🏻‍♂️;; + 🤦🏼‍♂️;; + 🤦🏽‍♂️;; + 🤦🏾‍♂️;; + 🤦🏿‍♂️;; +🤦‍♀️;; + 🤦🏻‍♀️;; + 🤦🏼‍♀️;; + 🤦🏽‍♀️;; + 🤦🏾‍♀️;; + 🤦🏿‍♀️;; +🤷;; + 🤷🏻;; + 🤷🏼;; + 🤷🏽;; + 🤷🏾;; + 🤷🏿;; +🤷‍♂️;; + 🤷🏻‍♂️;; + 🤷🏼‍♂️;; + 🤷🏽‍♂️;; + 🤷🏾‍♂️;; + 🤷🏿‍♂️;; +🤷‍♀️;; + 🤷🏻‍♀️;; + 🤷🏼‍♀️;; + 🤷🏽‍♀️;; + 🤷🏾‍♀️;; + 🤷🏿‍♀️;; +🧑‍⚕️;; + 🧑🏻‍⚕️;; + 🧑🏼‍⚕️;; + 🧑🏽‍⚕️;; + 🧑🏾‍⚕️;; + 🧑🏿‍⚕️;; +👨‍⚕️;; + 👨🏻‍⚕️;; + 👨🏼‍⚕️;; + 👨🏽‍⚕️;; + 👨🏾‍⚕️;; + 👨🏿‍⚕️;; +👩‍⚕️;; + 👩🏻‍⚕️;; + 👩🏼‍⚕️;; + 👩🏽‍⚕️;; + 👩🏾‍⚕️;; + 👩🏿‍⚕️;; +🧑‍🎓;; + 🧑🏻‍🎓;; + 🧑🏼‍🎓;; + 🧑🏽‍🎓;; + 🧑🏾‍🎓;; + 🧑🏿‍🎓;; +👨‍🎓;; + 👨🏻‍🎓;; + 👨🏼‍🎓;; + 👨🏽‍🎓;; + 👨🏾‍🎓;; + 👨🏿‍🎓;; +👩‍🎓;; + 👩🏻‍🎓;; + 👩🏼‍🎓;; + 👩🏽‍🎓;; + 👩🏾‍🎓;; + 👩🏿‍🎓;; +🧑‍🏫;; + 🧑🏻‍🏫;; + 🧑🏼‍🏫;; + 🧑🏽‍🏫;; + 🧑🏾‍🏫;; + 🧑🏿‍🏫;; +👨‍🏫;; + 👨🏻‍🏫;; + 👨🏼‍🏫;; + 👨🏽‍🏫;; + 👨🏾‍🏫;; + 👨🏿‍🏫;; +👩‍🏫;; + 👩🏻‍🏫;; + 👩🏼‍🏫;; + 👩🏽‍🏫;; + 👩🏾‍🏫;; + 👩🏿‍🏫;; +🧑‍⚖️;; + 🧑🏻‍⚖️;; + 🧑🏼‍⚖️;; + 🧑🏽‍⚖️;; + 🧑🏾‍⚖️;; + 🧑🏿‍⚖️;; +👨‍⚖️;; + 👨🏻‍⚖️;; + 👨🏼‍⚖️;; + 👨🏽‍⚖️;; + 👨🏾‍⚖️;; + 👨🏿‍⚖️;; +👩‍⚖️;; + 👩🏻‍⚖️;; + 👩🏼‍⚖️;; + 👩🏽‍⚖️;; + 👩🏾‍⚖️;; + 👩🏿‍⚖️;; +🧑‍🌾;; + 🧑🏻‍🌾;; + 🧑🏼‍🌾;; + 🧑🏽‍🌾;; + 🧑🏾‍🌾;; + 🧑🏿‍🌾;; +👨‍🌾;; + 👨🏻‍🌾;; + 👨🏼‍🌾;; + 👨🏽‍🌾;; + 👨🏾‍🌾;; + 👨🏿‍🌾;; +👩‍🌾;; + 👩🏻‍🌾;; + 👩🏼‍🌾;; + 👩🏽‍🌾;; + 👩🏾‍🌾;; + 👩🏿‍🌾;; +🧑‍🍳;; + 🧑🏻‍🍳;; + 🧑🏼‍🍳;; + 🧑🏽‍🍳;; + 🧑🏾‍🍳;; + 🧑🏿‍🍳;; +👨‍🍳;; + 👨🏻‍🍳;; + 👨🏼‍🍳;; + 👨🏽‍🍳;; + 👨🏾‍🍳;; + 👨🏿‍🍳;; +👩‍🍳;; + 👩🏻‍🍳;; + 👩🏼‍🍳;; + 👩🏽‍🍳;; + 👩🏾‍🍳;; + 👩🏿‍🍳;; +🧑‍🔧;; + 🧑🏻‍🔧;; + 🧑🏼‍🔧;; + 🧑🏽‍🔧;; + 🧑🏾‍🔧;; + 🧑🏿‍🔧;; +👨‍🔧;; + 👨🏻‍🔧;; + 👨🏼‍🔧;; + 👨🏽‍🔧;; + 👨🏾‍🔧;; + 👨🏿‍🔧;; +👩‍🔧;; + 👩🏻‍🔧;; + 👩🏼‍🔧;; + 👩🏽‍🔧;; + 👩🏾‍🔧;; + 👩🏿‍🔧;; +🧑‍🏭;; + 🧑🏻‍🏭;; + 🧑🏼‍🏭;; + 🧑🏽‍🏭;; + 🧑🏾‍🏭;; + 🧑🏿‍🏭;; +👨‍🏭;; + 👨🏻‍🏭;; + 👨🏼‍🏭;; + 👨🏽‍🏭;; + 👨🏾‍🏭;; + 👨🏿‍🏭;; +👩‍🏭;; + 👩🏻‍🏭;; + 👩🏼‍🏭;; + 👩🏽‍🏭;; + 👩🏾‍🏭;; + 👩🏿‍🏭;; +🧑‍💼;; + 🧑🏻‍💼;; + 🧑🏼‍💼;; + 🧑🏽‍💼;; + 🧑🏾‍💼;; + 🧑🏿‍💼;; +👨‍💼;; + 👨🏻‍💼;; + 👨🏼‍💼;; + 👨🏽‍💼;; + 👨🏾‍💼;; + 👨🏿‍💼;; +👩‍💼;; + 👩🏻‍💼;; + 👩🏼‍💼;; + 👩🏽‍💼;; + 👩🏾‍💼;; + 👩🏿‍💼;; +🧑‍🔬;; + 🧑🏻‍🔬;; + 🧑🏼‍🔬;; + 🧑🏽‍🔬;; + 🧑🏾‍🔬;; + 🧑🏿‍🔬;; +👨‍🔬;; + 👨🏻‍🔬;; + 👨🏼‍🔬;; + 👨🏽‍🔬;; + 👨🏾‍🔬;; + 👨🏿‍🔬;; +👩‍🔬;; + 👩🏻‍🔬;; + 👩🏼‍🔬;; + 👩🏽‍🔬;; + 👩🏾‍🔬;; + 👩🏿‍🔬;; +🧑‍💻;; + 🧑🏻‍💻;; + 🧑🏼‍💻;; + 🧑🏽‍💻;; + 🧑🏾‍💻;; + 🧑🏿‍💻;; +👨‍💻;; + 👨🏻‍💻;; + 👨🏼‍💻;; + 👨🏽‍💻;; + 👨🏾‍💻;; + 👨🏿‍💻;; +👩‍💻;; + 👩🏻‍💻;; + 👩🏼‍💻;; + 👩🏽‍💻;; + 👩🏾‍💻;; + 👩🏿‍💻;; +🧑‍🎤;; + 🧑🏻‍🎤;; + 🧑🏼‍🎤;; + 🧑🏽‍🎤;; + 🧑🏾‍🎤;; + 🧑🏿‍🎤;; +👨‍🎤;; + 👨🏻‍🎤;; + 👨🏼‍🎤;; + 👨🏽‍🎤;; + 👨🏾‍🎤;; + 👨🏿‍🎤;; +👩‍🎤;; + 👩🏻‍🎤;; + 👩🏼‍🎤;; + 👩🏽‍🎤;; + 👩🏾‍🎤;; + 👩🏿‍🎤;; +🧑‍🎨;; + 🧑🏻‍🎨;; + 🧑🏼‍🎨;; + 🧑🏽‍🎨;; + 🧑🏾‍🎨;; + 🧑🏿‍🎨;; +👨‍🎨;; + 👨🏻‍🎨;; + 👨🏼‍🎨;; + 👨🏽‍🎨;; + 👨🏾‍🎨;; + 👨🏿‍🎨;; +👩‍🎨;; + 👩🏻‍🎨;; + 👩🏼‍🎨;; + 👩🏽‍🎨;; + 👩🏾‍🎨;; + 👩🏿‍🎨;; +🧑‍✈️;; + 🧑🏻‍✈️;; + 🧑🏼‍✈️;; + 🧑🏽‍✈️;; + 🧑🏾‍✈️;; + 🧑🏿‍✈️;; +👨‍✈️;; + 👨🏻‍✈️;; + 👨🏼‍✈️;; + 👨🏽‍✈️;; + 👨🏾‍✈️;; + 👨🏿‍✈️;; +👩‍✈️;; + 👩🏻‍✈️;; + 👩🏼‍✈️;; + 👩🏽‍✈️;; + 👩🏾‍✈️;; + 👩🏿‍✈️;; +🧑‍🚀;; + 🧑🏻‍🚀;; + 🧑🏼‍🚀;; + 🧑🏽‍🚀;; + 🧑🏾‍🚀;; + 🧑🏿‍🚀;; +👨‍🚀;; + 👨🏻‍🚀;; + 👨🏼‍🚀;; + 👨🏽‍🚀;; + 👨🏾‍🚀;; + 👨🏿‍🚀;; +👩‍🚀;; + 👩🏻‍🚀;; + 👩🏼‍🚀;; + 👩🏽‍🚀;; + 👩🏾‍🚀;; + 👩🏿‍🚀;; +🧑‍🚒;; + 🧑🏻‍🚒;; + 🧑🏼‍🚒;; + 🧑🏽‍🚒;; + 🧑🏾‍🚒;; + 🧑🏿‍🚒;; +👨‍🚒;; + 👨🏻‍🚒;; + 👨🏼‍🚒;; + 👨🏽‍🚒;; + 👨🏾‍🚒;; + 👨🏿‍🚒;; +👩‍🚒;; + 👩🏻‍🚒;; + 👩🏼‍🚒;; + 👩🏽‍🚒;; + 👩🏾‍🚒;; + 👩🏿‍🚒;; +👮;; + 👮🏻;; + 👮🏼;; + 👮🏽;; + 👮🏾;; + 👮🏿;; +👮‍♂️;; + 👮🏻‍♂️;; + 👮🏼‍♂️;; + 👮🏽‍♂️;; + 👮🏾‍♂️;; + 👮🏿‍♂️;; +👮‍♀️;; + 👮🏻‍♀️;; + 👮🏼‍♀️;; + 👮🏽‍♀️;; + 👮🏾‍♀️;; + 👮🏿‍♀️;; +🕵️;; + 🕵🏻;; + 🕵🏼;; + 🕵🏽;; + 🕵🏾;; + 🕵🏿;; +🕵️‍♂️;; + 🕵🏻‍♂️;; + 🕵🏼‍♂️;; + 🕵🏽‍♂️;; + 🕵🏾‍♂️;; + 🕵🏿‍♂️;; +🕵️‍♀️;; + 🕵🏻‍♀️;; + 🕵🏼‍♀️;; + 🕵🏽‍♀️;; + 🕵🏾‍♀️;; + 🕵🏿‍♀️;; +💂;; + 💂🏻;; + 💂🏼;; + 💂🏽;; + 💂🏾;; + 💂🏿;; +💂‍♂️;; + 💂🏻‍♂️;; + 💂🏼‍♂️;; + 💂🏽‍♂️;; + 💂🏾‍♂️;; + 💂🏿‍♂️;; +💂‍♀️;; + 💂🏻‍♀️;; + 💂🏼‍♀️;; + 💂🏽‍♀️;; + 💂🏾‍♀️;; + 💂🏿‍♀️;; +🥷;; + 🥷🏻;; + 🥷🏼;; + 🥷🏽;; + 🥷🏾;; + 🥷🏿;; +👷;; + 👷🏻;; + 👷🏼;; + 👷🏽;; + 👷🏾;; + 👷🏿;; +👷‍♂️;; + 👷🏻‍♂️;; + 👷🏼‍♂️;; + 👷🏽‍♂️;; + 👷🏾‍♂️;; + 👷🏿‍♂️;; +👷‍♀️;; + 👷🏻‍♀️;; + 👷🏼‍♀️;; + 👷🏽‍♀️;; + 👷🏾‍♀️;; + 👷🏿‍♀️;; +🫅;; + 🫅🏻;; + 🫅🏼;; + 🫅🏽;; + 🫅🏾;; + 🫅🏿;; +🤴;; + 🤴🏻;; + 🤴🏼;; + 🤴🏽;; + 🤴🏾;; + 🤴🏿;; +👸;; + 👸🏻;; + 👸🏼;; + 👸🏽;; + 👸🏾;; + 👸🏿;; +👳;; + 👳🏻;; + 👳🏼;; + 👳🏽;; + 👳🏾;; + 👳🏿;; +👳‍♂️;; + 👳🏻‍♂️;; + 👳🏼‍♂️;; + 👳🏽‍♂️;; + 👳🏾‍♂️;; + 👳🏿‍♂️;; +👳‍♀️;; + 👳🏻‍♀️;; + 👳🏼‍♀️;; + 👳🏽‍♀️;; + 👳🏾‍♀️;; + 👳🏿‍♀️;; +👲;; + 👲🏻;; + 👲🏼;; + 👲🏽;; + 👲🏾;; + 👲🏿;; +🧕;; + 🧕🏻;; + 🧕🏼;; + 🧕🏽;; + 🧕🏾;; + 🧕🏿;; +🤵;; + 🤵🏻;; + 🤵🏼;; + 🤵🏽;; + 🤵🏾;; + 🤵🏿;; +🤵‍♂️;; + 🤵🏻‍♂️;; + 🤵🏼‍♂️;; + 🤵🏽‍♂️;; + 🤵🏾‍♂️;; + 🤵🏿‍♂️;; +🤵‍♀️;; + 🤵🏻‍♀️;; + 🤵🏼‍♀️;; + 🤵🏽‍♀️;; + 🤵🏾‍♀️;; + 🤵🏿‍♀️;; +👰;; + 👰🏻;; + 👰🏼;; + 👰🏽;; + 👰🏾;; + 👰🏿;; +👰‍♂️;; + 👰🏻‍♂️;; + 👰🏼‍♂️;; + 👰🏽‍♂️;; + 👰🏾‍♂️;; + 👰🏿‍♂️;; +👰‍♀️;; + 👰🏻‍♀️;; + 👰🏼‍♀️;; + 👰🏽‍♀️;; + 👰🏾‍♀️;; + 👰🏿‍♀️;; +🤰;; + 🤰🏻;; + 🤰🏼;; + 🤰🏽;; + 🤰🏾;; + 🤰🏿;; +🫃;; + 🫃🏻;; + 🫃🏼;; + 🫃🏽;; + 🫃🏾;; + 🫃🏿;; +🫄;; + 🫄🏻;; + 🫄🏼;; + 🫄🏽;; + 🫄🏾;; + 🫄🏿;; +🤱;; + 🤱🏻;; + 🤱🏼;; + 🤱🏽;; + 🤱🏾;; + 🤱🏿;; +👩‍🍼;; + 👩🏻‍🍼;; + 👩🏼‍🍼;; + 👩🏽‍🍼;; + 👩🏾‍🍼;; + 👩🏿‍🍼;; +👨‍🍼;; + 👨🏻‍🍼;; + 👨🏼‍🍼;; + 👨🏽‍🍼;; + 👨🏾‍🍼;; + 👨🏿‍🍼;; +🧑‍🍼;; + 🧑🏻‍🍼;; + 🧑🏼‍🍼;; + 🧑🏽‍🍼;; + 🧑🏾‍🍼;; + 🧑🏿‍🍼;; +👼;; + 👼🏻;; + 👼🏼;; + 👼🏽;; + 👼🏾;; + 👼🏿;; +🎅;; + 🎅🏻;; + 🎅🏼;; + 🎅🏽;; + 🎅🏾;; + 🎅🏿;; +🤶;; + 🤶🏻;; + 🤶🏼;; + 🤶🏽;; + 🤶🏾;; + 🤶🏿;; +🧑‍🎄;; + 🧑🏻‍🎄;; + 🧑🏼‍🎄;; + 🧑🏽‍🎄;; + 🧑🏾‍🎄;; + 🧑🏿‍🎄;; +🦸;; + 🦸🏻;; + 🦸🏼;; + 🦸🏽;; + 🦸🏾;; + 🦸🏿;; +🦸‍♂️;; + 🦸🏻‍♂️;; + 🦸🏼‍♂️;; + 🦸🏽‍♂️;; + 🦸🏾‍♂️;; + 🦸🏿‍♂️;; +🦸‍♀️;; + 🦸🏻‍♀️;; + 🦸🏼‍♀️;; + 🦸🏽‍♀️;; + 🦸🏾‍♀️;; + 🦸🏿‍♀️;; +🦹;; + 🦹🏻;; + 🦹🏼;; + 🦹🏽;; + 🦹🏾;; + 🦹🏿;; +🦹‍♂️;; + 🦹🏻‍♂️;; + 🦹🏼‍♂️;; + 🦹🏽‍♂️;; + 🦹🏾‍♂️;; + 🦹🏿‍♂️;; +🦹‍♀️;; + 🦹🏻‍♀️;; + 🦹🏼‍♀️;; + 🦹🏽‍♀️;; + 🦹🏾‍♀️;; + 🦹🏿‍♀️;; +🧙;; + 🧙🏻;; + 🧙🏼;; + 🧙🏽;; + 🧙🏾;; + 🧙🏿;; +🧙‍♂️;; + 🧙🏻‍♂️;; + 🧙🏼‍♂️;; + 🧙🏽‍♂️;; + 🧙🏾‍♂️;; + 🧙🏿‍♂️;; +🧙‍♀️;; + 🧙🏻‍♀️;; + 🧙🏼‍♀️;; + 🧙🏽‍♀️;; + 🧙🏾‍♀️;; + 🧙🏿‍♀️;; +🧚;; + 🧚🏻;; + 🧚🏼;; + 🧚🏽;; + 🧚🏾;; + 🧚🏿;; +🧚‍♂️;; + 🧚🏻‍♂️;; + 🧚🏼‍♂️;; + 🧚🏽‍♂️;; + 🧚🏾‍♂️;; + 🧚🏿‍♂️;; +🧚‍♀️;; + 🧚🏻‍♀️;; + 🧚🏼‍♀️;; + 🧚🏽‍♀️;; + 🧚🏾‍♀️;; + 🧚🏿‍♀️;; +🧛;; + 🧛🏻;; + 🧛🏼;; + 🧛🏽;; + 🧛🏾;; + 🧛🏿;; +🧛‍♂️;; + 🧛🏻‍♂️;; + 🧛🏼‍♂️;; + 🧛🏽‍♂️;; + 🧛🏾‍♂️;; + 🧛🏿‍♂️;; +🧛‍♀️;; + 🧛🏻‍♀️;; + 🧛🏼‍♀️;; + 🧛🏽‍♀️;; + 🧛🏾‍♀️;; + 🧛🏿‍♀️;; +🧜;; + 🧜🏻;; + 🧜🏼;; + 🧜🏽;; + 🧜🏾;; + 🧜🏿;; +🧜‍♂️;; + 🧜🏻‍♂️;; + 🧜🏼‍♂️;; + 🧜🏽‍♂️;; + 🧜🏾‍♂️;; + 🧜🏿‍♂️;; +🧜‍♀️;; + 🧜🏻‍♀️;; + 🧜🏼‍♀️;; + 🧜🏽‍♀️;; + 🧜🏾‍♀️;; + 🧜🏿‍♀️;; +🧝;; + 🧝🏻;; + 🧝🏼;; + 🧝🏽;; + 🧝🏾;; + 🧝🏿;; +🧝‍♂️;; + 🧝🏻‍♂️;; + 🧝🏼‍♂️;; + 🧝🏽‍♂️;; + 🧝🏾‍♂️;; + 🧝🏿‍♂️;; +🧝‍♀️;; + 🧝🏻‍♀️;; + 🧝🏼‍♀️;; + 🧝🏽‍♀️;; + 🧝🏾‍♀️;; + 🧝🏿‍♀️;; +🧞;; +🧞‍♂️;; +🧞‍♀️;; +🧟;; +🧟‍♂️;; +🧟‍♀️;; +🧌;; +💆;; + 💆🏻;; + 💆🏼;; + 💆🏽;; + 💆🏾;; + 💆🏿;; +💆‍♂️;; + 💆🏻‍♂️;; + 💆🏼‍♂️;; + 💆🏽‍♂️;; + 💆🏾‍♂️;; + 💆🏿‍♂️;; +💆‍♀️;; + 💆🏻‍♀️;; + 💆🏼‍♀️;; + 💆🏽‍♀️;; + 💆🏾‍♀️;; + 💆🏿‍♀️;; +💇;; + 💇🏻;; + 💇🏼;; + 💇🏽;; + 💇🏾;; + 💇🏿;; +💇‍♂️;; + 💇🏻‍♂️;; + 💇🏼‍♂️;; + 💇🏽‍♂️;; + 💇🏾‍♂️;; + 💇🏿‍♂️;; +💇‍♀️;; + 💇🏻‍♀️;; + 💇🏼‍♀️;; + 💇🏽‍♀️;; + 💇🏾‍♀️;; + 💇🏿‍♀️;; +🚶;; + 🚶🏻;; + 🚶🏼;; + 🚶🏽;; + 🚶🏾;; + 🚶🏿;; +🚶‍♂️;; + 🚶🏻‍♂️;; + 🚶🏼‍♂️;; + 🚶🏽‍♂️;; + 🚶🏾‍♂️;; + 🚶🏿‍♂️;; +🚶‍♀️;; + 🚶🏻‍♀️;; + 🚶🏼‍♀️;; + 🚶🏽‍♀️;; + 🚶🏾‍♀️;; + 🚶🏿‍♀️;; +🧍;; + 🧍🏻;; + 🧍🏼;; + 🧍🏽;; + 🧍🏾;; + 🧍🏿;; +🧍‍♂️;; + 🧍🏻‍♂️;; + 🧍🏼‍♂️;; + 🧍🏽‍♂️;; + 🧍🏾‍♂️;; + 🧍🏿‍♂️;; +🧍‍♀️;; + 🧍🏻‍♀️;; + 🧍🏼‍♀️;; + 🧍🏽‍♀️;; + 🧍🏾‍♀️;; + 🧍🏿‍♀️;; +🧎;; + 🧎🏻;; + 🧎🏼;; + 🧎🏽;; + 🧎🏾;; + 🧎🏿;; +🧎‍♂️;; + 🧎🏻‍♂️;; + 🧎🏼‍♂️;; + 🧎🏽‍♂️;; + 🧎🏾‍♂️;; + 🧎🏿‍♂️;; +🧎‍♀️;; + 🧎🏻‍♀️;; + 🧎🏼‍♀️;; + 🧎🏽‍♀️;; + 🧎🏾‍♀️;; + 🧎🏿‍♀️;; +🧑‍🦯;; + 🧑🏻‍🦯;; + 🧑🏼‍🦯;; + 🧑🏽‍🦯;; + 🧑🏾‍🦯;; + 🧑🏿‍🦯;; +👨‍🦯;; + 👨🏻‍🦯;; + 👨🏼‍🦯;; + 👨🏽‍🦯;; + 👨🏾‍🦯;; + 👨🏿‍🦯;; +👩‍🦯;; + 👩🏻‍🦯;; + 👩🏼‍🦯;; + 👩🏽‍🦯;; + 👩🏾‍🦯;; + 👩🏿‍🦯;; +🧑‍🦼;; + 🧑🏻‍🦼;; + 🧑🏼‍🦼;; + 🧑🏽‍🦼;; + 🧑🏾‍🦼;; + 🧑🏿‍🦼;; +👨‍🦼;; + 👨🏻‍🦼;; + 👨🏼‍🦼;; + 👨🏽‍🦼;; + 👨🏾‍🦼;; + 👨🏿‍🦼;; +👩‍🦼;; + 👩🏻‍🦼;; + 👩🏼‍🦼;; + 👩🏽‍🦼;; + 👩🏾‍🦼;; + 👩🏿‍🦼;; +🧑‍🦽;; + 🧑🏻‍🦽;; + 🧑🏼‍🦽;; + 🧑🏽‍🦽;; + 🧑🏾‍🦽;; + 🧑🏿‍🦽;; +👨‍🦽;; + 👨🏻‍🦽;; + 👨🏼‍🦽;; + 👨🏽‍🦽;; + 👨🏾‍🦽;; + 👨🏿‍🦽;; +👩‍🦽;; + 👩🏻‍🦽;; + 👩🏼‍🦽;; + 👩🏽‍🦽;; + 👩🏾‍🦽;; + 👩🏿‍🦽;; +🏃;; + 🏃🏻;; + 🏃🏼;; + 🏃🏽;; + 🏃🏾;; + 🏃🏿;; +🏃‍♂️;; + 🏃🏻‍♂️;; + 🏃🏼‍♂️;; + 🏃🏽‍♂️;; + 🏃🏾‍♂️;; + 🏃🏿‍♂️;; +🏃‍♀️;; + 🏃🏻‍♀️;; + 🏃🏼‍♀️;; + 🏃🏽‍♀️;; + 🏃🏾‍♀️;; + 🏃🏿‍♀️;; +💃;; + 💃🏻;; + 💃🏼;; + 💃🏽;; + 💃🏾;; + 💃🏿;; +🕺;; + 🕺🏻;; + 🕺🏼;; + 🕺🏽;; + 🕺🏾;; + 🕺🏿;; +🕴️;; + 🕴🏻;; + 🕴🏼;; + 🕴🏽;; + 🕴🏾;; + 🕴🏿;; +👯;; +👯‍♂️;; +👯‍♀️;; +🧖;; + 🧖🏻;; + 🧖🏼;; + 🧖🏽;; + 🧖🏾;; + 🧖🏿;; +🧖‍♂️;; + 🧖🏻‍♂️;; + 🧖🏼‍♂️;; + 🧖🏽‍♂️;; + 🧖🏾‍♂️;; + 🧖🏿‍♂️;; +🧖‍♀️;; + 🧖🏻‍♀️;; + 🧖🏼‍♀️;; + 🧖🏽‍♀️;; + 🧖🏾‍♀️;; + 🧖🏿‍♀️;; +🧗;; + 🧗🏻;; + 🧗🏼;; + 🧗🏽;; + 🧗🏾;; + 🧗🏿;; +🧗‍♂️;; + 🧗🏻‍♂️;; + 🧗🏼‍♂️;; + 🧗🏽‍♂️;; + 🧗🏾‍♂️;; + 🧗🏿‍♂️;; +🧗‍♀️;; + 🧗🏻‍♀️;; + 🧗🏼‍♀️;; + 🧗🏽‍♀️;; + 🧗🏾‍♀️;; + 🧗🏿‍♀️;; +🤺;; +🏇;; + 🏇🏻;; + 🏇🏼;; + 🏇🏽;; + 🏇🏾;; + 🏇🏿;; +⛷️;; +🏂;; + 🏂🏻;; + 🏂🏼;; + 🏂🏽;; + 🏂🏾;; + 🏂🏿;; +🏌️;; + 🏌🏻;; + 🏌🏼;; + 🏌🏽;; + 🏌🏾;; + 🏌🏿;; +🏌️‍♂️;; + 🏌🏻‍♂️;; + 🏌🏼‍♂️;; + 🏌🏽‍♂️;; + 🏌🏾‍♂️;; + 🏌🏿‍♂️;; +🏌️‍♀️;; + 🏌🏻‍♀️;; + 🏌🏼‍♀️;; + 🏌🏽‍♀️;; + 🏌🏾‍♀️;; + 🏌🏿‍♀️;; +🏄;; + 🏄🏻;; + 🏄🏼;; + 🏄🏽;; + 🏄🏾;; + 🏄🏿;; +🏄‍♂️;; + 🏄🏻‍♂️;; + 🏄🏼‍♂️;; + 🏄🏽‍♂️;; + 🏄🏾‍♂️;; + 🏄🏿‍♂️;; +🏄‍♀️;; + 🏄🏻‍♀️;; + 🏄🏼‍♀️;; + 🏄🏽‍♀️;; + 🏄🏾‍♀️;; + 🏄🏿‍♀️;; +🚣;; + 🚣🏻;; + 🚣🏼;; + 🚣🏽;; + 🚣🏾;; + 🚣🏿;; +🚣‍♂️;; + 🚣🏻‍♂️;; + 🚣🏼‍♂️;; + 🚣🏽‍♂️;; + 🚣🏾‍♂️;; + 🚣🏿‍♂️;; +🚣‍♀️;; + 🚣🏻‍♀️;; + 🚣🏼‍♀️;; + 🚣🏽‍♀️;; + 🚣🏾‍♀️;; + 🚣🏿‍♀️;; +🏊;; + 🏊🏻;; + 🏊🏼;; + 🏊🏽;; + 🏊🏾;; + 🏊🏿;; +🏊‍♂️;; + 🏊🏻‍♂️;; + 🏊🏼‍♂️;; + 🏊🏽‍♂️;; + 🏊🏾‍♂️;; + 🏊🏿‍♂️;; +🏊‍♀️;; + 🏊🏻‍♀️;; + 🏊🏼‍♀️;; + 🏊🏽‍♀️;; + 🏊🏾‍♀️;; + 🏊🏿‍♀️;; +⛹️;; + ⛹🏻;; + ⛹🏼;; + ⛹🏽;; + ⛹🏾;; + ⛹🏿;; +⛹️‍♂️;; + ⛹🏻‍♂️;; + ⛹🏼‍♂️;; + ⛹🏽‍♂️;; + ⛹🏾‍♂️;; + ⛹🏿‍♂️;; +⛹️‍♀️;; + ⛹🏻‍♀️;; + ⛹🏼‍♀️;; + ⛹🏽‍♀️;; + ⛹🏾‍♀️;; + ⛹🏿‍♀️;; +🏋️;; + 🏋🏻;; + 🏋🏼;; + 🏋🏽;; + 🏋🏾;; + 🏋🏿;; +🏋️‍♂️;; + 🏋🏻‍♂️;; + 🏋🏼‍♂️;; + 🏋🏽‍♂️;; + 🏋🏾‍♂️;; + 🏋🏿‍♂️;; +🏋️‍♀️;; + 🏋🏻‍♀️;; + 🏋🏼‍♀️;; + 🏋🏽‍♀️;; + 🏋🏾‍♀️;; + 🏋🏿‍♀️;; +🚴;; + 🚴🏻;; + 🚴🏼;; + 🚴🏽;; + 🚴🏾;; + 🚴🏿;; +🚴‍♂️;; + 🚴🏻‍♂️;; + 🚴🏼‍♂️;; + 🚴🏽‍♂️;; + 🚴🏾‍♂️;; + 🚴🏿‍♂️;; +🚴‍♀️;; + 🚴🏻‍♀️;; + 🚴🏼‍♀️;; + 🚴🏽‍♀️;; + 🚴🏾‍♀️;; + 🚴🏿‍♀️;; +🚵;; + 🚵🏻;; + 🚵🏼;; + 🚵🏽;; + 🚵🏾;; + 🚵🏿;; +🚵‍♂️;; + 🚵🏻‍♂️;; + 🚵🏼‍♂️;; + 🚵🏽‍♂️;; + 🚵🏾‍♂️;; + 🚵🏿‍♂️;; +🚵‍♀️;; + 🚵🏻‍♀️;; + 🚵🏼‍♀️;; + 🚵🏽‍♀️;; + 🚵🏾‍♀️;; + 🚵🏿‍♀️;; +🤸;; + 🤸🏻;; + 🤸🏼;; + 🤸🏽;; + 🤸🏾;; + 🤸🏿;; +🤸‍♂️;; + 🤸🏻‍♂️;; + 🤸🏼‍♂️;; + 🤸🏽‍♂️;; + 🤸🏾‍♂️;; + 🤸🏿‍♂️;; +🤸‍♀️;; + 🤸🏻‍♀️;; + 🤸🏼‍♀️;; + 🤸🏽‍♀️;; + 🤸🏾‍♀️;; + 🤸🏿‍♀️;; +🤼;; +🤼‍♂️;; +🤼‍♀️;; +🤽;; + 🤽🏻;; + 🤽🏼;; + 🤽🏽;; + 🤽🏾;; + 🤽🏿;; +🤽‍♂️;; + 🤽🏻‍♂️;; + 🤽🏼‍♂️;; + 🤽🏽‍♂️;; + 🤽🏾‍♂️;; + 🤽🏿‍♂️;; +🤽‍♀️;; + 🤽🏻‍♀️;; + 🤽🏼‍♀️;; + 🤽🏽‍♀️;; + 🤽🏾‍♀️;; + 🤽🏿‍♀️;; +🤾;; + 🤾🏻;; + 🤾🏼;; + 🤾🏽;; + 🤾🏾;; + 🤾🏿;; +🤾‍♂️;; + 🤾🏻‍♂️;; + 🤾🏼‍♂️;; + 🤾🏽‍♂️;; + 🤾🏾‍♂️;; + 🤾🏿‍♂️;; +🤾‍♀️;; + 🤾🏻‍♀️;; + 🤾🏼‍♀️;; + 🤾🏽‍♀️;; + 🤾🏾‍♀️;; + 🤾🏿‍♀️;; +🤹;; + 🤹🏻;; + 🤹🏼;; + 🤹🏽;; + 🤹🏾;; + 🤹🏿;; +🤹‍♂️;; + 🤹🏻‍♂️;; + 🤹🏼‍♂️;; + 🤹🏽‍♂️;; + 🤹🏾‍♂️;; + 🤹🏿‍♂️;; +🤹‍♀️;; + 🤹🏻‍♀️;; + 🤹🏼‍♀️;; + 🤹🏽‍♀️;; + 🤹🏾‍♀️;; + 🤹🏿‍♀️;; +🧘;; + 🧘🏻;; + 🧘🏼;; + 🧘🏽;; + 🧘🏾;; + 🧘🏿;; +🧘‍♂️;; + 🧘🏻‍♂️;; + 🧘🏼‍♂️;; + 🧘🏽‍♂️;; + 🧘🏾‍♂️;; + 🧘🏿‍♂️;; +🧘‍♀️;; + 🧘🏻‍♀️;; + 🧘🏼‍♀️;; + 🧘🏽‍♀️;; + 🧘🏾‍♀️;; + 🧘🏿‍♀️;; +🛀;; + 🛀🏻;; + 🛀🏼;; + 🛀🏽;; + 🛀🏾;; + 🛀🏿;; +🛌;; + 🛌🏻;; + 🛌🏼;; + 🛌🏽;; + 🛌🏾;; + 🛌🏿;; +🧑‍🤝‍🧑;; + 🧑🏻‍🤝‍🧑🏻;; + 🧑🏻‍🤝‍🧑🏼;; + 🧑🏻‍🤝‍🧑🏽;; + 🧑🏻‍🤝‍🧑🏾;; + 🧑🏻‍🤝‍🧑🏿;; + 🧑🏼‍🤝‍🧑🏻;; + 🧑🏼‍🤝‍🧑🏼;; + 🧑🏼‍🤝‍🧑🏽;; + 🧑🏼‍🤝‍🧑🏾;; + 🧑🏼‍🤝‍🧑🏿;; + 🧑🏽‍🤝‍🧑🏻;; + 🧑🏽‍🤝‍🧑🏼;; + 🧑🏽‍🤝‍🧑🏽;; + 🧑🏽‍🤝‍🧑🏾;; + 🧑🏽‍🤝‍🧑🏿;; + 🧑🏾‍🤝‍🧑🏻;; + 🧑🏾‍🤝‍🧑🏼;; + 🧑🏾‍🤝‍🧑🏽;; + 🧑🏾‍🤝‍🧑🏾;; + 🧑🏾‍🤝‍🧑🏿;; + 🧑🏿‍🤝‍🧑🏻;; + 🧑🏿‍🤝‍🧑🏼;; + 🧑🏿‍🤝‍🧑🏽;; + 🧑🏿‍🤝‍🧑🏾;; + 🧑🏿‍🤝‍🧑🏿;; +👭;; + 👭🏻;; + 👩🏻‍🤝‍👩🏼;; + 👩🏻‍🤝‍👩🏽;; + 👩🏻‍🤝‍👩🏾;; + 👩🏻‍🤝‍👩🏿;; + 👩🏼‍🤝‍👩🏻;; + 👭🏼;; + 👩🏼‍🤝‍👩🏽;; + 👩🏼‍🤝‍👩🏾;; + 👩🏼‍🤝‍👩🏿;; + 👩🏽‍🤝‍👩🏻;; + 👩🏽‍🤝‍👩🏼;; + 👭🏽;; + 👩🏽‍🤝‍👩🏾;; + 👩🏽‍🤝‍👩🏿;; + 👩🏾‍🤝‍👩🏻;; + 👩🏾‍🤝‍👩🏼;; + 👩🏾‍🤝‍👩🏽;; + 👭🏾;; + 👩🏾‍🤝‍👩🏿;; + 👩🏿‍🤝‍👩🏻;; + 👩🏿‍🤝‍👩🏼;; + 👩🏿‍🤝‍👩🏽;; + 👩🏿‍🤝‍👩🏾;; + 👭🏿;; +👫;; + 👫🏻;; + 👩🏻‍🤝‍👨🏼;; + 👩🏻‍🤝‍👨🏽;; + 👩🏻‍🤝‍👨🏾;; + 👩🏻‍🤝‍👨🏿;; + 👩🏼‍🤝‍👨🏻;; + 👫🏼;; + 👩🏼‍🤝‍👨🏽;; + 👩🏼‍🤝‍👨🏾;; + 👩🏼‍🤝‍👨🏿;; + 👩🏽‍🤝‍👨🏻;; + 👩🏽‍🤝‍👨🏼;; + 👫🏽;; + 👩🏽‍🤝‍👨🏾;; + 👩🏽‍🤝‍👨🏿;; + 👩🏾‍🤝‍👨🏻;; + 👩🏾‍🤝‍👨🏼;; + 👩🏾‍🤝‍👨🏽;; + 👫🏾;; + 👩🏾‍🤝‍👨🏿;; + 👩🏿‍🤝‍👨🏻;; + 👩🏿‍🤝‍👨🏼;; + 👩🏿‍🤝‍👨🏽;; + 👩🏿‍🤝‍👨🏾;; + 👫🏿;; +👬;; + 👬🏻;; + 👨🏻‍🤝‍👨🏼;; + 👨🏻‍🤝‍👨🏽;; + 👨🏻‍🤝‍👨🏾;; + 👨🏻‍🤝‍👨🏿;; + 👨🏼‍🤝‍👨🏻;; + 👬🏼;; + 👨🏼‍🤝‍👨🏽;; + 👨🏼‍🤝‍👨🏾;; + 👨🏼‍🤝‍👨🏿;; + 👨🏽‍🤝‍👨🏻;; + 👨🏽‍🤝‍👨🏼;; + 👬🏽;; + 👨🏽‍🤝‍👨🏾;; + 👨🏽‍🤝‍👨🏿;; + 👨🏾‍🤝‍👨🏻;; + 👨🏾‍🤝‍👨🏼;; + 👨🏾‍🤝‍👨🏽;; + 👬🏾;; + 👨🏾‍🤝‍👨🏿;; + 👨🏿‍🤝‍👨🏻;; + 👨🏿‍🤝‍👨🏼;; + 👨🏿‍🤝‍👨🏽;; + 👨🏿‍🤝‍👨🏾;; + 👬🏿;; +💏;; + 💏🏻;; + 💏🏼;; + 💏🏽;; + 💏🏾;; + 💏🏿;; + 🧑🏻‍❤️‍💋‍🧑🏼;; + 🧑🏻‍❤️‍💋‍🧑🏽;; + 🧑🏻‍❤️‍💋‍🧑🏾;; + 🧑🏻‍❤️‍💋‍🧑🏿;; + 🧑🏼‍❤️‍💋‍🧑🏻;; + 🧑🏼‍❤️‍💋‍🧑🏽;; + 🧑🏼‍❤️‍💋‍🧑🏾;; + 🧑🏼‍❤️‍💋‍🧑🏿;; + 🧑🏽‍❤️‍💋‍🧑🏻;; + 🧑🏽‍❤️‍💋‍🧑🏼;; + 🧑🏽‍❤️‍💋‍🧑🏾;; + 🧑🏽‍❤️‍💋‍🧑🏿;; + 🧑🏾‍❤️‍💋‍🧑🏻;; + 🧑🏾‍❤️‍💋‍🧑🏼;; + 🧑🏾‍❤️‍💋‍🧑🏽;; + 🧑🏾‍❤️‍💋‍🧑🏿;; + 🧑🏿‍❤️‍💋‍🧑🏻;; + 🧑🏿‍❤️‍💋‍🧑🏼;; + 🧑🏿‍❤️‍💋‍🧑🏽;; + 🧑🏿‍❤️‍💋‍🧑🏾;; +👩‍❤️‍💋‍👨;; + 👩🏻‍❤️‍💋‍👨🏻;; + 👩🏻‍❤️‍💋‍👨🏼;; + 👩🏻‍❤️‍💋‍👨🏽;; + 👩🏻‍❤️‍💋‍👨🏾;; + 👩🏻‍❤️‍💋‍👨🏿;; + 👩🏼‍❤️‍💋‍👨🏻;; + 👩🏼‍❤️‍💋‍👨🏼;; + 👩🏼‍❤️‍💋‍👨🏽;; + 👩🏼‍❤️‍💋‍👨🏾;; + 👩🏼‍❤️‍💋‍👨🏿;; + 👩🏽‍❤️‍💋‍👨🏻;; + 👩🏽‍❤️‍💋‍👨🏼;; + 👩🏽‍❤️‍💋‍👨🏽;; + 👩🏽‍❤️‍💋‍👨🏾;; + 👩🏽‍❤️‍💋‍👨🏿;; + 👩🏾‍❤️‍💋‍👨🏻;; + 👩🏾‍❤️‍💋‍👨🏼;; + 👩🏾‍❤️‍💋‍👨🏽;; + 👩🏾‍❤️‍💋‍👨🏾;; + 👩🏾‍❤️‍💋‍👨🏿;; + 👩🏿‍❤️‍💋‍👨🏻;; + 👩🏿‍❤️‍💋‍👨🏼;; + 👩🏿‍❤️‍💋‍👨🏽;; + 👩🏿‍❤️‍💋‍👨🏾;; + 👩🏿‍❤️‍💋‍👨🏿;; +👨‍❤️‍💋‍👨;; + 👨🏻‍❤️‍💋‍👨🏻;; + 👨🏻‍❤️‍💋‍👨🏼;; + 👨🏻‍❤️‍💋‍👨🏽;; + 👨🏻‍❤️‍💋‍👨🏾;; + 👨🏻‍❤️‍💋‍👨🏿;; + 👨🏼‍❤️‍💋‍👨🏻;; + 👨🏼‍❤️‍💋‍👨🏼;; + 👨🏼‍❤️‍💋‍👨🏽;; + 👨🏼‍❤️‍💋‍👨🏾;; + 👨🏼‍❤️‍💋‍👨🏿;; + 👨🏽‍❤️‍💋‍👨🏻;; + 👨🏽‍❤️‍💋‍👨🏼;; + 👨🏽‍❤️‍💋‍👨🏽;; + 👨🏽‍❤️‍💋‍👨🏾;; + 👨🏽‍❤️‍💋‍👨🏿;; + 👨🏾‍❤️‍💋‍👨🏻;; + 👨🏾‍❤️‍💋‍👨🏼;; + 👨🏾‍❤️‍💋‍👨🏽;; + 👨🏾‍❤️‍💋‍👨🏾;; + 👨🏾‍❤️‍💋‍👨🏿;; + 👨🏿‍❤️‍💋‍👨🏻;; + 👨🏿‍❤️‍💋‍👨🏼;; + 👨🏿‍❤️‍💋‍👨🏽;; + 👨🏿‍❤️‍💋‍👨🏾;; + 👨🏿‍❤️‍💋‍👨🏿;; +👩‍❤️‍💋‍👩;; + 👩🏻‍❤️‍💋‍👩🏻;; + 👩🏻‍❤️‍💋‍👩🏼;; + 👩🏻‍❤️‍💋‍👩🏽;; + 👩🏻‍❤️‍💋‍👩🏾;; + 👩🏻‍❤️‍💋‍👩🏿;; + 👩🏼‍❤️‍💋‍👩🏻;; + 👩🏼‍❤️‍💋‍👩🏼;; + 👩🏼‍❤️‍💋‍👩🏽;; + 👩🏼‍❤️‍💋‍👩🏾;; + 👩🏼‍❤️‍💋‍👩🏿;; + 👩🏽‍❤️‍💋‍👩🏻;; + 👩🏽‍❤️‍💋‍👩🏼;; + 👩🏽‍❤️‍💋‍👩🏽;; + 👩🏽‍❤️‍💋‍👩🏾;; + 👩🏽‍❤️‍💋‍👩🏿;; + 👩🏾‍❤️‍💋‍👩🏻;; + 👩🏾‍❤️‍💋‍👩🏼;; + 👩🏾‍❤️‍💋‍👩🏽;; + 👩🏾‍❤️‍💋‍👩🏾;; + 👩🏾‍❤️‍💋‍👩🏿;; + 👩🏿‍❤️‍💋‍👩🏻;; + 👩🏿‍❤️‍💋‍👩🏼;; + 👩🏿‍❤️‍💋‍👩🏽;; + 👩🏿‍❤️‍💋‍👩🏾;; + 👩🏿‍❤️‍💋‍👩🏿;; +💑;; + 💑🏻;; + 💑🏼;; + 💑🏽;; + 💑🏾;; + 💑🏿;; + 🧑🏻‍❤️‍🧑🏼;; + 🧑🏻‍❤️‍🧑🏽;; + 🧑🏻‍❤️‍🧑🏾;; + 🧑🏻‍❤️‍🧑🏿;; + 🧑🏼‍❤️‍🧑🏻;; + 🧑🏼‍❤️‍🧑🏽;; + 🧑🏼‍❤️‍🧑🏾;; + 🧑🏼‍❤️‍🧑🏿;; + 🧑🏽‍❤️‍🧑🏻;; + 🧑🏽‍❤️‍🧑🏼;; + 🧑🏽‍❤️‍🧑🏾;; + 🧑🏽‍❤️‍🧑🏿;; + 🧑🏾‍❤️‍🧑🏻;; + 🧑🏾‍❤️‍🧑🏼;; + 🧑🏾‍❤️‍🧑🏽;; + 🧑🏾‍❤️‍🧑🏿;; + 🧑🏿‍❤️‍🧑🏻;; + 🧑🏿‍❤️‍🧑🏼;; + 🧑🏿‍❤️‍🧑🏽;; + 🧑🏿‍❤️‍🧑🏾;; +👩‍❤️‍👨;; + 👩🏻‍❤️‍👨🏻;; + 👩🏻‍❤️‍👨🏼;; + 👩🏻‍❤️‍👨🏽;; + 👩🏻‍❤️‍👨🏾;; + 👩🏻‍❤️‍👨🏿;; + 👩🏼‍❤️‍👨🏻;; + 👩🏼‍❤️‍👨🏼;; + 👩🏼‍❤️‍👨🏽;; + 👩🏼‍❤️‍👨🏾;; + 👩🏼‍❤️‍👨🏿;; + 👩🏽‍❤️‍👨🏻;; + 👩🏽‍❤️‍👨🏼;; + 👩🏽‍❤️‍👨🏽;; + 👩🏽‍❤️‍👨🏾;; + 👩🏽‍❤️‍👨🏿;; + 👩🏾‍❤️‍👨🏻;; + 👩🏾‍❤️‍👨🏼;; + 👩🏾‍❤️‍👨🏽;; + 👩🏾‍❤️‍👨🏾;; + 👩🏾‍❤️‍👨🏿;; + 👩🏿‍❤️‍👨🏻;; + 👩🏿‍❤️‍👨🏼;; + 👩🏿‍❤️‍👨🏽;; + 👩🏿‍❤️‍👨🏾;; + 👩🏿‍❤️‍👨🏿;; +👨‍❤️‍👨;; + 👨🏻‍❤️‍👨🏻;; + 👨🏻‍❤️‍👨🏼;; + 👨🏻‍❤️‍👨🏽;; + 👨🏻‍❤️‍👨🏾;; + 👨🏻‍❤️‍👨🏿;; + 👨🏼‍❤️‍👨🏻;; + 👨🏼‍❤️‍👨🏼;; + 👨🏼‍❤️‍👨🏽;; + 👨🏼‍❤️‍👨🏾;; + 👨🏼‍❤️‍👨🏿;; + 👨🏽‍❤️‍👨🏻;; + 👨🏽‍❤️‍👨🏼;; + 👨🏽‍❤️‍👨🏽;; + 👨🏽‍❤️‍👨🏾;; + 👨🏽‍❤️‍👨🏿;; + 👨🏾‍❤️‍👨🏻;; + 👨🏾‍❤️‍👨🏼;; + 👨🏾‍❤️‍👨🏽;; + 👨🏾‍❤️‍👨🏾;; + 👨🏾‍❤️‍👨🏿;; + 👨🏿‍❤️‍👨🏻;; + 👨🏿‍❤️‍👨🏼;; + 👨🏿‍❤️‍👨🏽;; + 👨🏿‍❤️‍👨🏾;; + 👨🏿‍❤️‍👨🏿;; +👩‍❤️‍👩;; + 👩🏻‍❤️‍👩🏻;; + 👩🏻‍❤️‍👩🏼;; + 👩🏻‍❤️‍👩🏽;; + 👩🏻‍❤️‍👩🏾;; + 👩🏻‍❤️‍👩🏿;; + 👩🏼‍❤️‍👩🏻;; + 👩🏼‍❤️‍👩🏼;; + 👩🏼‍❤️‍👩🏽;; + 👩🏼‍❤️‍👩🏾;; + 👩🏼‍❤️‍👩🏿;; + 👩🏽‍❤️‍👩🏻;; + 👩🏽‍❤️‍👩🏼;; + 👩🏽‍❤️‍👩🏽;; + 👩🏽‍❤️‍👩🏾;; + 👩🏽‍❤️‍👩🏿;; + 👩🏾‍❤️‍👩🏻;; + 👩🏾‍❤️‍👩🏼;; + 👩🏾‍❤️‍👩🏽;; + 👩🏾‍❤️‍👩🏾;; + 👩🏾‍❤️‍👩🏿;; + 👩🏿‍❤️‍👩🏻;; + 👩🏿‍❤️‍👩🏼;; + 👩🏿‍❤️‍👩🏽;; + 👩🏿‍❤️‍👩🏾;; + 👩🏿‍❤️‍👩🏿;; +👪;; +👨‍👩‍👦;; +👨‍👩‍👧;; +👨‍👩‍👧‍👦;; +👨‍👩‍👦‍👦;; +👨‍👩‍👧‍👧;; +👨‍👨‍👦;; +👨‍👨‍👧;; +👨‍👨‍👧‍👦;; +👨‍👨‍👦‍👦;; +👨‍👨‍👧‍👧;; +👩‍👩‍👦;; +👩‍👩‍👧;; +👩‍👩‍👧‍👦;; +👩‍👩‍👦‍👦;; +👩‍👩‍👧‍👧;; +👨‍👦;; +👨‍👦‍👦;; +👨‍👧;; +👨‍👧‍👦;; +👨‍👧‍👧;; +👩‍👦;; +👩‍👦‍👦;; +👩‍👧;; +👩‍👧‍👦;; +👩‍👧‍👧;; +🗣️;; +👤;; +👥;; +🫂;; +👣;; + +[animals_nature] +🐵;; +🐒;; +🦍;; +🦧;; +🐶;; +🐕;; +🦮;; +🐕‍🦺;; +🐩;; +🐺;; +🦊;; +🦝;; +🐱;; +🐈;; +🐈‍⬛;; +🦁;; +🐯;; +🐅;; +🐆;; +🐴;; +🐎;; +🦄;; +🦓;; +🦌;; +🦬;; +🐮;; +🐂;; +🐃;; +🐄;; +🐷;; +🐖;; +🐗;; +🐽;; +🐏;; +🐑;; +🐐;; +🐪;; +🐫;; +🦙;; +🦒;; +🐘;; +🦣;; +🦏;; +🦛;; +🐭;; +🐁;; +🐀;; +🐹;; +🐰;; +🐇;; +🐿️;; +🦫;; +🦔;; +🦇;; +🐻;; +🐻‍❄️;; +🐨;; +🐼;; +🦥;; +🦦;; +🦨;; +🦘;; +🦡;; +🐾;; +🦃;; +🐔;; +🐓;; +🐣;; +🐤;; +🐥;; +🐦;; +🐧;; +🕊️;; +🦅;; +🦆;; +🦢;; +🦉;; +🦤;; +🪶;; +🦩;; +🦚;; +🦜;; +🐸;; +🐊;; +🐢;; +🦎;; +🐍;; +🐲;; +🐉;; +🦕;; +🦖;; +🐳;; +🐋;; +🐬;; +🦭;; +🐟;; +🐠;; +🐡;; +🦈;; +🐙;; +🐚;; +🪸;; +🐌;; +🦋;; +🐛;; +🐜;; +🐝;; +🪲;; +🐞;; +🦗;; +🪳;; +🕷️;; +🕸️;; +🦂;; +🦟;; +🪰;; +🪱;; +🦠;; +💐;; +🌸;; +💮;; +🪷;; +🏵️;; +🌹;; +🥀;; +🌺;; +🌻;; +🌼;; +🌷;; +🌱;; +🪴;; +🌲;; +🌳;; +🌴;; +🌵;; +🌾;; +🌿;; +☘️;; +🍀;; +🍁;; +🍂;; +🍃;; +🪹;; +🪺;; + +[food_drink] +🍇;; +🍈;; +🍉;; +🍊;; +🍋;; +🍌;; +🍍;; +🥭;; +🍎;; +🍏;; +🍐;; +🍑;; +🍒;; +🍓;; +🫐;; +🥝;; +🍅;; +🫒;; +🥥;; +🥑;; +🍆;; +🥔;; +🥕;; +🌽;; +🌶️;; +🫑;; +🥒;; +🥬;; +🥦;; +🧄;; +🧅;; +🍄;; +🥜;; +🫘;; +🌰;; +🍞;; +🥐;; +🥖;; +🫓;; +🥨;; +🥯;; +🥞;; +🧇;; +🧀;; +🍖;; +🍗;; +🥩;; +🥓;; +🍔;; +🍟;; +🍕;; +🌭;; +🥪;; +🌮;; +🌯;; +🫔;; +🥙;; +🧆;; +🥚;; +🍳;; +🥘;; +🍲;; +🫕;; +🥣;; +🥗;; +🍿;; +🧈;; +🧂;; +🥫;; +🍱;; +🍘;; +🍙;; +🍚;; +🍛;; +🍜;; +🍝;; +🍠;; +🍢;; +🍣;; +🍤;; +🍥;; +🥮;; +🍡;; +🥟;; +🥠;; +🥡;; +🦀;; +🦞;; +🦐;; +🦑;; +🦪;; +🍦;; +🍧;; +🍨;; +🍩;; +🍪;; +🎂;; +🍰;; +🧁;; +🥧;; +🍫;; +🍬;; +🍭;; +🍮;; +🍯;; +🍼;; +🥛;; +☕;; +🫖;; +🍵;; +🍶;; +🍾;; +🍷;; +🍸;; +🍹;; +🍺;; +🍻;; +🥂;; +🥃;; +🫗;; +🥤;; +🧋;; +🧃;; +🧉;; +🧊;; +🥢;; +🍽️;; +🍴;; +🥄;; +🔪;; +🫙;; +🏺;; + +[travel_places] +🌍;; +🌎;; +🌏;; +🌐;; +🗺️;; +🗾;; +🧭;; +🏔️;; +⛰️;; +🌋;; +🗻;; +🏕️;; +🏖️;; +🏜️;; +🏝️;; +🏞️;; +🏟️;; +🏛️;; +🏗️;; +🧱;; +🪨;; +🪵;; +🛖;; +🏘️;; +🏚️;; +🏠;; +🏡;; +🏢;; +🏣;; +🏤;; +🏥;; +🏦;; +🏨;; +🏩;; +🏪;; +🏫;; +🏬;; +🏭;; +🏯;; +🏰;; +💒;; +🗼;; +🗽;; +⛪;; +🕌;; +🛕;; +🕍;; +⛩️;; +🕋;; +⛲;; +⛺;; +🌁;; +🌃;; +🏙️;; +🌄;; +🌅;; +🌆;; +🌇;; +🌉;; +♨️;; +🎠;; +🛝;; +🎡;; +🎢;; +💈;; +🎪;; +🚂;; +🚃;; +🚄;; +🚅;; +🚆;; +🚇;; +🚈;; +🚉;; +🚊;; +🚝;; +🚞;; +🚋;; +🚌;; +🚍;; +🚎;; +🚐;; +🚑;; +🚒;; +🚓;; +🚔;; +🚕;; +🚖;; +🚗;; +🚘;; +🚙;; +🛻;; +🚚;; +🚛;; +🚜;; +🏎️;; +🏍️;; +🛵;; +🦽;; +🦼;; +🛺;; +🚲;; +🛴;; +🛹;; +🛼;; +🚏;; +🛣️;; +🛤️;; +🛢️;; +⛽;; +🛞;; +🚨;; +🚥;; +🚦;; +🛑;; +🚧;; +⚓;; +🛟;; +⛵;; +🛶;; +🚤;; +🛳️;; +⛴️;; +🛥️;; +🚢;; +✈️;; +🛩️;; +🛫;; +🛬;; +🪂;; +💺;; +🚁;; +🚟;; +🚠;; +🚡;; +🛰️;; +🚀;; +🛸;; +🛎️;; +🧳;; +⌛;; +⏳;; +⌚;; +⏰;; +⏱️;; +⏲️;; +🕰️;; +🕛;; +🕧;; +🕐;; +🕜;; +🕑;; +🕝;; +🕒;; +🕞;; +🕓;; +🕟;; +🕔;; +🕠;; +🕕;; +🕡;; +🕖;; +🕢;; +🕗;; +🕣;; +🕘;; +🕤;; +🕙;; +🕥;; +🕚;; +🕦;; +🌑;; +🌒;; +🌓;; +🌔;; +🌕;; +🌖;; +🌗;; +🌘;; +🌙;; +🌚;; +🌛;; +🌜;; +🌡️;; +☀️;; +🌝;; +🌞;; +🪐;; +⭐;; +🌟;; +🌠;; +🌌;; +☁️;; +⛅;; +⛈️;; +🌤️;; +🌥️;; +🌦️;; +🌧️;; +🌨️;; +🌩️;; +🌪️;; +🌫️;; +🌬️;; +🌀;; +🌈;; +🌂;; +☂️;; +☔;; +⛱️;; +⚡;; +❄️;; +☃️;; +⛄;; +☄️;; +🔥;; +💧;; +🌊;; + +[activities] +🎃;; +🎄;; +🎆;; +🎇;; +🧨;; +✨;; +🎈;; +🎉;; +🎊;; +🎋;; +🎍;; +🎎;; +🎏;; +🎐;; +🎑;; +🧧;; +🎀;; +🎁;; +🎗️;; +🎟️;; +🎫;; +🎖️;; +🏆;; +🏅;; +🥇;; +🥈;; +🥉;; +⚽;; +⚾;; +🥎;; +🏀;; +🏐;; +🏈;; +🏉;; +🎾;; +🥏;; +🎳;; +🏏;; +🏑;; +🏒;; +🥍;; +🏓;; +🏸;; +🥊;; +🥋;; +🥅;; +⛳;; +⛸️;; +🎣;; +🤿;; +🎽;; +🎿;; +🛷;; +🥌;; +🎯;; +🪀;; +🪁;; +🎱;; +🔮;; +🪄;; +🧿;; +🪬;; +🎮;; +🕹️;; +🎰;; +🎲;; +🧩;; +🧸;; +🪅;; +🪩;; +🪆;; +♠️;; +♥️;; +♦️;; +♣️;; +♟️;; +🃏;; +🀄;; +🎴;; +🎭;; +🖼️;; +🎨;; +🧵;; +🪡;; +🧶;; +🪢;; + +[objects] +👓;; +🕶️;; +🥽;; +🥼;; +🦺;; +👔;; +👕;; +👖;; +🧣;; +🧤;; +🧥;; +🧦;; +👗;; +👘;; +🥻;; +🩱;; +🩲;; +🩳;; +👙;; +👚;; +👛;; +👜;; +👝;; +🛍️;; +🎒;; +🩴;; +👞;; +👟;; +🥾;; +🥿;; +👠;; +👡;; +🩰;; +👢;; +👑;; +👒;; +🎩;; +🎓;; +🧢;; +🪖;; +⛑️;; +📿;; +💄;; +💍;; +💎;; +🔇;; +🔈;; +🔉;; +🔊;; +📢;; +📣;; +📯;; +🔔;; +🔕;; +🎼;; +🎵;; +🎶;; +🎙️;; +🎚️;; +🎛️;; +🎤;; +🎧;; +📻;; +🎷;; +🪗;; +🎸;; +🎹;; +🎺;; +🎻;; +🪕;; +🥁;; +🪘;; +📱;; +📲;; +☎️;; +📞;; +📟;; +📠;; +🔋;; +🪫;; +🔌;; +💻;; +🖥️;; +🖨️;; +⌨️;; +🖱️;; +🖲️;; +💽;; +💾;; +💿;; +📀;; +🧮;; +🎥;; +🎞️;; +📽️;; +🎬;; +📺;; +📷;; +📸;; +📹;; +📼;; +🔍;; +🔎;; +🕯️;; +💡;; +🔦;; +🏮;; +🪔;; +📔;; +📕;; +📖;; +📗;; +📘;; +📙;; +📚;; +📓;; +📒;; +📃;; +📜;; +📄;; +📰;; +🗞️;; +📑;; +🔖;; +🏷️;; +💰;; +🪙;; +💴;; +💵;; +💶;; +💷;; +💸;; +💳;; +🧾;; +💹;; +✉️;; +📧;; +📨;; +📩;; +📤;; +📥;; +📦;; +📫;; +📪;; +📬;; +📭;; +📮;; +🗳️;; +✏️;; +✒️;; +🖋️;; +🖊️;; +🖌️;; +🖍️;; +📝;; +💼;; +📁;; +📂;; +🗂️;; +📅;; +📆;; +🗒️;; +🗓️;; +📇;; +📈;; +📉;; +📊;; +📋;; +📌;; +📍;; +📎;; +🖇️;; +📏;; +📐;; +✂️;; +🗃️;; +🗄️;; +🗑️;; +🔒;; +🔓;; +🔏;; +🔐;; +🔑;; +🗝️;; +🔨;; +🪓;; +⛏️;; +⚒️;; +🛠️;; +🗡️;; +⚔️;; +🔫;; +🪃;; +🏹;; +🛡️;; +🪚;; +🔧;; +🪛;; +🔩;; +⚙️;; +🗜️;; +⚖️;; +🦯;; +🔗;; +⛓️;; +🪝;; +🧰;; +🧲;; +🪜;; +⚗️;; +🧪;; +🧫;; +🧬;; +🔬;; +🔭;; +📡;; +💉;; +🩸;; +💊;; +🩹;; +🩼;; +🩺;; +🩻;; +🚪;; +🛗;; +🪞;; +🪟;; +🛏️;; +🛋️;; +🪑;; +🚽;; +🪠;; +🚿;; +🛁;; +🪤;; +🪒;; +🧴;; +🧷;; +🧹;; +🧺;; +🧻;; +🪣;; +🧼;; +🫧;; +🪥;; +🧽;; +🧯;; +🛒;; +🚬;; +⚰️;; +🪦;; +⚱️;; +🗿;; +🪧;; +🪪;; + +[symbols] +🏧;; +🚮;; +🚰;; +♿;; +🚹;; +🚺;; +🚻;; +🚼;; +🚾;; +🛂;; +🛃;; +🛄;; +🛅;; +⚠️;; +🚸;; +⛔;; +🚫;; +🚳;; +🚭;; +🚯;; +🚱;; +🚷;; +📵;; +🔞;; +☢️;; +☣️;; +⬆️;; +↗️;; +➡️;; +↘️;; +⬇️;; +↙️;; +⬅️;; +↖️;; +↕️;; +↔️;; +↩️;; +↪️;; +⤴️;; +⤵️;; +🔃;; +🔄;; +🔙;; +🔚;; +🔛;; +🔜;; +🔝;; +🛐;; +⚛️;; +🕉️;; +✡️;; +☸️;; +☯️;; +✝️;; +☦️;; +☪️;; +☮️;; +🕎;; +🔯;; +♈;; +♉;; +♊;; +♋;; +♌;; +♍;; +♎;; +♏;; +♐;; +♑;; +♒;; +♓;; +⛎;; +🔀;; +🔁;; +🔂;; +▶️;; +⏩;; +⏭️;; +⏯️;; +◀️;; +⏪;; +⏮️;; +🔼;; +⏫;; +🔽;; +⏬;; +⏸️;; +⏹️;; +⏺️;; +⏏️;; +🎦;; +🔅;; +🔆;; +📶;; +📳;; +📴;; +♀️;; +♂️;; +⚧️;; +✖️;; +➕;; +➖;; +➗;; +🟰;; +♾️;; +‼️;; +⁉️;; +❓;; +❔;; +❕;; +❗;; +〰️;; +💱;; +💲;; +⚕️;; +♻️;; +⚜️;; +🔱;; +📛;; +🔰;; +⭕;; +✅;; +☑️;; +✔️;; +❌;; +❎;; +➰;; +➿;; +〽️;; +✳️;; +✴️;; +❇️;; +©️;; +®️;; +™️;; +#️⃣;; +*️⃣;; +0️⃣;; +1️⃣;; +2️⃣;; +3️⃣;; +4️⃣;; +5️⃣;; +6️⃣;; +7️⃣;; +8️⃣;; +9️⃣;; +🔟;; +🔠;; +🔡;; +🔢;; +🔣;; +🔤;; +🅰️;; +🆎;; +🅱️;; +🆑;; +🆒;; +🆓;; +ℹ️;; +🆔;; +Ⓜ️;; +🆕;; +🆖;; +🅾️;; +🆗;; +🅿️;; +🆘;; +🆙;; +🆚;; +🈁;; +🈂️;; +🈷️;; +🈶;; +🈯;; +🉐;; +🈹;; +🈚;; +🈲;; +🉑;; +🈸;; +🈴;; +🈳;; +㊗️;; +㊙️;; +🈺;; +🈵;; +🔴;; +🟠;; +🟡;; +🟢;; +🔵;; +🟣;; +🟤;; +⚫;; +⚪;; +🟥;; +🟧;; +🟨;; +🟩;; +🟦;; +🟪;; +🟫;; +⬛;; +⬜;; +◼️;; +◻️;; +◾;; +◽;; +▪️;; +▫️;; +🔶;; +🔷;; +🔸;; +🔹;; +🔺;; +🔻;; +💠;; +🔘;; +🔳;; +🔲;; + +[flags] +🏁;; +🚩;; +🎌;; +🏴;; +🏳️;; +🏳️‍🌈;; +🏳️‍⚧️;; +🏴‍☠️;; +🇦🇨;; +🇦🇩;; +🇦🇪;; +🇦🇫;; +🇦🇬;; +🇦🇮;; +🇦🇱;; +🇦🇲;; +🇦🇴;; +🇦🇶;; +🇦🇷;; +🇦🇸;; +🇦🇹;; +🇦🇺;; +🇦🇼;; +🇦🇽;; +🇦🇿;; +🇧🇦;; +🇧🇧;; +🇧🇩;; +🇧🇪;; +🇧🇫;; +🇧🇬;; +🇧🇭;; +🇧🇮;; +🇧🇯;; +🇧🇱;; +🇧🇲;; +🇧🇳;; +🇧🇴;; +🇧🇶;; +🇧🇷;; +🇧🇸;; +🇧🇹;; +🇧🇻;; +🇧🇼;; +🇧🇾;; +🇧🇿;; +🇨🇦;; +🇨🇨;; +🇨🇩;; +🇨🇫;; +🇨🇬;; +🇨🇭;; +🇨🇮;; +🇨🇰;; +🇨🇱;; +🇨🇲;; +🇨🇳;; +🇨🇴;; +🇨🇵;; +🇨🇷;; +🇨🇺;; +🇨🇻;; +🇨🇼;; +🇨🇽;; +🇨🇾;; +🇨🇿;; +🇩🇪;; +🇩🇬;; +🇩🇯;; +🇩🇰;; +🇩🇲;; +🇩🇴;; +🇩🇿;; +🇪🇦;; +🇪🇨;; +🇪🇪;; +🇪🇬;; +🇪🇭;; +🇪🇷;; +🇪🇸;; +🇪🇹;; +🇪🇺;; +🇫🇮;; +🇫🇯;; +🇫🇰;; +🇫🇲;; +🇫🇴;; +🇫🇷;; +🇬🇦;; +🇬🇧;; +🇬🇩;; +🇬🇪;; +🇬🇫;; +🇬🇬;; +🇬🇭;; +🇬🇮;; +🇬🇱;; +🇬🇲;; +🇬🇳;; +🇬🇵;; +🇬🇶;; +🇬🇷;; +🇬🇸;; +🇬🇹;; +🇬🇺;; +🇬🇼;; +🇬🇾;; +🇭🇰;; +🇭🇲;; +🇭🇳;; +🇭🇷;; +🇭🇹;; +🇭🇺;; +🇮🇨;; +🇮🇩;; +🇮🇪;; +🇮🇱;; +🇮🇲;; +🇮🇳;; +🇮🇴;; +🇮🇶;; +🇮🇷;; +🇮🇸;; +🇮🇹;; +🇯🇪;; +🇯🇲;; +🇯🇴;; +🇯🇵;; +🇰🇪;; +🇰🇬;; +🇰🇭;; +🇰🇮;; +🇰🇲;; +🇰🇳;; +🇰🇵;; +🇰🇷;; +🇰🇼;; +🇰🇾;; +🇰🇿;; +🇱🇦;; +🇱🇧;; +🇱🇨;; +🇱🇮;; +🇱🇰;; +🇱🇷;; +🇱🇸;; +🇱🇹;; +🇱🇺;; +🇱🇻;; +🇱🇾;; +🇲🇦;; +🇲🇨;; +🇲🇩;; +🇲🇪;; +🇲🇫;; +🇲🇬;; +🇲🇭;; +🇲🇰;; +🇲🇱;; +🇲🇲;; +🇲🇳;; +🇲🇴;; +🇲🇵;; +🇲🇶;; +🇲🇷;; +🇲🇸;; +🇲🇹;; +🇲🇺;; +🇲🇻;; +🇲🇼;; +🇲🇽;; +🇲🇾;; +🇲🇿;; +🇳🇦;; +🇳🇨;; +🇳🇪;; +🇳🇫;; +🇳🇬;; +🇳🇮;; +🇳🇱;; +🇳🇴;; +🇳🇵;; +🇳🇷;; +🇳🇺;; +🇳🇿;; +🇴🇲;; +🇵🇦;; +🇵🇪;; +🇵🇫;; +🇵🇬;; +🇵🇭;; +🇵🇰;; +🇵🇱;; +🇵🇲;; +🇵🇳;; +🇵🇷;; +🇵🇸;; +🇵🇹;; +🇵🇼;; +🇵🇾;; +🇶🇦;; +🇷🇪;; +🇷🇴;; +🇷🇸;; +🇷🇺;; +🇷🇼;; +🇸🇦;; +🇸🇧;; +🇸🇨;; +🇸🇩;; +🇸🇪;; +🇸🇬;; +🇸🇭;; +🇸🇮;; +🇸🇯;; +🇸🇰;; +🇸🇱;; +🇸🇲;; +🇸🇳;; +🇸🇴;; +🇸🇷;; +🇸🇸;; +🇸🇹;; +🇸🇻;; +🇸🇽;; +🇸🇾;; +🇸🇿;; +🇹🇦;; +🇹🇨;; +🇹🇩;; +🇹🇫;; +🇹🇬;; +🇹🇭;; +🇹🇯;; +🇹🇰;; +🇹🇱;; +🇹🇲;; +🇹🇳;; +🇹🇴;; +🇹🇷;; +🇹🇹;; +🇹🇻;; +🇹🇼;; +🇹🇿;; +🇺🇦;; +🇺🇬;; +🇺🇲;; +🇺🇳;; +🇺🇸;; +🇺🇾;; +🇺🇿;; +🇻🇦;; +🇻🇨;; +🇻🇪;; +🇻🇬;; +🇻🇮;; +🇻🇳;; +🇻🇺;; +🇼🇫;; +🇼🇸;; +🇽🇰;; +🇾🇪;; +🇾🇹;; +🇿🇦;; +🇿🇲;; +🇿🇼;; +🏴󠁧󠁢󠁥󠁮󠁧󠁿;; +🏴󠁧󠁢󠁳󠁣󠁴󠁿;; +🏴󠁧󠁢󠁷󠁬󠁳󠁿;; + diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt new file mode 100644 index 0000000..72bfe06 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt @@ -0,0 +1,50 @@ +package com.simplemobiletools.keyboard.adapters + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.simplemobiletools.keyboard.R +import com.simplemobiletools.keyboard.media.emoji.Emoji +import kotlinx.android.synthetic.main.item_emoji.view.* + +class EmojisAdapter( + val context: Context, var items: List, val itemClick: (emoji: Emoji) -> Unit +) : RecyclerView.Adapter() { + + private val layoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EmojisAdapter.ViewHolder { + val layoutId = R.layout.item_emoji + val view = layoutInflater.inflate(layoutId, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: EmojisAdapter.ViewHolder, position: Int) { + val item = items[position] + holder.bindView(item) { itemView -> + setupEmoji(itemView, item) + } + } + + override fun getItemCount(): Int { + return items.size + } + + private fun setupEmoji(view: View, emoji: Emoji) { + view.emoji_value.text = emoji.value + } + + inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + fun bindView(any: Emoji, callback: (itemView: View) -> Unit): View { + return itemView.apply { + callback(this) + + setOnClickListener { + itemClick.invoke(any) + } + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/extensions/View.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/extensions/View.kt new file mode 100644 index 0000000..3be5154 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/extensions/View.kt @@ -0,0 +1,19 @@ +package com.simplemobiletools.keyboard.extensions + +import androidx.recyclerview.widget.RecyclerView + +/** + * Calls the [scroll] callback when the receiving RecyclerView's scroll position is changed. + */ +fun RecyclerView.onScroll(scroll: (Int) -> Unit) { + addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrolled( + recyclerView: RecyclerView, + dx: Int, + dy: Int, + ) { + super.onScrolled(recyclerView, dx, dy) + scroll(computeVerticalScrollOffset()) + } + }) +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt index acbd2ab..b3bec15 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt @@ -26,3 +26,6 @@ const val LANGUAGE_GERMAN = 5 const val LANGUAGE_ENGLISH_DVORAK = 6 const val LANGUAGE_ROMANIAN = 7 const val LANGUAGE_SLOVENIAN = 8 + + +const val EMOJI_SPEC_FILE_PATH = "media/emoji_spec.txt" diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/Emoji.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/Emoji.kt new file mode 100644 index 0000000..4799583 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/Emoji.kt @@ -0,0 +1,8 @@ +package com.simplemobiletools.keyboard.media.emoji + + +data class Emoji(val value: String, val name: String, val keywords: List) { + override fun toString(): String { + return "Emoji { value=$value, name=$name, keywords=$keywords }" + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/EmojiData.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/EmojiData.kt new file mode 100644 index 0000000..094d36e --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/media/emoji/EmojiData.kt @@ -0,0 +1,63 @@ +package com.simplemobiletools.keyboard.media.emoji + +import android.content.Context + +private var cachedEmojiData: MutableList? = null + +/** + * Reads the emoji list at the given [path] and returns an parsed [MutableList]. If the + * given file path does not exist, an empty [MutableList] is returned. + * + * @param context The initiating view's context. + * @param path The path to the asset file. + */ +fun parseRawEmojiSpecsFile( + context: Context, path: String +): MutableList { + cachedEmojiData?.let { return it } + val emojis = mutableListOf() + var emojiEditorList: MutableList? = null + + fun commitEmojiEditorList() { + emojiEditorList?.let { + // add only the base emoji for now, ignore the variations + emojis.add(it.first()) + } + emojiEditorList = null + } + + context.assets.open(path).bufferedReader().useLines { lines -> + for (line in lines) { + if (line.startsWith("#")) { + // Comment line + } else if (line.startsWith("[")) { + commitEmojiEditorList() + } else if (line.trim().isEmpty()) { + // Empty line + continue + } else { + if (!line.startsWith("\t")) { + commitEmojiEditorList() + } + // Assume it is a data line + val data = line.split(";") + if (data.size == 3) { + val emoji = Emoji( + value = data[0].trim(), + name = data[1].trim(), + keywords = data[2].split("|").map { it.trim() } + ) + if (emojiEditorList != null) { + emojiEditorList!!.add(emoji) + } else { + emojiEditorList = mutableListOf(emoji) + } + } + } + } + commitEmojiEditorList() + } + + cachedEmojiData = emojis + return emojis +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt index 7679c14..a092447 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt @@ -106,7 +106,8 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL val selectedText = inputConnection.getSelectedText(0) if (TextUtils.isEmpty(selectedText)) { - inputConnection.deleteSurroundingText(1, 0) + inputConnection.sendKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)) + inputConnection.sendKeyEvent(KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL)) } else { inputConnection.commitText("", 1) } @@ -155,6 +156,10 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL keyboard = MyKeyboard(this, keyboardXml, enterKeyType) keyboardView!!.setKeyboard(keyboard!!) } + MyKeyboard.KEYCODE_EMOJI -> { + keyboardView?.vibrateIfNeeded() + keyboardView?.openEmojiChooser() + } else -> { var codeChar = code.toChar() if (Character.isLetter(codeChar) && keyboard!!.mShiftState > SHIFT_OFF) { diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/AutoGridLayoutManager.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/AutoGridLayoutManager.kt new file mode 100644 index 0000000..4601f4b --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/AutoGridLayoutManager.kt @@ -0,0 +1,36 @@ +package com.simplemobiletools.keyboard.views + +import android.content.Context +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import kotlin.math.max + +/** + * RecyclerView GridLayoutManager but with automatic spanCount calculation. + * + * @param context The initiating view's context. + * @param itemWidth: Grid item width in pixels. Will be used to calculate span count. + */ +class AutoGridLayoutManager( + context: Context, + private var itemWidth: Int +) : GridLayoutManager(context, 1) { + + init { + require(itemWidth >= 0) { "itemWidth must be >= 0" } + } + + override fun onLayoutChildren(recycler: RecyclerView.Recycler?, state: RecyclerView.State?) { + val width = width + val height = height + if (itemWidth > 0 && width > 0 && height > 0) { + val totalSpace = if (orientation == VERTICAL) { + width - paddingRight - paddingLeft + } else { + height - paddingTop - paddingBottom + } + spanCount = max(1, totalSpace / itemWidth) + } + super.onLayoutChildren(recycler, state) + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt index e632fa7..0840570 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -33,17 +33,18 @@ import com.simplemobiletools.keyboard.R import com.simplemobiletools.keyboard.activities.ManageClipboardItemsActivity import com.simplemobiletools.keyboard.activities.SettingsActivity import com.simplemobiletools.keyboard.adapters.ClipsKeyboardAdapter -import com.simplemobiletools.keyboard.extensions.clipsDB -import com.simplemobiletools.keyboard.extensions.config -import com.simplemobiletools.keyboard.extensions.getCurrentClip -import com.simplemobiletools.keyboard.extensions.getStrokeColor +import com.simplemobiletools.keyboard.adapters.EmojisAdapter +import com.simplemobiletools.keyboard.extensions.* import com.simplemobiletools.keyboard.helpers.* import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_DELETE +import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_EMOJI import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_ENTER import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_MODE_CHANGE import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_SHIFT import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_SPACE import com.simplemobiletools.keyboard.interfaces.RefreshClipsListener +import com.simplemobiletools.keyboard.media.emoji.Emoji +import com.simplemobiletools.keyboard.media.emoji.parseRawEmojiSpecsFile import com.simplemobiletools.keyboard.models.Clip import com.simplemobiletools.keyboard.models.ClipsSectionLabel import com.simplemobiletools.keyboard.models.ListItem @@ -51,7 +52,7 @@ import kotlinx.android.synthetic.main.keyboard_popup_keyboard.view.* import kotlinx.android.synthetic.main.keyboard_view_keyboard.view.* import java.util.* -@SuppressLint("UseCompatLoadingForDrawables") +@SuppressLint("UseCompatLoadingForDrawables", "ClickableViewAccessibility") class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int = 0) : View(context, attrs, defStyleRes) { @@ -153,6 +154,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private var mToolbarHolder: View? = null private var mClipboardManagerHolder: View? = null + private var mEmojiPaletteHolder: View? = null // For multi-tap private var mLastTapTime = 0L @@ -331,6 +333,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut clipboard_content_placeholder_2.setTextColor(mTextColor) } + setupEmojiPalette(toolbarColor = toolbarColor, backgroundColor = mBackgroundColor, textColor = mTextColor) setupStoredClips() } } @@ -364,6 +367,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut fun setKeyboardHolder(keyboardHolder: View) { mToolbarHolder = keyboardHolder.toolbar_holder mClipboardManagerHolder = keyboardHolder.clipboard_manager_holder + mEmojiPaletteHolder = keyboardHolder.emoji_palette_holder mToolbarHolder!!.apply { settings_cog.setOnLongClickListener { context.toast(R.string.settings); true; } @@ -412,6 +416,12 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } } } + mEmojiPaletteHolder!!.apply { + emoji_palette_close.setOnClickListener { + vibrateIfNeeded() + closeEmojiChooser() + } + } } fun vibrateIfNeeded() { @@ -436,7 +446,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut * @return true if the shift is in a pressed state, false otherwise */ private fun isShifted(): Boolean { - return mKeyboard?.mShiftState ?: SHIFT_OFF > SHIFT_OFF + return (mKeyboard?.mShiftState ?: SHIFT_OFF) > SHIFT_OFF } private fun setPopupOffset(x: Int, y: Int) { @@ -450,7 +460,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private fun adjustCase(label: CharSequence): CharSequence? { var newLabel: CharSequence? = label if (newLabel != null && newLabel.isNotEmpty() && mKeyboard!!.mShiftState > SHIFT_OFF && newLabel.length < 3 && Character.isLowerCase(newLabel[0])) { - newLabel = newLabel.toString().toUpperCase() + newLabel = newLabel.toString().uppercase(Locale.getDefault()) } return newLabel } @@ -607,7 +617,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut if (code == KEYCODE_ENTER) { key.icon!!.applyColorFilter(mPrimaryColor.getContrastColor()) - } else if (code == KEYCODE_DELETE || code == KEYCODE_SHIFT) { + } else if (code == KEYCODE_DELETE || code == KEYCODE_SHIFT || code == KEYCODE_EMOJI) { key.icon!!.applyColorFilter(mTextColor) } @@ -1372,6 +1382,92 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mClipboardManagerHolder?.clips_list?.adapter = adapter } + private fun setupEmojiPalette(toolbarColor: Int, backgroundColor: Int, textColor: Int) { + mEmojiPaletteHolder?.apply { + emoji_palette_top_bar.background = ColorDrawable(toolbarColor) + emoji_palette_holder.background = ColorDrawable(backgroundColor) + emoji_palette_close.applyColorFilter(textColor) + emoji_palette_label.setTextColor(textColor) + + emoji_palette_bottom_bar.background = ColorDrawable(backgroundColor) + val bottomTextColor = textColor.darkenColor() + emoji_palette_mode_change.apply { + setTextColor(bottomTextColor) + setOnClickListener { + closeEmojiChooser() + } + } + emoji_palette_backspace.apply { + applyColorFilter(bottomTextColor) + setOnTouchListener { _, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + isPressed = true + mRepeatKeyIndex = mKeys.indexOfFirst { it.code == KEYCODE_DELETE } + mCurrentKey = mRepeatKeyIndex + mOnKeyboardActionListener!!.onKey(KEYCODE_DELETE) + // setup repeating backspace + val msg = mHandler!!.obtainMessage(MSG_REPEAT) + mHandler!!.sendMessageDelayed(msg, REPEAT_START_DELAY.toLong()) + true + } + MotionEvent.ACTION_UP -> { + mHandler!!.removeMessages(MSG_REPEAT) + mRepeatKeyIndex = NOT_A_KEY + isPressed = false + false + } + else -> false + } + } + } + } + setupEmojis() + } + + fun openEmojiChooser() { + mEmojiPaletteHolder!!.emoji_palette_holder.beVisible() + setupEmojis() + } + + private fun closeEmojiChooser() { + mEmojiPaletteHolder?.apply { + emoji_palette_holder?.beGone() + mEmojiPaletteHolder?.emojis_list?.scrollToPosition(0) + } + } + + private fun setupEmojis() { + ensureBackgroundThread { + val fullEmojiList = parseRawEmojiSpecsFile(context, EMOJI_SPEC_FILE_PATH) + val systemFontPaint = Paint().apply { + typeface = Typeface.DEFAULT + } + val emojis = fullEmojiList.filter { emoji -> + systemFontPaint.hasGlyph(emoji.value) + } + Handler(Looper.getMainLooper()).post { + setupEmojiAdapter(emojis) + } + } + } + + private fun setupEmojiAdapter(emojis: List) { + val emojiItemWidth = context.resources.getDimensionPixelSize(R.dimen.emoji_item_size) + val emojiTopBarElevation = context.resources.getDimensionPixelSize(R.dimen.emoji_top_bar_elevation).toFloat() + + mEmojiPaletteHolder!!.emojis_list.apply { + layoutManager = AutoGridLayoutManager(context, emojiItemWidth) + adapter = EmojisAdapter(context = context, items = emojis) { emoji -> + mOnKeyboardActionListener!!.onText(emoji.value) + vibrateIfNeeded() + } + onScroll { + mEmojiPaletteHolder!!.emoji_palette_top_bar.elevation = if (it > 4) emojiTopBarElevation else 0f + } + } + } + private fun closing() { if (mPreviewPopup.isShowing) { mPreviewPopup.dismiss() diff --git a/app/src/main/res/drawable/ic_clear_outline_vector.xml b/app/src/main/res/drawable/ic_clear_outline_vector.xml new file mode 100644 index 0000000..cc9da59 --- /dev/null +++ b/app/src/main/res/drawable/ic_clear_outline_vector.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_emoji_emotions_outline_vector.xml b/app/src/main/res/drawable/ic_emoji_emotions_outline_vector.xml new file mode 100644 index 0000000..241c1a7 --- /dev/null +++ b/app/src/main/res/drawable/ic_emoji_emotions_outline_vector.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/ripple_all_corners_medium.xml b/app/src/main/res/drawable/ripple_all_corners_medium.xml new file mode 100644 index 0000000..4264e74 --- /dev/null +++ b/app/src/main/res/drawable/ripple_all_corners_medium.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/item_emoji.xml b/app/src/main/res/layout/item_emoji.xml new file mode 100644 index 0000000..62cf0bb --- /dev/null +++ b/app/src/main/res/layout/item_emoji.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/layout/keyboard_view_keyboard.xml b/app/src/main/res/layout/keyboard_view_keyboard.xml index dc33429..7e8f0ae 100644 --- a/app/src/main/res/layout/keyboard_view_keyboard.xml +++ b/app/src/main/res/layout/keyboard_view_keyboard.xml @@ -105,6 +105,100 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> + + + + + + + + + + + + + + + + + + + + + + + + + + إظهار نافذة منبثقة عند الضغط على المفاتيح يهتز عند ضغط الزر لغة لوحة المفاتيح + + Emojis + ABC - \ No newline at end of file + diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 4226e91..e54e82a 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -31,6 +31,9 @@ Show a popup on keypress Vibrate on keypress Keyboard language + + Emojis + ABC + Emojis + ABC + Emojis + ABC - \ No newline at end of file + diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index b951ae3..a0a73f8 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -31,6 +31,9 @@ Mostra una finestra emergent en prémer les tecles Vibra en prémer les tecles Idioma del teclat + + Emojis + ABC + Emojis + ABC - \ No newline at end of file + diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 97602ee..e5f2ece 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -31,6 +31,9 @@ Vis en popup ved tastetryk Vibrér ved tastetryk Tastatursprog + + Emojis + ABC + Emojis + ABC + Emojis + ABC - \ No newline at end of file + diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 4226e91..e54e82a 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -31,6 +31,9 @@ Show a popup on keypress Vibrate on keypress Keyboard language + + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Gestionați elementele din clipboard Clipboard-ul dvs. este gol. Odată ce ați copiat un text, acesta va apărea aici. De asemenea, puteți fixa clipuri pentru ca acestea să nu dispară mai târziu. @@ -31,6 +31,9 @@ Afișați o fereastră pop-up la apăsarea unei taste Vibrează la apăsarea tastelor Limba tastaturii + + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + Emojis + ABC + 28sp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4226e91..e54e82a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,6 +31,9 @@ Show a popup on keypress Vibrate on keypress Keyboard language + + Emojis + ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC Emojis - ABC - Emojis + Emoji Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emojis Emoji Emojis Emojis Emojis Emojis Emojis Emojis Emojis - Emojis + Emoji - + \ No newline at end of file From 9d33de342cac74aba39bf4483d5153f2dce07704 Mon Sep 17 00:00:00 2001 From: Agnieszka C Date: Sun, 31 Jul 2022 16:28:38 +0000 Subject: [PATCH 31/35] Translated using Weblate (Polish) Currently translated at 100.0% (30 of 30 strings) Translation: Simple Mobile Tools/Simple Keyboard Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-keyboard/pl/ --- app/src/main/res/values-pl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 71fa9e1..ceabd16 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -31,7 +31,7 @@ Pokazuj wyskakujące okienko przy naciśnięciu klawisza Wibracja przy naciśnięciu klawisza Język klawiatury - Keyboard height + Wysokość klawiatury Emoji