From f8d8481001ffe283172c4c9e8a73301087f21102 Mon Sep 17 00:00:00 2001 From: Mateusz Samsel Date: Wed, 30 May 2018 15:44:32 +0200 Subject: [PATCH 01/17] Make emoji plugin async. --- plugins/emoji/emoji.json | 1 + plugins/emoji/plugin.js | 172 +++++++++++++++++++++------------------ 2 files changed, 94 insertions(+), 79 deletions(-) create mode 100644 plugins/emoji/emoji.json diff --git a/plugins/emoji/emoji.json b/plugins/emoji/emoji.json new file mode 100644 index 00000000000..2dd629dda10 --- /dev/null +++ b/plugins/emoji/emoji.json @@ -0,0 +1 @@ +[{"id":":grinning_face:","symbol":"๐Ÿ˜€"},{"id":":beaming_face_with_smiling_eyes:","symbol":"๐Ÿ˜"},{"id":":face_with_tears_of_joy:","symbol":"๐Ÿ˜‚"},{"id":":rolling_on_the_floor_laughing:","symbol":"๐Ÿคฃ"},{"id":":grinning_face_with_big_eyes:","symbol":"๐Ÿ˜ƒ"},{"id":":grinning_face_with_smiling_eyes:","symbol":"๐Ÿ˜„"},{"id":":grinning_face_with_sweat:","symbol":"๐Ÿ˜…"},{"id":":grinning_squinting_face:","symbol":"๐Ÿ˜†"},{"id":":winking_face:","symbol":"๐Ÿ˜‰"},{"id":":smiling_face_with_smiling_eyes:","symbol":"๐Ÿ˜Š"},{"id":":face_savoring_food:","symbol":"๐Ÿ˜‹"},{"id":":smiling_face_with_sunglasses:","symbol":"๐Ÿ˜Ž"},{"id":":smiling_face_with_heart-eyes:","symbol":"๐Ÿ˜"},{"id":":face_blowing_a_kiss:","symbol":"๐Ÿ˜˜"},{"id":":kissing_face:","symbol":"๐Ÿ˜—"},{"id":":kissing_face_with_smiling_eyes:","symbol":"๐Ÿ˜™"},{"id":":kissing_face_with_closed_eyes:","symbol":"๐Ÿ˜š"},{"id":":smiling_face:","symbol":"โ˜บ"},{"id":":slightly_smiling_face:","symbol":"๐Ÿ™‚"},{"id":":hugging_face:","symbol":"๐Ÿค—"},{"id":":star-struck:","symbol":"๐Ÿคฉ"},{"id":":thinking_face:","symbol":"๐Ÿค”"},{"id":":face_with_raised_eyebrow:","symbol":"๐Ÿคจ"},{"id":":neutral_face:","symbol":"๐Ÿ˜"},{"id":":expressionless_face:","symbol":"๐Ÿ˜‘"},{"id":":face_without_mouth:","symbol":"๐Ÿ˜ถ"},{"id":":face_with_rolling_eyes:","symbol":"๐Ÿ™„"},{"id":":smirking_face:","symbol":"๐Ÿ˜"},{"id":":persevering_face:","symbol":"๐Ÿ˜ฃ"},{"id":":sad_but_relieved_face:","symbol":"๐Ÿ˜ฅ"},{"id":":face_with_open_mouth:","symbol":"๐Ÿ˜ฎ"},{"id":":zipper-mouth_face:","symbol":"๐Ÿค"},{"id":":hushed_face:","symbol":"๐Ÿ˜ฏ"},{"id":":sleepy_face:","symbol":"๐Ÿ˜ช"},{"id":":tired_face:","symbol":"๐Ÿ˜ซ"},{"id":":sleeping_face:","symbol":"๐Ÿ˜ด"},{"id":":relieved_face:","symbol":"๐Ÿ˜Œ"},{"id":":face_with_tongue:","symbol":"๐Ÿ˜›"},{"id":":winking_face_with_tongue:","symbol":"๐Ÿ˜œ"},{"id":":squinting_face_with_tongue:","symbol":"๐Ÿ˜"},{"id":":drooling_face:","symbol":"๐Ÿคค"},{"id":":unamused_face:","symbol":"๐Ÿ˜’"},{"id":":downcast_face_with_sweat:","symbol":"๐Ÿ˜“"},{"id":":pensive_face:","symbol":"๐Ÿ˜”"},{"id":":confused_face:","symbol":"๐Ÿ˜•"},{"id":":upside-down_face:","symbol":"๐Ÿ™ƒ"},{"id":":money-mouth_face:","symbol":"๐Ÿค‘"},{"id":":astonished_face:","symbol":"๐Ÿ˜ฒ"},{"id":":frowning_face:","symbol":"โ˜น"},{"id":":slightly_frowning_face:","symbol":"๐Ÿ™"},{"id":":confounded_face:","symbol":"๐Ÿ˜–"},{"id":":disappointed_face:","symbol":"๐Ÿ˜ž"},{"id":":worried_face:","symbol":"๐Ÿ˜Ÿ"},{"id":":face_with_steam_from_nose:","symbol":"๐Ÿ˜ค"},{"id":":crying_face:","symbol":"๐Ÿ˜ข"},{"id":":loudly_crying_face:","symbol":"๐Ÿ˜ญ"},{"id":":frowning_face_with_open_mouth:","symbol":"๐Ÿ˜ฆ"},{"id":":anguished_face:","symbol":"๐Ÿ˜ง"},{"id":":fearful_face:","symbol":"๐Ÿ˜จ"},{"id":":weary_face:","symbol":"๐Ÿ˜ฉ"},{"id":":exploding_head:","symbol":"๐Ÿคฏ"},{"id":":grimacing_face:","symbol":"๐Ÿ˜ฌ"},{"id":":anxious_face_with_sweat:","symbol":"๐Ÿ˜ฐ"},{"id":":face_screaming_in_fear:","symbol":"๐Ÿ˜ฑ"},{"id":":flushed_face:","symbol":"๐Ÿ˜ณ"},{"id":":zany_face:","symbol":"๐Ÿคช"},{"id":":dizzy_face:","symbol":"๐Ÿ˜ต"},{"id":":pouting_face:","symbol":"๐Ÿ˜ก"},{"id":":angry_face:","symbol":"๐Ÿ˜ "},{"id":":face_with_symbols_on_mouth:","symbol":"๐Ÿคฌ"},{"id":":face_with_medical_mask:","symbol":"๐Ÿ˜ท"},{"id":":face_with_thermometer:","symbol":"๐Ÿค’"},{"id":":face_with_head-bandage:","symbol":"๐Ÿค•"},{"id":":nauseated_face:","symbol":"๐Ÿคข"},{"id":":face_vomiting:","symbol":"๐Ÿคฎ"},{"id":":sneezing_face:","symbol":"๐Ÿคง"},{"id":":smiling_face_with_halo:","symbol":"๐Ÿ˜‡"},{"id":":cowboy_hat_face:","symbol":"๐Ÿค "},{"id":":lying_face:","symbol":"๐Ÿคฅ"},{"id":":shushing_face:","symbol":"๐Ÿคซ"},{"id":":face_with_hand_over_mouth:","symbol":"๐Ÿคญ"},{"id":":face_with_monocle:","symbol":"๐Ÿง"},{"id":":nerd_face:","symbol":"๐Ÿค“"},{"id":":smiling_face_with_horns:","symbol":"๐Ÿ˜ˆ"},{"id":":angry_face_with_horns:","symbol":"๐Ÿ‘ฟ"},{"id":":clown_face:","symbol":"๐Ÿคก"},{"id":":ogre:","symbol":"๐Ÿ‘น"},{"id":":goblin:","symbol":"๐Ÿ‘บ"},{"id":":skull:","symbol":"๐Ÿ’€"},{"id":":skull_and_crossbones:","symbol":"โ˜ "},{"id":":ghost:","symbol":"๐Ÿ‘ป"},{"id":":alien:","symbol":"๐Ÿ‘ฝ"},{"id":":alien_monster:","symbol":"๐Ÿ‘พ"},{"id":":robot_face:","symbol":"๐Ÿค–"},{"id":":pile_of_poo:","symbol":"๐Ÿ’ฉ"},{"id":":grinning_cat_face:","symbol":"๐Ÿ˜บ"},{"id":":grinning_cat_face_with_smiling_eyes:","symbol":"๐Ÿ˜ธ"},{"id":":cat_face_with_tears_of_joy:","symbol":"๐Ÿ˜น"},{"id":":smiling_cat_face_with_heart-eyes:","symbol":"๐Ÿ˜ป"},{"id":":cat_face_with_wry_smile:","symbol":"๐Ÿ˜ผ"},{"id":":kissing_cat_face:","symbol":"๐Ÿ˜ฝ"},{"id":":weary_cat_face:","symbol":"๐Ÿ™€"},{"id":":crying_cat_face:","symbol":"๐Ÿ˜ฟ"},{"id":":pouting_cat_face:","symbol":"๐Ÿ˜พ"},{"id":":see-no-evil_monkey:","symbol":"๐Ÿ™ˆ"},{"id":":hear-no-evil_monkey:","symbol":"๐Ÿ™‰"},{"id":":speak-no-evil_monkey:","symbol":"๐Ÿ™Š"},{"id":":baby:","symbol":"๐Ÿ‘ถ"},{"id":":child:","symbol":"๐Ÿง’"},{"id":":boy:","symbol":"๐Ÿ‘ฆ"},{"id":":girl:","symbol":"๐Ÿ‘ง"},{"id":":person:","symbol":"๐Ÿง‘"},{"id":":person:_blond_hair:","symbol":"๐Ÿ‘ฑ"},{"id":":man:","symbol":"๐Ÿ‘จ"},{"id":":man:_blond_hair:","symbol":"๐Ÿ‘ฑโ€โ™‚๏ธ"},{"id":":man:_beard:","symbol":"๐Ÿง”"},{"id":":woman:","symbol":"๐Ÿ‘ฉ"},{"id":":woman:_blond_hair:","symbol":"๐Ÿ‘ฑโ€โ™€๏ธ"},{"id":":older_person:","symbol":"๐Ÿง“"},{"id":":old_man:","symbol":"๐Ÿ‘ด"},{"id":":old_woman:","symbol":"๐Ÿ‘ต"},{"id":":man_health_worker:","symbol":"๐Ÿ‘จโ€โš•๏ธ"},{"id":":woman_health_worker:","symbol":"๐Ÿ‘ฉโ€โš•๏ธ"},{"id":":man_student:","symbol":"๐Ÿ‘จโ€๐ŸŽ“"},{"id":":woman_student:","symbol":"๐Ÿ‘ฉโ€๐ŸŽ“"},{"id":":man_teacher:","symbol":"๐Ÿ‘จโ€๐Ÿซ"},{"id":":woman_teacher:","symbol":"๐Ÿ‘ฉโ€๐Ÿซ"},{"id":":man_judge:","symbol":"๐Ÿ‘จโ€โš–๏ธ"},{"id":":woman_judge:","symbol":"๐Ÿ‘ฉโ€โš–๏ธ"},{"id":":man_farmer:","symbol":"๐Ÿ‘จโ€๐ŸŒพ"},{"id":":woman_farmer:","symbol":"๐Ÿ‘ฉโ€๐ŸŒพ"},{"id":":man_cook:","symbol":"๐Ÿ‘จโ€๐Ÿณ"},{"id":":woman_cook:","symbol":"๐Ÿ‘ฉโ€๐Ÿณ"},{"id":":man_mechanic:","symbol":"๐Ÿ‘จโ€๐Ÿ”ง"},{"id":":woman_mechanic:","symbol":"๐Ÿ‘ฉโ€๐Ÿ”ง"},{"id":":man_factory_worker:","symbol":"๐Ÿ‘จโ€๐Ÿญ"},{"id":":woman_factory_worker:","symbol":"๐Ÿ‘ฉโ€๐Ÿญ"},{"id":":man_office_worker:","symbol":"๐Ÿ‘จโ€๐Ÿ’ผ"},{"id":":woman_office_worker:","symbol":"๐Ÿ‘ฉโ€๐Ÿ’ผ"},{"id":":man_scientist:","symbol":"๐Ÿ‘จโ€๐Ÿ”ฌ"},{"id":":woman_scientist:","symbol":"๐Ÿ‘ฉโ€๐Ÿ”ฌ"},{"id":":man_technologist:","symbol":"๐Ÿ‘จโ€๐Ÿ’ป"},{"id":":woman_technologist:","symbol":"๐Ÿ‘ฉโ€๐Ÿ’ป"},{"id":":man_singer:","symbol":"๐Ÿ‘จโ€๐ŸŽค"},{"id":":woman_singer:","symbol":"๐Ÿ‘ฉโ€๐ŸŽค"},{"id":":man_artist:","symbol":"๐Ÿ‘จโ€๐ŸŽจ"},{"id":":woman_artist:","symbol":"๐Ÿ‘ฉโ€๐ŸŽจ"},{"id":":man_pilot:","symbol":"๐Ÿ‘จโ€โœˆ๏ธ"},{"id":":woman_pilot:","symbol":"๐Ÿ‘ฉโ€โœˆ๏ธ"},{"id":":man_astronaut:","symbol":"๐Ÿ‘จโ€๐Ÿš€"},{"id":":woman_astronaut:","symbol":"๐Ÿ‘ฉโ€๐Ÿš€"},{"id":":man_firefighter:","symbol":"๐Ÿ‘จโ€๐Ÿš’"},{"id":":woman_firefighter:","symbol":"๐Ÿ‘ฉโ€๐Ÿš’"},{"id":":police_officer:","symbol":"๐Ÿ‘ฎ"},{"id":":man_police_officer:","symbol":"๐Ÿ‘ฎโ€โ™‚๏ธ"},{"id":":woman_police_officer:","symbol":"๐Ÿ‘ฎโ€โ™€๏ธ"},{"id":":detective:","symbol":"๐Ÿ•ต"},{"id":":man_detective:","symbol":"๐Ÿ•ต๏ธโ€โ™‚๏ธ"},{"id":":woman_detective:","symbol":"๐Ÿ•ต๏ธโ€โ™€๏ธ"},{"id":":guard:","symbol":"๐Ÿ’‚"},{"id":":man_guard:","symbol":"๐Ÿ’‚โ€โ™‚๏ธ"},{"id":":woman_guard:","symbol":"๐Ÿ’‚โ€โ™€๏ธ"},{"id":":construction_worker:","symbol":"๐Ÿ‘ท"},{"id":":man_construction_worker:","symbol":"๐Ÿ‘ทโ€โ™‚๏ธ"},{"id":":woman_construction_worker:","symbol":"๐Ÿ‘ทโ€โ™€๏ธ"},{"id":":prince:","symbol":"๐Ÿคด"},{"id":":princess:","symbol":"๐Ÿ‘ธ"},{"id":":person_wearing_turban:","symbol":"๐Ÿ‘ณ"},{"id":":man_wearing_turban:","symbol":"๐Ÿ‘ณโ€โ™‚๏ธ"},{"id":":woman_wearing_turban:","symbol":"๐Ÿ‘ณโ€โ™€๏ธ"},{"id":":man_with_Chinese_cap:","symbol":"๐Ÿ‘ฒ"},{"id":":woman_with_headscarf:","symbol":"๐Ÿง•"},{"id":":man_in_tuxedo:","symbol":"๐Ÿคต"},{"id":":bride_with_veil:","symbol":"๐Ÿ‘ฐ"},{"id":":pregnant_woman:","symbol":"๐Ÿคฐ"},{"id":":breast-feeding:","symbol":"๐Ÿคฑ"},{"id":":baby_angel:","symbol":"๐Ÿ‘ผ"},{"id":":Santa_Claus:","symbol":"๐ŸŽ…"},{"id":":Mrs._Claus:","symbol":"๐Ÿคถ"},{"id":":mage:","symbol":"๐Ÿง™"},{"id":":woman_mage:","symbol":"๐Ÿง™โ€โ™€๏ธ"},{"id":":man_mage:","symbol":"๐Ÿง™โ€โ™‚๏ธ"},{"id":":fairy:","symbol":"๐Ÿงš"},{"id":":woman_fairy:","symbol":"๐Ÿงšโ€โ™€๏ธ"},{"id":":man_fairy:","symbol":"๐Ÿงšโ€โ™‚๏ธ"},{"id":":vampire:","symbol":"๐Ÿง›"},{"id":":woman_vampire:","symbol":"๐Ÿง›โ€โ™€๏ธ"},{"id":":man_vampire:","symbol":"๐Ÿง›โ€โ™‚๏ธ"},{"id":":merperson:","symbol":"๐Ÿงœ"},{"id":":mermaid:","symbol":"๐Ÿงœโ€โ™€๏ธ"},{"id":":merman:","symbol":"๐Ÿงœโ€โ™‚๏ธ"},{"id":":elf:","symbol":"๐Ÿง"},{"id":":woman_elf:","symbol":"๐Ÿงโ€โ™€๏ธ"},{"id":":man_elf:","symbol":"๐Ÿงโ€โ™‚๏ธ"},{"id":":genie:","symbol":"๐Ÿงž"},{"id":":woman_genie:","symbol":"๐Ÿงžโ€โ™€๏ธ"},{"id":":man_genie:","symbol":"๐Ÿงžโ€โ™‚๏ธ"},{"id":":zombie:","symbol":"๐ŸงŸ"},{"id":":woman_zombie:","symbol":"๐ŸงŸโ€โ™€๏ธ"},{"id":":man_zombie:","symbol":"๐ŸงŸโ€โ™‚๏ธ"},{"id":":person_frowning:","symbol":"๐Ÿ™"},{"id":":man_frowning:","symbol":"๐Ÿ™โ€โ™‚๏ธ"},{"id":":woman_frowning:","symbol":"๐Ÿ™โ€โ™€๏ธ"},{"id":":person_pouting:","symbol":"๐Ÿ™Ž"},{"id":":man_pouting:","symbol":"๐Ÿ™Žโ€โ™‚๏ธ"},{"id":":woman_pouting:","symbol":"๐Ÿ™Žโ€โ™€๏ธ"},{"id":":person_gesturing_NO:","symbol":"๐Ÿ™…"},{"id":":man_gesturing_NO:","symbol":"๐Ÿ™…โ€โ™‚๏ธ"},{"id":":woman_gesturing_NO:","symbol":"๐Ÿ™…โ€โ™€๏ธ"},{"id":":person_gesturing_OK:","symbol":"๐Ÿ™†"},{"id":":man_gesturing_OK:","symbol":"๐Ÿ™†โ€โ™‚๏ธ"},{"id":":woman_gesturing_OK:","symbol":"๐Ÿ™†โ€โ™€๏ธ"},{"id":":person_tipping_hand:","symbol":"๐Ÿ’"},{"id":":man_tipping_hand:","symbol":"๐Ÿ’โ€โ™‚๏ธ"},{"id":":woman_tipping_hand:","symbol":"๐Ÿ’โ€โ™€๏ธ"},{"id":":person_raising_hand:","symbol":"๐Ÿ™‹"},{"id":":man_raising_hand:","symbol":"๐Ÿ™‹โ€โ™‚๏ธ"},{"id":":woman_raising_hand:","symbol":"๐Ÿ™‹โ€โ™€๏ธ"},{"id":":person_bowing:","symbol":"๐Ÿ™‡"},{"id":":man_bowing:","symbol":"๐Ÿ™‡โ€โ™‚๏ธ"},{"id":":woman_bowing:","symbol":"๐Ÿ™‡โ€โ™€๏ธ"},{"id":":person_facepalming:","symbol":"๐Ÿคฆ"},{"id":":man_facepalming:","symbol":"๐Ÿคฆโ€โ™‚๏ธ"},{"id":":woman_facepalming:","symbol":"๐Ÿคฆโ€โ™€๏ธ"},{"id":":person_shrugging:","symbol":"๐Ÿคท"},{"id":":man_shrugging:","symbol":"๐Ÿคทโ€โ™‚๏ธ"},{"id":":woman_shrugging:","symbol":"๐Ÿคทโ€โ™€๏ธ"},{"id":":person_getting_massage:","symbol":"๐Ÿ’†"},{"id":":man_getting_massage:","symbol":"๐Ÿ’†โ€โ™‚๏ธ"},{"id":":woman_getting_massage:","symbol":"๐Ÿ’†โ€โ™€๏ธ"},{"id":":person_getting_haircut:","symbol":"๐Ÿ’‡"},{"id":":man_getting_haircut:","symbol":"๐Ÿ’‡โ€โ™‚๏ธ"},{"id":":woman_getting_haircut:","symbol":"๐Ÿ’‡โ€โ™€๏ธ"},{"id":":person_walking:","symbol":"๐Ÿšถ"},{"id":":man_walking:","symbol":"๐Ÿšถโ€โ™‚๏ธ"},{"id":":woman_walking:","symbol":"๐Ÿšถโ€โ™€๏ธ"},{"id":":person_running:","symbol":"๐Ÿƒ"},{"id":":man_running:","symbol":"๐Ÿƒโ€โ™‚๏ธ"},{"id":":woman_running:","symbol":"๐Ÿƒโ€โ™€๏ธ"},{"id":":woman_dancing:","symbol":"๐Ÿ’ƒ"},{"id":":man_dancing:","symbol":"๐Ÿ•บ"},{"id":":people_with_bunny_ears:","symbol":"๐Ÿ‘ฏ"},{"id":":men_with_bunny_ears:","symbol":"๐Ÿ‘ฏโ€โ™‚๏ธ"},{"id":":women_with_bunny_ears:","symbol":"๐Ÿ‘ฏโ€โ™€๏ธ"},{"id":":person_in_steamy_room:","symbol":"๐Ÿง–"},{"id":":woman_in_steamy_room:","symbol":"๐Ÿง–โ€โ™€๏ธ"},{"id":":man_in_steamy_room:","symbol":"๐Ÿง–โ€โ™‚๏ธ"},{"id":":person_climbing:","symbol":"๐Ÿง—"},{"id":":woman_climbing:","symbol":"๐Ÿง—โ€โ™€๏ธ"},{"id":":man_climbing:","symbol":"๐Ÿง—โ€โ™‚๏ธ"},{"id":":person_in_lotus_position:","symbol":"๐Ÿง˜"},{"id":":woman_in_lotus_position:","symbol":"๐Ÿง˜โ€โ™€๏ธ"},{"id":":man_in_lotus_position:","symbol":"๐Ÿง˜โ€โ™‚๏ธ"},{"id":":person_taking_bath:","symbol":"๐Ÿ›€"},{"id":":person_in_bed:","symbol":"๐Ÿ›Œ"},{"id":":man_in_suit_levitating:","symbol":"๐Ÿ•ด"},{"id":":speaking_head:","symbol":"๐Ÿ—ฃ"},{"id":":bust_in_silhouette:","symbol":"๐Ÿ‘ค"},{"id":":busts_in_silhouette:","symbol":"๐Ÿ‘ฅ"},{"id":":person_fencing:","symbol":"๐Ÿคบ"},{"id":":horse_racing:","symbol":"๐Ÿ‡"},{"id":":skier:","symbol":"โ›ท"},{"id":":snowboarder:","symbol":"๐Ÿ‚"},{"id":":person_golfing:","symbol":"๐ŸŒ"},{"id":":man_golfing:","symbol":"๐ŸŒ๏ธโ€โ™‚๏ธ"},{"id":":woman_golfing:","symbol":"๐ŸŒ๏ธโ€โ™€๏ธ"},{"id":":person_surfing:","symbol":"๐Ÿ„"},{"id":":man_surfing:","symbol":"๐Ÿ„โ€โ™‚๏ธ"},{"id":":woman_surfing:","symbol":"๐Ÿ„โ€โ™€๏ธ"},{"id":":person_rowing_boat:","symbol":"๐Ÿšฃ"},{"id":":man_rowing_boat:","symbol":"๐Ÿšฃโ€โ™‚๏ธ"},{"id":":woman_rowing_boat:","symbol":"๐Ÿšฃโ€โ™€๏ธ"},{"id":":person_swimming:","symbol":"๐ŸŠ"},{"id":":man_swimming:","symbol":"๐ŸŠโ€โ™‚๏ธ"},{"id":":woman_swimming:","symbol":"๐ŸŠโ€โ™€๏ธ"},{"id":":person_bouncing_ball:","symbol":"โ›น"},{"id":":man_bouncing_ball:","symbol":"โ›น๏ธโ€โ™‚๏ธ"},{"id":":woman_bouncing_ball:","symbol":"โ›น๏ธโ€โ™€๏ธ"},{"id":":person_lifting_weights:","symbol":"๐Ÿ‹"},{"id":":man_lifting_weights:","symbol":"๐Ÿ‹๏ธโ€โ™‚๏ธ"},{"id":":woman_lifting_weights:","symbol":"๐Ÿ‹๏ธโ€โ™€๏ธ"},{"id":":person_biking:","symbol":"๐Ÿšด"},{"id":":man_biking:","symbol":"๐Ÿšดโ€โ™‚๏ธ"},{"id":":woman_biking:","symbol":"๐Ÿšดโ€โ™€๏ธ"},{"id":":person_mountain_biking:","symbol":"๐Ÿšต"},{"id":":man_mountain_biking:","symbol":"๐Ÿšตโ€โ™‚๏ธ"},{"id":":woman_mountain_biking:","symbol":"๐Ÿšตโ€โ™€๏ธ"},{"id":":racing_car:","symbol":"๐ŸŽ"},{"id":":motorcycle:","symbol":"๐Ÿ"},{"id":":person_cartwheeling:","symbol":"๐Ÿคธ"},{"id":":man_cartwheeling:","symbol":"๐Ÿคธโ€โ™‚๏ธ"},{"id":":woman_cartwheeling:","symbol":"๐Ÿคธโ€โ™€๏ธ"},{"id":":people_wrestling:","symbol":"๐Ÿคผ"},{"id":":men_wrestling:","symbol":"๐Ÿคผโ€โ™‚๏ธ"},{"id":":women_wrestling:","symbol":"๐Ÿคผโ€โ™€๏ธ"},{"id":":person_playing_water_polo:","symbol":"๐Ÿคฝ"},{"id":":man_playing_water_polo:","symbol":"๐Ÿคฝโ€โ™‚๏ธ"},{"id":":woman_playing_water_polo:","symbol":"๐Ÿคฝโ€โ™€๏ธ"},{"id":":person_playing_handball:","symbol":"๐Ÿคพ"},{"id":":man_playing_handball:","symbol":"๐Ÿคพโ€โ™‚๏ธ"},{"id":":woman_playing_handball:","symbol":"๐Ÿคพโ€โ™€๏ธ"},{"id":":person_juggling:","symbol":"๐Ÿคน"},{"id":":man_juggling:","symbol":"๐Ÿคนโ€โ™‚๏ธ"},{"id":":woman_juggling:","symbol":"๐Ÿคนโ€โ™€๏ธ"},{"id":":man_and_woman_holding_hands:","symbol":"๐Ÿ‘ซ"},{"id":":two_men_holding_hands:","symbol":"๐Ÿ‘ฌ"},{"id":":two_women_holding_hands:","symbol":"๐Ÿ‘ญ"},{"id":":kiss:","symbol":"๐Ÿ’"},{"id":":kiss:_woman_man:","symbol":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ"},{"id":":kiss:_man_man:","symbol":"๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ"},{"id":":kiss:_woman_woman:","symbol":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ"},{"id":":couple_with_heart:","symbol":"๐Ÿ’‘"},{"id":":couple_with_heart:_woman_man:","symbol":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ"},{"id":":couple_with_heart:_man_man:","symbol":"๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ"},{"id":":couple_with_heart:_woman_woman:","symbol":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ"},{"id":":family:","symbol":"๐Ÿ‘ช"},{"id":":family:_man_woman_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ"},{"id":":family:_man_woman_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง"},{"id":":family:_man_woman_girl_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_man_woman_boy_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_man_woman_girl_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":family:_man_man_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ"},{"id":":family:_man_man_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง"},{"id":":family:_man_man_girl_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_man_man_boy_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_man_man_girl_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":family:_woman_woman_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ"},{"id":":family:_woman_woman_girl:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง"},{"id":":family:_woman_woman_girl_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_woman_woman_boy_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_woman_woman_girl_girl:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":family:_man_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฆ"},{"id":":family:_man_boy_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_man_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ง"},{"id":":family:_man_girl_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_man_girl_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":family:_woman_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฆ"},{"id":":family:_woman_boy_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_woman_girl:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ง"},{"id":":family:_woman_girl_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_woman_girl_girl:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":selfie:","symbol":"๐Ÿคณ"},{"id":":flexed_biceps:","symbol":"๐Ÿ’ช"},{"id":":backhand_index_pointing_left:","symbol":"๐Ÿ‘ˆ"},{"id":":backhand_index_pointing_right:","symbol":"๐Ÿ‘‰"},{"id":":index_pointing_up:","symbol":"โ˜"},{"id":":backhand_index_pointing_up:","symbol":"๐Ÿ‘†"},{"id":":middle_finger:","symbol":"๐Ÿ–•"},{"id":":backhand_index_pointing_down:","symbol":"๐Ÿ‘‡"},{"id":":victory_hand:","symbol":"โœŒ"},{"id":":crossed_fingers:","symbol":"๐Ÿคž"},{"id":":vulcan_salute:","symbol":"๐Ÿ––"},{"id":":sign_of_the_horns:","symbol":"๐Ÿค˜"},{"id":":call_me_hand:","symbol":"๐Ÿค™"},{"id":":hand_with_fingers_splayed:","symbol":"๐Ÿ–"},{"id":":raised_hand:","symbol":"โœ‹"},{"id":":OK_hand:","symbol":"๐Ÿ‘Œ"},{"id":":thumbs_up:","symbol":"๐Ÿ‘"},{"id":":thumbs_down:","symbol":"๐Ÿ‘Ž"},{"id":":raised_fist:","symbol":"โœŠ"},{"id":":oncoming_fist:","symbol":"๐Ÿ‘Š"},{"id":":left-facing_fist:","symbol":"๐Ÿค›"},{"id":":right-facing_fist:","symbol":"๐Ÿคœ"},{"id":":raised_back_of_hand:","symbol":"๐Ÿคš"},{"id":":waving_hand:","symbol":"๐Ÿ‘‹"},{"id":":love-you_gesture:","symbol":"๐ŸคŸ"},{"id":":writing_hand:","symbol":"โœ"},{"id":":clapping_hands:","symbol":"๐Ÿ‘"},{"id":":open_hands:","symbol":"๐Ÿ‘"},{"id":":raising_hands:","symbol":"๐Ÿ™Œ"},{"id":":palms_up_together:","symbol":"๐Ÿคฒ"},{"id":":folded_hands:","symbol":"๐Ÿ™"},{"id":":handshake:","symbol":"๐Ÿค"},{"id":":nail_polish:","symbol":"๐Ÿ’…"},{"id":":ear:","symbol":"๐Ÿ‘‚"},{"id":":nose:","symbol":"๐Ÿ‘ƒ"},{"id":":footprints:","symbol":"๐Ÿ‘ฃ"},{"id":":eyes:","symbol":"๐Ÿ‘€"},{"id":":eye:","symbol":"๐Ÿ‘"},{"id":":eye_in_speech_bubble:","symbol":"๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ"},{"id":":brain:","symbol":"๐Ÿง "},{"id":":tongue:","symbol":"๐Ÿ‘…"},{"id":":mouth:","symbol":"๐Ÿ‘„"},{"id":":kiss_mark:","symbol":"๐Ÿ’‹"},{"id":":heart_with_arrow:","symbol":"๐Ÿ’˜"},{"id":":heart_with_ribbon:","symbol":"๐Ÿ’"},{"id":":sparkling_heart:","symbol":"๐Ÿ’–"},{"id":":growing_heart:","symbol":"๐Ÿ’—"},{"id":":beating_heart:","symbol":"๐Ÿ’“"},{"id":":revolving_hearts:","symbol":"๐Ÿ’ž"},{"id":":two_hearts:","symbol":"๐Ÿ’•"},{"id":":love_letter:","symbol":"๐Ÿ’Œ"},{"id":":heavy_heart_exclamation:","symbol":"โฃ"},{"id":":broken_heart:","symbol":"๐Ÿ’”"},{"id":":red_heart:","symbol":"โค"},{"id":":orange_heart:","symbol":"๐Ÿงก"},{"id":":yellow_heart:","symbol":"๐Ÿ’›"},{"id":":green_heart:","symbol":"๐Ÿ’š"},{"id":":blue_heart:","symbol":"๐Ÿ’™"},{"id":":purple_heart:","symbol":"๐Ÿ’œ"},{"id":":black_heart:","symbol":"๐Ÿ–ค"},{"id":":heart_decoration:","symbol":"๐Ÿ’Ÿ"},{"id":":zzz:","symbol":"๐Ÿ’ค"},{"id":":anger_symbol:","symbol":"๐Ÿ’ข"},{"id":":bomb:","symbol":"๐Ÿ’ฃ"},{"id":":collision:","symbol":"๐Ÿ’ฅ"},{"id":":sweat_droplets:","symbol":"๐Ÿ’ฆ"},{"id":":dashing_away:","symbol":"๐Ÿ’จ"},{"id":":dizzy:","symbol":"๐Ÿ’ซ"},{"id":":speech_balloon:","symbol":"๐Ÿ’ฌ"},{"id":":left_speech_bubble:","symbol":"๐Ÿ—จ"},{"id":":right_anger_bubble:","symbol":"๐Ÿ—ฏ"},{"id":":thought_balloon:","symbol":"๐Ÿ’ญ"},{"id":":hole:","symbol":"๐Ÿ•ณ"},{"id":":glasses:","symbol":"๐Ÿ‘“"},{"id":":sunglasses:","symbol":"๐Ÿ•ถ"},{"id":":necktie:","symbol":"๐Ÿ‘”"},{"id":":t-shirt:","symbol":"๐Ÿ‘•"},{"id":":jeans:","symbol":"๐Ÿ‘–"},{"id":":scarf:","symbol":"๐Ÿงฃ"},{"id":":gloves:","symbol":"๐Ÿงค"},{"id":":coat:","symbol":"๐Ÿงฅ"},{"id":":socks:","symbol":"๐Ÿงฆ"},{"id":":dress:","symbol":"๐Ÿ‘—"},{"id":":kimono:","symbol":"๐Ÿ‘˜"},{"id":":bikini:","symbol":"๐Ÿ‘™"},{"id":":womanโ€™s_clothes:","symbol":"๐Ÿ‘š"},{"id":":purse:","symbol":"๐Ÿ‘›"},{"id":":handbag:","symbol":"๐Ÿ‘œ"},{"id":":clutch_bag:","symbol":"๐Ÿ‘"},{"id":":shopping_bags:","symbol":"๐Ÿ›"},{"id":":backpack:","symbol":"๐ŸŽ’"},{"id":":manโ€™s_shoe:","symbol":"๐Ÿ‘ž"},{"id":":running_shoe:","symbol":"๐Ÿ‘Ÿ"},{"id":":high-heeled_shoe:","symbol":"๐Ÿ‘ "},{"id":":womanโ€™s_sandal:","symbol":"๐Ÿ‘ก"},{"id":":womanโ€™s_boot:","symbol":"๐Ÿ‘ข"},{"id":":crown:","symbol":"๐Ÿ‘‘"},{"id":":womanโ€™s_hat:","symbol":"๐Ÿ‘’"},{"id":":top_hat:","symbol":"๐ŸŽฉ"},{"id":":graduation_cap:","symbol":"๐ŸŽ“"},{"id":":billed_cap:","symbol":"๐Ÿงข"},{"id":":rescue_workerโ€™s_helmet:","symbol":"โ›‘"},{"id":":prayer_beads:","symbol":"๐Ÿ“ฟ"},{"id":":lipstick:","symbol":"๐Ÿ’„"},{"id":":ring:","symbol":"๐Ÿ’"},{"id":":gem_stone:","symbol":"๐Ÿ’Ž"},{"id":":monkey_face:","symbol":"๐Ÿต"},{"id":":monkey:","symbol":"๐Ÿ’"},{"id":":gorilla:","symbol":"๐Ÿฆ"},{"id":":dog_face:","symbol":"๐Ÿถ"},{"id":":dog:","symbol":"๐Ÿ•"},{"id":":poodle:","symbol":"๐Ÿฉ"},{"id":":wolf_face:","symbol":"๐Ÿบ"},{"id":":fox_face:","symbol":"๐ŸฆŠ"},{"id":":cat_face:","symbol":"๐Ÿฑ"},{"id":":cat:","symbol":"๐Ÿˆ"},{"id":":lion_face:","symbol":"๐Ÿฆ"},{"id":":tiger_face:","symbol":"๐Ÿฏ"},{"id":":tiger:","symbol":"๐Ÿ…"},{"id":":leopard:","symbol":"๐Ÿ†"},{"id":":horse_face:","symbol":"๐Ÿด"},{"id":":horse:","symbol":"๐ŸŽ"},{"id":":unicorn_face:","symbol":"๐Ÿฆ„"},{"id":":zebra:","symbol":"๐Ÿฆ“"},{"id":":deer:","symbol":"๐ŸฆŒ"},{"id":":cow_face:","symbol":"๐Ÿฎ"},{"id":":ox:","symbol":"๐Ÿ‚"},{"id":":water_buffalo:","symbol":"๐Ÿƒ"},{"id":":cow:","symbol":"๐Ÿ„"},{"id":":pig_face:","symbol":"๐Ÿท"},{"id":":pig:","symbol":"๐Ÿ–"},{"id":":boar:","symbol":"๐Ÿ—"},{"id":":pig_nose:","symbol":"๐Ÿฝ"},{"id":":ram:","symbol":"๐Ÿ"},{"id":":ewe:","symbol":"๐Ÿ‘"},{"id":":goat:","symbol":"๐Ÿ"},{"id":":camel:","symbol":"๐Ÿช"},{"id":":two-hump_camel:","symbol":"๐Ÿซ"},{"id":":giraffe:","symbol":"๐Ÿฆ’"},{"id":":elephant:","symbol":"๐Ÿ˜"},{"id":":rhinoceros:","symbol":"๐Ÿฆ"},{"id":":mouse_face:","symbol":"๐Ÿญ"},{"id":":mouse:","symbol":"๐Ÿ"},{"id":":rat:","symbol":"๐Ÿ€"},{"id":":hamster_face:","symbol":"๐Ÿน"},{"id":":rabbit_face:","symbol":"๐Ÿฐ"},{"id":":rabbit:","symbol":"๐Ÿ‡"},{"id":":chipmunk:","symbol":"๐Ÿฟ"},{"id":":hedgehog:","symbol":"๐Ÿฆ”"},{"id":":bat:","symbol":"๐Ÿฆ‡"},{"id":":bear_face:","symbol":"๐Ÿป"},{"id":":koala:","symbol":"๐Ÿจ"},{"id":":panda_face:","symbol":"๐Ÿผ"},{"id":":paw_prints:","symbol":"๐Ÿพ"},{"id":":turkey:","symbol":"๐Ÿฆƒ"},{"id":":chicken:","symbol":"๐Ÿ”"},{"id":":rooster:","symbol":"๐Ÿ“"},{"id":":hatching_chick:","symbol":"๐Ÿฃ"},{"id":":baby_chick:","symbol":"๐Ÿค"},{"id":":front-facing_baby_chick:","symbol":"๐Ÿฅ"},{"id":":bird:","symbol":"๐Ÿฆ"},{"id":":penguin:","symbol":"๐Ÿง"},{"id":":dove:","symbol":"๐Ÿ•Š"},{"id":":eagle:","symbol":"๐Ÿฆ…"},{"id":":duck:","symbol":"๐Ÿฆ†"},{"id":":owl:","symbol":"๐Ÿฆ‰"},{"id":":frog_face:","symbol":"๐Ÿธ"},{"id":":crocodile:","symbol":"๐ŸŠ"},{"id":":turtle:","symbol":"๐Ÿข"},{"id":":lizard:","symbol":"๐ŸฆŽ"},{"id":":snake:","symbol":"๐Ÿ"},{"id":":dragon_face:","symbol":"๐Ÿฒ"},{"id":":dragon:","symbol":"๐Ÿ‰"},{"id":":sauropod:","symbol":"๐Ÿฆ•"},{"id":":T-Rex:","symbol":"๐Ÿฆ–"},{"id":":spouting_whale:","symbol":"๐Ÿณ"},{"id":":whale:","symbol":"๐Ÿ‹"},{"id":":dolphin:","symbol":"๐Ÿฌ"},{"id":":fish:","symbol":"๐ŸŸ"},{"id":":tropical_fish:","symbol":"๐Ÿ "},{"id":":blowfish:","symbol":"๐Ÿก"},{"id":":shark:","symbol":"๐Ÿฆˆ"},{"id":":octopus:","symbol":"๐Ÿ™"},{"id":":spiral_shell:","symbol":"๐Ÿš"},{"id":":crab:","symbol":"๐Ÿฆ€"},{"id":":shrimp:","symbol":"๐Ÿฆ"},{"id":":squid:","symbol":"๐Ÿฆ‘"},{"id":":snail:","symbol":"๐ŸŒ"},{"id":":butterfly:","symbol":"๐Ÿฆ‹"},{"id":":bug:","symbol":"๐Ÿ›"},{"id":":ant:","symbol":"๐Ÿœ"},{"id":":honeybee:","symbol":"๐Ÿ"},{"id":":lady_beetle:","symbol":"๐Ÿž"},{"id":":cricket:","symbol":"๐Ÿฆ—"},{"id":":spider:","symbol":"๐Ÿ•ท"},{"id":":spider_web:","symbol":"๐Ÿ•ธ"},{"id":":scorpion:","symbol":"๐Ÿฆ‚"},{"id":":bouquet:","symbol":"๐Ÿ’"},{"id":":cherry_blossom:","symbol":"๐ŸŒธ"},{"id":":white_flower:","symbol":"๐Ÿ’ฎ"},{"id":":rosette:","symbol":"๐Ÿต"},{"id":":rose:","symbol":"๐ŸŒน"},{"id":":wilted_flower:","symbol":"๐Ÿฅ€"},{"id":":hibiscus:","symbol":"๐ŸŒบ"},{"id":":sunflower:","symbol":"๐ŸŒป"},{"id":":blossom:","symbol":"๐ŸŒผ"},{"id":":tulip:","symbol":"๐ŸŒท"},{"id":":seedling:","symbol":"๐ŸŒฑ"},{"id":":evergreen_tree:","symbol":"๐ŸŒฒ"},{"id":":deciduous_tree:","symbol":"๐ŸŒณ"},{"id":":palm_tree:","symbol":"๐ŸŒด"},{"id":":cactus:","symbol":"๐ŸŒต"},{"id":":sheaf_of_rice:","symbol":"๐ŸŒพ"},{"id":":herb:","symbol":"๐ŸŒฟ"},{"id":":shamrock:","symbol":"โ˜˜"},{"id":":four_leaf_clover:","symbol":"๐Ÿ€"},{"id":":maple_leaf:","symbol":"๐Ÿ"},{"id":":fallen_leaf:","symbol":"๐Ÿ‚"},{"id":":leaf_fluttering_in_wind:","symbol":"๐Ÿƒ"},{"id":":grapes:","symbol":"๐Ÿ‡"},{"id":":melon:","symbol":"๐Ÿˆ"},{"id":":watermelon:","symbol":"๐Ÿ‰"},{"id":":tangerine:","symbol":"๐ŸŠ"},{"id":":lemon:","symbol":"๐Ÿ‹"},{"id":":banana:","symbol":"๐ŸŒ"},{"id":":pineapple:","symbol":"๐Ÿ"},{"id":":red_apple:","symbol":"๐ŸŽ"},{"id":":green_apple:","symbol":"๐Ÿ"},{"id":":pear:","symbol":"๐Ÿ"},{"id":":peach:","symbol":"๐Ÿ‘"},{"id":":cherries:","symbol":"๐Ÿ’"},{"id":":strawberry:","symbol":"๐Ÿ“"},{"id":":kiwi_fruit:","symbol":"๐Ÿฅ"},{"id":":tomato:","symbol":"๐Ÿ…"},{"id":":coconut:","symbol":"๐Ÿฅฅ"},{"id":":avocado:","symbol":"๐Ÿฅ‘"},{"id":":eggplant:","symbol":"๐Ÿ†"},{"id":":potato:","symbol":"๐Ÿฅ”"},{"id":":carrot:","symbol":"๐Ÿฅ•"},{"id":":ear_of_corn:","symbol":"๐ŸŒฝ"},{"id":":hot_pepper:","symbol":"๐ŸŒถ"},{"id":":cucumber:","symbol":"๐Ÿฅ’"},{"id":":broccoli:","symbol":"๐Ÿฅฆ"},{"id":":mushroom:","symbol":"๐Ÿ„"},{"id":":peanuts:","symbol":"๐Ÿฅœ"},{"id":":chestnut:","symbol":"๐ŸŒฐ"},{"id":":bread:","symbol":"๐Ÿž"},{"id":":croissant:","symbol":"๐Ÿฅ"},{"id":":baguette_bread:","symbol":"๐Ÿฅ–"},{"id":":pretzel:","symbol":"๐Ÿฅจ"},{"id":":pancakes:","symbol":"๐Ÿฅž"},{"id":":cheese_wedge:","symbol":"๐Ÿง€"},{"id":":meat_on_bone:","symbol":"๐Ÿ–"},{"id":":poultry_leg:","symbol":"๐Ÿ—"},{"id":":cut_of_meat:","symbol":"๐Ÿฅฉ"},{"id":":bacon:","symbol":"๐Ÿฅ“"},{"id":":hamburger:","symbol":"๐Ÿ”"},{"id":":french_fries:","symbol":"๐ŸŸ"},{"id":":pizza:","symbol":"๐Ÿ•"},{"id":":hot_dog:","symbol":"๐ŸŒญ"},{"id":":sandwich:","symbol":"๐Ÿฅช"},{"id":":taco:","symbol":"๐ŸŒฎ"},{"id":":burrito:","symbol":"๐ŸŒฏ"},{"id":":stuffed_flatbread:","symbol":"๐Ÿฅ™"},{"id":":egg:","symbol":"๐Ÿฅš"},{"id":":cooking:","symbol":"๐Ÿณ"},{"id":":shallow_pan_of_food:","symbol":"๐Ÿฅ˜"},{"id":":pot_of_food:","symbol":"๐Ÿฒ"},{"id":":bowl_with_spoon:","symbol":"๐Ÿฅฃ"},{"id":":green_salad:","symbol":"๐Ÿฅ—"},{"id":":popcorn:","symbol":"๐Ÿฟ"},{"id":":canned_food:","symbol":"๐Ÿฅซ"},{"id":":bento_box:","symbol":"๐Ÿฑ"},{"id":":rice_cracker:","symbol":"๐Ÿ˜"},{"id":":rice_ball:","symbol":"๐Ÿ™"},{"id":":cooked_rice:","symbol":"๐Ÿš"},{"id":":curry_rice:","symbol":"๐Ÿ›"},{"id":":steaming_bowl:","symbol":"๐Ÿœ"},{"id":":spaghetti:","symbol":"๐Ÿ"},{"id":":roasted_sweet_potato:","symbol":"๐Ÿ "},{"id":":oden:","symbol":"๐Ÿข"},{"id":":sushi:","symbol":"๐Ÿฃ"},{"id":":fried_shrimp:","symbol":"๐Ÿค"},{"id":":fish_cake_with_swirl:","symbol":"๐Ÿฅ"},{"id":":dango:","symbol":"๐Ÿก"},{"id":":dumpling:","symbol":"๐ŸฅŸ"},{"id":":fortune_cookie:","symbol":"๐Ÿฅ "},{"id":":takeout_box:","symbol":"๐Ÿฅก"},{"id":":soft_ice_cream:","symbol":"๐Ÿฆ"},{"id":":shaved_ice:","symbol":"๐Ÿง"},{"id":":ice_cream:","symbol":"๐Ÿจ"},{"id":":doughnut:","symbol":"๐Ÿฉ"},{"id":":cookie:","symbol":"๐Ÿช"},{"id":":birthday_cake:","symbol":"๐ŸŽ‚"},{"id":":shortcake:","symbol":"๐Ÿฐ"},{"id":":pie:","symbol":"๐Ÿฅง"},{"id":":chocolate_bar:","symbol":"๐Ÿซ"},{"id":":candy:","symbol":"๐Ÿฌ"},{"id":":lollipop:","symbol":"๐Ÿญ"},{"id":":custard:","symbol":"๐Ÿฎ"},{"id":":honey_pot:","symbol":"๐Ÿฏ"},{"id":":baby_bottle:","symbol":"๐Ÿผ"},{"id":":glass_of_milk:","symbol":"๐Ÿฅ›"},{"id":":hot_beverage:","symbol":"โ˜•"},{"id":":teacup_without_handle:","symbol":"๐Ÿต"},{"id":":sake:","symbol":"๐Ÿถ"},{"id":":bottle_with_popping_cork:","symbol":"๐Ÿพ"},{"id":":wine_glass:","symbol":"๐Ÿท"},{"id":":cocktail_glass:","symbol":"๐Ÿธ"},{"id":":tropical_drink:","symbol":"๐Ÿน"},{"id":":beer_mug:","symbol":"๐Ÿบ"},{"id":":clinking_beer_mugs:","symbol":"๐Ÿป"},{"id":":clinking_glasses:","symbol":"๐Ÿฅ‚"},{"id":":tumbler_glass:","symbol":"๐Ÿฅƒ"},{"id":":cup_with_straw:","symbol":"๐Ÿฅค"},{"id":":chopsticks:","symbol":"๐Ÿฅข"},{"id":":fork_and_knife_with_plate:","symbol":"๐Ÿฝ"},{"id":":fork_and_knife:","symbol":"๐Ÿด"},{"id":":spoon:","symbol":"๐Ÿฅ„"},{"id":":kitchen_knife:","symbol":"๐Ÿ”ช"},{"id":":amphora:","symbol":"๐Ÿบ"},{"id":":globe_showing_Europe-Africa:","symbol":"๐ŸŒ"},{"id":":globe_showing_Americas:","symbol":"๐ŸŒŽ"},{"id":":globe_showing_Asia-Australia:","symbol":"๐ŸŒ"},{"id":":globe_with_meridians:","symbol":"๐ŸŒ"},{"id":":world_map:","symbol":"๐Ÿ—บ"},{"id":":map_of_Japan:","symbol":"๐Ÿ—พ"},{"id":":snow-capped_mountain:","symbol":"๐Ÿ”"},{"id":":mountain:","symbol":"โ›ฐ"},{"id":":volcano:","symbol":"๐ŸŒ‹"},{"id":":mount_fuji:","symbol":"๐Ÿ—ป"},{"id":":camping:","symbol":"๐Ÿ•"},{"id":":beach_with_umbrella:","symbol":"๐Ÿ–"},{"id":":desert:","symbol":"๐Ÿœ"},{"id":":desert_island:","symbol":"๐Ÿ"},{"id":":national_park:","symbol":"๐Ÿž"},{"id":":stadium:","symbol":"๐ŸŸ"},{"id":":classical_building:","symbol":"๐Ÿ›"},{"id":":building_construction:","symbol":"๐Ÿ—"},{"id":":houses:","symbol":"๐Ÿ˜"},{"id":":derelict_house:","symbol":"๐Ÿš"},{"id":":house:","symbol":"๐Ÿ "},{"id":":house_with_garden:","symbol":"๐Ÿก"},{"id":":office_building:","symbol":"๐Ÿข"},{"id":":Japanese_post_office:","symbol":"๐Ÿฃ"},{"id":":post_office:","symbol":"๐Ÿค"},{"id":":hospital:","symbol":"๐Ÿฅ"},{"id":":bank:","symbol":"๐Ÿฆ"},{"id":":hotel:","symbol":"๐Ÿจ"},{"id":":love_hotel:","symbol":"๐Ÿฉ"},{"id":":convenience_store:","symbol":"๐Ÿช"},{"id":":school:","symbol":"๐Ÿซ"},{"id":":department_store:","symbol":"๐Ÿฌ"},{"id":":factory:","symbol":"๐Ÿญ"},{"id":":Japanese_castle:","symbol":"๐Ÿฏ"},{"id":":castle:","symbol":"๐Ÿฐ"},{"id":":wedding:","symbol":"๐Ÿ’’"},{"id":":Tokyo_tower:","symbol":"๐Ÿ—ผ"},{"id":":Statue_of_Liberty:","symbol":"๐Ÿ—ฝ"},{"id":":church:","symbol":"โ›ช"},{"id":":mosque:","symbol":"๐Ÿ•Œ"},{"id":":synagogue:","symbol":"๐Ÿ•"},{"id":":shinto_shrine:","symbol":"โ›ฉ"},{"id":":kaaba:","symbol":"๐Ÿ•‹"},{"id":":fountain:","symbol":"โ›ฒ"},{"id":":tent:","symbol":"โ›บ"},{"id":":foggy:","symbol":"๐ŸŒ"},{"id":":night_with_stars:","symbol":"๐ŸŒƒ"},{"id":":cityscape:","symbol":"๐Ÿ™"},{"id":":sunrise_over_mountains:","symbol":"๐ŸŒ„"},{"id":":sunrise:","symbol":"๐ŸŒ…"},{"id":":cityscape_at_dusk:","symbol":"๐ŸŒ†"},{"id":":sunset:","symbol":"๐ŸŒ‡"},{"id":":bridge_at_night:","symbol":"๐ŸŒ‰"},{"id":":hot_springs:","symbol":"โ™จ"},{"id":":milky_way:","symbol":"๐ŸŒŒ"},{"id":":carousel_horse:","symbol":"๐ŸŽ "},{"id":":ferris_wheel:","symbol":"๐ŸŽก"},{"id":":roller_coaster:","symbol":"๐ŸŽข"},{"id":":barber_pole:","symbol":"๐Ÿ’ˆ"},{"id":":circus_tent:","symbol":"๐ŸŽช"},{"id":":locomotive:","symbol":"๐Ÿš‚"},{"id":":railway_car:","symbol":"๐Ÿšƒ"},{"id":":high-speed_train:","symbol":"๐Ÿš„"},{"id":":bullet_train:","symbol":"๐Ÿš…"},{"id":":train:","symbol":"๐Ÿš†"},{"id":":metro:","symbol":"๐Ÿš‡"},{"id":":light_rail:","symbol":"๐Ÿšˆ"},{"id":":station:","symbol":"๐Ÿš‰"},{"id":":tram:","symbol":"๐ŸšŠ"},{"id":":monorail:","symbol":"๐Ÿš"},{"id":":mountain_railway:","symbol":"๐Ÿšž"},{"id":":tram_car:","symbol":"๐Ÿš‹"},{"id":":bus:","symbol":"๐ŸšŒ"},{"id":":oncoming_bus:","symbol":"๐Ÿš"},{"id":":trolleybus:","symbol":"๐ŸšŽ"},{"id":":minibus:","symbol":"๐Ÿš"},{"id":":ambulance:","symbol":"๐Ÿš‘"},{"id":":fire_engine:","symbol":"๐Ÿš’"},{"id":":police_car:","symbol":"๐Ÿš“"},{"id":":oncoming_police_car:","symbol":"๐Ÿš”"},{"id":":taxi:","symbol":"๐Ÿš•"},{"id":":oncoming_taxi:","symbol":"๐Ÿš–"},{"id":":automobile:","symbol":"๐Ÿš—"},{"id":":oncoming_automobile:","symbol":"๐Ÿš˜"},{"id":":sport_utility_vehicle:","symbol":"๐Ÿš™"},{"id":":delivery_truck:","symbol":"๐Ÿšš"},{"id":":articulated_lorry:","symbol":"๐Ÿš›"},{"id":":tractor:","symbol":"๐Ÿšœ"},{"id":":bicycle:","symbol":"๐Ÿšฒ"},{"id":":kick_scooter:","symbol":"๐Ÿ›ด"},{"id":":motor_scooter:","symbol":"๐Ÿ›ต"},{"id":":bus_stop:","symbol":"๐Ÿš"},{"id":":motorway:","symbol":"๐Ÿ›ฃ"},{"id":":railway_track:","symbol":"๐Ÿ›ค"},{"id":":oil_drum:","symbol":"๐Ÿ›ข"},{"id":":fuel_pump:","symbol":"โ›ฝ"},{"id":":police_car_light:","symbol":"๐Ÿšจ"},{"id":":horizontal_traffic_light:","symbol":"๐Ÿšฅ"},{"id":":vertical_traffic_light:","symbol":"๐Ÿšฆ"},{"id":":stop_sign:","symbol":"๐Ÿ›‘"},{"id":":construction:","symbol":"๐Ÿšง"},{"id":":anchor:","symbol":"โš“"},{"id":":sailboat:","symbol":"โ›ต"},{"id":":canoe:","symbol":"๐Ÿ›ถ"},{"id":":speedboat:","symbol":"๐Ÿšค"},{"id":":passenger_ship:","symbol":"๐Ÿ›ณ"},{"id":":ferry:","symbol":"โ›ด"},{"id":":motor_boat:","symbol":"๐Ÿ›ฅ"},{"id":":ship:","symbol":"๐Ÿšข"},{"id":":airplane:","symbol":"โœˆ"},{"id":":small_airplane:","symbol":"๐Ÿ›ฉ"},{"id":":airplane_departure:","symbol":"๐Ÿ›ซ"},{"id":":airplane_arrival:","symbol":"๐Ÿ›ฌ"},{"id":":seat:","symbol":"๐Ÿ’บ"},{"id":":helicopter:","symbol":"๐Ÿš"},{"id":":suspension_railway:","symbol":"๐ŸšŸ"},{"id":":mountain_cableway:","symbol":"๐Ÿš "},{"id":":aerial_tramway:","symbol":"๐Ÿšก"},{"id":":satellite:","symbol":"๐Ÿ›ฐ"},{"id":":rocket:","symbol":"๐Ÿš€"},{"id":":flying_saucer:","symbol":"๐Ÿ›ธ"},{"id":":bellhop_bell:","symbol":"๐Ÿ›Ž"},{"id":":hourglass_done:","symbol":"โŒ›"},{"id":":hourglass_not_done:","symbol":"โณ"},{"id":":watch:","symbol":"โŒš"},{"id":":alarm_clock:","symbol":"โฐ"},{"id":":stopwatch:","symbol":"โฑ"},{"id":":timer_clock:","symbol":"โฒ"},{"id":":mantelpiece_clock:","symbol":"๐Ÿ•ฐ"},{"id":":twelve_oโ€™clock:","symbol":"๐Ÿ•›"},{"id":":twelve-thirty:","symbol":"๐Ÿ•ง"},{"id":":one_oโ€™clock:","symbol":"๐Ÿ•"},{"id":":one-thirty:","symbol":"๐Ÿ•œ"},{"id":":two_oโ€™clock:","symbol":"๐Ÿ•‘"},{"id":":two-thirty:","symbol":"๐Ÿ•"},{"id":":three_oโ€™clock:","symbol":"๐Ÿ•’"},{"id":":three-thirty:","symbol":"๐Ÿ•ž"},{"id":":four_oโ€™clock:","symbol":"๐Ÿ•“"},{"id":":four-thirty:","symbol":"๐Ÿ•Ÿ"},{"id":":five_oโ€™clock:","symbol":"๐Ÿ•”"},{"id":":five-thirty:","symbol":"๐Ÿ• "},{"id":":six_oโ€™clock:","symbol":"๐Ÿ••"},{"id":":six-thirty:","symbol":"๐Ÿ•ก"},{"id":":seven_oโ€™clock:","symbol":"๐Ÿ•–"},{"id":":seven-thirty:","symbol":"๐Ÿ•ข"},{"id":":eight_oโ€™clock:","symbol":"๐Ÿ•—"},{"id":":eight-thirty:","symbol":"๐Ÿ•ฃ"},{"id":":nine_oโ€™clock:","symbol":"๐Ÿ•˜"},{"id":":nine-thirty:","symbol":"๐Ÿ•ค"},{"id":":ten_oโ€™clock:","symbol":"๐Ÿ•™"},{"id":":ten-thirty:","symbol":"๐Ÿ•ฅ"},{"id":":eleven_oโ€™clock:","symbol":"๐Ÿ•š"},{"id":":eleven-thirty:","symbol":"๐Ÿ•ฆ"},{"id":":new_moon:","symbol":"๐ŸŒ‘"},{"id":":waxing_crescent_moon:","symbol":"๐ŸŒ’"},{"id":":first_quarter_moon:","symbol":"๐ŸŒ“"},{"id":":waxing_gibbous_moon:","symbol":"๐ŸŒ”"},{"id":":full_moon:","symbol":"๐ŸŒ•"},{"id":":waning_gibbous_moon:","symbol":"๐ŸŒ–"},{"id":":last_quarter_moon:","symbol":"๐ŸŒ—"},{"id":":waning_crescent_moon:","symbol":"๐ŸŒ˜"},{"id":":crescent_moon:","symbol":"๐ŸŒ™"},{"id":":new_moon_face:","symbol":"๐ŸŒš"},{"id":":first_quarter_moon_face:","symbol":"๐ŸŒ›"},{"id":":last_quarter_moon_face:","symbol":"๐ŸŒœ"},{"id":":thermometer:","symbol":"๐ŸŒก"},{"id":":sun:","symbol":"โ˜€"},{"id":":full_moon_face:","symbol":"๐ŸŒ"},{"id":":sun_with_face:","symbol":"๐ŸŒž"},{"id":":star:","symbol":"โญ"},{"id":":glowing_star:","symbol":"๐ŸŒŸ"},{"id":":shooting_star:","symbol":"๐ŸŒ "},{"id":":cloud:","symbol":"โ˜"},{"id":":sun_behind_cloud:","symbol":"โ›…"},{"id":":cloud_with_lightning_and_rain:","symbol":"โ›ˆ"},{"id":":sun_behind_small_cloud:","symbol":"๐ŸŒค"},{"id":":sun_behind_large_cloud:","symbol":"๐ŸŒฅ"},{"id":":sun_behind_rain_cloud:","symbol":"๐ŸŒฆ"},{"id":":cloud_with_rain:","symbol":"๐ŸŒง"},{"id":":cloud_with_snow:","symbol":"๐ŸŒจ"},{"id":":cloud_with_lightning:","symbol":"๐ŸŒฉ"},{"id":":tornado:","symbol":"๐ŸŒช"},{"id":":fog:","symbol":"๐ŸŒซ"},{"id":":wind_face:","symbol":"๐ŸŒฌ"},{"id":":cyclone:","symbol":"๐ŸŒ€"},{"id":":rainbow:","symbol":"๐ŸŒˆ"},{"id":":closed_umbrella:","symbol":"๐ŸŒ‚"},{"id":":umbrella:","symbol":"โ˜‚"},{"id":":umbrella_with_rain_drops:","symbol":"โ˜”"},{"id":":umbrella_on_ground:","symbol":"โ›ฑ"},{"id":":high_voltage:","symbol":"โšก"},{"id":":snowflake:","symbol":"โ„"},{"id":":snowman:","symbol":"โ˜ƒ"},{"id":":snowman_without_snow:","symbol":"โ›„"},{"id":":comet:","symbol":"โ˜„"},{"id":":fire:","symbol":"๐Ÿ”ฅ"},{"id":":droplet:","symbol":"๐Ÿ’ง"},{"id":":water_wave:","symbol":"๐ŸŒŠ"},{"id":":jack-o-lantern:","symbol":"๐ŸŽƒ"},{"id":":Christmas_tree:","symbol":"๐ŸŽ„"},{"id":":fireworks:","symbol":"๐ŸŽ†"},{"id":":sparkler:","symbol":"๐ŸŽ‡"},{"id":":sparkles:","symbol":"โœจ"},{"id":":balloon:","symbol":"๐ŸŽˆ"},{"id":":party_popper:","symbol":"๐ŸŽ‰"},{"id":":confetti_ball:","symbol":"๐ŸŽŠ"},{"id":":tanabata_tree:","symbol":"๐ŸŽ‹"},{"id":":pine_decoration:","symbol":"๐ŸŽ"},{"id":":Japanese_dolls:","symbol":"๐ŸŽŽ"},{"id":":carp_streamer:","symbol":"๐ŸŽ"},{"id":":wind_chime:","symbol":"๐ŸŽ"},{"id":":moon_viewing_ceremony:","symbol":"๐ŸŽ‘"},{"id":":ribbon:","symbol":"๐ŸŽ€"},{"id":":wrapped_gift:","symbol":"๐ŸŽ"},{"id":":reminder_ribbon:","symbol":"๐ŸŽ—"},{"id":":admission_tickets:","symbol":"๐ŸŽŸ"},{"id":":ticket:","symbol":"๐ŸŽซ"},{"id":":military_medal:","symbol":"๐ŸŽ–"},{"id":":trophy:","symbol":"๐Ÿ†"},{"id":":sports_medal:","symbol":"๐Ÿ…"},{"id":":1st_place_medal:","symbol":"๐Ÿฅ‡"},{"id":":2nd_place_medal:","symbol":"๐Ÿฅˆ"},{"id":":3rd_place_medal:","symbol":"๐Ÿฅ‰"},{"id":":soccer_ball:","symbol":"โšฝ"},{"id":":baseball:","symbol":"โšพ"},{"id":":basketball:","symbol":"๐Ÿ€"},{"id":":volleyball:","symbol":"๐Ÿ"},{"id":":american_football:","symbol":"๐Ÿˆ"},{"id":":rugby_football:","symbol":"๐Ÿ‰"},{"id":":tennis:","symbol":"๐ŸŽพ"},{"id":":bowling:","symbol":"๐ŸŽณ"},{"id":":cricket_game:","symbol":"๐Ÿ"},{"id":":field_hockey:","symbol":"๐Ÿ‘"},{"id":":ice_hockey:","symbol":"๐Ÿ’"},{"id":":ping_pong:","symbol":"๐Ÿ“"},{"id":":badminton:","symbol":"๐Ÿธ"},{"id":":boxing_glove:","symbol":"๐ŸฅŠ"},{"id":":martial_arts_uniform:","symbol":"๐Ÿฅ‹"},{"id":":goal_net:","symbol":"๐Ÿฅ…"},{"id":":flag_in_hole:","symbol":"โ›ณ"},{"id":":ice_skate:","symbol":"โ›ธ"},{"id":":fishing_pole:","symbol":"๐ŸŽฃ"},{"id":":running_shirt:","symbol":"๐ŸŽฝ"},{"id":":skis:","symbol":"๐ŸŽฟ"},{"id":":sled:","symbol":"๐Ÿ›ท"},{"id":":curling_stone:","symbol":"๐ŸฅŒ"},{"id":":direct_hit:","symbol":"๐ŸŽฏ"},{"id":":pool_8_ball:","symbol":"๐ŸŽฑ"},{"id":":crystal_ball:","symbol":"๐Ÿ”ฎ"},{"id":":video_game:","symbol":"๐ŸŽฎ"},{"id":":joystick:","symbol":"๐Ÿ•น"},{"id":":slot_machine:","symbol":"๐ŸŽฐ"},{"id":":game_die:","symbol":"๐ŸŽฒ"},{"id":":spade_suit:","symbol":"โ™ "},{"id":":heart_suit:","symbol":"โ™ฅ"},{"id":":diamond_suit:","symbol":"โ™ฆ"},{"id":":club_suit:","symbol":"โ™ฃ"},{"id":":joker:","symbol":"๐Ÿƒ"},{"id":":mahjong_red_dragon:","symbol":"๐Ÿ€„"},{"id":":flower_playing_cards:","symbol":"๐ŸŽด"},{"id":":performing_arts:","symbol":"๐ŸŽญ"},{"id":":framed_picture:","symbol":"๐Ÿ–ผ"},{"id":":artist_palette:","symbol":"๐ŸŽจ"},{"id":":muted_speaker:","symbol":"๐Ÿ”‡"},{"id":":speaker_low_volume:","symbol":"๐Ÿ”ˆ"},{"id":":speaker_medium_volume:","symbol":"๐Ÿ”‰"},{"id":":speaker_high_volume:","symbol":"๐Ÿ”Š"},{"id":":loudspeaker:","symbol":"๐Ÿ“ข"},{"id":":megaphone:","symbol":"๐Ÿ“ฃ"},{"id":":postal_horn:","symbol":"๐Ÿ“ฏ"},{"id":":bell:","symbol":"๐Ÿ””"},{"id":":bell_with_slash:","symbol":"๐Ÿ”•"},{"id":":musical_score:","symbol":"๐ŸŽผ"},{"id":":musical_note:","symbol":"๐ŸŽต"},{"id":":musical_notes:","symbol":"๐ŸŽถ"},{"id":":studio_microphone:","symbol":"๐ŸŽ™"},{"id":":level_slider:","symbol":"๐ŸŽš"},{"id":":control_knobs:","symbol":"๐ŸŽ›"},{"id":":microphone:","symbol":"๐ŸŽค"},{"id":":headphone:","symbol":"๐ŸŽง"},{"id":":radio:","symbol":"๐Ÿ“ป"},{"id":":saxophone:","symbol":"๐ŸŽท"},{"id":":guitar:","symbol":"๐ŸŽธ"},{"id":":musical_keyboard:","symbol":"๐ŸŽน"},{"id":":trumpet:","symbol":"๐ŸŽบ"},{"id":":violin:","symbol":"๐ŸŽป"},{"id":":drum:","symbol":"๐Ÿฅ"},{"id":":mobile_phone:","symbol":"๐Ÿ“ฑ"},{"id":":mobile_phone_with_arrow:","symbol":"๐Ÿ“ฒ"},{"id":":telephone:","symbol":"โ˜Ž"},{"id":":telephone_receiver:","symbol":"๐Ÿ“ž"},{"id":":pager:","symbol":"๐Ÿ“Ÿ"},{"id":":fax_machine:","symbol":"๐Ÿ“ "},{"id":":battery:","symbol":"๐Ÿ”‹"},{"id":":electric_plug:","symbol":"๐Ÿ”Œ"},{"id":":laptop_computer:","symbol":"๐Ÿ’ป"},{"id":":desktop_computer:","symbol":"๐Ÿ–ฅ"},{"id":":printer:","symbol":"๐Ÿ–จ"},{"id":":keyboard:","symbol":"โŒจ"},{"id":":computer_mouse:","symbol":"๐Ÿ–ฑ"},{"id":":trackball:","symbol":"๐Ÿ–ฒ"},{"id":":computer_disk:","symbol":"๐Ÿ’ฝ"},{"id":":floppy_disk:","symbol":"๐Ÿ’พ"},{"id":":optical_disk:","symbol":"๐Ÿ’ฟ"},{"id":":dvd:","symbol":"๐Ÿ“€"},{"id":":movie_camera:","symbol":"๐ŸŽฅ"},{"id":":film_frames:","symbol":"๐ŸŽž"},{"id":":film_projector:","symbol":"๐Ÿ“ฝ"},{"id":":clapper_board:","symbol":"๐ŸŽฌ"},{"id":":television:","symbol":"๐Ÿ“บ"},{"id":":camera:","symbol":"๐Ÿ“ท"},{"id":":camera_with_flash:","symbol":"๐Ÿ“ธ"},{"id":":video_camera:","symbol":"๐Ÿ“น"},{"id":":videocassette:","symbol":"๐Ÿ“ผ"},{"id":":magnifying_glass_tilted_left:","symbol":"๐Ÿ”"},{"id":":magnifying_glass_tilted_right:","symbol":"๐Ÿ”Ž"},{"id":":candle:","symbol":"๐Ÿ•ฏ"},{"id":":light_bulb:","symbol":"๐Ÿ’ก"},{"id":":flashlight:","symbol":"๐Ÿ”ฆ"},{"id":":red_paper_lantern:","symbol":"๐Ÿฎ"},{"id":":notebook_with_decorative_cover:","symbol":"๐Ÿ“”"},{"id":":closed_book:","symbol":"๐Ÿ“•"},{"id":":open_book:","symbol":"๐Ÿ“–"},{"id":":green_book:","symbol":"๐Ÿ“—"},{"id":":blue_book:","symbol":"๐Ÿ“˜"},{"id":":orange_book:","symbol":"๐Ÿ“™"},{"id":":books:","symbol":"๐Ÿ“š"},{"id":":notebook:","symbol":"๐Ÿ““"},{"id":":ledger:","symbol":"๐Ÿ“’"},{"id":":page_with_curl:","symbol":"๐Ÿ“ƒ"},{"id":":scroll:","symbol":"๐Ÿ“œ"},{"id":":page_facing_up:","symbol":"๐Ÿ“„"},{"id":":newspaper:","symbol":"๐Ÿ“ฐ"},{"id":":rolled-up_newspaper:","symbol":"๐Ÿ—ž"},{"id":":bookmark_tabs:","symbol":"๐Ÿ“‘"},{"id":":bookmark:","symbol":"๐Ÿ”–"},{"id":":label:","symbol":"๐Ÿท"},{"id":":money_bag:","symbol":"๐Ÿ’ฐ"},{"id":":yen_banknote:","symbol":"๐Ÿ’ด"},{"id":":dollar_banknote:","symbol":"๐Ÿ’ต"},{"id":":euro_banknote:","symbol":"๐Ÿ’ถ"},{"id":":pound_banknote:","symbol":"๐Ÿ’ท"},{"id":":money_with_wings:","symbol":"๐Ÿ’ธ"},{"id":":credit_card:","symbol":"๐Ÿ’ณ"},{"id":":chart_increasing_with_yen:","symbol":"๐Ÿ’น"},{"id":":currency_exchange:","symbol":"๐Ÿ’ฑ"},{"id":":heavy_dollar_sign:","symbol":"๐Ÿ’ฒ"},{"id":":envelope:","symbol":"โœ‰"},{"id":":e-mail:","symbol":"๐Ÿ“ง"},{"id":":incoming_envelope:","symbol":"๐Ÿ“จ"},{"id":":envelope_with_arrow:","symbol":"๐Ÿ“ฉ"},{"id":":outbox_tray:","symbol":"๐Ÿ“ค"},{"id":":inbox_tray:","symbol":"๐Ÿ“ฅ"},{"id":":package:","symbol":"๐Ÿ“ฆ"},{"id":":closed_mailbox_with_raised_flag:","symbol":"๐Ÿ“ซ"},{"id":":closed_mailbox_with_lowered_flag:","symbol":"๐Ÿ“ช"},{"id":":open_mailbox_with_raised_flag:","symbol":"๐Ÿ“ฌ"},{"id":":open_mailbox_with_lowered_flag:","symbol":"๐Ÿ“ญ"},{"id":":postbox:","symbol":"๐Ÿ“ฎ"},{"id":":ballot_box_with_ballot:","symbol":"๐Ÿ—ณ"},{"id":":pencil:","symbol":"โœ"},{"id":":black_nib:","symbol":"โœ’"},{"id":":fountain_pen:","symbol":"๐Ÿ–‹"},{"id":":pen:","symbol":"๐Ÿ–Š"},{"id":":paintbrush:","symbol":"๐Ÿ–Œ"},{"id":":crayon:","symbol":"๐Ÿ–"},{"id":":memo:","symbol":"๐Ÿ“"},{"id":":briefcase:","symbol":"๐Ÿ’ผ"},{"id":":file_folder:","symbol":"๐Ÿ“"},{"id":":open_file_folder:","symbol":"๐Ÿ“‚"},{"id":":card_index_dividers:","symbol":"๐Ÿ—‚"},{"id":":calendar:","symbol":"๐Ÿ“…"},{"id":":tear-off_calendar:","symbol":"๐Ÿ“†"},{"id":":spiral_notepad:","symbol":"๐Ÿ—’"},{"id":":spiral_calendar:","symbol":"๐Ÿ—“"},{"id":":card_index:","symbol":"๐Ÿ“‡"},{"id":":chart_increasing:","symbol":"๐Ÿ“ˆ"},{"id":":chart_decreasing:","symbol":"๐Ÿ“‰"},{"id":":bar_chart:","symbol":"๐Ÿ“Š"},{"id":":clipboard:","symbol":"๐Ÿ“‹"},{"id":":pushpin:","symbol":"๐Ÿ“Œ"},{"id":":round_pushpin:","symbol":"๐Ÿ“"},{"id":":paperclip:","symbol":"๐Ÿ“Ž"},{"id":":linked_paperclips:","symbol":"๐Ÿ–‡"},{"id":":straight_ruler:","symbol":"๐Ÿ“"},{"id":":triangular_ruler:","symbol":"๐Ÿ“"},{"id":":scissors:","symbol":"โœ‚"},{"id":":card_file_box:","symbol":"๐Ÿ—ƒ"},{"id":":file_cabinet:","symbol":"๐Ÿ—„"},{"id":":wastebasket:","symbol":"๐Ÿ—‘"},{"id":":locked:","symbol":"๐Ÿ”’"},{"id":":unlocked:","symbol":"๐Ÿ”“"},{"id":":locked_with_pen:","symbol":"๐Ÿ”"},{"id":":locked_with_key:","symbol":"๐Ÿ”"},{"id":":key:","symbol":"๐Ÿ”‘"},{"id":":old_key:","symbol":"๐Ÿ—"},{"id":":hammer:","symbol":"๐Ÿ”จ"},{"id":":pick:","symbol":"โ›"},{"id":":hammer_and_pick:","symbol":"โš’"},{"id":":hammer_and_wrench:","symbol":"๐Ÿ› "},{"id":":dagger:","symbol":"๐Ÿ—ก"},{"id":":crossed_swords:","symbol":"โš”"},{"id":":pistol:","symbol":"๐Ÿ”ซ"},{"id":":bow_and_arrow:","symbol":"๐Ÿน"},{"id":":shield:","symbol":"๐Ÿ›ก"},{"id":":wrench:","symbol":"๐Ÿ”ง"},{"id":":nut_and_bolt:","symbol":"๐Ÿ”ฉ"},{"id":":gear:","symbol":"โš™"},{"id":":clamp:","symbol":"๐Ÿ—œ"},{"id":":balance_scale:","symbol":"โš–"},{"id":":link:","symbol":"๐Ÿ”—"},{"id":":chains:","symbol":"โ›“"},{"id":":alembic:","symbol":"โš—"},{"id":":microscope:","symbol":"๐Ÿ”ฌ"},{"id":":telescope:","symbol":"๐Ÿ”ญ"},{"id":":satellite_antenna:","symbol":"๐Ÿ“ก"},{"id":":syringe:","symbol":"๐Ÿ’‰"},{"id":":pill:","symbol":"๐Ÿ’Š"},{"id":":door:","symbol":"๐Ÿšช"},{"id":":bed:","symbol":"๐Ÿ›"},{"id":":couch_and_lamp:","symbol":"๐Ÿ›‹"},{"id":":toilet:","symbol":"๐Ÿšฝ"},{"id":":shower:","symbol":"๐Ÿšฟ"},{"id":":bathtub:","symbol":"๐Ÿ›"},{"id":":shopping_cart:","symbol":"๐Ÿ›’"},{"id":":cigarette:","symbol":"๐Ÿšฌ"},{"id":":coffin:","symbol":"โšฐ"},{"id":":funeral_urn:","symbol":"โšฑ"},{"id":":moai:","symbol":"๐Ÿ—ฟ"},{"id":":ATM_sign:","symbol":"๐Ÿง"},{"id":":litter_in_bin_sign:","symbol":"๐Ÿšฎ"},{"id":":potable_water:","symbol":"๐Ÿšฐ"},{"id":":wheelchair_symbol:","symbol":"โ™ฟ"},{"id":":menโ€™s_room:","symbol":"๐Ÿšน"},{"id":":womenโ€™s_room:","symbol":"๐Ÿšบ"},{"id":":restroom:","symbol":"๐Ÿšป"},{"id":":baby_symbol:","symbol":"๐Ÿšผ"},{"id":":water_closet:","symbol":"๐Ÿšพ"},{"id":":passport_control:","symbol":"๐Ÿ›‚"},{"id":":customs:","symbol":"๐Ÿ›ƒ"},{"id":":baggage_claim:","symbol":"๐Ÿ›„"},{"id":":left_luggage:","symbol":"๐Ÿ›…"},{"id":":warning:","symbol":"โš "},{"id":":children_crossing:","symbol":"๐Ÿšธ"},{"id":":no_entry:","symbol":"โ›”"},{"id":":prohibited:","symbol":"๐Ÿšซ"},{"id":":no_bicycles:","symbol":"๐Ÿšณ"},{"id":":no_smoking:","symbol":"๐Ÿšญ"},{"id":":no_littering:","symbol":"๐Ÿšฏ"},{"id":":non-potable_water:","symbol":"๐Ÿšฑ"},{"id":":no_pedestrians:","symbol":"๐Ÿšท"},{"id":":no_mobile_phones:","symbol":"๐Ÿ“ต"},{"id":":no_one_under_eighteen:","symbol":"๐Ÿ”ž"},{"id":":radioactive:","symbol":"โ˜ข"},{"id":":biohazard:","symbol":"โ˜ฃ"},{"id":":up_arrow:","symbol":"โฌ†"},{"id":":up-right_arrow:","symbol":"โ†—"},{"id":":right_arrow:","symbol":"โžก"},{"id":":down-right_arrow:","symbol":"โ†˜"},{"id":":down_arrow:","symbol":"โฌ‡"},{"id":":down-left_arrow:","symbol":"โ†™"},{"id":":left_arrow:","symbol":"โฌ…"},{"id":":up-left_arrow:","symbol":"โ†–"},{"id":":up-down_arrow:","symbol":"โ†•"},{"id":":left-right_arrow:","symbol":"โ†”"},{"id":":right_arrow_curving_left:","symbol":"โ†ฉ"},{"id":":left_arrow_curving_right:","symbol":"โ†ช"},{"id":":right_arrow_curving_up:","symbol":"โคด"},{"id":":right_arrow_curving_down:","symbol":"โคต"},{"id":":clockwise_vertical_arrows:","symbol":"๐Ÿ”ƒ"},{"id":":counterclockwise_arrows_button:","symbol":"๐Ÿ”„"},{"id":":BACK_arrow:","symbol":"๐Ÿ”™"},{"id":":END_arrow:","symbol":"๐Ÿ”š"},{"id":":ON!_arrow:","symbol":"๐Ÿ”›"},{"id":":SOON_arrow:","symbol":"๐Ÿ”œ"},{"id":":TOP_arrow:","symbol":"๐Ÿ”"},{"id":":place_of_worship:","symbol":"๐Ÿ›"},{"id":":atom_symbol:","symbol":"โš›"},{"id":":om:","symbol":"๐Ÿ•‰"},{"id":":star_of_David:","symbol":"โœก"},{"id":":wheel_of_dharma:","symbol":"โ˜ธ"},{"id":":yin_yang:","symbol":"โ˜ฏ"},{"id":":latin_cross:","symbol":"โœ"},{"id":":orthodox_cross:","symbol":"โ˜ฆ"},{"id":":star_and_crescent:","symbol":"โ˜ช"},{"id":":peace_symbol:","symbol":"โ˜ฎ"},{"id":":menorah:","symbol":"๐Ÿ•Ž"},{"id":":dotted_six-pointed_star:","symbol":"๐Ÿ”ฏ"},{"id":":Aries:","symbol":"โ™ˆ"},{"id":":Taurus:","symbol":"โ™‰"},{"id":":Gemini:","symbol":"โ™Š"},{"id":":Cancer:","symbol":"โ™‹"},{"id":":Leo:","symbol":"โ™Œ"},{"id":":Virgo:","symbol":"โ™"},{"id":":Libra:","symbol":"โ™Ž"},{"id":":Scorpio:","symbol":"โ™"},{"id":":Sagittarius:","symbol":"โ™"},{"id":":Capricorn:","symbol":"โ™‘"},{"id":":Aquarius:","symbol":"โ™’"},{"id":":Pisces:","symbol":"โ™“"},{"id":":Ophiuchus:","symbol":"โ›Ž"},{"id":":shuffle_tracks_button:","symbol":"๐Ÿ”€"},{"id":":repeat_button:","symbol":"๐Ÿ”"},{"id":":repeat_single_button:","symbol":"๐Ÿ”‚"},{"id":":play_button:","symbol":"โ–ถ"},{"id":":fast-forward_button:","symbol":"โฉ"},{"id":":next_track_button:","symbol":"โญ"},{"id":":play_or_pause_button:","symbol":"โฏ"},{"id":":reverse_button:","symbol":"โ—€"},{"id":":fast_reverse_button:","symbol":"โช"},{"id":":last_track_button:","symbol":"โฎ"},{"id":":upwards_button:","symbol":"๐Ÿ”ผ"},{"id":":fast_up_button:","symbol":"โซ"},{"id":":downwards_button:","symbol":"๐Ÿ”ฝ"},{"id":":fast_down_button:","symbol":"โฌ"},{"id":":pause_button:","symbol":"โธ"},{"id":":stop_button:","symbol":"โน"},{"id":":record_button:","symbol":"โบ"},{"id":":eject_button:","symbol":"โ"},{"id":":cinema:","symbol":"๐ŸŽฆ"},{"id":":dim_button:","symbol":"๐Ÿ”…"},{"id":":bright_button:","symbol":"๐Ÿ”†"},{"id":":antenna_bars:","symbol":"๐Ÿ“ถ"},{"id":":vibration_mode:","symbol":"๐Ÿ“ณ"},{"id":":mobile_phone_off:","symbol":"๐Ÿ“ด"},{"id":":female_sign:","symbol":"โ™€"},{"id":":male_sign:","symbol":"โ™‚"},{"id":":medical_symbol:","symbol":"โš•"},{"id":":recycling_symbol:","symbol":"โ™ป"},{"id":":fleur-de-lis:","symbol":"โšœ"},{"id":":trident_emblem:","symbol":"๐Ÿ”ฑ"},{"id":":name_badge:","symbol":"๐Ÿ“›"},{"id":":Japanese_symbol_for_beginner:","symbol":"๐Ÿ”ฐ"},{"id":":heavy_large_circle:","symbol":"โญ•"},{"id":":white_heavy_check_mark:","symbol":"โœ…"},{"id":":ballot_box_with_check:","symbol":"โ˜‘"},{"id":":heavy_check_mark:","symbol":"โœ”"},{"id":":heavy_multiplication_x:","symbol":"โœ–"},{"id":":cross_mark:","symbol":"โŒ"},{"id":":cross_mark_button:","symbol":"โŽ"},{"id":":heavy_plus_sign:","symbol":"โž•"},{"id":":heavy_minus_sign:","symbol":"โž–"},{"id":":heavy_division_sign:","symbol":"โž—"},{"id":":curly_loop:","symbol":"โžฐ"},{"id":":double_curly_loop:","symbol":"โžฟ"},{"id":":part_alternation_mark:","symbol":"ใ€ฝ"},{"id":":eight-spoked_asterisk:","symbol":"โœณ"},{"id":":eight-pointed_star:","symbol":"โœด"},{"id":":sparkle:","symbol":"โ‡"},{"id":":double_exclamation_mark:","symbol":"โ€ผ"},{"id":":exclamation_question_mark:","symbol":"โ‰"},{"id":":question_mark:","symbol":"โ“"},{"id":":white_question_mark:","symbol":"โ”"},{"id":":white_exclamation_mark:","symbol":"โ•"},{"id":":exclamation_mark:","symbol":"โ—"},{"id":":wavy_dash:","symbol":"ใ€ฐ"},{"id":":copyright:","symbol":"ยฉ"},{"id":":registered:","symbol":"ยฎ"},{"id":":trade_mark:","symbol":"โ„ข"},{"id":":keycap:_#:","symbol":"#๏ธโƒฃ"},{"id":":keycap:_*:","symbol":"*๏ธโƒฃ"},{"id":":keycap:_0:","symbol":"0๏ธโƒฃ"},{"id":":keycap:_1:","symbol":"1๏ธโƒฃ"},{"id":":keycap:_2:","symbol":"2๏ธโƒฃ"},{"id":":keycap:_3:","symbol":"3๏ธโƒฃ"},{"id":":keycap:_4:","symbol":"4๏ธโƒฃ"},{"id":":keycap:_5:","symbol":"5๏ธโƒฃ"},{"id":":keycap:_6:","symbol":"6๏ธโƒฃ"},{"id":":keycap:_7:","symbol":"7๏ธโƒฃ"},{"id":":keycap:_8:","symbol":"8๏ธโƒฃ"},{"id":":keycap:_9:","symbol":"9๏ธโƒฃ"},{"id":":keycap:_10:","symbol":"๐Ÿ”Ÿ"},{"id":":hundred_points:","symbol":"๐Ÿ’ฏ"},{"id":":input_latin_uppercase:","symbol":"๐Ÿ” "},{"id":":input_latin_lowercase:","symbol":"๐Ÿ”ก"},{"id":":input_numbers:","symbol":"๐Ÿ”ข"},{"id":":input_symbols:","symbol":"๐Ÿ”ฃ"},{"id":":input_latin_letters:","symbol":"๐Ÿ”ค"},{"id":":A_button_(blood_type):","symbol":"๐Ÿ…ฐ"},{"id":":AB_button_(blood_type):","symbol":"๐Ÿ†Ž"},{"id":":B_button_(blood_type):","symbol":"๐Ÿ…ฑ"},{"id":":CL_button:","symbol":"๐Ÿ†‘"},{"id":":COOL_button:","symbol":"๐Ÿ†’"},{"id":":FREE_button:","symbol":"๐Ÿ†“"},{"id":":information:","symbol":"โ„น"},{"id":":ID_button:","symbol":"๐Ÿ†”"},{"id":":circled_M:","symbol":"โ“‚"},{"id":":NEW_button:","symbol":"๐Ÿ†•"},{"id":":NG_button:","symbol":"๐Ÿ†–"},{"id":":O_button_(blood_type):","symbol":"๐Ÿ…พ"},{"id":":OK_button:","symbol":"๐Ÿ†—"},{"id":":P_button:","symbol":"๐Ÿ…ฟ"},{"id":":SOS_button:","symbol":"๐Ÿ†˜"},{"id":":UP!_button:","symbol":"๐Ÿ†™"},{"id":":VS_button:","symbol":"๐Ÿ†š"},{"id":":Japanese_โ€œhereโ€_button:","symbol":"๐Ÿˆ"},{"id":":Japanese_โ€œservice_chargeโ€_button:","symbol":"๐Ÿˆ‚"},{"id":":Japanese_โ€œmonthly_amountโ€_button:","symbol":"๐Ÿˆท"},{"id":":Japanese_โ€œnot_free_of_chargeโ€_button:","symbol":"๐Ÿˆถ"},{"id":":Japanese_โ€œreservedโ€_button:","symbol":"๐Ÿˆฏ"},{"id":":Japanese_โ€œbargainโ€_button:","symbol":"๐Ÿ‰"},{"id":":Japanese_โ€œdiscountโ€_button:","symbol":"๐Ÿˆน"},{"id":":Japanese_โ€œfree_of_chargeโ€_button:","symbol":"๐Ÿˆš"},{"id":":Japanese_โ€œprohibitedโ€_button:","symbol":"๐Ÿˆฒ"},{"id":":Japanese_โ€œacceptableโ€_button:","symbol":"๐Ÿ‰‘"},{"id":":Japanese_โ€œapplicationโ€_button:","symbol":"๐Ÿˆธ"},{"id":":Japanese_โ€œpassing_gradeโ€_button:","symbol":"๐Ÿˆด"},{"id":":Japanese_โ€œvacancyโ€_button:","symbol":"๐Ÿˆณ"},{"id":":Japanese_โ€œcongratulationsโ€_button:","symbol":"ใŠ—"},{"id":":Japanese_โ€œsecretโ€_button:","symbol":"ใŠ™"},{"id":":Japanese_โ€œopen_for_businessโ€_button:","symbol":"๐Ÿˆบ"},{"id":":Japanese_โ€œno_vacancyโ€_button:","symbol":"๐Ÿˆต"},{"id":":red_circle:","symbol":"๐Ÿ”ด"},{"id":":blue_circle:","symbol":"๐Ÿ”ต"},{"id":":white_circle:","symbol":"โšช"},{"id":":black_circle:","symbol":"โšซ"},{"id":":white_large_square:","symbol":"โฌœ"},{"id":":black_large_square:","symbol":"โฌ›"},{"id":":black_medium_square:","symbol":"โ—ผ"},{"id":":white_medium_square:","symbol":"โ—ป"},{"id":":white_medium-small_square:","symbol":"โ—ฝ"},{"id":":black_medium-small_square:","symbol":"โ—พ"},{"id":":white_small_square:","symbol":"โ–ซ"},{"id":":black_small_square:","symbol":"โ–ช"},{"id":":large_orange_diamond:","symbol":"๐Ÿ”ถ"},{"id":":large_blue_diamond:","symbol":"๐Ÿ”ท"},{"id":":small_orange_diamond:","symbol":"๐Ÿ”ธ"},{"id":":small_blue_diamond:","symbol":"๐Ÿ”น"},{"id":":red_triangle_pointed_up:","symbol":"๐Ÿ”บ"},{"id":":red_triangle_pointed_down:","symbol":"๐Ÿ”ป"},{"id":":diamond_with_a_dot:","symbol":"๐Ÿ’ "},{"id":":radio_button:","symbol":"๐Ÿ”˜"},{"id":":black_square_button:","symbol":"๐Ÿ”ฒ"},{"id":":white_square_button:","symbol":"๐Ÿ”ณ"},{"id":":chequered_flag:","symbol":"๐Ÿ"},{"id":":triangular_flag:","symbol":"๐Ÿšฉ"},{"id":":crossed_flags:","symbol":"๐ŸŽŒ"},{"id":":black_flag:","symbol":"๐Ÿด"},{"id":":white_flag:","symbol":"๐Ÿณ"},{"id":":rainbow_flag:","symbol":"๐Ÿณ๏ธโ€๐ŸŒˆ"},{"id":":flag:_Ascension_Island:","symbol":"๐Ÿ‡ฆ๐Ÿ‡จ"},{"id":":flag:_Andorra:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฉ"},{"id":":flag:_United_Arab_Emirates:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ช"},{"id":":flag:_Afghanistan:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ซ"},{"id":":flag:_Antigua_&_Barbuda:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฌ"},{"id":":flag:_Anguilla:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฎ"},{"id":":flag:_Albania:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฑ"},{"id":":flag:_Armenia:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฒ"},{"id":":flag:_Angola:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ด"},{"id":":flag:_Antarctica:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ถ"},{"id":":flag:_Argentina:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ท"},{"id":":flag:_American_Samoa:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ธ"},{"id":":flag:_Austria:","symbol":"๐Ÿ‡ฆ๐Ÿ‡น"},{"id":":flag:_Australia:","symbol":"๐Ÿ‡ฆ๐Ÿ‡บ"},{"id":":flag:_Aruba:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ผ"},{"id":":flag:_ร…land_Islands:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฝ"},{"id":":flag:_Azerbaijan:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฟ"},{"id":":flag:_Bosnia_&_Herzegovina:","symbol":"๐Ÿ‡ง๐Ÿ‡ฆ"},{"id":":flag:_Barbados:","symbol":"๐Ÿ‡ง๐Ÿ‡ง"},{"id":":flag:_Bangladesh:","symbol":"๐Ÿ‡ง๐Ÿ‡ฉ"},{"id":":flag:_Belgium:","symbol":"๐Ÿ‡ง๐Ÿ‡ช"},{"id":":flag:_Burkina_Faso:","symbol":"๐Ÿ‡ง๐Ÿ‡ซ"},{"id":":flag:_Bulgaria:","symbol":"๐Ÿ‡ง๐Ÿ‡ฌ"},{"id":":flag:_Bahrain:","symbol":"๐Ÿ‡ง๐Ÿ‡ญ"},{"id":":flag:_Burundi:","symbol":"๐Ÿ‡ง๐Ÿ‡ฎ"},{"id":":flag:_Benin:","symbol":"๐Ÿ‡ง๐Ÿ‡ฏ"},{"id":":flag:_St._Barthรฉlemy:","symbol":"๐Ÿ‡ง๐Ÿ‡ฑ"},{"id":":flag:_Bermuda:","symbol":"๐Ÿ‡ง๐Ÿ‡ฒ"},{"id":":flag:_Brunei:","symbol":"๐Ÿ‡ง๐Ÿ‡ณ"},{"id":":flag:_Bolivia:","symbol":"๐Ÿ‡ง๐Ÿ‡ด"},{"id":":flag:_Caribbean_Netherlands:","symbol":"๐Ÿ‡ง๐Ÿ‡ถ"},{"id":":flag:_Brazil:","symbol":"๐Ÿ‡ง๐Ÿ‡ท"},{"id":":flag:_Bahamas:","symbol":"๐Ÿ‡ง๐Ÿ‡ธ"},{"id":":flag:_Bhutan:","symbol":"๐Ÿ‡ง๐Ÿ‡น"},{"id":":flag:_Bouvet_Island:","symbol":"๐Ÿ‡ง๐Ÿ‡ป"},{"id":":flag:_Botswana:","symbol":"๐Ÿ‡ง๐Ÿ‡ผ"},{"id":":flag:_Belarus:","symbol":"๐Ÿ‡ง๐Ÿ‡พ"},{"id":":flag:_Belize:","symbol":"๐Ÿ‡ง๐Ÿ‡ฟ"},{"id":":flag:_Canada:","symbol":"๐Ÿ‡จ๐Ÿ‡ฆ"},{"id":":flag:_Cocos_(Keeling)_Islands:","symbol":"๐Ÿ‡จ๐Ÿ‡จ"},{"id":":flag:_Congo_-_Kinshasa:","symbol":"๐Ÿ‡จ๐Ÿ‡ฉ"},{"id":":flag:_Central_African_Republic:","symbol":"๐Ÿ‡จ๐Ÿ‡ซ"},{"id":":flag:_Congo_-_Brazzaville:","symbol":"๐Ÿ‡จ๐Ÿ‡ฌ"},{"id":":flag:_Switzerland:","symbol":"๐Ÿ‡จ๐Ÿ‡ญ"},{"id":":flag:_Cรดte_dโ€™Ivoire:","symbol":"๐Ÿ‡จ๐Ÿ‡ฎ"},{"id":":flag:_Cook_Islands:","symbol":"๐Ÿ‡จ๐Ÿ‡ฐ"},{"id":":flag:_Chile:","symbol":"๐Ÿ‡จ๐Ÿ‡ฑ"},{"id":":flag:_Cameroon:","symbol":"๐Ÿ‡จ๐Ÿ‡ฒ"},{"id":":flag:_China:","symbol":"๐Ÿ‡จ๐Ÿ‡ณ"},{"id":":flag:_Colombia:","symbol":"๐Ÿ‡จ๐Ÿ‡ด"},{"id":":flag:_Clipperton_Island:","symbol":"๐Ÿ‡จ๐Ÿ‡ต"},{"id":":flag:_Costa_Rica:","symbol":"๐Ÿ‡จ๐Ÿ‡ท"},{"id":":flag:_Cuba:","symbol":"๐Ÿ‡จ๐Ÿ‡บ"},{"id":":flag:_Cape_Verde:","symbol":"๐Ÿ‡จ๐Ÿ‡ป"},{"id":":flag:_Curaรงao:","symbol":"๐Ÿ‡จ๐Ÿ‡ผ"},{"id":":flag:_Christmas_Island:","symbol":"๐Ÿ‡จ๐Ÿ‡ฝ"},{"id":":flag:_Cyprus:","symbol":"๐Ÿ‡จ๐Ÿ‡พ"},{"id":":flag:_Czechia:","symbol":"๐Ÿ‡จ๐Ÿ‡ฟ"},{"id":":flag:_Germany:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ช"},{"id":":flag:_Diego_Garcia:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฌ"},{"id":":flag:_Djibouti:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฏ"},{"id":":flag:_Denmark:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฐ"},{"id":":flag:_Dominica:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฒ"},{"id":":flag:_Dominican_Republic:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ด"},{"id":":flag:_Algeria:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฟ"},{"id":":flag:_Ceuta_&_Melilla:","symbol":"๐Ÿ‡ช๐Ÿ‡ฆ"},{"id":":flag:_Ecuador:","symbol":"๐Ÿ‡ช๐Ÿ‡จ"},{"id":":flag:_Estonia:","symbol":"๐Ÿ‡ช๐Ÿ‡ช"},{"id":":flag:_Egypt:","symbol":"๐Ÿ‡ช๐Ÿ‡ฌ"},{"id":":flag:_Western_Sahara:","symbol":"๐Ÿ‡ช๐Ÿ‡ญ"},{"id":":flag:_Eritrea:","symbol":"๐Ÿ‡ช๐Ÿ‡ท"},{"id":":flag:_Spain:","symbol":"๐Ÿ‡ช๐Ÿ‡ธ"},{"id":":flag:_Ethiopia:","symbol":"๐Ÿ‡ช๐Ÿ‡น"},{"id":":flag:_European_Union:","symbol":"๐Ÿ‡ช๐Ÿ‡บ"},{"id":":flag:_Finland:","symbol":"๐Ÿ‡ซ๐Ÿ‡ฎ"},{"id":":flag:_Fiji:","symbol":"๐Ÿ‡ซ๐Ÿ‡ฏ"},{"id":":flag:_Falkland_Islands:","symbol":"๐Ÿ‡ซ๐Ÿ‡ฐ"},{"id":":flag:_Micronesia:","symbol":"๐Ÿ‡ซ๐Ÿ‡ฒ"},{"id":":flag:_Faroe_Islands:","symbol":"๐Ÿ‡ซ๐Ÿ‡ด"},{"id":":flag:_France:","symbol":"๐Ÿ‡ซ๐Ÿ‡ท"},{"id":":flag:_Gabon:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฆ"},{"id":":flag:_United_Kingdom:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ง"},{"id":":flag:_Grenada:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฉ"},{"id":":flag:_Georgia:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ช"},{"id":":flag:_French_Guiana:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ซ"},{"id":":flag:_Guernsey:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฌ"},{"id":":flag:_Ghana:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ญ"},{"id":":flag:_Gibraltar:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฎ"},{"id":":flag:_Greenland:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฑ"},{"id":":flag:_Gambia:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฒ"},{"id":":flag:_Guinea:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ณ"},{"id":":flag:_Guadeloupe:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ต"},{"id":":flag:_Equatorial_Guinea:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ถ"},{"id":":flag:_Greece:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ท"},{"id":":flag:_South_Georgia_&_South_Sandwich_Islands:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ธ"},{"id":":flag:_Guatemala:","symbol":"๐Ÿ‡ฌ๐Ÿ‡น"},{"id":":flag:_Guam:","symbol":"๐Ÿ‡ฌ๐Ÿ‡บ"},{"id":":flag:_Guinea-Bissau:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ผ"},{"id":":flag:_Guyana:","symbol":"๐Ÿ‡ฌ๐Ÿ‡พ"},{"id":":flag:_Hong_Kong_SAR_China:","symbol":"๐Ÿ‡ญ๐Ÿ‡ฐ"},{"id":":flag:_Heard_&_McDonald_Islands:","symbol":"๐Ÿ‡ญ๐Ÿ‡ฒ"},{"id":":flag:_Honduras:","symbol":"๐Ÿ‡ญ๐Ÿ‡ณ"},{"id":":flag:_Croatia:","symbol":"๐Ÿ‡ญ๐Ÿ‡ท"},{"id":":flag:_Haiti:","symbol":"๐Ÿ‡ญ๐Ÿ‡น"},{"id":":flag:_Hungary:","symbol":"๐Ÿ‡ญ๐Ÿ‡บ"},{"id":":flag:_Canary_Islands:","symbol":"๐Ÿ‡ฎ๐Ÿ‡จ"},{"id":":flag:_Indonesia:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ฉ"},{"id":":flag:_Ireland:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ช"},{"id":":flag:_Israel:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ฑ"},{"id":":flag:_Isle_of_Man:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ฒ"},{"id":":flag:_India:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ณ"},{"id":":flag:_British_Indian_Ocean_Territory:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ด"},{"id":":flag:_Iraq:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ถ"},{"id":":flag:_Iran:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ท"},{"id":":flag:_Iceland:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ธ"},{"id":":flag:_Italy:","symbol":"๐Ÿ‡ฎ๐Ÿ‡น"},{"id":":flag:_Jersey:","symbol":"๐Ÿ‡ฏ๐Ÿ‡ช"},{"id":":flag:_Jamaica:","symbol":"๐Ÿ‡ฏ๐Ÿ‡ฒ"},{"id":":flag:_Jordan:","symbol":"๐Ÿ‡ฏ๐Ÿ‡ด"},{"id":":flag:_Japan:","symbol":"๐Ÿ‡ฏ๐Ÿ‡ต"},{"id":":flag:_Kenya:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ช"},{"id":":flag:_Kyrgyzstan:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ฌ"},{"id":":flag:_Cambodia:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ญ"},{"id":":flag:_Kiribati:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ฎ"},{"id":":flag:_Comoros:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ฒ"},{"id":":flag:_St._Kitts_&_Nevis:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ณ"},{"id":":flag:_North_Korea:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ต"},{"id":":flag:_South_Korea:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ท"},{"id":":flag:_Kuwait:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ผ"},{"id":":flag:_Cayman_Islands:","symbol":"๐Ÿ‡ฐ๐Ÿ‡พ"},{"id":":flag:_Kazakhstan:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ฟ"},{"id":":flag:_Laos:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ฆ"},{"id":":flag:_Lebanon:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ง"},{"id":":flag:_St._Lucia:","symbol":"๐Ÿ‡ฑ๐Ÿ‡จ"},{"id":":flag:_Liechtenstein:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ฎ"},{"id":":flag:_Sri_Lanka:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ฐ"},{"id":":flag:_Liberia:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ท"},{"id":":flag:_Lesotho:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ธ"},{"id":":flag:_Lithuania:","symbol":"๐Ÿ‡ฑ๐Ÿ‡น"},{"id":":flag:_Luxembourg:","symbol":"๐Ÿ‡ฑ๐Ÿ‡บ"},{"id":":flag:_Latvia:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ป"},{"id":":flag:_Libya:","symbol":"๐Ÿ‡ฑ๐Ÿ‡พ"},{"id":":flag:_Morocco:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฆ"},{"id":":flag:_Monaco:","symbol":"๐Ÿ‡ฒ๐Ÿ‡จ"},{"id":":flag:_Moldova:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฉ"},{"id":":flag:_Montenegro:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ช"},{"id":":flag:_St._Martin:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ซ"},{"id":":flag:_Madagascar:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฌ"},{"id":":flag:_Marshall_Islands:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ญ"},{"id":":flag:_Macedonia:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฐ"},{"id":":flag:_Mali:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฑ"},{"id":":flag:_Myanmar_(Burma):","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฒ"},{"id":":flag:_Mongolia:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ณ"},{"id":":flag:_Macau_SAR_China:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ด"},{"id":":flag:_Northern_Mariana_Islands:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ต"},{"id":":flag:_Martinique:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ถ"},{"id":":flag:_Mauritania:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ท"},{"id":":flag:_Montserrat:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ธ"},{"id":":flag:_Malta:","symbol":"๐Ÿ‡ฒ๐Ÿ‡น"},{"id":":flag:_Mauritius:","symbol":"๐Ÿ‡ฒ๐Ÿ‡บ"},{"id":":flag:_Maldives:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ป"},{"id":":flag:_Malawi:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ผ"},{"id":":flag:_Mexico:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฝ"},{"id":":flag:_Malaysia:","symbol":"๐Ÿ‡ฒ๐Ÿ‡พ"},{"id":":flag:_Mozambique:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฟ"},{"id":":flag:_Namibia:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฆ"},{"id":":flag:_New_Caledonia:","symbol":"๐Ÿ‡ณ๐Ÿ‡จ"},{"id":":flag:_Niger:","symbol":"๐Ÿ‡ณ๐Ÿ‡ช"},{"id":":flag:_Norfolk_Island:","symbol":"๐Ÿ‡ณ๐Ÿ‡ซ"},{"id":":flag:_Nigeria:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฌ"},{"id":":flag:_Nicaragua:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฎ"},{"id":":flag:_Netherlands:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฑ"},{"id":":flag:_Norway:","symbol":"๐Ÿ‡ณ๐Ÿ‡ด"},{"id":":flag:_Nepal:","symbol":"๐Ÿ‡ณ๐Ÿ‡ต"},{"id":":flag:_Nauru:","symbol":"๐Ÿ‡ณ๐Ÿ‡ท"},{"id":":flag:_Niue:","symbol":"๐Ÿ‡ณ๐Ÿ‡บ"},{"id":":flag:_New_Zealand:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฟ"},{"id":":flag:_Oman:","symbol":"๐Ÿ‡ด๐Ÿ‡ฒ"},{"id":":flag:_Panama:","symbol":"๐Ÿ‡ต๐Ÿ‡ฆ"},{"id":":flag:_Peru:","symbol":"๐Ÿ‡ต๐Ÿ‡ช"},{"id":":flag:_French_Polynesia:","symbol":"๐Ÿ‡ต๐Ÿ‡ซ"},{"id":":flag:_Papua_New_Guinea:","symbol":"๐Ÿ‡ต๐Ÿ‡ฌ"},{"id":":flag:_Philippines:","symbol":"๐Ÿ‡ต๐Ÿ‡ญ"},{"id":":flag:_Pakistan:","symbol":"๐Ÿ‡ต๐Ÿ‡ฐ"},{"id":":flag:_Poland:","symbol":"๐Ÿ‡ต๐Ÿ‡ฑ"},{"id":":flag:_St._Pierre_&_Miquelon:","symbol":"๐Ÿ‡ต๐Ÿ‡ฒ"},{"id":":flag:_Pitcairn_Islands:","symbol":"๐Ÿ‡ต๐Ÿ‡ณ"},{"id":":flag:_Puerto_Rico:","symbol":"๐Ÿ‡ต๐Ÿ‡ท"},{"id":":flag:_Palestinian_Territories:","symbol":"๐Ÿ‡ต๐Ÿ‡ธ"},{"id":":flag:_Portugal:","symbol":"๐Ÿ‡ต๐Ÿ‡น"},{"id":":flag:_Palau:","symbol":"๐Ÿ‡ต๐Ÿ‡ผ"},{"id":":flag:_Paraguay:","symbol":"๐Ÿ‡ต๐Ÿ‡พ"},{"id":":flag:_Qatar:","symbol":"๐Ÿ‡ถ๐Ÿ‡ฆ"},{"id":":flag:_Rรฉunion:","symbol":"๐Ÿ‡ท๐Ÿ‡ช"},{"id":":flag:_Romania:","symbol":"๐Ÿ‡ท๐Ÿ‡ด"},{"id":":flag:_Serbia:","symbol":"๐Ÿ‡ท๐Ÿ‡ธ"},{"id":":flag:_Russia:","symbol":"๐Ÿ‡ท๐Ÿ‡บ"},{"id":":flag:_Rwanda:","symbol":"๐Ÿ‡ท๐Ÿ‡ผ"},{"id":":flag:_Saudi_Arabia:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฆ"},{"id":":flag:_Solomon_Islands:","symbol":"๐Ÿ‡ธ๐Ÿ‡ง"},{"id":":flag:_Seychelles:","symbol":"๐Ÿ‡ธ๐Ÿ‡จ"},{"id":":flag:_Sudan:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฉ"},{"id":":flag:_Sweden:","symbol":"๐Ÿ‡ธ๐Ÿ‡ช"},{"id":":flag:_Singapore:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฌ"},{"id":":flag:_St._Helena:","symbol":"๐Ÿ‡ธ๐Ÿ‡ญ"},{"id":":flag:_Slovenia:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฎ"},{"id":":flag:_Svalbard_&_Jan_Mayen:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฏ"},{"id":":flag:_Slovakia:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฐ"},{"id":":flag:_Sierra_Leone:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฑ"},{"id":":flag:_San_Marino:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฒ"},{"id":":flag:_Senegal:","symbol":"๐Ÿ‡ธ๐Ÿ‡ณ"},{"id":":flag:_Somalia:","symbol":"๐Ÿ‡ธ๐Ÿ‡ด"},{"id":":flag:_Suriname:","symbol":"๐Ÿ‡ธ๐Ÿ‡ท"},{"id":":flag:_South_Sudan:","symbol":"๐Ÿ‡ธ๐Ÿ‡ธ"},{"id":":flag:_Sรฃo_Tomรฉ_&_Prรญncipe:","symbol":"๐Ÿ‡ธ๐Ÿ‡น"},{"id":":flag:_El_Salvador:","symbol":"๐Ÿ‡ธ๐Ÿ‡ป"},{"id":":flag:_Sint_Maarten:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฝ"},{"id":":flag:_Syria:","symbol":"๐Ÿ‡ธ๐Ÿ‡พ"},{"id":":flag:_Swaziland:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฟ"},{"id":":flag:_Tristan_da_Cunha:","symbol":"๐Ÿ‡น๐Ÿ‡ฆ"},{"id":":flag:_Turks_&_Caicos_Islands:","symbol":"๐Ÿ‡น๐Ÿ‡จ"},{"id":":flag:_Chad:","symbol":"๐Ÿ‡น๐Ÿ‡ฉ"},{"id":":flag:_French_Southern_Territories:","symbol":"๐Ÿ‡น๐Ÿ‡ซ"},{"id":":flag:_Togo:","symbol":"๐Ÿ‡น๐Ÿ‡ฌ"},{"id":":flag:_Thailand:","symbol":"๐Ÿ‡น๐Ÿ‡ญ"},{"id":":flag:_Tajikistan:","symbol":"๐Ÿ‡น๐Ÿ‡ฏ"},{"id":":flag:_Tokelau:","symbol":"๐Ÿ‡น๐Ÿ‡ฐ"},{"id":":flag:_Timor-Leste:","symbol":"๐Ÿ‡น๐Ÿ‡ฑ"},{"id":":flag:_Turkmenistan:","symbol":"๐Ÿ‡น๐Ÿ‡ฒ"},{"id":":flag:_Tunisia:","symbol":"๐Ÿ‡น๐Ÿ‡ณ"},{"id":":flag:_Tonga:","symbol":"๐Ÿ‡น๐Ÿ‡ด"},{"id":":flag:_Turkey:","symbol":"๐Ÿ‡น๐Ÿ‡ท"},{"id":":flag:_Trinidad_&_Tobago:","symbol":"๐Ÿ‡น๐Ÿ‡น"},{"id":":flag:_Tuvalu:","symbol":"๐Ÿ‡น๐Ÿ‡ป"},{"id":":flag:_Taiwan:","symbol":"๐Ÿ‡น๐Ÿ‡ผ"},{"id":":flag:_Tanzania:","symbol":"๐Ÿ‡น๐Ÿ‡ฟ"},{"id":":flag:_Ukraine:","symbol":"๐Ÿ‡บ๐Ÿ‡ฆ"},{"id":":flag:_Uganda:","symbol":"๐Ÿ‡บ๐Ÿ‡ฌ"},{"id":":flag:_U.S._Outlying_Islands:","symbol":"๐Ÿ‡บ๐Ÿ‡ฒ"},{"id":":flag:_United_Nations:","symbol":"๐Ÿ‡บ๐Ÿ‡ณ"},{"id":":flag:_United_States:","symbol":"๐Ÿ‡บ๐Ÿ‡ธ"},{"id":":flag:_Uruguay:","symbol":"๐Ÿ‡บ๐Ÿ‡พ"},{"id":":flag:_Uzbekistan:","symbol":"๐Ÿ‡บ๐Ÿ‡ฟ"},{"id":":flag:_Vatican_City:","symbol":"๐Ÿ‡ป๐Ÿ‡ฆ"},{"id":":flag:_St._Vincent_&_Grenadines:","symbol":"๐Ÿ‡ป๐Ÿ‡จ"},{"id":":flag:_Venezuela:","symbol":"๐Ÿ‡ป๐Ÿ‡ช"},{"id":":flag:_British_Virgin_Islands:","symbol":"๐Ÿ‡ป๐Ÿ‡ฌ"},{"id":":flag:_U.S._Virgin_Islands:","symbol":"๐Ÿ‡ป๐Ÿ‡ฎ"},{"id":":flag:_Vietnam:","symbol":"๐Ÿ‡ป๐Ÿ‡ณ"},{"id":":flag:_Vanuatu:","symbol":"๐Ÿ‡ป๐Ÿ‡บ"},{"id":":flag:_Wallis_&_Futuna:","symbol":"๐Ÿ‡ผ๐Ÿ‡ซ"},{"id":":flag:_Samoa:","symbol":"๐Ÿ‡ผ๐Ÿ‡ธ"},{"id":":flag:_Kosovo:","symbol":"๐Ÿ‡ฝ๐Ÿ‡ฐ"},{"id":":flag:_Yemen:","symbol":"๐Ÿ‡พ๐Ÿ‡ช"},{"id":":flag:_Mayotte:","symbol":"๐Ÿ‡พ๐Ÿ‡น"},{"id":":flag:_South_Africa:","symbol":"๐Ÿ‡ฟ๐Ÿ‡ฆ"},{"id":":flag:_Zambia:","symbol":"๐Ÿ‡ฟ๐Ÿ‡ฒ"},{"id":":flag:_Zimbabwe:","symbol":"๐Ÿ‡ฟ๐Ÿ‡ผ"},{"id":":flag:_England:","symbol":"๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ"},{"id":":flag:_Scotland:","symbol":"๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ"},{"id":":flag:_Wales:","symbol":"๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ"}] diff --git a/plugins/emoji/plugin.js b/plugins/emoji/plugin.js index ee9e38d593c..9b31996d6ff 100644 --- a/plugins/emoji/plugin.js +++ b/plugins/emoji/plugin.js @@ -11,8 +11,11 @@ var stylesLoaded = false; CKEDITOR.plugins.add( 'emoji', { - requires: 'autocomplete,textmatch', + requires: 'autocomplete,textmatch,ajax', beforeInit: function() { + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { + return; + } if ( !stylesLoaded ) { CKEDITOR.document.appendStyleSheet( this.path + 'skins/default.css' ); stylesLoaded = true; @@ -20,36 +23,16 @@ }, init: function( editor ) { - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { - return; - } - - // jscs:disable - var defaultEmojiList = [{"id":":grinning_face:","symbol":"๐Ÿ˜€"},{"id":":beaming_face_with_smiling_eyes:","symbol":"๐Ÿ˜"},{"id":":face_with_tears_of_joy:","symbol":"๐Ÿ˜‚"},{"id":":rolling_on_the_floor_laughing:","symbol":"๐Ÿคฃ"},{"id":":grinning_face_with_big_eyes:","symbol":"๐Ÿ˜ƒ"},{"id":":grinning_face_with_smiling_eyes:","symbol":"๐Ÿ˜„"},{"id":":grinning_face_with_sweat:","symbol":"๐Ÿ˜…"},{"id":":grinning_squinting_face:","symbol":"๐Ÿ˜†"},{"id":":winking_face:","symbol":"๐Ÿ˜‰"},{"id":":smiling_face_with_smiling_eyes:","symbol":"๐Ÿ˜Š"},{"id":":face_savoring_food:","symbol":"๐Ÿ˜‹"},{"id":":smiling_face_with_sunglasses:","symbol":"๐Ÿ˜Ž"},{"id":":smiling_face_with_heart-eyes:","symbol":"๐Ÿ˜"},{"id":":face_blowing_a_kiss:","symbol":"๐Ÿ˜˜"},{"id":":kissing_face:","symbol":"๐Ÿ˜—"},{"id":":kissing_face_with_smiling_eyes:","symbol":"๐Ÿ˜™"},{"id":":kissing_face_with_closed_eyes:","symbol":"๐Ÿ˜š"},{"id":":smiling_face:","symbol":"โ˜บ"},{"id":":slightly_smiling_face:","symbol":"๐Ÿ™‚"},{"id":":hugging_face:","symbol":"๐Ÿค—"},{"id":":star-struck:","symbol":"๐Ÿคฉ"},{"id":":thinking_face:","symbol":"๐Ÿค”"},{"id":":face_with_raised_eyebrow:","symbol":"๐Ÿคจ"},{"id":":neutral_face:","symbol":"๐Ÿ˜"},{"id":":expressionless_face:","symbol":"๐Ÿ˜‘"},{"id":":face_without_mouth:","symbol":"๐Ÿ˜ถ"},{"id":":face_with_rolling_eyes:","symbol":"๐Ÿ™„"},{"id":":smirking_face:","symbol":"๐Ÿ˜"},{"id":":persevering_face:","symbol":"๐Ÿ˜ฃ"},{"id":":sad_but_relieved_face:","symbol":"๐Ÿ˜ฅ"},{"id":":face_with_open_mouth:","symbol":"๐Ÿ˜ฎ"},{"id":":zipper-mouth_face:","symbol":"๐Ÿค"},{"id":":hushed_face:","symbol":"๐Ÿ˜ฏ"},{"id":":sleepy_face:","symbol":"๐Ÿ˜ช"},{"id":":tired_face:","symbol":"๐Ÿ˜ซ"},{"id":":sleeping_face:","symbol":"๐Ÿ˜ด"},{"id":":relieved_face:","symbol":"๐Ÿ˜Œ"},{"id":":face_with_tongue:","symbol":"๐Ÿ˜›"},{"id":":winking_face_with_tongue:","symbol":"๐Ÿ˜œ"},{"id":":squinting_face_with_tongue:","symbol":"๐Ÿ˜"},{"id":":drooling_face:","symbol":"๐Ÿคค"},{"id":":unamused_face:","symbol":"๐Ÿ˜’"},{"id":":downcast_face_with_sweat:","symbol":"๐Ÿ˜“"},{"id":":pensive_face:","symbol":"๐Ÿ˜”"},{"id":":confused_face:","symbol":"๐Ÿ˜•"},{"id":":upside-down_face:","symbol":"๐Ÿ™ƒ"},{"id":":money-mouth_face:","symbol":"๐Ÿค‘"},{"id":":astonished_face:","symbol":"๐Ÿ˜ฒ"},{"id":":frowning_face:","symbol":"โ˜น"},{"id":":slightly_frowning_face:","symbol":"๐Ÿ™"},{"id":":confounded_face:","symbol":"๐Ÿ˜–"},{"id":":disappointed_face:","symbol":"๐Ÿ˜ž"},{"id":":worried_face:","symbol":"๐Ÿ˜Ÿ"},{"id":":face_with_steam_from_nose:","symbol":"๐Ÿ˜ค"},{"id":":crying_face:","symbol":"๐Ÿ˜ข"},{"id":":loudly_crying_face:","symbol":"๐Ÿ˜ญ"},{"id":":frowning_face_with_open_mouth:","symbol":"๐Ÿ˜ฆ"},{"id":":anguished_face:","symbol":"๐Ÿ˜ง"},{"id":":fearful_face:","symbol":"๐Ÿ˜จ"},{"id":":weary_face:","symbol":"๐Ÿ˜ฉ"},{"id":":exploding_head:","symbol":"๐Ÿคฏ"},{"id":":grimacing_face:","symbol":"๐Ÿ˜ฌ"},{"id":":anxious_face_with_sweat:","symbol":"๐Ÿ˜ฐ"},{"id":":face_screaming_in_fear:","symbol":"๐Ÿ˜ฑ"},{"id":":flushed_face:","symbol":"๐Ÿ˜ณ"},{"id":":zany_face:","symbol":"๐Ÿคช"},{"id":":dizzy_face:","symbol":"๐Ÿ˜ต"},{"id":":pouting_face:","symbol":"๐Ÿ˜ก"},{"id":":angry_face:","symbol":"๐Ÿ˜ "},{"id":":face_with_symbols_on_mouth:","symbol":"๐Ÿคฌ"},{"id":":face_with_medical_mask:","symbol":"๐Ÿ˜ท"},{"id":":face_with_thermometer:","symbol":"๐Ÿค’"},{"id":":face_with_head-bandage:","symbol":"๐Ÿค•"},{"id":":nauseated_face:","symbol":"๐Ÿคข"},{"id":":face_vomiting:","symbol":"๐Ÿคฎ"},{"id":":sneezing_face:","symbol":"๐Ÿคง"},{"id":":smiling_face_with_halo:","symbol":"๐Ÿ˜‡"},{"id":":cowboy_hat_face:","symbol":"๐Ÿค "},{"id":":lying_face:","symbol":"๐Ÿคฅ"},{"id":":shushing_face:","symbol":"๐Ÿคซ"},{"id":":face_with_hand_over_mouth:","symbol":"๐Ÿคญ"},{"id":":face_with_monocle:","symbol":"๐Ÿง"},{"id":":nerd_face:","symbol":"๐Ÿค“"},{"id":":smiling_face_with_horns:","symbol":"๐Ÿ˜ˆ"},{"id":":angry_face_with_horns:","symbol":"๐Ÿ‘ฟ"},{"id":":clown_face:","symbol":"๐Ÿคก"},{"id":":ogre:","symbol":"๐Ÿ‘น"},{"id":":goblin:","symbol":"๐Ÿ‘บ"},{"id":":skull:","symbol":"๐Ÿ’€"},{"id":":skull_and_crossbones:","symbol":"โ˜ "},{"id":":ghost:","symbol":"๐Ÿ‘ป"},{"id":":alien:","symbol":"๐Ÿ‘ฝ"},{"id":":alien_monster:","symbol":"๐Ÿ‘พ"},{"id":":robot_face:","symbol":"๐Ÿค–"},{"id":":pile_of_poo:","symbol":"๐Ÿ’ฉ"},{"id":":grinning_cat_face:","symbol":"๐Ÿ˜บ"},{"id":":grinning_cat_face_with_smiling_eyes:","symbol":"๐Ÿ˜ธ"},{"id":":cat_face_with_tears_of_joy:","symbol":"๐Ÿ˜น"},{"id":":smiling_cat_face_with_heart-eyes:","symbol":"๐Ÿ˜ป"},{"id":":cat_face_with_wry_smile:","symbol":"๐Ÿ˜ผ"},{"id":":kissing_cat_face:","symbol":"๐Ÿ˜ฝ"},{"id":":weary_cat_face:","symbol":"๐Ÿ™€"},{"id":":crying_cat_face:","symbol":"๐Ÿ˜ฟ"},{"id":":pouting_cat_face:","symbol":"๐Ÿ˜พ"},{"id":":see-no-evil_monkey:","symbol":"๐Ÿ™ˆ"},{"id":":hear-no-evil_monkey:","symbol":"๐Ÿ™‰"},{"id":":speak-no-evil_monkey:","symbol":"๐Ÿ™Š"},{"id":":baby:","symbol":"๐Ÿ‘ถ"},{"id":":child:","symbol":"๐Ÿง’"},{"id":":boy:","symbol":"๐Ÿ‘ฆ"},{"id":":girl:","symbol":"๐Ÿ‘ง"},{"id":":person:","symbol":"๐Ÿง‘"},{"id":":person:_blond_hair:","symbol":"๐Ÿ‘ฑ"},{"id":":man:","symbol":"๐Ÿ‘จ"},{"id":":man:_blond_hair:","symbol":"๐Ÿ‘ฑโ€โ™‚๏ธ"},{"id":":man:_beard:","symbol":"๐Ÿง”"},{"id":":woman:","symbol":"๐Ÿ‘ฉ"},{"id":":woman:_blond_hair:","symbol":"๐Ÿ‘ฑโ€โ™€๏ธ"},{"id":":older_person:","symbol":"๐Ÿง“"},{"id":":old_man:","symbol":"๐Ÿ‘ด"},{"id":":old_woman:","symbol":"๐Ÿ‘ต"},{"id":":man_health_worker:","symbol":"๐Ÿ‘จโ€โš•๏ธ"},{"id":":woman_health_worker:","symbol":"๐Ÿ‘ฉโ€โš•๏ธ"},{"id":":man_student:","symbol":"๐Ÿ‘จโ€๐ŸŽ“"},{"id":":woman_student:","symbol":"๐Ÿ‘ฉโ€๐ŸŽ“"},{"id":":man_teacher:","symbol":"๐Ÿ‘จโ€๐Ÿซ"},{"id":":woman_teacher:","symbol":"๐Ÿ‘ฉโ€๐Ÿซ"},{"id":":man_judge:","symbol":"๐Ÿ‘จโ€โš–๏ธ"},{"id":":woman_judge:","symbol":"๐Ÿ‘ฉโ€โš–๏ธ"},{"id":":man_farmer:","symbol":"๐Ÿ‘จโ€๐ŸŒพ"},{"id":":woman_farmer:","symbol":"๐Ÿ‘ฉโ€๐ŸŒพ"},{"id":":man_cook:","symbol":"๐Ÿ‘จโ€๐Ÿณ"},{"id":":woman_cook:","symbol":"๐Ÿ‘ฉโ€๐Ÿณ"},{"id":":man_mechanic:","symbol":"๐Ÿ‘จโ€๐Ÿ”ง"},{"id":":woman_mechanic:","symbol":"๐Ÿ‘ฉโ€๐Ÿ”ง"},{"id":":man_factory_worker:","symbol":"๐Ÿ‘จโ€๐Ÿญ"},{"id":":woman_factory_worker:","symbol":"๐Ÿ‘ฉโ€๐Ÿญ"},{"id":":man_office_worker:","symbol":"๐Ÿ‘จโ€๐Ÿ’ผ"},{"id":":woman_office_worker:","symbol":"๐Ÿ‘ฉโ€๐Ÿ’ผ"},{"id":":man_scientist:","symbol":"๐Ÿ‘จโ€๐Ÿ”ฌ"},{"id":":woman_scientist:","symbol":"๐Ÿ‘ฉโ€๐Ÿ”ฌ"},{"id":":man_technologist:","symbol":"๐Ÿ‘จโ€๐Ÿ’ป"},{"id":":woman_technologist:","symbol":"๐Ÿ‘ฉโ€๐Ÿ’ป"},{"id":":man_singer:","symbol":"๐Ÿ‘จโ€๐ŸŽค"},{"id":":woman_singer:","symbol":"๐Ÿ‘ฉโ€๐ŸŽค"},{"id":":man_artist:","symbol":"๐Ÿ‘จโ€๐ŸŽจ"},{"id":":woman_artist:","symbol":"๐Ÿ‘ฉโ€๐ŸŽจ"},{"id":":man_pilot:","symbol":"๐Ÿ‘จโ€โœˆ๏ธ"},{"id":":woman_pilot:","symbol":"๐Ÿ‘ฉโ€โœˆ๏ธ"},{"id":":man_astronaut:","symbol":"๐Ÿ‘จโ€๐Ÿš€"},{"id":":woman_astronaut:","symbol":"๐Ÿ‘ฉโ€๐Ÿš€"},{"id":":man_firefighter:","symbol":"๐Ÿ‘จโ€๐Ÿš’"},{"id":":woman_firefighter:","symbol":"๐Ÿ‘ฉโ€๐Ÿš’"},{"id":":police_officer:","symbol":"๐Ÿ‘ฎ"},{"id":":man_police_officer:","symbol":"๐Ÿ‘ฎโ€โ™‚๏ธ"},{"id":":woman_police_officer:","symbol":"๐Ÿ‘ฎโ€โ™€๏ธ"},{"id":":detective:","symbol":"๐Ÿ•ต"},{"id":":man_detective:","symbol":"๐Ÿ•ต๏ธโ€โ™‚๏ธ"},{"id":":woman_detective:","symbol":"๐Ÿ•ต๏ธโ€โ™€๏ธ"},{"id":":guard:","symbol":"๐Ÿ’‚"},{"id":":man_guard:","symbol":"๐Ÿ’‚โ€โ™‚๏ธ"},{"id":":woman_guard:","symbol":"๐Ÿ’‚โ€โ™€๏ธ"},{"id":":construction_worker:","symbol":"๐Ÿ‘ท"},{"id":":man_construction_worker:","symbol":"๐Ÿ‘ทโ€โ™‚๏ธ"},{"id":":woman_construction_worker:","symbol":"๐Ÿ‘ทโ€โ™€๏ธ"},{"id":":prince:","symbol":"๐Ÿคด"},{"id":":princess:","symbol":"๐Ÿ‘ธ"},{"id":":person_wearing_turban:","symbol":"๐Ÿ‘ณ"},{"id":":man_wearing_turban:","symbol":"๐Ÿ‘ณโ€โ™‚๏ธ"},{"id":":woman_wearing_turban:","symbol":"๐Ÿ‘ณโ€โ™€๏ธ"},{"id":":man_with_Chinese_cap:","symbol":"๐Ÿ‘ฒ"},{"id":":woman_with_headscarf:","symbol":"๐Ÿง•"},{"id":":man_in_tuxedo:","symbol":"๐Ÿคต"},{"id":":bride_with_veil:","symbol":"๐Ÿ‘ฐ"},{"id":":pregnant_woman:","symbol":"๐Ÿคฐ"},{"id":":breast-feeding:","symbol":"๐Ÿคฑ"},{"id":":baby_angel:","symbol":"๐Ÿ‘ผ"},{"id":":Santa_Claus:","symbol":"๐ŸŽ…"},{"id":":Mrs._Claus:","symbol":"๐Ÿคถ"},{"id":":mage:","symbol":"๐Ÿง™"},{"id":":woman_mage:","symbol":"๐Ÿง™โ€โ™€๏ธ"},{"id":":man_mage:","symbol":"๐Ÿง™โ€โ™‚๏ธ"},{"id":":fairy:","symbol":"๐Ÿงš"},{"id":":woman_fairy:","symbol":"๐Ÿงšโ€โ™€๏ธ"},{"id":":man_fairy:","symbol":"๐Ÿงšโ€โ™‚๏ธ"},{"id":":vampire:","symbol":"๐Ÿง›"},{"id":":woman_vampire:","symbol":"๐Ÿง›โ€โ™€๏ธ"},{"id":":man_vampire:","symbol":"๐Ÿง›โ€โ™‚๏ธ"},{"id":":merperson:","symbol":"๐Ÿงœ"},{"id":":mermaid:","symbol":"๐Ÿงœโ€โ™€๏ธ"},{"id":":merman:","symbol":"๐Ÿงœโ€โ™‚๏ธ"},{"id":":elf:","symbol":"๐Ÿง"},{"id":":woman_elf:","symbol":"๐Ÿงโ€โ™€๏ธ"},{"id":":man_elf:","symbol":"๐Ÿงโ€โ™‚๏ธ"},{"id":":genie:","symbol":"๐Ÿงž"},{"id":":woman_genie:","symbol":"๐Ÿงžโ€โ™€๏ธ"},{"id":":man_genie:","symbol":"๐Ÿงžโ€โ™‚๏ธ"},{"id":":zombie:","symbol":"๐ŸงŸ"},{"id":":woman_zombie:","symbol":"๐ŸงŸโ€โ™€๏ธ"},{"id":":man_zombie:","symbol":"๐ŸงŸโ€โ™‚๏ธ"},{"id":":person_frowning:","symbol":"๐Ÿ™"},{"id":":man_frowning:","symbol":"๐Ÿ™โ€โ™‚๏ธ"},{"id":":woman_frowning:","symbol":"๐Ÿ™โ€โ™€๏ธ"},{"id":":person_pouting:","symbol":"๐Ÿ™Ž"},{"id":":man_pouting:","symbol":"๐Ÿ™Žโ€โ™‚๏ธ"},{"id":":woman_pouting:","symbol":"๐Ÿ™Žโ€โ™€๏ธ"},{"id":":person_gesturing_NO:","symbol":"๐Ÿ™…"},{"id":":man_gesturing_NO:","symbol":"๐Ÿ™…โ€โ™‚๏ธ"},{"id":":woman_gesturing_NO:","symbol":"๐Ÿ™…โ€โ™€๏ธ"},{"id":":person_gesturing_OK:","symbol":"๐Ÿ™†"},{"id":":man_gesturing_OK:","symbol":"๐Ÿ™†โ€โ™‚๏ธ"},{"id":":woman_gesturing_OK:","symbol":"๐Ÿ™†โ€โ™€๏ธ"},{"id":":person_tipping_hand:","symbol":"๐Ÿ’"},{"id":":man_tipping_hand:","symbol":"๐Ÿ’โ€โ™‚๏ธ"},{"id":":woman_tipping_hand:","symbol":"๐Ÿ’โ€โ™€๏ธ"},{"id":":person_raising_hand:","symbol":"๐Ÿ™‹"},{"id":":man_raising_hand:","symbol":"๐Ÿ™‹โ€โ™‚๏ธ"},{"id":":woman_raising_hand:","symbol":"๐Ÿ™‹โ€โ™€๏ธ"},{"id":":person_bowing:","symbol":"๐Ÿ™‡"},{"id":":man_bowing:","symbol":"๐Ÿ™‡โ€โ™‚๏ธ"},{"id":":woman_bowing:","symbol":"๐Ÿ™‡โ€โ™€๏ธ"},{"id":":person_facepalming:","symbol":"๐Ÿคฆ"},{"id":":man_facepalming:","symbol":"๐Ÿคฆโ€โ™‚๏ธ"},{"id":":woman_facepalming:","symbol":"๐Ÿคฆโ€โ™€๏ธ"},{"id":":person_shrugging:","symbol":"๐Ÿคท"},{"id":":man_shrugging:","symbol":"๐Ÿคทโ€โ™‚๏ธ"},{"id":":woman_shrugging:","symbol":"๐Ÿคทโ€โ™€๏ธ"},{"id":":person_getting_massage:","symbol":"๐Ÿ’†"},{"id":":man_getting_massage:","symbol":"๐Ÿ’†โ€โ™‚๏ธ"},{"id":":woman_getting_massage:","symbol":"๐Ÿ’†โ€โ™€๏ธ"},{"id":":person_getting_haircut:","symbol":"๐Ÿ’‡"},{"id":":man_getting_haircut:","symbol":"๐Ÿ’‡โ€โ™‚๏ธ"},{"id":":woman_getting_haircut:","symbol":"๐Ÿ’‡โ€โ™€๏ธ"},{"id":":person_walking:","symbol":"๐Ÿšถ"},{"id":":man_walking:","symbol":"๐Ÿšถโ€โ™‚๏ธ"},{"id":":woman_walking:","symbol":"๐Ÿšถโ€โ™€๏ธ"},{"id":":person_running:","symbol":"๐Ÿƒ"},{"id":":man_running:","symbol":"๐Ÿƒโ€โ™‚๏ธ"},{"id":":woman_running:","symbol":"๐Ÿƒโ€โ™€๏ธ"},{"id":":woman_dancing:","symbol":"๐Ÿ’ƒ"},{"id":":man_dancing:","symbol":"๐Ÿ•บ"},{"id":":people_with_bunny_ears:","symbol":"๐Ÿ‘ฏ"},{"id":":men_with_bunny_ears:","symbol":"๐Ÿ‘ฏโ€โ™‚๏ธ"},{"id":":women_with_bunny_ears:","symbol":"๐Ÿ‘ฏโ€โ™€๏ธ"},{"id":":person_in_steamy_room:","symbol":"๐Ÿง–"},{"id":":woman_in_steamy_room:","symbol":"๐Ÿง–โ€โ™€๏ธ"},{"id":":man_in_steamy_room:","symbol":"๐Ÿง–โ€โ™‚๏ธ"},{"id":":person_climbing:","symbol":"๐Ÿง—"},{"id":":woman_climbing:","symbol":"๐Ÿง—โ€โ™€๏ธ"},{"id":":man_climbing:","symbol":"๐Ÿง—โ€โ™‚๏ธ"},{"id":":person_in_lotus_position:","symbol":"๐Ÿง˜"},{"id":":woman_in_lotus_position:","symbol":"๐Ÿง˜โ€โ™€๏ธ"},{"id":":man_in_lotus_position:","symbol":"๐Ÿง˜โ€โ™‚๏ธ"},{"id":":person_taking_bath:","symbol":"๐Ÿ›€"},{"id":":person_in_bed:","symbol":"๐Ÿ›Œ"},{"id":":man_in_suit_levitating:","symbol":"๐Ÿ•ด"},{"id":":speaking_head:","symbol":"๐Ÿ—ฃ"},{"id":":bust_in_silhouette:","symbol":"๐Ÿ‘ค"},{"id":":busts_in_silhouette:","symbol":"๐Ÿ‘ฅ"},{"id":":person_fencing:","symbol":"๐Ÿคบ"},{"id":":horse_racing:","symbol":"๐Ÿ‡"},{"id":":skier:","symbol":"โ›ท"},{"id":":snowboarder:","symbol":"๐Ÿ‚"},{"id":":person_golfing:","symbol":"๐ŸŒ"},{"id":":man_golfing:","symbol":"๐ŸŒ๏ธโ€โ™‚๏ธ"},{"id":":woman_golfing:","symbol":"๐ŸŒ๏ธโ€โ™€๏ธ"},{"id":":person_surfing:","symbol":"๐Ÿ„"},{"id":":man_surfing:","symbol":"๐Ÿ„โ€โ™‚๏ธ"},{"id":":woman_surfing:","symbol":"๐Ÿ„โ€โ™€๏ธ"},{"id":":person_rowing_boat:","symbol":"๐Ÿšฃ"},{"id":":man_rowing_boat:","symbol":"๐Ÿšฃโ€โ™‚๏ธ"},{"id":":woman_rowing_boat:","symbol":"๐Ÿšฃโ€โ™€๏ธ"},{"id":":person_swimming:","symbol":"๐ŸŠ"},{"id":":man_swimming:","symbol":"๐ŸŠโ€โ™‚๏ธ"},{"id":":woman_swimming:","symbol":"๐ŸŠโ€โ™€๏ธ"},{"id":":person_bouncing_ball:","symbol":"โ›น"},{"id":":man_bouncing_ball:","symbol":"โ›น๏ธโ€โ™‚๏ธ"},{"id":":woman_bouncing_ball:","symbol":"โ›น๏ธโ€โ™€๏ธ"},{"id":":person_lifting_weights:","symbol":"๐Ÿ‹"},{"id":":man_lifting_weights:","symbol":"๐Ÿ‹๏ธโ€โ™‚๏ธ"},{"id":":woman_lifting_weights:","symbol":"๐Ÿ‹๏ธโ€โ™€๏ธ"},{"id":":person_biking:","symbol":"๐Ÿšด"},{"id":":man_biking:","symbol":"๐Ÿšดโ€โ™‚๏ธ"},{"id":":woman_biking:","symbol":"๐Ÿšดโ€โ™€๏ธ"},{"id":":person_mountain_biking:","symbol":"๐Ÿšต"},{"id":":man_mountain_biking:","symbol":"๐Ÿšตโ€โ™‚๏ธ"},{"id":":woman_mountain_biking:","symbol":"๐Ÿšตโ€โ™€๏ธ"},{"id":":racing_car:","symbol":"๐ŸŽ"},{"id":":motorcycle:","symbol":"๐Ÿ"},{"id":":person_cartwheeling:","symbol":"๐Ÿคธ"},{"id":":man_cartwheeling:","symbol":"๐Ÿคธโ€โ™‚๏ธ"},{"id":":woman_cartwheeling:","symbol":"๐Ÿคธโ€โ™€๏ธ"},{"id":":people_wrestling:","symbol":"๐Ÿคผ"},{"id":":men_wrestling:","symbol":"๐Ÿคผโ€โ™‚๏ธ"},{"id":":women_wrestling:","symbol":"๐Ÿคผโ€โ™€๏ธ"},{"id":":person_playing_water_polo:","symbol":"๐Ÿคฝ"},{"id":":man_playing_water_polo:","symbol":"๐Ÿคฝโ€โ™‚๏ธ"},{"id":":woman_playing_water_polo:","symbol":"๐Ÿคฝโ€โ™€๏ธ"},{"id":":person_playing_handball:","symbol":"๐Ÿคพ"},{"id":":man_playing_handball:","symbol":"๐Ÿคพโ€โ™‚๏ธ"},{"id":":woman_playing_handball:","symbol":"๐Ÿคพโ€โ™€๏ธ"},{"id":":person_juggling:","symbol":"๐Ÿคน"},{"id":":man_juggling:","symbol":"๐Ÿคนโ€โ™‚๏ธ"},{"id":":woman_juggling:","symbol":"๐Ÿคนโ€โ™€๏ธ"},{"id":":man_and_woman_holding_hands:","symbol":"๐Ÿ‘ซ"},{"id":":two_men_holding_hands:","symbol":"๐Ÿ‘ฌ"},{"id":":two_women_holding_hands:","symbol":"๐Ÿ‘ญ"},{"id":":kiss:","symbol":"๐Ÿ’"},{"id":":kiss:_woman_man:","symbol":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ"},{"id":":kiss:_man_man:","symbol":"๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ"},{"id":":kiss:_woman_woman:","symbol":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ"},{"id":":couple_with_heart:","symbol":"๐Ÿ’‘"},{"id":":couple_with_heart:_woman_man:","symbol":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ"},{"id":":couple_with_heart:_man_man:","symbol":"๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ"},{"id":":couple_with_heart:_woman_woman:","symbol":"๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ"},{"id":":family:","symbol":"๐Ÿ‘ช"},{"id":":family:_man_woman_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ"},{"id":":family:_man_woman_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง"},{"id":":family:_man_woman_girl_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_man_woman_boy_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_man_woman_girl_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":family:_man_man_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ"},{"id":":family:_man_man_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง"},{"id":":family:_man_man_girl_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_man_man_boy_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_man_man_girl_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":family:_woman_woman_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ"},{"id":":family:_woman_woman_girl:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง"},{"id":":family:_woman_woman_girl_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_woman_woman_boy_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_woman_woman_girl_girl:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":family:_man_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฆ"},{"id":":family:_man_boy_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_man_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘ง"},{"id":":family:_man_girl_boy:","symbol":"๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_man_girl_girl:","symbol":"๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":family:_woman_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฆ"},{"id":":family:_woman_boy_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ"},{"id":":family:_woman_girl:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘ง"},{"id":":family:_woman_girl_boy:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"},{"id":":family:_woman_girl_girl:","symbol":"๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง"},{"id":":selfie:","symbol":"๐Ÿคณ"},{"id":":flexed_biceps:","symbol":"๐Ÿ’ช"},{"id":":backhand_index_pointing_left:","symbol":"๐Ÿ‘ˆ"},{"id":":backhand_index_pointing_right:","symbol":"๐Ÿ‘‰"},{"id":":index_pointing_up:","symbol":"โ˜"},{"id":":backhand_index_pointing_up:","symbol":"๐Ÿ‘†"},{"id":":middle_finger:","symbol":"๐Ÿ–•"},{"id":":backhand_index_pointing_down:","symbol":"๐Ÿ‘‡"},{"id":":victory_hand:","symbol":"โœŒ"},{"id":":crossed_fingers:","symbol":"๐Ÿคž"},{"id":":vulcan_salute:","symbol":"๐Ÿ––"},{"id":":sign_of_the_horns:","symbol":"๐Ÿค˜"},{"id":":call_me_hand:","symbol":"๐Ÿค™"},{"id":":hand_with_fingers_splayed:","symbol":"๐Ÿ–"},{"id":":raised_hand:","symbol":"โœ‹"},{"id":":OK_hand:","symbol":"๐Ÿ‘Œ"},{"id":":thumbs_up:","symbol":"๐Ÿ‘"},{"id":":thumbs_down:","symbol":"๐Ÿ‘Ž"},{"id":":raised_fist:","symbol":"โœŠ"},{"id":":oncoming_fist:","symbol":"๐Ÿ‘Š"},{"id":":left-facing_fist:","symbol":"๐Ÿค›"},{"id":":right-facing_fist:","symbol":"๐Ÿคœ"},{"id":":raised_back_of_hand:","symbol":"๐Ÿคš"},{"id":":waving_hand:","symbol":"๐Ÿ‘‹"},{"id":":love-you_gesture:","symbol":"๐ŸคŸ"},{"id":":writing_hand:","symbol":"โœ"},{"id":":clapping_hands:","symbol":"๐Ÿ‘"},{"id":":open_hands:","symbol":"๐Ÿ‘"},{"id":":raising_hands:","symbol":"๐Ÿ™Œ"},{"id":":palms_up_together:","symbol":"๐Ÿคฒ"},{"id":":folded_hands:","symbol":"๐Ÿ™"},{"id":":handshake:","symbol":"๐Ÿค"},{"id":":nail_polish:","symbol":"๐Ÿ’…"},{"id":":ear:","symbol":"๐Ÿ‘‚"},{"id":":nose:","symbol":"๐Ÿ‘ƒ"},{"id":":footprints:","symbol":"๐Ÿ‘ฃ"},{"id":":eyes:","symbol":"๐Ÿ‘€"},{"id":":eye:","symbol":"๐Ÿ‘"},{"id":":eye_in_speech_bubble:","symbol":"๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ"},{"id":":brain:","symbol":"๐Ÿง "},{"id":":tongue:","symbol":"๐Ÿ‘…"},{"id":":mouth:","symbol":"๐Ÿ‘„"},{"id":":kiss_mark:","symbol":"๐Ÿ’‹"},{"id":":heart_with_arrow:","symbol":"๐Ÿ’˜"},{"id":":heart_with_ribbon:","symbol":"๐Ÿ’"},{"id":":sparkling_heart:","symbol":"๐Ÿ’–"},{"id":":growing_heart:","symbol":"๐Ÿ’—"},{"id":":beating_heart:","symbol":"๐Ÿ’“"},{"id":":revolving_hearts:","symbol":"๐Ÿ’ž"},{"id":":two_hearts:","symbol":"๐Ÿ’•"},{"id":":love_letter:","symbol":"๐Ÿ’Œ"},{"id":":heavy_heart_exclamation:","symbol":"โฃ"},{"id":":broken_heart:","symbol":"๐Ÿ’”"},{"id":":red_heart:","symbol":"โค"},{"id":":orange_heart:","symbol":"๐Ÿงก"},{"id":":yellow_heart:","symbol":"๐Ÿ’›"},{"id":":green_heart:","symbol":"๐Ÿ’š"},{"id":":blue_heart:","symbol":"๐Ÿ’™"},{"id":":purple_heart:","symbol":"๐Ÿ’œ"},{"id":":black_heart:","symbol":"๐Ÿ–ค"},{"id":":heart_decoration:","symbol":"๐Ÿ’Ÿ"},{"id":":zzz:","symbol":"๐Ÿ’ค"},{"id":":anger_symbol:","symbol":"๐Ÿ’ข"},{"id":":bomb:","symbol":"๐Ÿ’ฃ"},{"id":":collision:","symbol":"๐Ÿ’ฅ"},{"id":":sweat_droplets:","symbol":"๐Ÿ’ฆ"},{"id":":dashing_away:","symbol":"๐Ÿ’จ"},{"id":":dizzy:","symbol":"๐Ÿ’ซ"},{"id":":speech_balloon:","symbol":"๐Ÿ’ฌ"},{"id":":left_speech_bubble:","symbol":"๐Ÿ—จ"},{"id":":right_anger_bubble:","symbol":"๐Ÿ—ฏ"},{"id":":thought_balloon:","symbol":"๐Ÿ’ญ"},{"id":":hole:","symbol":"๐Ÿ•ณ"},{"id":":glasses:","symbol":"๐Ÿ‘“"},{"id":":sunglasses:","symbol":"๐Ÿ•ถ"},{"id":":necktie:","symbol":"๐Ÿ‘”"},{"id":":t-shirt:","symbol":"๐Ÿ‘•"},{"id":":jeans:","symbol":"๐Ÿ‘–"},{"id":":scarf:","symbol":"๐Ÿงฃ"},{"id":":gloves:","symbol":"๐Ÿงค"},{"id":":coat:","symbol":"๐Ÿงฅ"},{"id":":socks:","symbol":"๐Ÿงฆ"},{"id":":dress:","symbol":"๐Ÿ‘—"},{"id":":kimono:","symbol":"๐Ÿ‘˜"},{"id":":bikini:","symbol":"๐Ÿ‘™"},{"id":":womanโ€™s_clothes:","symbol":"๐Ÿ‘š"},{"id":":purse:","symbol":"๐Ÿ‘›"},{"id":":handbag:","symbol":"๐Ÿ‘œ"},{"id":":clutch_bag:","symbol":"๐Ÿ‘"},{"id":":shopping_bags:","symbol":"๐Ÿ›"},{"id":":backpack:","symbol":"๐ŸŽ’"},{"id":":manโ€™s_shoe:","symbol":"๐Ÿ‘ž"},{"id":":running_shoe:","symbol":"๐Ÿ‘Ÿ"},{"id":":high-heeled_shoe:","symbol":"๐Ÿ‘ "},{"id":":womanโ€™s_sandal:","symbol":"๐Ÿ‘ก"},{"id":":womanโ€™s_boot:","symbol":"๐Ÿ‘ข"},{"id":":crown:","symbol":"๐Ÿ‘‘"},{"id":":womanโ€™s_hat:","symbol":"๐Ÿ‘’"},{"id":":top_hat:","symbol":"๐ŸŽฉ"},{"id":":graduation_cap:","symbol":"๐ŸŽ“"},{"id":":billed_cap:","symbol":"๐Ÿงข"},{"id":":rescue_workerโ€™s_helmet:","symbol":"โ›‘"},{"id":":prayer_beads:","symbol":"๐Ÿ“ฟ"},{"id":":lipstick:","symbol":"๐Ÿ’„"},{"id":":ring:","symbol":"๐Ÿ’"},{"id":":gem_stone:","symbol":"๐Ÿ’Ž"},{"id":":monkey_face:","symbol":"๐Ÿต"},{"id":":monkey:","symbol":"๐Ÿ’"},{"id":":gorilla:","symbol":"๐Ÿฆ"},{"id":":dog_face:","symbol":"๐Ÿถ"},{"id":":dog:","symbol":"๐Ÿ•"},{"id":":poodle:","symbol":"๐Ÿฉ"},{"id":":wolf_face:","symbol":"๐Ÿบ"},{"id":":fox_face:","symbol":"๐ŸฆŠ"},{"id":":cat_face:","symbol":"๐Ÿฑ"},{"id":":cat:","symbol":"๐Ÿˆ"},{"id":":lion_face:","symbol":"๐Ÿฆ"},{"id":":tiger_face:","symbol":"๐Ÿฏ"},{"id":":tiger:","symbol":"๐Ÿ…"},{"id":":leopard:","symbol":"๐Ÿ†"},{"id":":horse_face:","symbol":"๐Ÿด"},{"id":":horse:","symbol":"๐ŸŽ"},{"id":":unicorn_face:","symbol":"๐Ÿฆ„"},{"id":":zebra:","symbol":"๐Ÿฆ“"},{"id":":deer:","symbol":"๐ŸฆŒ"},{"id":":cow_face:","symbol":"๐Ÿฎ"},{"id":":ox:","symbol":"๐Ÿ‚"},{"id":":water_buffalo:","symbol":"๐Ÿƒ"},{"id":":cow:","symbol":"๐Ÿ„"},{"id":":pig_face:","symbol":"๐Ÿท"},{"id":":pig:","symbol":"๐Ÿ–"},{"id":":boar:","symbol":"๐Ÿ—"},{"id":":pig_nose:","symbol":"๐Ÿฝ"},{"id":":ram:","symbol":"๐Ÿ"},{"id":":ewe:","symbol":"๐Ÿ‘"},{"id":":goat:","symbol":"๐Ÿ"},{"id":":camel:","symbol":"๐Ÿช"},{"id":":two-hump_camel:","symbol":"๐Ÿซ"},{"id":":giraffe:","symbol":"๐Ÿฆ’"},{"id":":elephant:","symbol":"๐Ÿ˜"},{"id":":rhinoceros:","symbol":"๐Ÿฆ"},{"id":":mouse_face:","symbol":"๐Ÿญ"},{"id":":mouse:","symbol":"๐Ÿ"},{"id":":rat:","symbol":"๐Ÿ€"},{"id":":hamster_face:","symbol":"๐Ÿน"},{"id":":rabbit_face:","symbol":"๐Ÿฐ"},{"id":":rabbit:","symbol":"๐Ÿ‡"},{"id":":chipmunk:","symbol":"๐Ÿฟ"},{"id":":hedgehog:","symbol":"๐Ÿฆ”"},{"id":":bat:","symbol":"๐Ÿฆ‡"},{"id":":bear_face:","symbol":"๐Ÿป"},{"id":":koala:","symbol":"๐Ÿจ"},{"id":":panda_face:","symbol":"๐Ÿผ"},{"id":":paw_prints:","symbol":"๐Ÿพ"},{"id":":turkey:","symbol":"๐Ÿฆƒ"},{"id":":chicken:","symbol":"๐Ÿ”"},{"id":":rooster:","symbol":"๐Ÿ“"},{"id":":hatching_chick:","symbol":"๐Ÿฃ"},{"id":":baby_chick:","symbol":"๐Ÿค"},{"id":":front-facing_baby_chick:","symbol":"๐Ÿฅ"},{"id":":bird:","symbol":"๐Ÿฆ"},{"id":":penguin:","symbol":"๐Ÿง"},{"id":":dove:","symbol":"๐Ÿ•Š"},{"id":":eagle:","symbol":"๐Ÿฆ…"},{"id":":duck:","symbol":"๐Ÿฆ†"},{"id":":owl:","symbol":"๐Ÿฆ‰"},{"id":":frog_face:","symbol":"๐Ÿธ"},{"id":":crocodile:","symbol":"๐ŸŠ"},{"id":":turtle:","symbol":"๐Ÿข"},{"id":":lizard:","symbol":"๐ŸฆŽ"},{"id":":snake:","symbol":"๐Ÿ"},{"id":":dragon_face:","symbol":"๐Ÿฒ"},{"id":":dragon:","symbol":"๐Ÿ‰"},{"id":":sauropod:","symbol":"๐Ÿฆ•"},{"id":":T-Rex:","symbol":"๐Ÿฆ–"},{"id":":spouting_whale:","symbol":"๐Ÿณ"},{"id":":whale:","symbol":"๐Ÿ‹"},{"id":":dolphin:","symbol":"๐Ÿฌ"},{"id":":fish:","symbol":"๐ŸŸ"},{"id":":tropical_fish:","symbol":"๐Ÿ "},{"id":":blowfish:","symbol":"๐Ÿก"},{"id":":shark:","symbol":"๐Ÿฆˆ"},{"id":":octopus:","symbol":"๐Ÿ™"},{"id":":spiral_shell:","symbol":"๐Ÿš"},{"id":":crab:","symbol":"๐Ÿฆ€"},{"id":":shrimp:","symbol":"๐Ÿฆ"},{"id":":squid:","symbol":"๐Ÿฆ‘"},{"id":":snail:","symbol":"๐ŸŒ"},{"id":":butterfly:","symbol":"๐Ÿฆ‹"},{"id":":bug:","symbol":"๐Ÿ›"},{"id":":ant:","symbol":"๐Ÿœ"},{"id":":honeybee:","symbol":"๐Ÿ"},{"id":":lady_beetle:","symbol":"๐Ÿž"},{"id":":cricket:","symbol":"๐Ÿฆ—"},{"id":":spider:","symbol":"๐Ÿ•ท"},{"id":":spider_web:","symbol":"๐Ÿ•ธ"},{"id":":scorpion:","symbol":"๐Ÿฆ‚"},{"id":":bouquet:","symbol":"๐Ÿ’"},{"id":":cherry_blossom:","symbol":"๐ŸŒธ"},{"id":":white_flower:","symbol":"๐Ÿ’ฎ"},{"id":":rosette:","symbol":"๐Ÿต"},{"id":":rose:","symbol":"๐ŸŒน"},{"id":":wilted_flower:","symbol":"๐Ÿฅ€"},{"id":":hibiscus:","symbol":"๐ŸŒบ"},{"id":":sunflower:","symbol":"๐ŸŒป"},{"id":":blossom:","symbol":"๐ŸŒผ"},{"id":":tulip:","symbol":"๐ŸŒท"},{"id":":seedling:","symbol":"๐ŸŒฑ"},{"id":":evergreen_tree:","symbol":"๐ŸŒฒ"},{"id":":deciduous_tree:","symbol":"๐ŸŒณ"},{"id":":palm_tree:","symbol":"๐ŸŒด"},{"id":":cactus:","symbol":"๐ŸŒต"},{"id":":sheaf_of_rice:","symbol":"๐ŸŒพ"},{"id":":herb:","symbol":"๐ŸŒฟ"},{"id":":shamrock:","symbol":"โ˜˜"},{"id":":four_leaf_clover:","symbol":"๐Ÿ€"},{"id":":maple_leaf:","symbol":"๐Ÿ"},{"id":":fallen_leaf:","symbol":"๐Ÿ‚"},{"id":":leaf_fluttering_in_wind:","symbol":"๐Ÿƒ"},{"id":":grapes:","symbol":"๐Ÿ‡"},{"id":":melon:","symbol":"๐Ÿˆ"},{"id":":watermelon:","symbol":"๐Ÿ‰"},{"id":":tangerine:","symbol":"๐ŸŠ"},{"id":":lemon:","symbol":"๐Ÿ‹"},{"id":":banana:","symbol":"๐ŸŒ"},{"id":":pineapple:","symbol":"๐Ÿ"},{"id":":red_apple:","symbol":"๐ŸŽ"},{"id":":green_apple:","symbol":"๐Ÿ"},{"id":":pear:","symbol":"๐Ÿ"},{"id":":peach:","symbol":"๐Ÿ‘"},{"id":":cherries:","symbol":"๐Ÿ’"},{"id":":strawberry:","symbol":"๐Ÿ“"},{"id":":kiwi_fruit:","symbol":"๐Ÿฅ"},{"id":":tomato:","symbol":"๐Ÿ…"},{"id":":coconut:","symbol":"๐Ÿฅฅ"},{"id":":avocado:","symbol":"๐Ÿฅ‘"},{"id":":eggplant:","symbol":"๐Ÿ†"},{"id":":potato:","symbol":"๐Ÿฅ”"},{"id":":carrot:","symbol":"๐Ÿฅ•"},{"id":":ear_of_corn:","symbol":"๐ŸŒฝ"},{"id":":hot_pepper:","symbol":"๐ŸŒถ"},{"id":":cucumber:","symbol":"๐Ÿฅ’"},{"id":":broccoli:","symbol":"๐Ÿฅฆ"},{"id":":mushroom:","symbol":"๐Ÿ„"},{"id":":peanuts:","symbol":"๐Ÿฅœ"},{"id":":chestnut:","symbol":"๐ŸŒฐ"},{"id":":bread:","symbol":"๐Ÿž"},{"id":":croissant:","symbol":"๐Ÿฅ"},{"id":":baguette_bread:","symbol":"๐Ÿฅ–"},{"id":":pretzel:","symbol":"๐Ÿฅจ"},{"id":":pancakes:","symbol":"๐Ÿฅž"},{"id":":cheese_wedge:","symbol":"๐Ÿง€"},{"id":":meat_on_bone:","symbol":"๐Ÿ–"},{"id":":poultry_leg:","symbol":"๐Ÿ—"},{"id":":cut_of_meat:","symbol":"๐Ÿฅฉ"},{"id":":bacon:","symbol":"๐Ÿฅ“"},{"id":":hamburger:","symbol":"๐Ÿ”"},{"id":":french_fries:","symbol":"๐ŸŸ"},{"id":":pizza:","symbol":"๐Ÿ•"},{"id":":hot_dog:","symbol":"๐ŸŒญ"},{"id":":sandwich:","symbol":"๐Ÿฅช"},{"id":":taco:","symbol":"๐ŸŒฎ"},{"id":":burrito:","symbol":"๐ŸŒฏ"},{"id":":stuffed_flatbread:","symbol":"๐Ÿฅ™"},{"id":":egg:","symbol":"๐Ÿฅš"},{"id":":cooking:","symbol":"๐Ÿณ"},{"id":":shallow_pan_of_food:","symbol":"๐Ÿฅ˜"},{"id":":pot_of_food:","symbol":"๐Ÿฒ"},{"id":":bowl_with_spoon:","symbol":"๐Ÿฅฃ"},{"id":":green_salad:","symbol":"๐Ÿฅ—"},{"id":":popcorn:","symbol":"๐Ÿฟ"},{"id":":canned_food:","symbol":"๐Ÿฅซ"},{"id":":bento_box:","symbol":"๐Ÿฑ"},{"id":":rice_cracker:","symbol":"๐Ÿ˜"},{"id":":rice_ball:","symbol":"๐Ÿ™"},{"id":":cooked_rice:","symbol":"๐Ÿš"},{"id":":curry_rice:","symbol":"๐Ÿ›"},{"id":":steaming_bowl:","symbol":"๐Ÿœ"},{"id":":spaghetti:","symbol":"๐Ÿ"},{"id":":roasted_sweet_potato:","symbol":"๐Ÿ "},{"id":":oden:","symbol":"๐Ÿข"},{"id":":sushi:","symbol":"๐Ÿฃ"},{"id":":fried_shrimp:","symbol":"๐Ÿค"},{"id":":fish_cake_with_swirl:","symbol":"๐Ÿฅ"},{"id":":dango:","symbol":"๐Ÿก"},{"id":":dumpling:","symbol":"๐ŸฅŸ"},{"id":":fortune_cookie:","symbol":"๐Ÿฅ "},{"id":":takeout_box:","symbol":"๐Ÿฅก"},{"id":":soft_ice_cream:","symbol":"๐Ÿฆ"},{"id":":shaved_ice:","symbol":"๐Ÿง"},{"id":":ice_cream:","symbol":"๐Ÿจ"},{"id":":doughnut:","symbol":"๐Ÿฉ"},{"id":":cookie:","symbol":"๐Ÿช"},{"id":":birthday_cake:","symbol":"๐ŸŽ‚"},{"id":":shortcake:","symbol":"๐Ÿฐ"},{"id":":pie:","symbol":"๐Ÿฅง"},{"id":":chocolate_bar:","symbol":"๐Ÿซ"},{"id":":candy:","symbol":"๐Ÿฌ"},{"id":":lollipop:","symbol":"๐Ÿญ"},{"id":":custard:","symbol":"๐Ÿฎ"},{"id":":honey_pot:","symbol":"๐Ÿฏ"},{"id":":baby_bottle:","symbol":"๐Ÿผ"},{"id":":glass_of_milk:","symbol":"๐Ÿฅ›"},{"id":":hot_beverage:","symbol":"โ˜•"},{"id":":teacup_without_handle:","symbol":"๐Ÿต"},{"id":":sake:","symbol":"๐Ÿถ"},{"id":":bottle_with_popping_cork:","symbol":"๐Ÿพ"},{"id":":wine_glass:","symbol":"๐Ÿท"},{"id":":cocktail_glass:","symbol":"๐Ÿธ"},{"id":":tropical_drink:","symbol":"๐Ÿน"},{"id":":beer_mug:","symbol":"๐Ÿบ"},{"id":":clinking_beer_mugs:","symbol":"๐Ÿป"},{"id":":clinking_glasses:","symbol":"๐Ÿฅ‚"},{"id":":tumbler_glass:","symbol":"๐Ÿฅƒ"},{"id":":cup_with_straw:","symbol":"๐Ÿฅค"},{"id":":chopsticks:","symbol":"๐Ÿฅข"},{"id":":fork_and_knife_with_plate:","symbol":"๐Ÿฝ"},{"id":":fork_and_knife:","symbol":"๐Ÿด"},{"id":":spoon:","symbol":"๐Ÿฅ„"},{"id":":kitchen_knife:","symbol":"๐Ÿ”ช"},{"id":":amphora:","symbol":"๐Ÿบ"},{"id":":globe_showing_Europe-Africa:","symbol":"๐ŸŒ"},{"id":":globe_showing_Americas:","symbol":"๐ŸŒŽ"},{"id":":globe_showing_Asia-Australia:","symbol":"๐ŸŒ"},{"id":":globe_with_meridians:","symbol":"๐ŸŒ"},{"id":":world_map:","symbol":"๐Ÿ—บ"},{"id":":map_of_Japan:","symbol":"๐Ÿ—พ"},{"id":":snow-capped_mountain:","symbol":"๐Ÿ”"},{"id":":mountain:","symbol":"โ›ฐ"},{"id":":volcano:","symbol":"๐ŸŒ‹"},{"id":":mount_fuji:","symbol":"๐Ÿ—ป"},{"id":":camping:","symbol":"๐Ÿ•"},{"id":":beach_with_umbrella:","symbol":"๐Ÿ–"},{"id":":desert:","symbol":"๐Ÿœ"},{"id":":desert_island:","symbol":"๐Ÿ"},{"id":":national_park:","symbol":"๐Ÿž"},{"id":":stadium:","symbol":"๐ŸŸ"},{"id":":classical_building:","symbol":"๐Ÿ›"},{"id":":building_construction:","symbol":"๐Ÿ—"},{"id":":houses:","symbol":"๐Ÿ˜"},{"id":":derelict_house:","symbol":"๐Ÿš"},{"id":":house:","symbol":"๐Ÿ "},{"id":":house_with_garden:","symbol":"๐Ÿก"},{"id":":office_building:","symbol":"๐Ÿข"},{"id":":Japanese_post_office:","symbol":"๐Ÿฃ"},{"id":":post_office:","symbol":"๐Ÿค"},{"id":":hospital:","symbol":"๐Ÿฅ"},{"id":":bank:","symbol":"๐Ÿฆ"},{"id":":hotel:","symbol":"๐Ÿจ"},{"id":":love_hotel:","symbol":"๐Ÿฉ"},{"id":":convenience_store:","symbol":"๐Ÿช"},{"id":":school:","symbol":"๐Ÿซ"},{"id":":department_store:","symbol":"๐Ÿฌ"},{"id":":factory:","symbol":"๐Ÿญ"},{"id":":Japanese_castle:","symbol":"๐Ÿฏ"},{"id":":castle:","symbol":"๐Ÿฐ"},{"id":":wedding:","symbol":"๐Ÿ’’"},{"id":":Tokyo_tower:","symbol":"๐Ÿ—ผ"},{"id":":Statue_of_Liberty:","symbol":"๐Ÿ—ฝ"},{"id":":church:","symbol":"โ›ช"},{"id":":mosque:","symbol":"๐Ÿ•Œ"},{"id":":synagogue:","symbol":"๐Ÿ•"},{"id":":shinto_shrine:","symbol":"โ›ฉ"},{"id":":kaaba:","symbol":"๐Ÿ•‹"},{"id":":fountain:","symbol":"โ›ฒ"},{"id":":tent:","symbol":"โ›บ"},{"id":":foggy:","symbol":"๐ŸŒ"},{"id":":night_with_stars:","symbol":"๐ŸŒƒ"},{"id":":cityscape:","symbol":"๐Ÿ™"},{"id":":sunrise_over_mountains:","symbol":"๐ŸŒ„"},{"id":":sunrise:","symbol":"๐ŸŒ…"},{"id":":cityscape_at_dusk:","symbol":"๐ŸŒ†"},{"id":":sunset:","symbol":"๐ŸŒ‡"},{"id":":bridge_at_night:","symbol":"๐ŸŒ‰"},{"id":":hot_springs:","symbol":"โ™จ"},{"id":":milky_way:","symbol":"๐ŸŒŒ"},{"id":":carousel_horse:","symbol":"๐ŸŽ "},{"id":":ferris_wheel:","symbol":"๐ŸŽก"},{"id":":roller_coaster:","symbol":"๐ŸŽข"},{"id":":barber_pole:","symbol":"๐Ÿ’ˆ"},{"id":":circus_tent:","symbol":"๐ŸŽช"},{"id":":locomotive:","symbol":"๐Ÿš‚"},{"id":":railway_car:","symbol":"๐Ÿšƒ"},{"id":":high-speed_train:","symbol":"๐Ÿš„"},{"id":":bullet_train:","symbol":"๐Ÿš…"},{"id":":train:","symbol":"๐Ÿš†"},{"id":":metro:","symbol":"๐Ÿš‡"},{"id":":light_rail:","symbol":"๐Ÿšˆ"},{"id":":station:","symbol":"๐Ÿš‰"},{"id":":tram:","symbol":"๐ŸšŠ"},{"id":":monorail:","symbol":"๐Ÿš"},{"id":":mountain_railway:","symbol":"๐Ÿšž"},{"id":":tram_car:","symbol":"๐Ÿš‹"},{"id":":bus:","symbol":"๐ŸšŒ"},{"id":":oncoming_bus:","symbol":"๐Ÿš"},{"id":":trolleybus:","symbol":"๐ŸšŽ"},{"id":":minibus:","symbol":"๐Ÿš"},{"id":":ambulance:","symbol":"๐Ÿš‘"},{"id":":fire_engine:","symbol":"๐Ÿš’"},{"id":":police_car:","symbol":"๐Ÿš“"},{"id":":oncoming_police_car:","symbol":"๐Ÿš”"},{"id":":taxi:","symbol":"๐Ÿš•"},{"id":":oncoming_taxi:","symbol":"๐Ÿš–"},{"id":":automobile:","symbol":"๐Ÿš—"},{"id":":oncoming_automobile:","symbol":"๐Ÿš˜"},{"id":":sport_utility_vehicle:","symbol":"๐Ÿš™"},{"id":":delivery_truck:","symbol":"๐Ÿšš"},{"id":":articulated_lorry:","symbol":"๐Ÿš›"},{"id":":tractor:","symbol":"๐Ÿšœ"},{"id":":bicycle:","symbol":"๐Ÿšฒ"},{"id":":kick_scooter:","symbol":"๐Ÿ›ด"},{"id":":motor_scooter:","symbol":"๐Ÿ›ต"},{"id":":bus_stop:","symbol":"๐Ÿš"},{"id":":motorway:","symbol":"๐Ÿ›ฃ"},{"id":":railway_track:","symbol":"๐Ÿ›ค"},{"id":":oil_drum:","symbol":"๐Ÿ›ข"},{"id":":fuel_pump:","symbol":"โ›ฝ"},{"id":":police_car_light:","symbol":"๐Ÿšจ"},{"id":":horizontal_traffic_light:","symbol":"๐Ÿšฅ"},{"id":":vertical_traffic_light:","symbol":"๐Ÿšฆ"},{"id":":stop_sign:","symbol":"๐Ÿ›‘"},{"id":":construction:","symbol":"๐Ÿšง"},{"id":":anchor:","symbol":"โš“"},{"id":":sailboat:","symbol":"โ›ต"},{"id":":canoe:","symbol":"๐Ÿ›ถ"},{"id":":speedboat:","symbol":"๐Ÿšค"},{"id":":passenger_ship:","symbol":"๐Ÿ›ณ"},{"id":":ferry:","symbol":"โ›ด"},{"id":":motor_boat:","symbol":"๐Ÿ›ฅ"},{"id":":ship:","symbol":"๐Ÿšข"},{"id":":airplane:","symbol":"โœˆ"},{"id":":small_airplane:","symbol":"๐Ÿ›ฉ"},{"id":":airplane_departure:","symbol":"๐Ÿ›ซ"},{"id":":airplane_arrival:","symbol":"๐Ÿ›ฌ"},{"id":":seat:","symbol":"๐Ÿ’บ"},{"id":":helicopter:","symbol":"๐Ÿš"},{"id":":suspension_railway:","symbol":"๐ŸšŸ"},{"id":":mountain_cableway:","symbol":"๐Ÿš "},{"id":":aerial_tramway:","symbol":"๐Ÿšก"},{"id":":satellite:","symbol":"๐Ÿ›ฐ"},{"id":":rocket:","symbol":"๐Ÿš€"},{"id":":flying_saucer:","symbol":"๐Ÿ›ธ"},{"id":":bellhop_bell:","symbol":"๐Ÿ›Ž"},{"id":":hourglass_done:","symbol":"โŒ›"},{"id":":hourglass_not_done:","symbol":"โณ"},{"id":":watch:","symbol":"โŒš"},{"id":":alarm_clock:","symbol":"โฐ"},{"id":":stopwatch:","symbol":"โฑ"},{"id":":timer_clock:","symbol":"โฒ"},{"id":":mantelpiece_clock:","symbol":"๐Ÿ•ฐ"},{"id":":twelve_oโ€™clock:","symbol":"๐Ÿ•›"},{"id":":twelve-thirty:","symbol":"๐Ÿ•ง"},{"id":":one_oโ€™clock:","symbol":"๐Ÿ•"},{"id":":one-thirty:","symbol":"๐Ÿ•œ"},{"id":":two_oโ€™clock:","symbol":"๐Ÿ•‘"},{"id":":two-thirty:","symbol":"๐Ÿ•"},{"id":":three_oโ€™clock:","symbol":"๐Ÿ•’"},{"id":":three-thirty:","symbol":"๐Ÿ•ž"},{"id":":four_oโ€™clock:","symbol":"๐Ÿ•“"},{"id":":four-thirty:","symbol":"๐Ÿ•Ÿ"},{"id":":five_oโ€™clock:","symbol":"๐Ÿ•”"},{"id":":five-thirty:","symbol":"๐Ÿ• "},{"id":":six_oโ€™clock:","symbol":"๐Ÿ••"},{"id":":six-thirty:","symbol":"๐Ÿ•ก"},{"id":":seven_oโ€™clock:","symbol":"๐Ÿ•–"},{"id":":seven-thirty:","symbol":"๐Ÿ•ข"},{"id":":eight_oโ€™clock:","symbol":"๐Ÿ•—"},{"id":":eight-thirty:","symbol":"๐Ÿ•ฃ"},{"id":":nine_oโ€™clock:","symbol":"๐Ÿ•˜"},{"id":":nine-thirty:","symbol":"๐Ÿ•ค"},{"id":":ten_oโ€™clock:","symbol":"๐Ÿ•™"},{"id":":ten-thirty:","symbol":"๐Ÿ•ฅ"},{"id":":eleven_oโ€™clock:","symbol":"๐Ÿ•š"},{"id":":eleven-thirty:","symbol":"๐Ÿ•ฆ"},{"id":":new_moon:","symbol":"๐ŸŒ‘"},{"id":":waxing_crescent_moon:","symbol":"๐ŸŒ’"},{"id":":first_quarter_moon:","symbol":"๐ŸŒ“"},{"id":":waxing_gibbous_moon:","symbol":"๐ŸŒ”"},{"id":":full_moon:","symbol":"๐ŸŒ•"},{"id":":waning_gibbous_moon:","symbol":"๐ŸŒ–"},{"id":":last_quarter_moon:","symbol":"๐ŸŒ—"},{"id":":waning_crescent_moon:","symbol":"๐ŸŒ˜"},{"id":":crescent_moon:","symbol":"๐ŸŒ™"},{"id":":new_moon_face:","symbol":"๐ŸŒš"},{"id":":first_quarter_moon_face:","symbol":"๐ŸŒ›"},{"id":":last_quarter_moon_face:","symbol":"๐ŸŒœ"},{"id":":thermometer:","symbol":"๐ŸŒก"},{"id":":sun:","symbol":"โ˜€"},{"id":":full_moon_face:","symbol":"๐ŸŒ"},{"id":":sun_with_face:","symbol":"๐ŸŒž"},{"id":":star:","symbol":"โญ"},{"id":":glowing_star:","symbol":"๐ŸŒŸ"},{"id":":shooting_star:","symbol":"๐ŸŒ "},{"id":":cloud:","symbol":"โ˜"},{"id":":sun_behind_cloud:","symbol":"โ›…"},{"id":":cloud_with_lightning_and_rain:","symbol":"โ›ˆ"},{"id":":sun_behind_small_cloud:","symbol":"๐ŸŒค"},{"id":":sun_behind_large_cloud:","symbol":"๐ŸŒฅ"},{"id":":sun_behind_rain_cloud:","symbol":"๐ŸŒฆ"},{"id":":cloud_with_rain:","symbol":"๐ŸŒง"},{"id":":cloud_with_snow:","symbol":"๐ŸŒจ"},{"id":":cloud_with_lightning:","symbol":"๐ŸŒฉ"},{"id":":tornado:","symbol":"๐ŸŒช"},{"id":":fog:","symbol":"๐ŸŒซ"},{"id":":wind_face:","symbol":"๐ŸŒฌ"},{"id":":cyclone:","symbol":"๐ŸŒ€"},{"id":":rainbow:","symbol":"๐ŸŒˆ"},{"id":":closed_umbrella:","symbol":"๐ŸŒ‚"},{"id":":umbrella:","symbol":"โ˜‚"},{"id":":umbrella_with_rain_drops:","symbol":"โ˜”"},{"id":":umbrella_on_ground:","symbol":"โ›ฑ"},{"id":":high_voltage:","symbol":"โšก"},{"id":":snowflake:","symbol":"โ„"},{"id":":snowman:","symbol":"โ˜ƒ"},{"id":":snowman_without_snow:","symbol":"โ›„"},{"id":":comet:","symbol":"โ˜„"},{"id":":fire:","symbol":"๐Ÿ”ฅ"},{"id":":droplet:","symbol":"๐Ÿ’ง"},{"id":":water_wave:","symbol":"๐ŸŒŠ"},{"id":":jack-o-lantern:","symbol":"๐ŸŽƒ"},{"id":":Christmas_tree:","symbol":"๐ŸŽ„"},{"id":":fireworks:","symbol":"๐ŸŽ†"},{"id":":sparkler:","symbol":"๐ŸŽ‡"},{"id":":sparkles:","symbol":"โœจ"},{"id":":balloon:","symbol":"๐ŸŽˆ"},{"id":":party_popper:","symbol":"๐ŸŽ‰"},{"id":":confetti_ball:","symbol":"๐ŸŽŠ"},{"id":":tanabata_tree:","symbol":"๐ŸŽ‹"},{"id":":pine_decoration:","symbol":"๐ŸŽ"},{"id":":Japanese_dolls:","symbol":"๐ŸŽŽ"},{"id":":carp_streamer:","symbol":"๐ŸŽ"},{"id":":wind_chime:","symbol":"๐ŸŽ"},{"id":":moon_viewing_ceremony:","symbol":"๐ŸŽ‘"},{"id":":ribbon:","symbol":"๐ŸŽ€"},{"id":":wrapped_gift:","symbol":"๐ŸŽ"},{"id":":reminder_ribbon:","symbol":"๐ŸŽ—"},{"id":":admission_tickets:","symbol":"๐ŸŽŸ"},{"id":":ticket:","symbol":"๐ŸŽซ"},{"id":":military_medal:","symbol":"๐ŸŽ–"},{"id":":trophy:","symbol":"๐Ÿ†"},{"id":":sports_medal:","symbol":"๐Ÿ…"},{"id":":1st_place_medal:","symbol":"๐Ÿฅ‡"},{"id":":2nd_place_medal:","symbol":"๐Ÿฅˆ"},{"id":":3rd_place_medal:","symbol":"๐Ÿฅ‰"},{"id":":soccer_ball:","symbol":"โšฝ"},{"id":":baseball:","symbol":"โšพ"},{"id":":basketball:","symbol":"๐Ÿ€"},{"id":":volleyball:","symbol":"๐Ÿ"},{"id":":american_football:","symbol":"๐Ÿˆ"},{"id":":rugby_football:","symbol":"๐Ÿ‰"},{"id":":tennis:","symbol":"๐ŸŽพ"},{"id":":bowling:","symbol":"๐ŸŽณ"},{"id":":cricket_game:","symbol":"๐Ÿ"},{"id":":field_hockey:","symbol":"๐Ÿ‘"},{"id":":ice_hockey:","symbol":"๐Ÿ’"},{"id":":ping_pong:","symbol":"๐Ÿ“"},{"id":":badminton:","symbol":"๐Ÿธ"},{"id":":boxing_glove:","symbol":"๐ŸฅŠ"},{"id":":martial_arts_uniform:","symbol":"๐Ÿฅ‹"},{"id":":goal_net:","symbol":"๐Ÿฅ…"},{"id":":flag_in_hole:","symbol":"โ›ณ"},{"id":":ice_skate:","symbol":"โ›ธ"},{"id":":fishing_pole:","symbol":"๐ŸŽฃ"},{"id":":running_shirt:","symbol":"๐ŸŽฝ"},{"id":":skis:","symbol":"๐ŸŽฟ"},{"id":":sled:","symbol":"๐Ÿ›ท"},{"id":":curling_stone:","symbol":"๐ŸฅŒ"},{"id":":direct_hit:","symbol":"๐ŸŽฏ"},{"id":":pool_8_ball:","symbol":"๐ŸŽฑ"},{"id":":crystal_ball:","symbol":"๐Ÿ”ฎ"},{"id":":video_game:","symbol":"๐ŸŽฎ"},{"id":":joystick:","symbol":"๐Ÿ•น"},{"id":":slot_machine:","symbol":"๐ŸŽฐ"},{"id":":game_die:","symbol":"๐ŸŽฒ"},{"id":":spade_suit:","symbol":"โ™ "},{"id":":heart_suit:","symbol":"โ™ฅ"},{"id":":diamond_suit:","symbol":"โ™ฆ"},{"id":":club_suit:","symbol":"โ™ฃ"},{"id":":joker:","symbol":"๐Ÿƒ"},{"id":":mahjong_red_dragon:","symbol":"๐Ÿ€„"},{"id":":flower_playing_cards:","symbol":"๐ŸŽด"},{"id":":performing_arts:","symbol":"๐ŸŽญ"},{"id":":framed_picture:","symbol":"๐Ÿ–ผ"},{"id":":artist_palette:","symbol":"๐ŸŽจ"},{"id":":muted_speaker:","symbol":"๐Ÿ”‡"},{"id":":speaker_low_volume:","symbol":"๐Ÿ”ˆ"},{"id":":speaker_medium_volume:","symbol":"๐Ÿ”‰"},{"id":":speaker_high_volume:","symbol":"๐Ÿ”Š"},{"id":":loudspeaker:","symbol":"๐Ÿ“ข"},{"id":":megaphone:","symbol":"๐Ÿ“ฃ"},{"id":":postal_horn:","symbol":"๐Ÿ“ฏ"},{"id":":bell:","symbol":"๐Ÿ””"},{"id":":bell_with_slash:","symbol":"๐Ÿ”•"},{"id":":musical_score:","symbol":"๐ŸŽผ"},{"id":":musical_note:","symbol":"๐ŸŽต"},{"id":":musical_notes:","symbol":"๐ŸŽถ"},{"id":":studio_microphone:","symbol":"๐ŸŽ™"},{"id":":level_slider:","symbol":"๐ŸŽš"},{"id":":control_knobs:","symbol":"๐ŸŽ›"},{"id":":microphone:","symbol":"๐ŸŽค"},{"id":":headphone:","symbol":"๐ŸŽง"},{"id":":radio:","symbol":"๐Ÿ“ป"},{"id":":saxophone:","symbol":"๐ŸŽท"},{"id":":guitar:","symbol":"๐ŸŽธ"},{"id":":musical_keyboard:","symbol":"๐ŸŽน"},{"id":":trumpet:","symbol":"๐ŸŽบ"},{"id":":violin:","symbol":"๐ŸŽป"},{"id":":drum:","symbol":"๐Ÿฅ"},{"id":":mobile_phone:","symbol":"๐Ÿ“ฑ"},{"id":":mobile_phone_with_arrow:","symbol":"๐Ÿ“ฒ"},{"id":":telephone:","symbol":"โ˜Ž"},{"id":":telephone_receiver:","symbol":"๐Ÿ“ž"},{"id":":pager:","symbol":"๐Ÿ“Ÿ"},{"id":":fax_machine:","symbol":"๐Ÿ“ "},{"id":":battery:","symbol":"๐Ÿ”‹"},{"id":":electric_plug:","symbol":"๐Ÿ”Œ"},{"id":":laptop_computer:","symbol":"๐Ÿ’ป"},{"id":":desktop_computer:","symbol":"๐Ÿ–ฅ"},{"id":":printer:","symbol":"๐Ÿ–จ"},{"id":":keyboard:","symbol":"โŒจ"},{"id":":computer_mouse:","symbol":"๐Ÿ–ฑ"},{"id":":trackball:","symbol":"๐Ÿ–ฒ"},{"id":":computer_disk:","symbol":"๐Ÿ’ฝ"},{"id":":floppy_disk:","symbol":"๐Ÿ’พ"},{"id":":optical_disk:","symbol":"๐Ÿ’ฟ"},{"id":":dvd:","symbol":"๐Ÿ“€"},{"id":":movie_camera:","symbol":"๐ŸŽฅ"},{"id":":film_frames:","symbol":"๐ŸŽž"},{"id":":film_projector:","symbol":"๐Ÿ“ฝ"},{"id":":clapper_board:","symbol":"๐ŸŽฌ"},{"id":":television:","symbol":"๐Ÿ“บ"},{"id":":camera:","symbol":"๐Ÿ“ท"},{"id":":camera_with_flash:","symbol":"๐Ÿ“ธ"},{"id":":video_camera:","symbol":"๐Ÿ“น"},{"id":":videocassette:","symbol":"๐Ÿ“ผ"},{"id":":magnifying_glass_tilted_left:","symbol":"๐Ÿ”"},{"id":":magnifying_glass_tilted_right:","symbol":"๐Ÿ”Ž"},{"id":":candle:","symbol":"๐Ÿ•ฏ"},{"id":":light_bulb:","symbol":"๐Ÿ’ก"},{"id":":flashlight:","symbol":"๐Ÿ”ฆ"},{"id":":red_paper_lantern:","symbol":"๐Ÿฎ"},{"id":":notebook_with_decorative_cover:","symbol":"๐Ÿ“”"},{"id":":closed_book:","symbol":"๐Ÿ“•"},{"id":":open_book:","symbol":"๐Ÿ“–"},{"id":":green_book:","symbol":"๐Ÿ“—"},{"id":":blue_book:","symbol":"๐Ÿ“˜"},{"id":":orange_book:","symbol":"๐Ÿ“™"},{"id":":books:","symbol":"๐Ÿ“š"},{"id":":notebook:","symbol":"๐Ÿ““"},{"id":":ledger:","symbol":"๐Ÿ“’"},{"id":":page_with_curl:","symbol":"๐Ÿ“ƒ"},{"id":":scroll:","symbol":"๐Ÿ“œ"},{"id":":page_facing_up:","symbol":"๐Ÿ“„"},{"id":":newspaper:","symbol":"๐Ÿ“ฐ"},{"id":":rolled-up_newspaper:","symbol":"๐Ÿ—ž"},{"id":":bookmark_tabs:","symbol":"๐Ÿ“‘"},{"id":":bookmark:","symbol":"๐Ÿ”–"},{"id":":label:","symbol":"๐Ÿท"},{"id":":money_bag:","symbol":"๐Ÿ’ฐ"},{"id":":yen_banknote:","symbol":"๐Ÿ’ด"},{"id":":dollar_banknote:","symbol":"๐Ÿ’ต"},{"id":":euro_banknote:","symbol":"๐Ÿ’ถ"},{"id":":pound_banknote:","symbol":"๐Ÿ’ท"},{"id":":money_with_wings:","symbol":"๐Ÿ’ธ"},{"id":":credit_card:","symbol":"๐Ÿ’ณ"},{"id":":chart_increasing_with_yen:","symbol":"๐Ÿ’น"},{"id":":currency_exchange:","symbol":"๐Ÿ’ฑ"},{"id":":heavy_dollar_sign:","symbol":"๐Ÿ’ฒ"},{"id":":envelope:","symbol":"โœ‰"},{"id":":e-mail:","symbol":"๐Ÿ“ง"},{"id":":incoming_envelope:","symbol":"๐Ÿ“จ"},{"id":":envelope_with_arrow:","symbol":"๐Ÿ“ฉ"},{"id":":outbox_tray:","symbol":"๐Ÿ“ค"},{"id":":inbox_tray:","symbol":"๐Ÿ“ฅ"},{"id":":package:","symbol":"๐Ÿ“ฆ"},{"id":":closed_mailbox_with_raised_flag:","symbol":"๐Ÿ“ซ"},{"id":":closed_mailbox_with_lowered_flag:","symbol":"๐Ÿ“ช"},{"id":":open_mailbox_with_raised_flag:","symbol":"๐Ÿ“ฌ"},{"id":":open_mailbox_with_lowered_flag:","symbol":"๐Ÿ“ญ"},{"id":":postbox:","symbol":"๐Ÿ“ฎ"},{"id":":ballot_box_with_ballot:","symbol":"๐Ÿ—ณ"},{"id":":pencil:","symbol":"โœ"},{"id":":black_nib:","symbol":"โœ’"},{"id":":fountain_pen:","symbol":"๐Ÿ–‹"},{"id":":pen:","symbol":"๐Ÿ–Š"},{"id":":paintbrush:","symbol":"๐Ÿ–Œ"},{"id":":crayon:","symbol":"๐Ÿ–"},{"id":":memo:","symbol":"๐Ÿ“"},{"id":":briefcase:","symbol":"๐Ÿ’ผ"},{"id":":file_folder:","symbol":"๐Ÿ“"},{"id":":open_file_folder:","symbol":"๐Ÿ“‚"},{"id":":card_index_dividers:","symbol":"๐Ÿ—‚"},{"id":":calendar:","symbol":"๐Ÿ“…"},{"id":":tear-off_calendar:","symbol":"๐Ÿ“†"},{"id":":spiral_notepad:","symbol":"๐Ÿ—’"},{"id":":spiral_calendar:","symbol":"๐Ÿ—“"},{"id":":card_index:","symbol":"๐Ÿ“‡"},{"id":":chart_increasing:","symbol":"๐Ÿ“ˆ"},{"id":":chart_decreasing:","symbol":"๐Ÿ“‰"},{"id":":bar_chart:","symbol":"๐Ÿ“Š"},{"id":":clipboard:","symbol":"๐Ÿ“‹"},{"id":":pushpin:","symbol":"๐Ÿ“Œ"},{"id":":round_pushpin:","symbol":"๐Ÿ“"},{"id":":paperclip:","symbol":"๐Ÿ“Ž"},{"id":":linked_paperclips:","symbol":"๐Ÿ–‡"},{"id":":straight_ruler:","symbol":"๐Ÿ“"},{"id":":triangular_ruler:","symbol":"๐Ÿ“"},{"id":":scissors:","symbol":"โœ‚"},{"id":":card_file_box:","symbol":"๐Ÿ—ƒ"},{"id":":file_cabinet:","symbol":"๐Ÿ—„"},{"id":":wastebasket:","symbol":"๐Ÿ—‘"},{"id":":locked:","symbol":"๐Ÿ”’"},{"id":":unlocked:","symbol":"๐Ÿ”“"},{"id":":locked_with_pen:","symbol":"๐Ÿ”"},{"id":":locked_with_key:","symbol":"๐Ÿ”"},{"id":":key:","symbol":"๐Ÿ”‘"},{"id":":old_key:","symbol":"๐Ÿ—"},{"id":":hammer:","symbol":"๐Ÿ”จ"},{"id":":pick:","symbol":"โ›"},{"id":":hammer_and_pick:","symbol":"โš’"},{"id":":hammer_and_wrench:","symbol":"๐Ÿ› "},{"id":":dagger:","symbol":"๐Ÿ—ก"},{"id":":crossed_swords:","symbol":"โš”"},{"id":":pistol:","symbol":"๐Ÿ”ซ"},{"id":":bow_and_arrow:","symbol":"๐Ÿน"},{"id":":shield:","symbol":"๐Ÿ›ก"},{"id":":wrench:","symbol":"๐Ÿ”ง"},{"id":":nut_and_bolt:","symbol":"๐Ÿ”ฉ"},{"id":":gear:","symbol":"โš™"},{"id":":clamp:","symbol":"๐Ÿ—œ"},{"id":":balance_scale:","symbol":"โš–"},{"id":":link:","symbol":"๐Ÿ”—"},{"id":":chains:","symbol":"โ›“"},{"id":":alembic:","symbol":"โš—"},{"id":":microscope:","symbol":"๐Ÿ”ฌ"},{"id":":telescope:","symbol":"๐Ÿ”ญ"},{"id":":satellite_antenna:","symbol":"๐Ÿ“ก"},{"id":":syringe:","symbol":"๐Ÿ’‰"},{"id":":pill:","symbol":"๐Ÿ’Š"},{"id":":door:","symbol":"๐Ÿšช"},{"id":":bed:","symbol":"๐Ÿ›"},{"id":":couch_and_lamp:","symbol":"๐Ÿ›‹"},{"id":":toilet:","symbol":"๐Ÿšฝ"},{"id":":shower:","symbol":"๐Ÿšฟ"},{"id":":bathtub:","symbol":"๐Ÿ›"},{"id":":shopping_cart:","symbol":"๐Ÿ›’"},{"id":":cigarette:","symbol":"๐Ÿšฌ"},{"id":":coffin:","symbol":"โšฐ"},{"id":":funeral_urn:","symbol":"โšฑ"},{"id":":moai:","symbol":"๐Ÿ—ฟ"},{"id":":ATM_sign:","symbol":"๐Ÿง"},{"id":":litter_in_bin_sign:","symbol":"๐Ÿšฎ"},{"id":":potable_water:","symbol":"๐Ÿšฐ"},{"id":":wheelchair_symbol:","symbol":"โ™ฟ"},{"id":":menโ€™s_room:","symbol":"๐Ÿšน"},{"id":":womenโ€™s_room:","symbol":"๐Ÿšบ"},{"id":":restroom:","symbol":"๐Ÿšป"},{"id":":baby_symbol:","symbol":"๐Ÿšผ"},{"id":":water_closet:","symbol":"๐Ÿšพ"},{"id":":passport_control:","symbol":"๐Ÿ›‚"},{"id":":customs:","symbol":"๐Ÿ›ƒ"},{"id":":baggage_claim:","symbol":"๐Ÿ›„"},{"id":":left_luggage:","symbol":"๐Ÿ›…"},{"id":":warning:","symbol":"โš "},{"id":":children_crossing:","symbol":"๐Ÿšธ"},{"id":":no_entry:","symbol":"โ›”"},{"id":":prohibited:","symbol":"๐Ÿšซ"},{"id":":no_bicycles:","symbol":"๐Ÿšณ"},{"id":":no_smoking:","symbol":"๐Ÿšญ"},{"id":":no_littering:","symbol":"๐Ÿšฏ"},{"id":":non-potable_water:","symbol":"๐Ÿšฑ"},{"id":":no_pedestrians:","symbol":"๐Ÿšท"},{"id":":no_mobile_phones:","symbol":"๐Ÿ“ต"},{"id":":no_one_under_eighteen:","symbol":"๐Ÿ”ž"},{"id":":radioactive:","symbol":"โ˜ข"},{"id":":biohazard:","symbol":"โ˜ฃ"},{"id":":up_arrow:","symbol":"โฌ†"},{"id":":up-right_arrow:","symbol":"โ†—"},{"id":":right_arrow:","symbol":"โžก"},{"id":":down-right_arrow:","symbol":"โ†˜"},{"id":":down_arrow:","symbol":"โฌ‡"},{"id":":down-left_arrow:","symbol":"โ†™"},{"id":":left_arrow:","symbol":"โฌ…"},{"id":":up-left_arrow:","symbol":"โ†–"},{"id":":up-down_arrow:","symbol":"โ†•"},{"id":":left-right_arrow:","symbol":"โ†”"},{"id":":right_arrow_curving_left:","symbol":"โ†ฉ"},{"id":":left_arrow_curving_right:","symbol":"โ†ช"},{"id":":right_arrow_curving_up:","symbol":"โคด"},{"id":":right_arrow_curving_down:","symbol":"โคต"},{"id":":clockwise_vertical_arrows:","symbol":"๐Ÿ”ƒ"},{"id":":counterclockwise_arrows_button:","symbol":"๐Ÿ”„"},{"id":":BACK_arrow:","symbol":"๐Ÿ”™"},{"id":":END_arrow:","symbol":"๐Ÿ”š"},{"id":":ON!_arrow:","symbol":"๐Ÿ”›"},{"id":":SOON_arrow:","symbol":"๐Ÿ”œ"},{"id":":TOP_arrow:","symbol":"๐Ÿ”"},{"id":":place_of_worship:","symbol":"๐Ÿ›"},{"id":":atom_symbol:","symbol":"โš›"},{"id":":om:","symbol":"๐Ÿ•‰"},{"id":":star_of_David:","symbol":"โœก"},{"id":":wheel_of_dharma:","symbol":"โ˜ธ"},{"id":":yin_yang:","symbol":"โ˜ฏ"},{"id":":latin_cross:","symbol":"โœ"},{"id":":orthodox_cross:","symbol":"โ˜ฆ"},{"id":":star_and_crescent:","symbol":"โ˜ช"},{"id":":peace_symbol:","symbol":"โ˜ฎ"},{"id":":menorah:","symbol":"๐Ÿ•Ž"},{"id":":dotted_six-pointed_star:","symbol":"๐Ÿ”ฏ"},{"id":":Aries:","symbol":"โ™ˆ"},{"id":":Taurus:","symbol":"โ™‰"},{"id":":Gemini:","symbol":"โ™Š"},{"id":":Cancer:","symbol":"โ™‹"},{"id":":Leo:","symbol":"โ™Œ"},{"id":":Virgo:","symbol":"โ™"},{"id":":Libra:","symbol":"โ™Ž"},{"id":":Scorpio:","symbol":"โ™"},{"id":":Sagittarius:","symbol":"โ™"},{"id":":Capricorn:","symbol":"โ™‘"},{"id":":Aquarius:","symbol":"โ™’"},{"id":":Pisces:","symbol":"โ™“"},{"id":":Ophiuchus:","symbol":"โ›Ž"},{"id":":shuffle_tracks_button:","symbol":"๐Ÿ”€"},{"id":":repeat_button:","symbol":"๐Ÿ”"},{"id":":repeat_single_button:","symbol":"๐Ÿ”‚"},{"id":":play_button:","symbol":"โ–ถ"},{"id":":fast-forward_button:","symbol":"โฉ"},{"id":":next_track_button:","symbol":"โญ"},{"id":":play_or_pause_button:","symbol":"โฏ"},{"id":":reverse_button:","symbol":"โ—€"},{"id":":fast_reverse_button:","symbol":"โช"},{"id":":last_track_button:","symbol":"โฎ"},{"id":":upwards_button:","symbol":"๐Ÿ”ผ"},{"id":":fast_up_button:","symbol":"โซ"},{"id":":downwards_button:","symbol":"๐Ÿ”ฝ"},{"id":":fast_down_button:","symbol":"โฌ"},{"id":":pause_button:","symbol":"โธ"},{"id":":stop_button:","symbol":"โน"},{"id":":record_button:","symbol":"โบ"},{"id":":eject_button:","symbol":"โ"},{"id":":cinema:","symbol":"๐ŸŽฆ"},{"id":":dim_button:","symbol":"๐Ÿ”…"},{"id":":bright_button:","symbol":"๐Ÿ”†"},{"id":":antenna_bars:","symbol":"๐Ÿ“ถ"},{"id":":vibration_mode:","symbol":"๐Ÿ“ณ"},{"id":":mobile_phone_off:","symbol":"๐Ÿ“ด"},{"id":":female_sign:","symbol":"โ™€"},{"id":":male_sign:","symbol":"โ™‚"},{"id":":medical_symbol:","symbol":"โš•"},{"id":":recycling_symbol:","symbol":"โ™ป"},{"id":":fleur-de-lis:","symbol":"โšœ"},{"id":":trident_emblem:","symbol":"๐Ÿ”ฑ"},{"id":":name_badge:","symbol":"๐Ÿ“›"},{"id":":Japanese_symbol_for_beginner:","symbol":"๐Ÿ”ฐ"},{"id":":heavy_large_circle:","symbol":"โญ•"},{"id":":white_heavy_check_mark:","symbol":"โœ…"},{"id":":ballot_box_with_check:","symbol":"โ˜‘"},{"id":":heavy_check_mark:","symbol":"โœ”"},{"id":":heavy_multiplication_x:","symbol":"โœ–"},{"id":":cross_mark:","symbol":"โŒ"},{"id":":cross_mark_button:","symbol":"โŽ"},{"id":":heavy_plus_sign:","symbol":"โž•"},{"id":":heavy_minus_sign:","symbol":"โž–"},{"id":":heavy_division_sign:","symbol":"โž—"},{"id":":curly_loop:","symbol":"โžฐ"},{"id":":double_curly_loop:","symbol":"โžฟ"},{"id":":part_alternation_mark:","symbol":"ใ€ฝ"},{"id":":eight-spoked_asterisk:","symbol":"โœณ"},{"id":":eight-pointed_star:","symbol":"โœด"},{"id":":sparkle:","symbol":"โ‡"},{"id":":double_exclamation_mark:","symbol":"โ€ผ"},{"id":":exclamation_question_mark:","symbol":"โ‰"},{"id":":question_mark:","symbol":"โ“"},{"id":":white_question_mark:","symbol":"โ”"},{"id":":white_exclamation_mark:","symbol":"โ•"},{"id":":exclamation_mark:","symbol":"โ—"},{"id":":wavy_dash:","symbol":"ใ€ฐ"},{"id":":copyright:","symbol":"ยฉ"},{"id":":registered:","symbol":"ยฎ"},{"id":":trade_mark:","symbol":"โ„ข"},{"id":":keycap:_#:","symbol":"#๏ธโƒฃ"},{"id":":keycap:_*:","symbol":"*๏ธโƒฃ"},{"id":":keycap:_0:","symbol":"0๏ธโƒฃ"},{"id":":keycap:_1:","symbol":"1๏ธโƒฃ"},{"id":":keycap:_2:","symbol":"2๏ธโƒฃ"},{"id":":keycap:_3:","symbol":"3๏ธโƒฃ"},{"id":":keycap:_4:","symbol":"4๏ธโƒฃ"},{"id":":keycap:_5:","symbol":"5๏ธโƒฃ"},{"id":":keycap:_6:","symbol":"6๏ธโƒฃ"},{"id":":keycap:_7:","symbol":"7๏ธโƒฃ"},{"id":":keycap:_8:","symbol":"8๏ธโƒฃ"},{"id":":keycap:_9:","symbol":"9๏ธโƒฃ"},{"id":":keycap:_10:","symbol":"๐Ÿ”Ÿ"},{"id":":hundred_points:","symbol":"๐Ÿ’ฏ"},{"id":":input_latin_uppercase:","symbol":"๐Ÿ” "},{"id":":input_latin_lowercase:","symbol":"๐Ÿ”ก"},{"id":":input_numbers:","symbol":"๐Ÿ”ข"},{"id":":input_symbols:","symbol":"๐Ÿ”ฃ"},{"id":":input_latin_letters:","symbol":"๐Ÿ”ค"},{"id":":A_button_(blood_type):","symbol":"๐Ÿ…ฐ"},{"id":":AB_button_(blood_type):","symbol":"๐Ÿ†Ž"},{"id":":B_button_(blood_type):","symbol":"๐Ÿ…ฑ"},{"id":":CL_button:","symbol":"๐Ÿ†‘"},{"id":":COOL_button:","symbol":"๐Ÿ†’"},{"id":":FREE_button:","symbol":"๐Ÿ†“"},{"id":":information:","symbol":"โ„น"},{"id":":ID_button:","symbol":"๐Ÿ†”"},{"id":":circled_M:","symbol":"โ“‚"},{"id":":NEW_button:","symbol":"๐Ÿ†•"},{"id":":NG_button:","symbol":"๐Ÿ†–"},{"id":":O_button_(blood_type):","symbol":"๐Ÿ…พ"},{"id":":OK_button:","symbol":"๐Ÿ†—"},{"id":":P_button:","symbol":"๐Ÿ…ฟ"},{"id":":SOS_button:","symbol":"๐Ÿ†˜"},{"id":":UP!_button:","symbol":"๐Ÿ†™"},{"id":":VS_button:","symbol":"๐Ÿ†š"},{"id":":Japanese_โ€œhereโ€_button:","symbol":"๐Ÿˆ"},{"id":":Japanese_โ€œservice_chargeโ€_button:","symbol":"๐Ÿˆ‚"},{"id":":Japanese_โ€œmonthly_amountโ€_button:","symbol":"๐Ÿˆท"},{"id":":Japanese_โ€œnot_free_of_chargeโ€_button:","symbol":"๐Ÿˆถ"},{"id":":Japanese_โ€œreservedโ€_button:","symbol":"๐Ÿˆฏ"},{"id":":Japanese_โ€œbargainโ€_button:","symbol":"๐Ÿ‰"},{"id":":Japanese_โ€œdiscountโ€_button:","symbol":"๐Ÿˆน"},{"id":":Japanese_โ€œfree_of_chargeโ€_button:","symbol":"๐Ÿˆš"},{"id":":Japanese_โ€œprohibitedโ€_button:","symbol":"๐Ÿˆฒ"},{"id":":Japanese_โ€œacceptableโ€_button:","symbol":"๐Ÿ‰‘"},{"id":":Japanese_โ€œapplicationโ€_button:","symbol":"๐Ÿˆธ"},{"id":":Japanese_โ€œpassing_gradeโ€_button:","symbol":"๐Ÿˆด"},{"id":":Japanese_โ€œvacancyโ€_button:","symbol":"๐Ÿˆณ"},{"id":":Japanese_โ€œcongratulationsโ€_button:","symbol":"ใŠ—"},{"id":":Japanese_โ€œsecretโ€_button:","symbol":"ใŠ™"},{"id":":Japanese_โ€œopen_for_businessโ€_button:","symbol":"๐Ÿˆบ"},{"id":":Japanese_โ€œno_vacancyโ€_button:","symbol":"๐Ÿˆต"},{"id":":red_circle:","symbol":"๐Ÿ”ด"},{"id":":blue_circle:","symbol":"๐Ÿ”ต"},{"id":":white_circle:","symbol":"โšช"},{"id":":black_circle:","symbol":"โšซ"},{"id":":white_large_square:","symbol":"โฌœ"},{"id":":black_large_square:","symbol":"โฌ›"},{"id":":black_medium_square:","symbol":"โ—ผ"},{"id":":white_medium_square:","symbol":"โ—ป"},{"id":":white_medium-small_square:","symbol":"โ—ฝ"},{"id":":black_medium-small_square:","symbol":"โ—พ"},{"id":":white_small_square:","symbol":"โ–ซ"},{"id":":black_small_square:","symbol":"โ–ช"},{"id":":large_orange_diamond:","symbol":"๐Ÿ”ถ"},{"id":":large_blue_diamond:","symbol":"๐Ÿ”ท"},{"id":":small_orange_diamond:","symbol":"๐Ÿ”ธ"},{"id":":small_blue_diamond:","symbol":"๐Ÿ”น"},{"id":":red_triangle_pointed_up:","symbol":"๐Ÿ”บ"},{"id":":red_triangle_pointed_down:","symbol":"๐Ÿ”ป"},{"id":":diamond_with_a_dot:","symbol":"๐Ÿ’ "},{"id":":radio_button:","symbol":"๐Ÿ”˜"},{"id":":black_square_button:","symbol":"๐Ÿ”ฒ"},{"id":":white_square_button:","symbol":"๐Ÿ”ณ"},{"id":":chequered_flag:","symbol":"๐Ÿ"},{"id":":triangular_flag:","symbol":"๐Ÿšฉ"},{"id":":crossed_flags:","symbol":"๐ŸŽŒ"},{"id":":black_flag:","symbol":"๐Ÿด"},{"id":":white_flag:","symbol":"๐Ÿณ"},{"id":":rainbow_flag:","symbol":"๐Ÿณ๏ธโ€๐ŸŒˆ"},{"id":":flag:_Ascension_Island:","symbol":"๐Ÿ‡ฆ๐Ÿ‡จ"},{"id":":flag:_Andorra:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฉ"},{"id":":flag:_United_Arab_Emirates:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ช"},{"id":":flag:_Afghanistan:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ซ"},{"id":":flag:_Antigua_&_Barbuda:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฌ"},{"id":":flag:_Anguilla:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฎ"},{"id":":flag:_Albania:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฑ"},{"id":":flag:_Armenia:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฒ"},{"id":":flag:_Angola:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ด"},{"id":":flag:_Antarctica:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ถ"},{"id":":flag:_Argentina:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ท"},{"id":":flag:_American_Samoa:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ธ"},{"id":":flag:_Austria:","symbol":"๐Ÿ‡ฆ๐Ÿ‡น"},{"id":":flag:_Australia:","symbol":"๐Ÿ‡ฆ๐Ÿ‡บ"},{"id":":flag:_Aruba:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ผ"},{"id":":flag:_ร…land_Islands:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฝ"},{"id":":flag:_Azerbaijan:","symbol":"๐Ÿ‡ฆ๐Ÿ‡ฟ"},{"id":":flag:_Bosnia_&_Herzegovina:","symbol":"๐Ÿ‡ง๐Ÿ‡ฆ"},{"id":":flag:_Barbados:","symbol":"๐Ÿ‡ง๐Ÿ‡ง"},{"id":":flag:_Bangladesh:","symbol":"๐Ÿ‡ง๐Ÿ‡ฉ"},{"id":":flag:_Belgium:","symbol":"๐Ÿ‡ง๐Ÿ‡ช"},{"id":":flag:_Burkina_Faso:","symbol":"๐Ÿ‡ง๐Ÿ‡ซ"},{"id":":flag:_Bulgaria:","symbol":"๐Ÿ‡ง๐Ÿ‡ฌ"},{"id":":flag:_Bahrain:","symbol":"๐Ÿ‡ง๐Ÿ‡ญ"},{"id":":flag:_Burundi:","symbol":"๐Ÿ‡ง๐Ÿ‡ฎ"},{"id":":flag:_Benin:","symbol":"๐Ÿ‡ง๐Ÿ‡ฏ"},{"id":":flag:_St._Barthรฉlemy:","symbol":"๐Ÿ‡ง๐Ÿ‡ฑ"},{"id":":flag:_Bermuda:","symbol":"๐Ÿ‡ง๐Ÿ‡ฒ"},{"id":":flag:_Brunei:","symbol":"๐Ÿ‡ง๐Ÿ‡ณ"},{"id":":flag:_Bolivia:","symbol":"๐Ÿ‡ง๐Ÿ‡ด"},{"id":":flag:_Caribbean_Netherlands:","symbol":"๐Ÿ‡ง๐Ÿ‡ถ"},{"id":":flag:_Brazil:","symbol":"๐Ÿ‡ง๐Ÿ‡ท"},{"id":":flag:_Bahamas:","symbol":"๐Ÿ‡ง๐Ÿ‡ธ"},{"id":":flag:_Bhutan:","symbol":"๐Ÿ‡ง๐Ÿ‡น"},{"id":":flag:_Bouvet_Island:","symbol":"๐Ÿ‡ง๐Ÿ‡ป"},{"id":":flag:_Botswana:","symbol":"๐Ÿ‡ง๐Ÿ‡ผ"},{"id":":flag:_Belarus:","symbol":"๐Ÿ‡ง๐Ÿ‡พ"},{"id":":flag:_Belize:","symbol":"๐Ÿ‡ง๐Ÿ‡ฟ"},{"id":":flag:_Canada:","symbol":"๐Ÿ‡จ๐Ÿ‡ฆ"},{"id":":flag:_Cocos_(Keeling)_Islands:","symbol":"๐Ÿ‡จ๐Ÿ‡จ"},{"id":":flag:_Congo_-_Kinshasa:","symbol":"๐Ÿ‡จ๐Ÿ‡ฉ"},{"id":":flag:_Central_African_Republic:","symbol":"๐Ÿ‡จ๐Ÿ‡ซ"},{"id":":flag:_Congo_-_Brazzaville:","symbol":"๐Ÿ‡จ๐Ÿ‡ฌ"},{"id":":flag:_Switzerland:","symbol":"๐Ÿ‡จ๐Ÿ‡ญ"},{"id":":flag:_Cรดte_dโ€™Ivoire:","symbol":"๐Ÿ‡จ๐Ÿ‡ฎ"},{"id":":flag:_Cook_Islands:","symbol":"๐Ÿ‡จ๐Ÿ‡ฐ"},{"id":":flag:_Chile:","symbol":"๐Ÿ‡จ๐Ÿ‡ฑ"},{"id":":flag:_Cameroon:","symbol":"๐Ÿ‡จ๐Ÿ‡ฒ"},{"id":":flag:_China:","symbol":"๐Ÿ‡จ๐Ÿ‡ณ"},{"id":":flag:_Colombia:","symbol":"๐Ÿ‡จ๐Ÿ‡ด"},{"id":":flag:_Clipperton_Island:","symbol":"๐Ÿ‡จ๐Ÿ‡ต"},{"id":":flag:_Costa_Rica:","symbol":"๐Ÿ‡จ๐Ÿ‡ท"},{"id":":flag:_Cuba:","symbol":"๐Ÿ‡จ๐Ÿ‡บ"},{"id":":flag:_Cape_Verde:","symbol":"๐Ÿ‡จ๐Ÿ‡ป"},{"id":":flag:_Curaรงao:","symbol":"๐Ÿ‡จ๐Ÿ‡ผ"},{"id":":flag:_Christmas_Island:","symbol":"๐Ÿ‡จ๐Ÿ‡ฝ"},{"id":":flag:_Cyprus:","symbol":"๐Ÿ‡จ๐Ÿ‡พ"},{"id":":flag:_Czechia:","symbol":"๐Ÿ‡จ๐Ÿ‡ฟ"},{"id":":flag:_Germany:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ช"},{"id":":flag:_Diego_Garcia:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฌ"},{"id":":flag:_Djibouti:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฏ"},{"id":":flag:_Denmark:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฐ"},{"id":":flag:_Dominica:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฒ"},{"id":":flag:_Dominican_Republic:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ด"},{"id":":flag:_Algeria:","symbol":"๐Ÿ‡ฉ๐Ÿ‡ฟ"},{"id":":flag:_Ceuta_&_Melilla:","symbol":"๐Ÿ‡ช๐Ÿ‡ฆ"},{"id":":flag:_Ecuador:","symbol":"๐Ÿ‡ช๐Ÿ‡จ"},{"id":":flag:_Estonia:","symbol":"๐Ÿ‡ช๐Ÿ‡ช"},{"id":":flag:_Egypt:","symbol":"๐Ÿ‡ช๐Ÿ‡ฌ"},{"id":":flag:_Western_Sahara:","symbol":"๐Ÿ‡ช๐Ÿ‡ญ"},{"id":":flag:_Eritrea:","symbol":"๐Ÿ‡ช๐Ÿ‡ท"},{"id":":flag:_Spain:","symbol":"๐Ÿ‡ช๐Ÿ‡ธ"},{"id":":flag:_Ethiopia:","symbol":"๐Ÿ‡ช๐Ÿ‡น"},{"id":":flag:_European_Union:","symbol":"๐Ÿ‡ช๐Ÿ‡บ"},{"id":":flag:_Finland:","symbol":"๐Ÿ‡ซ๐Ÿ‡ฎ"},{"id":":flag:_Fiji:","symbol":"๐Ÿ‡ซ๐Ÿ‡ฏ"},{"id":":flag:_Falkland_Islands:","symbol":"๐Ÿ‡ซ๐Ÿ‡ฐ"},{"id":":flag:_Micronesia:","symbol":"๐Ÿ‡ซ๐Ÿ‡ฒ"},{"id":":flag:_Faroe_Islands:","symbol":"๐Ÿ‡ซ๐Ÿ‡ด"},{"id":":flag:_France:","symbol":"๐Ÿ‡ซ๐Ÿ‡ท"},{"id":":flag:_Gabon:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฆ"},{"id":":flag:_United_Kingdom:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ง"},{"id":":flag:_Grenada:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฉ"},{"id":":flag:_Georgia:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ช"},{"id":":flag:_French_Guiana:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ซ"},{"id":":flag:_Guernsey:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฌ"},{"id":":flag:_Ghana:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ญ"},{"id":":flag:_Gibraltar:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฎ"},{"id":":flag:_Greenland:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฑ"},{"id":":flag:_Gambia:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ฒ"},{"id":":flag:_Guinea:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ณ"},{"id":":flag:_Guadeloupe:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ต"},{"id":":flag:_Equatorial_Guinea:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ถ"},{"id":":flag:_Greece:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ท"},{"id":":flag:_South_Georgia_&_South_Sandwich_Islands:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ธ"},{"id":":flag:_Guatemala:","symbol":"๐Ÿ‡ฌ๐Ÿ‡น"},{"id":":flag:_Guam:","symbol":"๐Ÿ‡ฌ๐Ÿ‡บ"},{"id":":flag:_Guinea-Bissau:","symbol":"๐Ÿ‡ฌ๐Ÿ‡ผ"},{"id":":flag:_Guyana:","symbol":"๐Ÿ‡ฌ๐Ÿ‡พ"},{"id":":flag:_Hong_Kong_SAR_China:","symbol":"๐Ÿ‡ญ๐Ÿ‡ฐ"},{"id":":flag:_Heard_&_McDonald_Islands:","symbol":"๐Ÿ‡ญ๐Ÿ‡ฒ"},{"id":":flag:_Honduras:","symbol":"๐Ÿ‡ญ๐Ÿ‡ณ"},{"id":":flag:_Croatia:","symbol":"๐Ÿ‡ญ๐Ÿ‡ท"},{"id":":flag:_Haiti:","symbol":"๐Ÿ‡ญ๐Ÿ‡น"},{"id":":flag:_Hungary:","symbol":"๐Ÿ‡ญ๐Ÿ‡บ"},{"id":":flag:_Canary_Islands:","symbol":"๐Ÿ‡ฎ๐Ÿ‡จ"},{"id":":flag:_Indonesia:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ฉ"},{"id":":flag:_Ireland:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ช"},{"id":":flag:_Israel:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ฑ"},{"id":":flag:_Isle_of_Man:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ฒ"},{"id":":flag:_India:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ณ"},{"id":":flag:_British_Indian_Ocean_Territory:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ด"},{"id":":flag:_Iraq:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ถ"},{"id":":flag:_Iran:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ท"},{"id":":flag:_Iceland:","symbol":"๐Ÿ‡ฎ๐Ÿ‡ธ"},{"id":":flag:_Italy:","symbol":"๐Ÿ‡ฎ๐Ÿ‡น"},{"id":":flag:_Jersey:","symbol":"๐Ÿ‡ฏ๐Ÿ‡ช"},{"id":":flag:_Jamaica:","symbol":"๐Ÿ‡ฏ๐Ÿ‡ฒ"},{"id":":flag:_Jordan:","symbol":"๐Ÿ‡ฏ๐Ÿ‡ด"},{"id":":flag:_Japan:","symbol":"๐Ÿ‡ฏ๐Ÿ‡ต"},{"id":":flag:_Kenya:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ช"},{"id":":flag:_Kyrgyzstan:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ฌ"},{"id":":flag:_Cambodia:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ญ"},{"id":":flag:_Kiribati:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ฎ"},{"id":":flag:_Comoros:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ฒ"},{"id":":flag:_St._Kitts_&_Nevis:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ณ"},{"id":":flag:_North_Korea:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ต"},{"id":":flag:_South_Korea:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ท"},{"id":":flag:_Kuwait:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ผ"},{"id":":flag:_Cayman_Islands:","symbol":"๐Ÿ‡ฐ๐Ÿ‡พ"},{"id":":flag:_Kazakhstan:","symbol":"๐Ÿ‡ฐ๐Ÿ‡ฟ"},{"id":":flag:_Laos:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ฆ"},{"id":":flag:_Lebanon:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ง"},{"id":":flag:_St._Lucia:","symbol":"๐Ÿ‡ฑ๐Ÿ‡จ"},{"id":":flag:_Liechtenstein:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ฎ"},{"id":":flag:_Sri_Lanka:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ฐ"},{"id":":flag:_Liberia:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ท"},{"id":":flag:_Lesotho:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ธ"},{"id":":flag:_Lithuania:","symbol":"๐Ÿ‡ฑ๐Ÿ‡น"},{"id":":flag:_Luxembourg:","symbol":"๐Ÿ‡ฑ๐Ÿ‡บ"},{"id":":flag:_Latvia:","symbol":"๐Ÿ‡ฑ๐Ÿ‡ป"},{"id":":flag:_Libya:","symbol":"๐Ÿ‡ฑ๐Ÿ‡พ"},{"id":":flag:_Morocco:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฆ"},{"id":":flag:_Monaco:","symbol":"๐Ÿ‡ฒ๐Ÿ‡จ"},{"id":":flag:_Moldova:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฉ"},{"id":":flag:_Montenegro:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ช"},{"id":":flag:_St._Martin:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ซ"},{"id":":flag:_Madagascar:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฌ"},{"id":":flag:_Marshall_Islands:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ญ"},{"id":":flag:_Macedonia:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฐ"},{"id":":flag:_Mali:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฑ"},{"id":":flag:_Myanmar_(Burma):","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฒ"},{"id":":flag:_Mongolia:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ณ"},{"id":":flag:_Macau_SAR_China:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ด"},{"id":":flag:_Northern_Mariana_Islands:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ต"},{"id":":flag:_Martinique:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ถ"},{"id":":flag:_Mauritania:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ท"},{"id":":flag:_Montserrat:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ธ"},{"id":":flag:_Malta:","symbol":"๐Ÿ‡ฒ๐Ÿ‡น"},{"id":":flag:_Mauritius:","symbol":"๐Ÿ‡ฒ๐Ÿ‡บ"},{"id":":flag:_Maldives:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ป"},{"id":":flag:_Malawi:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ผ"},{"id":":flag:_Mexico:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฝ"},{"id":":flag:_Malaysia:","symbol":"๐Ÿ‡ฒ๐Ÿ‡พ"},{"id":":flag:_Mozambique:","symbol":"๐Ÿ‡ฒ๐Ÿ‡ฟ"},{"id":":flag:_Namibia:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฆ"},{"id":":flag:_New_Caledonia:","symbol":"๐Ÿ‡ณ๐Ÿ‡จ"},{"id":":flag:_Niger:","symbol":"๐Ÿ‡ณ๐Ÿ‡ช"},{"id":":flag:_Norfolk_Island:","symbol":"๐Ÿ‡ณ๐Ÿ‡ซ"},{"id":":flag:_Nigeria:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฌ"},{"id":":flag:_Nicaragua:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฎ"},{"id":":flag:_Netherlands:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฑ"},{"id":":flag:_Norway:","symbol":"๐Ÿ‡ณ๐Ÿ‡ด"},{"id":":flag:_Nepal:","symbol":"๐Ÿ‡ณ๐Ÿ‡ต"},{"id":":flag:_Nauru:","symbol":"๐Ÿ‡ณ๐Ÿ‡ท"},{"id":":flag:_Niue:","symbol":"๐Ÿ‡ณ๐Ÿ‡บ"},{"id":":flag:_New_Zealand:","symbol":"๐Ÿ‡ณ๐Ÿ‡ฟ"},{"id":":flag:_Oman:","symbol":"๐Ÿ‡ด๐Ÿ‡ฒ"},{"id":":flag:_Panama:","symbol":"๐Ÿ‡ต๐Ÿ‡ฆ"},{"id":":flag:_Peru:","symbol":"๐Ÿ‡ต๐Ÿ‡ช"},{"id":":flag:_French_Polynesia:","symbol":"๐Ÿ‡ต๐Ÿ‡ซ"},{"id":":flag:_Papua_New_Guinea:","symbol":"๐Ÿ‡ต๐Ÿ‡ฌ"},{"id":":flag:_Philippines:","symbol":"๐Ÿ‡ต๐Ÿ‡ญ"},{"id":":flag:_Pakistan:","symbol":"๐Ÿ‡ต๐Ÿ‡ฐ"},{"id":":flag:_Poland:","symbol":"๐Ÿ‡ต๐Ÿ‡ฑ"},{"id":":flag:_St._Pierre_&_Miquelon:","symbol":"๐Ÿ‡ต๐Ÿ‡ฒ"},{"id":":flag:_Pitcairn_Islands:","symbol":"๐Ÿ‡ต๐Ÿ‡ณ"},{"id":":flag:_Puerto_Rico:","symbol":"๐Ÿ‡ต๐Ÿ‡ท"},{"id":":flag:_Palestinian_Territories:","symbol":"๐Ÿ‡ต๐Ÿ‡ธ"},{"id":":flag:_Portugal:","symbol":"๐Ÿ‡ต๐Ÿ‡น"},{"id":":flag:_Palau:","symbol":"๐Ÿ‡ต๐Ÿ‡ผ"},{"id":":flag:_Paraguay:","symbol":"๐Ÿ‡ต๐Ÿ‡พ"},{"id":":flag:_Qatar:","symbol":"๐Ÿ‡ถ๐Ÿ‡ฆ"},{"id":":flag:_Rรฉunion:","symbol":"๐Ÿ‡ท๐Ÿ‡ช"},{"id":":flag:_Romania:","symbol":"๐Ÿ‡ท๐Ÿ‡ด"},{"id":":flag:_Serbia:","symbol":"๐Ÿ‡ท๐Ÿ‡ธ"},{"id":":flag:_Russia:","symbol":"๐Ÿ‡ท๐Ÿ‡บ"},{"id":":flag:_Rwanda:","symbol":"๐Ÿ‡ท๐Ÿ‡ผ"},{"id":":flag:_Saudi_Arabia:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฆ"},{"id":":flag:_Solomon_Islands:","symbol":"๐Ÿ‡ธ๐Ÿ‡ง"},{"id":":flag:_Seychelles:","symbol":"๐Ÿ‡ธ๐Ÿ‡จ"},{"id":":flag:_Sudan:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฉ"},{"id":":flag:_Sweden:","symbol":"๐Ÿ‡ธ๐Ÿ‡ช"},{"id":":flag:_Singapore:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฌ"},{"id":":flag:_St._Helena:","symbol":"๐Ÿ‡ธ๐Ÿ‡ญ"},{"id":":flag:_Slovenia:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฎ"},{"id":":flag:_Svalbard_&_Jan_Mayen:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฏ"},{"id":":flag:_Slovakia:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฐ"},{"id":":flag:_Sierra_Leone:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฑ"},{"id":":flag:_San_Marino:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฒ"},{"id":":flag:_Senegal:","symbol":"๐Ÿ‡ธ๐Ÿ‡ณ"},{"id":":flag:_Somalia:","symbol":"๐Ÿ‡ธ๐Ÿ‡ด"},{"id":":flag:_Suriname:","symbol":"๐Ÿ‡ธ๐Ÿ‡ท"},{"id":":flag:_South_Sudan:","symbol":"๐Ÿ‡ธ๐Ÿ‡ธ"},{"id":":flag:_Sรฃo_Tomรฉ_&_Prรญncipe:","symbol":"๐Ÿ‡ธ๐Ÿ‡น"},{"id":":flag:_El_Salvador:","symbol":"๐Ÿ‡ธ๐Ÿ‡ป"},{"id":":flag:_Sint_Maarten:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฝ"},{"id":":flag:_Syria:","symbol":"๐Ÿ‡ธ๐Ÿ‡พ"},{"id":":flag:_Swaziland:","symbol":"๐Ÿ‡ธ๐Ÿ‡ฟ"},{"id":":flag:_Tristan_da_Cunha:","symbol":"๐Ÿ‡น๐Ÿ‡ฆ"},{"id":":flag:_Turks_&_Caicos_Islands:","symbol":"๐Ÿ‡น๐Ÿ‡จ"},{"id":":flag:_Chad:","symbol":"๐Ÿ‡น๐Ÿ‡ฉ"},{"id":":flag:_French_Southern_Territories:","symbol":"๐Ÿ‡น๐Ÿ‡ซ"},{"id":":flag:_Togo:","symbol":"๐Ÿ‡น๐Ÿ‡ฌ"},{"id":":flag:_Thailand:","symbol":"๐Ÿ‡น๐Ÿ‡ญ"},{"id":":flag:_Tajikistan:","symbol":"๐Ÿ‡น๐Ÿ‡ฏ"},{"id":":flag:_Tokelau:","symbol":"๐Ÿ‡น๐Ÿ‡ฐ"},{"id":":flag:_Timor-Leste:","symbol":"๐Ÿ‡น๐Ÿ‡ฑ"},{"id":":flag:_Turkmenistan:","symbol":"๐Ÿ‡น๐Ÿ‡ฒ"},{"id":":flag:_Tunisia:","symbol":"๐Ÿ‡น๐Ÿ‡ณ"},{"id":":flag:_Tonga:","symbol":"๐Ÿ‡น๐Ÿ‡ด"},{"id":":flag:_Turkey:","symbol":"๐Ÿ‡น๐Ÿ‡ท"},{"id":":flag:_Trinidad_&_Tobago:","symbol":"๐Ÿ‡น๐Ÿ‡น"},{"id":":flag:_Tuvalu:","symbol":"๐Ÿ‡น๐Ÿ‡ป"},{"id":":flag:_Taiwan:","symbol":"๐Ÿ‡น๐Ÿ‡ผ"},{"id":":flag:_Tanzania:","symbol":"๐Ÿ‡น๐Ÿ‡ฟ"},{"id":":flag:_Ukraine:","symbol":"๐Ÿ‡บ๐Ÿ‡ฆ"},{"id":":flag:_Uganda:","symbol":"๐Ÿ‡บ๐Ÿ‡ฌ"},{"id":":flag:_U.S._Outlying_Islands:","symbol":"๐Ÿ‡บ๐Ÿ‡ฒ"},{"id":":flag:_United_Nations:","symbol":"๐Ÿ‡บ๐Ÿ‡ณ"},{"id":":flag:_United_States:","symbol":"๐Ÿ‡บ๐Ÿ‡ธ"},{"id":":flag:_Uruguay:","symbol":"๐Ÿ‡บ๐Ÿ‡พ"},{"id":":flag:_Uzbekistan:","symbol":"๐Ÿ‡บ๐Ÿ‡ฟ"},{"id":":flag:_Vatican_City:","symbol":"๐Ÿ‡ป๐Ÿ‡ฆ"},{"id":":flag:_St._Vincent_&_Grenadines:","symbol":"๐Ÿ‡ป๐Ÿ‡จ"},{"id":":flag:_Venezuela:","symbol":"๐Ÿ‡ป๐Ÿ‡ช"},{"id":":flag:_British_Virgin_Islands:","symbol":"๐Ÿ‡ป๐Ÿ‡ฌ"},{"id":":flag:_U.S._Virgin_Islands:","symbol":"๐Ÿ‡ป๐Ÿ‡ฎ"},{"id":":flag:_Vietnam:","symbol":"๐Ÿ‡ป๐Ÿ‡ณ"},{"id":":flag:_Vanuatu:","symbol":"๐Ÿ‡ป๐Ÿ‡บ"},{"id":":flag:_Wallis_&_Futuna:","symbol":"๐Ÿ‡ผ๐Ÿ‡ซ"},{"id":":flag:_Samoa:","symbol":"๐Ÿ‡ผ๐Ÿ‡ธ"},{"id":":flag:_Kosovo:","symbol":"๐Ÿ‡ฝ๐Ÿ‡ฐ"},{"id":":flag:_Yemen:","symbol":"๐Ÿ‡พ๐Ÿ‡ช"},{"id":":flag:_Mayotte:","symbol":"๐Ÿ‡พ๐Ÿ‡น"},{"id":":flag:_South_Africa:","symbol":"๐Ÿ‡ฟ๐Ÿ‡ฆ"},{"id":":flag:_Zambia:","symbol":"๐Ÿ‡ฟ๐Ÿ‡ฒ"},{"id":":flag:_Zimbabwe:","symbol":"๐Ÿ‡ฟ๐Ÿ‡ผ"},{"id":":flag:_England:","symbol":"๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ"},{"id":":flag:_Scotland:","symbol":"๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ"},{"id":":flag:_Wales:","symbol":"๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ"}]; - // jscs:enable - if ( !editor._.emojiList ) { - editor._.emojiList = defaultEmojiList; - } - var emoji = editor._.emojiList, - forbiddenScope = editor.config.emoji_blacklistedElements || [ 'pre', 'code' ], - charactersToStart = editor.config.emoji_minChars || 2; - - editor.on( 'instanceReady', function() { - new CKEDITOR.plugins.autocomplete( editor, { - textTestCallback: getTextTestCallback(), - dataCallback: dataCallback, - itemTemplate: '
  • {symbol} {id}
  • ', - outputTemplate: '{symbol}' - } ); - } ); + CKEDITOR.ajax.load( CKEDITOR.getUrl( 'plugins/emoji/emoji.json' ), function( data ) { + var defaultEmojiList = JSON.parse( data ); - editor.on( 'toHtml', function( evt ) { - var sel = evt.editor.getSelection(); - // We want to prevent embedding emoji inside wrong context, e.g. paste :emoji: inside
    -				if ( sel && !isEmojiAllowed( sel.getRanges()[ 0 ] ) ) {
    -					return;
    +				if ( !editor._.emojiList ) {
    +					editor._.emojiList = defaultEmojiList;
     				}
    +				var emoji = editor._.emojiList,
    +					forbiddenScope = editor.config.emoji_blacklistedElements || [ 'pre', 'code' ],
    +					charactersToStart = editor.config.emoji_minChars || 2;
     
     				var filter = new CKEDITOR.htmlParser.filter( {
     					text: function( value, element ) {
    @@ -71,72 +54,103 @@
     						return value;
     					}
     				} );
    -				filter.applyTo( evt.data.dataValue );
    -			} );
     
    -			function getTextTestCallback() {
    -				return function( range ) {
    -					if ( !range.collapsed || !isEmojiAllowed( range ) ) {
    -						return null;
    +				editor.on( 'instanceReady', function() {
    +					new CKEDITOR.plugins.autocomplete( editor, {
    +						textTestCallback: getTextTestCallback(),
    +						dataCallback: dataCallback,
    +						itemTemplate: '
  • {symbol} {id}
  • ', + outputTemplate: '{symbol}' + } ); + } ); + + editor.on( 'toHtml', function( evt ) { + var sel = evt.editor.getSelection(); + // We want to prevent embedding emoji inside wrong context, e.g. paste :emoji: inside
    +					if ( sel && !isEmojiAllowed( sel.getRanges()[ 0 ] ) ) {
    +						return;
     					}
    -					return CKEDITOR.plugins.textMatch.match( range, matchCallback );
    -				};
    -			}
     
    -			function matchCallback( text, offset ) {
    -				var left = text.slice( 0, offset ),
    -					match = left.match( new RegExp( ':\\S{' + charactersToStart + '}\\S*$' ) );
    +					filter.applyTo( evt.data.dataValue );
    +				} );
    +
    +				var html = CKEDITOR.htmlParser.fragment.fromHtml( editor.getData() );
    +				var writer = new CKEDITOR.htmlParser.basicWriter();
    +
    +				filter.applyTo( html );
    +				html.writeHtml( writer );
     
    -				if ( !match ) {
    -					return null;
    +				if ( editor.status !== 'ready' ) {
    +					editor.once( 'instanceReady', function() {
    +						editor.editable().setHtml( writer.getHtml() );
    +					} );
    +				} else {
    +					editor.editable().setHtml( writer.getHtml() );
     				}
     
    -				return { start: match.index, end: offset };
    -			}
    +				function getTextTestCallback() {
    +					return function( range ) {
    +						if ( !range.collapsed || !isEmojiAllowed( range ) ) {
    +							return null;
    +						}
    +						return CKEDITOR.plugins.textMatch.match( range, matchCallback );
    +					};
    +				}
     
    -			function dataCallback( query, range, callback ) {
    -				var data = CKEDITOR.tools.array.filter( emoji, function( item ) {
    -					return item.id.indexOf( query.slice( 1 ) ) !== -1;
    -				} ).sort( function( a, b ) {
    -					// Sort at the beginning emoji starts with given query.
    -					var emojiName = query.substr( 1 ),
    -						isAStartWithEmojiName = a.id.substr( 1, emojiName.length ) === emojiName,
    -						isBStartWithEmojiName = b.id.substr( 1, emojiName.length ) === emojiName;
    -
    -					if ( isAStartWithEmojiName && isBStartWithEmojiName || !isAStartWithEmojiName && !isBStartWithEmojiName ) {
    -						return a.id === b.id ? 0 : ( a.id > b.id ? 1 : -1 );
    -					} else if ( isAStartWithEmojiName ) {
    -						return -1;
    -					} else {
    -						return 1;
    +				function matchCallback( text, offset ) {
    +					var left = text.slice( 0, offset ),
    +						match = left.match( new RegExp( ':\\S{' + charactersToStart + '}\\S*$' ) );
    +
    +					if ( !match ) {
    +						return null;
     					}
    -				} );
    -				callback( data );
    -			}
     
    -			function isEmojiAllowed( range ) {
    -				var elementsPath,
    -					editable = editor.editable();
    -				if ( range ) {
    -					elementsPath = new CKEDITOR.dom.elementPath( range.startContainer, editable );
    -					return elementsPath.contains( forbiddenScope ) ? false : true;
    -				} else {
    -					return true;
    +					return { start: match.index, end: offset };
     				}
    -			}
     
    -			function hasForbiddenParent( htmlParserNode ) {
    -				if ( htmlParserNode.type === CKEDITOR.NODE_TEXT ) {
    -					return false;
    +				function dataCallback( query, range, callback ) {
    +					var data = CKEDITOR.tools.array.filter( emoji, function( item ) {
    +						return item.id.indexOf( query.slice( 1 ) ) !== -1;
    +					} ).sort( function( a, b ) {
    +						// Sort at the beginning emoji starts with given query.
    +						var emojiName = query.substr( 1 ),
    +							isAStartWithEmojiName = a.id.substr( 1, emojiName.length ) === emojiName,
    +							isBStartWithEmojiName = b.id.substr( 1, emojiName.length ) === emojiName;
    +
    +						if ( isAStartWithEmojiName && isBStartWithEmojiName || !isAStartWithEmojiName && !isBStartWithEmojiName ) {
    +							return a.id === b.id ? 0 : ( a.id > b.id ? 1 : -1 );
    +						} else if ( isAStartWithEmojiName ) {
    +							return -1;
    +						} else {
    +							return 1;
    +						}
    +					} );
    +					callback( data );
     				}
     
    -				if ( htmlParserNode.name && CKEDITOR.tools.array.indexOf( forbiddenScope, htmlParserNode.name ) !== -1 ) {
    -					return true;
    -				} else {
    -					return false;
    +				function isEmojiAllowed( range ) {
    +					var elementsPath,
    +						editable = editor.editable();
    +					if ( range ) {
    +						elementsPath = new CKEDITOR.dom.elementPath( range.startContainer, editable );
    +						return elementsPath.contains( forbiddenScope ) ? false : true;
    +					} else {
    +						return true;
    +					}
     				}
    -			}
     
    +				function hasForbiddenParent( htmlParserNode ) {
    +					if ( htmlParserNode.type === CKEDITOR.NODE_TEXT ) {
    +						return false;
    +					}
    +
    +					if ( htmlParserNode.name && CKEDITOR.tools.array.indexOf( forbiddenScope, htmlParserNode.name ) !== -1 ) {
    +						return true;
    +					} else {
    +						return false;
    +					}
    +				}
    +			} );
     		}
     	} );
     } )();
    
    From 047b7698d1cd794f24ce85b3f67acbe7dee8f70b Mon Sep 17 00:00:00 2001
    From: Mateusz Samsel 
    Date: Mon, 4 Jun 2018 10:04:17 +0200
    Subject: [PATCH 02/17] Provide config option with documentantion.
    
    ---
     plugins/emoji/plugin.js | 35 ++++++++++++++++++++++++++++++++++-
     1 file changed, 34 insertions(+), 1 deletion(-)
    
    diff --git a/plugins/emoji/plugin.js b/plugins/emoji/plugin.js
    index 9b31996d6ff..4dffa032d0e 100644
    --- a/plugins/emoji/plugin.js
    +++ b/plugins/emoji/plugin.js
    @@ -24,7 +24,9 @@
     
     		init: function( editor ) {
     
    -			CKEDITOR.ajax.load( CKEDITOR.getUrl( 'plugins/emoji/emoji.json' ), function( data ) {
    +			var emojiListUrl = editor.config.emoji_emojiListUrl || 'plugins/emoji/emoji.json';
    +
    +			CKEDITOR.ajax.load( CKEDITOR.getUrl( emojiListUrl ), function( data ) {
     				var defaultEmojiList = JSON.parse( data );
     
     				if ( !editor._.emojiList ) {
    @@ -180,3 +182,34 @@
      * @cfg {Number} [emoji_minChars = 2]
      * @member CKEDITOR.config
      */
    +
    +/**
    + * Address to json file containing emoji list. File is downloaded through {@link CKEDITOR.ajax#load} method
    + * and url address is processed by {@link CKEDITOR#getUrl}.
    + * Emoji list has to be an array of objects with `id` and `symbol` property. Those keys represent text to match and UTF symbol for its replacement.
    + * Emoji has to start with `:` (colon) symbol.
    + * ```json
    + * [
    + * 	{
    + * 		"id": ":grinning_face:",
    + * 		"symbol":"๐Ÿ˜€"
    + * 	},
    + * 	{
    + * 		"id": ":bug:",
    + * 		"symbol":"๐Ÿ›"
    + * 	},
    + * 	{
    + * 		"id": ":star:",
    + * 		"symbol":"โญ"
    + * 	}
    + * ]
    + * ```
    + *
    + * ```js
    + * 	editor.emoji_emojiListUrl = 'https://my.custom.domain/ckeditor/emoji.json';
    + * ```
    + *
    + * @since 4.10.0
    + * @cfg {String} [emoji_emojiListUrl = 'plugins/emoji/emoji.json']
    + * @member CKEDITOR.config
    + */
    
    From 5a4f1c4178be7ce7b20c9b53f8c17d38aa96dfaf Mon Sep 17 00:00:00 2001
    From: Mateusz Samsel 
    Date: Mon, 4 Jun 2018 10:41:47 +0200
    Subject: [PATCH 03/17] Add unit and maual tests for custom emoji list.
    
    ---
     tests/plugins/emoji/_assets/emoji.json        |  1 +
     tests/plugins/emoji/customemojilist.js        | 35 +++++++++++++++++++
     .../plugins/emoji/manual/customemojilist.html | 21 +++++++++++
     tests/plugins/emoji/manual/customemojilist.md | 18 ++++++++++
     4 files changed, 75 insertions(+)
     create mode 100644 tests/plugins/emoji/_assets/emoji.json
     create mode 100644 tests/plugins/emoji/customemojilist.js
     create mode 100644 tests/plugins/emoji/manual/customemojilist.html
     create mode 100644 tests/plugins/emoji/manual/customemojilist.md
    
    diff --git a/tests/plugins/emoji/_assets/emoji.json b/tests/plugins/emoji/_assets/emoji.json
    new file mode 100644
    index 00000000000..445f4f990c1
    --- /dev/null
    +++ b/tests/plugins/emoji/_assets/emoji.json
    @@ -0,0 +1 @@
    +[{"id":":star:","symbol":"โญ"}]
    diff --git a/tests/plugins/emoji/customemojilist.js b/tests/plugins/emoji/customemojilist.js
    new file mode 100644
    index 00000000000..31ececb5302
    --- /dev/null
    +++ b/tests/plugins/emoji/customemojilist.js
    @@ -0,0 +1,35 @@
    +/* bender-tags: emoji */
    +/* bender-ckeditor-plugins: emoji,toolbar,stylescombo,format,clipboard */
    +
    +( function() {
    +	'use strict';
    +
    +	bender.editor = {
    +		name: 'classic',
    +		config: {
    +			emoji_emojiListUrl: '%BASE_PATH%/plugins/emoji/_assets/emoji.json'
    +		},
    +		startupData: '

    foo :grinning_face: bar :not_emoji: this is converted emoji :star:

    ' + }; + + bender.test( { + setUp: function() { + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { + assert.ignore(); + } + }, + + // #2036 + 'test custom emoji list': function() { + var editor = this.editor, + bot = this.editorBot; + + assert.areSame( '

    foo :grinning_face: bar :not_emoji: this is converted emoji โญ

    ', editor.getData(), 'Checking startup data' ); + + bot.setHtmlWithSelection( '

    hello^world

    ' ); + editor.insertText( ':grinning_face::not_emoji::star:' ); + assert.areSame( '

    hello:grinning_face::not_emoji:โญworld

    ', editor.getData() ); + } + } ); + +} )(); diff --git a/tests/plugins/emoji/manual/customemojilist.html b/tests/plugins/emoji/manual/customemojilist.html new file mode 100644 index 00000000000..d512dce27dc --- /dev/null +++ b/tests/plugins/emoji/manual/customemojilist.html @@ -0,0 +1,21 @@ +

    Classic editor

    + + + +

    Divarea editor

    + +
    +

    Hello world.

    +
    + + diff --git a/tests/plugins/emoji/manual/customemojilist.md b/tests/plugins/emoji/manual/customemojilist.md new file mode 100644 index 00000000000..fa7a0a6f923 --- /dev/null +++ b/tests/plugins/emoji/manual/customemojilist.md @@ -0,0 +1,18 @@ +@bender-tags: 4.10.0, feature, emoji, 2036 +@bender-ckeditor-plugins: wysiwygarea, toolbar, elementspath, sourcearea, emoji, clipboard, undo +@bender-ui: collapsed + +1. Insert new emoji by typing its name in editor. There should be only one emoji available (`:star:`). _You need to type at least 2 characters from emoji name to see suggestion box with emoji._ + +## Expected: +**Only** `:star:` emoji is available to insert in editor. Other emojis are not converted. + +## Example emoji to use in tests: + +| name | symbol | +| ---: | --- | +| :bug: | ๐Ÿ› | +| :winking_face: | ๐Ÿ˜‰ | +| :collision: | ๐Ÿ’ฅ | +| :unicorn_face: | ๐Ÿฆ„ | + From bd398dba5dc1d45fb8be4e52a56bef8d0da5690b Mon Sep 17 00:00:00 2001 From: Mateusz Samsel Date: Tue, 12 Jun 2018 14:12:39 +0200 Subject: [PATCH 04/17] Review fixes: update typos, better synchronization with undo manager, graceful shutdown in case of emoji loading error. --- plugins/emoji/plugin.js | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/plugins/emoji/plugin.js b/plugins/emoji/plugin.js index 4dffa032d0e..c2a4d4fc7bd 100644 --- a/plugins/emoji/plugin.js +++ b/plugins/emoji/plugin.js @@ -27,6 +27,10 @@ var emojiListUrl = editor.config.emoji_emojiListUrl || 'plugins/emoji/emoji.json'; CKEDITOR.ajax.load( CKEDITOR.getUrl( emojiListUrl ), function( data ) { + if ( data === null ) { + return; + } + var defaultEmojiList = JSON.parse( data ); if ( !editor._.emojiList ) { @@ -57,15 +61,6 @@ } } ); - editor.on( 'instanceReady', function() { - new CKEDITOR.plugins.autocomplete( editor, { - textTestCallback: getTextTestCallback(), - dataCallback: dataCallback, - itemTemplate: '
  • {symbol} {id}
  • ', - outputTemplate: '{symbol}' - } ); - } ); - editor.on( 'toHtml', function( evt ) { var sel = evt.editor.getSelection(); // We want to prevent embedding emoji inside wrong context, e.g. paste :emoji: inside
    @@ -84,10 +79,27 @@
     
     				if ( editor.status !== 'ready' ) {
     					editor.once( 'instanceReady', function() {
    -						editor.editable().setHtml( writer.getHtml() );
    +						initEmojiPlugin( writer );
     					} );
     				} else {
    +					initEmojiPlugin( writer );
    +				}
    +
    +				function initEmojiPlugin( writer ) {
    +					new CKEDITOR.plugins.autocomplete( editor, {
    +						textTestCallback: getTextTestCallback(),
    +						dataCallback: dataCallback,
    +						itemTemplate: '
  • {symbol} {id}
  • ', + outputTemplate: '{symbol}' + } ); + + // Replace startup emoji editor.editable().setHtml( writer.getHtml() ); + + // Synchronize undo. + if ( editor.undoManager && editor.undoManager.snapshots.length === 1 ) { + editor.undoManager.update(); + } } function getTextTestCallback() { @@ -184,8 +196,8 @@ */ /** - * Address to json file containing emoji list. File is downloaded through {@link CKEDITOR.ajax#load} method - * and url address is processed by {@link CKEDITOR#getUrl}. + * Address to JSON file containing emoji list. File is downloaded through {@link CKEDITOR.ajax#load} method + * and URL address is processed by {@link CKEDITOR#getUrl}. * Emoji list has to be an array of objects with `id` and `symbol` property. Those keys represent text to match and UTF symbol for its replacement. * Emoji has to start with `:` (colon) symbol. * ```json From 9fe91ef2cbbb79beea309bcdf0b112e37a8230ce Mon Sep 17 00:00:00 2001 From: Mateusz Samsel Date: Tue, 12 Jun 2018 14:59:29 +0200 Subject: [PATCH 05/17] Review fixes: add tests for fixed issues. --- tests/plugins/emoji/basic.js | 23 +++++++++++++++- tests/plugins/emoji/customemojilist.js | 29 ++++++++++++++++----- tests/plugins/emoji/manual/noextraundo.html | 18 +++++++++++++ tests/plugins/emoji/manual/noextraundo.md | 14 ++++++++++ 4 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 tests/plugins/emoji/manual/noextraundo.html create mode 100644 tests/plugins/emoji/manual/noextraundo.md diff --git a/tests/plugins/emoji/basic.js b/tests/plugins/emoji/basic.js index 48f4c392159..c99163a8782 100644 --- a/tests/plugins/emoji/basic.js +++ b/tests/plugins/emoji/basic.js @@ -1,5 +1,5 @@ /* bender-tags: emoji */ -/* bender-ckeditor-plugins: emoji,toolbar,stylescombo,format,clipboard */ +/* bender-ckeditor-plugins: emoji,toolbar,stylescombo,format,clipboard,undo */ ( function() { 'use strict'; @@ -27,6 +27,20 @@ } }; + var singleTests = { + 'test emoji doesn\'t create additional undo step on creation': function() { + bender.editorBot.create( { + creator: 'replace', + startupData: '

    foo:grinning_face:bar :not_emoji:

    ' + }, function( bot ) { + var editor = bot.editor; + editor.fire( 'saveSnapshot' ); + assert.areSame( '

    foo๐Ÿ˜€bar :not_emoji:

    ', editor.getData() ); + assert.areSame( editor.undoManager.snapshots.length, 1 ); + } ); + } + }; + var tests = { setUp: function() { if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { @@ -78,5 +92,12 @@ }; tests = bender.tools.createTestsForEditors( CKEDITOR.tools.objectKeys( bender.editors ), tests ); + + CKEDITOR.tools.array.forEach( CKEDITOR.tools.objectKeys( singleTests ), function( key ) { + if ( tests[ key ] === undefined ) { + tests[ key ] = singleTests[ key ]; + } + } ); + bender.test( tests ); } )(); diff --git a/tests/plugins/emoji/customemojilist.js b/tests/plugins/emoji/customemojilist.js index 31ececb5302..a70c5a67a41 100644 --- a/tests/plugins/emoji/customemojilist.js +++ b/tests/plugins/emoji/customemojilist.js @@ -4,12 +4,21 @@ ( function() { 'use strict'; - bender.editor = { - name: 'classic', - config: { - emoji_emojiListUrl: '%BASE_PATH%/plugins/emoji/_assets/emoji.json' + bender.editors = { + classic: { + name: 'classic', + config: { + emoji_emojiListUrl: '%BASE_PATH%/plugins/emoji/_assets/emoji.json' + }, + startupData: '

    foo :grinning_face: bar :not_emoji: this is converted emoji :star:

    ' }, - startupData: '

    foo :grinning_face: bar :not_emoji: this is converted emoji :star:

    ' + classic2: { + name: 'classic2', + config: { + emoji_emojiListUrl: 'fake.url' + }, + startupData: '

    foo :grinning_face: bar :not_emoji: this is converted emoji :star:

    ' + } }; bender.test( { @@ -21,14 +30,20 @@ // #2036 'test custom emoji list': function() { - var editor = this.editor, - bot = this.editorBot; + var editor = this.editors.classic, + bot = this.editorBots.classic; assert.areSame( '

    foo :grinning_face: bar :not_emoji: this is converted emoji โญ

    ', editor.getData(), 'Checking startup data' ); bot.setHtmlWithSelection( '

    hello^world

    ' ); editor.insertText( ':grinning_face::not_emoji::star:' ); assert.areSame( '

    hello:grinning_face::not_emoji:โญworld

    ', editor.getData() ); + }, + + 'test invalid emoji list': function() { + var editor = this.editors.classic2; + assert.areSame( '

    foo :grinning_face: bar :not_emoji: this is converted emoji :star:

    ', editor.getData(), 'Checking startup data' ); + assert.isUndefined( editor._.emojiList, 'There is no emoji list loaded' ); } } ); diff --git a/tests/plugins/emoji/manual/noextraundo.html b/tests/plugins/emoji/manual/noextraundo.html new file mode 100644 index 00000000000..0052e02c01a --- /dev/null +++ b/tests/plugins/emoji/manual/noextraundo.html @@ -0,0 +1,18 @@ +

    Classic editor

    + + + +

    Divarea editor

    + +
    +

    Hello world. :winking_face:

    +
    + + diff --git a/tests/plugins/emoji/manual/noextraundo.md b/tests/plugins/emoji/manual/noextraundo.md new file mode 100644 index 00000000000..bf39d5af5a4 --- /dev/null +++ b/tests/plugins/emoji/manual/noextraundo.md @@ -0,0 +1,14 @@ +@bender-tags: 4.10.0, bug, emoji, 2036 +@bender-ckeditor-plugins: wysiwygarea, toolbar, elementspath, sourcearea, emoji, clipboard, undo, stylescombo, format +@bender-ui: collapsed + +1. Put selection in editor + +## Expected: +There isn't created any undo step in editor. + +## Unexpected: +There appears undo steps, you can use redo and remove emoji from editor. + +## Note: +Repeat steps in both editors. From 3421493020adcd1a66bb3bd30731ad05bc399198 Mon Sep 17 00:00:00 2001 From: Mateusz Samsel Date: Tue, 19 Jun 2018 11:47:19 +0200 Subject: [PATCH 06/17] Add test for long time emoji loading. --- tests/plugins/emoji/customemojilist.js | 37 ++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/tests/plugins/emoji/customemojilist.js b/tests/plugins/emoji/customemojilist.js index a70c5a67a41..432a4031ff9 100644 --- a/tests/plugins/emoji/customemojilist.js +++ b/tests/plugins/emoji/customemojilist.js @@ -17,7 +17,7 @@ config: { emoji_emojiListUrl: 'fake.url' }, - startupData: '

    foo :grinning_face: bar :not_emoji: this is converted emoji :star:

    ' + startupData: '

    foo :grinning_face: bar :not_emoji: this is not converted emoji :star:

    ' } }; @@ -42,8 +42,41 @@ 'test invalid emoji list': function() { var editor = this.editors.classic2; - assert.areSame( '

    foo :grinning_face: bar :not_emoji: this is converted emoji :star:

    ', editor.getData(), 'Checking startup data' ); + assert.areSame( '

    foo :grinning_face: bar :not_emoji: this is not converted emoji :star:

    ', editor.getData(), 'Checking startup data' ); assert.isUndefined( editor._.emojiList, 'There is no emoji list loaded' ); + }, + + 'test long ajax loading': function() { + var server = sinon.fakeServer.create(); + + server.respondWith( 'GET', 'http://random.url', [ 200, { 'Content-Type': 'application/json' }, '[{"id":":bug:","symbol":"๐Ÿ›"}]' ] ); + + bender.editorBot.create( { + name: 'created1', + config: { + emoji_emojiListUrl: 'http://random.url' + }, + startupData: '

    foo :grinning_face: bar :not_emoji: this :star: is converted emoji :bug:

    ' + }, function( bot ) { + var editor = bot.editor; + + if ( editor.status !== 'ready' ) { + editor.once( 'instanceReady', function() { + resume( function() { + assertAfterReady(); + } ); + }, null, null, 1000 ); + wait(); + } else { + assertAfterReady(); + } + + function assertAfterReady() { + server.respond(); + assert.areSame( '

    foo :grinning_face: bar :not_emoji: this :star: is converted emoji ๐Ÿ›

    ', editor.getData() ); + server.restore(); + } + } ); } } ); From d9b2bfb532e8cb2e72f9aafb9b49e97ad17c2bc7 Mon Sep 17 00:00:00 2001 From: Mateusz Samsel Date: Tue, 19 Jun 2018 15:21:36 +0200 Subject: [PATCH 07/17] Remove unnecessary methids from emoji plugin. Now plugin is asynchrnous but not convert emoji during paste data to editor. --- plugins/emoji/plugin.js | 104 ++++++---------------------------------- 1 file changed, 14 insertions(+), 90 deletions(-) diff --git a/plugins/emoji/plugin.js b/plugins/emoji/plugin.js index c2a4d4fc7bd..e38bdf2afdf 100644 --- a/plugins/emoji/plugin.js +++ b/plugins/emoji/plugin.js @@ -31,80 +31,27 @@ return; } - var defaultEmojiList = JSON.parse( data ); - - if ( !editor._.emojiList ) { - editor._.emojiList = defaultEmojiList; + if ( editor._.emoji === undefined ) { + editor._.emoji = {}; } - var emoji = editor._.emojiList, - forbiddenScope = editor.config.emoji_blacklistedElements || [ 'pre', 'code' ], - charactersToStart = editor.config.emoji_minChars || 2; - - var filter = new CKEDITOR.htmlParser.filter( { - text: function( value, element ) { - var preventEmojiConversion = element.getAscendant( hasForbiddenParent ); - if ( preventEmojiConversion ) { - return value; - } - var hits = value.match( /:[a-zA-Z_-]+?:/g ); - if ( hits ) { - for ( var i = 0; i < hits.length; i++ ) { - var item = emoji.find( function( element ) { - return element.id === hits[ i ]; - } ); - if ( item ) { - value = value.replace( item.id, item.symbol ); - } - } - } - return value; - } - } ); - - editor.on( 'toHtml', function( evt ) { - var sel = evt.editor.getSelection(); - // We want to prevent embedding emoji inside wrong context, e.g. paste :emoji: inside
    -					if ( sel && !isEmojiAllowed( sel.getRanges()[ 0 ] ) ) {
    -						return;
    -					}
     
    -					filter.applyTo( evt.data.dataValue );
    -				} );
    -
    -				var html = CKEDITOR.htmlParser.fragment.fromHtml( editor.getData() );
    -				var writer = new CKEDITOR.htmlParser.basicWriter();
    -
    -				filter.applyTo( html );
    -				html.writeHtml( writer );
    -
    -				if ( editor.status !== 'ready' ) {
    -					editor.once( 'instanceReady', function() {
    -						initEmojiPlugin( writer );
    -					} );
    -				} else {
    -					initEmojiPlugin( writer );
    +				if ( editor._.emoji.list === undefined ) {
    +					editor._.emoji.list = JSON.parse( data );
     				}
     
    -				function initEmojiPlugin( writer ) {
    -					new CKEDITOR.plugins.autocomplete( editor, {
    -						textTestCallback: getTextTestCallback(),
    -						dataCallback: dataCallback,
    -						itemTemplate: '
  • {symbol} {id}
  • ', - outputTemplate: '{symbol}' - } ); + var emojiList = editor._.emoji.list, + charactersToStart = editor.config.emoji_minChars === undefined ? 2 : editor.config.emoji_minChars; - // Replace startup emoji - editor.editable().setHtml( writer.getHtml() ); - - // Synchronize undo. - if ( editor.undoManager && editor.undoManager.snapshots.length === 1 ) { - editor.undoManager.update(); - } - } + editor._.emoji.autocomplete = new CKEDITOR.plugins.autocomplete( editor, { + textTestCallback: getTextTestCallback(), + dataCallback: dataCallback, + itemTemplate: '
  • {symbol} {id}
  • ', + outputTemplate: '{symbol}' + } ); function getTextTestCallback() { return function( range ) { - if ( !range.collapsed || !isEmojiAllowed( range ) ) { + if ( !range.collapsed ) { return null; } return CKEDITOR.plugins.textMatch.match( range, matchCallback ); @@ -123,7 +70,7 @@ } function dataCallback( query, range, callback ) { - var data = CKEDITOR.tools.array.filter( emoji, function( item ) { + var data = CKEDITOR.tools.array.filter( emojiList, function( item ) { return item.id.indexOf( query.slice( 1 ) ) !== -1; } ).sort( function( a, b ) { // Sort at the beginning emoji starts with given query. @@ -141,29 +88,6 @@ } ); callback( data ); } - - function isEmojiAllowed( range ) { - var elementsPath, - editable = editor.editable(); - if ( range ) { - elementsPath = new CKEDITOR.dom.elementPath( range.startContainer, editable ); - return elementsPath.contains( forbiddenScope ) ? false : true; - } else { - return true; - } - } - - function hasForbiddenParent( htmlParserNode ) { - if ( htmlParserNode.type === CKEDITOR.NODE_TEXT ) { - return false; - } - - if ( htmlParserNode.name && CKEDITOR.tools.array.indexOf( forbiddenScope, htmlParserNode.name ) !== -1 ) { - return true; - } else { - return false; - } - } } ); } } ); From 280d04ee7295a05751a8ace43bd9545f41f23cae Mon Sep 17 00:00:00 2001 From: Mateusz Samsel Date: Tue, 19 Jun 2018 15:23:38 +0200 Subject: [PATCH 08/17] Update test to be coherent with last plugin changes. --- tests/plugins/emoji/basic.js | 101 ++++++++++++------------- tests/plugins/emoji/customemojilist.js | 44 ++++++++--- 2 files changed, 84 insertions(+), 61 deletions(-) diff --git a/tests/plugins/emoji/basic.js b/tests/plugins/emoji/basic.js index c99163a8782..ea4e6d773d5 100644 --- a/tests/plugins/emoji/basic.js +++ b/tests/plugins/emoji/basic.js @@ -22,82 +22,81 @@ startupData: '

    foo:grinning_face:bar :not_emoji:

    ', config: { extraPlugins: 'divarea', - emoji_blacklistedElements: [ 'section', 'pre', 'code' ] + emoji_minChars: 3 } } }; + function clearAutocompleteModel( autocomplete ) { + var model = autocomplete.model; + delete model.data; + delete model.lastRequestId; + delete model.query; + delete model.range; + delete model.selectedItemId; + } + var singleTests = { - 'test emoji doesn\'t create additional undo step on creation': function() { - bender.editorBot.create( { - creator: 'replace', - startupData: '

    foo:grinning_face:bar :not_emoji:

    ' - }, function( bot ) { - var editor = bot.editor; - editor.fire( 'saveSnapshot' ); - assert.areSame( '

    foo๐Ÿ˜€bar :not_emoji:

    ', editor.getData() ); - assert.areSame( editor.undoManager.snapshots.length, 1 ); - } ); + 'test for custom emoji characters': function() { + var editor = this.editors.divarea, + bot = this.editorBots.divarea, + autocomplete = editor._.emoji.autocomplete; + + bot.setHtmlWithSelection( '

    foo:da^

    ' ); + editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); + assert.isUndefined( autocomplete.model.query ); + assert.isUndefined( autocomplete.model.data ); + + // Handle throttle in autocomplete which by defualt is 20ms; + setTimeout( function() { + resume( function() { + bot.setHtmlWithSelection( '

    foo:dagg^

    ' ); + editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); + assert.areSame( ':dagg', autocomplete.model.query, 'Model keeps wrong querry.' ); + assert.areSame( 1, autocomplete.model.data.length, 'Emoji result contains more than one result.' ); + objectAssert.areEqual( { id: ':dagger:', symbol: '๐Ÿ—ก' }, autocomplete.model.data[ 0 ], 'Emoji result contains wrong result' ); + } ); + }, 21 ); + wait(); } }; var tests = { - setUp: function() { - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { - assert.ignore(); - } - }, - - 'test emoji is converted during editor creation': function( editor ) { - assert.areSame( '

    foo๐Ÿ˜€bar :not_emoji:

    ', editor.getData() ); - }, - - 'test emoji is converted during setData': function( editor, bot ) { - bot.setData( '

    bar:slightly_smiling_face:baz :not_emoji:

    ', function() { - assert.areSame( '

    bar๐Ÿ™‚baz :not_emoji:

    ', editor.getData() ); - } ); - }, + 'test emoji objects are added to editor': function( editor ) { + assert.isObject( editor._.emoji, 'Emoji variable doesn\' exists.' ); + objectAssert.ownsKeys( [ 'list', 'autocomplete' ], editor._.emoji, 'Emoji variable is missing some keys.' ); - 'test emoji is converted durign insertText': function( editor, bot ) { - bot.setHtmlWithSelection( '

    hello^world

    ' ); - editor.insertText( ':face_with_tears_of_joy:' ); - assert.areSame( '

    hello๐Ÿ˜‚world

    ', editor.getData() ); }, - 'test emoji is not converted durign insertText': function( editor, bot ) { - bot.setHtmlWithSelection( '

    hello^world

    ' ); - editor.insertText( ':this_should_not_be_converted:' ); - assert.areSame( '

    hello:this_should_not_be_converted:world

    ', editor.getData() ); - }, + 'test emoji suggestion box has proper values': function( editor, bot ) { + var autocomplete = editor._.emoji.autocomplete; + bot.setHtmlWithSelection( '

    foo:bug^

    ' ); + editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); + assert.areSame( ':bug', autocomplete.model.query, 'Model keeps wrong querry.' ); + assert.areSame( 1, autocomplete.model.data.length, 'Emoji result contains more than one result.' ); + objectAssert.areEqual( { id: ':bug:', symbol: '๐Ÿ›' }, autocomplete.model.data[ 0 ], 'Emoji result contains wrong result' ); - 'test emoji is not converted in pre and code tags': function( editor, bot ) { - bot.setData( '

    foo:grinning_face:bar

    foo:grinning_face:bar

    foo:grinning_face:bar

    ', function() { - assert.areSame( '

    foo๐Ÿ˜€bar

    foo:grinning_face:bar

    foo:grinning_face:bar

    ', editor.getData() ); - } ); + clearAutocompleteModel( autocomplete ); }, - 'test emoji with paste event': function( editor, bot ) { - bot.setHtmlWithSelection( '

    111^222

    ' ); - - editor.once( 'afterPaste', function() { - resume( function() { - assert.areSame( '

    111๐Ÿฆ„222

    ', editor.getData() ); - } ); - } ); + 'test emoji are not actived when too few letters are written': function( editor, bot ) { + var autocomplete = editor._.emoji.autocomplete; + bot.setHtmlWithSelection( '

    foo:b^

    ' ); + editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); - bender.tools.emulatePaste( editor, ':unicorn_face:' ); + assert.isUndefined( autocomplete.model.query ); + assert.isUndefined( autocomplete.model.data ); - wait(); + clearAutocompleteModel( autocomplete ); } + }; tests = bender.tools.createTestsForEditors( CKEDITOR.tools.objectKeys( bender.editors ), tests ); - CKEDITOR.tools.array.forEach( CKEDITOR.tools.objectKeys( singleTests ), function( key ) { if ( tests[ key ] === undefined ) { tests[ key ] = singleTests[ key ]; } } ); - bender.test( tests ); } )(); diff --git a/tests/plugins/emoji/customemojilist.js b/tests/plugins/emoji/customemojilist.js index 432a4031ff9..b9b0bdb196a 100644 --- a/tests/plugins/emoji/customemojilist.js +++ b/tests/plugins/emoji/customemojilist.js @@ -29,21 +29,43 @@ }, // #2036 - 'test custom emoji list': function() { - var editor = this.editors.classic, - bot = this.editorBots.classic; + 'test custom emoji list is loadd': function() { + var editor = this.editors.classic; - assert.areSame( '

    foo :grinning_face: bar :not_emoji: this is converted emoji โญ

    ', editor.getData(), 'Checking startup data' ); + if ( editor.status !== 'ready' ) { + editor.once( function() { + resume( function() { + assertEmoji(); + } ); + } ); + wait(); + } else { + assertEmoji(); + } - bot.setHtmlWithSelection( '

    hello^world

    ' ); - editor.insertText( ':grinning_face::not_emoji::star:' ); - assert.areSame( '

    hello:grinning_face::not_emoji:โญworld

    ', editor.getData() ); + function assertEmoji() { + assert.areSame( 1, editor._.emoji.list.length ); + objectAssert.areEqual( { id: ':star:', symbol: 'โญ' }, editor._.emoji.list[ 0 ] ); + } }, 'test invalid emoji list': function() { var editor = this.editors.classic2; - assert.areSame( '

    foo :grinning_face: bar :not_emoji: this is not converted emoji :star:

    ', editor.getData(), 'Checking startup data' ); - assert.isUndefined( editor._.emojiList, 'There is no emoji list loaded' ); + + if ( editor.status !== 'ready' ) { + editor.once( function() { + resume( function() { + assertEmoji(); + } ); + } ); + wait(); + } else { + assertEmoji(); + } + + function assertEmoji() { + assert.isUndefined( editor._.emoji, 'There are created emoji private data, so emoji was loaded what is wrong for this case.' ); + } }, 'test long ajax loading': function() { @@ -72,8 +94,10 @@ } function assertAfterReady() { + assert.isUndefined( editor._.emoji, 'Emoji is loaded on this stage, what should not happen here.' ); server.respond(); - assert.areSame( '

    foo :grinning_face: bar :not_emoji: this :star: is converted emoji ๐Ÿ›

    ', editor.getData() ); + assert.areSame( 1, editor._.emoji.list.length ); + objectAssert.areEqual( { id: ':bug:', symbol: '๐Ÿ›' }, editor._.emoji.list[ 0 ] ); server.restore(); } } ); From 015fa7a5b0bcf53a9b9530c8e4827d54c498bb3e Mon Sep 17 00:00:00 2001 From: Mateusz Samsel Date: Tue, 19 Jun 2018 15:27:12 +0200 Subject: [PATCH 09/17] Remove unnecessary manual tests for emoji plugin. --- .../plugins/emoji/manual/blockedelements.html | 37 -------------- tests/plugins/emoji/manual/blockedelements.md | 21 -------- .../emoji/manual/insertorsetemoji.html | 50 ------------------- .../plugins/emoji/manual/insertorsetemoji.md | 21 -------- tests/plugins/emoji/manual/noextraundo.html | 18 ------- tests/plugins/emoji/manual/noextraundo.md | 14 ------ tests/plugins/emoji/manual/outercontext.html | 15 ------ tests/plugins/emoji/manual/outercontext.md | 18 ------- 8 files changed, 194 deletions(-) delete mode 100644 tests/plugins/emoji/manual/blockedelements.html delete mode 100644 tests/plugins/emoji/manual/blockedelements.md delete mode 100644 tests/plugins/emoji/manual/insertorsetemoji.html delete mode 100644 tests/plugins/emoji/manual/insertorsetemoji.md delete mode 100644 tests/plugins/emoji/manual/noextraundo.html delete mode 100644 tests/plugins/emoji/manual/noextraundo.md delete mode 100644 tests/plugins/emoji/manual/outercontext.html delete mode 100644 tests/plugins/emoji/manual/outercontext.md diff --git a/tests/plugins/emoji/manual/blockedelements.html b/tests/plugins/emoji/manual/blockedelements.html deleted file mode 100644 index a8f29fe9eba..00000000000 --- a/tests/plugins/emoji/manual/blockedelements.html +++ /dev/null @@ -1,37 +0,0 @@ -

    Classic editor

    - - - -

    Divarea editor

    - -
    -

    This is header H1

    -

    This is header H2

    -

    This is header H3

    -

    This is header H4

    -
    This is header H5
    -
    This is header H6
    -

    This is regular paragraph.

    -
    This is formatted text.
    -

    This is text wrapped with code.

    -
    - - diff --git a/tests/plugins/emoji/manual/blockedelements.md b/tests/plugins/emoji/manual/blockedelements.md deleted file mode 100644 index 2c576fa5812..00000000000 --- a/tests/plugins/emoji/manual/blockedelements.md +++ /dev/null @@ -1,21 +0,0 @@ -@bender-tags: 4.10.0, feature, emoji, 1746 -@bender-ckeditor-plugins: wysiwygarea, toolbar, elementspath, sourcearea, emoji, clipboard, undo, format, stylescombo -@bender-ui: collapsed - -1. It is required to type at lest 2 characters with emoji name to show up a suggestion box. E.g `:fa`. -1. Try to add emoji inside `h1`, `h2` or `h3`. -1. Try to add emoji in `Formatted` format and `Computer code` style. - -## Expected: - * Emoji should not be added in any of mentioned headers. - * Emoji should be possible to add in `Formatted` and `Computer code` styles. - ----- -## Example emoji: - -| name | symbol | -| ---: | --- | -| :bug: | ๐Ÿ› | -| :winking_face: | ๐Ÿ˜‰ | -| :collision: | ๐Ÿ’ฅ | -| :unicorn_face: | ๐Ÿฆ„ | diff --git a/tests/plugins/emoji/manual/insertorsetemoji.html b/tests/plugins/emoji/manual/insertorsetemoji.html deleted file mode 100644 index cfa583f7134..00000000000 --- a/tests/plugins/emoji/manual/insertorsetemoji.html +++ /dev/null @@ -1,50 +0,0 @@ - - - -

    Classic editor

    - - - -

    Divarea editor

    - -
    -

    Hello world.

    -
    - - diff --git a/tests/plugins/emoji/manual/insertorsetemoji.md b/tests/plugins/emoji/manual/insertorsetemoji.md deleted file mode 100644 index 8d6696ea141..00000000000 --- a/tests/plugins/emoji/manual/insertorsetemoji.md +++ /dev/null @@ -1,21 +0,0 @@ -@bender-tags: 4.10.0, feature, emoji, 1746 -@bender-ckeditor-plugins: wysiwygarea, toolbar, elementspath, sourcearea, emoji, clipboard, undo -@bender-ui: collapsed - -1. Type emoji name in input box. You can use name provided in table below. -2. Press transparent button in toolbar (they have labels). There are 2 buttons with no icon (test both of them): - * one inserts new content in current selection, - * second one sets entire content of a editor, - -## Expected: -Emoji is properly transform from its name to symbol during insertion or setting up data in editor. - ----- -## Example emoji: - -| name | symbol | -| ---: | --- | -| :bug: | ๐Ÿ› | -| :winking_face: | ๐Ÿ˜‰ | -| :collision: | ๐Ÿ’ฅ | -| :unicorn_face: | ๐Ÿฆ„ | diff --git a/tests/plugins/emoji/manual/noextraundo.html b/tests/plugins/emoji/manual/noextraundo.html deleted file mode 100644 index 0052e02c01a..00000000000 --- a/tests/plugins/emoji/manual/noextraundo.html +++ /dev/null @@ -1,18 +0,0 @@ -

    Classic editor

    - - - -

    Divarea editor

    - -
    -

    Hello world. :winking_face:

    -
    - - diff --git a/tests/plugins/emoji/manual/noextraundo.md b/tests/plugins/emoji/manual/noextraundo.md deleted file mode 100644 index bf39d5af5a4..00000000000 --- a/tests/plugins/emoji/manual/noextraundo.md +++ /dev/null @@ -1,14 +0,0 @@ -@bender-tags: 4.10.0, bug, emoji, 2036 -@bender-ckeditor-plugins: wysiwygarea, toolbar, elementspath, sourcearea, emoji, clipboard, undo, stylescombo, format -@bender-ui: collapsed - -1. Put selection in editor - -## Expected: -There isn't created any undo step in editor. - -## Unexpected: -There appears undo steps, you can use redo and remove emoji from editor. - -## Note: -Repeat steps in both editors. diff --git a/tests/plugins/emoji/manual/outercontext.html b/tests/plugins/emoji/manual/outercontext.html deleted file mode 100644 index 0e3a219d265..00000000000 --- a/tests/plugins/emoji/manual/outercontext.html +++ /dev/null @@ -1,15 +0,0 @@ - -

    Divarea editor wrapped inside section

    -
    -
    -

    This is regular paragraph.

    -

    This is paragraph wrapped with section

    -
    -
    - - diff --git a/tests/plugins/emoji/manual/outercontext.md b/tests/plugins/emoji/manual/outercontext.md deleted file mode 100644 index 84c730e01a8..00000000000 --- a/tests/plugins/emoji/manual/outercontext.md +++ /dev/null @@ -1,18 +0,0 @@ -@bender-tags: 4.10.0, feature, emoji, 1746 -@bender-ckeditor-plugins: wysiwygarea, toolbar, elementspath, sourcearea, emoji, clipboard, undo, divarea -@bender-ui: collapsed - -1. Insert new emoji by typing its name in editor. You need to type `:` colon and at least 2 characters of emoji name in editor to get suggestion box open. E.g. `:fa`. - -## Expected: -Autocomplete suggestion is displayed inside **regular** paragraph and not in paragraph inside `section`. - ----- -## Example emoji: - -| name | symbol | -| ---: | --- | -| :bug: | ๐Ÿ› | -| :winking_face: | ๐Ÿ˜‰ | -| :collision: | ๐Ÿ’ฅ | -| :unicorn_face: | ๐Ÿฆ„ | From cd4063167abb3e25cbfff4c54e0f1ad1512f618b Mon Sep 17 00:00:00 2001 From: Mateusz Samsel Date: Tue, 19 Jun 2018 15:28:14 +0200 Subject: [PATCH 10/17] Simplify manual test after modification in emoji plugin. --- tests/plugins/emoji/manual/emoji.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/tests/plugins/emoji/manual/emoji.md b/tests/plugins/emoji/manual/emoji.md index 9d6b68da88c..eafbc5ff382 100644 --- a/tests/plugins/emoji/manual/emoji.md +++ b/tests/plugins/emoji/manual/emoji.md @@ -5,22 +5,6 @@ ## Test case #1: 1. Insert new emoji by typing its name in editor. You need to type `:` colon and at least 2 characters of emoji name in editor to get suggestion box open. E.g. `:fa`. -## Test case #2: -1. Copy-paste emoji. You can use table below test cases. -1. Please try to paste emoji inside blacklisted elements, which are `
    ` and `` for this test.
    -
    -### Expected TC#2:
    -Emoji are converted in allowed places, and remain untrasformed inside blacklisted elements.
    -
    -## Test case #3:
    -1. Move selection to `Formatted` section.
    -2. Try to type emoji inside formatted text element.
    -3. Move selection `Computer code` section.
    -4. Try to type emoji inside code element.
    -
    -### Expected TC#3:
    -In both cases emoji should remain not transformed. Autocomplete menu shouldn't be visible.
    -
     ----
     ## Example emoji to use in tests:
     
    
    From 6a54a905d2ea50db6bbd51e489f1ab8a8627e5f8 Mon Sep 17 00:00:00 2001
    From: Mateusz Samsel 
    Date: Tue, 19 Jun 2018 16:40:24 +0200
    Subject: [PATCH 11/17] Make emoji load on instance ready and adapt tests to
     it.
    
    ---
     plugins/emoji/plugin.js                |  24 ++++--
     tests/plugins/emoji/_helpers/tools.js  |  26 ++++++
     tests/plugins/emoji/basic.js           | 114 +++++++++++++++----------
     tests/plugins/emoji/customemojilist.js |  51 ++---------
     4 files changed, 122 insertions(+), 93 deletions(-)
     create mode 100644 tests/plugins/emoji/_helpers/tools.js
    
    diff --git a/plugins/emoji/plugin.js b/plugins/emoji/plugin.js
    index e38bdf2afdf..e5ecef53006 100644
    --- a/plugins/emoji/plugin.js
    +++ b/plugins/emoji/plugin.js
    @@ -42,12 +42,24 @@
     				var emojiList = editor._.emoji.list,
     					charactersToStart = editor.config.emoji_minChars === undefined ? 2 : editor.config.emoji_minChars;
     
    -				editor._.emoji.autocomplete = new CKEDITOR.plugins.autocomplete( editor, {
    -					textTestCallback: getTextTestCallback(),
    -					dataCallback: dataCallback,
    -					itemTemplate: '
  • {symbol} {id}
  • ', - outputTemplate: '{symbol}' - } ); + if ( editor.status !== 'ready' ) { + editor.once( 'instanceReady', function() { + initPlugin(); + } ); + } else { + initPlugin(); + } + + // HELPER FUNCTIONS: + + function initPlugin() { + editor._.emoji.autocomplete = new CKEDITOR.plugins.autocomplete( editor, { + textTestCallback: getTextTestCallback(), + dataCallback: dataCallback, + itemTemplate: '
  • {symbol} {id}
  • ', + outputTemplate: '{symbol}' + } ); + } function getTextTestCallback() { return function( range ) { diff --git a/tests/plugins/emoji/_helpers/tools.js b/tests/plugins/emoji/_helpers/tools.js new file mode 100644 index 00000000000..313168b641c --- /dev/null +++ b/tests/plugins/emoji/_helpers/tools.js @@ -0,0 +1,26 @@ +( function() { + 'use strict'; + window.emojiTools = { + runAfterInstanceReady: function( editor, bot, testCase ) { + // Emoji are loaded on instance ready, we need to wait for it. + if ( editor.status !== 'ready' ) { + editor.once( 'instanceReady', function() { + resume( function() { + testCase( editor, bot ); + } ); + }, null, null, 100 ); + wait(); + } else { + testCase( editor, bot ); + } + }, + clearAutocompleteModel: function( autocomplete ) { + var model = autocomplete.model; + delete model.data; + delete model.lastRequestId; + delete model.query; + delete model.range; + delete model.selectedItemId; + } + }; +} )(); diff --git a/tests/plugins/emoji/basic.js b/tests/plugins/emoji/basic.js index ea4e6d773d5..1accbf687af 100644 --- a/tests/plugins/emoji/basic.js +++ b/tests/plugins/emoji/basic.js @@ -1,5 +1,7 @@ /* bender-tags: emoji */ /* bender-ckeditor-plugins: emoji,toolbar,stylescombo,format,clipboard,undo */ +/* bender-include: _helpers/tools.js */ +/* global emojiTools */ ( function() { 'use strict'; @@ -27,67 +29,91 @@ } }; - function clearAutocompleteModel( autocomplete ) { - var model = autocomplete.model; - delete model.data; - delete model.lastRequestId; - delete model.query; - delete model.range; - delete model.selectedItemId; - } + var stub = null; var singleTests = { 'test for custom emoji characters': function() { var editor = this.editors.divarea, - bot = this.editorBots.divarea, - autocomplete = editor._.emoji.autocomplete; - - bot.setHtmlWithSelection( '

    foo:da^

    ' ); - editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); - assert.isUndefined( autocomplete.model.query ); - assert.isUndefined( autocomplete.model.data ); - - // Handle throttle in autocomplete which by defualt is 20ms; - setTimeout( function() { - resume( function() { - bot.setHtmlWithSelection( '

    foo:dagg^

    ' ); - editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); - assert.areSame( ':dagg', autocomplete.model.query, 'Model keeps wrong querry.' ); - assert.areSame( 1, autocomplete.model.data.length, 'Emoji result contains more than one result.' ); - objectAssert.areEqual( { id: ':dagger:', symbol: '๐Ÿ—ก' }, autocomplete.model.data[ 0 ], 'Emoji result contains wrong result' ); - } ); - }, 21 ); - wait(); + bot = this.editorBots.divarea; + + emojiTools.runAfterInstanceReady( editor, bot, function( editor, bot ) { + var autocomplete = editor._.emoji.autocomplete; + + bot.setHtmlWithSelection( '

    foo:da^

    ' ); + editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); + assert.isUndefined( autocomplete.model.query ); + assert.isUndefined( autocomplete.model.data ); + + // Handle throttle in autocomplete which by defualt is 20ms; + setTimeout( function() { + resume( function() { + bot.setHtmlWithSelection( '

    foo:dagg^

    ' ); + editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); + assert.areSame( ':dagg', autocomplete.model.query, 'Model keeps wrong querry.' ); + assert.areSame( 1, autocomplete.model.data.length, 'Emoji result contains more than one result.' ); + objectAssert.areEqual( { id: ':dagger:', symbol: '๐Ÿ—ก' }, autocomplete.model.data[ 0 ], 'Emoji result contains wrong result' ); + } ); + }, 50 ); + wait(); + } ); } }; var tests = { - 'test emoji objects are added to editor': function( editor ) { - assert.isObject( editor._.emoji, 'Emoji variable doesn\' exists.' ); - objectAssert.ownsKeys( [ 'list', 'autocomplete' ], editor._.emoji, 'Emoji variable is missing some keys.' ); + setUp: function() { + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { + assert.ignore(); + } + // Fallback in case where ajax couldn't load before tests. + var data = JSON.stringify( [ + { id: ':bug:', symbol: '๐Ÿ›' }, + { id: ':dagger:', symbol: '๐Ÿ—ก' } + ] ); + + stub = sinon.stub( CKEDITOR.ajax, 'load', function( url, callback ) { + if ( url.indexOf( 'emoji/_assets/emoji.json' ) !== -1 ) { + callback( data ); + } + } ); + }, + + tearDown: function() { + stub.restore(); + }, + + 'test emoji objects are added to editor': function( editor ) { + emojiTools.runAfterInstanceReady( editor, null, function( editor ) { + assert.isObject( editor._.emoji, 'Emoji variable doesn\' exists.' ); + objectAssert.ownsKeys( [ 'list', 'autocomplete' ], editor._.emoji, 'Emoji variable is missing some keys.' ); + } ); }, 'test emoji suggestion box has proper values': function( editor, bot ) { - var autocomplete = editor._.emoji.autocomplete; - bot.setHtmlWithSelection( '

    foo:bug^

    ' ); - editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); - assert.areSame( ':bug', autocomplete.model.query, 'Model keeps wrong querry.' ); - assert.areSame( 1, autocomplete.model.data.length, 'Emoji result contains more than one result.' ); - objectAssert.areEqual( { id: ':bug:', symbol: '๐Ÿ›' }, autocomplete.model.data[ 0 ], 'Emoji result contains wrong result' ); - - clearAutocompleteModel( autocomplete ); + emojiTools.runAfterInstanceReady( editor, bot, function( editor, bot ) { + var autocomplete = editor._.emoji.autocomplete; + + bot.setHtmlWithSelection( '

    foo:bug^

    ' ); + editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); + assert.areSame( ':bug', autocomplete.model.query, 'Model keeps wrong querry.' ); + assert.areSame( 1, autocomplete.model.data.length, 'Emoji result contains more than one result.' ); + objectAssert.areEqual( { id: ':bug:', symbol: '๐Ÿ›' }, autocomplete.model.data[ 0 ], 'Emoji result contains wrong result' ); + + emojiTools.clearAutocompleteModel( autocomplete ); + } ); }, 'test emoji are not actived when too few letters are written': function( editor, bot ) { - var autocomplete = editor._.emoji.autocomplete; - bot.setHtmlWithSelection( '

    foo:b^

    ' ); - editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); + emojiTools.runAfterInstanceReady( editor, bot, function( editor, bot ) { + var autocomplete = editor._.emoji.autocomplete; + bot.setHtmlWithSelection( '

    foo:b^

    ' ); + editor.editable().fire( 'keyup', new CKEDITOR.dom.event( {} ) ); - assert.isUndefined( autocomplete.model.query ); - assert.isUndefined( autocomplete.model.data ); + assert.isUndefined( autocomplete.model.query ); + assert.isUndefined( autocomplete.model.data ); - clearAutocompleteModel( autocomplete ); + emojiTools.clearAutocompleteModel( autocomplete ); + } ); } }; diff --git a/tests/plugins/emoji/customemojilist.js b/tests/plugins/emoji/customemojilist.js index b9b0bdb196a..53e17ecc06f 100644 --- a/tests/plugins/emoji/customemojilist.js +++ b/tests/plugins/emoji/customemojilist.js @@ -1,5 +1,7 @@ /* bender-tags: emoji */ /* bender-ckeditor-plugins: emoji,toolbar,stylescombo,format,clipboard */ +/* bender-include: _helpers/tools.js */ +/* global emojiTools */ ( function() { 'use strict'; @@ -31,41 +33,17 @@ // #2036 'test custom emoji list is loadd': function() { var editor = this.editors.classic; - - if ( editor.status !== 'ready' ) { - editor.once( function() { - resume( function() { - assertEmoji(); - } ); - } ); - wait(); - } else { - assertEmoji(); - } - - function assertEmoji() { + emojiTools.runAfterInstanceReady( editor, null, function( editor ) { assert.areSame( 1, editor._.emoji.list.length ); objectAssert.areEqual( { id: ':star:', symbol: 'โญ' }, editor._.emoji.list[ 0 ] ); - } + } ); }, 'test invalid emoji list': function() { var editor = this.editors.classic2; - - if ( editor.status !== 'ready' ) { - editor.once( function() { - resume( function() { - assertEmoji(); - } ); - } ); - wait(); - } else { - assertEmoji(); - } - - function assertEmoji() { + emojiTools.runAfterInstanceReady( editor, null, function( editor ) { assert.isUndefined( editor._.emoji, 'There are created emoji private data, so emoji was loaded what is wrong for this case.' ); - } + } ); }, 'test long ajax loading': function() { @@ -80,26 +58,13 @@ }, startupData: '

    foo :grinning_face: bar :not_emoji: this :star: is converted emoji :bug:

    ' }, function( bot ) { - var editor = bot.editor; - - if ( editor.status !== 'ready' ) { - editor.once( 'instanceReady', function() { - resume( function() { - assertAfterReady(); - } ); - }, null, null, 1000 ); - wait(); - } else { - assertAfterReady(); - } - - function assertAfterReady() { + emojiTools.runAfterInstanceReady( bot.editor, null, function( editor ) { assert.isUndefined( editor._.emoji, 'Emoji is loaded on this stage, what should not happen here.' ); server.respond(); assert.areSame( 1, editor._.emoji.list.length ); objectAssert.areEqual( { id: ':bug:', symbol: '๐Ÿ›' }, editor._.emoji.list[ 0 ] ); server.restore(); - } + } ); } ); } } ); From b2f9f3d24b8fc7539336e8fa7a6dbd211a392346 Mon Sep 17 00:00:00 2001 From: Mateusz Samsel Date: Wed, 20 Jun 2018 15:21:00 +0200 Subject: [PATCH 12/17] Review fixes, drop support for IE lower than 11, add fallback font loading to support emoji in IE, correct test to run on supported environments only. --- contents.css | 3 ++- plugins/emoji/plugin.js | 3 +-- plugins/emoji/skins/default.css | 1 + tests/plugins/emoji/_helpers/tools.js | 3 ++- tests/plugins/emoji/basic.js | 2 +- tests/plugins/emoji/customemojilist.js | 6 +++--- tests/plugins/emoji/manual/customemojilist.html | 3 +++ tests/plugins/emoji/manual/customemojilist.md | 1 + tests/plugins/emoji/manual/emoji.html | 3 +++ tests/plugins/emoji/manual/emoji.md | 1 + tests/plugins/emoji/manual/minchars.html | 3 +++ tests/plugins/emoji/manual/minchars.md | 1 + 12 files changed, 22 insertions(+), 8 deletions(-) diff --git a/contents.css b/contents.css index fccfab764c0..a7596b49704 100644 --- a/contents.css +++ b/contents.css @@ -6,7 +6,8 @@ For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license body { /* Font */ - font-family: sans-serif, Arial, Verdana, "Trebuchet MS"; + /* Emoji font are added to visualise them nicely in IE */ + font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 12px; /* Text color */ diff --git a/plugins/emoji/plugin.js b/plugins/emoji/plugin.js index e5ecef53006..3ba526a450f 100644 --- a/plugins/emoji/plugin.js +++ b/plugins/emoji/plugin.js @@ -13,7 +13,7 @@ CKEDITOR.plugins.add( 'emoji', { requires: 'autocomplete,textmatch,ajax', beforeInit: function() { - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 11 ) { return; } if ( !stylesLoaded ) { @@ -23,7 +23,6 @@ }, init: function( editor ) { - var emojiListUrl = editor.config.emoji_emojiListUrl || 'plugins/emoji/emoji.json'; CKEDITOR.ajax.load( CKEDITOR.getUrl( emojiListUrl ), function( data ) { diff --git a/plugins/emoji/skins/default.css b/plugins/emoji/skins/default.css index 1e2762d1ed4..c6fe7b39e41 100644 --- a/plugins/emoji/skins/default.css +++ b/plugins/emoji/skins/default.css @@ -2,4 +2,5 @@ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } diff --git a/tests/plugins/emoji/_helpers/tools.js b/tests/plugins/emoji/_helpers/tools.js index 313168b641c..590e44f9342 100644 --- a/tests/plugins/emoji/_helpers/tools.js +++ b/tests/plugins/emoji/_helpers/tools.js @@ -21,6 +21,7 @@ delete model.query; delete model.range; delete model.selectedItemId; - } + }, + notSupportEnvironment: CKEDITOR.env.ie && CKEDITOR.env.version < 11 }; } )(); diff --git a/tests/plugins/emoji/basic.js b/tests/plugins/emoji/basic.js index 1accbf687af..52f21493110 100644 --- a/tests/plugins/emoji/basic.js +++ b/tests/plugins/emoji/basic.js @@ -61,7 +61,7 @@ var tests = { setUp: function() { - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { + if ( emojiTools.notSupportedEnvironment ) { assert.ignore(); } diff --git a/tests/plugins/emoji/customemojilist.js b/tests/plugins/emoji/customemojilist.js index 53e17ecc06f..b3cb8a734b9 100644 --- a/tests/plugins/emoji/customemojilist.js +++ b/tests/plugins/emoji/customemojilist.js @@ -25,13 +25,13 @@ bender.test( { setUp: function() { - if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { + if ( emojiTools.notSupportedEnvironment ) { assert.ignore(); } }, // #2036 - 'test custom emoji list is loadd': function() { + 'test custom emoji list is load': function() { var editor = this.editors.classic; emojiTools.runAfterInstanceReady( editor, null, function( editor ) { assert.areSame( 1, editor._.emoji.list.length ); @@ -42,7 +42,7 @@ 'test invalid emoji list': function() { var editor = this.editors.classic2; emojiTools.runAfterInstanceReady( editor, null, function( editor ) { - assert.isUndefined( editor._.emoji, 'There are created emoji private data, so emoji was loaded what is wrong for this case.' ); + assert.isUndefined( editor._.emoji, 'editor._.emoji should not be initialised when invalid emoji file is loaded.' ); } ); }, diff --git a/tests/plugins/emoji/manual/customemojilist.html b/tests/plugins/emoji/manual/customemojilist.html index d512dce27dc..5d3e8f13c9a 100644 --- a/tests/plugins/emoji/manual/customemojilist.html +++ b/tests/plugins/emoji/manual/customemojilist.html @@ -11,6 +11,9 @@

    Divarea editor