Sfoglia il codice sorgente

wallet: fix key repeat issue

darkfi 1 anno fa
parent
commit
b6eec36fb8

+ 7 - 1
bin/darkwallet/src/app/schema/chat.rs

@@ -922,7 +922,7 @@ pub async fn make(
         let sg_root = sg_root.clone();
         let chatview_node = chatview_node.clone();
         async move {
-            let text = editz_text.get();
+            let mut text = editz_text.get();
             info!(target: "app::chat", "Send '{text}' to channel: #{channel}");
             editz_text.set("");
 
@@ -949,6 +949,12 @@ pub async fn make(
                 return
             }
 
+            // Limit line length
+            if text.len() > 300 {
+                text.truncate(300);
+                text.push('โ€ฆ');
+            }
+
             let timest = UNIX_EPOCH.elapsed().unwrap().as_millis() as u64;
             let nick = darkirc.get_property_str("nick").unwrap();
             let msg = darkirc::Privmsg::new(channel, nick, text);

+ 8 - 8
bin/darkwallet/src/app/schema/test.rs

@@ -252,11 +252,16 @@ pub async fn make(app: &App, window: SceneNodePtr) {
     let prop = node.get_property("rect").unwrap();
     prop.set_f32(Role::App, 0, 100.).unwrap();
     prop.set_f32(Role::App, 1, 100.).unwrap();
-    prop.set_f32(Role::App, 2, 800.).unwrap();
+    prop.set_f32(Role::App, 2, 2000.).unwrap();
     prop.set_f32(Role::App, 3, 200.).unwrap();
     node.set_property_f32(Role::App, "baseline", 40.).unwrap();
     node.set_property_f32(Role::App, "font_size", 60.).unwrap();
-    node.set_property_str(Role::App, "text", "anon1๐Ÿ† โ‰Œ ๐Ÿณ๏ธโ€โšง๏ธ").unwrap();
+    node.set_property_str(
+        Role::App,
+        "text",
+        "hel \u{01f3f3}\u{fe0f}\u{200d}\u{26a7}\u{fe0f} 123 '\u{01f44d}\u{01f3fe}' br",
+    )
+    .unwrap();
     //node.set_property_str(Role::App, "text", "anon1").unwrap();
     let prop = node.get_property("text_color").unwrap();
     prop.set_f32(Role::App, 0, 0.).unwrap();
@@ -300,12 +305,7 @@ pub async fn make(app: &App, window: SceneNodePtr) {
     node.set_property_f32(Role::App, "baseline", 40.).unwrap();
     node.set_property_f32(Role::App, "font_size", 20.).unwrap();
     node.set_property_f32(Role::App, "font_size", 40.).unwrap();
-    node.set_property_str(
-        Role::App,
-        "text",
-        "hello king!๐Ÿ˜๐Ÿ†jelly ๐Ÿ†1234 '\u{01f3f3}\u{fe0f}\u{200d}\u{26a7}\u{fe0f}'",
-    )
-    .unwrap();
+    node.set_property_str(Role::App, "text", "\u{01f3f3}\u{fe0f}\u{200d}\u{26a7}\u{fe0f}").unwrap();
     let prop = node.get_property("text_color").unwrap();
     if LIGHTMODE {
         prop.set_f32(Role::App, 0, 0.).unwrap();

+ 0 - 2
bin/darkwallet/src/mesh.rs

@@ -104,8 +104,6 @@ impl MeshBuilder {
         let (u2, v2) = uv.bottom_right().unpack();
 
         // Interpolate UV coords
-        assert!(obj.w >= clipped.w);
-        assert!(obj.h >= clipped.h);
 
         let i = (clipped.x - obj.x) / obj.w;
         let clip_u1 = u1 + i * (u2 - u1);

+ 12 - 7
bin/darkwallet/src/ui/chatedit.rs

@@ -1951,6 +1951,7 @@ impl UIObject for ChatEdit {
     }
 
     async fn handle_char(&self, key: char, mods: KeyMods, repeat: bool) -> bool {
+        //debug!(target: "ui::chatedit", "handle_char({key}, {mods:?}, {repeat})");
         // First filter for only single digit keys
         if DISALLOWED_CHARS.contains(&key) {
             return false
@@ -1960,6 +1961,11 @@ impl UIObject for ChatEdit {
             return false
         }
 
+        let actions = {
+            let mut repeater = self.key_repeat.lock();
+            repeater.key_down(PressedKey::Char(key), repeat)
+        };
+
         if mods.ctrl || mods.alt {
             if repeat {
                 return false
@@ -1967,10 +1973,6 @@ impl UIObject for ChatEdit {
             return self.handle_shortcut(key, &mods).await
         }
 
-        let actions = {
-            let mut repeater = self.key_repeat.lock();
-            repeater.key_down(PressedKey::Char(key), repeat)
-        };
         //debug!(target: "ui::chatedit", "Key {:?} has {} actions", key, actions);
         for _ in 0..actions {
             self.insert_char(key).await;
@@ -1979,6 +1981,7 @@ impl UIObject for ChatEdit {
     }
 
     async fn handle_key_down(&self, key: KeyCode, mods: KeyMods, repeat: bool) -> bool {
+        //debug!(target: "ui::chatedit", "handle_key_down({key:?}, {mods:?}, {repeat})")
         // First filter for only single digit keys
         // Avoid processing events handled by insert_char()
         if !ALLOWED_KEYCODES.contains(&key) {
@@ -1993,10 +1996,12 @@ impl UIObject for ChatEdit {
             let mut repeater = self.key_repeat.lock();
             repeater.key_down(PressedKey::Key(key), repeat)
         };
+
         // Suppress noisy message
-        /*if actions > 0 {
-            debug!(target: "ui::chatedit", "Key {:?} has {} actions", key, actions);
-        }*/
+        //if actions > 0 {
+        //    debug!(target: "ui::chatedit", "Key {:?} has {} actions", key, actions);
+        //}
+
         let mut is_handled = false;
         for _ in 0..actions {
             if self.handle_key(&key, &mods).await {

+ 564 - 36
bin/darkwallet/src/ui/emoji_picker/emoji.rs

@@ -1,38 +1,566 @@
 pub static EMOJI_LIST: &[&str] = &[
-    "๐Ÿ˜€", "๐Ÿ˜ƒ", "๐Ÿ˜„", "๐Ÿ˜", "๐Ÿ˜†", "๐Ÿ˜…", "๐Ÿคฃ", "๐Ÿ˜‚", "๐Ÿ™‚", "๐Ÿ™ƒ", "๐Ÿซ ", "๐Ÿ˜‰", "๐Ÿ˜Š", "๐Ÿ˜‡", "๐Ÿฅฐ", "๐Ÿ˜",
-    "๐Ÿคฉ", "๐Ÿ˜˜", "๐Ÿ˜—", "๐Ÿ˜š", "๐Ÿ˜™", "๐Ÿฅฒ", "๐Ÿ˜‹", "๐Ÿ˜›", "๐Ÿ˜œ", "๐Ÿคช", "๐Ÿ˜", "๐Ÿค‘", "๐Ÿค—", "๐Ÿคญ", "๐Ÿซข", "๐Ÿซฃ",
-    "๐Ÿคซ", "๐Ÿค”", "๐Ÿซก", "๐Ÿค", "๐Ÿคจ", "๐Ÿ˜", "๐Ÿ˜‘", "๐Ÿ˜ถ", "๐Ÿ˜", "๐Ÿ˜’", "๐Ÿ™„", "๐Ÿ˜ฌ", "๐Ÿคฅ", "๐Ÿซจ", "๐Ÿ˜Œ", "๐Ÿ˜”",
-    "๐Ÿ˜ช", "๐Ÿคค", "๐Ÿ˜ด", "๐Ÿ˜ท", "๐Ÿค’", "๐Ÿค•", "๐Ÿคข", "๐Ÿคฎ", "๐Ÿคง", "๐Ÿฅต", "๐Ÿฅถ", "๐Ÿฅด", "๐Ÿ˜ต", "๐Ÿคฏ", "๐Ÿค ", "๐Ÿฅณ",
-    "๐Ÿฅธ", "๐Ÿ˜Ž", "๐Ÿค“", "๐Ÿง", "๐Ÿ˜•", "๐Ÿซค", "๐Ÿ˜Ÿ", "๐Ÿ™", "๐Ÿ˜ฎ", "๐Ÿ˜ฏ", "๐Ÿ˜ฒ", "๐Ÿ˜ณ", "๐Ÿฅบ", "๐Ÿฅน", "๐Ÿ˜ฆ", "๐Ÿ˜ง",
-    "๐Ÿ˜จ", "๐Ÿ˜ฐ", "๐Ÿ˜ฅ", "๐Ÿ˜ข", "๐Ÿ˜ญ", "๐Ÿ˜ฑ", "๐Ÿ˜–", "๐Ÿ˜ฃ", "๐Ÿ˜ž", "๐Ÿ˜“", "๐Ÿ˜ฉ", "๐Ÿ˜ซ", "๐Ÿฅฑ", "๐Ÿ˜ค", "๐Ÿ˜ก", "๐Ÿ˜ ",
-    "๐Ÿคฌ", "๐Ÿ˜ˆ", "๐Ÿ‘ฟ", "๐Ÿ’€", "๐Ÿ’ฉ", "๐Ÿคก", "๐Ÿ‘น", "๐Ÿ‘บ", "๐Ÿ‘ป", "๐Ÿ‘ฝ", "๐Ÿ‘พ", "๐Ÿค–", "๐Ÿ˜บ", "๐Ÿ˜ธ", "๐Ÿ˜น", "๐Ÿ˜ป",
-    "๐Ÿ˜ผ", "๐Ÿ˜ฝ", "๐Ÿ™€", "๐Ÿ˜ฟ", "๐Ÿ˜พ", "๐Ÿ™ˆ", "๐Ÿ™‰", "๐Ÿ™Š", "๐Ÿ’˜", "๐Ÿ’", "๐Ÿ’–", "๐Ÿ’—", "๐Ÿ’“", "๐Ÿ’ž", "๐Ÿ’•", "๐Ÿ’”",
-    "๐Ÿฉท", "๐Ÿงก", "๐Ÿ’›", "๐Ÿ’š", "๐Ÿ’™", "๐Ÿฉต", "๐Ÿ’œ", "๐ŸคŽ", "๐Ÿ–ค", "๐Ÿฉถ", "๐Ÿค", "๐Ÿ’‹", "๐Ÿ’ฏ", "๐Ÿ’ข", "๐Ÿ’ฅ", "๐Ÿ’ซ",
-    "๐Ÿ’ฆ", "๐Ÿ’จ", "๐Ÿ’ฌ", "๐Ÿ—จ", "๐Ÿ—ฏ", "๐Ÿ’ญ", "๐Ÿ’ค", "๐Ÿ‘‹", "๐Ÿคš", "โœ‹", "๐Ÿ––", "๐Ÿซฑ", "๐Ÿซฒ", "๐Ÿซณ", "๐Ÿซด", "๐Ÿซท",
-    "๐Ÿซธ", "๐Ÿ‘Œ", "๐ŸคŒ", "๐Ÿค", "๐Ÿคž", "๐Ÿซฐ", "๐ŸคŸ", "๐Ÿค˜", "๐Ÿค™", "๐Ÿ‘ˆ", "๐Ÿ‘‰", "๐Ÿ‘†", "๐Ÿ–•", "๐Ÿ‘‡", "๐Ÿซต", "๐Ÿ‘",
-    "๐Ÿ‘Ž", "โœŠ", "๐Ÿ‘Š", "๐Ÿค›", "๐Ÿคœ", "๐Ÿ‘", "๐Ÿ™Œ", "๐Ÿซถ", "๐Ÿ‘", "๐Ÿคฒ", "๐Ÿค", "๐Ÿ™", "๐Ÿ’…", "๐Ÿคณ", "๐Ÿ’ช", "๐Ÿฆพ",
-    "๐Ÿฆฟ", "๐Ÿฆต", "๐Ÿฆถ", "๐Ÿ‘‚", "๐Ÿฆป", "๐Ÿ‘ƒ", "๐Ÿง ", "๐Ÿซ€", "๐Ÿซ", "๐Ÿฆท", "๐Ÿฆด", "๐Ÿ‘€", "๐Ÿ‘", "๐Ÿ‘…", "๐Ÿ‘„", "๐Ÿซฆ",
-    "๐Ÿ‘ถ", "๐Ÿง’", "๐Ÿ‘ฆ", "๐Ÿ‘ง", "๐Ÿง‘", "๐Ÿ‘ฑ", "๐Ÿ‘จ", "๐Ÿง”", "๐Ÿ‘ฉ", "๐Ÿง“", "๐Ÿ‘ด", "๐Ÿ‘ต", "๐Ÿ™", "๐Ÿ™Ž", "๐Ÿ™…", "๐Ÿ™†",
-    "๐Ÿ’", "๐Ÿ™‹", "๐Ÿง", "๐Ÿ™‡", "๐Ÿคฆ", "๐Ÿคท", "๐Ÿ‘ฎ", "๐Ÿ’‚", "๐Ÿฅท", "๐Ÿ‘ท", "๐Ÿซ…", "๐Ÿคด", "๐Ÿ‘ธ", "๐Ÿ‘ณ", "๐Ÿ‘ฒ", "๐Ÿง•",
-    "๐Ÿคต", "๐Ÿ‘ฐ", "๐Ÿคฐ", "๐Ÿซƒ", "๐Ÿซ„", "๐Ÿคฑ", "๐Ÿ‘ผ", "๐ŸŽ…", "๐Ÿคถ", "๐Ÿฆธ", "๐Ÿฆน", "๐Ÿง™", "๐Ÿงš", "๐Ÿง›", "๐Ÿงœ", "๐Ÿง",
-    "๐Ÿงž", "๐ŸงŸ", "๐ŸงŒ", "๐Ÿ’†", "๐Ÿ’‡", "๐Ÿšถ", "๐Ÿง", "๐ŸงŽ", "๐Ÿƒ", "๐Ÿ’ƒ", "๐Ÿ•บ", "๐Ÿ•ด", "๐Ÿ‘ฏ", "๐Ÿง–", "๐Ÿง—", "๐Ÿคบ",
-    "๐Ÿ‡", "โ›ท", "๐Ÿ‚", "๐ŸŒ", "๐Ÿ„", "๐Ÿšฃ", "๐ŸŠ", "โ›น", "๐Ÿ‹", "๐Ÿšด", "๐Ÿšต", "๐Ÿคธ", "๐Ÿคผ", "๐Ÿคฝ", "๐Ÿคพ", "๐Ÿคน",
-    "๐Ÿง˜", "๐Ÿ›€", "๐Ÿ›Œ", "๐Ÿ‘ญ", "๐Ÿ‘ซ", "๐Ÿ‘ฌ", "๐Ÿ’", "๐Ÿ’‘", "๐Ÿ—ฃ", "๐Ÿ‘ค", "๐Ÿ‘ฅ", "๐Ÿซ‚", "๐Ÿ‘ช", "๐Ÿ‘ฃ", "๐Ÿต", "๐Ÿ’",
-    "๐Ÿฆ", "๐Ÿฆง", "๐Ÿถ", "๐Ÿ•", "๐Ÿฆฎ", "๐Ÿฉ", "๐Ÿบ", "๐ŸฆŠ", "๐Ÿฆ", "๐Ÿฑ", "๐Ÿˆ", "๐Ÿฆ", "๐Ÿฏ", "๐Ÿ…", "๐Ÿ†", "๐Ÿด",
-    "๐ŸซŽ", "๐Ÿซ", "๐ŸŽ", "๐Ÿฆ„", "๐Ÿฆ“", "๐ŸฆŒ", "๐Ÿฆฌ", "๐Ÿฎ", "๐Ÿ‚", "๐Ÿƒ", "๐Ÿ„", "๐Ÿท", "๐Ÿ–", "๐Ÿ—", "๐Ÿฝ", "๐Ÿ",
-    "๐Ÿ‘", "๐Ÿ", "๐Ÿช", "๐Ÿซ", "๐Ÿฆ™", "๐Ÿฆ’", "๐Ÿ˜", "๐Ÿฆฃ", "๐Ÿฆ", "๐Ÿฆ›", "๐Ÿญ", "๐Ÿ", "๐Ÿ€", "๐Ÿน", "๐Ÿฐ", "๐Ÿ‡",
-    "๐Ÿฟ", "๐Ÿฆซ", "๐Ÿฆ”", "๐Ÿฆ‡", "๐Ÿป", "๐Ÿจ", "๐Ÿผ", "๐Ÿฆฅ", "๐Ÿฆฆ", "๐Ÿฆจ", "๐Ÿฆ˜", "๐Ÿฆก", "๐Ÿพ", "๐Ÿฆƒ", "๐Ÿ”", "๐Ÿ“",
-    "๐Ÿฃ", "๐Ÿค", "๐Ÿฅ", "๐Ÿฆ", "๐Ÿง", "๐Ÿ•Š", "๐Ÿฆ…", "๐Ÿฆ†", "๐Ÿฆข", "๐Ÿฆ‰", "๐Ÿฆค", "๐Ÿชถ", "๐Ÿฆฉ", "๐Ÿฆš", "๐Ÿฆœ", "๐Ÿชฝ",
-    "๐Ÿชฟ", "๐Ÿธ", "๐ŸŠ", "๐Ÿข", "๐ŸฆŽ", "๐Ÿ", "๐Ÿฒ", "๐Ÿ‰", "๐Ÿฆ•", "๐Ÿฆ–", "๐Ÿณ", "๐Ÿ‹", "๐Ÿฌ", "๐Ÿฆญ", "๐ŸŸ", "๐Ÿ ",
-    "๐Ÿก", "๐Ÿฆˆ", "๐Ÿ™", "๐Ÿš", "๐Ÿชธ", "๐Ÿชผ", "๐Ÿฆ€", "๐Ÿฆž", "๐Ÿฆ", "๐Ÿฆ‘", "๐Ÿฆช", "๐ŸŒ", "๐Ÿฆ‹", "๐Ÿ›", "๐Ÿœ", "๐Ÿ",
-    "๐Ÿชฒ", "๐Ÿž", "๐Ÿฆ—", "๐Ÿชณ", "๐Ÿ•ท", "๐Ÿ•ธ", "๐Ÿฆ‚", "๐ŸฆŸ", "๐Ÿชฐ", "๐Ÿชฑ", "๐Ÿฆ ", "๐Ÿ’", "๐ŸŒธ", "๐Ÿ’ฎ", "๐Ÿชท", "๐Ÿต",
-    "๐ŸŒน", "๐Ÿฅ€", "๐ŸŒบ", "๐ŸŒป", "๐ŸŒผ", "๐ŸŒท", "๐Ÿชป", "๐ŸŒฑ", "๐Ÿชด", "๐ŸŒฒ", "๐ŸŒณ", "๐ŸŒด", "๐ŸŒต", "๐ŸŒพ", "๐ŸŒฟ", "โ˜˜",
-    "๐Ÿ€", "๐Ÿ", "๐Ÿ‚", "๐Ÿƒ", "๐Ÿชน", "๐Ÿชบ", "๐Ÿ„", "๐Ÿ‡", "๐Ÿˆ", "๐Ÿ‰", "๐ŸŠ", "๐Ÿ‹", "๐ŸŒ", "๐Ÿ", "๐Ÿฅญ", "๐ŸŽ",
-    "๐Ÿ", "๐Ÿ", "๐Ÿ‘", "๐Ÿ’", "๐Ÿ“", "๐Ÿซ", "๐Ÿฅ", "๐Ÿ…", "๐Ÿซ’", "๐Ÿฅฅ", "๐Ÿฅ‘", "๐Ÿ†", "๐Ÿฅ”", "๐Ÿฅ•", "๐ŸŒฝ", "๐ŸŒถ",
-    "๐Ÿซ‘", "๐Ÿฅ’", "๐Ÿฅฌ", "๐Ÿฅฆ", "๐Ÿง„", "๐Ÿง…", "๐Ÿฅœ", "๐Ÿซ˜", "๐ŸŒฐ", "๐Ÿซš", "๐Ÿซ›", "๐Ÿž", "๐Ÿฅ", "๐Ÿฅ–", "๐Ÿซ“", "๐Ÿฅจ",
-    "๐Ÿฅฏ", "๐Ÿฅž", "๐Ÿง‡", "๐Ÿง€", "๐Ÿ–", "๐Ÿ—", "๐Ÿฅฉ", "๐Ÿฅ“", "๐Ÿ”", "๐ŸŸ", "๐Ÿ•", "๐ŸŒญ", "๐Ÿฅช", "๐ŸŒฎ", "๐ŸŒฏ", "๐Ÿซ”",
-    "๐Ÿฅ™", "๐Ÿง†", "๐Ÿฅš", "๐Ÿณ", "๐Ÿฅ˜", "๐Ÿฒ", "๐Ÿซ•", "๐Ÿฅฃ", "๐Ÿฅ—", "๐Ÿฟ", "๐Ÿงˆ", "๐Ÿง‚", "๐Ÿฅซ", "๐Ÿฑ", "๐Ÿ˜", "๐Ÿ™",
-    "๐Ÿš", "๐Ÿ›", "๐Ÿœ", "๐Ÿ", "๐Ÿ ", "๐Ÿข", "๐Ÿฃ", "๐Ÿค", "๐Ÿฅ", "๐Ÿฅฎ", "๐Ÿก", "๐ŸฅŸ", "๐Ÿฅ ", "๐Ÿฅก", "๐Ÿฆ", "๐Ÿง",
-    "๐Ÿจ", "๐Ÿฉ", "๐Ÿช", "๐ŸŽ‚", "๐Ÿฐ", "๐Ÿง", "๐Ÿฅง", "๐Ÿซ", "๐Ÿฌ", "๐Ÿญ", "๐Ÿฎ", "๐Ÿฏ", "๐Ÿผ", "๐Ÿฅ›", "โ˜•", "๐Ÿซ–",
-    "๐Ÿต", "๐Ÿถ",
+    "๐Ÿ˜€",
+    "๐Ÿ˜ƒ",
+    "๐Ÿ˜„",
+    "๐Ÿ˜",
+    "๐Ÿ˜†",
+    "๐Ÿ˜…",
+    "๐Ÿคฃ",
+    "๐Ÿ˜‚",
+    "๐Ÿ™‚",
+    "๐Ÿ™ƒ",
+    "๐Ÿซ ",
+    "๐Ÿ˜‰",
+    "๐Ÿ˜Š",
+    "๐Ÿ˜‡",
+    "๐Ÿฅฐ",
+    "๐Ÿ˜",
+    "๐Ÿคฉ",
+    "๐Ÿ˜˜",
+    "๐Ÿ˜—",
+    "๐Ÿ˜š",
+    "๐Ÿ˜™",
+    "๐Ÿฅฒ",
+    "๐Ÿ˜‹",
+    "๐Ÿ˜›",
+    "๐Ÿ˜œ",
+    "๐Ÿคช",
+    "๐Ÿ˜",
+    "๐Ÿค‘",
+    "๐Ÿค—",
+    "๐Ÿคญ",
+    "๐Ÿซข",
+    "๐Ÿซฃ",
+    "๐Ÿคซ",
+    "๐Ÿค”",
+    "๐Ÿซก",
+    "๐Ÿค",
+    "๐Ÿคจ",
+    "๐Ÿ˜",
+    "๐Ÿ˜‘",
+    "๐Ÿ˜ถ",
+    "๐Ÿ˜",
+    "๐Ÿ˜’",
+    "๐Ÿ™„",
+    "๐Ÿ˜ฌ",
+    "๐Ÿคฅ",
+    "๐Ÿซจ",
+    "๐Ÿ˜Œ",
+    "๐Ÿ˜”",
+    "๐Ÿ˜ช",
+    "๐Ÿคค",
+    "๐Ÿ˜ด",
+    "๐Ÿ˜ท",
+    "๐Ÿค’",
+    "๐Ÿค•",
+    "๐Ÿคข",
+    "๐Ÿคฎ",
+    "๐Ÿคง",
+    "๐Ÿฅต",
+    "๐Ÿฅถ",
+    "๐Ÿฅด",
+    "๐Ÿ˜ต",
+    "๐Ÿคฏ",
+    "๐Ÿค ",
+    "๐Ÿฅณ",
+    "๐Ÿฅธ",
+    "๐Ÿ˜Ž",
+    "๐Ÿค“",
+    "๐Ÿง",
+    "๐Ÿ˜•",
+    "๐Ÿซค",
+    "๐Ÿ˜Ÿ",
+    "๐Ÿ™",
+    "๐Ÿ˜ฎ",
+    "๐Ÿ˜ฏ",
+    "๐Ÿ˜ฒ",
+    "๐Ÿ˜ณ",
+    "๐Ÿฅบ",
+    "๐Ÿฅน",
+    "๐Ÿ˜ฆ",
+    "๐Ÿ˜ง",
+    "๐Ÿ˜จ",
+    "๐Ÿ˜ฐ",
+    "๐Ÿ˜ฅ",
+    "๐Ÿ˜ข",
+    "๐Ÿ˜ญ",
+    "๐Ÿ˜ฑ",
+    "๐Ÿ˜–",
+    "๐Ÿ˜ฃ",
+    "๐Ÿ˜ž",
+    "๐Ÿ˜“",
+    "๐Ÿ˜ฉ",
+    "๐Ÿ˜ซ",
+    "๐Ÿฅฑ",
+    "๐Ÿ˜ค",
+    "๐Ÿ˜ก",
+    "๐Ÿ˜ ",
+    "๐Ÿคฌ",
+    "๐Ÿ˜ˆ",
+    "๐Ÿ‘ฟ",
+    "๐Ÿ’€",
+    "๐Ÿ’ฉ",
+    "๐Ÿคก",
+    "๐Ÿ‘น",
+    "๐Ÿ‘บ",
+    "๐Ÿ‘ป",
+    "๐Ÿ‘ฝ",
+    "๐Ÿ‘พ",
+    "๐Ÿค–",
+    "๐Ÿ˜บ",
+    "๐Ÿ˜ธ",
+    "๐Ÿ˜น",
+    "๐Ÿ˜ป",
+    "๐Ÿ˜ผ",
+    "๐Ÿ˜ฝ",
+    "๐Ÿ™€",
+    "๐Ÿ˜ฟ",
+    "๐Ÿ˜พ",
+    "๐Ÿ™ˆ",
+    "๐Ÿ™‰",
+    "๐Ÿ™Š",
+    "๐Ÿ’˜",
+    "๐Ÿ’",
+    "๐Ÿ’–",
+    "๐Ÿ’—",
+    "๐Ÿ’“",
+    "๐Ÿ’ž",
+    "๐Ÿ’•",
+    "๐Ÿ’”",
+    "๐Ÿฉท",
+    "๐Ÿงก",
+    "๐Ÿ’›",
+    "๐Ÿ’š",
+    "๐Ÿ’™",
+    "๐Ÿฉต",
+    "๐Ÿ’œ",
+    "๐ŸคŽ",
+    "๐Ÿ–ค",
+    "๐Ÿฉถ",
+    "๐Ÿค",
+    "๐Ÿ’‹",
+    "๐Ÿ’ฏ",
+    "๐Ÿ’ข",
+    "๐Ÿ’ฅ",
+    "๐Ÿ’ซ",
+    "๐Ÿ’ฆ",
+    "๐Ÿ’จ",
+    "๐Ÿ’ฌ",
+    "๐Ÿ—จ",
+    "๐Ÿ—ฏ",
+    "๐Ÿ’ญ",
+    "๐Ÿ’ค",
+    "๐Ÿ‘‹",
+    "๐Ÿคš",
+    "โœ‹",
+    "๐Ÿ––",
+    "๐Ÿซฑ",
+    "๐Ÿซฒ",
+    "๐Ÿซณ",
+    "๐Ÿซด",
+    "๐Ÿซท",
+    "๐Ÿซธ",
+    "๐Ÿ‘Œ",
+    "๐ŸคŒ",
+    "๐Ÿค",
+    "๐Ÿคž",
+    "๐Ÿซฐ",
+    "๐ŸคŸ",
+    "๐Ÿค˜",
+    "๐Ÿค™",
+    "๐Ÿ‘ˆ",
+    "๐Ÿ‘‰",
+    "๐Ÿ‘†",
+    "๐Ÿ–•",
+    "๐Ÿ‘‡",
+    "๐Ÿซต",
+    "๐Ÿ‘",
+    "๐Ÿ‘Ž",
+    "โœŠ",
+    "๐Ÿ‘Š",
+    "๐Ÿค›",
+    "๐Ÿคœ",
+    "๐Ÿ‘",
+    "๐Ÿ™Œ",
+    "๐Ÿซถ",
+    "๐Ÿ‘",
+    "๐Ÿคฒ",
+    "๐Ÿค",
+    "๐Ÿ™",
+    "๐Ÿ’…",
+    "๐Ÿคณ",
+    "๐Ÿ’ช",
+    "๐Ÿฆพ",
+    "๐Ÿฆฟ",
+    "๐Ÿฆต",
+    "๐Ÿฆถ",
+    "๐Ÿ‘‚",
+    "๐Ÿฆป",
+    "๐Ÿ‘ƒ",
+    "๐Ÿง ",
+    "๐Ÿซ€",
+    "๐Ÿซ",
+    "๐Ÿฆท",
+    "๐Ÿฆด",
+    "๐Ÿ‘€",
+    "๐Ÿ‘",
+    "๐Ÿ‘…",
+    "๐Ÿ‘„",
+    "๐Ÿซฆ",
+    "๐Ÿ‘ถ",
+    "๐Ÿง’",
+    "๐Ÿ‘ฆ",
+    "๐Ÿ‘ง",
+    "๐Ÿง‘",
+    "๐Ÿ‘ฑ",
+    "๐Ÿ‘จ",
+    "๐Ÿง”",
+    "๐Ÿ‘ฉ",
+    "๐Ÿง“",
+    "๐Ÿ‘ด",
+    "๐Ÿ‘ต",
+    "๐Ÿ™",
+    "๐Ÿ™Ž",
+    "๐Ÿ™…",
+    "๐Ÿ™†",
+    "๐Ÿ’",
+    "๐Ÿ™‹",
+    "๐Ÿง",
+    "๐Ÿ™‡",
+    "๐Ÿคฆ",
+    "๐Ÿคท",
+    "๐Ÿ‘ฎ",
+    "๐Ÿ’‚",
+    "๐Ÿฅท",
+    "๐Ÿ‘ท",
+    "๐Ÿซ…",
+    "๐Ÿคด",
+    "๐Ÿ‘ธ",
+    "๐Ÿ‘ณ",
+    "๐Ÿ‘ฒ",
+    "๐Ÿง•",
+    "๐Ÿคต",
+    "๐Ÿ‘ฐ",
+    "๐Ÿคฐ",
+    "๐Ÿซƒ",
+    "๐Ÿซ„",
+    "๐Ÿคฑ",
+    "๐Ÿ‘ผ",
+    "๐ŸŽ…",
+    "๐Ÿคถ",
+    "๐Ÿฆธ",
+    "๐Ÿฆน",
+    "๐Ÿง™",
+    "๐Ÿงš",
+    "๐Ÿง›",
+    "๐Ÿงœ",
+    "๐Ÿง",
+    "๐Ÿงž",
+    "๐ŸงŸ",
+    "๐ŸงŒ",
+    "๐Ÿ’†",
+    "๐Ÿ’‡",
+    "๐Ÿšถ",
+    "๐Ÿง",
+    "๐ŸงŽ",
+    "๐Ÿƒ",
+    "๐Ÿ’ƒ",
+    "๐Ÿ•บ",
+    "๐Ÿ•ด",
+    "๐Ÿ‘ฏ",
+    "๐Ÿง–",
+    "๐Ÿง—",
+    "๐Ÿคบ",
+    "๐Ÿ‡",
+    "โ›ท",
+    "๐Ÿ‚",
+    "๐ŸŒ",
+    "๐Ÿ„",
+    "๐Ÿšฃ",
+    "๐ŸŠ",
+    "โ›น",
+    "๐Ÿ‹",
+    "๐Ÿšด",
+    "๐Ÿšต",
+    "๐Ÿคธ",
+    "๐Ÿคผ",
+    "๐Ÿคฝ",
+    "๐Ÿคพ",
+    "๐Ÿคน",
+    "๐Ÿง˜",
+    "๐Ÿ›€",
+    "๐Ÿ›Œ",
+    "๐Ÿ‘ญ",
+    "๐Ÿ‘ซ",
+    "๐Ÿ‘ฌ",
+    "๐Ÿ’",
+    "๐Ÿ’‘",
+    "๐Ÿ—ฃ",
+    "๐Ÿ‘ค",
+    "๐Ÿ‘ฅ",
+    "๐Ÿซ‚",
+    "๐Ÿ‘ช",
+    "๐Ÿ‘ฃ",
+    "๐Ÿต",
+    "๐Ÿ’",
+    "๐Ÿฆ",
+    "๐Ÿฆง",
+    "๐Ÿถ",
+    "๐Ÿ•",
+    "๐Ÿฆฎ",
+    "๐Ÿฉ",
+    "๐Ÿบ",
+    "๐ŸฆŠ",
+    "๐Ÿฆ",
+    "๐Ÿฑ",
+    "๐Ÿˆ",
+    "๐Ÿฆ",
+    "๐Ÿฏ",
+    "๐Ÿ…",
+    "๐Ÿ†",
+    "๐Ÿด",
+    "๐ŸซŽ",
+    "๐Ÿซ",
+    "๐ŸŽ",
+    "๐Ÿฆ„",
+    "๐Ÿฆ“",
+    "๐ŸฆŒ",
+    "๐Ÿฆฌ",
+    "๐Ÿฎ",
+    "๐Ÿ‚",
+    "๐Ÿƒ",
+    "๐Ÿ„",
+    "๐Ÿท",
+    "๐Ÿ–",
+    "๐Ÿ—",
+    "๐Ÿฝ",
+    "๐Ÿ",
+    "๐Ÿ‘",
+    "๐Ÿ",
+    "๐Ÿช",
+    "๐Ÿซ",
+    "๐Ÿฆ™",
+    "๐Ÿฆ’",
+    "๐Ÿ˜",
+    "๐Ÿฆฃ",
+    "๐Ÿฆ",
+    "๐Ÿฆ›",
+    "๐Ÿญ",
+    "๐Ÿ",
+    "๐Ÿ€",
+    "๐Ÿน",
+    "๐Ÿฐ",
+    "๐Ÿ‡",
+    "๐Ÿฟ",
+    "๐Ÿฆซ",
+    "๐Ÿฆ”",
+    "๐Ÿฆ‡",
+    "๐Ÿป",
+    "๐Ÿจ",
+    "๐Ÿผ",
+    "๐Ÿฆฅ",
+    "๐Ÿฆฆ",
+    "๐Ÿฆจ",
+    "๐Ÿฆ˜",
+    "๐Ÿฆก",
+    "๐Ÿพ",
+    "๐Ÿฆƒ",
+    "๐Ÿ”",
+    "๐Ÿ“",
+    "๐Ÿฃ",
+    "๐Ÿค",
+    "๐Ÿฅ",
+    "๐Ÿฆ",
+    "๐Ÿง",
+    "๐Ÿ•Š",
+    "๐Ÿฆ…",
+    "๐Ÿฆ†",
+    "๐Ÿฆข",
+    "๐Ÿฆ‰",
+    "๐Ÿฆค",
+    "๐Ÿชถ",
+    "๐Ÿฆฉ",
+    "๐Ÿฆš",
+    "๐Ÿฆœ",
+    "๐Ÿชฝ",
+    "๐Ÿชฟ",
+    "๐Ÿธ",
+    "๐ŸŠ",
+    "๐Ÿข",
+    "๐ŸฆŽ",
+    "๐Ÿ",
+    "๐Ÿฒ",
+    "๐Ÿ‰",
+    "๐Ÿฆ•",
+    "๐Ÿฆ–",
+    "๐Ÿณ",
+    "๐Ÿ‹",
+    "๐Ÿฌ",
+    "๐Ÿฆญ",
+    "๐ŸŸ",
+    "๐Ÿ ",
+    "๐Ÿก",
+    "๐Ÿฆˆ",
+    "๐Ÿ™",
+    "๐Ÿš",
+    "๐Ÿชธ",
+    "๐Ÿชผ",
+    "๐Ÿฆ€",
+    "๐Ÿฆž",
+    "๐Ÿฆ",
+    "๐Ÿฆ‘",
+    "๐Ÿฆช",
+    "๐ŸŒ",
+    "๐Ÿฆ‹",
+    "๐Ÿ›",
+    "๐Ÿœ",
+    "๐Ÿ",
+    "๐Ÿชฒ",
+    "๐Ÿž",
+    "๐Ÿฆ—",
+    "๐Ÿชณ",
+    "๐Ÿ•ท",
+    "๐Ÿ•ธ",
+    "๐Ÿฆ‚",
+    "๐ŸฆŸ",
+    "๐Ÿชฐ",
+    "๐Ÿชฑ",
+    "๐Ÿฆ ",
+    "๐Ÿ’",
+    "๐ŸŒธ",
+    "๐Ÿ’ฎ",
+    "๐Ÿชท",
+    "๐Ÿต",
+    "๐ŸŒน",
+    "๐Ÿฅ€",
+    "๐ŸŒบ",
+    "๐ŸŒป",
+    "๐ŸŒผ",
+    "๐ŸŒท",
+    "๐Ÿชป",
+    "๐ŸŒฑ",
+    "๐Ÿชด",
+    "๐ŸŒฒ",
+    "๐ŸŒณ",
+    "๐ŸŒด",
+    "๐ŸŒต",
+    "๐ŸŒพ",
+    "๐ŸŒฟ",
+    "โ˜˜",
+    "๐Ÿ€",
+    "๐Ÿ",
+    "๐Ÿ‚",
+    "๐Ÿƒ",
+    "๐Ÿชน",
+    "๐Ÿชบ",
+    "๐Ÿ„",
+    "๐Ÿ‡",
+    "๐Ÿˆ",
+    "๐Ÿ‰",
+    "๐ŸŠ",
+    "๐Ÿ‹",
+    "๐ŸŒ",
+    "๐Ÿ",
+    "๐Ÿฅญ",
+    "๐ŸŽ",
+    "๐Ÿ",
+    "๐Ÿ",
+    "๐Ÿ‘",
+    "๐Ÿ’",
+    "๐Ÿ“",
+    "๐Ÿซ",
+    "๐Ÿฅ",
+    "๐Ÿ…",
+    "๐Ÿซ’",
+    "๐Ÿฅฅ",
+    "๐Ÿฅ‘",
+    "๐Ÿ†",
+    "๐Ÿฅ”",
+    "๐Ÿฅ•",
+    "๐ŸŒฝ",
+    "๐ŸŒถ",
+    "๐Ÿซ‘",
+    "๐Ÿฅ’",
+    "๐Ÿฅฌ",
+    "๐Ÿฅฆ",
+    "๐Ÿง„",
+    "๐Ÿง…",
+    "๐Ÿฅœ",
+    "๐Ÿซ˜",
+    "๐ŸŒฐ",
+    "๐Ÿซš",
+    "๐Ÿซ›",
+    "๐Ÿž",
+    "๐Ÿฅ",
+    "๐Ÿฅ–",
+    "๐Ÿซ“",
+    "๐Ÿฅจ",
+    "๐Ÿฅฏ",
+    "๐Ÿฅž",
+    "๐Ÿง‡",
+    "๐Ÿง€",
+    "๐Ÿ–",
+    "๐Ÿ—",
+    "๐Ÿฅฉ",
+    "๐Ÿฅ“",
+    "๐Ÿ”",
+    "๐ŸŸ",
+    "๐Ÿ•",
+    "๐ŸŒญ",
+    "๐Ÿฅช",
+    "๐ŸŒฎ",
+    "๐ŸŒฏ",
+    "๐Ÿซ”",
+    "๐Ÿฅ™",
+    "๐Ÿง†",
+    "๐Ÿฅš",
+    "๐Ÿณ",
+    "๐Ÿฅ˜",
+    "๐Ÿฒ",
+    "๐Ÿซ•",
+    "๐Ÿฅฃ",
+    "๐Ÿฅ—",
+    "๐Ÿฟ",
+    "๐Ÿงˆ",
+    "๐Ÿง‚",
+    "๐Ÿฅซ",
+    "๐Ÿฑ",
+    "๐Ÿ˜",
+    "๐Ÿ™",
+    "๐Ÿš",
+    "๐Ÿ›",
+    "๐Ÿœ",
+    "๐Ÿ",
+    "๐Ÿ ",
+    "๐Ÿข",
+    "๐Ÿฃ",
+    "๐Ÿค",
+    "๐Ÿฅ",
+    "๐Ÿฅฎ",
+    "๐Ÿก",
+    "๐ŸฅŸ",
+    "๐Ÿฅ ",
+    "๐Ÿฅก",
+    "๐Ÿฆ",
+    "๐Ÿง",
+    "๐Ÿจ",
+    "๐Ÿฉ",
+    "๐Ÿช",
+    "๐ŸŽ‚",
+    "๐Ÿฐ",
+    "๐Ÿง",
+    "๐Ÿฅง",
+    "๐Ÿซ",
+    "๐Ÿฌ",
+    "๐Ÿญ",
+    "๐Ÿฎ",
+    "๐Ÿฏ",
+    "๐Ÿผ",
+    "๐Ÿฅ›",
+    "โ˜•",
+    "๐Ÿซ–",
+    "๐Ÿต",
+    "๐Ÿถ",
+    "\u{01f3f3}\u{fe0f}\u{200d}\u{26a7}\u{fe0f}",
+    "\u{01f44d}\u{01f3fe}",
 ];