From f12cedd20a10c96c7b746d1892ac15775162ff34 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Thu, 29 Aug 2019 10:05:46 +0200 Subject: [PATCH 01/82] Initial commit --- pkgs/characters/README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 pkgs/characters/README.md diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md new file mode 100644 index 00000000..14d569c5 --- /dev/null +++ b/pkgs/characters/README.md @@ -0,0 +1,2 @@ +# characters +A package for characters represented as unicode extended grapheme clusters From 931f92cb4463197eb7815b897b1eb09244030787 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Thu, 29 Aug 2019 11:20:35 +0200 Subject: [PATCH 02/82] Add travis (dart-lang/characters#2) * Create .travis.yml * Update README.md --- pkgs/characters/.travis.yml | 4 ++++ pkgs/characters/README.md | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 pkgs/characters/.travis.yml diff --git a/pkgs/characters/.travis.yml b/pkgs/characters/.travis.yml new file mode 100644 index 00000000..850bb90e --- /dev/null +++ b/pkgs/characters/.travis.yml @@ -0,0 +1,4 @@ +language: dart +dart_task: +- dartanalyzer +- dartfmt diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 14d569c5..40457711 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,2 +1,4 @@ # characters +[![Build Status](https://travis-ci.org/dart-lang/characters.svg?branch=master)](https://travis-ci.org/dart-lang/characters) + A package for characters represented as unicode extended grapheme clusters From b3a04b0f8c5806e5049d07d017e3b24823ff1023 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Thu, 29 Aug 2019 11:21:32 +0200 Subject: [PATCH 03/82] Repo config (dart-lang/characters#1) --- pkgs/characters/AUTHORS | 6 ++++++ pkgs/characters/CHANGELOG.md | 5 +++++ pkgs/characters/LICENSE | 26 ++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 pkgs/characters/AUTHORS create mode 100644 pkgs/characters/CHANGELOG.md create mode 100644 pkgs/characters/LICENSE diff --git a/pkgs/characters/AUTHORS b/pkgs/characters/AUTHORS new file mode 100644 index 00000000..846e4a15 --- /dev/null +++ b/pkgs/characters/AUTHORS @@ -0,0 +1,6 @@ +# Below is a list of people and organizations that have contributed +# to the Dart project. Names should be added to the list like so: +# +# Name/Organization + +Google LLC diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md new file mode 100644 index 00000000..48a2bb32 --- /dev/null +++ b/pkgs/characters/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## 0.1.0 + +* Initial release \ No newline at end of file diff --git a/pkgs/characters/LICENSE b/pkgs/characters/LICENSE new file mode 100644 index 00000000..f75d7c23 --- /dev/null +++ b/pkgs/characters/LICENSE @@ -0,0 +1,26 @@ +Copyright 2019, the Dart project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From d0b408ceb166d1a2b6e09f36b009bea3cde9f3fa Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Tue, 3 Sep 2019 11:47:46 +0200 Subject: [PATCH 04/82] Add initial implementation. (dart-lang/characters#3) * Initial implementation. --- pkgs/characters/.gitignore | 3 + pkgs/characters/.travis.yml | 10 + pkgs/characters/README.md | 9 +- pkgs/characters/UNICODE_LICENSE.txt | 33 + pkgs/characters/lib/characters.dart | 8 + pkgs/characters/lib/src/characters.dart | 376 ++ pkgs/characters/lib/src/characters_impl.dart | 621 +++ .../lib/src/grapheme_clusters/breaks.dart | 379 ++ .../lib/src/grapheme_clusters/constants.dart | 65 + .../lib/src/grapheme_clusters/table.dart | 349 ++ pkgs/characters/pubspec.yaml | 6 + pkgs/characters/test/characters_test.dart | 445 ++ pkgs/characters/test/src/text_samples.dart | 1712 +++++++ .../test/src/unicode_grapheme_tests.dart | 4258 +++++++++++++++++ pkgs/characters/test/src/unicode_tests.dart | 35 + pkgs/characters/test/src/various_tests.dart | 14 + 16 files changed, 8321 insertions(+), 2 deletions(-) create mode 100644 pkgs/characters/.gitignore create mode 100644 pkgs/characters/UNICODE_LICENSE.txt create mode 100644 pkgs/characters/lib/characters.dart create mode 100644 pkgs/characters/lib/src/characters.dart create mode 100644 pkgs/characters/lib/src/characters_impl.dart create mode 100644 pkgs/characters/lib/src/grapheme_clusters/breaks.dart create mode 100644 pkgs/characters/lib/src/grapheme_clusters/constants.dart create mode 100644 pkgs/characters/lib/src/grapheme_clusters/table.dart create mode 100644 pkgs/characters/pubspec.yaml create mode 100644 pkgs/characters/test/characters_test.dart create mode 100644 pkgs/characters/test/src/text_samples.dart create mode 100644 pkgs/characters/test/src/unicode_grapheme_tests.dart create mode 100644 pkgs/characters/test/src/unicode_tests.dart create mode 100644 pkgs/characters/test/src/various_tests.dart diff --git a/pkgs/characters/.gitignore b/pkgs/characters/.gitignore new file mode 100644 index 00000000..49ce72d7 --- /dev/null +++ b/pkgs/characters/.gitignore @@ -0,0 +1,3 @@ +.dart_tool/ +.packages +pubspec.lock diff --git a/pkgs/characters/.travis.yml b/pkgs/characters/.travis.yml index 850bb90e..5ed3b1d8 100644 --- a/pkgs/characters/.travis.yml +++ b/pkgs/characters/.travis.yml @@ -1,4 +1,14 @@ language: dart +dart: +- dev +- 2.4.0 +# Only building master means that we don't run two builds for each pull request. dart_task: +- test: --platform vm,chrome - dartanalyzer - dartfmt +branches: + only: [master] +cache: + directories: + - $HOME/.pub-cache diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 40457711..83013521 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,4 +1,9 @@ -# characters [![Build Status](https://travis-ci.org/dart-lang/characters.svg?branch=master)](https://travis-ci.org/dart-lang/characters) -A package for characters represented as unicode extended grapheme clusters +`Characters` are strings viewed as sequences of *user-perceived character*s, +also know as [Unicode (extended) grapheme clusters](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries). + +The `Characters` class allows access to the individual characters of a string, +and a way to navigate back and forth between them. +It also has a set of utility functions for inspecting and modifying strings +without breaking up graphemes clusters. diff --git a/pkgs/characters/UNICODE_LICENSE.txt b/pkgs/characters/UNICODE_LICENSE.txt new file mode 100644 index 00000000..b8eac400 --- /dev/null +++ b/pkgs/characters/UNICODE_LICENSE.txt @@ -0,0 +1,33 @@ +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2018 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. diff --git a/pkgs/characters/lib/characters.dart b/pkgs/characters/lib/characters.dart new file mode 100644 index 00000000..73dce479 --- /dev/null +++ b/pkgs/characters/lib/characters.dart @@ -0,0 +1,8 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// String operations based on characters (Unicode grapheme clusters). +library characters; + +export "src/characters.dart"; diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart new file mode 100644 index 00000000..40ddbd28 --- /dev/null +++ b/pkgs/characters/lib/src/characters.dart @@ -0,0 +1,376 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:collection"; + +import "grapheme_clusters/constants.dart"; +import "grapheme_clusters/breaks.dart"; + +part "characters_impl.dart"; + +/// The characters of a string. +/// +/// A character is a Unicode Grapheme cluster represented +/// by a substring of the original string. +/// The `Characters` class is an [Iterable] of those strings. +/// However, unlike most iterables, many of the operations are +/// *eager*. Since the underlying string is known in its entirety, +/// and is known not to change, operations which select a subset of +/// the elements can be computed eagerly, and in that case the +/// operation returns a new `Characters` object. +/// +/// A `Characters` also supports operations based on +/// string indices into the underlying string. +/// +/// Inspection operations like [indexOf] or [lastIndexAfter] +/// returns such indices which are guranteed to be at character +/// boundaries. +/// Most such operations use the index as starting point, +/// but will still only work on entire characters. +/// A few, like [substring] and [replaceSubstring], work directly +/// on the underlying string, independently of character +/// boundaries. +abstract class Characters implements Iterable { + /// Creates a [Characters] allowing iteration of + /// the characters of [string]. + factory Characters(String string) = _Characters; + + /// The string to iterate over. + String get string; + + /// A specialized character iterator. + /// + /// Allows iterating the characters of [string] as a plain iterator, + // as well as controlling the iteration in more detail. + Character get iterator; + + /// Whether [Character] is an element of this sequence of + /// characters. + /// + /// Returns false if [Character] is not a string containing + /// a single character, + /// because then it is not a single element of this [Iterable] + /// of characters. + bool contains(Object Character); + + /// Whether this sequence of characters contains [other] + /// as a subsequence. + bool containsAll(Characters other); + + /// Whether [other] is an initial subsequence of this sequence + /// of characters. + /// + /// If [startIndex] is provided, then checks whether + /// [other] is an initial subsequence of the characters + /// starting at the character boundary [startIndex]. + /// + /// Returns `true` if [other] is a sub-sequence of this sequence of + /// characters startings at the character boundary [startIndex]. + /// Returns `false` if [startIndex] is not a character boundary, + /// or if [other] does not occur at that position. + bool startsWith(Characters other, [int startIndex = 0]); + + /// Whether [other] is an trailing subsequence of this sequence + /// of characters. + /// + /// If [endIndex] is provided, then checks whether + /// [other] is a trailing subsequence of the characters + /// starting at the character boundary [endIndex]. + /// + /// Returns `true` if [other] is a sub-sequence of this sequence of + /// characters startings at the character boundary [endIndex]. + /// Returns `false` if [endIndex] is not a character boundary, + /// or if [other] does not occur at that position. + bool endsWith(Characters other, [int endIndex]); + + /// The string index before the first place where [other] occurs as + /// a subsequence of these characters. + /// + /// Returns the [string] index before first occurrence of the character + /// of [other] in the sequence of characters of [string]. + /// Returns a negative number if there is no such occurrence of [other]. + /// + /// If [startIndex] is supplied, returns the index after the first occurrence + /// of [other] in this which starts no earlier than [startIndex], and again + /// returns `null` if there is no such occurrence. That is, if the result + /// is non-negative, it is greater than or equal to [startIndex]. + int indexOf(Characters other, [int startIndex]); + + /// The string index after the first place [other] occurs as a subsequence of + /// these characters. + /// + /// Returns the [string] index after the first occurrence of the character + /// of [other] in the sequence of characters of [string]. + /// Returns a negative number if there is no such occurrence of [other]. + /// + /// If [startIndex] is supplied, returns the index after the first occurrence + /// of [other] in this which starts no earlier than [startIndex], and again + /// returns `null` if there is no such occurrence. That is, if the result + /// is non-negative, it is greater than or equal to [startIndex]. + int indexAfter(Characters other, [int startIndex]); + + /// The string index before the last place where [other] occurs as + /// a subsequence of these characters. + /// + /// Returns the [string] index before last occurrence of the character + /// of [other] in the sequence of characters of [string]. + /// Returns a negative number if there is no such occurrence of [other]. + /// + /// If [startIndex] is supplied, returns the before after the first occurrence + /// of [other] in this which starts no later than [startIndex], and again + /// returns `null` if there is no such occurrence. That is the result + /// is less than or equal to [startIndex]. + int lastIndexOf(Characters other, [int startIndex]); + + /// The string index after the last place where [other] occurs as + /// a subsequence of these characters. + /// + /// Returns the [string] index after the last occurrence of the character + /// of [other] in the sequence of characters of [string]. + /// Returns a negative number if there is no such occurrence of [other]. + /// + /// If [startIndex] is supplied, returns the index after the last occurrence + /// of [other] in this which ends no later than [startIndex], and again + /// returns `null` if there is no such occurrence. That is the result + /// is less than or equal to [startIndex]. + int lastIndexAfter(Characters other, [int startIndex]); + + /// Eagerly selects a subset of the characters. + /// + /// Tests each character against [test], and returns the + /// characters of the concatenation of those character strings. + Characters where(bool Function(String) test); + + /// Eagerly selects all but the first [count] characters. + /// + /// If [count] is greater than [length], the count of character + /// available, then the empty sequence of characters + /// is returned. + Characters skip(int count); + + /// Eagerly selects the first [count] characters. + /// + /// If [count] is greater than [length], the count of character + /// available, then the entire sequence of characters + /// is returned. + Characters take(int count); + + /// Eagerly selects all but the last [count] characters. + /// + /// If [count] is greater than [length], the count of character + /// available, then the empty sequence of characters + /// is returned. + Characters skipLast(int count); + + /// Eagerly selects the last [count] characters. + /// + /// If [count] is greater than [length], the count of character + /// available, then the entire sequence of characters + /// is returned. + Characters takeLast(int count); + + /// Eagerly selects a range of characters. + /// + /// Both [start] and [end] are offsets of characters, + /// not indices into [string]. + /// The [start] must be non-negative and [end] must be at least + /// as large as [start]. + /// + /// If [start] is at least as great as [length], then the result + /// is an empty sequence of graphemes. + /// If [end] is greater than [length], the count of character + /// available, then it acts the same as if it was [length]. + /// + /// A call like `gc.getRange(a, b)` is equivalent to `gc.take(b).skip(a)`. + Characters getRange(int start, int end); + + /// Eagerly selects a trailing sequence of characters. + /// + /// Checks each character, from first to last, against [test], + /// until one is found whwere [test] returns `false`. + /// The characters starting with the first one + /// where [test] returns `false`, are included in the result. + /// + /// If no characters test `false`, the result is an empty sequence + /// of characters. + Characters skipWhile(bool Function(String) test); + + /// Eagerly selects a leading sequnce of characters. + /// + /// Checks each character, from first to last, against [test], + /// until one is found whwere [test] returns `false`. + /// The characters up to, but not including, the first one + /// where [test] returns `false` are included in the result. + /// + /// If no characters test `false`, the entire sequence of character + /// is returned. + Characters takeWhile(bool Function(String) test); + + /// Eagerly selects a leading sequnce of characters. + /// + /// Checks each character, from last to first, against [test], + /// until one is found whwere [test] returns `false`. + /// The characters up to and including the one with the latest index + /// where [test] returns `false` are included in the result. + /// + /// If no characters test `false`, the empty sequence of character + /// is returned. + Characters skipLastWhile(bool Function(String) test); + + /// Eagerly selects a trailing sequence of characters. + /// + /// Checks each character, from last to first, against [test], + /// until one is found whwere [test] returns `false`. + /// The characters after the one with the latest index where + /// [test] returns `false` are included in the result. + /// + /// If no characters test `false`, the entire sequence of character + /// is returned. + Characters takeLastWhile(bool Function(String) test); + + /// The characters of the concatenation of this and [other]. + /// + /// This is the characters of the concatenation of the underlying + /// strings. If there is no character break at the concatenation + /// point in the resulting string, then the result is not the concatenation + /// of the two character sequences. + /// + /// This differs from [followedBy] which provides the lazy concatenation + /// of this sequence of strings with any other sequence of strings. + Characters operator +(Characters other); + + /// The characters of [string] with [other] inserted at [index]. + /// + /// The [index] is a string can be any index into [string]. + Characters insertAt(int index, Characters other); + + /// The characters of [string] with a substring replaced by other. + Characters replaceSubstring(int startIndex, int endIndex, Characters other); + + /// The characters of a substring of [string]. + /// + /// The [startIndex] and [endIndex] must be a valid range of [string] + /// (0 ≤ `startIndex` ≤ `endIndex` ≤ `string.length`). + /// If [endIndex] is omitted, it defaults to `string.length`. + Characters substring(int startIndex, [int endIndex]); + + /// Replaces [source] with [replacement]. + /// + /// Returns a new [GrapehemeClusters] where all occurrences of the + /// [source] character sequence are replaced by [replacement], + /// unless the occurrence overlaps a prior replaced sequence. + /// + /// If [startIndex] is provided, only replace characters + /// starting no earlier than [startIndex] in [string]. + Characters replaceAll(Characters source, Characters replacement, + [int startIndex = 0]); + + /// Replaces the first [source] with [replacement]. + /// + /// Returns a new [Characters] where the first occurence of the + /// [source] character sequence, if any, is replaced by [replacement]. + /// + /// If [startIndex] is provided, replaces the first occurrence + /// of [source] starting no earlier than [startIndex] in [string], if any. + Characters replaceFirst(Characters source, Characters replacement, + [int startIndex = 0]); + + /// The characters of the lower-case version of [string]. + Characters toLowerCase(); + + /// The characters of the upper-case version of [string]. + Characters toUpperCase(); + + /// The hash code of [string]. + int get hashCode; + + /// Whether [other] to another [Characters] with the same [string]. + bool operator ==(Object other); + + /// The [string] content of these characters. + String toString(); +} + +/// Iterator over characters of a string. +/// +/// Characters are Unicode grapheme clusters represented as substrings +/// of the original string. +/// +/// The [start] and [end] indices will iterate the grapheme cluster +/// boundaries of the string while the [Character] is iterating the +/// grapheme clusters. A string with *n* grapheme clusters will have +/// *n + 1* boundaries (except when *n* is zero, then there are also +/// zero boundaries). Those boundaries can be accessed as, for example: +/// ```dart +/// Iterable graphemeClusterBoundaries(String string) sync* { +/// if (string.isEmpty) return; +/// var char = Characters(string).iterator; +/// var hasNext = false; +/// do { +/// hasNext = char.moveNext(); +/// yield char.start; +/// } while (hasNext); +/// } +/// ``` +abstract class Character implements BidirectionalIterator { + /// Creates a new character iterator iterating the character + /// of [string]. + factory Character(String string) = _Character; + + /// The beginning of the current character in the underlying string. + /// + /// This index is always at a cluster boundary unless the iterator + /// has been reset to a non-boundary index. + /// + /// If equal to [end], there is no current character, and [moveNext] + /// needs to be called first before accessing [current]. + /// This is the case at the beginning of iteration, + /// after [moveNext] has returned false, + /// or after calling [reset]. + int get start; + + /// The end of the current character in the underlying string. + /// + /// This index is always at a cluster boundary unless the iterator + /// has been reset to a non-boundary index. + /// + /// If equal to [start], there is no current character. + int get end; + + /// The code units of the current character. + List get codeUnits; + + /// The code points of the current character. + Runes get runes; + + /// Resets the iterator to the [index] position. + /// + /// There is no [current] character after a reset, + /// a call to [moveNext] is needed to find the end of the character + /// at the [index] position. + /// A `reset(0)` will reset to the beginning of the string, as for a newly + /// created iterator. + void reset(int index); + + /// Resets the iterator to the start of the string. + /// + /// The iterator will be in the same state as a newly created iterator + /// from [Characters.iterator]. + void resetStart(); + + /// Resets the iterator to the end of the string. + /// + /// The iterator will be in the same state as an iterator which has + /// performed [moveNext] until it returned false. + void resetEnd(); + + /// Creates a copy of this [Character]. + /// + /// The copy is in the exact same state as this iterator. + /// Can be used to iterate the following characters more than once + /// at the same time. To simply rewind an iterator, remember the + /// [start] or [end] position and use [reset] to reset the iterator + /// to that position. + Character copy(); +} diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart new file mode 100644 index 00000000..2369eb9d --- /dev/null +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -0,0 +1,621 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of "characters.dart"; + +/// The grapheme clusters of a string. +class _Characters extends Iterable implements Characters { + // Try to avoid allocating more empty grapheme clusters. + static const Characters _empty = const _Characters._(""); + + final String string; + + const _Characters._(this.string); + + factory _Characters(String string) => + string.isEmpty ? _empty : _Characters._(string); + + Character get iterator => _Character(string); + + String get first => string.isEmpty + ? throw StateError("No element") + : string.substring( + 0, Breaks(string, 0, string.length, stateSoTNoBreak).nextBreak()); + + String get last => string.isEmpty + ? throw StateError("No element") + : string.substring( + BackBreaks(string, string.length, 0, stateEoTNoBreak).nextBreak()); + + String get single { + if (string.isEmpty) throw StateError("No element"); + int firstEnd = + Breaks(string, 0, string.length, stateSoTNoBreak).nextBreak(); + if (firstEnd == string.length) return string; + throw StateError("Too many elements"); + } + + bool get isEmpty => string.isEmpty; + + bool get isNotEmpty => string.isNotEmpty; + + int get length { + if (string.isEmpty) return 0; + var brk = Breaks(string, 0, string.length, stateSoTNoBreak); + int length = 0; + while (brk.nextBreak() >= 0) length++; + return length; + } + + Iterable whereType() { + Iterable self = this; + if (self is Iterable) { + return self.map((x) => x); + } + return Iterable.empty(); + } + + String join([String separator = ""]) { + if (separator == "") return string; + return _explodeReplace(separator, "", 0); + } + + String lastWhere(bool test(String element), {String orElse()}) { + int cursor = string.length; + var brk = BackBreaks(string, cursor, 0, stateEoTNoBreak); + int next = 0; + while ((next = brk.nextBreak()) >= 0) { + String current = string.substring(next, cursor); + if (test(current)) return current; + cursor = next; + } + if (orElse != null) return orElse(); + throw StateError("no element"); + } + + String elementAt(int index) { + RangeError.checkNotNegative(index, "index"); + int count = 0; + if (string.isNotEmpty) { + var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + int start = 0; + int end = 0; + while ((end = breaks.nextBreak()) >= 0) { + if (count == index) return string.substring(start, end); + count++; + start = end; + } + } + throw RangeError.index(index, this, "index", null, count); + } + + bool contains(Object other) { + if (other is String) { + if (other.isEmpty) return false; + int next = Breaks(other, 0, other.length, stateSoTNoBreak).nextBreak(); + if (next != other.length) return false; + // [other] is single grapheme cluster. + return _indexOf(other, 0) >= 0; + } + return false; + } + + int indexOf(Characters other, [int startIndex]) { + int length = string.length; + if (startIndex == null) { + startIndex = 0; + } else { + RangeError.checkValidRange(startIndex, length, length, "startIndex"); + } + return _indexOf(other.string, startIndex); + } + + /// Finds first occurrence of [otherString] at grapheme cluster boundaries. + /// + /// Only finds occurrences starting at or after [startIndex]. + int _indexOf(String otherString, int startIndex) { + int otherLength = otherString.length; + if (otherLength == 0) { + return nextBreak(string, 0, string.length, startIndex); + } + int length = string.length; + while (startIndex + otherLength <= length) { + int matchIndex = string.indexOf(otherString, startIndex); + if (matchIndex < 0) return matchIndex; + if (isGraphemeClusterBoundary(string, 0, length, matchIndex) && + isGraphemeClusterBoundary( + string, 0, length, matchIndex + otherLength)) { + return matchIndex; + } + startIndex = matchIndex + 1; + } + return -1; + } + + /// Finds last occurrence of [otherString] at grapheme cluster boundaries. + /// + /// Starts searching backwards at [startIndex]. + int _lastIndexOf(String otherString, int startIndex) { + int otherLength = otherString.length; + if (otherLength == 0) { + return previousBreak(string, 0, string.length, startIndex); + } + int length = string.length; + while (startIndex >= 0) { + int matchIndex = string.lastIndexOf(otherString, startIndex); + if (matchIndex < 0) return matchIndex; + if (isGraphemeClusterBoundary(string, 0, length, matchIndex) && + isGraphemeClusterBoundary( + string, 0, length, matchIndex + otherLength)) { + return matchIndex; + } + startIndex = matchIndex - 1; + } + return -1; + } + + bool startsWith(Characters other, [int startIndex = 0]) { + int length = string.length; + RangeError.checkValueInInterval(startIndex, 0, length, "startIndex"); + String otherString = other.string; + if (otherString.isEmpty) return true; + return string.startsWith(otherString, startIndex) && + isGraphemeClusterBoundary( + string, 0, length, startIndex + otherString.length); + } + + bool endsWith(Characters other, [int endIndex]) { + int length = string.length; + if (endIndex == null) { + endIndex = length; + } else { + RangeError.checkValueInInterval(endIndex, 0, length, "endIndex"); + } + String otherString = other.string; + if (otherString.isEmpty) return true; + int otherLength = otherString.length; + int start = endIndex - otherLength; + return start >= 0 && + string.startsWith(otherString, start) && + isGraphemeClusterBoundary(string, 0, endIndex, start); + } + + Characters replaceAll(Characters pattern, Characters replacement, + [int startIndex = 0]) { + if (startIndex > 0) { + RangeError.checkValueInInterval( + startIndex, 0, string.length, "startIndex"); + } + if (pattern.string.isEmpty) { + if (string.isEmpty) return replacement; + var replacementString = replacement.string; + return Characters( + _explodeReplace(replacementString, replacementString, startIndex)); + } + int start = startIndex; + StringBuffer buffer; + int next = -1; + while ((next = this.indexOf(pattern, start)) >= 0) { + (buffer ??= StringBuffer()) + ..write(string.substring(start, next)) + ..write(replacement); + start = next + pattern.string.length; + } + if (buffer == null) return this; + buffer.write(string.substring(start)); + return Characters(buffer.toString()); + } + + // Replaces every internal grapheme cluster boundary with + // [internalReplacement] and adds [outerReplacement] at both ends + // Starts at [startIndex]. + String _explodeReplace( + String internalReplacement, String outerReplacement, int startIndex) { + var buffer = StringBuffer(string.substring(0, startIndex)); + var breaks = Breaks(string, startIndex, string.length, stateSoTNoBreak); + int index = 0; + String replacement = outerReplacement; + while ((index = breaks.nextBreak()) >= 0) { + buffer..write(replacement)..write(string.substring(startIndex, index)); + startIndex = index; + replacement = internalReplacement; + } + buffer.write(outerReplacement); + return buffer.toString(); + } + + Characters replaceFirst(Characters source, Characters replacement, + [int startIndex = 0]) { + if (startIndex != 0) { + RangeError.checkValueInInterval( + startIndex, 0, string.length, "startIndex"); + } + int index = _indexOf(source.string, startIndex); + if (index < 0) return this; + return Characters(string.replaceRange( + index, index + source.string.length, replacement.string)); + } + + bool containsAll(Characters other) { + return _indexOf(other.string, 0) >= 0; + } + + Characters skip(int count) { + RangeError.checkNotNegative(count, "count"); + if (count == 0) return this; + if (string.isNotEmpty) { + var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + int startIndex = 0; + while (count > 0) { + int index = breaks.nextBreak(); + if (index >= 0) { + count--; + startIndex = index; + } else { + return _empty; + } + } + return _Characters(string.substring(startIndex)); + } + return this; + } + + Characters take(int count) { + RangeError.checkNotNegative(count, "count"); + if (count == 0) return _empty; + if (string.isNotEmpty) { + var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + int endIndex = 0; + while (count > 0) { + int index = breaks.nextBreak(); + if (index >= 0) { + count--; + endIndex = index; + } else { + return this; + } + } + return _Characters._(string.substring(0, endIndex)); + } + return this; + } + + Characters skipWhile(bool Function(String) test) { + if (string.isNotEmpty) { + var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + int index = 0; + int startIndex = 0; + while ((index = breaks.nextBreak()) >= 0) { + if (!test(string.substring(startIndex, index))) { + if (startIndex == 0) return this; + return _Characters._(string.substring(startIndex)); + } + startIndex = index; + } + } + return _empty; + } + + Characters takeWhile(bool Function(String) test) { + if (string.isNotEmpty) { + var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + int index = 0; + int endIndex = 0; + while ((index = breaks.nextBreak()) >= 0) { + if (!test(string.substring(endIndex, index))) { + if (endIndex == 0) return _empty; + return _Characters._(string.substring(0, endIndex)); + } + endIndex = index; + } + } + return this; + } + + Characters where(bool Function(String) test) => + _Characters(super.where(test).join()); + + Characters operator +(Characters other) => _Characters(string + other.string); + + Characters getRange(int start, int end) { + RangeError.checkNotNegative(start, "start"); + if (end < start) throw RangeError.range(end, start, null, "end"); + if (string.isEmpty) return this; + var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + int startIndex = 0; + int endIndex = string.length; + end -= start; + while (start > 0) { + int index = breaks.nextBreak(); + if (index >= 0) { + startIndex = index; + start--; + } else { + return _empty; + } + } + while (end > 0) { + int index = breaks.nextBreak(); + if (index >= 0) { + endIndex = index; + end--; + } else { + if (startIndex == 0) return this; + return _Characters(string.substring(startIndex)); + } + } + if (startIndex == 0 && endIndex == string.length) return this; + return _Characters(string.substring(startIndex, endIndex)); + } + + Characters skipLast(int count) { + RangeError.checkNotNegative(count, "count"); + if (count == 0) return this; + if (string.isNotEmpty) { + var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); + int endIndex = string.length; + while (count > 0) { + int index = breaks.nextBreak(); + if (index >= 0) { + endIndex = index; + count--; + } else { + return _empty; + } + } + return _Characters(string.substring(0, endIndex)); + } + return _empty; + } + + Characters skipLastWhile(bool Function(String) test) { + if (string.isNotEmpty) { + var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); + int index = 0; + int end = string.length; + while ((index = breaks.nextBreak()) >= 0) { + if (!test(string.substring(index, end))) { + if (end == string.length) return this; + return _Characters(string.substring(0, end)); + } + end = index; + } + } + return _empty; + } + + Characters takeLast(int count) { + RangeError.checkNotNegative(count, "count"); + if (count == 0) return this; + if (string.isNotEmpty) { + var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); + int startIndex = string.length; + while (count > 0) { + int index = breaks.nextBreak(); + if (index >= 0) { + startIndex = index; + count--; + } else { + return this; + } + } + return _Characters(string.substring(startIndex)); + } + return this; + } + + Characters takeLastWhile(bool Function(String) test) { + if (string.isNotEmpty) { + var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); + int index = 0; + int start = string.length; + while ((index = breaks.nextBreak()) >= 0) { + if (!test(string.substring(index, start))) { + return _Characters(string.substring(start)); + } + start = index; + } + } + return this; + } + + int indexAfter(Characters other, [int startIndex]) { + int length = string.length; + String otherString = other.string; + int otherLength = otherString.length; + if (startIndex == null) { + startIndex = 0; + } else { + RangeError.checkValueInInterval(startIndex, 0, length, "startIndex"); + } + if (otherLength > startIndex) startIndex = otherLength; + int start = _indexOf(other.string, startIndex - otherLength); + if (start < 0) return start; + return start + otherLength; + } + + Characters insertAt(int index, Characters other) { + int length = string.length; + RangeError.checkValidRange(index, length, length, "index"); + if (string.isEmpty) { + assert(index == 0); + return other; + } + return _Characters._(string.replaceRange(index, index, other.string)); + } + + int lastIndexAfter(Characters other, [int startIndex]) { + String otherString = other.string; + int otherLength = otherString.length; + if (startIndex == null) { + startIndex = string.length; + } else { + RangeError.checkValueInInterval( + startIndex, 0, string.length, "startIndex"); + } + if (otherLength > startIndex) return -1; + int start = _lastIndexOf(otherString, startIndex - otherLength); + if (start < 0) return start; + return start + otherLength; + } + + int lastIndexOf(Characters other, [int startIndex]) { + if (startIndex == null) { + startIndex = string.length; + } else { + RangeError.checkValueInInterval( + startIndex, 0, string.length, "startIndex"); + } + return _lastIndexOf(other.string, startIndex); + } + + Characters replaceSubstring(int startIndex, int endIndex, Characters other) { + RangeError.checkValidRange( + startIndex, endIndex, string.length, "startIndex", "endIndex"); + if (startIndex == 0 && endIndex == string.length) return other; + return _Characters._( + string.replaceRange(startIndex, endIndex, other.string)); + } + + Characters substring(int startIndex, [int endIndex]) { + endIndex = RangeError.checkValidRange( + startIndex, endIndex, string.length, "startIndex", "endIndex"); + return _Characters(string.substring(startIndex, endIndex)); + } + + Characters toLowerCase() => _Characters(string.toLowerCase()); + + Characters toUpperCase() => _Characters(string.toUpperCase()); + + bool operator ==(Object other) => + other is Characters && string == other.string; + + int get hashCode => string.hashCode; + + String toString() => string; +} + +class _Character implements Character { + static const int _directionForward = 0; + static const int _directionBackward = 0x04; + static const int _directionMask = 0x04; + static const int _cursorDeltaMask = 0x03; + + final String _string; + int _start; + int _end; + // Encodes current state, + // whether we are moving forwards or backwards ([_directionMask]), + // and how far ahead the cursor is from the start/end ([_cursorDeltaMask]). + int _state; + // The [current] value is created lazily and cached to avoid repeated + // or unnecessary string allocation. + String _currentCache; + + _Character(String string) : this._(string, 0, 0, stateSoTNoBreak); + _Character._(this._string, this._start, this._end, this._state); + + int get start => _start; + int get end => _end; + + String get current => _currentCache ??= + (_start == _end ? null : _string.substring(_start, _end)); + + bool moveNext() { + int state = _state; + int cursor = _end; + if (state & _directionMask != _directionForward) { + state = stateSoTNoBreak; + } else { + cursor += state & _cursorDeltaMask; + } + var breaks = Breaks(_string, cursor, _string.length, state); + var next = breaks.nextBreak(); + _currentCache = null; + _start = _end; + if (next >= 0) { + _end = next; + _state = + (breaks.state & 0xF0) | _directionForward | (breaks.cursor - next); + return true; + } + _state = stateEoTNoBreak | _directionBackward; + return false; + } + + bool movePrevious() { + int state = _state; + int cursor = _start; + if (state & _directionMask == _directionForward) { + state = stateEoTNoBreak; + } else { + cursor -= state & _cursorDeltaMask; + } + var breaks = BackBreaks(_string, cursor, 0, state); + var next = breaks.nextBreak(); + _currentCache = null; + _end = _start; + if (next >= 0) { + _start = next; + _state = + (breaks.state & 0xF0) | _directionBackward | (next - breaks.cursor); + return true; + } + _state = stateSoTNoBreak | _directionForward; + return false; + } + + List get codeUnits => _CodeUnits(_string, _start, _end); + + Runes get runes => Runes(current); + + void reset(int index) { + RangeError.checkValueInInterval(index, 0, _string.length, "index"); + _reset(index); + } + + void resetStart() { + _reset(0); + } + + void resetEnd() { + _state = stateEoTNoBreak | _directionBackward; + _currentCache = null; + _start = _end = _string.length; + } + + void _reset(int index) { + _state = stateSoTNoBreak | _directionForward; + _currentCache = null; + _start = _end = index; + } + + Character copy() { + return _Character._(_string, _start, _end, _state); + } +} + +class _CodeUnits extends ListBase { + final String _string; + final int _start; + final int _end; + + _CodeUnits(this._string, this._start, this._end); + + int get length => _end - _start; + + int operator [](int index) { + RangeError.checkValidIndex(index, this, "index", _end - _start); + return _string.codeUnitAt(_start + index); + } + + void operator []=(int index, int value) { + throw UnsupportedError("Cannot modify an unmodifiable list"); + } + + @override + void set length(int newLength) { + throw UnsupportedError("Cannot modify an unmodifiable list"); + } +} diff --git a/pkgs/characters/lib/src/grapheme_clusters/breaks.dart b/pkgs/characters/lib/src/grapheme_clusters/breaks.dart new file mode 100644 index 00000000..1460e050 --- /dev/null +++ b/pkgs/characters/lib/src/grapheme_clusters/breaks.dart @@ -0,0 +1,379 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "constants.dart"; +import "table.dart"; + +/// Iterates grapheme cluster breaks of a string. +/// +/// Iterates the grapheme cluster breaks of the substring of +/// [base] from [cursor] to [end]. +/// +/// To iterate a substring, use: +/// ```dart +/// var breaks = Breaks(string, start, end, stateSoT); +/// int brk = 0; +/// while((brk = breaks.nextBreak) >= 0) { +/// print("Break at index $brk"); +/// } +/// ``` +/// If you use [stateSoTNoBreak] instead of [stateSoT], the +/// initial break between the start-of-text and the first grapheme +/// is suppressed. +class Breaks { + /// Text being iterated. + final String base; + + /// end of substring of [base] being iterated. + final int end; + + /// Position of the first yet-unprocessed code point. + int cursor; + + /// Current state based on code points processed so far. + int state; + + Breaks(this.base, this.cursor, this.end, this.state); + + /// Creates a copy of the current iteration, at the exact same state. + Breaks copy() => Breaks(base, cursor, end, state); + + /// The index of the next grapheme cluster break in last-to-first index order. + /// + /// Returns a negative number if there are no further breaks, + /// which means that [cursor] has reached [end]. + int nextBreak() { + while (cursor < end) { + int breakAt = cursor; + int char = base.codeUnitAt(cursor++); + if (char & 0xFC00 != 0xD800) { + state = move(state, low(char)); + if (state & stateNoBreak == 0) { + return breakAt; + } + continue; + } + // The category of an unpaired lead surrogate is Control. + int category = categoryControl; + if (cursor < end) { + int nextChar = base.codeUnitAt(cursor); + if (nextChar & 0xFC00 == 0xDC00) { + category = high(char, nextChar); + cursor++; + } + } + state = move(state, category); + if (state & stateNoBreak == 0) { + return breakAt; + } + } + state = move(state, categoryEoT); + if (state & stateNoBreak == 0) return cursor; + return -1; + } +} + +/// Iterates grapheme cluster breaks backwards. +/// +/// Given a substring of a [base] string from [start] to [cursor], +/// iterates the grapheme cluster breaks from [cursor] to [start]. +/// +/// To iterate a substring, do +/// ```dart +/// var breaks = BackBreaks(string, start, end, stateEoT); +/// int brk = 0; +/// while ((brk = breaks.nextBreak()) >= 0) { +/// print("Break at index $brk"); +/// } +/// ``` +/// If the initial [state] is [stateEoTNoBreak] instead of [stateEoT], +/// the initial break between the last grapheme and the end-of-text +/// is suppressed. +class BackBreaks { + /// Text being iterated. + final String base; + + /// Start of substring of [base] being iterated. + final int start; + + /// Position after the last yet-unprocessed code point. + int cursor; + + /// Current state based on code points processed so far. + int state; + BackBreaks(this.base, this.cursor, this.start, this.state); + + BackBreaks copy() => BackBreaks(base, cursor, start, state); + + /// The index of the next grapheme cluster break in first-to-last index order. + /// + /// Returns a negative number if there are no further breaks, + /// which means that [cursor] has reached [start]. + int nextBreak() { + while (cursor > start) { + int breakAt = cursor; + int char = base.codeUnitAt(--cursor); + if (char & 0xFC00 != 0xDC00) { + state = moveBack(state, low(char)); + if (state >= stateLookaheadMin) state = _lookAhead(state); + if (state & stateNoBreak == 0) { + return breakAt; + } + continue; + } + // The category of an unpaired tail surrogate is Control. + int category = categoryControl; + if (cursor >= start) { + int prevChar = base.codeUnitAt(cursor - 1); + if (prevChar & 0xFC00 == 0xD800) { + category = high(prevChar, char); + cursor -= 1; + } + } + state = moveBack(state, category); + if (state >= stateLookaheadMin) state = _lookAhead(state); + if (state & stateNoBreak == 0) { + return breakAt; + } + } + state = moveBack(state, categoryEoT); + if (state >= stateLookaheadMin) state = _lookAhead(state); + if (state & stateNoBreak == 0) return cursor; + return -1; + } + + int _lookAhead(int state) => lookAhead(base, start, cursor, state); +} + +/// Request a lookahead for [state]. +/// +/// The [state] was output by the backwards grapheme cluster state +/// machine and is above [stateLookaheadMin]. +/// The lookahead looks at the [base] string from just before [cursor] +/// back to [start], to detect which actual state to enter. +int lookAhead(String base, int start, int cursor, int state) { + assert(state >= stateLookaheadMin); + if (state == stateRegionalLookahead) { + return lookAheadRegional(base, start, cursor); + } + if (state == stateZWJPictographicLookahead) { + int prevPic = lookAheadPictorgraphicExtend(base, start, cursor); + if (prevPic >= 0) return stateZWJPictographic | stateNoBreak; + return stateExtend; // State for break before seeing ZWJ. + } + throw StateError("Unexpected state: ${state.toRadixString(16)}"); +} + +/// Counts preceding regional indicators. +/// +/// The look-ahead for the backwards moving grapheme cluster +/// state machine is called when two RIs are found in a row. +/// The [cursor] points to the first code unit of the former of those RIs, +/// and it preceding RIs until [start]. +/// If that count is even, there should not be a break before +/// the second of the original RIs. +/// If the count is odd, there should be a break, because that RI +/// is combined with a prior RI in the string. +int lookAheadRegional(String base, int start, int cursor) { + // Has just seen second regional indicator. + // Figure out if there are an odd or even number of preceding RIs. + // ALL REGIONAL INDICATORS ARE NON-BMP CHARACTERS. + int count = 0; + int index = cursor; + while (index - 2 >= start) { + int tail = base.codeUnitAt(index - 1); + if (tail & 0xFC00 != 0xDC00) break; + int lead = base.codeUnitAt(index - 2); + if (lead & 0xFC00 != 0xD800) break; + int category = high(lead, tail); + if (category != categoryRegionalIndicator) break; + index -= 2; + count ^= 1; + } + if (count == 0) { + return stateRegionalEven | stateNoBreak; + } else { + return stateRegionalOdd; + } +} + +/// Checks if a ZWJ+Pictographic token sequence should be broken. +/// +/// Checks whether the characters preceeding [cursor] are Pic Ext*. +/// Only the [base] string from [start] to [cursor] is checked. +/// +/// Returns the index of the Pic character if preceeded by Pic Ext*, +/// and negative if not. +int lookAheadPictorgraphicExtend(String base, int start, int cursor) { + // Has just seen ZWJ+Pictographic. Check if preceeding is Pic Ext*. + // (If so, just move cursor back to the Pic). + int index = cursor; + while (index > start) { + int char = base.codeUnitAt(--index); + int prevChar = 0; + int category = categoryControl; + if (char & 0xFC00 != 0xDC00) { + category = low(char); + } else if (index > start && + (prevChar = base.codeUnitAt(--index)) & 0xFC00 == 0xD800) { + category = high(prevChar, char); + } else { + break; + } + if (category == categoryPictographic) { + return index; + } + if (category != categoryExtend) break; + } + return -1; +} + +/// Whether there is a grapheme cluster boundary before [index] in [text]. +/// +/// This is a low-level function. There is no validation of the arguments. +/// They should satisfy `0 <= start <= index <= end <= text.length`. +bool isGraphemeClusterBoundary(String text, int start, int end, int index) { + assert(0 <= start); + assert(start <= index); + assert(index <= end); + assert(end <= text.length); + // Uses the backwards automaton because answering the question + // might be answered by looking only at the code points around the + // index, but it may also require looking further back. It never + // requires looking further ahead, though. + // The backwards automaton is built for this use case. + // Most of the apparent complication in this function is merely dealing with + // surrogates. + if (start < index && index < end) { + // Something on both sides of index. + int char = text.codeUnitAt(index); + int prevChar = text.codeUnitAt(index - 1); + int catAfter = categoryControl; + if (char & 0xF800 != 0xD800) { + catAfter = low(char); + } else if (char & 0xFC00 == 0xD800) { + // Lead surrogate. Combine with following tail surrogate, + // otherwise it's a control and always a boundary. + if (index + 1 >= end) return true; + int nextChar = text.codeUnitAt(index + 1); + if (nextChar & 0xFC00 != 0xDC00) return true; + catAfter = high(char, nextChar); + } else { + // Tail surrogate after index. Either combines with lead surrogate + // before or is always a bundary. + return prevChar & 0xFC00 != 0xD800; + } + int catBefore = categoryControl; + if (prevChar & 0xFC00 != 0xDC00) { + catBefore = low(prevChar); + index -= 1; + } else { + // If no prior lead surrogate, it's a control and always a boundary. + index -= 2; + if (start <= index) { + int prevPrevChar = text.codeUnitAt(index); + if (prevPrevChar & 0xFC00 != 0xD800) { + return true; + } + catBefore = high(prevPrevChar, prevChar); + } else { + return true; + } + } + var state = moveBack(stateEoTNoBreak, catAfter); + // It requires at least two moves from EoT to trigger a lookahead, + // either ZWJ+Pic or RI+RI. + assert(state < stateLookaheadMin); + state = moveBack(state, catBefore); + if (state >= stateLookaheadMin) { + state = lookAhead(text, start, index, state); + } + return state & stateNoBreak == 0; + } + // Always boundary at EoT or SoT, unless there is nothing between them. + return start != end; +} + +/// The most recent break no later than [position] in +/// `string.substring(start, end)`. +int previousBreak(String text, int start, int end, int index) { + assert(0 <= start); + assert(start <= index); + assert(index <= end); + assert(end <= text.length); + if (index == start || index == end) return index; + int indexBefore = index; + int nextChar = text.codeUnitAt(index); + int category = categoryControl; + if (nextChar & 0xF800 != 0xD800) { + category = low(nextChar); + } else if (nextChar & 0xFC00 == 0xD800) { + int indexAfter = index + 1; + if (indexAfter < end) { + int secondChar = text.codeUnitAt(indexAfter); + if (secondChar & 0xFC00 == 0xDC00) { + category = high(nextChar, secondChar); + } + } + } else { + int prevChar = text.codeUnitAt(index - 1); + if (prevChar & 0xFC00 == 0xD800) { + category = high(prevChar, nextChar); + indexBefore -= 1; + } + } + return BackBreaks( + text, indexBefore, start, moveBack(stateEoTNoBreak, category)) + .nextBreak(); +} + +/// The next break no earlier than [position] in `string.substring(start, end)`. +int nextBreak(String text, int start, int end, int index) { + assert(0 <= start); + assert(start <= index); + assert(index <= end); + assert(end <= text.length); + if (index == start || index == end) return index; + int indexBefore = index - 1; + int prevChar = text.codeUnitAt(indexBefore); + int prevCategory = categoryControl; + if (prevChar & 0xF800 != 0xD800) { + prevCategory = low(prevChar); + } else if (prevChar & 0xFC00 == 0xD800) { + int nextChar = text.codeUnitAt(index); + if (nextChar & 0xFC00 == 0xDC00) { + index += 1; + if (index == end) return end; + prevCategory = high(prevChar, nextChar); + } + } else if (indexBefore > start) { + int secondCharIndex = indexBefore - 1; + int secondChar = text.codeUnitAt(secondCharIndex); + if (secondChar & 0xFC00 == 0xD800) { + indexBefore = secondCharIndex; + prevCategory = high(secondChar, prevChar); + } + } + // The only boundaries which depend on more information than + // the previous character are the [^RI] (RI RI)* RI x RI and + // Pic Ext* ZWJ x Pic breaks. In all other cases, all the necessary + // information is in the last seen category. + int state = stateOther; + if (prevCategory == categoryRegionalIndicator) { + int prevState = lookAheadRegional(text, start, indexBefore); + if (prevState != stateRegionalOdd) { + state = stateRegionalSingle; + } + } else if (prevCategory == categoryZWJ || prevCategory == categoryExtend) { + int prevPic = lookAheadPictorgraphicExtend(text, start, indexBefore); + if (prevPic >= 0) { + state = prevCategory == categoryZWJ + ? statePictographicZWJ + : statePictographic; + } + } else { + state = move(stateSoTNoBreak, prevCategory); + } + return Breaks(text, index, text.length, state).nextBreak(); +} diff --git a/pkgs/characters/lib/src/grapheme_clusters/constants.dart b/pkgs/characters/lib/src/grapheme_clusters/constants.dart new file mode 100644 index 00000000..ed3ad429 --- /dev/null +++ b/pkgs/characters/lib/src/grapheme_clusters/constants.dart @@ -0,0 +1,65 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// Unicode Grapheme Breaking Algorithm Character Categories. +/// (Order is irrelevent to correctness, so it is chosen +/// to minimize the size of the generated table strings +/// by avoiding many bytes that need escapes). +const int categoryCR = 0; +const int categoryZWJ = 1; +const int categoryControl = 2; +const int categoryOther = 3; // Any character not in any other category. +const int categoryExtend = 4; +const int categorySpacingMark = 5; +const int categoryRegionalIndicator = 6; +const int categoryPictographic = 7; +const int categoryLF = 8; +const int categoryPrepend = 9; +const int categoryL = 10; +const int categoryV = 11; +const int categoryT = 12; +const int categoryLV = 13; +const int categoryLVT = 14; +const int categoryEoT = 15; // End of Text (synthetic input) + +// Automaton states for forwards automaton. + +const int stateSoT = 0; // Start of text (or grapheme). +const int stateBreak = 0x10; // Always break before next. +const int stateCR = 0x20; // Break unless next is LF. +const int stateOther = 0x30; // Break unless next is Extend, ZWJ, SpacingMark. +const int statePrepend = 0x40; // Only break if next is Control/CR/LF/eot. +const int stateL = 0x50; // As Other unless next is L, V, LV, LVT. +const int stateV = 0x60; // As Other unless next is V, T. +const int stateT = 0x70; // As Other unless next is T. +const int statePictographic = 0x80; // As Other unless followed by Ext* ZWJ Pic. +const int statePictographicZWJ = 0x90; // As Other unless followed by Pic. +const int stateRegionalSingle = 0xA0; // As Other unless followed by RI +const int stateSoTNoBreak = 0xB0; // As SoT but never cause break before next. + +/// Bit flag or'ed to the automaton output if there should not be a break +/// before the most recent input character. +const int stateNoBreak = 1; + +// Backwards Automaton extra/alternative states and categories. + +const int categorySoT = 15; // Start of Text (synthetic input) + +const int stateEoT = 0; // Start of text (or grapheme). +const int stateLF = 0x20; // Break unless prev is CR. +const int stateExtend = 0x40; // Only break if prev is Control/CR/LF/sot. +const int stateZWJPictographic = 0x90; // Preceeded by Pic Ext*. +const int stateEoTNoBreak = 0xB0; // As EoT but never cause break before. +const int stateRegionalEven = 0xC0; // There is an even number of RIs before. +const int stateRegionalOdd = + stateZWJPictographic; // There is an odd (non-zero!) number of RIs before. + +/// Minimum state requesting a look-ahead. +const int stateLookaheadMin = stateRegionalLookahead; + +/// State requesting a look-ahead for an even or odd number of RIs. +const int stateRegionalLookahead = 0xD0; + +/// State requesting a look-ahead for Pic Ext*. +const int stateZWJPictographicLookahead = 0xE0; diff --git a/pkgs/characters/lib/src/grapheme_clusters/table.dart b/pkgs/characters/lib/src/grapheme_clusters/table.dart new file mode 100644 index 00000000..86a83298 --- /dev/null +++ b/pkgs/characters/lib/src/grapheme_clusters/table.dart @@ -0,0 +1,349 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Generated code. Do not edit. +// Generated from https://www.unicode.org/Public/12.0.0/ucd/auxiliary/GraphemeBreakProperty.txt +// and https://unicode.org/Public/emoji/12.0/emoji-data.txt. +// Licensed under the Unicode Inc. License Agreement +// (../../UNICODE_LICENSE.txt, http://www.unicode.org/copyright.html#License) + +const String _data = '""""""""""""""""DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' + 'DDDDDDD""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""DDD' + 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' + 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"""""""""""""""""""""""""""""""' + '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '"""""""""""""""""""""""""""""""""""""3333s3#7333333339433333333333333CDDDD' + 'DDDDDDDDDDDDDDDDDDC433DDDDD4DDDDDDDDDDDDDDDDDD3CU3333333333333333333333333' + '3334T5333333333333333333333333333CCD3D33CD533333333333333333333333TEDTET53' + 'U5UE3333C33333333333333333333333333333CETUTDT5333333333333333333333333SUUU' + 'UUEUDDDDD43333433333333333333333333ET533E3333SDD3U3U4333343333C43333333333' + '33CSD33343333333433333333333333333SUUUEDDDTE4333SDDSUSU\x94333343333C43333' + '333333333333s333333333337333333333333wwwww73sw33sww7swwwwwss33373733s33333' + 'w33333£ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªº»»»»»»»»»»»»»»»»»»»ËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ' + 'ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌìîÞîîîîîîîîîîîîîÞîîîîîîîîîîîîîÞîîîîîîîîîîîîî>33333³»»»»»»»' + ';3ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ334343C33333333333SET333333333333333EDTETD43333' + '3333CD33333333333333CD33333CDD4333333333333333333333333CDTDDDCTE43C4CD3C33' + '3333333333333D3C33333\x99\x99\x9933333DDDDD42333333333333333333CDDD4333333' + '333333333333333333DDDD433334333C53333333333333333333333C33TEDCSUUU43333333' + '3S533333333333333333333333333333CD4DDDDD3D5333333333333333333333333333CSEU' + 'CUSE4333D33333C43333333333333CDDD9DDD3DCD433333333CDCDDDDDDEDDD33433C3E433' + '#""""\x82" """"""""2333333333333333CDUUDU53SEUUUD43SDD3U3U4333C43333C43333' + '333333333SE43CD33333333DD33333CDDDDDDDDDD3333333343333333B!233333333333#""' + '"333333s3CD533333333333333333333333333CESEU3333333333333333333DDDD433333CD' + '2333333333333333333333333""""233333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333CDD33333333333333333333333333333CDDD333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333SUDDDDUDT43333333333343333333333333333333333333333333333333333T' + 'EDDTTEETD33333333333333333333333333333333333333333333333333333333333333333' + '3333333333333333333333333333333333333333333333333333CUDD3UUDE4333333333333' + '3D33333333333333333333333333333333333333333UEDDDTEE43333333333333333333333' + '333333333333333333333333333333CEUDDDE3333333333333333333333333333333333333' + '3333333333333CDUDDEDD33333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333D#"233333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '333333333333333333333333333333333333333333CSUUUUUUUUUUUUUUUUUUUUUUUUUUU333' + 'CD4333333333333333333333333333333333333333333333333333333""""""33EDDCTSE33' + '33333333D33333333333DDDDDDD\x94DDDDDDDDDDDDDDDDDDDDDDDDDDDDDCDDDDDDDD3DDD4' + 'DCDD3333333333333333333333333333333333333333333333333333333333333333333333' + '333333333333333333333333333333333333333333333333333333333333CDDD3333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '333333333333333333333333333333333333333333333333333333333333CD433333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '3333333333333333333333333333333333333CDDDDD3333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333s73333s33333333333' + '""""""""3333333373s333333333333333333333333333333CTDDDTU5D4DD333C433333D33' + '333333333333DU433333333333333333333DDDUDUD3333S333333333333333333433333333' + '3333s733333s33333333333CD4DDDD4D4DD4333333333sww73333333w3333333333sw3333s' + '33333337333333sw333333333s733333333333333333UTEUS433333333C433333333333333' + 'C433333333333334443SUE4333333333333CDDDDDDDD4333333DDDDDT533333£ªªªªªªªªªª' + 'ªªªª3SDDDDUUT5DDD43333C43333333333333333C33333333333EEDDDCC3DDDDUUUDDDDD3T' + '5333333333333333333333333333CSDDD433E533333333333333333333333333DDDDDDD433' + '3333333333333333333333333CD53333333333333333333333UEDTE4\x933333333\x93333' + '3333333333333333333333D433333333333333333CDDEDDD43333333S53333333333333333' + '33333C333333D533333333333333333333333SUDDDDT5\x9933CD433333333333333333333' + '333333333333333333333333333UEDUTD33343333333333333333333333333333333333333' + '333333333333333333333333333333333333333333CUEDDD43333333333DU3333333333333' + '33333333333333C4TTU5S5SU3333C33333U3DDD43DD4333333333333333333333333333333' + '333333333333333333333333333333333333333DDDDDDD533333333333333333333333DDDT' + 'TU43333333333333333333333333333DDD733333s373ss33w7733333ww733333333333ss33' + '333333333333333333333333333ww3333333333333333333333333333wwww33333www33333' + '333333333333333wwww333333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'w333333wwwwwwwwwwwwwwwwwwwwwww7wwwwwswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwww7333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwww733333333333333333333333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww733333333333333333333333333333333333333333' + '3333333333333333swwwww7333333333333333333333333333333333333333333wwwwwwwww' + 'wwwwwwwwwwww7wwwwwwswwwwwwwwwwwwwwwwwwwww73333swwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwww7333333w7333333333333333733333333333333333333333' + '333333sww733333s7333333s3wwwww333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwgffffff' + 'ffffff6wwwwwww73333s33333333337swwwwsw73333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDDDDDDDDDDDDDDDDDDDDDDDD33333333DDDD' + 'DDDD33333333DDDDDDDDDDDDDDDD43333333DC44333333333333333333333333333SUDDDDT' + 'D3333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333UED4CTUE3S33333333' + '333333DDDDD33333333333333333333DDD\x95DD333343333DDDUD43333333333333333333' + '\x93\x99\x99IDDDDDDE433333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '333333333333333333333333333333333333333333333333333333CDDDDDDDDDDDDDDDDDDD' + 'DDDDDDDD33DDDDDDDDDDDDDDDDDDDDDDDDD33334333333C33333333333DD4DDDDDDD433333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '3333333333333333333333333TD43EDD""""DDDD3DDD433333333333333CD4333333333333' + '3333333333333333333333333333333333333333333333333333333333333CD33333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '333333333333333333333C3333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333334333333333333' + '33333333333333333333333333333333333333333333333333333333333333DD4333333333' + '333333333333333333333333333333333333333333333333333333333EDDDCDDT433333333' + '33333333333333333333333333333333CDDDDDDDDDD4EDDDETD33333333333333333333333' + '33333333333333333333333333333333333333DDD3CC4DDD\x944333333333333333333333' + '33333333333SUUC4UT43333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333DU3333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '333333333333333333333333333333CDDD3333333333333333333333333333333333333333' + '33333333333333CDDD33333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333CDC433' + 'DD33333333333333333333D43C333333333333333333333333333333333333333333333333' + '3333333333333333333333333333333333C433333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333334EDDDD3\x03'; +const String _start = '\u0e3b\u1cdb\u05d0\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b \u389c\u102b\u102b\u102b\u102b\u489c\u102b\u102b\u102b' + '\u0620\u392b\u0c26\u0efa\u102b\u0dcb\u0601\u3e7e\u228f\u0c77\u24d3\u40b2' + '\u102b\u1d51\u0f6f\u2681\u0698\u0851\u0d63\u0be6\u0d63\u1d2a\u06d5\u0e9b' + '\u0771\u075c\u2b98\u23fe\u2707\u0da1\u2a52\u08eb\u0d13\u0ce3\u2712\u0c62' + '\u4d9d\u0b97\u25cb\u2b21\u0659\u42c5\u0baa\u0ec5\u088d\u102b\u09b9\u09d9' + '\u09f9\u0a21\u102b\u102b\u102b\u102b\u102b\u40ae\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u0b5f\u25b1' + '\u23c1\u07f5\u0fe2\u102b\u269e\u102b\u0e5b\u102b\u102b\u102b\u2427\u26c9' + '\u275a\u102b\u2b5c\u0fad\u0b31\u0789\u08ab\u102b\u102b\u0dfb\u102b\u102b' + '\u102b\u1d74\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u0f2f\u2372' + '\u102b\u38ec\u090f\u102b\u2501\u102b\u102b\u102b\u102b\u102b\u24a9\u102b' + '\u35c8\u0939\u102b\u102b\u102b\u23b5\u102b\u102b\u2345\u2c27\u3457\u2d9d' + '\u3491\u2d9d\u0979\u2be5\u252c\u102b\u102b\u102b\u102b\u102b\u233b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u2566\u23a2\u102b\u102b\u102b\u102b' + '\u102b\u409c\u102b\u428c\u102b\u3db9\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u2bac\u102b\u16c9\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u2c0e\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u0d24\u4c95\u4c83\u102b\u102b' + '\u102b\u102b\u0b0c\u102b\u07bb\u2609\u0c43\u2641\u071f\u2483\u2443\u0cb1' + '\u06e1\u0811\u102b\u102b\u102b\u2583\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71' + '\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61' + '\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d' + '\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79' + '\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69' + '\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75' + '\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65' + '\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71' + '\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61' + '\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d' + '\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79' + '\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69' + '\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75' + '\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65' + '\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71' + '\u0a95\u0ace\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0' + '\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0' + '\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u42ad\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u38bc\u102b' + '\u102b\u1cdb\u102b\u102b\u4c95\u1cea\u40ce\u102b\u49ce\u1f6f\u2752\u1506' + '\u393f\u449f\u102b\u102b\u102b\u102b\u102b\u0ff2\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u113b\u191a\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u1869\u102b\u102b\u102b\u102b\u3e89\u102b' + '\u3bd9\u102b\u1da7\u102b\u47cf\u102b\u34a1\u305d\u2c56\u2d9d\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\x00\u01f0' + '\u01f0\u01f0\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' + '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b'; +int low(int codeUnit) { + int chunkStart = _start.codeUnitAt(codeUnit >> 6); + int index = chunkStart + (codeUnit & 63); + int bit = index & 1; + int pair = _data.codeUnitAt(index >> 1); + return (pair >> 4) & -bit | (pair & 0xF) & (bit - 1); +} + +int high(int lead, int tail) { + int chunkStart = _start.codeUnitAt(1024 + (0x3ff & lead)); + int index = chunkStart + (0x3ff & tail); + int bit = index & 1; + int pair = _data.codeUnitAt(index >> 1); + return (pair >> 4) & -bit | (pair & 0xF) & (bit - 1); +} + +const _stateMachine = ' 0\x10000\xa0\x80\x10@P`p`p± 0\x10000\xa0\x80\x10@P`p`p°' + ' 0\x10000\xa0\x80\x11@P`p`p° 1\x10011\xa0\x80\x10@P`p`p° 1\x10111¡\x81\x10' + 'AQaqaq° 1\x10011\xa0\x80\x10@Qapaq° 1\x10011\xa0\x80\x10@Paq`p° 1\x10011' + '\xa0\x80\x10@P`q`p° \x91\x100\x811\xa0\x80\x10@P`p`p° 1\x10011\xa0\x81\x10' + '@P`p`p° 1\x100111\x80\x10@P`p`p°!1\x11111¡\x81\x11AQaqaq±'; +int move(int state, int inputCategory) => + _stateMachine.codeUnitAt((state & 0xF0) | inputCategory); + +const _backStateMachine = '\x10@\x100@@\xa0\x80 0P`pPP±\x10@\x100@@\xa0\x80 0P`' + 'pPP°\x11@\x100@@\xa0\x80 0P`pPP°\x10@\x100@@\xa0\x80 1P`pPP°\x10A\x101AA¡' + '\x81 1QaqQQ°\x10@\x100@@\xa0\x80 1Q`pPP°\x10@\x100@@\xa0\x80 1QapQP°\x10@' + '\x100@@\xa0\x80 1PaqQQ°\x10à\x100@@\xa0\x80 1P`pPP°±±±±\x91±Á\x81±±±±±±±±' + '\x10@\x100@@Ð\x80 1P`pPP°\x11A\x111AA¡\x81!1QaqQQ±\x10@\x100@@\x90\x80 1P`' + 'pPP°'; +int moveBack(int state, int inputCategory) => + _backStateMachine.codeUnitAt((state & 0xF0) | inputCategory); diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml new file mode 100644 index 00000000..db261081 --- /dev/null +++ b/pkgs/characters/pubspec.yaml @@ -0,0 +1,6 @@ +name: characters +version: 0.1.0 +environment: + sdk: "^2.4.0" +dev_dependencies: + test: "^1.6.0" diff --git a/pkgs/characters/test/characters_test.dart b/pkgs/characters/test/characters_test.dart new file mode 100644 index 00000000..7039038b --- /dev/null +++ b/pkgs/characters/test/characters_test.dart @@ -0,0 +1,445 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:math"; + +import "package:test/test.dart"; + +import "package:characters/characters.dart"; + +import "src/unicode_tests.dart"; +import "src/unicode_grapheme_tests.dart"; +import "src/various_tests.dart"; + +Random random; + +void main([List args]) { + // Ensure random seed is part of every test failure message, + // and that it can be reapplied for testing. + var seed = (args != null && args.isNotEmpty) + ? int.parse(args[0]) + : Random().nextInt(0x3FFFFFFF); + random = Random(seed); + group("[Random Seed: $seed]", tests); + group("index", () { + test("simple", () { + var flag = "\u{1F1E9}\u{1F1F0}"; + var string = "Hi $flag!"; // Regional Indications "DK". + expect(string.length, 8); + expect(gc(string).toList(), ["H", "i", " ", flag, "!"]); + + expect(gc(string).indexOf(gc("")), 0); + expect(gc(string).indexOf(gc(""), 3), 3); + expect(gc(string).indexOf(gc(""), 4), 7); + expect(gc(string).indexOf(gc(flag)), 3); + expect(gc(string).indexOf(gc(flag), 3), 3); + expect(gc(string).indexOf(gc(flag), 4), lessThan(0)); + + expect(gc(string).indexAfter(gc("")), 0); + expect(gc(string).indexAfter(gc(""), 3), 3); + expect(gc(string).indexAfter(gc(""), 4), 7); + expect(gc(string).indexAfter(gc(flag)), 7); + expect(gc(string).indexAfter(gc(flag), 7), 7); + expect(gc(string).indexAfter(gc(flag), 8), lessThan(0)); + + expect(gc(string).lastIndexOf(gc("")), string.length); + expect(gc(string).lastIndexOf(gc(""), 7), 7); + expect(gc(string).lastIndexOf(gc(""), 6), 3); + expect(gc(string).lastIndexOf(gc(""), 0), 0); + expect(gc(string).lastIndexOf(gc(flag)), 3); + expect(gc(string).lastIndexOf(gc(flag), 6), 3); + expect(gc(string).lastIndexOf(gc(flag), 2), lessThan(0)); + + expect(gc(string).lastIndexAfter(gc("")), string.length); + expect(gc(string).lastIndexAfter(gc(""), 7), 7); + expect(gc(string).lastIndexAfter(gc(""), 6), 3); + expect(gc(string).lastIndexAfter(gc(""), 0), 0); + expect(gc(string).lastIndexAfter(gc(flag)), 7); + expect(gc(string).lastIndexAfter(gc(flag), 7), 7); + expect(gc(string).lastIndexAfter(gc(flag), 6), lessThan(0)); + }); + test("multiple", () { + var flag = "\u{1F1E9}\u{1F1F0}"; // DK. + var revFlag = "\u{1F1F0}\u{1F1E9}"; // KD. + var string = "-${flag}-$flag$flag-"; + expect(gc(string).indexOf(gc(flag)), 1); + expect(gc(string).indexOf(gc(flag), 2), 6); + expect(gc(string).indexOf(gc(flag), 6), 6); + expect(gc(string).indexOf(gc(flag), 7), 10); + expect(gc(string).indexOf(gc(flag), 10), 10); + expect(gc(string).indexOf(gc(flag), 11), lessThan(0)); + + expect(gc(string).indexOf(gc(revFlag)), lessThan(0)); + }); + + test("nonBoundary", () { + // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. + var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. + var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. + var zwj = "\u200d"; // U+200D, ZWJ + var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram + var flagRainbow = "$flag$white$zwj$rainbow"; + expect(gc(flagRainbow).length, 1); + for (var part in [flag, white, zwj, rainbow]) { + expect(gc(flagRainbow).indexOf(gc(part)), lessThan(0)); + expect(gc(flagRainbow).indexAfter(gc(part)), lessThan(0)); + expect(gc(flagRainbow).lastIndexOf(gc(part)), lessThan(0)); + expect(gc(flagRainbow).lastIndexAfter(gc(part)), lessThan(0)); + } + expect(gc(flagRainbow + flagRainbow).indexOf(gc(flagRainbow)), 0); + expect(gc(flagRainbow + flagRainbow).indexAfter(gc(flagRainbow)), 6); + expect(gc(flagRainbow + flagRainbow).lastIndexOf(gc(flagRainbow)), 6); + expect(gc(flagRainbow + flagRainbow).lastIndexAfter(gc(flagRainbow)), 12); + // 1 11 11 11 2 + // indices 0 67 90 12 34 67 3 + var partsAndWhole = + "$flagRainbow $flag $white $zwj $rainbow $flagRainbow"; + // Flag and rainbow are independent graphemes. + expect(gc(partsAndWhole).toList(), [ + flagRainbow, + " ", + flag, + " $white", // Other + Extend + " $zwj", // Other + ZWJ + " ", + rainbow, + " ", + flagRainbow + ]); + expect(gc(partsAndWhole).indexOf(gc(flag)), 7); + expect(gc(partsAndWhole).indexAfter(gc(flag)), 9); + expect(gc(partsAndWhole).lastIndexOf(gc(flag)), 7); + expect(gc(partsAndWhole).lastIndexAfter(gc(flag)), 9); + + expect(gc(partsAndWhole).indexOf(gc(rainbow)), 14); + expect(gc(partsAndWhole).indexAfter(gc(rainbow)), 16); + expect(gc(partsAndWhole).lastIndexOf(gc(rainbow)), 14); + expect(gc(partsAndWhole).lastIndexAfter(gc(rainbow)), 16); + + expect(gc(partsAndWhole).indexOf(gc(white)), lessThan(0)); + expect(gc(partsAndWhole).indexAfter(gc(white)), lessThan(0)); + expect(gc(partsAndWhole).lastIndexOf(gc(white)), lessThan(0)); + expect(gc(partsAndWhole).lastIndexAfter(gc(white)), lessThan(0)); + expect(gc(partsAndWhole).indexOf(gc(" $white")), 9); + expect(gc(partsAndWhole).indexAfter(gc(" $white")), 11); + expect(gc(partsAndWhole).lastIndexOf(gc(" $white")), 9); + expect(gc(partsAndWhole).lastIndexAfter(gc(" $white")), 11); + + expect(gc(partsAndWhole).indexOf(gc(zwj)), lessThan(0)); + expect(gc(partsAndWhole).indexAfter(gc(zwj)), lessThan(0)); + expect(gc(partsAndWhole).lastIndexOf(gc(zwj)), lessThan(0)); + expect(gc(partsAndWhole).lastIndexAfter(gc(zwj)), lessThan(0)); + expect(gc(partsAndWhole).indexOf(gc(" $zwj")), 11); + expect(gc(partsAndWhole).indexAfter(gc(" $zwj")), 13); + expect(gc(partsAndWhole).lastIndexOf(gc(" $zwj")), 11); + expect(gc(partsAndWhole).lastIndexAfter(gc(" $zwj")), 13); + }); + }); +} + +void tests() { + test("empty", () { + expectGC(gc(""), []); + }); + group("gc-ASCII", () { + for (var text in [ + "", + "A", + "123456abcdefab", + ]) { + test('"$text"', () { + expectGC(gc(text), charsOf(text)); + }); + } + test("CR+NL", () { + expectGC(gc("a\r\nb"), ["a", "\r\n", "b"]); + expectGC(gc("a\n\rb"), ["a", "\n", "\r", "b"]); + }); + }); + group("Non-ASCII single-code point", () { + for (var text in [ + "à la mode", + "rødgrød-æble-ål", + ]) { + test('"$text"', () { + expectGC(gc(text), charsOf(text)); + }); + } + }); + group("Combining marks", () { + var text = "a\u0300 la mode"; + test('"$text"', () { + expectGC(gc(text), ["a\u0300", " ", "l", "a", " ", "m", "o", "d", "e"]); + }); + var text2 = "æble-a\u030Al"; + test('"$text2"', () { + expectGC(gc(text2), ["æ", "b", "l", "e", "-", "a\u030A", "l"]); + }); + }); + + group("Regional Indicators", () { + test('"🇦🇩🇰🇾🇪🇸"', () { + // Andorra, Cayman Islands, Spain. + expectGC(gc("🇦🇩🇰🇾🇪🇸"), ["🇦🇩", "🇰🇾", "🇪🇸"]); + }); + test('"X🇦🇩🇰🇾🇪🇸"', () { + // Other, Andorra, Cayman Islands, Spain. + expectGC(gc("X🇦🇩🇰🇾🇪🇸"), ["X", "🇦🇩", "🇰🇾", "🇪🇸"]); + }); + test('"🇩🇰🇾🇪🇸"', () { + // Denmark, Yemen, unmatched S. + expectGC(gc("🇩🇰🇾🇪🇸"), ["🇩🇰", "🇾🇪", "🇸"]); + }); + test('"X🇩🇰🇾🇪🇸"', () { + // Other, Denmark, Yemen, unmatched S. + expectGC(gc("X🇩🇰🇾🇪🇸"), ["X", "🇩🇰", "🇾🇪", "🇸"]); + }); + }); + + group("Hangul", () { + // Individual characters found on Wikipedia. Not expected to make sense. + test('"읍쌍된밟"', () { + expectGC(gc("읍쌍된밟"), ["읍", "쌍", "된", "밟"]); + }); + }); + + group("Unicode test", () { + for (var gcs in splitTests) { + test("[${testDescription(gcs)}]", () { + expectGC(gc(gcs.join()), gcs); + }); + } + }); + + group("Emoji test", () { + for (var gcs in emojis) { + test("[${testDescription(gcs)}]", () { + expectGC(gc(gcs.join()), gcs); + }); + } + }); + + group("Zalgo test", () { + for (var gcs in zalgo) { + test("[${testDescription(gcs)}]", () { + expectGC(gc(gcs.join()), gcs); + }); + } + }); +} + +// Converts text with no multi-code-point grapheme clusters into +// list of grapheme clusters. +List charsOf(String text) => + text.runes.map((r) => String.fromCharCode(r)).toList(); + +void expectGC(Characters actual, List expected) { + var text = expected.join(); + + // Iterable operations. + expect(actual.string, text); + expect(actual.toString(), text); + expect(actual.toList(), expected); + expect(actual.length, expected.length); + if (expected.isNotEmpty) { + expect(actual.first, expected.first); + expect(actual.last, expected.last); + } else { + expect(() => actual.first, throwsStateError); + expect(() => actual.last, throwsStateError); + } + if (expected.length == 1) { + expect(actual.single, expected.single); + } else { + expect(() => actual.single, throwsStateError); + } + expect(actual.isEmpty, expected.isEmpty); + expect(actual.isNotEmpty, expected.isNotEmpty); + expect(actual.contains(""), false); + for (var char in expected) { + expect(actual.contains(char), true); + } + for (int i = 1; i < expected.length; i++) { + expect(actual.contains(expected[i - 1] + expected[i]), false); + } + expect(actual.skip(1).toList(), expected.skip(1).toList()); + expect(actual.take(1).toList(), expected.take(1).toList()); + expect(actual.skip(1).toString(), expected.skip(1).join()); + expect(actual.take(1).toString(), expected.take(1).join()); + + if (expected.isNotEmpty) { + expect(actual.skipLast(1).toList(), + expected.take(expected.length - 1).toList()); + expect(actual.takeLast(1).toList(), + expected.skip(expected.length - 1).toList()); + expect(actual.skipLast(1).toString(), + expected.take(expected.length - 1).join()); + expect(actual.takeLast(1).toString(), + expected.skip(expected.length - 1).join()); + + expect(actual.indexOf(gc(expected.first)), 0); + expect(actual.indexAfter(gc(expected.first)), expected.first.length); + expect(actual.lastIndexOf(gc(expected.last)), + text.length - expected.last.length); + expect(actual.lastIndexAfter(gc(expected.last)), text.length); + if (expected.length > 1) { + if (expected[0] != expected[1]) { + expect(actual.indexOf(gc(expected[1])), expected[0].length); + } + } + } + + expect(actual.getRange(1, 3).toString(), expected.take(3).skip(1).join()); + expect(actual.getRange(1, 3).toString(), expected.take(3).skip(1).join()); + + bool isEven(String s) => s.length.isEven; + + expect( + actual.skipWhile(isEven).toList(), expected.skipWhile(isEven).toList()); + expect( + actual.takeWhile(isEven).toList(), expected.takeWhile(isEven).toList()); + expect( + actual.skipWhile(isEven).toString(), expected.skipWhile(isEven).join()); + expect( + actual.takeWhile(isEven).toString(), expected.takeWhile(isEven).join()); + + expect(actual.skipLastWhile(isEven).toString(), + expected.toList().reversed.skipWhile(isEven).toList().reversed.join()); + expect(actual.takeLastWhile(isEven).toString(), + expected.toList().reversed.takeWhile(isEven).toList().reversed.join()); + + expect(actual.where(isEven).toString(), expected.where(isEven).join()); + + expect((actual + actual).toString(), actual.string + actual.string); + + List accumulatedLengths = [0]; + for (int i = 0; i < expected.length; i++) { + accumulatedLengths.add(accumulatedLengths.last + expected[i].length); + } + + // Iteration. + var it = actual.iterator; + expect(it.start, 0); + expect(it.end, 0); + for (var i = 0; i < expected.length; i++) { + expect(it.moveNext(), true); + expect(it.start, accumulatedLengths[i]); + expect(it.end, accumulatedLengths[i + 1]); + expect(it.current, expected[i]); + + expect(actual.elementAt(i), expected[i]); + expect(actual.skip(i).first, expected[i]); + } + expect(it.moveNext(), false); + expect(it.start, accumulatedLengths.last); + expect(it.end, accumulatedLengths.last); + for (var i = expected.length - 1; i >= 0; i--) { + expect(it.movePrevious(), true); + expect(it.start, accumulatedLengths[i]); + expect(it.end, accumulatedLengths[i + 1]); + expect(it.current, expected[i]); + } + expect(it.movePrevious(), false); + expect(it.start, 0); + expect(it.end, 0); + + // GraphemeClusters operations. + expect(actual.toUpperCase().toString(), text.toUpperCase()); + expect(actual.toLowerCase().toString(), text.toLowerCase()); + + if (text.isNotEmpty) { + expect(actual.insertAt(1, gc("abc")).toString(), + text.replaceRange(1, 1, "abc")); + expect(actual.replaceSubstring(0, 1, gc("abc")).toString(), + text.replaceRange(0, 1, "abc")); + expect(actual.substring(0, 1).string, actual.string.substring(0, 1)); + } + + expect(actual.string, text); + + expect(actual.containsAll(gc("")), true); + expect(actual.containsAll(actual), true); + if (expected.isNotEmpty) { + int steps = min(5, expected.length); + for (int s = 0; s <= steps; s++) { + int i = expected.length * s ~/ steps; + expect(actual.startsWith(gc(expected.sublist(0, i).join())), true); + expect(actual.endsWith(gc(expected.sublist(i).join())), true); + for (int t = s + 1; t <= steps; t++) { + int j = expected.length * t ~/ steps; + int start = accumulatedLengths[i]; + int end = accumulatedLengths[j]; + var slice = expected.sublist(i, j).join(); + var gcs = gc(slice); + expect(actual.containsAll(gcs), true); + expect(actual.startsWith(gcs, start), true); + expect(actual.endsWith(gcs, end), true); + } + } + if (accumulatedLengths.last > expected.length) { + int i = expected.indexWhere((s) => s.length != 1); + assert(accumulatedLengths[i + 1] > accumulatedLengths[i] + 1); + expect( + actual.startsWith(gc(text.substring(0, accumulatedLengths[i] + 1))), + false); + expect(actual.endsWith(gc(text.substring(accumulatedLengths[i] + 1))), + false); + if (i > 0) { + expect( + actual.startsWith( + gc(text.substring(1, accumulatedLengths[i] + 1)), 1), + false); + } + if (i < expected.length - 1) { + int secondToLast = accumulatedLengths[expected.length - 1]; + expect( + actual.endsWith( + gc(text.substring(accumulatedLengths[i] + 1, secondToLast)), + secondToLast), + false); + } + } + } + + { + // Random walk back and forth. + var it = actual.iterator; + int pos = -1; + if (random.nextBool()) { + pos = expected.length; + it.reset(text.length); + } + int steps = 5 + random.nextInt(expected.length * 2 + 1); + bool lastMove = false; + while (true) { + bool back = false; + if (pos < 0) { + expect(lastMove, false); + expect(it.start, 0); + expect(it.end, 0); + } else if (pos >= expected.length) { + expect(lastMove, false); + expect(it.start, text.length); + expect(it.end, text.length); + back = true; + } else { + expect(lastMove, true); + expect(it.current, expected[pos]); + expect(it.start, accumulatedLengths[pos]); + expect(it.end, accumulatedLengths[pos + 1]); + back = random.nextBool(); + } + if (--steps < 0) break; + if (back) { + lastMove = it.movePrevious(); + pos -= 1; + } else { + lastMove = it.moveNext(); + pos += 1; + } + } + } +} + +Characters gc(String string) => Characters(string); diff --git a/pkgs/characters/test/src/text_samples.dart b/pkgs/characters/test/src/text_samples.dart new file mode 100644 index 00000000..bf40e8cb --- /dev/null +++ b/pkgs/characters/test/src/text_samples.dart @@ -0,0 +1,1712 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// From: https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B5%AD%EC%96%B4 +/// Text is available under the [Creative Commons Attribution-ShareAlike License](https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License). +var hangul = """ +20세기 후반까지는 우랄-알타이 계통설이 지지를 받았는데, 우랄-알타이어족이 우랄어족과 알타이어족으로 나뉘게 된 뒤에는 알타이 계통설이 가장 가능성이 큰 것으로 여겨지고 있다. 그러나 알타이어족을 이루는 주요 언어인 튀르크어와 몽골어 사이의 유사관계가 많은 부분 어휘차용에 근거하는 등 알타이어족 사이에서도 눈에 띄는 유사점을 발견하기 어렵고, 결정적으로 기초 어휘의 일치 및 음운대응규칙이 보이지 않기 때문에 고립된 언어 내지는 한국어족으로 보고 있다. 알타이어족설 한국어가 몽골어, 퉁구스어, 터키어 등과 함께 알타이어족에 속한다고 보는 견해이다. 한국어를 알타이어족의 하나로 보는 입장에서는 한국어의 다음과 같은 속성을 근거로 든다. 모음조화가 존재한다. 용언에 굴절이 있는 교착어이다. 주어, 목적어, 동사의 어순을 가지는 S-O-V 어순의 언어이다. 어두에 특정 자음이 쓰이지 않는 두음법칙이 존재한다. 모음교체, 자음교체, 문법적 성(性), 어두자음군이 없다. 관계대명사와 접속사가 없고 접속사의 결여를 보충하기 위해 부동사를 사용한다.[9] 그러나 한국어는 알타이어족이 가지는 전형적인 특성 외에 다른 특성을 공유하지 못하기도 한다. 이는 한국어가 조기에 알타이조어에서 분리되었다는 가설을 성립하게 하였다. 한국어가 알타이어족에 속하는 언어임을 부정하는 주장은 다음과 같다. 대부분 알타이 어족 가설 자체에 해당하는 것이기도 하다. 알타이 제어에는 기초 어휘인 신체 지칭이나 친족 명칭어가 유사한 것이 거의 없다. 기초 어휘로서 대명사 일부만이 유사하고, 수사가 거의 다르다. 음운대응의 규칙성이 정확하지 못하고, 믿을만한 것이 부족하다. 알타이 제어의 언어 구조는 매우 유사하지만, 차용어를 제외하면 공통된 요소가 매우 적다. 문법 요소의 일부 유사성으로는 알타이 제어의 관련을 증명하기에 충분하지 않다. 역사적으로 밀접한 접촉을 했고, 서로 강력한 영향력을 끼친 결과, 언어구조가 유사해졌고, 차용어로 인하여 공통요소가 생겼을 가능성이 있다. 한국어가 알타이어족에 속하는 언어임을 부정하는 주장의 근거 중 하나가 음운대응의 규칙성의 부족이다. 많은 연구에도 불구하고 알타이 제어와 한국어의 음운대응 관계가 적게 밝혀진 것은 사실이다. 특히 모음의 대응은 매우 불규칙하다. 하지만 자음 중에서는 몇 가지 밝혀진 대응관계가 있다.[10] 한국인은 형질 인류 상으로는 몽골 인종이고, 언어상으로는 알타이어를 쓰고 있다. 한국의 학교에서는 2006년 기준 한국어가 알타이 어족과 가까운 관계에 있는 것으로 가르치고 있다.[11] 한-일어족설 한국어와 일본어 사이의 문법적인 유사성이 많다는 데에서 나오는 설이다. 부여어족설 등의 구체적인 가설이 나왔으나, 고대 한국어 자료가 부족하여 가설 단계에 머물러 있다. 이노우에 키요시(井上 淸)는 일본어가 친족관계를 가질 가능성이 있는 것은 오직 한국어 뿐이고, 그렇다면 공통의 조어에서 갈라진 시기를 언어연대학으로 조몬시대 중기 이전으로 추정했다.[12] 일부는 이와 같은 주장을 하는 사람은 일본인이고, 일본 제국주의가 내선일체를 내세워 한국을 식민지배했다는 점에서 한-일 어족설은 일제의 식민지배를 정당화하는 수단이 될 뿐이며 일선동조론에 불과하다고 주장한다. 극동아시아어족설 한국어 이외에도 몽골어, 퉁구스어, 터키어, 일본어, 만주어까지 한 어족으로 보며, 해당 다섯 개의 언어와 한국어가 유사하다는 점을 근거로 제시하고 있다. 비알타이어 기층설 한국의 언어학자인 김방한이 제시한 가설로, 한국어 기층에 원시 한반도어라고 부르는 정체불명의 비알타이어 기층이 있고, 그 위에 알타이어계 요소가 덮인 것이거나, 그 반대로 비알타이어가 알타이 기층에 덮여서 한국어의 뼈대가 형성되었다고 보는 가설이다. 그는 원시 한반도어와 계통적 친연성이 있는 언어로 편의상 고시베리아어족으로 분류되어 있는 니브히어(길랴크어)를 지목하였다. 음운 이 부분의 본문은 한국어 음운론입니다. 모음 다음은 대한민국 표준어를 기준으로 한 모음의 표기이다. 음소 대표적인 음성 적요 예 /ㅏ/ [a] 전설 비원순 저모음, 중설 근저모음[vn 1] /ai/ 아이 [ai] /ㅓ/ [ʌ] 후설 비원순 중저모음[vn 2] /ʌdi/ 어디 [ʌdi] /ㅗ/ [o] 후설 원순 중고모음 /oi/ 오이 [oi] /ㅜ/ [u] 후설 원순 고모음 /uɾi/ 우리 [uɾi] /ㅡ/ [ɯ] 후설 비원순 고모음 /gɯ/ 그 [kɯ] /ㅣ/ [i] 전설 비원순 고모음 /ima/ 이마 [ima] /ㅐ/ [ɛ] 전설 비원순 중저모음[vn 3] /hɛ/ 해 [hɛ] /ㅔ/ [e] 전설 비원순 중고모음[vn 3] /nue/ 누에 [nue] /ㅚ/ [ø] ([we] 허용) 전설 원순 중고모음[vn 3] /sø/ 쇠 [sø] /ㅟ/ [y] ([wi] 허용) 전설 원순 고모음[vn 3] /y/ 위 [y] 전설 모음 기호 a는 전통적으로 한국어의 중설 모음을 나타내는 데 쓰인다. 일반적으로 [ɐ]와 비슷한 소리를 낸다. 서울 방언의 /ㅓ/는 완전한 비원순 모음이 아니라 원순과 비원순의 중간적인 발음이다. 또한 문화어에서는 이 모음을 [ɔ]로 소리 낸다. 한국에서는 거의 모든 지역에서 노년층을 제외하고 /ㅐ/와 /ㅔ/의 구별이 상실되어 같은 소리로 발음된다. 그 음성은 [ɛ] 와 [e] 의 중간 소리다. 또 서울 방언과 평양 방언 모두 단모음 음소로서 /ㅚ/, /ㅟ/가 존재하지 않는다. 이들 방언에서 /ㅚ/는 보통 [we](평양 방언에서는 [wɛ])로 나타나며 /ㅟ/는 [wi]로 나타난다. 따라서 단모음의 종류가 가장 적은 서울 방언 화자의 경우 단모음은 일곱 가지(/ㅏ, ㅓ, ㅗ, ㅜ, ㅡ, ㅣ, ㅔ/)밖에 없다. 자음 양순 치경 치경구개 권설 경구개 연구개 성문 비음 m n ŋ 파열음 p b t d k ɡ 마찰음 s z ɕ ʑ ç x h ɦ 파찰음 ʨ ʥ 탄음 ɾ 접근음 w j ɰ 설측음 ɭ ʎ 음운 체계 양순음 치경음 경구개음 연구개음 성문음 파열음 평음 ㅂ (b/p) ㄷ (d/t) ㅈ (ʥ/ʨ) ㄱ (g/k) 경음 ㅃ (p͈) ㄸ (t͈) ㅉ (ʨ͈) ㄲ (k͈) 격음 ㅍ (pʰ/bʱ) ㅌ (tʰ/dʱ) ㅊ (ʨʰ/ʥʱ) ㅋ (kʰ/gʱ) 마찰음 평음 ㅅ (sʰ/zʱ) ㅎ (h/ɦ) 경음 ㅆ (s͈) 비음 ㅁ (m) ㄴ (n) ㅇ (ŋ) 유음 ㄹ (l) /ㅅ/는 [sʰ], [j]나 [i] 앞에서는 [ɕʰ]가 된다. 비음 앞과 뒤에서는 [zʱ]로 발음된다. (단, [j]나 [i] 앞에서는 [ʑʱ]가 된다.) /ㅎ/는 [h]. [j]나 [i] 앞에서는 [ç], [w]나 [u] 앞에서는 [ɸ], [ɰ] 앞에서는 [x]가 된다. 비음 앞에서는 [ɦ]로 발음되며, 비음 뒤에서는 음가가 사라진다. /ㅂ, ㄷ, ㅈ, ㄱ/는 [p], [t], [ʨ], [k]. 모음 사이, 비음 뒤에서는 [b], [d], [ʥ], [ɡ]가 된다. /ㄹ/는 모음 사이에서는 [ɾ], 어말에서 또는 겹으로 날 때는 [ɭ]. 겹으로 날 때 [i]나 [j] 앞에서는 [ʎ]가 된다. 어두에서는 음가가 없어진다. 위의 표에서 평음. 경음, 격음은 기식성에 의해 나눈 것이고, 긴장성에 의해 무기 연음. 무기 경음. 유기 경음으로 분류할 수 있다. 한국어는 긴장음 체계이다. 형태 음소론 조사의 형태는 앞의 소리의 영향을 받을 수 있다. 은/는, 이/가, 을/를과 같이 음절이 바뀌는 경우도 있고, 에서/서, 으로/로와 같이 음절이 끼어드는 경우도 있다. 은/는, 이/가, 을/를의 경우, 모음이 연쇄되는 것을 피하고자 자음이 삽입되는 규칙적인 경우이나, 와/과, 으로/로의 경우는 예외적이다. 으로/로는 ㄹ 뒤에서 독특한 분포를 보인다. 와/과 역시 중세 한국어에서는 으로/로와 마찬가지로 ㄹ뒤에서 '와'가 쓰이는 독특한 분포를 보였으나 현대한국어에서는 그렇지 않다. 와/과의 경우 이중모음/ㅘ/가 모음이 아니라는 점에서 모음 연쇄 환경이 아니고 사용빈도에 따라 분포가 설명된다.[13] 한국어 조사 자음 뒤 모음 뒤 -의 -의 -은 -는 -이 -가 -을 -를 -과 -와 -으로 -로 형태 음소론적 차이는 일부 동사에서도 관찰된다. 문법 이 부분의 본문은 한국어 문법입니다. 한국어는 어근과 접사 등 특정 표지가 붙음에 따라 단어의 기능이 결정되는 교착어로 분류된다. 특히 조사에 따라 문법적 격이 정해지며 이 때문에 고립어에 비해 어순이 비교적 유동적이기는 하나, 일반적으로 SOV형 어순, 곧 주어-목적어-동사의 구조를 가지고 있다. 또한 일반적인 경우 서술어는 반드시 문장의 끝에 위치하여야 한다. 조사는 문법적 격을 나타내는 격조사, 단어끼리 이어주는 접속조사, 특별한 의미를 가하는 보조사로 나뉘며, 조사가 붙는 체언이 개음절인지 폐음절인지에 따라 다른 조사가 붙기도 한다. 일례로, '사람'의 뒤에 붙는 주격 조사는 '이'이나, '머리' 뒤에 붙는 주격 조사는 '가'이다. 어미가 다양한 것이 특징적으로, 문장 내에서 기능이나 수식은 물론 미묘한 분위기에까지 영향을 끼치기도 한다. 특히 주로 종결 어미나 선어말 어미에 따라 드러나는 낮춤말과 평어, 높임말의 복잡한 존비어 체계가 특징적으로, 화자 간에 존댓말(높임말)과 반말(낮춤말, 평어)에 대한 합의가 명확하게 이루어지지 않은 상태에서는 의사소통에 있어서 어색한 상황이 발생한다.[14] 이러한 언어와 호칭선택 문제 때문에 갈등과 권위적 상황이 유발되기도 한다는 분석도 있다.[15] 용언은 동사와 형용사를 포함하는데, 둘의 어미 변화가 거의 동일하다는 특징이 있다. 용언의 기본형은 모두 종결어미의 일종인 '-다'로 끝나는 것으로 취급되며, 그 기능에 따라 조금씩 변하나 대부분의 경우 여전히 '다'로 끝나 문장의 끝을 암시하게 된다. 그 시제는 현재, 과거, 미래형으로 나뉘며, 이 또한 동사의 종류나 기능에 따라 다양한 어미로 나타난다. 어휘 이 부분의 본문은 한국어의 고유어, 한국어의 한자어, 및 한국어의 외래어입니다. 한국어의 어휘는 크게 고유어 ("순우리말"), 한자어, 외래어로 분류된다. 고유어는 한국어의 기층을 형성하는 고유의 어휘로, 사용 빈도가 높은 일상어는 대부분 고유어에 속한다. 그러나 고유어의 일부는 매우 이른 시기에 들어온 상고 중국어에서 유래되어 고유어로 인식되는 어휘가 있고(붓-筆, 먹-墨), 후대에 한자어의 형태가 일그러지면서 본디 말과 다른 의미를 획득하여 고유어로 인식되는 어휘도 있다(사냥>山行, 짐승>衆生). 음운적으로 ㄹ 소리로 시작되는 토착어휘는 거의 없으며, 이는 알타이 제어의 음운론적 특징의 하나이기도 하다. 한자어는 고전 중국어에서 유래된 어휘군으로 중국과의 접촉에 따라 지속해서 한국어에 유입되었으나 한자어의 비율은 사전이나 자료마다 차이가 있으나 일반적으로 50 - 70%까지로 추산된다. 그러나 일각에서는 이는 일제강점기에 가능한 한 많은 낱말들을 한자로 표기하면서 과장된 것이라는 주장도 있다.[16] 또한, 국어사전이 수록하는 한자어의 상당수는 한문 문장에만 용례가 있고, 한국어에서는 용례가 발견되지 않는 단어들이다. 국립국어연구원이 2002년 발표한 '현대 국어 사용 빈도 조사'를 보면 우리말의 낱말 사용 비율은 토박이말이 54%, 한자어 35%, 외래어가 2%였다. 이는 중국에서 받아들인 지 오래되어 외래어처럼 인식되지 않는 고전 한어(한문) 기원의 한자어와 한국에서 독자 조어된 한국제 한자어, 메이지 시대의 일본이 서양문물을 받아들이면서 서양의 개념을 번역해낸 일본제 한자어 등을 모두 포함하는 것이다. 한자어는 본질에서는 외래어이지만, 한국어에서 차지하는 위상이 특수하고, 비중이 매우 크기 때문에 다른 외래어와 달리 별도 분류한다. 마치 영어에서 라틴어, 프랑스어를 거쳐 들어온 문화어휘가 차지하는 비중과 비슷하다. 외래어라 하면 일반적으로 중국어 이외의 외국어에서 받아들인 어휘를 가리킨다. 근대 이전에는 불경을 통하여 간접 차용된 산스크리트어(한자어 형태로 들어왔기 때문에 한자어로 분류되기도 함)를 비롯하여 몽골어, 만주어, 일본어 등에서 소수의 차용어가 들어왔으며, 일제강점기에는 독일어, 프랑스어, 스페인어, 포르투갈어, 네덜란드어 등 인도유럽어족 어휘가 주로 일본을 통하여 들어왔다. 이때 '아르바이트(Arbeit)'와 같이 원어의 의미와 다르게 쓰이게 된 말도 있다. 현대에는 영어가 강한 영향력을 발휘하게 되면서 영어로부터의 많은 차용어들이 쓰이고 있다. 문자 이 부분의 본문은 한글, 이두, 향찰, 및 구결입니다. 한반도에서 처음 사용된 문자체계는 한자이다. 한문과 한자 문화가 중국으로부터 전래한 시기는 확실치 않으나, 대략 한사군 시절을 전후하여 이미 한반도에서 한자, 한문이 유입되어 있었던 것으로 추측된다. 한문 유입 이후, 고유명사 표기 등 한국어 표기의 필요성이 대두하였으며, 1934년 경주에서 발견된 임신서기석(壬申誓記石)은 어순이 한문 어순이 아닌 한국어 어순에 따라 배열되어 한자를 이용하여 한국어를 표기하기 위한 여러 고안이 행해졌음을 알 수 있다. 이 임신서기석에 사용된 변칙한문체를 서기체(誓記體) 또는 의국체(擬國體)라고 한다. 단음절어이며 고립어인 중국어를 표기하는 한자는 다음절어이면서 교착어인 한국어의 표기에 적합하지 않아 한자를 이용하여 한국어를 표기하는 방법 중에서 이두, 구결은 제한적인 쓰임새 외에는 일반화되지 못했고, 향찰은 소멸하였다. 지배계급은 한자를 이용하여 구어인 한국어를 표기하기보다는 문어체의 한문을 고수하려는 경향이 있었기 때문에, 구어(한국어)와 문어(한문)의 이중체계가 오랫동안 지속하였다. 현재 한국어 표기에 쓰이는 문자인 한글은 세종대왕이 창제하여 훈민정음이라는 이름으로 1446년에 반포한 것이다. 훈민정음 창제 원리에 대한 설이 여러 가지 있었으나, 1940년에 《세종어제훈민정음》이 발견되면서 발성 기관을 본떠 만들어졌다는 것이 밝혀졌다. 정인지는 훈민정음 반포 서문에서 "계해년 겨울에 우리 전하께서 비로소 정음 28자를 창제하시다"(癸亥冬, 我殿下創制正音二十八字.)라고 적고 있다. 최만리 등은 1444년(세종 26년) 2월에 한글 창제 반대 상소에서 "신 등이 엎드려 보건대, 언문(諺文)을 제작하신 것이 지극히 신묘하와 만물을 창조하시고 지혜를 운전하심이 천고에 뛰어나시다."(臣等伏覩諺文制作, 至爲神妙, 創物運智, 夐出千古.)라고 하며, 세종대왕이 한글을 직접 만들었음을 밝히고 있다.(세종실록 26년 2월 20일) 같은 상소에서는 "글자의 형상은 비록 옛날의 전문(篆文)을 모방하였을지라도, 음을 쓰고 글자를 합하는 것은 모두 옛것에 반대된다."(字形雖倣古之篆文, 用音合字, 盡反於古.)고 했는데, 이는 오랑캐(몽골·여진·일본 등)처럼 새로운 글자를 만들었다고 비판할 중화주의자들을 의식해 '언문은 옛글자(한자의 옛 서체)를 본떠서 만들었다'는 식으로 해명한 것에 대해 자음과 모음을 결합해 음절을 구성하는 한글의 표기방식이 표의문자인 한자와는 근본적으로 다르다고 비난한 내용으로, 한글 이전에는 조선에 한글과 같은 문자가 없었음을 확인시켜 준다. 한자는 훈민정음 창제 이후에도 공문서에 사용하는 유일한 문자로 계속 사용되었으며, 1894년 갑오개혁 이후에야 공문서에 한글이 쓰이기 시작하였다.(국한문혼용) 현재 대한민국에서는 한글이 공식문자이고, 일부 한자어는 한자를 괄호에 넣어 병기(竝記)하기도 하지만 한자의 사용은 갈수록 줄어드는 추세이다. 조선민주주의인민공화국과 중국 연변 조선족 자치주, 구 소련 지역에서는 한자를 거의 쓰지 않고 가급적 순한글로 한국어를 표기한다. 1930년대 초반 소련에서는 여러 소수 민족 언어를 대상으로 한 로마자 표기 정책의 일환으로 한국어를 로마자로 표기하는 방안을 승인했지만, 실제 로마자 표기안이 마련되어 생활에 적용되지는 않는 것으로 보인다. 이는 한국어 문자생활에서 로마자로 한글·한자를 대체하려던 방안으로 외국인들을 위한 한국어 고유명사의 표기에 쓰는 현재의 로마자 표기 규범과는 큰 차이가 있다. 다만, 현대 한국어에서는 로마자 두문자어 표기와 일부 고유 명사 표기에 로마자를 제한적으로 사용하고 있기도 하다. 방언 이 부분의 본문은 한국어의 방언입니다. '잠자리'를 부르는 여러 가지 말. 한국어의 지역별 방언 구분 한국어의 방언은 경기 방언, 영동 방언, 서북 방언, 충청 방언, 서남 방언, 동남 방언, 동북 방언, 재미 한국어, 재중 한국어, 재일 한국어 등으로 나눈다. 경기 방언과 충청 방언을 중부 말로 합쳐 일컫기도 한다. 모든 방언이 서로 의사소통이 가능한 정도의 차이를 보인다. 대한민국의 표준어는 경기 방언을 바탕으로 하고 있고 조선민주주의인민공화국의 표준어인 문화어는 서북 방언을 바탕으로 하고 있다. 최근에는 미국 등 영어 사용 국가로의 이민이 늘어나면서 이민 2세와 같이 영어를 모국어로 하는 한국계 외국인들이 영어를 번역한 듯한 한국어(번역체)를 사용하기도 한다.[17] 한국어의 남북 간 차이 이 부분의 본문은 한국어의 남북 간 차이입니다. 이 문단의 내용은 출처가 분명하지 않습니다. 지금 바로 이 문단을 편집하여, 참고하신 문헌이나 신뢰할 수 있는 출처를 각주 등으로 표기해 주세요. 검증되지 않은 내용은 삭제될 수도 있습니다. 내용에 대한 의견이 있으시다면 토론 문서에서 나누어 주세요. (2010년 5월 29일에 문단의 출처가 요청되었습니다.) 대한민국과 조선민주주의인민공화국은 약 80년 가까이 분단된 만큼 언어상의 특징도 차이가 있다. 가령 조선민주주의인민공화국에서는 건데기나 지팽이와 같이 'ㅣ'의 모음 역행 동화를 인정하는 경향이 크며, 대한민국에서 인정하는 두음 법칙이 관찰되지 않기 때문에 여자, 염원, 노동 대신 녀자, 념원, 로동과 같은 낱말을 사용한다. 대한민국에서는 상황에 따라 다양한 성격의 문체나 구어체를 활용하고, 조선민주주의인민공화국에서는 어감이 강한 표현을 많이 쓴다. 또, 조선민주주의인민공화국에서는 '찔리우다'와 같이 대한민국보다 보조용언을 겹쳐 쓰는 경우가 많으며, 접미사 '들'을 많이 쓰는 경향도 있다. 어휘 면에서는 특히 많은 차이를 보이며, 외래어 수용에 큰 거리낌이 없는 대한민국에 반해, 조선민주주의인민공화국에서는 말다듬기로 고유어가 많지만, 과거 '얼음보숭이'를 쓰던 것에 비하면 오늘날 대부분 '아이스크림'이라고 쓰는 것을 볼 때, 외래어도 어느 정도 받아들이는 추세다. 외국어로서 미국, 중국, 일본, 프랑스, 폴란드, 카자흐스탄, 러시아 등지에서는 한국어를 배우려는 사람들도 생겼다. 이는 한국의 경제 성장에 따른 국제적 위상의 확대와 한류 등의 문화적 영향력의 전파에 힘입은 바가 크다. 그러나 아직 아시아 언어 중에서는 중국어나 일본어보다 학습자의 수가 적은 편이며, 체계적인 교수법이나 교재도 부족한 형편이다. 과거에는 영어, 일본어 등 유럽, 미주 및 일본을 중심으로만 한국어 학습용 교재가 발간되었으나, 근래에는 한국어 학습 동기의 다변화와 국내 외국인 수의 증가로 중국어, 타이어, 인도네시아어, 베트남어 등 다양한 언어로 한국어 교재가 발간되고 있다. 미국 정부회계감사원이 발표한 '미국 국무부 외국어 직무수행 평가서'에 따르면, 중국어, 일본어, 아랍어와 더불어 한국어를 미국인이 가장 배우기 힘든 언어(superhard language)로 분류하고 있는데, 이는 인도유럽어족인 영어와 한국어의 여러 상이점에 따른 것이다.[18] 한편, 한국어를 배우는 대부분의 외국인은 한국어를 학문으로서 배운다는 의견도 존재한다.[19] 한국어 검정시험 대한민국 대한민국에는 현재 한국어 능력을 검정하기 위한 시험이 몇 가지 있다. 국어능력인증시험(Test of Korean Language;TOKL), 한국어능력시험(Test Of Proficiency in Korean ; TOPIK), KBS 한국어능력시험(Korean Language Test) 등이 있다. 일본 일본의 네 가지 한국어 시험 가운데 일본에서 비교적 널리 알려진 시험은 한글능력검정시험과 한국어능력시험이다. 한글능력검정시험을 뺀 나머지 모든 시험은 대한민국 표준어 시험이기 때문에 표준어가 기준이며, 이와 다른 문화어의 맞춤법이나 어법은 오답으로 처리된다. 이외 일본의 대학 입시 센터 시험에는 2002년부터 한국어가 포함되었다. 한글능력검정시험 일본의 특정 비영리법인 한글능력검정협회가 주최하는 자격시험으로 6월경(연 2회)에 실시한다. 일본의 한국어 학습자에게 가장 잘 알려진 시험이다. 5급이 가장 낮은 급수이고 4급<3급<준2급<2급<1급순으로 급수가 올라간다. 일본국내에서만 통용되며 등급이 영어검정(일본)시험과 거의 같으므로 영어검정시험과 비교 대조되는 경우가 있다. 2006년부터 "준 1급"이 없어졌다. 1, 2급은 문제의 지문을 포함하여 모든 글이 한국어로 표기되어 있다. 또한, 이 시험은 답을 적을 때 대한민국이든 조선민주주의인민공화국이든 어느 한쪽으로 일관성 있게 통일되어 있으면 정답으로 간주한다. 근래 한류 붐의 영향으로 초급 수험자는 상당히 증가했으나 반대로 1, 2급 등 고급 레벨에서는 수험자 수가 매우 적다. 2004년 전후에 상급의 시험 문제는 난도가 계속 상승하는 반면, 3급 이하의 급수는 합격률이 90%를 넘나들게 쉬워지는 현상이 일어났다. 그러나 2006년 다시 출제 기준과 난이도 조정이 이루어진 결과, 낮은 급수도 난도가 대폭 상승하여 현재에 이른다. 이러한 난이도의 유동에 따라 자격시험으로서 신뢰도가 떨어진다는 지적도 있다.[출처 필요] 한국어능력시험(TOPIK) 국립국제교육원이 주최하고 교육과학기술부가 인정하는 자격시험으로 매년 4월과 9월에 시행된다. (한국에서는 2007년부터 일본에서는 2008년부터 연 2회 볼 수 있게 되었다) 한글능력검정시험과 달리 1, 2급이 초급이고 3, 4급이 중급, 5, 6급이 고급단계이다. 한국, 일본 외에 세계 28개국에서 실시되는 국제적 시험이다. 수험자 수가 가장 많은 국가는 중국이고 두 번째가 일본이다. 외국인이 한국의 대학교, 대학원에 입학할 때 이 시험의 성적증명서 제출이 요구되는 경우가 많다. 또한, 한국의 많은 외국인 대상 어학당에서 이 시험의 결과로 반을 편성한다. 세계한국말인증시험[20](KLPT)(世界韓国語認証試験) 한글학회가 주최하는 자격시험으로 4월 10월에 시행된다. 2006년까지는 1,4,7,10월의 연 4회 시행되었으나, 2007년부터 연 2회로 단축되었다. (수험자 수가 적은 것이 원인으로 추측된다) 평가는 500점 만점의 점수제로 토익과 같은 형태이다. 한국어 레벨테스트(KLT) 점수제이고 1000점 만점이다. 시험시간은 90분이고 비교적 단시간에 시험을 볼 수 있다. 한국,일본외에 중국과 미국에서도 수험이 가능하다. 2004년부터 개시되었지만 2009년 1월 시험 시행이 정지되었다. 인터넷에서의 한국어 한국어 문서가 전 세계 웹에서 차지하는 비중은 2004년에 4.1%로, 이는 영어(35.8%), 중국어(14.1%), 일본어(9.6%), 스페인어(9%), 독일어(7%)에 이어 전 세계 6위이다.[21] 웹상에서의 한국어 사용 인구는 전 세계 75억여 명의 인구[22] 중 약 1%[23] 에 해당한다. 한국어 사용국가 대한민국 대한민국 (국가 공용어) 조선민주주의인민공화국 조선민주주의인민공화국 (국가 공용어) 중국 중화인민공화국 (연변조선족자치주의 공용어) (주요 외국어, 제2외국어 과목 채택) 일본 일본 (인구의 약 0.8% 사용. 주요 외국어, 제2외국어 과목 채택. 공항 및 지하철 안내 언어) 미국 미국 (한인타운 등지에서 사용. SAT 제2외국어 과목 채택) 러시아 러시아 (중앙아시아 및 러시아 전역 분포.) 우즈베키스탄 우즈베키스탄 카자흐스탄 카자흐스탄 관련 항목 한문 한자 한자어 한자 문화권 한국어 순화 한국어의 품사 발음하기 힘든 한국어 문장 긴 한국어 낱말 한국어 사전 한글 한글날 훈민정음 한국어 위키백과 각주 “Korean language” [Ethnologue, languages of the world]. 《에스놀로그》. 2010년. 2015년 2월 11일에 확인함. Song, Jae Jung (2005), 《The Korean language: structure, use and context》, Routledge, 15쪽, ISBN 978-0-415-32802-9. Campbell, Lyle; Mixco, Mauricio (2007), 〈Korean, A language isolate〉, 《A Glossary of Historical Linguistics》, University of Utah Press, 7, 90–91쪽, most specialists... no longer believe that the... Altaic groups... are related […] Korean is often said to belong with the Altaic hypothesis, often also with Japanese, though this is not widely supported. Dalby, David (1999–2000), 《The Register of the World's Languages and Speech Communities》, Linguasphere Press. Kim, Nam-Kil (1992), 〈Korean〉, 《International Encyclopedia of Linguistics》 2, 282–86쪽, scholars have tried to establish genetic relationships between Korean and other languages and major language families, but with little success. Róna-Tas, András (1998), 〈The Reconstruction of Proto-Turkic and the Genetic Question〉, 《The Turkic Languages》, Routledge, 67–80쪽, [Ramstedt's comparisons of Korean and Altaic] have been heavily criticised in more recent studies, though the idea of a genetic relationship has not been totally abandoned. Schönig, Claus (2003), 〈Turko-Mongolic Relations〉, 《The Mongolic Languages》, Routledge, 403–19쪽, the 'Altaic' languages do not seem to share a common basic vocabulary of the type normally present in cases of genetic relationship. 그러나. 북한에서는 한글을 이르는 말로 보통 "조선글(자)"를 쓰기 때문에 이 표현 역시 중립적일 수 없다. 다만, 최근 북한 사전들은 "한글"을 올림말로 삼는다. 이기문·이호권 『국어사』 방송통신대학출판부 2008 20쪽 이기문·이호권 『국어사』 방송통신대학출판부 2008 22쪽 국사 편찬 위원회; 국정 도서 편찬 위원회 (2006년 3월 2일). 《고등학교 국사》. 서울: (주)교학사. 19쪽쪽. 박경리, 박경리 선생 유고 '일본산고(日本散考)' 전문 , 동아일보 남, 성현; 김, 선회 (2015). “제약서열과 사용빈도”. 《언어연구》 (한국현대언어학회). doi:10.18627/jslg.31.3.201511.605. 2016년 7월 17일에 확인함. “미수다 “한국어 존댓말 그것이 궁금하다”. 《Newsen(뉴스앤미디어)》. 2008년 4월 8일. 2018년 10월 6일에 확인함. “[포럼]미묘한 호칭 갈등”. 《경향신문》. 2011년 1월 2일. 2018년 10월 6일에 확인함. “"우리말 70%가 한자말? 일제가 왜곡"”. 《한겨레》. 2009년 9월 11일. 2018년 10월 6일에 확인함. 한국 방언 자료집 - ASX, 한국역사정보통합시스템 이은주 기자 (2006년 8월 13일). “joins.com”. 《미국인들 배우기 가장 어려운 언어는 한국·중국·일본·아랍어》 (중앙일보). 2017년 12월 6일에 확인함. Koh Young-aah (2010년 7월 20일). “More foreigners study Korean academically” (영어). The Korean Herald. 2010년 8월 5일에 확인함. 세계한국말인증시험 웹사이트 2000년에 위원회를 발족한 세계한국말인증시험(KLPT)은 2001년부터 한글학회 주관하에 미주, 유럽, 동남아 등 40여 곳에서 시험을 시행해 왔다. 이택수 (2005년 6월 16일). “한글 홈피 점유 4.1% 중국·일본어 이어 6위”. 디지털타임스. 2011년 1월 10일에 확인함. 온라인에서의 언어 분포는 영어가 35.8%로 1위를 차지했고. 중국어가 14.1%, 일본어가 9.6%, 스페인어가 9%를 차지했으며, 한글은 독일어(7%)에 이어 4.1%로 6위에 올랐다. “World Population Prospects: The 2008 Revision” (영어). 국제 연합. 2009. 2011년 1월 10일에 확인함. 해당 웹페이지의 지역 항목에서 'World'를 선택하면 조회 가능. “Ethnologue - Korean” (영어). Summer Institute of Linguistics. 2011년 1월 10일에 확인함. Population 42,000,000 in Korea, South (1986). Population total all countries: 66,305,890. 외부 링크 한국 고전 번역원 국립국어원 +"""; + +/// Sample ASCII text: Genesis from the King James Bible (1604). +const genesis = """ +Genesis + +1. +In the beginning God created the heaven and the earth. +And the earth was without form, and void; and darkness was upon the face of the deep. And the Spirit of God moved upon the face of the waters. +And God said, Let there be light: and there was light. +And God saw the light, that it was good: and God divided the light from the darkness. +And God called the light Day, and the darkness he called Night. And the evening and the morning were the first day. +And God said, Let there be a firmament in the midst of the waters, and let it divide the waters from the waters. +And God made the firmament, and divided the waters which were under the firmament from the waters which were above the firmament: and it was so. +And God called the firmament Heaven. And the evening and the morning were the second day. +And God said, Let the waters under the heaven be gathered together unto one place, and let the dry land appear: and it was so. +And God called the dry land Earth; and the gathering together of the waters called he Seas: and God saw that it was good. +And God said, Let the earth bring forth grass, the herb yielding seed, and the fruit tree yielding fruit after his kind, whose seed is in itself, upon the earth: and it was so. +And the earth brought forth grass, and herb yielding seed after his kind, and the tree yielding fruit, whose seed was in itself, after his kind: and God saw that it was good. +And the evening and the morning were the third day. +And God said, Let there be lights in the firmament of the heaven to divide the day from the night; and let them be for signs, and for seasons, and for days, and years: +And let them be for lights in the firmament of the heaven to give light upon the earth: and it was so. +And God made two great lights; the greater light to rule the day, and the lesser light to rule the night: he made the stars also. +And God set them in the firmament of the heaven to give light upon the earth, +And to rule over the day and over the night, and to divide the light from the darkness: and God saw that it was good. +And the evening and the morning were the fourth day. +And God said, Let the waters bring forth abundantly the moving creature that hath life, and fowl that may fly above the earth in the open firmament of heaven. +And God created great whales, and every living creature that moveth, which the waters brought forth abundantly, after their kind, and every winged fowl after his kind: and God saw that it was good. +And God blessed them, saying, Be fruitful, and multiply, and fill the waters in the seas, and let fowl multiply in the earth. +And the evening and the morning were the fifth day. +And God said, Let the earth bring forth the living creature after his kind, cattle, and creeping thing, and beast of the earth after his kind: and it was so. +And God made the beast of the earth after his kind, and cattle after their kind, and every thing that creepeth upon the earth after his kind: and God saw that it was good. +And God said, Let us make man in our image, after our likeness: and let them have dominion over the fish of the sea, and over the fowl of the air, and over the cattle, and over all the earth, and over every creeping thing that creepeth upon the earth. +So God created man in his own image, in the image of God created he him; male and female created he them. +And God blessed them, and God said unto them, Be fruitful, and multiply, and replenish the earth, and subdue it: and have dominion over the fish of the sea, and over the fowl of the air, and over every living thing that moveth upon the earth. +And God said, Behold, I have given you every herb bearing seed, which is upon the face of all the earth, and every tree, in the which is the fruit of a tree yielding seed; to you it shall be for meat. +And to every beast of the earth, and to every fowl of the air, and to every thing that creepeth upon the earth, wherein there is life, I have given every green herb for meat: and it was so. +And God saw every thing that he had made, and, behold, it was very good. And the evening and the morning were the sixth day. + +2. +Thus the heavens and the earth were finished, and all the host of them. +And on the seventh day God ended his work which he had made; and he rested on the seventh day from all his work which he had made. +And God blessed the seventh day, and sanctified it: because that in it he had rested from all his work which God created and made. +These are the generations of the heavens and of the earth when they were created, in the day that the LORD God made the earth and the heavens, +And every plant of the field before it was in the earth, and every herb of the field before it grew: for the LORD God had not caused it to rain upon the earth, and there was not a man to till the ground. +But there went up a mist from the earth, and watered the whole face of the ground. +And the LORD God formed man of the dust of the ground, and breathed into his nostrils the breath of life; and man became a living soul. +And the LORD God planted a garden eastward in Eden; and there he put the man whom he had formed. +And out of the ground made the LORD God to grow every tree that is pleasant to the sight, and good for food; the tree of life also in the midst of the garden, and the tree of knowledge of good and evil. +And a river went out of Eden to water the garden; and from thence it was parted, and became into four heads. +The name of the first is Pison: that is it which compasseth the whole land of Havilah, where there is gold; +And the gold of that land is good: there is bdellium and the onyx stone. +And the name of the second river is Gihon: the same is it that compasseth the whole land of Ethiopia. +And the name of the third river is Hiddekel: that is it which goeth toward the east of Assyria. And the fourth river is Euphrates. +And the LORD God took the man, and put him into the garden of Eden to dress it and to keep it. +And the LORD God commanded the man, saying, Of every tree of the garden thou mayest freely eat: +But of the tree of the knowledge of good and evil, thou shalt not eat of it: for in the day that thou eatest thereof thou shalt surely die. +And the LORD God said, It is not good that the man should be alone; I will make him an help meet for him. +And out of the ground the LORD God formed every beast of the field, and every fowl of the air; and brought them unto Adam to see what he would call them: and whatsoever Adam called every living creature, that was the name thereof. +And Adam gave names to all cattle, and to the fowl of the air, and to every beast of the field; but for Adam there was not found an help meet for him. +And the LORD God caused a deep sleep to fall upon Adam and he slept: and he took one of his ribs, and closed up the flesh instead thereof; +And the rib, which the LORD God had taken from man, made he a woman, and brought her unto the man. +And Adam said, This is now bone of my bones, and flesh of my flesh: she shall be called Woman, because she was taken out of Man. +Therefore shall a man leave his father and his mother, and shall cleave unto his wife: and they shall be one flesh. +And they were both naked, the man and his wife, and were not ashamed. + +3. +Now the serpent was more subtil than any beast of the field which the LORD God had made. And he said unto the woman, Yea, hath God said, Ye shall not eat of every tree of the garden? +And the woman said unto the serpent, We may eat of the fruit of the trees of the garden: +But of the fruit of the tree which is in the midst of the garden, God hath said, Ye shall not eat of it, neither shall ye touch it, lest ye die. +And the serpent said unto the woman, Ye shall not surely die: +For God doth know that in the day ye eat thereof, then your eyes shall be opened, and ye shall be as gods, knowing good and evil. +And when the woman saw that the tree was good for food, and that it was pleasant to the eyes, and a tree to be desired to make one wise, she took of the fruit thereof, and did eat, and gave also unto her husband with her; and he did eat. +And the eyes of them both were opened, and they knew that they were naked; and they sewed fig leaves together, and made themselves aprons. +And they heard the voice of the LORD God walking in the garden in the cool of the day: and Adam and his wife hid themselves from the presence of the LORD God amongst the trees of the garden. +And the LORD God called unto Adam, and said unto him, Where art thou? +And he said, I heard thy voice in the garden, and I was afraid, because I was naked; and I hid myself. +And he said, Who told thee that thou wast naked? Hast thou eaten of the tree, whereof I commanded thee that thou shouldest not eat? +And the man said, The woman whom thou gavest to be with me, she gave me of the tree, and I did eat. +And the LORD God said unto the woman, What is this that thou hast done? And the woman said, The serpent beguiled me, and I did eat. +And the LORD God said unto the serpent, Because thou hast done this, thou art cursed above all cattle, and above every beast of the field; upon thy belly shalt thou go, and dust shalt thou eat all the days of thy life: +And I will put enmity between thee and the woman, and between thy seed and her seed; it shall bruise thy head, and thou shalt bruise his heel. +Unto the woman he said, I will greatly multiply thy sorrow and thy conception; in sorrow thou shalt bring forth children; and thy desire shall be to thy husband, and he shall rule over thee. +And unto Adam he said, Because thou hast hearkened unto the voice of thy wife, and hast eaten of the tree, of which I commanded thee, saying, Thou shalt not eat of it: cursed is the ground for thy sake; in sorrow shalt thou eat of it all the days of thy life; +Thorns also and thistles shall it bring forth to thee; and thou shalt eat the herb of the field; +In the sweat of thy face shalt thou eat bread, till thou return unto the ground; for out of it wast thou taken: for dust thou art, and unto dust shalt thou return. +And Adam called his wife's name Eve; because she was the mother of all living. +Unto Adam also and to his wife did the LORD God make coats of skins, and clothed them. +And the LORD God said, Behold, the man is become as one of us, to know good and evil: and now, lest he put forth his hand, and take also of the tree of life, and eat, and live for ever: +Therefore the LORD God sent him forth from the garden of Eden, to till the ground from whence he was taken. +So he drove out the man; and he placed at the east of the garden of Eden Cherubims, and a flaming sword which turned every way, to keep the way of the tree of life. + +4. +And Adam knew Eve his wife; and she conceived, and bare Cain, and said, I have gotten a man from the LORD. +And she again bare his brother Abel. And Abel was a keeper of sheep, but Cain was a tiller of the ground. +And in process of time it came to pass, that Cain brought of the fruit of the ground an offering unto the LORD. +And Abel, he also brought of the firstlings of his flock and of the fat thereof. And the LORD had respect unto Abel and to his offering: +But unto Cain and to his offering he had not respect. And Cain was very wroth, and his countenance fell. +And the LORD said unto Cain, Why art thou wroth? and why is thy countenance fallen? +If thou doest well, shalt thou not be accepted? and if thou doest not well, sin lieth at the door. And unto thee shall be his desire, and thou shalt rule over him. +And Cain talked with Abel his brother: and it came to pass, when they were in the field, that Cain rose up against Abel his brother, and slew him. +And the LORD said unto Cain, Where is Abel thy brother? And he said, I know not: Am I my brother's keeper? +And he said, What hast thou done? the voice of thy brother's blood crieth unto me from the ground. +And now art thou cursed from the earth, which hath opened her mouth to receive thy brother's blood from thy hand; +When thou tillest the ground, it shall not henceforth yield unto thee her strength; a fugitive and a vagabond shalt thou be in the earth. +And Cain said unto the LORD, My punishment is greater than I can bear. +Behold, thou hast driven me out this day from the face of the earth; and from thy face shall I be hid; and I shall be a fugitive and a vagabond in the earth; and it shall come to pass, that every one that findeth me shall slay me. +And the LORD said unto him, Therefore whosoever slayeth Cain, vengeance shall be taken on him sevenfold. And the LORD set a mark upon Cain, lest any finding him should kill him. +And Cain went out from the presence of the LORD, and dwelt in the land of Nod, on the east of Eden. +And Cain knew his wife; and she conceived, and bare Enoch: and he builded a city, and called the name of the city, after the name of his son, Enoch. +And unto Enoch was born Irad: and Irad begat Mehujael: and Mehujael begat Methusael: and Methusael begat Lamech. +And Lamech took unto him two wives: the name of the one was Adah, and the name of the other Zillah. +And Adah bare Jabal: he was the father of such as dwell in tents, and of such as have cattle. +And his brother's name was Jubal: he was the father of all such as handle the harp and organ. +And Zillah, she also bare Tubal-cain, an instructer of every artificer in brass and iron: and the sister of Tubal-cain was Naamah. +And Lamech said unto his wives, Adah and Zillah, Hear my voice; ye wives of Lamech, hearken unto my speech: for I have slain a man to my wounding, and a young man to my hurt. +If Cain shall be avenged sevenfold, truly Lamech seventy and sevenfold. +And Adam knew his wife again; and she bare a son, and called his name Seth: For God, said she, hath appointed me another seed instead of Abel, whom Cain slew. +And to Seth, to him also there was born a son; and he called his name Enos: then began men to call upon the name of the LORD. + +5. +This is the book of the generations of Adam. In the day that God created man, in the likeness of God made he him; +Male and female created he them; and blessed them, and called their name Adam, in the day when they were created. +And Adam lived an hundred and thirty years, and begat a son in his own likeness, after his image; and called his name Seth: +And the days of Adam after he had begotten Seth were eight hundred years: and he begat sons and daughters: +And all the days that Adam lived were nine hundred and thirty years: and he died. +And Seth lived an hundred and five years, and begat Enos: +And Seth lived after he begat Enos eight hundred and seven years, and begat sons and daughters: +And all the days of Seth were nine hundred and twelve years: and he died. +And Enos lived ninety years, and begat Cainan: +And Enos lived after he begat Cainan eight hundred and fifteen years, and begat sons and daughters: +And all the days of Enos were nine hundred and five years: and he died. +And Cainan lived seventy years, and begat Mahalaleel: +And Cainan lived after he begat Mahalaleel eight hundred and forty years, and begat sons and daughters: +And all the days of Cainan were nine hundred and ten years: and he died. +And Mahalaleel lived sixty and five years, and begat Jared: +And Mahalaleel lived after he begat Jared eight hundred and thirty years, and begat sons and daughters: +And all the days of Mahalaleel were eight hundred ninety and five years: and he died. +And Jared lived an hundred sixty and two years, and he begat Enoch: +And Jared lived after he begat Enoch eight hundred years, and begat sons and daughters: +And all the days of Jared were nine hundred sixty and two years: and he died. +And Enoch lived sixty and five years, and begat Methuselah: +And Enoch walked with God after he begat Methuselah three hundred years, and begat sons and daughters: +And all the days of Enoch were three hundred sixty and five years: +And Enoch walked with God: and he was not; for God took him. +And Methuselah lived an hundred eighty and seven years, and begat Lamech: +And Methuselah lived after he begat Lamech seven hundred eighty and two years, and begat sons and daughters: +And all the days of Methuselah were nine hundred sixty and nine years: and he died. +And Lamech lived an hundred eighty and two years, and begat a son: +And he called his name Noah, saying, This same shall comfort us concerning our work and toil of our hands, because of the ground which the LORD hath cursed. +And Lamech lived after he begat Noah five hundred ninety and five years, and begat sons and daughters: +And all the days of Lamech were seven hundred seventy and seven years: and he died. +And Noah was five hundred years old: and Noah begat Shem, Ham, and Japheth. + +6. +And it came to pass, when men began to multiply on the face of the earth, and daughters were born unto them, +That the sons of God saw the daughters of men that they were fair; and they took them wives of all which they chose. +And the LORD said, My spirit shall not always strive with man, for that he also is flesh: yet his days shall be an hundred and twenty years. +There were giants in the earth in those days; and also after that, when the sons of God came in unto the daughters of men, and they bare children to them, the same became mighty men which were of old, men of renown. +And GOD saw that the wickedness of man was great in the earth, and that every imagination of the thoughts of his heart was only evil continually. +And it repented the LORD that he had made man on the earth, and it grieved him at his heart. +And the LORD said, I will destroy man whom I have created from the face of the earth; both man, and beast, and the creeping thing, and the fowls of the air; for it repenteth me that I have made them. +But Noah found grace in the eyes of the LORD. +These are the generations of Noah: Noah was a just man and perfect in his generations, and Noah walked with God. +And Noah begat three sons, Shem, Ham, and Japheth. +The earth also was corrupt before God, and the earth was filled with violence. +And God looked upon the earth, and, behold, it was corrupt; for all flesh had corrupted his way upon the earth. +And God said unto Noah, The end of all flesh is come before me; for the earth is filled with violence through them; and, behold, I will destroy them with the earth. +Make thee an ark of gopher wood; rooms shalt thou make in the ark, and shalt pitch it within and without with pitch. +And this is the fashion which thou shalt make it of: The length of the ark shall be three hundred cubits, the breadth of it fifty cubits, and the height of it thirty cubits. +A window shalt thou make to the ark, and in a cubit shalt thou finish it above; and the door of the ark shalt thou set in the side thereof; with lower, second, and third stories shalt thou make it. +And, behold, I, even I, do bring a flood of waters upon the earth, to destroy all flesh, wherein is the breath of life, from under heaven; and every thing that is in the earth shall die. +But with thee will I establish my covenant; and thou shalt come into the ark, thou, and thy sons, and thy wife, and thy sons' wives with thee. +And of every living thing of all flesh, two of every sort shalt thou bring into the ark, to keep them alive with thee; they shall be male and female. +Of fowls after their kind, and of cattle after their kind, of every creeping thing of the earth after his kind, two of every sort shall come unto thee, to keep them alive. +And take thou unto thee of all food that is eaten, and thou shalt gather it to thee; and it shall be for food for thee, and for them. +Thus did Noah; according to all that God commanded him, so did he. + +7. +And the LORD said unto Noah, Come thou and all thy house into the ark; for thee have I seen righteous before me in this generation. +Of every clean beast thou shalt take to thee by sevens, the male and his female: and of beasts that are not clean by two, the male and his female. +Of fowls also of the air by sevens, the male and the female; to keep seed alive upon the face of all the earth. +For yet seven days, and I will cause it to rain upon the earth forty days and forty nights; and every living substance that I have made will I destroy from off the face of the earth. +And Noah did according unto all that the LORD commanded him. +And Noah was six hundred years old when the flood of waters was upon the earth. +And Noah went in, and his sons, and his wife, and his sons' wives with him, into the ark, because of the waters of the flood. +Of clean beasts, and of beasts that are not clean, and of fowls, and of every thing that creepeth upon the earth, +There went in two and two unto Noah into the ark, the male and the female, as God had commanded Noah. +And it came to pass after seven days, that the waters of the flood were upon the earth. +In the six hundredth year of Noah's life, in the second month, the seventeenth day of the month, the same day were all the fountains of the great deep broken up, and the windows of heaven were opened. +And the rain was upon the earth forty days and forty nights. +In the selfsame day entered Noah, and Shem, and Ham, and Japheth, the sons of Noah, and Noah's wife, and the three wives of his sons with them, into the ark; +They, and every beast after his kind, and all the cattle after their kind, and every creeping thing that creepeth upon the earth after his kind, and every fowl after his kind, every bird of every sort. +And they went in unto Noah into the ark, two and two of all flesh, wherein is the breath of life. +And they that went in, went in male and female of all flesh, as God had commanded him: and the LORD shut him in. +And the flood was forty days upon the earth; and the waters increased, and bare up the ark, and it was lift up above the earth. +And the waters prevailed, and were increased greatly upon the earth; and the ark went upon the face of the waters. +And the waters prevailed exceedingly upon the earth; and all the high hills, that were under the whole heaven, were covered. +Fifteen cubits upward did the waters prevail; and the mountains were covered. +And all flesh died that moved upon the earth, both of fowl, and of cattle, and of beast, and of every creeping thing that creepeth upon the earth, and every man: +All in whose nostrils was the breath of life, of all that was in the dry land, died. +And every living substance was destroyed which was upon the face of the ground, both man, and cattle, and the creeping things, and the fowl of the heaven; and they were destroyed from the earth: and Noah only remained alive, and they that were with him in the ark. +And the waters prevailed upon the earth an hundred and fifty days. + +8. +And God remembered Noah, and every living thing, and all the cattle that was with him in the ark: and God made a wind to pass over the earth, and the waters asswaged; +The fountains also of the deep and the windows of heaven were stopped, and the rain from heaven was restrained; +And the waters returned from off the earth continually: and after the end of the hundred and fifty days the waters were abated. +And the ark rested in the seventh month, on the seventeenth day of the month, upon the mountains of Ararat. +And the waters decreased continually until the tenth month: in the tenth month, on the first day of the month, were the tops of the mountains seen. +And it came to pass at the end of forty days, that Noah opened the window of the ark which he had made: +And he sent forth a raven, which went forth to and fro, until the waters were dried up from off the earth. +Also he sent forth a dove from him, to see if the waters were abated from off the face of the ground; +But the dove found no rest for the sole of her foot, and she returned unto him into the ark, for the waters were on the face of the whole earth: then he put forth his hand, and took her, and pulled her in unto him into the ark. +And he stayed yet other seven days; and again he sent forth the dove out of the ark; +And the dove came in to him in the evening; and, lo, in her mouth was an olive leaf pluckt off: so Noah knew that the waters were abated from off the earth. +And he stayed yet other seven days; and sent forth the dove; which returned not again unto him any more. +And it came to pass in the six hundredth and first year, in the first month, the first day of the month, the waters were dried up from off the earth: and Noah removed the covering of the ark, and looked, and, behold, the face of the ground was dry. +And in the second month, on the seven and twentieth day of the month, was the earth dried. +And God spake unto Noah, saying, +Go forth of the ark, thou, and thy wife, and thy sons, and thy sons' wives with thee. +Bring forth with thee every living thing that is with thee, of all flesh, both of fowl, and of cattle, and of every creeping thing that creepeth upon the earth; that they may breed abundantly in the earth, and be fruitful, and multiply upon the earth. +And Noah went forth, and his sons, and his wife, and his sons' wives with him: +Every beast, every creeping thing, and every fowl, and whatsoever creepeth upon the earth, after their kinds, went forth out of the ark. +And Noah builded an altar unto the LORD; and took of every clean beast, and of every clean fowl, and offered burnt offerings on the altar. +And the LORD smelled a sweet savour; and the LORD said in his heart, I will not again curse the ground any more for man's sake; for the imagination of man's heart is evil from his youth; neither will I again smite any more every thing living, as I have done. +While the earth remaineth, seedtime and harvest, and cold and heat, and summer and winter, and day and night shall not cease. + +9. +And God blessed Noah and his sons, and said unto them, Be fruitful, and multiply, and replenish the earth. +And the fear of you and the dread of you shall be upon every beast of the earth, and upon every fowl of the air, upon all that moveth upon the earth, and upon all the fishes of the sea; into your hand are they delivered. +Every moving thing that liveth shall be meat for you; even as the green herb have I given you all things. +But flesh with the life thereof, which is the blood thereof, shall ye not eat. +And surely your blood of your lives will I require; at the hand of every beast will I require it, and at the hand of man; at the hand of every man's brother will I require the life of man. +Whoso sheddeth man's blood, by man shall his blood be shed: for in the image of God made he man. +And you, be ye fruitful, and multiply; bring forth abundantly in the earth, and multiply therein. +And God spake unto Noah, and to his sons with him, saying, +And I, behold, I establish my covenant with you, and with your seed after you; +And with every living creature that is with you, of the fowl, of the cattle, and of every beast of the earth with you; from all that go out of the ark, to every beast of the earth. +And I will establish my covenant with you; neither shall all flesh be cut off any more by the waters of a flood; neither shall there any more be a flood to destroy the earth. +And God said, This is the token of the covenant which I make between me and you and every living creature that is with you, for perpetual generations: +I do set my bow in the cloud, and it shall be for a token of a covenant between me and the earth. +And it shall come to pass, when I bring a cloud over the earth, that the bow shall be seen in the cloud: +And I will remember my covenant, which is between me and you and every living creature of all flesh; and the waters shall no more become a flood to destroy all flesh. +And the bow shall be in the cloud; and I will look upon it, that I may remember the everlasting covenant between God and every living creature of all flesh that is upon the earth. +And God said unto Noah, This is the token of the covenant, which I have established between me and all flesh that is upon the earth. +And the sons of Noah, that went forth of the ark, were Shem, and Ham, and Japheth: and Ham is the father of Canaan. +These are the three sons of Noah: and of them was the whole earth overspread. +And Noah began to be an husbandman, and he planted a vineyard: +And he drank of the wine, and was drunken; and he was uncovered within his tent. +And Ham, the father of Canaan, saw the nakedness of his father, and told his two brethren without. +And Shem and Japheth took a garment, and laid it upon both their shoulders, and went backward, and covered the nakedness of their father; and their faces were backward, and they saw not their father's nakedness. +And Noah awoke from his wine, and knew what his younger son had done unto him. +And he said, Cursed be Canaan; a servant of servants shall he be unto his brethren. +And he said, Blessed be the LORD God of Shem; and Canaan shall be his servant. +God shall enlarge Japheth, and he shall dwell in the tents of Shem; and Canaan shall be his servant. +And Noah lived after the flood three hundred and fifty years. +And all the days of Noah were nine hundred and fifty years: and he died. + +10. +Now these are the generations of the sons of Noah, Shem, Ham, and Japheth: and unto them were sons born after the flood. +The sons of Japheth; Gomer, and Magog, and Madai, and Javan, and Tubal, and Meshech, and Tiras. +And the sons of Gomer; Ashkenaz, and Riphath, and Togarmah. +And the sons of Javan; Elishah, and Tarshish, Kittim, and Dodanim. +By these were the isles of the Gentiles divided in their lands; every one after his tongue, after their families, in their nations. +And the sons of Ham; Cush, and Mizraim, and Phut, and Canaan. +And the sons of Cush; Seba, and Havilah, and Sabtah, and Raamah, and Sabtecha: and the sons of Raamah; Sheba, and Dedan. +And Cush begat Nimrod: he began to be a mighty one in the earth. +He was a mighty hunter before the LORD: wherefore it is said, Even as Nimrod the mighty hunter before the LORD. +And the beginning of his kingdom was Babel, and Erech, and Accad, and Calneh, in the land of Shinar. +Out of that land went forth Asshur, and builded Nineveh, and the city Rehoboth, and Calah, +And Resen between Nineveh and Calah: the same is a great city. +And Mizraim begat Ludim, and Anamim, and Lehabim, and Naphtuhim, +And Pathrusim, and Casluhim, (out of whom came Philistim,) and Caphtorim. +And Canaan begat Sidon his firstborn, and Heth, +And the Jebusite, and the Amorite, and the Girgasite, +And the Hivite, and the Arkite, and the Sinite, +And the Arvadite, and the Zemarite, and the Hamathite: and afterward were the families of the Canaanites spread abroad. +And the border of the Canaanites was from Sidon, as thou comest to Gerar, unto Gaza; as thou goest, unto Sodom, and Gomorrah, and Admah, and Zeboim, even unto Lasha. +These are the sons of Ham, after their families, after their tongues, in their countries, and in their nations. +Unto Shem also, the father of all the children of Eber, the brother of Japheth the elder, even to him were children born. +The children of Shem; Elam, and Asshur, and Arphaxad, and Lud, and Aram. +And the children of Aram; Uz, and Hul, and Gether, and Mash. +And Arphaxad begat Salah; and Salah begat Eber. +And unto Eber were born two sons: the name of one was Peleg; for in his days was the earth divided; and his brother's name was Joktan. +And Joktan begat Almodad, and Sheleph, and Hazar-maveth, and Jerah, +And Hadoram, and Uzal, and Diklah, +And Obal, and Abimael, and Sheba, +And Ophir, and Havilah, and Jobab: all these were the sons of Joktan. +And their dwelling was from Mesha, as thou goest unto Sephar a mount of the east. +These are the sons of Shem, after their families, after their tongues, in their lands, after their nations. +These are the families of the sons of Noah, after their generations, in their nations: and by these were the nations divided in the earth after the flood. + +11. +And the whole earth was of one language, and of one speech. +And it came to pass, as they journeyed from the east, that they found a plain in the land of Shinar; and they dwelt there. +And they said one to another, Go to, let us make brick, and burn them throughly. And they had brick for stone, and slime had they for morter. +And they said, Go to, let us build us a city and a tower, whose top may reach unto heaven; and let us make us a name, lest we be scattered abroad upon the face of the whole earth. +And the LORD came down to see the city and the tower, which the children of men builded. +And the LORD said, Behold, the people is one, and they have all one language; and this they begin to do: and now nothing will be restrained from them, which they have imagined to do. +Go to, let us go down, and there confound their language, that they may not understand one another's speech. +So the LORD scattered them abroad from thence upon the face of all the earth: and they left off to build the city. +Therefore is the name of it called Babel; because the LORD did there confound the language of all the earth: and from thence did the LORD scatter them abroad upon the face of all the earth. +These are the generations of Shem: Shem was an hundred years old, and begat Arphaxad two years after the flood: +And Shem lived after he begat Arphaxad five hundred years, and begat sons and daughters. +And Arphaxad lived five and thirty years, and begat Salah: +And Arphaxad lived after he begat Salah four hundred and three years, and begat sons and daughters. +And Salah lived thirty years, and begat Eber: +And Salah lived after he begat Eber four hundred and three years, and begat sons and daughters. +And Eber lived four and thirty years, and begat Peleg: +And Eber lived after he begat Peleg four hundred and thirty years, and begat sons and daughters. +And Peleg lived thirty years, and begat Reu: +And Peleg lived after he begat Reu two hundred and nine years, and begat sons and daughters. +And Reu lived two and thirty years, and begat Serug: +And Reu lived after he begat Serug two hundred and seven years, and begat sons and daughters. +And Serug lived thirty years, and begat Nahor: +And Serug lived after he begat Nahor two hundred years, and begat sons and daughters. +And Nahor lived nine and twenty years, and begat Terah: +And Nahor lived after he begat Terah an hundred and nineteen years, and begat sons and daughters. +And Terah lived seventy years, and begat Abram, Nahor, and Haran. +Now these are the generations of Terah: Terah begat Abram, Nahor, and Haran; and Haran begat Lot. +And Haran died before his father Terah in the land of his nativity, in Ur of the Chaldees. +And Abram and Nahor took them wives: the name of Abram's wife was Sarai; and the name of Nahor's wife, Milcah, the daughter of Haran, the father of Milcah, and the father of Iscah. +But Sarai was barren; she had no child. +And Terah took Abram his son, and Lot the son of Haran his son's son, and Sarai his daughter in law, his son Abram's wife; and they went forth with them from Ur of the Chaldees, to go into the land of Canaan; and they came unto Haran, and dwelt there. +And the days of Terah were two hundred and five years: and Terah died in Haran. + +12. +Now the LORD had said unto Abram, Get thee out of thy country, and from thy kindred, and from thy father's house, unto a land that I will shew thee: +And I will make of thee a great nation, and I will bless thee, and make thy name great; and thou shalt be a blessing: +And I will bless them that bless thee, and curse him that curseth thee: and in thee shall all families of the earth be blessed. +So Abram departed, as the LORD had spoken unto him; and Lot went with him: and Abram was seventy and five years old when he departed out of Haran. +And Abram took Sarai his wife, and Lot his brother's son, and all their substance that they had gathered, and the souls that they had gotten in Haran; and they went forth to go into the land of Canaan; and into the land of Canaan they came. +And Abram passed through the land unto the place of Sichem, unto the plain of Moreh. And the Canaanite was then in the land. +And the LORD appeared unto Abram, and said, Unto thy seed will I give this land: and there builded he an altar unto the LORD, who appeared unto him. +And he removed from thence unto a mountain on the east of Bethel, and pitched his tent, having Bethel on the west, and Hai on the east: and there he builded an altar unto the LORD, and called upon the name of the LORD. +And Abram journeyed, going on still toward the south. +And there was a famine in the land: and Abram went down into Egypt to sojourn there; for the famine was grievous in the land. +And it came to pass, when he was come near to enter into Egypt, that he said unto Sarai his wife, Behold now, I know that thou art a fair woman to look upon: +Therefore it shall come to pass, when the Egyptians shall see thee, that they shall say, This is his wife: and they will kill me, but they will save thee alive. +Say, I pray thee, thou art my sister: that it may be well with me for thy sake; and my soul shall live because of thee. +And it came to pass, that, when Abram was come into Egypt, the Egyptians beheld the woman that she was very fair. +The princes also of Pharaoh saw her, and commended her before Pharaoh: and the woman was taken into Pharaoh's house. +And he entreated Abram well for her sake: and he had sheep, and oxen, and he asses, and menservants, and maidservants, and she asses, and camels. +And the LORD plagued Pharaoh and his house with great plagues because of Sarai Abram's wife. +And Pharaoh called Abram, and said, What is this that thou hast done unto me? why didst thou not tell me that she was thy wife? +Why saidst thou, She is my sister? so I might have taken her to me to wife: now therefore behold thy wife, take her, and go thy way. +And Pharaoh commanded his men concerning him: and they sent him away, and his wife, and all that he had. + +13. +And Abram went up out of Egypt, he, and his wife, and all that he had, and Lot with him, into the south. +And Abram was very rich in cattle, in silver, and in gold. +And he went on his journeys from the south even to Bethel, unto the place where his tent had been at the beginning, between Bethel and Hai; +Unto the place of the altar, which he had made there at the first: and there Abram called on the name of the LORD. +And Lot also, which went with Abram, had flocks, and herds, and tents. +And the land was not able to bear them, that they might dwell together: for their substance was great, so that they could not dwell together. +And there was a strife between the herdmen of Abram's cattle and the herdmen of Lot's cattle: and the Canaanite and the Perizzite dwelled then in the land. +And Abram said unto Lot, Let there be no strife, I pray thee, between me and thee, and between my herdmen and thy herdmen; for we be brethren. +Is not the whole land before thee? separate thyself, I pray thee, from me: if thou wilt take the left hand, then I will go to the right; or if thou depart to the right hand, then I will go to the left. +And Lot lifted up his eyes, and beheld all the plain of Jordan, that it was well watered every where, before the LORD destroyed Sodom and Gomorrah, even as the garden of the LORD, like the land of Egypt, as thou comest unto Zoar. +Then Lot chose him all the plain of Jordan; and Lot journeyed east: and they separated themselves the one from the other. +Abram dwelled in the land of Canaan, and Lot dwelled in the cities of the plain, and pitched his tent toward Sodom. +But the men of Sodom were wicked and sinners before the LORD exceedingly. +And the LORD said unto Abram, after that Lot was separated from him, Lift up now thine eyes, and look from the place where thou art northward, and southward, and eastward, and westward: +For all the land which thou seest, to thee will I give it, and to thy seed for ever. +And I will make thy seed as the dust of the earth: so that if a man can number the dust of the earth, then shall thy seed also be numbered. +Arise, walk through the land in the length of it and in the breadth of it; for I will give it unto thee. +Then Abram removed his tent, and came and dwelt in the plain of Mamre, which is in Hebron, and built there an altar unto the LORD. + +14. +And it came to pass in the days of Amraphel king of Shinar, Arioch king of Ellasar, Chedorlaomer king of Elam, and Tidal king of nations; +That these made war with Bera king of Sodom, and with Birsha king of Gomorrah, Shinab king of Admah, and Shemeber king of Zeboiim, and the king of Bela, which is Zoar. +All these were joined together in the vale of Siddim, which is the salt sea. +Twelve years they served Chedorlaomer, and in the thirteenth year they rebelled. +And in the fourteenth year came Chedorlaomer, and the kings that were with him, and smote the Rephaims in Ashteroth Karnaim, and the Zuzims in Ham, and the Emims in Shaveh Kiriathaim, +And the Horites in their mount Seir, unto El-paran, which is by the wilderness. +And they returned, and came to En-mishpat, which is Kadesh, and smote all the country of the Amalekites, and also the Amorites that dwelt in Hazezon-tamar. +And there went out the king of Sodom, and the king of Gomorrah, and the king of Admah, and the king of Zeboiim, and the king of Bela (the same is Zoar;) and they joined battle with them in the vale of Siddim; +With Chedorlaomer the king of Elam, and with Tidal king of nations, and Amraphel king of Shinar, and Arioch king of Ellasar; four kings with five. +And the vale of Siddim was full of slimepits; and the kings of Sodom and Gomorrah fled, and fell there; and they that remained fled to the mountain. +And they took all the goods of Sodom and Gomorrah, and all their victuals, and went their way. +And they took Lot, Abram's brother's son, who dwelt in Sodom, and his goods, and departed. +And there came one that had escaped, and told Abram the Hebrew; for he dwelt in the plain of Mamre the Amorite, brother of Eschol, and brother of Aner: and these were confederate with Abram. +And when Abram heard that his brother was taken captive, he armed his trained servants, born in his own house, three hundred and eighteen, and pursued them unto Dan. +And he divided himself against them, he and his servants, by night, and smote them, and pursued them unto Hobah, which is on the left hand of Damascus. +And he brought back all the goods, and also brought again his brother Lot, and his goods, and the women also, and the people. +And the king of Sodom went out to meet him after his return from the slaughter of Chedorlaomer, and of the kings that were with him, at the valley of Shaveh, which is the king's dale. +And Melchizedek king of Salem brought forth bread and wine: and he was the priest of the most high God. +And he blessed him, and said, Blessed be Abram of the most high God, possessor of heaven and earth: +And blessed be the most high God, which hath delivered thine enemies into thy hand. And he gave him tithes of all. +And the king of Sodom said unto Abram, Give me the persons, and take the goods to thyself. +And Abram said to the king of Sodom, I have lift up mine hand unto the LORD, the most high God, the possessor of heaven and earth, +That I will not take from a thread even to a shoelatchet, and that I will not take any thing that is thine, lest thou shouldest say, I have made Abram rich: +Save only that which the young men have eaten, and the portion of the men which went with me, Aner, Eshcol, and Mamre; let them take their portion. + +15. +After these things the word of the LORD came unto Abram in a vision, saying, Fear not, Abram: I am thy shield, and thy exceeding great reward. +And Abram said, Lord GOD, what wilt thou give me, seeing I go childless, and the steward of my house is this Eliezer of Damascus? +And Abram said, Behold, to me thou hast given no seed: and, lo, one born in my house is mine heir. +And, behold, the word of the LORD came unto him, saying, This shall not be thine heir; but he that shall come forth out of thine own bowels shall be thine heir. +And he brought him forth abroad, and said, Look now toward heaven, and tell the stars, if thou be able to number them: and he said unto him, So shall thy seed be. +And he believed in the LORD; and he counted it to him for righteousness. +And he said unto him, I am the LORD that brought thee out of Ur of the Chaldees, to give thee this land to inherit it. +And he said, Lord GOD, whereby shall I know that I shall inherit it? +And he said unto him, Take me an heifer of three years old, and a she goat of three years old, and a ram of three years old, and a turtledove, and a young pigeon. +And he took unto him all these, and divided them in the midst, and laid each piece one against another: but the birds divided he not. +And when the fowls came down upon the carcases, Abram drove them away. +And when the sun was going down, a deep sleep fell upon Abram; and, lo, an horror of great darkness fell upon him. +And he said unto Abram, Know of a surety that thy seed shall be a stranger in a land that is not theirs, and shall serve them; and they shall afflict them four hundred years; +And also that nation, whom they shall serve, will I judge: and afterward shall they come out with great substance. +And thou shalt go to thy fathers in peace; thou shalt be buried in a good old age. +But in the fourth generation they shall come hither again: for the iniquity of the Amorites is not yet full. +And it came to pass, that, when the sun went down, and it was dark, behold a smoking furnace, and a burning lamp that passed between those pieces. +In the same day the LORD made a covenant with Abram, saying, Unto thy seed have I given this land, from the river of Egypt unto the great river, the river Euphrates: +The Kenites, and the Kenizzites, and the Kadmonites, +And the Hittites, and the Perizzites, and the Rephaims, +And the Amorites, and the Canaanites, and the Girgashites, and the Jebusites. + +16. +Now Sarai Abram's wife bare him no children: and she had an handmaid, an Egyptian, whose name was Hagar. +And Sarai said unto Abram, Behold now, the LORD hath restrained me from bearing: I pray thee, go in unto my maid; it may be that I may obtain children by her. And Abram hearkened to the voice of Sarai. +And Sarai Abram's wife took Hagar her maid the Egyptian, after Abram had dwelt ten years in the land of Canaan, and gave her to her husband Abram to be his wife. +And he went in unto Hagar, and she conceived: and when she saw that she had conceived, her mistress was despised in her eyes. +And Sarai said unto Abram, My wrong be upon thee: I have given my maid into thy bosom; and when she saw that she had conceived, I was despised in her eyes: the LORD judge between me and thee. +But Abram said unto Sarai, Behold, thy maid is in thy hand; do to her as it pleaseth thee. And when Sarai dealt hardly with her, she fled from her face. +And the angel of the LORD found her by a fountain of water in the wilderness, by the fountain in the way to Shur. +And he said, Hagar, Sarai's maid, whence camest thou? and whither wilt thou go? And she said, I flee from the face of my mistress Sarai. +And the angel of the LORD said unto her, Return to thy mistress, and submit thyself under her hands. +And the angel of the LORD said unto her, I will multiply thy seed exceedingly, that it shall not be numbered for multitude. +And the angel of the LORD said unto her, Behold, thou art with child, and shalt bear a son, and shalt call his name Ishmael; because the LORD hath heard thy affliction. +And he will be a wild man; his hand will be against every man, and every man's hand against him; and he shall dwell in the presence of all his brethren. +And she called the name of the LORD that spake unto her, Thou God seest me: for she said, Have I also here looked after him that seeth me? +Wherefore the well was called Beer-lahai-roi; behold, it is between Kadesh and Bered. +And Hagar bare Abram a son: and Abram called his son's name, which Hagar bare, Ishmael. +And Abram was fourscore and six years old, when Hagar bare Ishmael to Abram. + +17. +And when Abram was ninety years old and nine, the LORD appeared to Abram, and said unto him, I am the Almighty God; walk before me, and be thou perfect. +And I will make my covenant between me and thee, and will multiply thee exceedingly. +And Abram fell on his face: and God talked with him, saying, +As for me, behold, my covenant is with thee, and thou shalt be a father of many nations. +Neither shall thy name any more be called Abram, but thy name shall be Abraham; for a father of many nations have I made thee. +And I will make thee exceeding fruitful, and I will make nations of thee, and kings shall come out of thee. +And I will establish my covenant between me and thee and thy seed after thee in their generations for an everlasting covenant, to be a God unto thee, and to thy seed after thee. +And I will give unto thee, and to thy seed after thee, the land wherein thou art a stranger, all the land of Canaan, for an everlasting possession; and I will be their God. +And God said unto Abraham, Thou shalt keep my covenant therefore, thou, and thy seed after thee in their generations. +This is my covenant, which ye shall keep, between me and you and thy seed after thee; Every man child among you shall be circumcised. +And ye shall circumcise the flesh of your foreskin; and it shall be a token of the covenant betwixt me and you. +And he that is eight days old shall be circumcised among you, every man child in your generations, he that is born in the house, or bought with money of any stranger, which is not of thy seed. +He that is born in thy house, and he that is bought with thy money, must needs be circumcised: and my covenant shall be in your flesh for an everlasting covenant. +And the uncircumcised man child whose flesh of his foreskin is not circumcised, that soul shall be cut off from his people; he hath broken my covenant. +And God said unto Abraham, As for Sarai thy wife, thou shalt not call her name Sarai, but Sarah shall her name be. +And I will bless her, and give thee a son also of her: yea, I will bless her, and she shall be a mother of nations; kings of people shall be of her. +Then Abraham fell upon his face, and laughed, and said in his heart, Shall a child be born unto him that is an hundred years old? and shall Sarah, that is ninety years old, bear? +And Abraham said unto God, O that Ishmael might live before thee! +And God said, Sarah thy wife shall bear thee a son indeed; and thou shalt call his name Isaac: and I will establish my covenant with him for an everlasting covenant, and with his seed after him. +And as for Ishmael, I have heard thee: Behold, I have blessed him, and will make him fruitful, and will multiply him exceedingly; twelve princes shall he beget, and I will make him a great nation. +But my covenant will I establish with Isaac, which Sarah shall bear unto thee at this set time in the next year. +And he left off talking with him, and God went up from Abraham. +And Abraham took Ishmael his son, and all that were born in his house, and all that were bought with his money, every male among the men of Abraham's house; and circumcised the flesh of their foreskin in the selfsame day, as God had said unto him. +And Abraham was ninety years old and nine, when he was circumcised in the flesh of his foreskin. +And Ishmael his son was thirteen years old, when he was circumcised in the flesh of his foreskin. +In the selfsame day was Abraham circumcised, and Ishmael his son. +And all the men of his house, born in the house, and bought with money of the stranger, were circumcised with him. + +18. +And the LORD appeared unto him in the plains of Mamre: and he sat in the tent door in the heat of the day; +And he lift up his eyes and looked, and, lo, three men stood by him: and when he saw them, he ran to meet them from the tent door, and bowed himself toward the ground, +And said, My Lord, if now I have found favour in thy sight, pass not away, I pray thee, from thy servant: +Let a little water, I pray you, be fetched, and wash your feet, and rest yourselves under the tree: +And I will fetch a morsel of bread, and comfort ye your hearts; after that ye shall pass on: for therefore are ye come to your servant. And they said, So do, as thou hast said. +And Abraham hastened into the tent unto Sarah, and said, Make ready quickly three measures of fine meal, knead it, and make cakes upon the hearth. +And Abraham ran unto the herd, and fetcht a calf tender and good, and gave it unto a young man; and he hasted to dress it. +And he took butter, and milk, and the calf which he had dressed, and set it before them; and he stood by them under the tree, and they did eat. +And they said unto him, Where is Sarah thy wife? And he said, Behold, in the tent. +And he said, I will certainly return unto thee according to the time of life; and, lo, Sarah thy wife shall have a son. And Sarah heard it in the tent door, which was behind him. +Now Abraham and Sarah were old and well stricken in age; and it ceased to be with Sarah after the manner of women. +Therefore Sarah laughed within herself, saying, After I am waxed old shall I have pleasure, my lord being old also? +And the LORD said unto Abraham, Wherefore did Sarah laugh, saying, Shall I of a surety bear a child, which am old? +Is any thing too hard for the LORD? At the time appointed I will return unto thee, according to the time of life, and Sarah shall have a son. +Then Sarah denied, saying, I laughed not; for she was afraid. And he said, Nay; but thou didst laugh. +And the men rose up from thence, and looked toward Sodom: and Abraham went with them to bring them on the way. +And the LORD said, Shall I hide from Abraham that thing which I do; +Seeing that Abraham shall surely become a great and mighty nation, and all the nations of the earth shall be blessed in him? +For I know him, that he will command his children and his household after him, and they shall keep the way of the LORD, to do justice and judgment; that the LORD may bring upon Abraham that which he hath spoken of him. +And the LORD said, Because the cry of Sodom and Gomorrah is great, and because their sin is very grievous; +I will go down now, and see whether they have done altogether according to the cry of it, which is come unto me; and if not, I will know. +And the men turned their faces from thence, and went toward Sodom: but Abraham stood yet before the LORD. +And Abraham drew near, and said, Wilt thou also destroy the righteous with the wicked? +Peradventure there be fifty righteous within the city: wilt thou also destroy and not spare the place for the fifty righteous that are therein? +That be far from thee to do after this manner, to slay the righteous with the wicked: and that the righteous should be as the wicked, that be far from thee: Shall not the Judge of all the earth do right? +And the LORD said, If I find in Sodom fifty righteous within the city, then I will spare all the place for their sakes. +And Abraham answered and said, Behold now, I have taken upon me to speak unto the Lord, which am but dust and ashes: +Peradventure there shall lack five of the fifty righteous: wilt thou destroy all the city for lack of five? And he said, If I find there forty and five, I will not destroy it. +And he spake unto him yet again, and said, Peradventure there shall be forty found there. And he said, I will not do it for forty's sake. +And he said unto him, Oh let not the Lord be angry, and I will speak: Peradventure there shall thirty be found there. And he said, I will not do it, if I find thirty there. +And he said, Behold now, I have taken upon me to speak unto the Lord: Peradventure there shall be twenty found there. And he said, I will not destroy it for twenty's sake. +And he said, Oh let not the Lord be angry, and I will speak yet but this once: Peradventure ten shall be found there. And he said, I will not destroy it for ten's sake. +And the LORD went his way, as soon as he had left communing with Abraham: and Abraham returned unto his place. + +19. +And there came two angels to Sodom at even; and Lot sat in the gate of Sodom: and Lot seeing them rose up to meet them; and he bowed himself with his face toward the ground; +And he said, Behold now, my lords, turn in, I pray you, into your servant's house, and tarry all night, and wash your feet, and ye shall rise up early, and go on your ways. And they said, Nay; but we will abide in the street all night. +And he pressed upon them greatly; and they turned in unto him, and entered into his house; and he made them a feast, and did bake unleavened bread, and they did eat. +But before they lay down, the men of the city, even the men of Sodom, compassed the house round, both old and young, all the people from every quarter: +And they called unto Lot, and said unto him, Where are the men which came in to thee this night? bring them out unto us, that we may know them. +And Lot went out at the door unto them, and shut the door after him, +And said, I pray you, brethren, do not so wickedly. +Behold now, I have two daughters which have not known man; let me, I pray you, bring them out unto you, and do ye to them as is good in your eyes: only unto these men do nothing; for therefore came they under the shadow of my roof. +And they said, Stand back. And they said again, This one fellow came in to sojourn, and he will needs be a judge: now will we deal worse with thee, than with them. And they pressed sore upon the man, even Lot, and came near to break the door. +But the men put forth their hand, and pulled Lot into the house to them, and shut to the door. +And they smote the men that were at the door of the house with blindness, both small and great: so that they wearied themselves to find the door. +And the men said unto Lot, Hast thou here any besides? son in law, and thy sons, and thy daughters, and whatsoever thou hast in the city, bring them out of this place: +For we will destroy this place, because the cry of them is waxen great before the face of the LORD; and the LORD hath sent us to destroy it. +And Lot went out, and spake unto his sons in law, which married his daughters, and said, Up, get you out of this place; for the LORD will destroy this city. But he seemed as one that mocked unto his sons in law. +And when the morning arose, then the angels hastened Lot, saying, Arise, take thy wife, and thy two daughters, which are here; lest thou be consumed in the iniquity of the city. +And while he lingered, the men laid hold upon his hand, and upon the hand of his wife, and upon the hand of his two daughters; the LORD being merciful unto him: and they brought him forth, and set him without the city. +And it came to pass, when they had brought them forth abroad, that he said, Escape for thy life; look not behind thee, neither stay thou in all the plain; escape to the mountain, lest thou be consumed. +And Lot said unto them, Oh, not so, my Lord: +Behold now, thy servant hath found grace in thy sight, and thou hast magnified thy mercy, which thou hast shewed unto me in saving my life; and I cannot escape to the mountain, lest some evil take me, and I die: +Behold now, this city is near to flee unto, and it is a little one: Oh, let me escape thither, (is it not a little one?) and my soul shall live. +And he said unto him, See, I have accepted thee concerning this thing also, that I will not overthrow this city, for the which thou hast spoken. +Haste thee, escape thither; for I cannot do any thing till thou be come thither. Therefore the name of the city was called Zoar. +The sun was risen upon the earth when Lot entered into Zoar. +Then the LORD rained upon Sodom and upon Gomorrah brimstone and fire from the LORD out of heaven; +And he overthrew those cities, and all the plain, and all the inhabitants of the cities, and that which grew upon the ground. +But his wife looked back from behind him, and she became a pillar of salt. +And Abraham gat up early in the morning to the place where he stood before the LORD: +And he looked toward Sodom and Gomorrah, and toward all the land of the plain, and beheld, and, lo, the smoke of the country went up as the smoke of a furnace. +And it came to pass, when God destroyed the cities of the plain, that God remembered Abraham, and sent Lot out of the midst of the overthrow, when he overthrew the cities in the which Lot dwelt. +And Lot went up out of Zoar, and dwelt in the mountain, and his two daughters with him; for he feared to dwell in Zoar: and he dwelt in a cave, he and his two daughters. +And the firstborn said unto the younger, Our father is old, and there is not a man in the earth to come in unto us after the manner of all the earth: +Come, let us make our father drink wine, and we will lie with him, that we may preserve seed of our father. +And they made their father drink wine that night: and the firstborn went in, and lay with her father; and he perceived not when she lay down, nor when she arose. +And it came to pass on the morrow, that the firstborn said unto the younger, Behold, I lay yesternight with my father: let us make him drink wine this night also; and go thou in, and lie with him, that we may preserve seed of our Father. +And they made their father drink wine that night also: and the younger arose, and lay with him; and he perceived not when she lay down, nor when she arose. +Thus were both the daughters of Lot with child by their father. +And the firstborn bare a son, and called his name Moab: the same is the father of the Moabites unto this day. +And the younger, she also bare a son, and called his name Benammi: the same is the father of the children of Ammon unto this day. + +20. +And Abraham journeyed from thence toward the south country, and dwelled between Kadesh and Shur, and sojourned in Gerar. +And Abraham said of Sarah his wife, She is my sister: and Abimelech king of Gerar sent, and took Sarah. +But God came to Abimelech in a dream by night, and said to him, Behold, thou art but a dead man, for the woman which thou hast taken; for she is a man's wife. +But Abimelech had not come near her: and he said, Lord, wilt thou slay also a righteous nation? +Said he not unto me, She is my sister? and she, even she herself said, He is my brother: in the integrity of my heart and innocency of my hands have I done this. +And God said unto him in a dream, Yea, I know that thou didst this in the integrity of thy heart; for I also withheld thee from sinning against me: therefore suffered I thee not to touch her. +Now therefore restore the man his wife; for he is a prophet, and he shall pray for thee, and thou shalt live: and if thou restore her not, know thou that thou shalt surely die, thou, and all that are thine. +Therefore Abimelech rose early in the morning, and called all his servants, and told all these things in their ears: and the men were sore afraid. +Then Abimelech called Abraham, and said unto him, What hast thou done unto us? and what have I offended thee, that thou hast brought on me and on my kingdom a great sin? thou hast done deeds unto me that ought not to be done. +And Abimelech said unto Abraham, What sawest thou, that thou hast done this thing? +And Abraham said, Because I thought, Surely the fear of God is not in this place; and they will slay me for my wife's sake. +And yet indeed she is my sister; she is the daughter of my father, but not the daughter of my mother; and she became my wife. +And it came to pass, when God caused me to wander from my father's house, that I said unto her, This is thy kindness which thou shalt shew unto me; at every place whither we shall come, say of me, He is my brother. +And Abimelech took sheep, and oxen, and menservants, and womenservants, and gave them unto Abraham, and restored him Sarah his wife. +And Abimelech said, Behold, my land is before thee: dwell where it pleaseth thee. +And unto Sarah he said, Behold, I have given thy brother a thousand pieces of silver: behold, he is to thee a covering of the eyes, unto all that are with thee, and with all other: thus she was reproved. +So Abraham prayed unto God: and God healed Abimelech, and his wife, and his maidservants; and they bare children. +For the LORD had fast closed up all the wombs of the house of Abimelech, because of Sarah Abraham's wife. + +21. +And the LORD visited Sarah as he had said, and the LORD did unto Sarah as he had spoken. +For Sarah conceived, and bare Abraham a son in his old age, at the set time of which God had spoken to him. +And Abraham called the name of his son that was born unto him, whom Sarah bare to him, Isaac. +And Abraham circumcised his son Isaac being eight days old, as God had commanded him. +And Abraham was an hundred years old, when his son Isaac was born unto him. +And Sarah said, God hath made me to laugh, so that all that hear will laugh with me. +And she said, Who would have said unto Abraham, that Sarah should have given children suck? for I have born him a son in his old age. +And the child grew, and was weaned: and Abraham made a great feast the same day that Isaac was weaned. +And Sarah saw the son of Hagar the Egyptian, which she had born unto Abraham, mocking. +Wherefore she said unto Abraham, Cast out this bondwoman and her son: for the son of this bondwoman shall not be heir with my son, even with Isaac. +And the thing was very grievous in Abraham's sight because of his son. +And God said unto Abraham, Let it not be grievous in thy sight because of the lad, and because of thy bondwoman; in all that Sarah hath said unto thee, hearken unto her voice; for in Isaac shall thy seed be called. +And also of the son of the bondwoman will I make a nation, because he is thy seed. +And Abraham rose up early in the morning, and took bread, and a bottle of water, and gave it unto Hagar, putting it on her shoulder, and the child, and sent her away: and she departed, and wandered in the wilderness of Beer-sheba. +And the water was spent in the bottle, and she cast the child under one of the shrubs. +And she went, and sat her down over against him a good way off, as it were a bowshot: for she said, Let me not see the death of the child. And she sat over against him, and lift up her voice, and wept. +And God heard the voice of the lad; and the angel of God called Hagar out of heaven, and said unto her, What aileth thee, Hagar? fear not; for God hath heard the voice of the lad where he is. +Arise, lift up the lad, and hold him in thine hand; for I will make him a great nation. +And God opened her eyes, and she saw a well of water; and she went, and filled the bottle with water, and gave the lad drink. +And God was with the lad; and he grew, and dwelt in the wilderness, and became an archer. +And he dwelt in the wilderness of Paran: and his mother took him a wife out of the land of Egypt. +And it came to pass at that time, that Abimelech and Phichol the chief captain of his host spake unto Abraham, saying, God is with thee in all that thou doest: +Now therefore swear unto me here by God that thou wilt not deal falsely with me, nor with my son, nor with my son's son: but according to the kindness that I have done unto thee, thou shalt do unto me, and to the land wherein thou hast sojourned. +And Abraham said, I will swear. +And Abraham reproved Abimelech because of a well of water, which Abimelech's servants had violently taken away. +And Abimelech said, I wot not who hath done this thing: neither didst thou tell me, neither yet heard I of it, but to day. +And Abraham took sheep and oxen, and gave them unto Abimelech; and both of them made a covenant. +And Abraham set seven ewe lambs of the flock by themselves. +And Abimelech said unto Abraham, What mean these seven ewe lambs which thou hast set by themselves? +And he said, For these seven ewe lambs shalt thou take of my hand, that they may be a witness unto me, that I have digged this well. +Wherefore he called that place Beer-sheba; because there they sware both of them. +Thus they made a covenant at Beer-sheba: then Abimelech rose up, and Phichol the chief captain of his host, and they returned into the land of the Philistines. +And Abraham planted a grove in Beer-sheba, and called there on the name of the LORD, the everlasting God. +And Abraham sojourned in the Philistines' land many days. + +22. +And it came to pass after these things, that God did tempt Abraham, and said unto him, Abraham: and he said, Behold, here I am. +And he said, Take now thy son, thine only son Isaac, whom thou lovest, and get thee into the land of Moriah; and offer him there for a burnt offering upon one of the mountains which I will tell thee of. +And Abraham rose up early in the morning, and saddled his ass, and took two of his young men with him, and Isaac his son, and clave the wood for the burnt offering, and rose up, and went unto the place of which God had told him. +Then on the third day Abraham lifted up his eyes, and saw the place afar off. +And Abraham said unto his young men, Abide ye here with the ass; and I and the lad will go yonder and worship, and come again to you, +And Abraham took the wood of the burnt offering, and laid it upon Isaac his son; and he took the fire in his hand, and a knife; and they went both of them together. +And Isaac spake unto Abraham his father, and said, My father: and he said, Here am I, my son. And he said, Behold the fire and the wood: but where is the lamb for a burnt offering? +And Abraham said, My son, God will provide himself a lamb for a burnt offering: so they went both of them together. +And they came to the place which God had told him of; and Abraham built an altar there, and laid the wood in order, and bound Isaac his son, and laid him on the altar upon the wood. +And Abraham stretched forth his hand, and took the knife to slay his son. +And the angel of the LORD called unto him out of heaven, and said, Abraham, Abraham: and he said, Here am I. +And he said, Lay not thine hand upon the lad, neither do thou any thing unto him: for now I know that thou fearest God, seeing thou hast not withheld thy son, thine only son from me. +And Abraham lifted up his eyes, and looked, and behold behind him a ram caught in a thicket by his horns: and Abraham went and took the ram, and offered him up for a burnt offering in the stead of his son. +And Abraham called the name of that place Jehovah-jireh: as it is said to this day, In the mount of the LORD it shall be seen. +And the angel of the LORD called unto Abraham out of heaven the second time, +And said, By myself have I sworn, saith the LORD, for because thou hast done this thing, and hast not withheld thy son, thine only son: +That in blessing I will bless thee, and in multiplying I will multiply thy seed as the stars of the heaven, and as the sand which is upon the sea shore; and thy seed shall possess the gate of his enemies; +And in thy seed shall all the nations of the earth be blessed; because thou hast obeyed my voice. +So Abraham returned unto his young men, and they rose up and went together to Beer-sheba; and Abraham dwelt at Beer-sheba. +And it came to pass after these things, that it was told Abraham, saying, Behold, Milcah, she hath also born children unto thy brother Nahor; +Huz his firstborn, and Buz his brother, and Kemuel the father of Aram, +And Chesed, and Hazo, and Pildash, and Jidlaph, and Bethuel. +And Bethuel begat Rebekah: these eight Milcah did bear to Nahor, Abraham's brother. +And his concubine, whose name was Reumah, she bare also Tebah, and Gaham, and Thahash, and Maachah. + +23. +And Sarah was an hundred and seven and twenty years old: these were the years of the life of Sarah. +And Sarah died in Kirjath-arba; the same is Hebron in the land of Canaan: and Abraham came to mourn for Sarah, and to weep for her. +And Abraham stood up from before his dead, and spake unto the sons of Heth, saying, +I am a stranger and a sojourner with you: give me a possession of a buryingplace with you, that I may bury my dead out of my sight. +And the children of Heth answered Abraham, saying unto him, +Hear us, my lord: thou art a mighty prince among us: in the choice of our sepulchres bury thy dead; none of us shall withhold from thee his sepulchre, but that thou mayest bury thy dead. +And Abraham stood up, and bowed himself to the people of the land, even to the children of Heth. +And he communed with them, saying, If it be your mind that I should bury my dead out of my sight; hear me, and intreat for me to Ephron the son of Zohar, +That he may give me the cave of Machpelah, which he hath, which is in the end of his field; for as much money as it is worth he shall give it me for a possession of a buryingplace amongst you. +And Ephron dwelt among the children of Heth: and Ephron the Hittite answered Abraham in the audience of the children of Heth, even of all that went in at the gate of his city, saying, +Nay, my lord, hear me: the field give I thee, and the cave that is therein, I give it thee; in the presence of the sons of my people give I it thee: bury thy dead. +And Abraham bowed down himself before the people of the land. +And he spake unto Ephron in the audience of the people of the land, saying, But if thou wilt give it, I pray thee, hear me: I will give thee money for the field; take it of me, and I will bury my dead there. +And Ephron answered Abraham, saying unto him, +My lord, hearken unto me: the land is worth four hundred shekels of silver; what is that betwixt me and thee? bury therefore thy dead. +And Abraham hearkened unto Ephron; and Abraham weighed to Ephron the silver, which he had named in the audience of the sons of Heth, four hundred shekels of silver, current money with the merchant. +And the field of Ephron, which was in Machpelah, which was before Mamre, the field, and the cave which was therein, and all the trees that were in the field, that were in all the borders round about, were made sure +Unto Abraham for a possession in the presence of the children of Heth, before all that went in at the gate of his city. +And after this, Abraham buried Sarah his wife in the cave of the field of Machpelah before Mamre: the same is Hebron in the land of Canaan. +And the field, and the cave that is therein, were made sure unto Abraham for a possession of a buryingplace by the sons of Heth. + +24. +And Abraham was old, and well stricken in age: and the LORD had blessed Abraham in all things. +And Abraham said unto his eldest servant of his house, that ruled over all that he had, Put, I pray thee, thy hand under my thigh: +And I will make thee swear by the LORD, the God of heaven, and the God of the earth, that thou shalt not take a wife unto my son of the daughters of the Canaanites, among whom I dwell: +But thou shalt go unto my country, and to my kindred, and take a wife unto my son Isaac. +And the servant said unto him, Peradventure the woman will not be willing to follow me unto this land: must I needs bring thy son again unto the land from whence thou camest? +And Abraham said unto him, Beware thou that thou bring not my son thither again. +The LORD God of heaven, which took me from my father's house, and from the land of my kindred, and which spake unto me, and that sware unto me, saying, Unto thy seed will I give this land; he shall send his angel before thee, and thou shalt take a wife unto my son from thence. +And if the woman will not be willing to follow thee, then thou shalt be clear from this my oath: only bring not my son thither again. +And the servant put his hand under the thigh of Abraham his master, and sware to him concerning that matter. +And the servant took ten camels of the camels of his master, and departed; for all the goods of his master were in his hand: and he arose, and went to Mesopotamia, unto the city of Nahor. +And he made his camels to kneel down without the city by a well of water at the time of the evening, even the time that women go out to draw water. +And he said, O LORD God of my master Abraham, I pray thee, send me good speed this day, and shew kindness unto my master Abraham. +Behold, I stand here by the well of water; and the daughters of the men of the city come out to draw water: +And let it come to pass, that the damsel to whom I shall say, Let down thy pitcher, I pray thee, that I may drink; and she shall say, Drink, and I will give thy camels drink also: let the same be she that thou hast appointed for thy servant Isaac; and thereby shall I know that thou hast shewed kindness unto my master. +And it came to pass, before he had done speaking, that, behold, Rebekah came out, who was born to Bethuel, son of Milcah, the wife of Nahor, Abraham's brother, with her pitcher upon her shoulder. +And the damsel was very fair to look upon, a virgin, neither had any man known her: and she went down to the well, and filled her pitcher, and came up. +And the servant ran to meet her, and said, Let me, I pray thee, drink a little water of thy pitcher. +And she said, Drink, my lord: and she hasted, and let down her pitcher upon her hand, and gave him drink. +And when she had done giving him drink, she said, I will draw water for thy camels also, until they have done drinking. +And she hasted, and emptied her pitcher into the trough, and ran again unto the well to draw water, and drew for all his camels. +And the man wondering at her held his peace, to wit whether the LORD had made his journey prosperous or not. +And it came to pass, as the camels had done drinking, that the man took a golden earring of half a shekel weight, and two bracelets for her hands of ten shekels weight of gold; +And said, Whose daughter art thou? tell me, I pray thee: is there room in thy father's house for us to lodge in? +And she said unto him, I am the daughter of Bethuel the son of Milcah, which she bare unto Nahor. +She said moreover unto him, We have both straw and provender enough, and room to lodge in. +And the man bowed down his head, and worshipped the LORD. +And he said, Blessed be the LORD God of my master Abraham, who hath not left destitute my master of his mercy and his truth: I being in the way, the LORD led me to the house of my master's brethren. +And the damsel ran, and told them of her mother's house these things. +And Rebekah had a brother, and his name was Laban: and Laban ran out unto the man, unto the well. +And it came to pass, when he saw the earring and bracelets upon his sister's hands, and when he heard the words of Rebekah his sister, saying, Thus spake the man unto me; that he came unto the man; and, behold, he stood by the camels at the well. +And he said, Come in, thou blessed of the LORD; wherefore standest thou without? for I have prepared the house, and room for the camels. +And the man came into the house: and he ungirded his camels, and gave straw and provender for the camels, and water to wash his feet, and the men's feet that were with him. +And there was set meat before him to eat: but he said, I will not eat, until I have told mine errand. And he said, Speak on. +And he said, I am Abraham's servant. +And the LORD hath blessed my master greatly; and he is become great: and he hath given him flocks, and herds, and silver, and gold, and menservants, and maidservants, and camels, and asses. +And Sarah my master's wife bare a son to my master when she was old: and unto him hath he given all that he hath. +And my master made me swear, saying, Thou shalt not take a wife to my son of the daughters of the Canaanites, in whose land I dwell: +But thou shalt go unto my father's house, and to my kindred, and take a wife unto my son. +And I said unto my master, Peradventure the woman will not follow me. +And he said unto me, The LORD, before whom I walk, will send his angel with thee, and prosper thy way; and thou shalt take a wife for my son of my kindred, and of my father's house: +Then shalt thou be clear from this my oath, when thou comest to my kindred; and if they give not thee one, thou shalt be clear from my oath. +And I came this day unto the well, and said, O LORD God of my master Abraham, if now thou do prosper my way which I go; +Behold, I stand by the well of water; and it shall come to pass, that when the virgin cometh forth to draw water, and I say to her, Give me, I pray thee, a little water of thy pitcher to drink; +And she say to me, Both drink thou, and I will also draw for thy camels: let the same be the woman whom the LORD hath appointed out for my master's son. +And before I had done speaking in mine heart, behold, Rebekah came forth with her pitcher on her shoulder; and she went down unto the well, and drew water: and I said unto her, Let me drink, I pray thee. +And she made haste, and let down her pitcher from her shoulder, and said, Drink, and I will give thy camels drink also: so I drank, and she made the camels drink also. +And I asked her, and said, Whose daughter art thou? And she said, The daughter of Bethuel, Nahor's son, whom Milcah bare unto him: and I put the earring upon her face, and the bracelets upon her hands. +And I bowed down my head, and worshipped the LORD, and blessed the LORD God of my master Abraham, which had led me in the right way to take my master's brother's daughter unto his son. +And now if ye will deal kindly and truly with my master, tell me: and if not, tell me; that I may turn to the right hand, or to the left. +Then Laban and Bethuel answered and said, The thing proceedeth from the LORD: we cannot speak unto thee bad or good. +Behold, Rebekah is before thee, take her, and go, and let her be thy master's son's wife, as the LORD hath spoken. +And it came to pass, that, when Abraham's servant heard their words, he worshipped the LORD, bowing himself to the earth. +And the servant brought forth jewels of silver, and jewels of gold, and raiment, and gave them to Rebekah: he gave also to her brother and to her mother precious things. +And they did eat and drink, he and the men that were with him, and tarried all night; and they rose up in the morning, and he said, Send me away unto my master. +And her brother and her mother said, Let the damsel abide with us a few days, at the least ten; after that she shall go. +And he said unto them, Hinder me not, seeing the LORD hath prospered my way; send me away that I may go to my master. +And they said, We will call the damsel, and inquire at her mouth. +And they called Rebekah, and said unto her, Wilt thou go with this man? And she said, I will go. +And they sent away Rebekah their sister, and her nurse, and Abraham's servant, and his men. +And they blessed Rebekah, and said unto her, Thou art our sister, be thou the mother of thousands of millions, and let thy seed possess the gate of those which hate them. +And Rebekah arose, and her damsels, and they rode upon the camels, and followed the man: and the servant took Rebekah, and went his way. +And Isaac came from the way of the well Lahai-roi; for he dwelt in the south country. +And Isaac went out to meditate in the field at the eventide: and he lifted up his eyes, and saw, and, behold, the camels were coming. +And Rebekah lifted up her eyes, and when she saw Isaac, she lighted off the camel. +For she had said unto the servant, What man is this that walketh in the field to meet us? And the servant had said, It is my master: therefore she took a vail, and covered herself. +And the servant told Isaac all things that he had done. +And Isaac brought her into his mother Sarah's tent, and took Rebekah, and she became his wife; and he loved her: and Isaac was comforted after his mother's death. + +25. +Then again Abraham took a wife, and her name was Keturah. +And she bare him Zimran, and Jokshan, and Medan, and Midian, and Ishbak, and Shuah. +And Jokshan begat Sheba, and Dedan. And the sons of Dedan were Asshurim, and Letushim, and Leummim. +And the sons of Midian; Ephah, and Epher, and Hanoch, and Abida, and Eldaah. All these were the children of Keturah. +And Abraham gave all that he had unto Isaac. +But unto the sons of the concubines, which Abraham had, Abraham gave gifts, and sent them away from Isaac his son, while he yet lived, eastward, unto the east country. +And these are the days of the years of Abraham's life which he lived, an hundred threescore and fifteen years. +Then Abraham gave up the ghost, and died in a good old age, an old man, and full of years; and was gathered to his people. +And his sons Isaac and Ishmael buried him in the cave of Machpelah, in the field of Ephron the son of Zohar the Hittite, which is before Mamre; +The field which Abraham purchased of the sons of Heth: there was Abraham buried, and Sarah his wife. +And it came to pass after the death of Abraham, that God blessed his son Isaac; and Isaac dwelt by the well Lahai-roi. +Now these are the generations of Ishmael, Abraham's son, whom Hagar the Egyptian, Sarah's handmaid, bare unto Abraham: +And these are the names of the sons of Ishmael, by their names, according to their generations: the firstborn of Ishmael, Nebajoth; and Kedar, and Adbeel, and Mibsam, +And Mishma, and Dumah, and Massa, +Hadar, and Tema, Jetur, Naphish, and Kedemah: +These are the sons of Ishmael, and these are their names, by their towns, and by their castles; twelve princes according to their nations. +And these are the years of the life of Ishmael, an hundred and thirty and seven years: and he gave up the ghost and died; and was gathered unto his people. +And they dwelt from Havilah unto Shur, that is before Egypt, as thou goest toward Assyria: and he died in the presence of all his brethren. +And these are the generations of Isaac, Abraham's son: Abraham begat Isaac: +And Isaac was forty years old when he took Rebekah to wife, the daughter of Bethuel the Syrian of Padan-aram, the sister to Laban the Syrian. +And Isaac intreated the LORD for his wife, because she was barren: and the LORD was intreated of him, and Rebekah his wife conceived. +And the children struggled together within her; and she said, If it be so, why am I thus? And she went to inquire of the LORD. +And the LORD said unto her, Two nations are in thy womb, and two manner of people shall be separated from thy bowels; and the one people shall be stronger than the other people; and the elder shall serve the younger. +And when her days to be delivered were fulfilled, behold, there were twins in her womb. +And the first came out red, all over like an hairy garment; and they called his name Esau. +And after that came his brother out, and his hand took hold on Esau's heel; and his name was called Jacob: and Isaac was threescore years old when she bare them. +And the boys grew: and Esau was a cunning hunter, a man of the field; and Jacob was a plain man, dwelling in tents. +And Isaac loved Esau, because he did eat of his venison: but Rebekah loved Jacob. +And Jacob sod pottage: and Esau came from the field, and he was faint: +And Esau said to Jacob, Feed me, I pray thee, with that same red pottage; for I am faint: therefore was his name called Edom. +And Jacob said, Sell me this day thy birthright. +And Esau said, Behold, I am at the point to die: and what profit shall this birthright do to me? +And Jacob said, Swear to me this day; and he sware unto him: and he sold his birthright unto Jacob. +Then Jacob gave Esau bread and pottage of lentiles; and he did eat and drink, and rose up, and went his way: thus Esau despised his birthright. + +26. +And there was a famine in the land, beside the first famine that was in the days of Abraham. And Isaac went unto Abimelech king of the Philistines unto Gerar. +And the LORD appeared unto him, and said, Go not down into Egypt; dwell in the land which I shall tell thee of: +Sojourn in this land, and I will be with thee, and will bless thee; for unto thee, and unto thy seed, I will give all these countries, and I will perform the oath which I sware unto Abraham thy father; +And I will make thy seed to multiply as the stars of heaven, and will give unto thy seed all these countries; and in thy seed shall all the nations of the earth be blessed; +Because that Abraham obeyed my voice, and kept my charge, my commandments, my statutes, and my laws. +And Isaac dwelt in Gerar: +And the men of the place asked him of his wife; and he said, She is my sister: for he feared to say, She is my wife; lest, said he, the men of the place should kill me for Rebekah; because she was fair to look upon. +And it came to pass, when he had been there a long time, that Abimelech king of the Philistines looked out at a window, and saw, and, behold, Isaac was sporting with Rebekah his wife. +And Abimelech called Isaac, and said, Behold, of a surety she is thy wife: and how saidst thou, She is my sister? And Isaac said unto him, Because I said, Lest I die for her. +And Abimelech said, What is this thou hast done unto us? one of the people might lightly have lien with thy wife, and thou shouldest have brought guiltiness upon us. +And Abimelech charged all his people, saying, He that toucheth this man or his wife shall surely be put to death. +Then Isaac sowed in that land, and received in the same year an hundredfold: and the LORD blessed him. +And the man waxed great, and went forward, and grew until he became very great: +For he had possession of flocks, and possessions of herds, and great store of servants: and the Philistines envied him. +For all the wells which his father's servants had digged in the days of Abraham his father, the Philistines had stopped them, and filled them with earth. +And Abimelech said unto Isaac, Go from us; for thou art much mightier than we. +And Isaac departed thence, and pitched his tent in the valley of Gerar, and dwelt there. +And Isaac digged again the wells of water, which they had digged in the days of Abraham his father; for the philistines had stopped them after the death of Abraham: and he called their names after the names by which his father had called them. +And Isaac's servants digged in the valley, and found there a well of springing water. +And the herdmen of Gerar did strive with Isaac's herdmen, saying, The water is ours: and he called the name of the well Esek; because they strove with him. +And they digged another well, and strove for that also:and he called the name of it Sitnah. +And he removed from thence, and digged another well; and for that they strove not: and he called the name of it Rehoboth; and he said, For now the LORD hath made room for us, and we shall be fruitful in the land. +And he went up from thence to Beer-sheba. +And the LORD appeared unto him the same night, and said, I am the God of Abraham thy father: fear not, for I am with thee, and will bless thee, and multiply thy seed for my servant Abraham's sake. +And he builded an altar there, and called upon the name of the LORD and pitched his tent there: and there Isaac's servants digged a well. +Then Abimelech went to him from Gerar, and Ahuzzath one of his friends, and Phichol the chief captain of his army. +And Isaac said unto them, Wherefore come ye to me, seeing ye hate me, and have sent me away from you? +And they said, We saw certainly that the LORD was with thee: and we said, Let there be now an oath betwixt us, even betwixt us and thee, and let us make a covenant with thee; +That thou wilt do us no hurt, as we have not touched thee, and as we have done unto thee nothing but good, and have sent thee away in peace: thou art now the blessed of the LORD. +And he made them a feast, and they did eat and drink. +And they rose up betimes in the morning, and sware one to another: and Isaac sent them away, and they departed from him in peace. +And it came to pass the same day, that Isaac's servants came, and told him concerning the well which they had digged, and said unto him, We have found water. +And he called it Shebah: therefore the name of the city is Beer-sheba unto this day. +And Esau was forty years old when he took to wife Judith the daughter of Beeri the Hittite, and Bashemath the daughter of Elon the Hittite: +Which were a grief of mind unto Isaac and to Rebekah. + +27. +And it came to pass, that when Isaac was old, and his eyes were dim, so that he could not see, he called Esau his eldest son, and said unto him, My son: and he said unto him, Behold, here am I. +And he said, Behold now, I am old, I know not the day of my death: +Now therefore take, I pray thee, thy weapons, thy quiver and thy bow, and go out to the field, and take me some venison; +And make me savoury meat, such as I love, and bring it to me, that I may eat; that my soul may bless thee before I die. +And Rebekah heard when Isaac spake to Esau his son. And Esau went to the field to hunt for venison, and to bring it. +And Rebekah spake unto Jacob her son, saying, Behold, I heard thy father speak unto Esau thy brother, saying, +Bring me venison, and make me savoury meat, that I may eat, and bless thee before the LORD before my death. +Now therefore, my son, obey my voice according to that which I command thee. +Go now to the flock, and fetch me from thence two good kids of the goats; and I will make them savoury meat for thy father, such as he loveth: +And thou shalt bring it to thy father, that he may eat, and that he may bless thee before his death. +And Jacob said to Rebekah his mother, Behold, Esau my brother is a hairy man, and I am a smooth man: +My father peradventure will feel me, and I shall seem to him as a deceiver; and I shall bring a curse upon me, and not a blessing. +And his mother said unto him, Upon me be thy curse, my son: only obey my voice, and go fetch me them. +And he went, and fetched, and brought them to his mother: and his mother made savoury meat, such as his father loved. +And Rebekah took goodly raiment of her eldest son Esau, which were with her in the house, and put them upon Jacob her younger son: +And she put the skins of the kids of the goats upon his hands, and upon the smooth of his neck: +And she gave the savoury meat and the bread, which she had prepared, into the hand of her son Jacob. +And he came unto his father, and said, My father: and he said, Here am I; who art thou, my son? +And Jacob said unto his father, I am Esau thy firstborn; I have done according as thou badest me: arise, I pray thee, sit and eat of my venison, that thy soul may bless me. +And Isaac said unto his son, How is it that thou hast found it so quickly, my son? And he said, Because the LORD thy God brought it to me. +And Isaac said unto Jacob, Come near, I pray thee, that I may feel thee, my son, whether thou be my very son Esau or not. +And Jacob went near unto Isaac his father; and he felt him, and said, The voice is Jacob's voice, but the hands are the hands of Esau. +And he discerned him not, because his hands were hairy, as his brother Esau's hands: so he blessed him. +And he said, Art thou my very son Esau? And he said, I am. +And he said, Bring it near to me, and I will eat of my son's venison, that my soul may bless thee. And he brought it near to him, and he did eat: and he brought him wine, and he drank. +And his father Isaac said unto him, Come near now, and kiss me, my son. +And he came near, and kissed him: and he smelled the smell of his raiment, and blessed him, and said, See, the smell of my son is as the smell of a field which the LORD hath blessed: +Therefore God give thee of the dew of heaven, and the fatness of the earth, and plenty of corn and wine: +Let people serve thee, and nations bow down to thee: be lord over thy brethren, and let thy mother's sons bow down to thee: cursed be every one that curseth thee, and blessed be he that blesseth thee. +And it came to pass, as soon as Isaac had made an end of blessing Jacob, and Jacob was yet scarce gone out from the presence of Isaac his father, that Esau his brother came in from his hunting. +And he also had made savoury meat, and brought it unto his father, and said unto his father, Let my father arise, and eat of his son's venison, that thy soul may bless me. +And Isaac his father said unto him, Who art thou? And he said, I am thy son, thy firstborn Esau. +And Isaac trembled very exceedingly, and said, Who? where is he that hath taken venison, and brought it me, and I have eaten of all before thou camest, and have blessed him? yea, and he shall be blessed. +And when Esau heard the words of his father, he cried with a great and exceeding bitter cry, and said unto his father, Bless me, even me also, O my father. +And he said, Thy brother came with subtilty, and hath taken away thy blessing. +And he said, Is not he rightly named Jacob? for he hath supplanted me these two times: he took away my birthright; and, behold, now he hath taken away my blessing. And he said, Hast thou not reserved a blessing for me? +And Isaac answered and said unto Esau, Behold, I have made him thy lord, and all his brethren have I given to him for servants; and with corn and wine have I sustained him: and what shall I do now unto thee, my son? +And Esau said unto his father, Hast thou but one blessing, my father? bless me, even me also, O my father. And Esau lifted up his voice, and wept. +And Isaac his father answered and said unto him, Behold, thy dwelling shall be the fatness of the earth, and of the dew of heaven from above; +And by thy sword shalt thou live, and shalt serve thy brother; and it shall come to pass when thou shalt have the dominion, that thou shalt break his yoke from off thy neck. +And Esau hated Jacob because of the blessing wherewith his father blessed him: and Esau said in his heart, The days of mourning for my father are at hand; then will I slay my brother Jacob. +And these words of Esau her elder son were told to Rebekah: and she sent and called Jacob her younger son, and said unto him, Behold, thy brother Esau, as touching thee, doth comfort himself, purposing to kill thee. +Now therefore, my son, obey my voice; and arise, flee thou to Laban my brother to Haran; +And tarry with him a few days, until thy brother's fury turn away; +Until thy brother's anger turn away from thee, and he forget that which thou hast done to him: then I will send, and fetch thee from thence: why should I be deprived also of you both in one day? +And Rebekah said to Isaac, I am weary of my life because of the daughters of Heth: if Jacob take a wife of the daughters of Heth, such as these which are of the daughters of the land, what good shall my life do me? + +28. +And Isaac called Jacob, and blessed him, and charged him, and said unto him, Thou shalt not take a wife of the daughters of Canaan. +Arise, go to Padan-aram, to the house of Bethuel thy mother's father; and take thee a wife from thence of the daughters of Laban thy mother's brother. +And God Almighty bless thee, and make thee fruitful, and multiply thee, that thou mayest be a multitude of people; +And give thee the blessing of Abraham, to thee, and to thy seed with thee; that thou mayest inherit the land wherein thou art a stranger, which God gave unto Abraham. +And Isaac sent away Jacob: and he went to Padan-aram unto Laban, son of Bethuel the Syrian, the brother of Rebekah, Jacob's and Esau's mother. +When Esau saw that Isaac had blessed Jacob, and sent him away to Padan-aram, to take him a wife from thence; and that as he blessed him he gave him a charge, saying, Thou shalt not take a wife of the daughters of Canaan; +And that Jacob obeyed his father and his mother, and was gone to Padan-aram; +And Esau seeing that the daughters of Canaan pleased not Isaac his father; +Then went Esau unto Ishmael, and took unto the wives which he had Mahalath the daughter of Ishmael Abraham's son, the sister of Nebajoth, to be his wife. +And Jacob went out from Beer-sheba, and went toward Haran. +And he lighted upon a certain place, and tarried there all night, because the sun was set; and he took of the stones of that place, and put them for his pillows, and lay down in that place to sleep. +And he dreamed, and behold a ladder set up on the earth, and the top of it reached to heaven: and behold the angels of God ascending and descending on it. +And, behold, the LORD stood above it, and said, I am the LORD God of Abraham thy father, and the God of Isaac: the land whereon thou liest, to thee will I give it, and to thy seed; +And thy seed shall be as the dust of the earth, and thou shalt spread abroad to the west, and to the east, and to the north, and to the south: and in thee and in thy seed shall all the families of the earth be blessed. +And, behold, I am with thee, and will keep thee in all places whither thou goest, and will bring thee again into this land; for I will not leave thee, until I have done that which I have spoken to thee of. +And Jacob awaked out of his sleep, and he said, Surely the LORD is in this place; and I knew it not. +And he was afraid, and said, How dreadful is this place! this is none other but the house of God, and this is the gate of heaven. +And Jacob rose up early in the morning, and took the stone that he had put for his pillows, and set it up for a pillar, and poured oil upon the top of it. +And he called the name of that place Bethel: but the name of that city was called Luz at the first. +And Jacob vowed a vow, saying, If God will be with me, and will keep me in this way that I go, and will give me bread to eat, and raiment to put on, +So that I come again to my father's house in peace; then shall the LORD be my God: +And this stone, which I have set for a pillar, shall be God's house: and of all that thou shalt give me I will surely give the tenth unto thee. + +29. +Then Jacob went on his journey, and came into the land of the people of the east. +And he looked, and behold a well in the field, and, lo, there were three flocks of sheep lying by it; for out of that well they watered the flocks: and a great stone was upon the well's mouth. +And thither were all the flocks gathered: and they rolled the stone from the well's mouth, and watered the sheep, and put the stone again upon the well's mouth in his place. +And Jacob said unto them, My brethren, whence be ye? And they said, Of Haran are we. +And he said unto them, Know ye Laban the son of Nahor? And they said, We know him. +And he said unto them, Is he well? And they said, He is well: and, behold, Rachel his daughter cometh with the sheep. +And he said, Lo, it is yet high day, neither is it time that the cattle should be gathered together: water ye the sheep, and go and feed them. +And they said, We cannot, until all the flocks be gathered together, and till they roll the stone from the well's mouth; then we water the sheep. +And while he yet spake with them, Rachel came with her father's sheep: for she kept them. +And it came to pass, when Jacob saw Rachel the daughter of Laban his mother's brother, and the sheep of Laban his mother's brother, that Jacob went near, and rolled the stone from the well's mouth, and watered the flock of Laban his mother's brother. +And Jacob kissed Rachel, and lifted up his voice, and wept. +And Jacob told Rachel that he was her father's brother, and that he was Rebekah's son: and she ran and told her father. +And it came to pass, when Laban heard the tidings of Jacob his sister's son, that he ran to meet him, and embraced him, and kissed him, and brought him to his house. And he told Laban all these things. +And Laban said to him, Surely thou art my bone and my flesh. And he abode with him the space of a month. +And Laban said unto Jacob, Because thou art my brother, shouldest thou therefore serve me for nought? tell me, what shall thy wages be? +And Laban had two daughters: the name of the elder was Leah, and the name of the younger was Rachel. +Leah was tender eyed; but Rachel was beautiful and well favoured. +And Jacob loved Rachel; and said, I will serve thee seven years for Rachel thy younger daughter. +And Laban said, It is better that I give her to thee, than that I should give her to another man: abide with me. +And Jacob served seven years for Rachel; and they seemed unto him but a few days, for the love he had to her. +And Jacob said unto Laban, Give me my wife, for my days are fulfilled, that I may go in unto her. +And Laban gathered together all the men of the place, and made a feast. +And it came to pass in the evening, that he took Leah his daughter, and brought her to him; and he went in unto her. +And Laban gave unto his daughter Leah Zilpah his maid for an handmaid. +And it came to pass, that in the morning, behold, it was Leah: and he said to Laban, What is this thou hast done unto me? did not I serve with thee for Rachel? wherefore then hast thou beguiled me? +And Laban said, It must not be so done in our country, to give the younger before the firstborn. +Fulfil her week, and we will give thee this also for the service which thou shalt serve with me yet seven other years. +And Jacob did so, and fulfilled her week: and he gave him Rachel his daughter to wife also. +And Laban gave to Rachel his daughter Bilhah his handmaid to be her maid. +And he went in also unto Rachel, and he loved also Rachel more than Leah, and served with him yet seven other years. +And when the LORD saw that Leah was hated, he opened her womb: but Rachel was barren. +And Leah conceived, and bare a son, and she called his name Reuben: for she said, Surely the LORD hath looked upon my affliction; now therefore my husband will love me. +And she conceived again, and bare a son; and said, Because the LORD hath heard that I was hated, he hath therefore given me this son also: and she called his name Simeon. +And she conceived again, and bare a son; and said, Now this time will my husband be joined unto me, because I have born him three sons: therefore was his name called Levi. +And she conceived again, and bare a son: and she said, Now will I praise the LORD: therefore she called his name Judah; and left bearing. + +30. +And when Rachel saw that she bare Jacob no children, Rachel envied her sister; and said unto Jacob, Give me children, or else I die. +And Jacob's anger was kindled against Rachel: and he said, Am I in God's stead, who hath withheld from thee the fruit of the womb? +And she said, Behold my maid Bilhah, go in unto her; and she shall bear upon my knees that I may also have children by her. +And she gave him Bilhah her handmaid to wife: and Jacob went in unto her. +And Bilhah conceived, and bare Jacob a son. +And Rachel said, God hath judged me, and hath also heard my voice, and hath given me a son: therefore called she his name Dan. +And Bilhah Rachel's maid conceived again, and bare Jacob a second son. +And Rachel said, With great wrestlings have I wrestled with my sister, and I have prevailed: and she called his name Naphtali. +When Leah saw that she had left bearing, she took Zilpah her maid, and gave her Jacob to wife. +And Zilpah Leah's maid bare Jacob a son. +And Leah said, A troop cometh: and she called his name Gad. +And Zilpah Leah's maid bare Jacob a second son. +And Leah said, Happy am I, for the daughters will call me blessed: and she called his name Asher. +And Reuben went in the days of wheat harvest, and found mandrakes in the field, and brought them unto his mother Leah. Then Rachel said to Leah, Give me, I pray thee, of thy son's mandrakes. +And she said unto her, Is it a small matter that thou hast taken my husband? and wouldest thou take away my son's mandrakes also? And Rachel said, Therefore he shall lie with thee to night for thy son's mandrakes. +And Jacob came out of the field in the evening, and Leah went out to meet him, and said, Thou must come in unto me; for surely I have hired thee with my son's mandrakes. And he lay with her that night. +And God hearkened unto Leah, and she conceived, and bare Jacob the fifth son. +And Leah said, God hath given me my hire, because I have given my maiden to my husband: and she called his name Issachar. +And Leah conceived again, and bare Jacob the sixth son. +And Leah said, God hath endued me with a good dowry; now will my husband dwell with me, because I have born him six sons: and she called his name Zebulun. +And afterwards she bare a daughter, and called her name Dinah. +And God remembered Rachel, and God hearkened to her, and opened her womb. +And she conceived, and bare a son; and said, God hath taken away my reproach: +And she called his name Joseph; and said, The LORD shall add to me another son. +And it came to pass, when Rachel had born Joseph, that Jacob said unto Laban, Send me away, that I may go unto mine own place, and to my country. +Give me my wives and my children, for whom I have served thee, and let me go: for thou knowest my service which I have done thee. +And Laban said unto him, I pray thee, if I have found favour in thine eyes, tarry: for I have learned by experience that the LORD hath blessed me for thy sake. +And he said, Appoint me thy wages, and I will give it. +And he said unto him, Thou knowest how I have served thee, and how thy cattle was with me. +For it was little which thou hadst before I came, and it is now increased unto a multitude; and the LORD hath blessed thee since my coming: and now when shall I provide for mine own house also? +And he said, What shall I give thee? And Jacob said, Thou shalt not give me any thing: if thou wilt do this thing for me, I will again feed and keep thy flock: +I will pass through all thy flock to day, removing from thence all the speckled and spotted cattle, and all the brown cattle among the sheep, and the spotted and speckled among the goats: and of such shall be my hire. +So shall my righteousness answer for me in time to come, when it shall come for my hire before thy face: every one that is not speckled and spotted among the goats, and brown among the sheep, that shall be counted stolen with me. +And Laban said, Behold, I would it might be according to thy word. +And he removed that day the he goats that were ringstraked and spotted, and all the she goats that were speckled and spotted, and every one that had some white in it, and all the brown among the sheep, and gave them into the hand of his sons. +And he set three days' journey betwixt himself and Jacob: and Jacob fed the rest of Laban's flocks. +And Jacob took him rods of green poplar, and of the hazel and chesnut tree; and pilled white strakes in them, and made the white appear which was in the rods. +And he set the rods which he had pilled before the flocks in the gutters in the watering troughs when the flocks came to drink, that they should conceive when they came to drink. +And the flocks conceived before the rods, and brought forth cattle ringstraked, speckled, and spotted. +And Jacob did separate the lambs, and set the faces of the flocks toward the ringstraked, and all the brown in the flock of Laban; and he put his own flocks by themselves, and put them not unto Laban's cattle. +And it came to pass, whensoever the stronger cattle did conceive, that Jacob laid the rods before the eyes of the cattle in the gutters, that they might conceive among the rods. +But when the cattle were feeble, he put them not in: so the feebler were Laban's, and the stronger Jacob's. +And the man increased exceedingly, and had much cattle, and maidservants, and menservants, and camels, and asses. + +31. +And he heard the words of Laban's sons, saying, Jacob hath taken away all that was our father's; and of that which was our father's hath he gotten all this glory. +And Jacob beheld the countenance of Laban, and, behold, it was not toward him as before. +And the LORD said unto Jacob, Return unto the land of thy fathers, and to thy kindred; and I will be with thee. +And Jacob sent and called Rachel and Leah to the field unto his flock, +And said unto them, I see your father's countenance, that it is not toward me as before; but the God of my father hath been with me. +And ye know that with all my power I have served your father. +And your father hath deceived me, and changed my wages ten times; but God suffered him not to hurt me. +If he said thus, The speckled shall be thy wages; then all the cattle bare speckled: and if he said thus, The ringstraked shall be thy hire; then bare all the cattle ringstraked. +Thus God hath taken away the cattle of your father, and given them to me. +And it came to pass at the time that the cattle conceived, that I lifted up mine eyes, and saw in a dream, and, behold, the rams which leaped upon the cattle were ringstraked, speckled, and grisled. +And the angel of God spake unto me in a dream, saying, Jacob: And I said, Here am I. +And he said, Lift up now thine eyes, and see, all the rams which leap upon the cattle are ringstraked, speckled, and grisled: for I have seen all that Laban doeth unto thee. +I am the God of Bethel, where thou anointedst the pillar, and where thou vowedst a vow unto me: now arise, get thee out from this land, and return unto the land of thy kindred. +And Rachel and Leah answered and said unto him, Is there yet any portion or inheritance for us in our father's house? +Are we not counted of him strangers? for he hath sold us, and hath quite devoured also our money. +For all the riches which God hath taken from our father, that is ours, and our children's: now then, whatsoever God hath said unto thee, do. +Then Jacob rose up, and set his sons and his wives upon camels; +And he carried away all his cattle, and all his goods which he had gotten, the cattle of his getting, which he had gotten in Padan-aram, for to go to Isaac his father in the land of Canaan. +And Laban went to shear his sheep: and Rachel had stolen the images that were her father's. +And Jacob stole away unawares to Laban the Syrian, in that he told him not that he fled. +So he fled with all that he had; and he rose up, and passed over the river, and set his face toward the mount Gilead. +And it was told Laban on the third day that Jacob was fled. +And he took his brethren with him, and pursued after him seven days' journey; and they overtook him in the mount Gilead. +And God came to Laban the Syrian in a dream by night, and said unto him, Take heed that thou speak not to Jacob either good or bad. +Then Laban overtook Jacob. Now Jacob had pitched his tent in the mount: and Laban with his brethren pitched in the mount of Gilead. +And Laban said to Jacob, What hast thou done, that thou hast stolen away unawares to me, and carried away my daughters, as captives taken with the sword? +Wherefore didst thou flee away secretly, and steal away from me; and didst not tell me, that I might have sent thee away with mirth, and with songs, with tabret, and with harp? +And hast not suffered me to kiss my sons and my daughters? thou hast now done foolishly in so doing. +It is in the power of my hand to do you hurt: but the God of your father spake unto me yesternight, saying, Take thou heed that thou speak not to Jacob either good or bad. +And now, though thou wouldest needs be gone, because thou sore longedst after thy father's house, yet wherefore hast thou stolen my gods? +And Jacob answered and said to Laban, Because I was afraid: for I said, Peradventure thou wouldest take by force thy daughters from me. +With whomsoever thou findest thy gods, let him not live: before our brethren discern thou what is thine with me, and take it to thee. For Jacob knew not that Rachel had stolen them. +And Laban went into Jacob's tent, and into Leah's tent, and into the two maidservants' tents; but he found them not. Then went he out of Leah's tent, and entered into Rachel's tent. +Now Rachel had taken the images, and put them in the camel's furniture, and sat upon them. And Laban searched all the tent, but found them not. +And she said to her father, Let it not displease my lord that I cannot rise up before thee; for the custom of women is upon me. And he searched, but found not the images. +And Jacob was wroth, and chode with Laban: and Jacob answered and said to Laban, What is my trespass? what is my sin, that thou hast so hotly pursued after me? +Whereas thou hast searched all my stuff, what hast thou found of all thy household stuff? set it here before my brethren and thy brethren, that they may judge betwixt us both. +This twenty years have I been with thee; thy ewes and thy she goats have not cast their young, and the rams of thy flock have I not eaten. +That which was torn of beasts I brought not unto thee; I bare the loss of it; of my hand didst thou require it, whether stolen by day, or stolen by night. +Thus I was; in the day the drought consumed me, and the frost by night; and my sleep departed from mine eyes. +Thus have I been twenty years in thy house; I served thee fourteen years for thy two daughters, and six years for thy cattle: and thou hast changed my wages ten times. +Except the God of my father, the God of Abraham, and the fear of Isaac, had been with me, surely thou hadst sent me away now empty. God hath seen mine affliction and the labour of my hands, and rebuked thee yesternight. +And Laban answered and said unto Jacob, These daughters are my daughters, and these children are my children, and these cattle are my cattle, and all that thou seest is mine: and what can I do this day unto these my daughters, or unto their children which they have born? +Now therefore come thou, let us make a covenant, I and thou; and let it be for a witness between me and thee. +And Jacob took a stone, and set it up for a pillar. +And Jacob said unto his brethren, Gather stones; and they took stones, and made an heap: and they did eat there upon the heap. +And Laban called it Jegar-sahadutha: but Jacob called it Galeed. +And Laban said, This heap is a witness between me and thee this day. Therefore was the name of it called Galeed; +And Mizpah; for he said, The LORD watch between me and thee, when we are absent one from another. +If thou shalt afflict my daughters, or if thou shalt take other wives beside my daughters, no man is with us; see, God is witness betwixt me and thee. +And Laban said to Jacob, Behold this heap, and behold this pillar, which I have cast betwixt me and thee; +This heap be witness, and this pillar be witness, that I will not pass over this heap to thee, and that thou shalt not pass over this heap and this pillar unto me, for harm. +The God of Abraham, and the God of Nahor, the God of their father, judge betwixt us. And Jacob sware by the fear of his father Isaac. +Then Jacob offered sacrifice upon the mount, and called his brethren to eat bread: and they did eat bread, and tarried all night in the mount. +And early in the morning Laban rose up, and kissed his sons and his daughters, and blessed them: and Laban departed, and returned unto his place. + +32. +And Jacob went on his way, and the angels of God met him. +And when Jacob saw them, he said, This is God's host: and he called the name of that place Mahanaim. +And Jacob sent messengers before him to Esau his brother unto the land of Seir, the country of Edom. +And he commanded them, saying, Thus shall ye speak unto my lord Esau; Thy servant Jacob saith thus, I have sojourned with Laban, and stayed there until now: +And I have oxen, and asses, flocks, and menservants, and womenservants: and I have sent to tell my lord, that I may find grace in thy sight. +And the messengers returned to Jacob, saying, We came to thy brother Esau, and also he cometh to meet thee, and four hundred men with him. +Then Jacob was greatly afraid and distressed: and he divided the people that was with him, and the flocks, and herds, and the camels, into two bands; +And said, If Esau come to the one company, and smite it, then the other company which is left shall escape. +And Jacob said, O God of my father Abraham, and God of my father Isaac, the LORD which saidst unto me, Return unto thy country, and to thy kindred, and I will deal well with thee: +I am not worthy of the least of all the mercies, and of all the truth, which thou hast shewed unto thy servant; for with my staff I passed over this Jordan; and now I am become two bands. +Deliver me, I pray thee, from the hand of my brother, from the hand of Esau: for I fear him, lest he will come and smite me, and the mother with the children. +And thou saidst, I will surely do thee good, and make thy seed as the sand of the sea, which cannot be numbered for multitude. +And he lodged there that same night; and took of that which came to his hand a present for Esau his brother; +Two hundred she goats, and twenty he goats, two hundred ewes, and twenty rams, +Thirty milch camels with their colts, forty kine, and ten bulls, twenty she asses, and ten foals. +And he delivered them into the hand of his servants, every drove by themselves; and said unto his servants, Pass over before me, and put a space betwixt drove and drove. +And he commanded the foremost, saying, When Esau my brother meeteth thee, and asketh thee, saying, Whose art thou? and whither goest thou? and whose are these before thee? +Then thou shalt say, They be thy servant Jacob's; it is a present sent unto my lord Esau: and, behold, also he is behind us. +And so commanded he the second, and the third, and all that followed the droves, saying, On this manner shall ye speak unto Esau, when ye find him. +And say ye moreover, Behold, thy servant Jacob is behind us. For he said, I will appease him with the present that goeth before me, and afterward I will see his face; peradventure he will accept of me. +So went the present over before him: and himself lodged that night in the company. +And he rose up that night, and took his two wives, and his two womenservants, and his eleven sons, and passed over the ford Jabbok. +And he took them, and sent them over the brook, and sent over that he had. +And Jacob was left alone; and there wrestled a man with him until the breaking of the day. +And when he saw that he prevailed not against him, he touched the hollow of his thigh; and the hollow of Jacob's thigh was out of joint, as he wrestled with him. +And he said, Let me go, for the day breaketh. And he said, I will not let thee go, except thou bless me. +And he said unto him, What is thy name? And he said, Jacob. +And he said, Thy name shall be called no more Jacob, but Israel: for as a prince hast thou power with God and with men, and hast prevailed. +And Jacob asked him, and said, Tell me, I pray thee, thy name. And he said, Wherefore is it that thou dost ask after my name? And he blessed him there. +And Jacob called the name of the place Peniel: for I have seen God face to face, and my life is preserved. +And as he passed over Penuel the sun rose upon him, and he halted upon his thigh. +Therefore the children of Israel eat not of the sinew which shrank, which is upon the hollow of the thigh, unto this day: because he touched the hollow of Jacob's thigh in the sinew that shrank. + +33. +And Jacob lifted up his eyes, and looked, and, behold, Esau came, and with him four hundred men. And he divided the children unto Leah, and unto Rachel, and unto the two handmaids. +And he put the handmaids and their children foremost, and Leah and her children after, and Rachel and Joseph hindermost. +And he passed over before them, and bowed himself to the ground seven times, until he came near to his brother. +And Esau ran to meet him, and embraced him, and fell on his neck, and kissed him: and they wept. +And he lifted up his eyes, and saw the women and the children; and said, Who are those with thee? And he said, The children which God hath graciously given thy servant. +Then the handmaidens came near, they and their children, and they bowed themselves. +And Leah also with her children came near, and bowed themselves: and after came Joseph near and Rachel, and they bowed themselves. +And he said, What meanest thou by all this drove which I met? And he said, These are to find grace in the sight of my lord. +And Esau said, I have enough, my brother; keep that thou hast unto thyself. +And Jacob said, Nay, I pray thee, if now I have found grace in thy sight, then receive my present at my hand: for therefore I have seen thy face, as though I had seen the face of God, and thou wast pleased with me. +Take, I pray thee, my blessing that is brought to thee; because God hath dealt graciously with me, and because I have enough. And he urged him, and he took it. +And he said, Let us take our journey, and let us go, and I will go before thee. +And he said unto him, My lord knoweth that the children are tender, and the flocks and herds with young are with me: and if men should overdrive them one day, all the flock will die. +Let my lord, I pray thee, pass over before his servant: and I will lead on softly, according as the cattle that goeth before me and the children be able to endure, until I come unto my lord unto Seir. +And Esau said, Let me now leave with thee some of the folk that are with me. And he said, What needeth it? let me find grace in the sight of my lord. +So Esau returned that day on his way unto Seir. +And Jacob journeyed to Succoth, and built him an house, and made booths for his cattle: therefore the name of the place is called Succoth. +And Jacob came to Shalem, a city of Shechem, which is in the land of Canaan, when he came from Padan-aram; and pitched his tent before the city. +And he bought a parcel of a field, where he had spread his tent, at the hand of the children of Hamor, Shechem's father, for an hundred pieces of money. +And he erected there an altar, and called it El-elohe-Israel. + +34. +And Dinah the daughter of Leah, which she bare unto Jacob, went out to see the daughters of the land. +And when Shechem the son of Hamor the Hivite, prince of the country, saw her, he took her, and lay with her, and defiled her. +And his soul clave unto Dinah the daughter of Jacob, and he loved the damsel, and spake kindly unto the damsel. +And Shechem spake unto his father Hamor, saying, Get me this damsel to wife. +And Jacob heard that he had defiled Dinah his daughter: now his sons were with his cattle in the field: and Jacob held his peace until they were come. +And Hamor the father of Shechem went out unto Jacob to commune with him. +And the sons of Jacob came out of the field when they heard it: and the men were grieved, and they were very wroth, because he had wrought folly in Israel in lying with Jacob's daughter; which thing ought not to be done. +And Hamor communed with them, saying, The soul of my son Shechem longeth for your daughter: I pray you give her him to wife. +And make ye marriages with us, and give your daughters unto us, and take our daughters unto you. +And ye shall dwell with us: and the land shall be before you; dwell and trade ye therein, and get you possessions therein. +And Shechem said unto her father and unto her brethren, Let me find grace in your eyes, and what ye shall say unto me I will give. +Ask me never so much dowry and gift, and I will give according as ye shall say unto me: but give me the damsel to wife. +And the sons of Jacob answered Shechem and Hamor his father deceitfully, and said, because he had defiled Dinah their sister: +And they said unto them, We cannot do this thing, to give our sister to one that is uncircumcised; for that were a reproach unto us: +But in this will we consent unto you: If ye will be as we be, that every male of you be circumcised; +Then will we give our daughters unto you, and we will take your daughters to us, and we will dwell with you, and we will become one people. +But if ye will not hearken unto us, to be circumcised; then will we take our daughter, and we will be gone. +And their words pleased Hamor, and Shechem Hamor's son. +And the young man deferred not to do the thing, because he had delight in Jacob's daughter: and he was more honourable than all the house of his father. +And Hamor and Shechem his son came unto the gate of their city, and communed with the men of their city, saying, +These men are peaceable with us; therefore let them dwell in the land, and trade therein; for the land, behold, it is large enough for them; let us take their daughters to us for wives, and let us give them our daughters. +Only herein will the men consent unto us for to dwell with us, to be one people, if every male among us be circumcised, as they are circumcised. +Shall not their cattle and their substance and every beast of theirs be ours? only let us consent unto them, and they will dwell with us. +And unto Hamor and unto Shechem his son hearkened all that went out of the gate of his city; and every male was circumcised, all that went out of the gate of his city. +And it came to pass on the third day, when they were sore, that two of the sons of Jacob, Simeon and Levi, Dinah's brethren, took each man his sword, and came upon the city boldly, and slew all the males. +And they slew Hamor and Shechem his son with the edge of the sword, and took Dinah out of Shechem's house, and went out. +The sons of Jacob came upon the slain, and spoiled the city, because they had defiled their sister. +They took their sheep, and their oxen, and their asses, and that which was in the city, and that which was in the field, +And all their wealth, and all their little ones, and their wives took they captive, and spoiled even all that was in the house. +And Jacob said to Simeon and Levi, Ye have troubled me to make me to stink among the inhabitants of the land, among the Canaanites and the Perizzites: and I being few in number, they shall gather themselves together against me, and slay me; and I shall be destroyed, I and my house. +And they said, Should he deal with our sister as with an harlot? + +35. +And God said unto Jacob, Arise, go up to Bethel, and dwell there: and make there an altar unto God, that appeared unto thee when thou fleddest from the face of Esau thy brother. +Then Jacob said unto his household, and to all that were with him, Put away the strange gods that are among you, and be clean, and change your garments: +And let us arise, and go up to Bethel; and I will make there an altar unto God, who answered me in the day of my distress, and was with me in the way which I went. +And they gave unto Jacob all the strange gods which were in their hand, and all their earrings which were in their ears; and Jacob hid them under the oak which was by Shechem. +And they journeyed: and the terror of God was upon the cities that were round about them, and they did not pursue after the sons of Jacob. +So Jacob came to Luz, which is in the land of Canaan, that is, Bethel, he and all the people that were with him. +And he built there an altar, and called the place El-beth-el: because there God appeared unto him, when he fled from the face of his brother. +But Deborah Rebekah's nurse died, and she was buried beneath Bethel under an oak: and the name of it was called Allon-bachuth. +And God appeared unto Jacob again, when he came out of Padan-aram, and blessed him. +And God said unto him, Thy name is Jacob: thy name shall not be called any more Jacob, but Israel shall be thy name: and he called his name Israel. +And God said unto him, I am God Almighty: be fruitful and multiply; a nation and a company of nations shall be of thee, and kings shall come out of thy loins; +And the land which I gave Abraham and Isaac, to thee I will give it, and to thy seed after thee will I give the land. +And God went up from him in the place where he talked with him. +And Jacob set up a pillar in the place where he talked with him, even a pillar of stone: and he poured a drink offering thereon, and he poured oil thereon. +And Jacob called the name of the place where God spake with him, Bethel. +And they journeyed from Bethel; and there was but a little way to come to Ephrath: and Rachel travailed, and she had hard labour. +And it came to pass, when she was in hard labour, that the midwife said unto her, Fear not; thou shalt have this son also. +And it came to pass, as her soul was in departing, (for she died) that she called his name Ben-oni: but his father called him Benjamin. +And Rachel died, and was buried in the way to Ephrath, which is Bethlehem. +And Jacob set a pillar upon her grave: that is the pillar of Rachel's grave unto this day. +And Israel journeyed, and spread his tent beyond the tower of Edar. +And it came to pass, when Israel dwelt in that land, that Reuben went and lay with Bilhah his father's concubine: and Israel heard it. Now the sons of Jacob were twelve: +The sons of Leah; Reuben, Jacob's firstborn, and Simeon, and Levi, and Judah, and Issachar, and Zebulun: +The sons of Rachel; Joseph, and Benjamin: +And the sons of Bilhah, Rachel's handmaid; Dan, and Naphtali: +And the sons of Zilpah, Leah's handmaid; Gad, and Asher: these are the sons of Jacob, which were born to him in Padan-aram. +And Jacob came unto Isaac his father unto Mamre, unto the city of Arbah, which is Hebron, where Abraham and Isaac sojourned. +And the days of Isaac were an hundred and fourscore years. +And Isaac gave up the ghost, and died, and was gathered unto his people, being old and full of days: and his sons Esau and Jacob buried him. + +36. +Now these are the generations of Esau, who is Edom. +Esau took his wives of the daughters of Canaan; Adah the daughter of Elon the Hittite, and Aholibamah the daughter of Anah the daughter of Zibeon the Hivite; +And Bashemath Ishmael's daughter, sister of Nebajoth. +And Adah bare to Esau Eliphaz; and Bashemath bare Reuel; +And Aholibamah bare Jeush, and Jaalam, and Korah: these are the sons of Esau, which were born unto him in the land of Canaan. +And Esau took his wives, and his sons, and his daughters, and all the persons of his house, and his cattle, and all his beasts, and all his substance, which he had got in the land of Canaan; and went into the country from the face of his brother Jacob. +For their riches were more than that they might dwell together; and the land wherein they were strangers could not bear them because of their cattle. +Thus dwelt Esau in mount Seir: Esau is Edom. +And these are the generations of Esau the father of the Edomites in mount Seir: +These are the names of Esau's sons; Eliphaz the son of Adah the wife of Esau, Reuel the son of Bashemath the wife of Esau. +And the sons of Eliphaz were Teman, Omar, Zepho, and Gatam, and Kenaz. +And Timna was concubine to Eliphaz Esau's son; and she bare to Eliphaz Amalek: these were the sons of Adah Esau's wife. +And these are the sons of Reuel; Nahath, and Zerah, Shammah, and Mizzah: these were the sons of Bashemath Esau's wife. +And these were the sons of Aholibamah, the daughter of Anah the daughter of Zibeon, Esau's wife: and she bare to Esau Jeush, and Jaalam, and Korah. +These were dukes of the sons of Esau: the sons of Eliphaz the firstborn son of Esau; duke Teman, duke Omar, duke Zepho, duke Kenaz, +Duke Korah, duke Gatam, and duke Amalek: these are the dukes that came of Eliphaz in the land of Edom; these were the sons of Adah. +And these are the sons of Reuel Esau's son; duke Nahath, duke Zerah, duke Shammah, duke Mizzah: these are the dukes that came of Reuel in the land of Edom; these are the sons of Bashemath Esau's wife. +And these are the sons of Aholibamah Esau's wife; duke Jeush, duke Jaalam, duke Korah: these were the dukes that came of Aholibamah the daughter of Anah, Esau's wife. +These are the sons of Esau, who is Edom, and these are their dukes. +These are the sons of Seir the Horite, who inhabited the land; Lotan, and Shobal, and Zibeon, and Anah, +And Dishon, and Ezer, and Dishan: these are the dukes of the Horites, the children of Seir in the land of Edom. +And the children of Lotan were Hori and Hemam; and Lotan's sister was Timna. +And the children of Shobal were these; Alvan, and Manahath, and Ebal, Shepho, and Onam. +And these are the children of Zibeon; both Ajah, and Anah: this was that Anah that found the mules in the wilderness, as he fed the asses of Zibeon his father. +And the children of Anah were these; Dishon, and Aholibamah the daughter of Anah. +And these are the children of Dishon; Hemdan, and Eshban, and Ithran, and Cheran. +The children of Ezer are these; Bilhan, and Zaavan, and Akan. +The children of Dishan are these: Uz, and Aran. +These are the dukes that came of the Horites; duke Lotan, duke Shobal, duke Zibeon, duke Anah, +Duke Dishon, duke Ezer, duke Dishan: these are the dukes that came of Hori, among their dukes in the land of Seir. +And these are the kings that reigned in the land of Edom, before there reigned any king over the children of Israel. +And Bela the son of Beor reigned in Edom: and the name of his city was Dinhabah. +And Bela died, and Jobab the son of Zerah of Bozrah reigned in his stead. +And Jobab died, and Husham of the land of Temani reigned in his stead. +And Husham died, and Hadad the son of Bedad, who smote Midian in the field of Moab, reigned in his stead: and the name of his city was Avith. +And Hadad died, and Samlah of Masrekah reigned in his stead. +And Samlah died, and Saul of Rehoboth by the river reigned in his stead. +And Saul died, and Baal-hanan the son of Achbor reigned in his stead. +And Baal-hanan the son of Achbor died, and Hadar reigned in his stead: and the name of his city was Pau; and his wife's name was Mehetabel, the daughter of Matred, the daughter of Mezahab. +And these are the names of the dukes that came of Esau, according to their families, after their places, by their names; duke Timnah, duke Alvah, duke Jetheth, +Duke Aholibamah, duke Elah, duke Pinon, +Duke Kenaz, duke Teman, duke Mibzar, +Duke Magdiel, duke Iram: these be the dukes of Edom, according to their habitations in the land of their possession: he is Esau the father of the Edomites. + +37. +And Jacob dwelt in the land wherein his father was a stranger, in the land of Canaan. +These are the generations of Jacob. Joseph, being seventeen years old, was feeding the flock with his brethren; and the lad was with the sons of Bilhah, and with the sons of Zilpah, his father's wives: and Joseph brought unto his father their evil report. +Now Israel loved Joseph more than all his children, because he was the son of his old age: and he made him a coat of many colours. +And when his brethren saw that their father loved him more than all his brethren, they hated him, and could not speak peaceably unto him. +And Joseph dreamed a dream, and he told it his brethren: and they hated him yet the more. +And he said unto them, Hear, I pray you, this dream which I have dreamed: +For, behold, we were binding sheaves in the field, and, lo, my sheaf arose, and also stood upright; and, behold, your sheaves stood round about, and made obeisance to my sheaf. +And his brethren said to him, Shalt thou indeed reign over us? or shalt thou indeed have dominion over us? And they hated him yet the more for his dreams, and for his words. +And he dreamed yet another dream, and told it his brethren, and said, Behold, I have dreamed a dream more; and, behold, the sun and the moon and the eleven stars made obeisance to me. +And he told it to his father, and to his brethren: and his father rebuked him, and said unto him, What is this dream that thou hast dreamed? Shall I and thy mother and thy brethren indeed come to bow down ourselves to thee to the earth? +And his brethren envied him; but his father observed the saying. +And his brethren went to feed their father's flock in Shechem. +And Israel said unto Joseph, Do not thy brethren feed the flock in Shechem? come, and I will send thee unto them. And he said to him, Here am I. +And he said to him, Go, I pray thee, see whether it be well with thy brethren, and well with the flocks; and bring me word again. So he sent him out of the vale of Hebron, and he came to Shechem. +And a certain man found him, and, behold, he was wandering in the field: and the man asked him, saying, What seekest thou? +And he said, I seek my brethren: tell me, I pray thee, where they feed their flocks. +And the man said, They are departed hence; for I heard them say, Let us go to Dothan. And Joseph went after his brethren, and found them in Dothan. +And when they saw him afar off, even before he came near unto them, they conspired against him to slay him. +And they said one to another, Behold, this dreamer cometh. +Come now therefore, and let us slay him, and cast him into some pit, and we will say, Some evil beast hath devoured him: and we shall see what will become of his dreams. +And Reuben heard it, and he delivered him out of their hands; and said, Let us not kill him. +And Reuben said unto them, Shed no blood, but cast him into this pit that is in the wilderness, and lay no hand upon him; that he might rid him out of their hands, to deliver him to his father again. +And it came to pass, when Joseph was come unto his brethren, that they stript Joseph out of his coat, his coat of many colours that was on him; +And they took him, and cast him into a pit: and the pit was empty, there was no water in it. +And they sat down to eat bread: and they lifted up their eyes and looked, and, behold, a company of Ishmeelites came from Gilead with their camels bearing spicery and balm and myrrh, going to carry it down to Egypt. +And Judah said unto his brethren, What profit is it if we slay our brother, and conceal his blood? +Come, and let us sell him to the Ishmeelites, and let not our hand be upon him; for he is our brother and our flesh. And his brethren were content. +Then there passed by Midianites merchantmen; and they drew and lifted up Joseph out of the pit, and sold Joseph to the Ishmeelites for twenty pieces of silver: and they brought Joseph into Egypt. +And Reuben returned unto the pit; and, behold, Joseph was not in the pit; and he rent his clothes. +And he returned unto his brethren, and said, The child is not; and I, whither shall I go? +And they took Joseph's coat, and killed a kid of the goats, and dipped the coat in the blood; +And they sent the coat of many colours, and they brought it to their father; and said, This have we found: know now whether it be thy son's coat or no. +And he knew it, and said, It is my son's coat; an evil beast hath devoured him; Joseph is without doubt rent in pieces. +And Jacob rent his clothes, and put sackcloth upon his loins, and mourned for his son many days. +And all his sons and all his daughters rose up to comfort him; but he refused to be comforted; and he said, For I will go down into the grave unto my son mourning. Thus his father wept for him. +And the Midianites sold him into Egypt unto Potiphar, an officer of Pharaoh's, and captain of the guard. + +38. +And it came to pass at that time, that Judah went down from his brethren, and turned in to a certain Adullamite, whose name was Hirah. +And Judah saw there a daughter of a certain Canaanite, whose name was Shuah; and he took her, and went in unto her. +And she conceived, and bare a son; and he called his name Er. +And she conceived again, and bare a son; and she called his name Onan. +And she yet again conceived, and bare a son; and called his name Shelah: and he was at Chezib, when she bare him. +And Judah took a wife for Er his firstborn, whose name was Tamar. +And Er, Judah's firstborn, was wicked in the sight of the LORD; and the LORD slew him. +And Judah said unto Onan, Go in unto thy brother's wife, and marry her, and raise up seed to thy brother. +And Onan knew that the seed should not be his; and it came to pass, when he went in unto his brother's wife, that he spilled it on the ground, lest that he should give seed to his brother. +And the thing which he did displeased the LORD: wherefore he slew him also. +Then said Judah to Tamar his daughter in law, Remain a widow at thy father's house, till Shelah my son be grown: for he said, Lest peradventure he die also, as his brethren did. And Tamar went and dwelt in her father's house. +And in process of time the daughter of Shuah Judah's wife died; and Judah was comforted, and went up unto his sheepshearers to Timnath, he and his friend Hirah the Adullamite. +And it was told Tamar, saying, Behold thy father in law goeth up to Timnath to shear his sheep. +And she put her widow's garments off from her, and covered her with a vail, and wrapped herself, and sat in an open place, which is by the way to Timnath; for she saw that Shelah was grown, and she was not given unto him to wife. +When Judah saw her, he thought her to be an harlot; because she had covered her face. +And he turned unto her by the way, and said, Go to, I pray thee, let me come in unto thee; (for he knew not that she was his daughter in law.) And she said, What wilt thou give me, that thou mayest come in unto me? +And he said, I will send thee a kid from the flock. And she said, Wilt thou give me a pledge, till thou send it? +And he said, What pledge shall I give thee? And she said, Thy signet, and thy bracelets, and thy staff that is in thine hand. And he gave it her, and came in unto her, and she conceived by him. +And she arose, and went away, and laid by her vail from her, and put on the garments of her widowhood. +And Judah sent the kid by the hand of his friend the Adullamite, to receive his pledge from the woman's hand: but he found her not. +Then he asked the men of that place, saying, Where is the harlot, that was openly by the way side? And they said, There was no harlot in this place. +And he returned to Judah, and said, I cannot find her; and also the men of the place said, that there was no harlot in this place. +And Judah said, Let her take it to her, lest we be shamed: behold, I sent this kid, and thou hast not found her. +And it came to pass about three months after, that it was told Judah, saying, Tamar thy daughter in law hath played the harlot; and also, behold, she is with child by whoredom. And Judah said, Bring her forth, and let her be burnt. +When she was brought forth, she sent to her father in law, saying, By the man, whose these are, am I with child: and she said, Discern, I pray thee, whose are these, the signet, and bracelets, and staff. +And Judah acknowledged them, and said, She hath been more righteous than I; because that I gave her not to Shelah my son. And he knew her again no more. +And it came to pass in the time of her travail, that, behold, twins were in her womb. +And it came to pass, when she travailed, that the one put out his hand: and the midwife took and bound upon his hand a scarlet thread, saying, This came out first, +And it came to pass, as he drew back his hand, that, behold, his brother came out: and she said, How hast thou broken forth? this breach be upon thee: therefore his name was called Pharez. +And afterward came out his brother, that had the scarlet thread upon his hand: and his name was called Zarah. + +39. +And Joseph was brought down to Egypt; and Potiphar, an officer of Pharaoh, captain of the guard, an Egyptian, bought him of the hands of the Ishmeelites, which had brought him down thither. +And the LORD was with Joseph, and he was a prosperous man; and he was in the house of his master the Egyptian. +And his master saw that the LORD was with him, and that the LORD made all that he did to prosper in his hand. +And Joseph found grace in his sight, and he served him: and he made him overseer over his house, and all that he had he put into his hand. +And it came to pass from the time that he had made him overseer in his house, and over all that he had, that the LORD blessed the Egyptian's house for Joseph's sake; and the blessing of the LORD was upon all that he had in the house, and in the field. +And he left all that he had in Joseph's hand; and he knew not ought he had, save the bread which he did eat. And Joseph was a goodly person, and well favoured. +And it came to pass after these things, that his master's wife cast her eyes upon Joseph; and she said, Lie with me. +But he refused, and said unto his master's wife, Behold, my master wotteth not what is with me in the house, and he hath committed all that he hath to my hand; +There is none greater in this house than I; neither hath he kept back any thing from me but thee, because thou art his wife: how then can I do this great wickedness, and sin against God? +And it came to pass, as she spake to Joseph day by day, that he hearkened not unto her, to lie by her, or to be with her. +And it came to pass about this time, that Joseph went into the house to do his business; and there was none of the men of the house there within. +And she caught him by his garment, saying, Lie with me: and he left his garment in her hand, and fled, and got him out. +And it came to pass, when she saw that he had left his garment in her hand, and was fled forth, +That she called unto the men of her house, and spake unto them, saying, See, he hath brought in an Hebrew unto us to mock us; he came in unto me to lie with me, and I cried with a loud voice: +And it came to pass, when he heard that I lifted up my voice and cried, that he left his garment with me, and fled, and got him out. +And she laid up his garment by her, until his lord came home. +And she spake unto him according to these words, saying, The Hebrew servant, which thou hast brought unto us, came in unto me to mock me: +And it came to pass, as I lifted up my voice and cried, that he left his garment with me, and fled out. +And it came to pass, when his master heard the words of his wife, which she spake unto him, saying, After this manner did thy servant to me; that his wrath was kindled. +And Joseph's master took him, and put him into the prison, a place where the king's prisoners were bound: and he was there in the prison. +But the LORD was with Joseph, and shewed him mercy, and gave him favour in the sight of the keeper of the prison. +And the keeper of the prison committed to Joseph's hand all the prisoners that were in the prison; and whatsoever they did there, he was the doer of it. +The keeper of the prison looked not to any thing that was under his hand; because the LORD was with him, and that which he did, the LORD made it to prosper. + +40. +And it came to pass after these things, that the butler of the king of Egypt and his baker had offended their lord the king of Egypt. +And Pharaoh was wroth against two of his officers, against the chief of the butlers, and against the chief of the bakers. +And he put them in ward in the house of the captain of the guard, into the prison, the place where Joseph was bound. +And the captain of the guard charged Joseph with them, and he served them: and they continued a season in ward. +And they dreamed a dream both of them, each man his dream in one night, each man according to the interpretation of his dream, the butler and the baker of the king of Egypt, which were bound in the prison. +And Joseph came in unto them in the morning, and looked upon them, and, behold, they were sad. +And he asked Pharaoh's officers that were with him in the ward of his lord's house, saying, Wherefore look ye so sadly to day? +And they said unto him, We have dreamed a dream, and there is no interpreter of it. And Joseph said unto them, Do not interpretations belong to God? tell me them, I pray you. +And the chief butler told his dream to Joseph, and said to him, In my dream, behold, a vine was before me; +And in the vine were three branches: and it was as though it budded, and her blossoms shot forth; and the clusters thereof brought forth ripe grapes: +And Pharaoh's cup was in my hand: and I took the grapes, and pressed them into Pharaoh's cup, and I gave the cup into Pharaoh's hand. +And Joseph said unto him, This is the interpretation of it: The three branches are three days: +Yet within three days shall Pharaoh lift up thine head, and restore thee unto thy place: and thou shalt deliver Pharaoh's cup into his hand, after the former manner when thou wast his butler. +But think on me when it shall be well with thee, and shew kindness, I pray thee, unto me, and make mention of me unto Pharaoh, and bring me out of this house: +For indeed I was stolen away out of the land of the Hebrews: and here also have I done nothing that they should put me into the dungeon. +When the chief baker saw that the interpretation was good, he said unto Joseph, I also was in my dream, and, behold, I had three white baskets on my head: +And in the uppermost basket there was of all manner of bakemeats for Pharaoh; and the birds did eat them out of the basket upon my head. +And Joseph answered and said, This is the interpretation thereof: The three baskets are three days: +Yet within three days shall Pharaoh lift up thy head from off thee, and shall hang thee on a tree; and the birds shall eat thy flesh from off thee. +And it came to pass the third day, which was Pharaoh's birthday, that he made a feast unto all his servants: and he lifted up the head of the chief butler and of the chief baker among his servants. +And he restored the chief butler unto his butlership again; and he gave the cup into Pharaoh's hand: +But he hanged the chief baker: as Joseph had interpreted to them. +Yet did not the chief butler remember Joseph, but forgat him. + +41. +And it came to pass at the end of two full years, that Pharaoh dreamed: and, behold, he stood by the river. +And, behold, there came up out of the river seven well favoured kine and fatfleshed; and they fed in a meadow. +And, behold, seven other kine came up after them out of the river, ill favoured and leanfleshed; and stood by the other kine upon the brink of the river. +And the ill favoured and leanfleshed kine did eat up the seven well favoured and fat kine. So Pharaoh awoke. +And he slept and dreamed the second time: and, behold, seven ears of corn came up upon one stalk, rank and good. +And, behold, seven thin ears and blasted with the east wind sprung up after them. +And the seven thin ears devoured the seven rank and full ears. And Pharaoh awoke, and, behold, it was a dream. +And it came to pass in the morning that his spirit was troubled; and he sent and called for all the magicians of Egypt, and all the wise men thereof: and Pharaoh told them his dream; but there was none that could interpret them unto Pharaoh. +Then spake the chief butler unto Pharaoh, saying, I do remember my faults this day: +Pharaoh was wroth with his servants, and put me in ward in the captain of the guard's house, both me and the chief baker: +And we dreamed a dream in one night, I and he; we dreamed each man according to the interpretation of his dream. +And there was there with us a young man, an Hebrew, servant to the captain of the guard; and we told him, and he interpreted to us our dreams; to each man according to his dream he did interpret. +And it came to pass, as he interpreted to us, so it was; me he restored unto mine office, and him he hanged. +Then Pharaoh sent and called Joseph, and they brought him hastily out of the dungeon: and he shaved himself, and changed his raiment, and came in unto Pharaoh. +And Pharaoh said unto Joseph, I have dreamed a dream, and there is none that can interpret it: and I have heard say of thee, that thou canst understand a dream to interpret it. +And Joseph answered Pharaoh, saying, It is not in me: God shall give Pharaoh an answer of peace. +And Pharaoh said unto Joseph, In my dream, behold, I stood upon the bank of the river: +And, behold, there came up out of the river seven kine, fatfleshed and well favoured; and they fed in a meadow: +And, behold, seven other kine came up after them, poor and very ill favoured and leanfleshed, such as I never saw in all the land of Egypt for badness: +And the lean and the ill favoured kine did eat up the first seven fat kine: +And when they had eaten them up, it could not be known that they had eaten them; but they were still ill favoured, as at the beginning. So I awoke. +And I saw in my dream, and, behold, seven ears came up in one stalk, full and good: +And, behold, seven ears, withered, thin, and blasted with the east wind, sprung up after them: +And the thin ears devoured the seven good ears: and I told this unto the magicians; but there was none that could declare it to me. +And Joseph said unto Pharaoh, The dream of Pharaoh is one: God hath shewed Pharaoh what he is about to do. +The seven good kine are seven years; and the seven good ears are seven years: the dream is one. +And the seven thin and ill favoured kine that came up after them are seven years; and the seven empty ears blasted with the east wind shall be seven years of famine. +This is the thing which I have spoken unto Pharaoh: What God is about to do he sheweth unto Pharaoh. +Behold, there come seven years of great plenty throughout all the land of Egypt: +And there shall arise after them seven years of famine; and all the plenty shall be forgotten in the land of Egypt; and the famine shall consume the land; +And the plenty shall not be known in the land by reason of that famine following; for it shall be very grievous. +And for that the dream was doubled unto Pharaoh twice; it is because the thing is established by God, and God will shortly bring it to pass. +Now therefore let Pharaoh look out a man discreet and wise, and set him over the land of Egypt. +Let Pharaoh do this, and let him appoint officers over the land, and take up the fifth part of the land of Egypt in the seven plenteous years. +And let them gather all the food of those good years that come, and lay up corn under the hand of Pharaoh, and let them keep food in the cities. +And that food shall be for store to the land against the seven years of famine, which shall be in the land of Egypt; that the land perish not through the famine. +And the thing was good in the eyes of Pharaoh, and in the eyes of all his servants. +And Pharaoh said unto his servants, Can we find such a one as this is, a man in whom the Spirit of God is? +And Pharaoh said unto Joseph, Forasmuch as God hath shewed thee all this, there is none so discreet and wise as thou art: +Thou shalt be over my house, and according unto thy word shall all my people be ruled: only in the throne will I be greater than thou. +And Pharaoh said unto Joseph, See, I have set thee over all the land of Egypt. +And Pharaoh took off his ring from his hand, and put it upon Joseph's hand, and arrayed him in vestures of fine linen, and put a gold chain about his neck; +And he made him to ride in the second chariot which he had; and they cried before him, Bow the knee: and he made him ruler over all the land of Egypt. +And Pharaoh said unto Joseph, I am Pharaoh, and without thee shall no man lift up his hand or foot in all the land of Egypt. +And Pharaoh called Joseph's name Zaphnath-paaneah; and he gave him to wife Asenath the daughter of Poti-pherah priest of On. And Joseph went out over all the land of Egypt. +And Joseph was thirty years old when he stood before Pharaoh king of Egypt. And Joseph went out from the presence of Pharaoh, and went throughout all the land of Egypt. +And in the seven plenteous years the earth brought forth by handfuls. +And he gathered up all the food of the seven years, which were in the land of Egypt, and laid up the food in the cities: the food of the field, which was round about every city, laid he up in the same. +And Joseph gathered corn as the sand of the sea, very much, until he left numbering; for it was without number. +And unto Joseph were born two sons before the years of famine came, which Asenath the daughter of Poti-pherah priest of On bare unto him. +And Joseph called the name of the firstborn Manasseh: For God, said he, hath made me forget all my toil, and all my father's house. +And the name of the second called he Ephraim: For God hath caused me to be fruitful in the land of my affliction. +And the seven years of plenteousness, that was in the land of Egypt, were ended. +And the seven years of dearth began to come, according as Joseph had said: and the dearth was in all lands; but in all the land of Egypt there was bread. +And when all the land of Egypt was famished, the people cried to Pharaoh for bread: and Pharaoh said unto all the Egyptians, Go unto Joseph; what he saith to you, do. +And the famine was over all the face of the earth: and Joseph opened all the storehouses, and sold unto the Egyptians; and the famine waxed sore in the land of Egypt. +And all countries came into Egypt to Joseph for to buy corn; because that the famine was so sore in all lands. + +42. +Now when Jacob saw that there was corn in Egypt, Jacob said unto his sons, Why do ye look one upon another? +And he said, Behold, I have heard that there is corn in Egypt: get you down thither, and buy for us from thence; that we may live, and not die. +And Joseph's ten brethren went down to buy corn in Egypt. +But Benjamin, Joseph's brother, Jacob sent not with his brethren; for he said, Lest peradventure mischief befall him. +And the sons of Israel came to buy corn among those that came: for the famine was in the land of Canaan. +And Joseph was the governor over the land, and he it was that sold to all the people of the land: and Joseph's brethren came, and bowed down themselves before him with their faces to the earth. +And Joseph saw his brethren, and he knew them, but made himself strange unto them, and spake roughly unto them; and he said unto them, Whence come ye? And they said, From the land of Canaan to buy food. +And Joseph knew his brethren, but they knew not him. +And Joseph remembered the dreams which he dreamed of them, and said unto them, Ye are spies; to see the nakedness of the land ye are come. +And they said unto him, Nay, my lord, but to buy food are thy servants come. +We are all one man's sons; we are true men, thy servants are no spies. +And he said unto them, Nay, but to see the nakedness of the land ye are come. +And they said, Thy servants are twelve brethren, the sons of one man in the land of Canaan; and, behold, the youngest is this day with our father, and one is not. +And Joseph said unto them, That is it that I spake unto you, saying, Ye are spies: +Hereby ye shall be proved: By the life of Pharaoh ye shall not go forth hence, except your youngest brother come hither. +Send one of you, and let him fetch your brother, and ye shall be kept in prison, that your words may be proved, whether there be any truth in you: or else by the life of Pharaoh surely ye are spies. +And he put them all together into ward three days. +And Joseph said unto them the third day, This do, and live; for I fear God: +If ye be true men, let one of your brethren be bound in the house of your prison: go ye, carry corn for the famine of your houses: +But bring your youngest brother unto me; so shall your words be verified, and ye shall not die. And they did so. +And they said one to another, We are verily guilty concerning our brother, in that we saw the anguish of his soul, when he besought us, and we would not hear; therefore is this distress come upon us. +And Reuben answered them, saying, Spake I not unto you, saying, Do not sin against the child; and ye would not hear? therefore, behold, also his blood is required. +And they knew not that Joseph understood them; for he spake unto them by an interpreter. +And he turned himself about from them, and wept; and returned to them again, and communed with them, and took from them Simeon, and bound him before their eyes. +Then Joseph commanded to fill their sacks with corn, and to restore every man's money into his sack, and to give them provision for the way: and thus did he unto them. +And they laded their asses with the corn, and departed thence. +And as one of them opened his sack to give his ass provender in the inn, he espied his money; for, behold, it was in his sack's mouth. +And he said unto his brethren, My money is restored; and, lo, it is even in my sack: and their heart failed them, and they were afraid, saying one to another, What is this that God hath done unto us? +And they came unto Jacob their father unto the land of Canaan, and told him all that befell unto them; saying, +The man, who is the lord of the land, spake roughly to us, and took us for spies of the country. +And we said unto him, We are true men; we are no spies: +We be twelve brethren, sons of our father; one is not, and the youngest is this day with our father in the land of Canaan. +And the man, the lord of the country, said unto us, Hereby shall I know that ye are true men; leave one of your brethren here with me, and take food for the famine of your households, and be gone: +And bring your youngest brother unto me: then shall I know that ye are no spies, but that ye are true men: so will I deliver you your brother, and ye shall traffick in the land. +And it came to pass as they emptied their sacks, that, behold, every man's bundle of money was in his sack: and when both they and their father saw the bundles of money, they were afraid. +And Jacob their father said unto them, Me have ye bereaved of my children: Joseph is not, and Simeon is not, and ye will take Benjamin away: all these things are against me. +And Reuben spake unto his father, saying, Slay my two sons, if I bring him not to thee: deliver him into my hand, and I will bring him to thee again. +And he said, My son shall not go down with you; for his brother is dead, and he is left alone: if mischief befall him by the way in the which ye go, then shall ye bring down my gray hairs with sorrow to the grave. + +43. +And the famine was sore in the land. +And it came to pass, when they had eaten up the corn which they had brought out of Egypt, their father said unto them, Go again, buy us a little food. +And Judah spake unto him, saying, The man did solemnly protest unto us, saying, Ye shall not see my face, except your brother be with you. +If thou wilt send our brother with us, we will go down and buy thee food: +But if thou wilt not send him, we will not go down: for the man said unto us, Ye shall not see my face, except your brother be with you. +And Israel said, Wherefore dealt ye so ill with me, as to tell the man whether ye had yet a brother? +And they said, The man asked us straitly of our state, and of our kindred, saying, Is your father yet alive? have ye another brother? and we told him according to the tenor of these words: could we certainly know that he would say, Bring your brother down? +And Judah said unto Israel his father, Send the lad with me, and we will arise and go; that we may live, and not die, both we, and thou, and also our little ones. +I will be surety for him; of my hand shalt thou require him: if I bring him not unto thee, and set him before thee, then let me bear the blame for ever: +For except we had lingered, surely now we had returned this second time. +And their father Israel said unto them, If it must be so now, do this; take of the best fruits in the land in your vessels, and carry down the man a present, a little balm, and a little honey, spices, and myrrh, nuts, and almonds: +And take double money in your hand; and the money that was brought again in the mouth of your sacks, carry it again in your hand; peradventure it was an oversight: +Take also your brother, and arise, go again unto the man: +And God Almighty give you mercy before the man, that he may send away your other brother, and Benjamin. If I be bereaved of my children, I am bereaved. +And the men took that present, and they took double money in their hand, and Benjamin; and rose up, and went down to Egypt, and stood before Joseph. +And when Joseph saw Benjamin with them, he said to the ruler of his house, Bring these men home, and slay, and make ready; for these men shall dine with me at noon. +And the man did as Joseph bade; and the man brought the men into Joseph's house. +And the men were afraid, because they were brought into Joseph's house; and they said, Because of the money that was returned in our sacks at the first time are we brought in; that he may seek occasion against us, and fall upon us, and take us for bondmen, and our asses. +And they came near to the steward of Joseph's house, and they communed with him at the door of the house, +And said, O sir, we came indeed down at the first time to buy food: +And it came to pass, when we came to the inn, that we opened our sacks, and, behold, every man's money was in the mouth of his sack, our money in full weight: and we have brought it again in our hand. +And other money have we brought down in our hands to buy food: we cannot tell who put our money in our sacks. +And he said, Peace be to you, fear not: your God, and the God of your father, hath given you treasure in your sacks: I had your money. And he brought Simeon out unto them. +And the man brought the men into Joseph's house, and gave them water, and they washed their feet; and he gave their asses provender. +And they made ready the present against Joseph came at noon: for they heard that they should eat bread there. +And when Joseph came home, they brought him the present which was in their hand into the house, and bowed themselves to him to the earth. +And he asked them of their welfare, and said, Is your father well, the old man of whom ye spake? Is he yet alive? +And they answered, Thy servant our father is in good health, he is yet alive. And they bowed down their heads, and made obeisance. +And he lifted up his eyes, and saw his brother Benjamin, his mother's son, and said, Is this your younger brother, of whom ye spake unto me? And he said, God be gracious unto thee, my son. +And Joseph made haste; for his bowels did yearn upon his brother: and he sought where to weep; and he entered into his chamber, and wept there. +And he washed his face, and went out, and refrained himself, and said, Set on bread. +And they set on for him by himself, and for them by themselves, and for the Egyptians, which did eat with him, by themselves: because the Egyptians might not eat bread with the Hebrews; for that is an abomination unto the Egyptians. +And they sat before him, the firstborn according to his birthright, and the youngest according to his youth: and the men marvelled one at another. +And he took and sent messes unto them from before him: but Benjamin's mess was five times so much as any of theirs. And they drank, and were merry with him. + +44. +And he commanded the steward of his house, saying, Fill the men's sacks with food, as much as they can carry, and put every man's money in his sack's mouth. +And put my cup, the silver cup, in the sack's mouth of the youngest, and his corn money. And he did according to the word that Joseph had spoken. +As soon as the morning was light, the men were sent away, they and their asses. +And when they were gone out of the city, and not yet far off, Joseph said unto his steward, Up, follow after the men; and when thou dost overtake them, say unto them, Wherefore have ye rewarded evil for good? +Is not this it in which my lord drinketh, and whereby indeed he divineth? ye have done evil in so doing. +And he overtook them, and he spake unto them these same words. +And they said unto him, Wherefore saith my lord these words? God forbid that thy servants should do according to this thing: +Behold, the money, which we found in our sacks' mouths, we brought again unto thee out of the land of Canaan: how then should we steal out of thy lord's house silver or gold? +With whomsoever of thy servants it be found, both let him die, and we also will be my lord's bondmen. +And he said, Now also let it be according unto your words; he with whom it is found shall be my servant; and ye shall be blameless. +Then they speedily took down every man his sack to the ground, and opened every man his sack. +And he searched, and began at the eldest, and left at the youngest: and the cup was found in Benjamin's sack. +Then they rent their clothes, and laded every man his ass, and returned to the city. +And Judah and his brethren came to Joseph's house; for he was yet there: and they fell before him on the ground. +And Joseph said unto them, What deed is this that ye have done? wot ye not that such a man as I can certainly divine? +And Judah said, What shall we say unto my lord? what shall we speak? or how shall we clear ourselves? God hath found out the iniquity of thy servants: behold, we are my lord's servants, both we, and he also with whom the cup is found. +And he said, God forbid that I should do so: but the man in whose hand the cup is found, he shall be my servant; and as for you, get you up in peace unto your father. +Then Judah came near unto him, and said, Oh my lord, let thy servant, I pray thee, speak a word in my lord's ears, and let not thine anger burn against thy servant: for thou art even as Pharaoh. +My lord asked his servants, saying, Have ye a father, or a brother? +And we said unto my lord, We have a father, an old man, and a child of his old age, a little one; and his brother is dead, and he alone is left of his mother, and his father loveth him. +And thou saidst unto thy servants, Bring him down unto me, that I may set mine eyes upon him. +And we said unto my lord, The lad cannot leave his father: for if he should leave his father, his father would die. +And thou saidst unto thy servants, Except your youngest brother come down with you, ye shall see my face no more. +And it came to pass when we came up unto thy servant my father, we told him the words of my lord. +And our father said, Go again, and buy us a little food. +And we said, We cannot go down: if our youngest brother be with us, then will we go down: for we may not see the man's face, except our youngest brother be with us. +And thy servant my father said unto us, Ye know that my wife bare me two sons: +And the one went out from me, and I said, Surely he is torn in pieces; and I saw him not since: +And if ye take this also from me, and mischief befall him, ye shall bring down my gray hairs with sorrow to the grave. +Now therefore when I come to thy servant my father, and the lad be not with us; seeing that his life is bound up in the lad's life; +It shall come to pass, when he seeth that the lad is not with us, that he will die: and thy servants shall bring down the gray hairs of thy servant our father with sorrow to the grave. +For thy servant became surety for the lad unto my father, saying, If I bring him not unto thee, then I shall bear the blame to my father for ever. +Now therefore, I pray thee, let thy servant abide instead of the lad a bondman to my lord; and let the lad go up with his brethren. +For how shall I go up to my father, and the lad be not with me? lest peradventure I see the evil that shall come on my father. + +45. +Then Joseph could not refrain himself before all them that stood by him; and he cried, Cause every man to go out from me. And there stood no man with him, while Joseph made himself known unto his brethren. +And he wept aloud: and the Egyptians and the house of Pharaoh heard. +And Joseph said unto his brethren, I am Joseph; doth my father yet live? And his brethren could not answer him; for they were troubled at his presence. +And Joseph said unto his brethren, Come near to me, I pray you. And they came near. And he said, I am Joseph your brother, whom ye sold into Egypt. +Now therefore be not grieved, nor angry with yourselves, that ye sold me hither: for God did send me before you to preserve life. +For these two years hath the famine been in the land: and yet there are five years, in the which there shall neither be earing nor harvest. +And God sent me before you to preserve you a posterity in the earth, and to save your lives by a great deliverance. +So now it was not you that sent me hither, but God: and he hath made me a father to Pharaoh, and lord of all his house, and a ruler throughout all the land of Egypt. +Haste ye, and go up to my father, and say unto him, Thus saith thy son Joseph, God hath made me lord of all Egypt: come down unto me, tarry not: +And thou shalt dwell in the land of Goshen, and thou shalt be near unto me, thou, and thy children, and thy children's children, and thy flocks, and thy herds, and all that thou hast: +And there will I nourish thee; for yet there are five years of famine; lest thou, and thy household, and all that thou hast, come to poverty. +And, behold, your eyes see, and the eyes of my brother Benjamin, that it is my mouth that speaketh unto you. +And ye shall tell my father of all my glory in Egypt, and of all that ye have seen; and ye shall haste and bring down my father hither. +And he fell upon his brother Benjamin's neck, and wept; and Benjamin wept upon his neck. +Moreover he kissed all his brethren, and wept upon them: and after that his brethren talked with him. +And the fame thereof was heard in Pharaoh's house, saying, Joseph's brethren are come: and it pleased Pharaoh well, and his servants. +And Pharaoh said unto Joseph, Say unto thy brethren, This do ye; lade your beasts, and go, get you unto the land of Canaan; +And take your father and your households, and come unto me: and I will give you the good of the land of Egypt, and ye shall eat the fat of the land. +Now thou art commanded, this do ye; take you wagons out of the land of Egypt for your little ones, and for your wives, and bring your father, and come. +Also regard not your stuff; for the good of all the land of Egypt is yours. +And the children of Israel did so: and Joseph gave them wagons, according to the commandment of Pharaoh, and gave them provision for the way. +To all of them he gave each man changes of raiment; but to Benjamin he gave three hundred pieces of silver, and five changes of raiment. +And to his father he sent after this manner; ten asses laden with the good things of Egypt, and ten she asses laden with corn and bread and meat for his father by the way. +So he sent his brethren away, and they departed: and he said unto them, See that ye fall not out by the way. +And they went up out of Egypt, and came into the land of Canaan unto Jacob their father, +And told him, saying, Joseph is yet alive, and he is governor over all the land of Egypt. And Jacob's heart fainted, for he believed them not. +And they told him all the words of Joseph, which he had said unto them: and when he saw the wagons which Joseph had sent to carry him, the spirit of Jacob their father revived: +And Israel said, It is enough; Joseph my son is yet alive: I will go and see him before I die. + +46. +And Israel took his journey with all that he had, and came to Beer-sheba, and offered sacrifices unto the God of his father Isaac. +And God spake unto Israel in the visions of the night, and said, Jacob, Jacob. And he said, Here am I. +And he said, I am God, the God of thy father: fear not to go down into Egypt; for I will there make of thee a great nation: +I will go down with thee into Egypt; and I will also surely bring thee up again: and Joseph shall put his hand upon thine eyes. +And Jacob rose up from Beer-sheba: and the sons of Israel carried Jacob their father, and their little ones, and their wives, in the wagons which Pharaoh had sent to carry him. +And they took their cattle, and their goods, which they had gotten in the land of Canaan, and came into Egypt, Jacob, and all his seed with him: +His sons, and his sons' sons with him, his daughters, and his sons' daughters, and all his seed brought he with him into Egypt. +And these are the names of the children of Israel, which came into Egypt, Jacob and his sons: Reuben, Jacob's firstborn. +And the sons of Reuben; Hanoch, and Phallu, and Hezron, and Carmi. +And the sons of Simeon; Jemuel, and Jamin, and Ohad, and Jachin, and Zohar, and Shaul the son of a Canaanitish woman. +And the sons of Levi; Gershon, Kohath, and Merari. +And the sons of Judah; Er, and Onan, and Shelah, and Pharez, and Zerah: but Er and Onan died in the land of Canaan. And the sons of Pharez were Hezron and Hamul. +And the sons of Issachar; Tola, and Phuvah, and Job, and Shimron. +And the sons of Zebulun; Sered, and Elon, and Jahleel. +These be the sons of Leah, which she bare unto Jacob in Padan-aram, with his daughter Dinah: all the souls of his sons and his daughters were thirty and three. +And the sons of Gad; Ziphion, and Haggi, Shuni, and Ezbon, Eri, and Arodi, and Areli. +And the sons of Asher; Jimnah, and Ishuah, and Isui, and Beriah, and Serah their sister: and the sons of Beriah; Heber, and Malchiel. +These are the sons of Zilpah, whom Laban gave to Leah his daughter, and these she bare unto Jacob, even sixteen souls. +The sons of Rachel Jacob's wife; Joseph, and Benjamin. +And unto Joseph in the land of Egypt were born Manasseh and Ephraim, which Asenath the daughter of Poti-pherah priest of On bare unto him. +And the sons of Benjamin were Belah, and Becher, and Ashbel, Gera, and Naaman, Ehi, and Rosh, Muppim, and Huppim, and Ard. +These are the sons of Rachel, which were born to Jacob: all the souls were fourteen. +And the sons of Dan; Hushim. +And the sons of Naphtali; Jahzeel, and Guni, and Jezer, and Shillem. +These are the sons of Bilhah, which Laban gave unto Rachel his daughter, and she bare these unto Jacob: all the souls were seven. +All the souls that came with Jacob into Egypt, which came out of his loins, besides Jacob's sons' wives, all the souls were threescore and six; +And the sons of Joseph, which were born him in Egypt, were two souls: all the souls of the house of Jacob, which came into Egypt, were threescore and ten. +And he sent Judah before him unto Joseph, to direct his face unto Goshen; and they came into the land of Goshen. +And Joseph made ready his chariot, and went up to meet Israel his father, to Goshen, and presented himself unto him; and he fell on his neck, and wept on his neck a good while. +And Israel said unto Joseph, Now let me die, since I have seen thy face, because thou art yet alive. +And Joseph said unto his brethren, and unto his father's house, I will go up, and shew Pharaoh, and say unto him, My brethren, and my father's house, which were in the land of Canaan, are come unto me; +And the men are shepherds, for their trade hath been to feed cattle; and they have brought their flocks, and their herds, and all that they have. +And it shall come to pass, when Pharaoh shall call you, and shall say, What is your occupation? +That ye shall say, Thy servants' trade hath been about cattle from our youth even until now, both we, and also our fathers: that ye may dwell in the land of Goshen; for every shepherd is an abomination unto the Egyptians. + +47. +Then Joseph came and told Pharaoh, and said, My father and my brethren, and their flocks, and their herds, and all that they have, are come out of the land of Canaan; and, behold, they are in the land of Goshen. +And he took some of his brethren, even five men, and presented them unto Pharaoh. +And Pharaoh said unto his brethren, What is your occupation? And they said unto Pharaoh, Thy servants are shepherds, both we, and also our fathers. +They said moreover unto Pharaoh, For to sojourn in the land are we come; for thy servants have no pasture for their flocks; for the famine is sore in the land of Canaan: now therefore, we pray thee, let thy servants dwell in the land of Goshen. +And Pharaoh spake unto Joseph, saying, Thy father and thy brethren are come unto thee: +The land of Egypt is before thee; in the best of the land make thy father and brethren to dwell; in the land of Goshen let them dwell: and if thou knowest any men of activity among them, then make them rulers over my cattle. +And Joseph brought in Jacob his father, and set him before Pharaoh: and Jacob blessed Pharaoh. +And Pharaoh said unto Jacob, How old art thou? +And Jacob said unto Pharaoh, The days of the years of my pilgrimage are an hundred and thirty years: few and evil have the days of the years of my life been, and have not attained unto the days of the years of the life of my fathers in the days of their pilgrimage. +And Jacob blessed Pharaoh, and went out from before Pharaoh. +And Joseph placed his father and his brethren, and gave them a possession in the land of Egypt, in the best of the land, in the land of Rameses, as Pharaoh had commanded. +And Joseph nourished his father, and his brethren, and all his father's household, with bread, according to their families. +And there was no bread in all the land; for the famine was very sore, so that the land of Egypt and all the land of Canaan fainted by reason of the famine. +And Joseph gathered up all the money that was found in the land of Egypt, and in the land of Canaan, for the corn which they bought: and Joseph brought the money into Pharaoh's house. +And when money failed in the land of Egypt, and in the land of Canaan, all the Egyptians came unto Joseph, and said, Give us bread: for why should we die in thy presence? for the money faileth. +And Joseph said, Give your cattle; and I will give you for your cattle, if money fail. +And they brought their cattle unto Joseph: and Joseph gave them bread in exchange for horses, and for the flocks, and for the cattle of the herds, and for the asses: and he fed them with bread for all their cattle for that year. +When that year was ended, they came unto him the second year, and said unto him, We will not hide it from my lord, how that our money is spent; my lord also hath our herds of cattle; there is not ought left in the sight of my lord, but our bodies, and our lands: +Wherefore shall we die before thine eyes, both we and our land? buy us and our land for bread, and we and our land will be servants unto Pharaoh: and give us seed, that we may live, and not die, that the land be not desolate. +And Joseph bought all the land of Egypt for Pharaoh; for the Egyptians sold every man his field, because the famine prevailed over them: so the land became Pharaoh's. +And as for the people, he removed them to cities from one end of the borders of Egypt even to the other end thereof. +Only the land of the priests bought he not; for the priests had a portion assigned them of Pharaoh, and did eat their portion which Pharaoh gave them: wherefore they sold not their lands. +Then Joseph said unto the people, Behold, I have bought you this day and your land for Pharaoh: lo, here is seed for you, and ye shall sow the land. +And it shall come to pass in the increase, that ye shall give the fifth part unto Pharaoh, and four parts shall be your own, for seed of the field, and for your food, and for them of your households, and for food for your little ones. +And they said, Thou hast saved our lives: let us find grace in the sight of my lord, and we will be Pharaoh's servants. +And Joseph made it a law over the land of Egypt unto this day, that Pharaoh should have the fifth part; except the land of the priests only, which became not Pharaoh's. +And Israel dwelt in the land of Egypt, in the country of Goshen; and they had possessions therein, and grew, and multiplied exceedingly. +And Jacob lived in the land of Egypt seventeen years: so the whole age of Jacob was an hundred forty and seven years. +And the time drew nigh that Israel must die: and he called his son Joseph, and said unto him, If now I have found grace in thy sight, put, I pray thee, thy hand under my thigh, and deal kindly and truly with me; bury me not, I pray thee, in Egypt: +But I will lie with my fathers, and thou shalt carry me out of Egypt, and bury me in their buryingplace. And he said, I will do as thou hast said. +And he said, Swear unto me. And he sware unto him. And Israel bowed himself upon the bed's head. + +48. +And it came to pass after these things, that one told Joseph, Behold, thy father is sick: and he took with him his two sons, Manasseh and Ephraim. +And one told Jacob, and said, Behold, thy son Joseph cometh unto thee: and Israel strengthened himself, and sat upon the bed. +And Jacob said unto Joseph, God Almighty appeared unto me at Luz in the land of Canaan, and blessed me, +And said unto me, Behold, I will make thee fruitful, and multiply thee, and I will make of thee a multitude of people; and will give this land to thy seed after thee for an everlasting possession. +And now thy two sons, Ephraim and Manasseh, which were born unto thee in the land of Egypt before I came unto thee into Egypt, are mine; as Reuben and Simeon, they shall be mine. +And thy issue, which thou begettest after them, shall be thine, and shall be called after the name of their brethren in their inheritance. +And as for me, when I came from Padan, Rachel died by me in the land of Canaan in the way, when yet there was but a little way to come unto Ephrath: and I buried her there in the way of Ephrath; the same is Bethlehem. +And Israel beheld Joseph's sons, and said, Who are these? +And Joseph said unto his father, They are my sons, whom God hath given me in this place. And he said, Bring them, I pray thee, unto me, and I will bless them. +Now the eyes of Israel were dim for age, so that he could not see. And he brought them near unto him; and he kissed them, and embraced them. +And Israel said unto Joseph, I had not thought to see thy face: and, lo, God hath shewed me also thy seed. +And Joseph brought them out from between his knees, and he bowed himself with his face to the earth. +And Joseph took them both, Ephraim in his right hand toward Israel's left hand, and Manasseh in his left hand toward Israel's right hand, and brought them near unto him. +And Israel stretched out his right hand, and laid it upon Ephraim's head, who was the younger, and his left hand upon Manasseh's head, guiding his hands wittingly; for Manasseh was the firstborn. +And he blessed Joseph, and said, God, before whom my fathers Abraham and Isaac did walk, the God which fed me all my life long unto this day, +The Angel which redeemed me from all evil, bless the lads; and let my name be named on them, and the name of my fathers Abraham and Isaac; and let them grow into a multitude in the midst of the earth. +And when Joseph saw that his father laid his right hand upon the head of Ephraim, it displeased him: and he held up his father's hand, to remove it from Ephraim's head unto Manasseh's head. +And Joseph said unto his father, Not so, my father: for this is the firstborn; put thy right hand upon his head. +And his father refused, and said, I know it, my son, I know it: he also shall become a people, and he also shall be great: but truly his younger brother shall be greater than he, and his seed shall become a multitude of nations. +And he blessed them that day, saying, In thee shall Israel bless, saying, God make thee as Ephraim and as Manasseh: and he set Ephraim before Manasseh. +And Israel said unto Joseph, Behold, I die: but God shall be with you, and bring you again unto the land of your fathers. +Moreover I have given to thee one portion above thy brethren, which I took out of the hand of the Amorite with my sword and with my bow. + +49. +And Jacob called unto his sons, and said, Gather yourselves together, that I may tell you that which shall befall you in the last days. +Gather yourselves together, and hear, ye sons of Jacob; and hearken unto Israel your father. +Reuben, thou art my firstborn, my might, and the beginning of my strength, the excellency of dignity, and the excellency of power: +Unstable as water, thou shalt not excel; because thou wentest up to thy father's bed; then defiledst thou it: he went up to my couch. +Simeon and Levi are brethren; instruments of cruelty are in their habitations. +O my soul, come not thou into their secret; unto their assembly, mine honour, be not thou united: for in their anger they slew a man, and in their selfwill they digged down a wall. +Cursed be their anger, for it was fierce; and their wrath, for it was cruel: I will divide them in Jacob, and scatter them in Israel. +Judah, thou art he whom thy brethren shall praise: thy hand shall be in the neck of thine enemies; thy father's children shall bow down before thee. +Judah is a lion's whelp: from the prey, my son, thou art gone up: he stooped down, he couched as a lion, and as an old lion; who shall rouse him up? +The sceptre shall not depart from Judah, nor a lawgiver from between his feet, until Shiloh come; and unto him shall the gathering of the people be. +Binding his foal unto the vine, and his ass's colt unto the choice vine; he washed his garments in wine, and his clothes in the blood of grapes: +His eyes shall be red with wine, and his teeth white with milk. +Zebulun shall dwell at the haven of the sea; and he shall be for an haven of ships; and his border shall be unto Zidon. +Issachar is a strong ass couching down between two burdens: +And he saw that rest was good, and the land that it was pleasant; and bowed his shoulder to bear, and became a servant unto tribute. +Dan shall judge his people, as one of the tribes of Israel. +Dan shall be a serpent by the way, an adder in the path, that biteth the horse heels, so that his rider shall fall backward. +I have waited for thy salvation, O LORD. +Gad, a troop shall overcome him: but he shall overcome at the last. +Out of Asher his bread shall be fat, and he shall yield royal dainties. +Naphtali is a hind let loose: he giveth goodly words. +Joseph is a fruitful bough, even a fruitful bough by a well; whose branches run over the wall: +The archers have sorely grieved him, and shot at him, and hated him: +But his bow abode in strength, and the arms of his hands were made strong by the hands of the mighty God of Jacob; (from thence is the shepherd, the stone of Israel:) +Even by the God of thy father, who shall help thee; and by the Almighty, who shall bless thee with blessings of heaven above, blessings of the deep that lieth under, blessings of the breasts, and of the womb: +The blessings of thy father have prevailed above the blessings of my progenitors unto the utmost bound of the everlasting hills: they shall be on the head of Joseph, and on the crown of the head of him that was separate from his brethren. +Benjamin shall ravin as a wolf: in the morning he shall devour the prey, and at night he shall divide the spoil. +All these are the twelve tribes of Israel: and this is it that their father spake unto them, and blessed them; every one according to his blessing he blessed them. +And he charged them, and said unto them, I am to be gathered unto my people: bury me with my fathers in the cave that is in the field of Ephron the Hittite, +In the cave that is in the field of Machpelah, which is before Mamre, in the land of Canaan, which Abraham bought with the field of Ephron the Hittite for a possession of a buryingplace. +There they buried Abraham and Sarah his wife; there they buried Isaac and Rebekah his wife; and there I buried Leah. +The purchase of the field and of the cave that is therein was from the children of Heth. +And when Jacob had made an end of commanding his sons, he gathered up his feet into the bed, and yielded up the ghost, and was gathered unto his people. + +50. +And Joseph fell upon his father's face, and wept upon him, and kissed him. +And Joseph commanded his servants the physicians to embalm his father: and the physicians embalmed Israel. +And forty days were fulfilled for him; for so are fulfilled the days of those which are embalmed: and the Egyptians mourned for him threescore and ten days. +And when the days of his mourning were past, Joseph spake unto the house of Pharaoh, saying, If now I have found grace in your eyes, speak, I pray you, in the ears of Pharaoh, saying, +My father made me swear, saying, Lo, I die: in my grave which I have digged for me in the land of Canaan, there shalt thou bury me. Now therefore let me go up, I pray thee, and bury my father, and I will come again. +And Pharaoh said, Go up, and bury thy father, according as he made thee swear. +And Joseph went up to bury his father: and with him went up all the servants of Pharaoh, the elders of his house, and all the elders of the land of Egypt, +And all the house of Joseph, and his brethren, and his father's house: only their little ones, and their flocks, and their herds, they left in the land of Goshen. +And there went up with him both chariots and horsemen: and it was a very great company. +And they came to the threshingfloor of Atad, which is beyond Jordan, and there they mourned with a great and very sore lamentation: and he made a mourning for his father seven days. +And when the inhabitants of the land, the Canaanites, saw the mourning in the floor of Atad, they said, This is a grievous mourning to the Egyptians: wherefore the name of it was called Abel-mizraim, which is beyond Jordan. +And his sons did unto him according as he commanded them: +For his sons carried him into the land of Canaan, and buried him in the cave of the field of Machpelah, which Abraham bought with the field for a possession of a buryingplace of Ephron the Hittite, before Mamre. +And Joseph returned into Egypt, he, and his brethren, and all that went up with him to bury his father, after he had buried his father. +And when Joseph's brethren saw that their father was dead, they said, Joseph will peradventure hate us, and will certainly requite us all the evil which we did unto him. +And they sent a messenger unto Joseph, saying, Thy father did command before he died, saying, +So shall ye say unto Joseph, Forgive, I pray thee now, the trespass of thy brethren, and their sin; for they did unto thee evil: and now, we pray thee, forgive the trespass of the servants of the God of thy father. And Joseph wept when they spake unto him. +And his brethren also went and fell down before his face; and they said, Behold, we be thy servants. +And Joseph said unto them, Fear not: for am I in the place of God? +But as for you, ye thought evil against me; but God meant it unto good, to bring to pass, as it is this day, to save much people alive. +Now therefore fear ye not: I will nourish you, and your little ones. And he comforted them, and spake kindly unto them. +And Joseph dwelt in Egypt, he, and his father's house: and Joseph lived an hundred and ten years. +And Joseph saw Ephraim's children of the third generation: the children also of Machir the son Manasseh were brought up upon Joseph's knees. +And Joseph said unto his brethren, I die: and God will surely visit you, and bring you out of this land unto the land which he sware to Abraham, to Isaac, and to Jacob. +And Joseph took an oath of the children of Israel, saying, God will surely visit you, and ye shall carry up my bones from hence. +So Joseph died, being an hundred and ten years old: and they embalmed him, and he was put in a coffin in Egypt. +"""; + +/// From: https://en.wiktionary.org/wiki/Appendix:English_words_with_diacritics +/// Text is available under the [Creative Commons Attribution-ShareAlike License](https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License). +const diacretics = """ +à bas, à la, à la carte, à la mode, à gogo, à propos, abacá, abaká, +abbé, açaí, adiós, agèd, agrément, aikidō, Åland, ampère, Ancien +Régime, André, ångström, animé (the oleo-resin), animēshon (usually +anime), áo dài, aperçu, apéritif, appliqué, après-ski, arête, art +décoratif, attaché, auto-da-fé bánh mì, barège, beau idéal, béchamel, +belle époque, béguin, bentō, bête noire, bêtise, Beyoncé, Bézier curves, +biały, Bichon Frisé, bíró, blasé, blessèd, bobèche, bodegón, boîte, +Bokmål, bombé, Bön, bon appétit, Boötes, boutonnière, brassière, +bric-à-brac, Brontë, bún café, cafetería, cafetière, caffè, caïque +[-jee], calèche, canapé, cañón (usually canyon), cap-à-pie, +Champs-Élysées, château, chargé d'affaires, cause célèbre, chacun à son +goût, chaînés, chèvre, Chloë, cinéma, cinéma vérité, Citroën, cliché, +cliché-verre, clientèle, comme ci comme ça, cloisonné, compère, consommé, +communiqué, confrère, confronté, continuüm (rare), coöperate [-ion, -ive], +coöpt, coördinate [-ed, -ing, -ion, -or, -ors], cortège, coup d'état, coup +de grâce, coupé, coulée, crèche, crème [-brûlée, -caramel, -de cacao, -de +la crème, -de menthe, -fraîche], Créole, crêpe [-paper, -Suzette], crétin +[-ism], Creüsa, croûton, crudités, csárdás, Curaçao, cursèd (rare) +Daimyō, daïs, dấu hỏi, débâcle, débris, début, décal [-comania], +déclassé, décolletage, décolleté, décor, découpage, dégagé, +dégustation, déjà vu, démarche, démodé, dénouement, dépôt, dérailleur, +derrière, déshabillé, détente, diamanté, diddé, discothèque, divorcé, +divorcée, dōjō, dōmoic acid, Doña, doppelgänger, Dvořák éclair, éclat, +Éire, El Niño, élan, élite, Élysée, émigré, entrée, entrepôt, +entrecôte, épaulette, épée, étouffée, étude, exposé façade, fête, +faïence, fiancé, fiancée, filmjölk, fin de siècle, flambé, flèche, föhn, +folie à deux, fouetté, frappé, Fräulein, frère, fricassée, Führer +garçon, garçonnière, gâteau, Geiger–Müller counter, gemütlichkeit, genrō, +genkō yōshi, Gewürztraminer, ginkyō (usually ginkgo), glacé, glögg, +Götterdämmerung, Gruyère, gyōza habitué, háček, hajdúk, halászlé, +hāngi, hapū, Hawaiʻi, hors d'œuvre, hôtel, humuhumunukunukuāpuaʻa ingénue, +inrō jäger, jalapeño, jardinière, jūdō, jūjutsu kākā, kākāpō, +kåldolmar, kamaʻāina, karōshi, kāwanatanga, kendō, kererū, kōan, kōhanga +reo, kōji, kōkako, kōrero, króna (Icelandic with accent, Swedish without), +kroužek, kūmara, kümmel, kyūdō lamé, lānai, ländler, langue d'oïl, +Laocoön, La Niña, légionnaire, littérateur, lūʻau, lycée macédoine, +macramé, mahātmā, maître d'hôtel, malagueña, Malmö, mañana, manège, +manœuvre, manqué, Māori, maté, matériel, matinée, mélange, mêlée, +ménage à trois, ménagerie, mésalliance, métier, Métis, México, +minaudière, mise en scène, Monégasque, moiré, Montaño, Montréal naïf, +naïve, naïveté, né, née, négligée, Neufchâtel, Nez Percé, Nō (usually +Noh), Noël, noöne (rare), número uno (Spanish with accent, Italian without) +objet trouvé, Öland, olé, ombré, omertà, oöcyte, oölogy (rare), opéra +bouffe, opéra comique, opïum (rare), öre, øre, outré pączki, pāhoehoe, +papier-mâché, páramo, passé, pâté, pāua, phở, pièce de résistance, +pied-à-terre, plissé, piña colada, piñata, piñón, piraña (usually +piranha), piqué, più, plié, précis, pōhutukawa, pölsa, preëminent [-ly] +(rare), preëmpt [-ion, -ive] (rare), prélude, première, première danseuse, +prêt-à-porter, protégé, protégée, purée Québec, Québécois, +quinceañera ragoût, ragù, raison d'être, rāmen, rātā, recherché, +réclame, reconnoître, reëlect [-ed, -ing] (rare), reënter [-ed, -ing] +(rare), reëstablish [-ed, -ing] (rare), régime, rędzina (usually rendzina), +résumé, residuüm (rare), retroussé, rincón, risqué, rôle, rivière, roman +à clef, România, röntgen, rosé, roué sauté, sayōnara, séance, señor, +señora, señorita, senryū, Shintō, shōgun, shōyu, Sinn Féin, Škoda, +smörgåsbord, smörgåstårta, soigné, soirée, soufflé, soupçon, sūdoku, +sumō, surströmming table d'hôte, takahē, télécommunication, tennō, +tête-à-tête, Thaïs, tōfu, Tōkyō, tōtara, touché, toupée, tourtière +über, Übermensch, ʻukulele vicuña, Việt Nam, vis-à-vis, voilà whekī +Zaïre, Zoë, zoölogy, Zürich, zōri, złoty +"""; diff --git a/pkgs/characters/test/src/unicode_grapheme_tests.dart b/pkgs/characters/test/src/unicode_grapheme_tests.dart new file mode 100644 index 00000000..6bf503f0 --- /dev/null +++ b/pkgs/characters/test/src/unicode_grapheme_tests.dart @@ -0,0 +1,4258 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Generated code. Do not edit. +// Generated from http://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt +// and https://www.unicode.org/Public/emoji/11.0/emoji-test.txt. +// Licensed under the Unicode Inc. License Agreement +// (../../UNICODE_LICENSE.txt, http://www.unicode.org/copyright.html#License) + +// Grapheme cluster tests. +const List> splitTests = [ + [' ', ' '], + [' \u0308', ' '], + [' ', '\r'], + [' \u0308', '\r'], + [' ', '\n'], + [' \u0308', '\n'], + [' ', '\x01'], + [' \u0308', '\x01'], + [' \u034f'], + [' \u0308\u034f'], + [' ', '\u{1f1e6}'], + [' \u0308', '\u{1f1e6}'], + [' ', '\u0600'], + [' \u0308', '\u0600'], + [' \u0903'], + [' \u0308\u0903'], + [' ', '\u1100'], + [' \u0308', '\u1100'], + [' ', '\u1160'], + [' \u0308', '\u1160'], + [' ', '\u11a8'], + [' \u0308', '\u11a8'], + [' ', '\uac00'], + [' \u0308', '\uac00'], + [' ', '\uac01'], + [' \u0308', '\uac01'], + [' ', '\u231a'], + [' \u0308', '\u231a'], + [' \u0300'], + [' \u0308\u0300'], + [' \u200d'], + [' \u0308\u200d'], + [' ', '\u0378'], + [' \u0308', '\u0378'], + [' ', '\ud800'], + [' \u0308', '\ud800'], + ['\r', ' '], + ['\r', '\u0308', ' '], + ['\r', '\r'], + ['\r', '\u0308', '\r'], + ['\r\n'], + ['\r', '\u0308', '\n'], + ['\r', '\x01'], + ['\r', '\u0308', '\x01'], + ['\r', '\u034f'], + ['\r', '\u0308\u034f'], + ['\r', '\u{1f1e6}'], + ['\r', '\u0308', '\u{1f1e6}'], + ['\r', '\u0600'], + ['\r', '\u0308', '\u0600'], + ['\r', '\u0903'], + ['\r', '\u0308\u0903'], + ['\r', '\u1100'], + ['\r', '\u0308', '\u1100'], + ['\r', '\u1160'], + ['\r', '\u0308', '\u1160'], + ['\r', '\u11a8'], + ['\r', '\u0308', '\u11a8'], + ['\r', '\uac00'], + ['\r', '\u0308', '\uac00'], + ['\r', '\uac01'], + ['\r', '\u0308', '\uac01'], + ['\r', '\u231a'], + ['\r', '\u0308', '\u231a'], + ['\r', '\u0300'], + ['\r', '\u0308\u0300'], + ['\r', '\u200d'], + ['\r', '\u0308\u200d'], + ['\r', '\u0378'], + ['\r', '\u0308', '\u0378'], + ['\r', '\ud800'], + ['\r', '\u0308', '\ud800'], + ['\n', ' '], + ['\n', '\u0308', ' '], + ['\n', '\r'], + ['\n', '\u0308', '\r'], + ['\n', '\n'], + ['\n', '\u0308', '\n'], + ['\n', '\x01'], + ['\n', '\u0308', '\x01'], + ['\n', '\u034f'], + ['\n', '\u0308\u034f'], + ['\n', '\u{1f1e6}'], + ['\n', '\u0308', '\u{1f1e6}'], + ['\n', '\u0600'], + ['\n', '\u0308', '\u0600'], + ['\n', '\u0903'], + ['\n', '\u0308\u0903'], + ['\n', '\u1100'], + ['\n', '\u0308', '\u1100'], + ['\n', '\u1160'], + ['\n', '\u0308', '\u1160'], + ['\n', '\u11a8'], + ['\n', '\u0308', '\u11a8'], + ['\n', '\uac00'], + ['\n', '\u0308', '\uac00'], + ['\n', '\uac01'], + ['\n', '\u0308', '\uac01'], + ['\n', '\u231a'], + ['\n', '\u0308', '\u231a'], + ['\n', '\u0300'], + ['\n', '\u0308\u0300'], + ['\n', '\u200d'], + ['\n', '\u0308\u200d'], + ['\n', '\u0378'], + ['\n', '\u0308', '\u0378'], + ['\n', '\ud800'], + ['\n', '\u0308', '\ud800'], + ['\x01', ' '], + ['\x01', '\u0308', ' '], + ['\x01', '\r'], + ['\x01', '\u0308', '\r'], + ['\x01', '\n'], + ['\x01', '\u0308', '\n'], + ['\x01', '\x01'], + ['\x01', '\u0308', '\x01'], + ['\x01', '\u034f'], + ['\x01', '\u0308\u034f'], + ['\x01', '\u{1f1e6}'], + ['\x01', '\u0308', '\u{1f1e6}'], + ['\x01', '\u0600'], + ['\x01', '\u0308', '\u0600'], + ['\x01', '\u0903'], + ['\x01', '\u0308\u0903'], + ['\x01', '\u1100'], + ['\x01', '\u0308', '\u1100'], + ['\x01', '\u1160'], + ['\x01', '\u0308', '\u1160'], + ['\x01', '\u11a8'], + ['\x01', '\u0308', '\u11a8'], + ['\x01', '\uac00'], + ['\x01', '\u0308', '\uac00'], + ['\x01', '\uac01'], + ['\x01', '\u0308', '\uac01'], + ['\x01', '\u231a'], + ['\x01', '\u0308', '\u231a'], + ['\x01', '\u0300'], + ['\x01', '\u0308\u0300'], + ['\x01', '\u200d'], + ['\x01', '\u0308\u200d'], + ['\x01', '\u0378'], + ['\x01', '\u0308', '\u0378'], + ['\x01', '\ud800'], + ['\x01', '\u0308', '\ud800'], + ['\u034f', ' '], + ['\u034f\u0308', ' '], + ['\u034f', '\r'], + ['\u034f\u0308', '\r'], + ['\u034f', '\n'], + ['\u034f\u0308', '\n'], + ['\u034f', '\x01'], + ['\u034f\u0308', '\x01'], + ['\u034f\u034f'], + ['\u034f\u0308\u034f'], + ['\u034f', '\u{1f1e6}'], + ['\u034f\u0308', '\u{1f1e6}'], + ['\u034f', '\u0600'], + ['\u034f\u0308', '\u0600'], + ['\u034f\u0903'], + ['\u034f\u0308\u0903'], + ['\u034f', '\u1100'], + ['\u034f\u0308', '\u1100'], + ['\u034f', '\u1160'], + ['\u034f\u0308', '\u1160'], + ['\u034f', '\u11a8'], + ['\u034f\u0308', '\u11a8'], + ['\u034f', '\uac00'], + ['\u034f\u0308', '\uac00'], + ['\u034f', '\uac01'], + ['\u034f\u0308', '\uac01'], + ['\u034f', '\u231a'], + ['\u034f\u0308', '\u231a'], + ['\u034f\u0300'], + ['\u034f\u0308\u0300'], + ['\u034f\u200d'], + ['\u034f\u0308\u200d'], + ['\u034f', '\u0378'], + ['\u034f\u0308', '\u0378'], + ['\u034f', '\ud800'], + ['\u034f\u0308', '\ud800'], + ['\u{1f1e6}', ' '], + ['\u{1f1e6}\u0308', ' '], + ['\u{1f1e6}', '\r'], + ['\u{1f1e6}\u0308', '\r'], + ['\u{1f1e6}', '\n'], + ['\u{1f1e6}\u0308', '\n'], + ['\u{1f1e6}', '\x01'], + ['\u{1f1e6}\u0308', '\x01'], + ['\u{1f1e6}\u034f'], + ['\u{1f1e6}\u0308\u034f'], + ['\u{1f1e6}\u{1f1e6}'], + ['\u{1f1e6}\u0308', '\u{1f1e6}'], + ['\u{1f1e6}', '\u0600'], + ['\u{1f1e6}\u0308', '\u0600'], + ['\u{1f1e6}\u0903'], + ['\u{1f1e6}\u0308\u0903'], + ['\u{1f1e6}', '\u1100'], + ['\u{1f1e6}\u0308', '\u1100'], + ['\u{1f1e6}', '\u1160'], + ['\u{1f1e6}\u0308', '\u1160'], + ['\u{1f1e6}', '\u11a8'], + ['\u{1f1e6}\u0308', '\u11a8'], + ['\u{1f1e6}', '\uac00'], + ['\u{1f1e6}\u0308', '\uac00'], + ['\u{1f1e6}', '\uac01'], + ['\u{1f1e6}\u0308', '\uac01'], + ['\u{1f1e6}', '\u231a'], + ['\u{1f1e6}\u0308', '\u231a'], + ['\u{1f1e6}\u0300'], + ['\u{1f1e6}\u0308\u0300'], + ['\u{1f1e6}\u200d'], + ['\u{1f1e6}\u0308\u200d'], + ['\u{1f1e6}', '\u0378'], + ['\u{1f1e6}\u0308', '\u0378'], + ['\u{1f1e6}', '\ud800'], + ['\u{1f1e6}\u0308', '\ud800'], + ['\u0600 '], + ['\u0600\u0308', ' '], + ['\u0600', '\r'], + ['\u0600\u0308', '\r'], + ['\u0600', '\n'], + ['\u0600\u0308', '\n'], + ['\u0600', '\x01'], + ['\u0600\u0308', '\x01'], + ['\u0600\u034f'], + ['\u0600\u0308\u034f'], + ['\u0600\u{1f1e6}'], + ['\u0600\u0308', '\u{1f1e6}'], + ['\u0600\u0600'], + ['\u0600\u0308', '\u0600'], + ['\u0600\u0903'], + ['\u0600\u0308\u0903'], + ['\u0600\u1100'], + ['\u0600\u0308', '\u1100'], + ['\u0600\u1160'], + ['\u0600\u0308', '\u1160'], + ['\u0600\u11a8'], + ['\u0600\u0308', '\u11a8'], + ['\u0600\uac00'], + ['\u0600\u0308', '\uac00'], + ['\u0600\uac01'], + ['\u0600\u0308', '\uac01'], + ['\u0600\u231a'], + ['\u0600\u0308', '\u231a'], + ['\u0600\u0300'], + ['\u0600\u0308\u0300'], + ['\u0600\u200d'], + ['\u0600\u0308\u200d'], + ['\u0600\u0378'], + ['\u0600\u0308', '\u0378'], + ['\u0600', '\ud800'], + ['\u0600\u0308', '\ud800'], + ['\u0903', ' '], + ['\u0903\u0308', ' '], + ['\u0903', '\r'], + ['\u0903\u0308', '\r'], + ['\u0903', '\n'], + ['\u0903\u0308', '\n'], + ['\u0903', '\x01'], + ['\u0903\u0308', '\x01'], + ['\u0903\u034f'], + ['\u0903\u0308\u034f'], + ['\u0903', '\u{1f1e6}'], + ['\u0903\u0308', '\u{1f1e6}'], + ['\u0903', '\u0600'], + ['\u0903\u0308', '\u0600'], + ['\u0903\u0903'], + ['\u0903\u0308\u0903'], + ['\u0903', '\u1100'], + ['\u0903\u0308', '\u1100'], + ['\u0903', '\u1160'], + ['\u0903\u0308', '\u1160'], + ['\u0903', '\u11a8'], + ['\u0903\u0308', '\u11a8'], + ['\u0903', '\uac00'], + ['\u0903\u0308', '\uac00'], + ['\u0903', '\uac01'], + ['\u0903\u0308', '\uac01'], + ['\u0903', '\u231a'], + ['\u0903\u0308', '\u231a'], + ['\u0903\u0300'], + ['\u0903\u0308\u0300'], + ['\u0903\u200d'], + ['\u0903\u0308\u200d'], + ['\u0903', '\u0378'], + ['\u0903\u0308', '\u0378'], + ['\u0903', '\ud800'], + ['\u0903\u0308', '\ud800'], + ['\u1100', ' '], + ['\u1100\u0308', ' '], + ['\u1100', '\r'], + ['\u1100\u0308', '\r'], + ['\u1100', '\n'], + ['\u1100\u0308', '\n'], + ['\u1100', '\x01'], + ['\u1100\u0308', '\x01'], + ['\u1100\u034f'], + ['\u1100\u0308\u034f'], + ['\u1100', '\u{1f1e6}'], + ['\u1100\u0308', '\u{1f1e6}'], + ['\u1100', '\u0600'], + ['\u1100\u0308', '\u0600'], + ['\u1100\u0903'], + ['\u1100\u0308\u0903'], + ['\u1100\u1100'], + ['\u1100\u0308', '\u1100'], + ['\u1100\u1160'], + ['\u1100\u0308', '\u1160'], + ['\u1100', '\u11a8'], + ['\u1100\u0308', '\u11a8'], + ['\u1100\uac00'], + ['\u1100\u0308', '\uac00'], + ['\u1100\uac01'], + ['\u1100\u0308', '\uac01'], + ['\u1100', '\u231a'], + ['\u1100\u0308', '\u231a'], + ['\u1100\u0300'], + ['\u1100\u0308\u0300'], + ['\u1100\u200d'], + ['\u1100\u0308\u200d'], + ['\u1100', '\u0378'], + ['\u1100\u0308', '\u0378'], + ['\u1100', '\ud800'], + ['\u1100\u0308', '\ud800'], + ['\u1160', ' '], + ['\u1160\u0308', ' '], + ['\u1160', '\r'], + ['\u1160\u0308', '\r'], + ['\u1160', '\n'], + ['\u1160\u0308', '\n'], + ['\u1160', '\x01'], + ['\u1160\u0308', '\x01'], + ['\u1160\u034f'], + ['\u1160\u0308\u034f'], + ['\u1160', '\u{1f1e6}'], + ['\u1160\u0308', '\u{1f1e6}'], + ['\u1160', '\u0600'], + ['\u1160\u0308', '\u0600'], + ['\u1160\u0903'], + ['\u1160\u0308\u0903'], + ['\u1160', '\u1100'], + ['\u1160\u0308', '\u1100'], + ['\u1160\u1160'], + ['\u1160\u0308', '\u1160'], + ['\u1160\u11a8'], + ['\u1160\u0308', '\u11a8'], + ['\u1160', '\uac00'], + ['\u1160\u0308', '\uac00'], + ['\u1160', '\uac01'], + ['\u1160\u0308', '\uac01'], + ['\u1160', '\u231a'], + ['\u1160\u0308', '\u231a'], + ['\u1160\u0300'], + ['\u1160\u0308\u0300'], + ['\u1160\u200d'], + ['\u1160\u0308\u200d'], + ['\u1160', '\u0378'], + ['\u1160\u0308', '\u0378'], + ['\u1160', '\ud800'], + ['\u1160\u0308', '\ud800'], + ['\u11a8', ' '], + ['\u11a8\u0308', ' '], + ['\u11a8', '\r'], + ['\u11a8\u0308', '\r'], + ['\u11a8', '\n'], + ['\u11a8\u0308', '\n'], + ['\u11a8', '\x01'], + ['\u11a8\u0308', '\x01'], + ['\u11a8\u034f'], + ['\u11a8\u0308\u034f'], + ['\u11a8', '\u{1f1e6}'], + ['\u11a8\u0308', '\u{1f1e6}'], + ['\u11a8', '\u0600'], + ['\u11a8\u0308', '\u0600'], + ['\u11a8\u0903'], + ['\u11a8\u0308\u0903'], + ['\u11a8', '\u1100'], + ['\u11a8\u0308', '\u1100'], + ['\u11a8', '\u1160'], + ['\u11a8\u0308', '\u1160'], + ['\u11a8\u11a8'], + ['\u11a8\u0308', '\u11a8'], + ['\u11a8', '\uac00'], + ['\u11a8\u0308', '\uac00'], + ['\u11a8', '\uac01'], + ['\u11a8\u0308', '\uac01'], + ['\u11a8', '\u231a'], + ['\u11a8\u0308', '\u231a'], + ['\u11a8\u0300'], + ['\u11a8\u0308\u0300'], + ['\u11a8\u200d'], + ['\u11a8\u0308\u200d'], + ['\u11a8', '\u0378'], + ['\u11a8\u0308', '\u0378'], + ['\u11a8', '\ud800'], + ['\u11a8\u0308', '\ud800'], + ['\uac00', ' '], + ['\uac00\u0308', ' '], + ['\uac00', '\r'], + ['\uac00\u0308', '\r'], + ['\uac00', '\n'], + ['\uac00\u0308', '\n'], + ['\uac00', '\x01'], + ['\uac00\u0308', '\x01'], + ['\uac00\u034f'], + ['\uac00\u0308\u034f'], + ['\uac00', '\u{1f1e6}'], + ['\uac00\u0308', '\u{1f1e6}'], + ['\uac00', '\u0600'], + ['\uac00\u0308', '\u0600'], + ['\uac00\u0903'], + ['\uac00\u0308\u0903'], + ['\uac00', '\u1100'], + ['\uac00\u0308', '\u1100'], + ['\uac00\u1160'], + ['\uac00\u0308', '\u1160'], + ['\uac00\u11a8'], + ['\uac00\u0308', '\u11a8'], + ['\uac00', '\uac00'], + ['\uac00\u0308', '\uac00'], + ['\uac00', '\uac01'], + ['\uac00\u0308', '\uac01'], + ['\uac00', '\u231a'], + ['\uac00\u0308', '\u231a'], + ['\uac00\u0300'], + ['\uac00\u0308\u0300'], + ['\uac00\u200d'], + ['\uac00\u0308\u200d'], + ['\uac00', '\u0378'], + ['\uac00\u0308', '\u0378'], + ['\uac00', '\ud800'], + ['\uac00\u0308', '\ud800'], + ['\uac01', ' '], + ['\uac01\u0308', ' '], + ['\uac01', '\r'], + ['\uac01\u0308', '\r'], + ['\uac01', '\n'], + ['\uac01\u0308', '\n'], + ['\uac01', '\x01'], + ['\uac01\u0308', '\x01'], + ['\uac01\u034f'], + ['\uac01\u0308\u034f'], + ['\uac01', '\u{1f1e6}'], + ['\uac01\u0308', '\u{1f1e6}'], + ['\uac01', '\u0600'], + ['\uac01\u0308', '\u0600'], + ['\uac01\u0903'], + ['\uac01\u0308\u0903'], + ['\uac01', '\u1100'], + ['\uac01\u0308', '\u1100'], + ['\uac01', '\u1160'], + ['\uac01\u0308', '\u1160'], + ['\uac01\u11a8'], + ['\uac01\u0308', '\u11a8'], + ['\uac01', '\uac00'], + ['\uac01\u0308', '\uac00'], + ['\uac01', '\uac01'], + ['\uac01\u0308', '\uac01'], + ['\uac01', '\u231a'], + ['\uac01\u0308', '\u231a'], + ['\uac01\u0300'], + ['\uac01\u0308\u0300'], + ['\uac01\u200d'], + ['\uac01\u0308\u200d'], + ['\uac01', '\u0378'], + ['\uac01\u0308', '\u0378'], + ['\uac01', '\ud800'], + ['\uac01\u0308', '\ud800'], + ['\u231a', ' '], + ['\u231a\u0308', ' '], + ['\u231a', '\r'], + ['\u231a\u0308', '\r'], + ['\u231a', '\n'], + ['\u231a\u0308', '\n'], + ['\u231a', '\x01'], + ['\u231a\u0308', '\x01'], + ['\u231a\u034f'], + ['\u231a\u0308\u034f'], + ['\u231a', '\u{1f1e6}'], + ['\u231a\u0308', '\u{1f1e6}'], + ['\u231a', '\u0600'], + ['\u231a\u0308', '\u0600'], + ['\u231a\u0903'], + ['\u231a\u0308\u0903'], + ['\u231a', '\u1100'], + ['\u231a\u0308', '\u1100'], + ['\u231a', '\u1160'], + ['\u231a\u0308', '\u1160'], + ['\u231a', '\u11a8'], + ['\u231a\u0308', '\u11a8'], + ['\u231a', '\uac00'], + ['\u231a\u0308', '\uac00'], + ['\u231a', '\uac01'], + ['\u231a\u0308', '\uac01'], + ['\u231a', '\u231a'], + ['\u231a\u0308', '\u231a'], + ['\u231a\u0300'], + ['\u231a\u0308\u0300'], + ['\u231a\u200d'], + ['\u231a\u0308\u200d'], + ['\u231a', '\u0378'], + ['\u231a\u0308', '\u0378'], + ['\u231a', '\ud800'], + ['\u231a\u0308', '\ud800'], + ['\u0300', ' '], + ['\u0300\u0308', ' '], + ['\u0300', '\r'], + ['\u0300\u0308', '\r'], + ['\u0300', '\n'], + ['\u0300\u0308', '\n'], + ['\u0300', '\x01'], + ['\u0300\u0308', '\x01'], + ['\u0300\u034f'], + ['\u0300\u0308\u034f'], + ['\u0300', '\u{1f1e6}'], + ['\u0300\u0308', '\u{1f1e6}'], + ['\u0300', '\u0600'], + ['\u0300\u0308', '\u0600'], + ['\u0300\u0903'], + ['\u0300\u0308\u0903'], + ['\u0300', '\u1100'], + ['\u0300\u0308', '\u1100'], + ['\u0300', '\u1160'], + ['\u0300\u0308', '\u1160'], + ['\u0300', '\u11a8'], + ['\u0300\u0308', '\u11a8'], + ['\u0300', '\uac00'], + ['\u0300\u0308', '\uac00'], + ['\u0300', '\uac01'], + ['\u0300\u0308', '\uac01'], + ['\u0300', '\u231a'], + ['\u0300\u0308', '\u231a'], + ['\u0300\u0300'], + ['\u0300\u0308\u0300'], + ['\u0300\u200d'], + ['\u0300\u0308\u200d'], + ['\u0300', '\u0378'], + ['\u0300\u0308', '\u0378'], + ['\u0300', '\ud800'], + ['\u0300\u0308', '\ud800'], + ['\u200d', ' '], + ['\u200d\u0308', ' '], + ['\u200d', '\r'], + ['\u200d\u0308', '\r'], + ['\u200d', '\n'], + ['\u200d\u0308', '\n'], + ['\u200d', '\x01'], + ['\u200d\u0308', '\x01'], + ['\u200d\u034f'], + ['\u200d\u0308\u034f'], + ['\u200d', '\u{1f1e6}'], + ['\u200d\u0308', '\u{1f1e6}'], + ['\u200d', '\u0600'], + ['\u200d\u0308', '\u0600'], + ['\u200d\u0903'], + ['\u200d\u0308\u0903'], + ['\u200d', '\u1100'], + ['\u200d\u0308', '\u1100'], + ['\u200d', '\u1160'], + ['\u200d\u0308', '\u1160'], + ['\u200d', '\u11a8'], + ['\u200d\u0308', '\u11a8'], + ['\u200d', '\uac00'], + ['\u200d\u0308', '\uac00'], + ['\u200d', '\uac01'], + ['\u200d\u0308', '\uac01'], + ['\u200d', '\u231a'], + ['\u200d\u0308', '\u231a'], + ['\u200d\u0300'], + ['\u200d\u0308\u0300'], + ['\u200d\u200d'], + ['\u200d\u0308\u200d'], + ['\u200d', '\u0378'], + ['\u200d\u0308', '\u0378'], + ['\u200d', '\ud800'], + ['\u200d\u0308', '\ud800'], + ['\u0378', ' '], + ['\u0378\u0308', ' '], + ['\u0378', '\r'], + ['\u0378\u0308', '\r'], + ['\u0378', '\n'], + ['\u0378\u0308', '\n'], + ['\u0378', '\x01'], + ['\u0378\u0308', '\x01'], + ['\u0378\u034f'], + ['\u0378\u0308\u034f'], + ['\u0378', '\u{1f1e6}'], + ['\u0378\u0308', '\u{1f1e6}'], + ['\u0378', '\u0600'], + ['\u0378\u0308', '\u0600'], + ['\u0378\u0903'], + ['\u0378\u0308\u0903'], + ['\u0378', '\u1100'], + ['\u0378\u0308', '\u1100'], + ['\u0378', '\u1160'], + ['\u0378\u0308', '\u1160'], + ['\u0378', '\u11a8'], + ['\u0378\u0308', '\u11a8'], + ['\u0378', '\uac00'], + ['\u0378\u0308', '\uac00'], + ['\u0378', '\uac01'], + ['\u0378\u0308', '\uac01'], + ['\u0378', '\u231a'], + ['\u0378\u0308', '\u231a'], + ['\u0378\u0300'], + ['\u0378\u0308\u0300'], + ['\u0378\u200d'], + ['\u0378\u0308\u200d'], + ['\u0378', '\u0378'], + ['\u0378\u0308', '\u0378'], + ['\u0378', '\ud800'], + ['\u0378\u0308', '\ud800'], + ['\ud800', ' '], + ['\ud800', '\u0308', ' '], + ['\ud800', '\r'], + ['\ud800', '\u0308', '\r'], + ['\ud800', '\n'], + ['\ud800', '\u0308', '\n'], + ['\ud800', '\x01'], + ['\ud800', '\u0308', '\x01'], + ['\ud800', '\u034f'], + ['\ud800', '\u0308\u034f'], + ['\ud800', '\u{1f1e6}'], + ['\ud800', '\u0308', '\u{1f1e6}'], + ['\ud800', '\u0600'], + ['\ud800', '\u0308', '\u0600'], + ['\ud800', '\u0903'], + ['\ud800', '\u0308\u0903'], + ['\ud800', '\u1100'], + ['\ud800', '\u0308', '\u1100'], + ['\ud800', '\u1160'], + ['\ud800', '\u0308', '\u1160'], + ['\ud800', '\u11a8'], + ['\ud800', '\u0308', '\u11a8'], + ['\ud800', '\uac00'], + ['\ud800', '\u0308', '\uac00'], + ['\ud800', '\uac01'], + ['\ud800', '\u0308', '\uac01'], + ['\ud800', '\u231a'], + ['\ud800', '\u0308', '\u231a'], + ['\ud800', '\u0300'], + ['\ud800', '\u0308\u0300'], + ['\ud800', '\u200d'], + ['\ud800', '\u0308\u200d'], + ['\ud800', '\u0378'], + ['\ud800', '\u0308', '\u0378'], + ['\ud800', '\ud800'], + ['\ud800', '\u0308', '\ud800'], + ['\r\n', 'a', '\n', '\u0308'], + ['a\u0308'], + [' \u200d', '\u0646'], + ['\u0646\u200d', ' '], + ['\u1100\u1100'], + ['\uac00\u11a8', '\u1100'], + ['\uac01\u11a8', '\u1100'], + ['\u{1f1e6}\u{1f1e7}', '\u{1f1e8}', 'b'], + ['a', '\u{1f1e6}\u{1f1e7}', '\u{1f1e8}', 'b'], + ['a', '\u{1f1e6}\u{1f1e7}\u200d', '\u{1f1e8}', 'b'], + ['a', '\u{1f1e6}\u200d', '\u{1f1e7}\u{1f1e8}', 'b'], + ['a', '\u{1f1e6}\u{1f1e7}', '\u{1f1e8}\u{1f1e9}', 'b'], + ['a\u200d'], + ['a\u0308', 'b'], + ['a\u0903', 'b'], + ['a', '\u0600b'], + ['\u{1f476}\u{1f3ff}', '\u{1f476}'], + ['a\u{1f3ff}', '\u{1f476}'], + ['a\u{1f3ff}', '\u{1f476}\u200d\u{1f6d1}'], + ['\u{1f476}\u{1f3ff}\u0308\u200d\u{1f476}\u{1f3ff}'], + ['\u{1f6d1}\u200d\u{1f6d1}'], + ['a\u200d', '\u{1f6d1}'], + ['\u2701\u200d\u2701'], + ['a\u200d', '\u2701'], +]; +// Emoji tests. +const List> emojis = [ + ['\u{1f600}'], + ['\u{1f601}'], + ['\u{1f602}'], + ['\u{1f923}'], + ['\u{1f603}'], + ['\u{1f604}'], + ['\u{1f605}'], + ['\u{1f606}'], + ['\u{1f609}'], + ['\u{1f60a}'], + ['\u{1f60b}'], + ['\u{1f60e}'], + ['\u{1f60d}'], + ['\u{1f618}'], + ['\u{1f970}'], + ['\u{1f617}'], + ['\u{1f619}'], + ['\u{1f61a}'], + ['\u263a\ufe0f'], + ['\u263a'], + ['\u{1f642}'], + ['\u{1f917}'], + ['\u{1f929}'], + ['\u{1f914}'], + ['\u{1f928}'], + ['\u{1f610}'], + ['\u{1f611}'], + ['\u{1f636}'], + ['\u{1f644}'], + ['\u{1f60f}'], + ['\u{1f623}'], + ['\u{1f625}'], + ['\u{1f62e}'], + ['\u{1f910}'], + ['\u{1f62f}'], + ['\u{1f62a}'], + ['\u{1f62b}'], + ['\u{1f634}'], + ['\u{1f60c}'], + ['\u{1f61b}'], + ['\u{1f61c}'], + ['\u{1f61d}'], + ['\u{1f924}'], + ['\u{1f612}'], + ['\u{1f613}'], + ['\u{1f614}'], + ['\u{1f615}'], + ['\u{1f643}'], + ['\u{1f911}'], + ['\u{1f632}'], + ['\u2639\ufe0f'], + ['\u2639'], + ['\u{1f641}'], + ['\u{1f616}'], + ['\u{1f61e}'], + ['\u{1f61f}'], + ['\u{1f624}'], + ['\u{1f622}'], + ['\u{1f62d}'], + ['\u{1f626}'], + ['\u{1f627}'], + ['\u{1f628}'], + ['\u{1f629}'], + ['\u{1f92f}'], + ['\u{1f62c}'], + ['\u{1f630}'], + ['\u{1f631}'], + ['\u{1f975}'], + ['\u{1f976}'], + ['\u{1f633}'], + ['\u{1f92a}'], + ['\u{1f635}'], + ['\u{1f621}'], + ['\u{1f620}'], + ['\u{1f92c}'], + ['\u{1f637}'], + ['\u{1f912}'], + ['\u{1f915}'], + ['\u{1f922}'], + ['\u{1f92e}'], + ['\u{1f927}'], + ['\u{1f607}'], + ['\u{1f920}'], + ['\u{1f973}'], + ['\u{1f974}'], + ['\u{1f97a}'], + ['\u{1f925}'], + ['\u{1f92b}'], + ['\u{1f92d}'], + ['\u{1f9d0}'], + ['\u{1f913}'], + ['\u{1f608}'], + ['\u{1f47f}'], + ['\u{1f921}'], + ['\u{1f479}'], + ['\u{1f47a}'], + ['\u{1f480}'], + ['\u2620\ufe0f'], + ['\u2620'], + ['\u{1f47b}'], + ['\u{1f47d}'], + ['\u{1f47e}'], + ['\u{1f916}'], + ['\u{1f4a9}'], + ['\u{1f63a}'], + ['\u{1f638}'], + ['\u{1f639}'], + ['\u{1f63b}'], + ['\u{1f63c}'], + ['\u{1f63d}'], + ['\u{1f640}'], + ['\u{1f63f}'], + ['\u{1f63e}'], + ['\u{1f648}'], + ['\u{1f649}'], + ['\u{1f64a}'], + ['\u{1f3fb}'], + ['\u{1f3fc}'], + ['\u{1f3fd}'], + ['\u{1f3fe}'], + ['\u{1f3ff}'], + ['\u{1f476}'], + ['\u{1f476}\u{1f3fb}'], + ['\u{1f476}\u{1f3fc}'], + ['\u{1f476}\u{1f3fd}'], + ['\u{1f476}\u{1f3fe}'], + ['\u{1f476}\u{1f3ff}'], + ['\u{1f9d2}'], + ['\u{1f9d2}\u{1f3fb}'], + ['\u{1f9d2}\u{1f3fc}'], + ['\u{1f9d2}\u{1f3fd}'], + ['\u{1f9d2}\u{1f3fe}'], + ['\u{1f9d2}\u{1f3ff}'], + ['\u{1f466}'], + ['\u{1f466}\u{1f3fb}'], + ['\u{1f466}\u{1f3fc}'], + ['\u{1f466}\u{1f3fd}'], + ['\u{1f466}\u{1f3fe}'], + ['\u{1f466}\u{1f3ff}'], + ['\u{1f467}'], + ['\u{1f467}\u{1f3fb}'], + ['\u{1f467}\u{1f3fc}'], + ['\u{1f467}\u{1f3fd}'], + ['\u{1f467}\u{1f3fe}'], + ['\u{1f467}\u{1f3ff}'], + ['\u{1f9d1}'], + ['\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3ff}'], + ['\u{1f468}'], + ['\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3ff}'], + ['\u{1f469}'], + ['\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3ff}'], + ['\u{1f9d3}'], + ['\u{1f9d3}\u{1f3fb}'], + ['\u{1f9d3}\u{1f3fc}'], + ['\u{1f9d3}\u{1f3fd}'], + ['\u{1f9d3}\u{1f3fe}'], + ['\u{1f9d3}\u{1f3ff}'], + ['\u{1f474}'], + ['\u{1f474}\u{1f3fb}'], + ['\u{1f474}\u{1f3fc}'], + ['\u{1f474}\u{1f3fd}'], + ['\u{1f474}\u{1f3fe}'], + ['\u{1f474}\u{1f3ff}'], + ['\u{1f475}'], + ['\u{1f475}\u{1f3fb}'], + ['\u{1f475}\u{1f3fc}'], + ['\u{1f475}\u{1f3fd}'], + ['\u{1f475}\u{1f3fe}'], + ['\u{1f475}\u{1f3ff}'], + ['\u{1f468}\u200d\u2695\ufe0f'], + ['\u{1f468}\u200d\u2695'], + ['\u{1f468}\u{1f3fb}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3fb}\u200d\u2695'], + ['\u{1f468}\u{1f3fc}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3fc}\u200d\u2695'], + ['\u{1f468}\u{1f3fd}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3fd}\u200d\u2695'], + ['\u{1f468}\u{1f3fe}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3fe}\u200d\u2695'], + ['\u{1f468}\u{1f3ff}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3ff}\u200d\u2695'], + ['\u{1f469}\u200d\u2695\ufe0f'], + ['\u{1f469}\u200d\u2695'], + ['\u{1f469}\u{1f3fb}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3fb}\u200d\u2695'], + ['\u{1f469}\u{1f3fc}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3fc}\u200d\u2695'], + ['\u{1f469}\u{1f3fd}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3fd}\u200d\u2695'], + ['\u{1f469}\u{1f3fe}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3fe}\u200d\u2695'], + ['\u{1f469}\u{1f3ff}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3ff}\u200d\u2695'], + ['\u{1f468}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f393}'], + ['\u{1f469}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f393}'], + ['\u{1f468}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f3eb}'], + ['\u{1f469}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f3eb}'], + ['\u{1f468}\u200d\u2696\ufe0f'], + ['\u{1f468}\u200d\u2696'], + ['\u{1f468}\u{1f3fb}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3fb}\u200d\u2696'], + ['\u{1f468}\u{1f3fc}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3fc}\u200d\u2696'], + ['\u{1f468}\u{1f3fd}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3fd}\u200d\u2696'], + ['\u{1f468}\u{1f3fe}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3fe}\u200d\u2696'], + ['\u{1f468}\u{1f3ff}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3ff}\u200d\u2696'], + ['\u{1f469}\u200d\u2696\ufe0f'], + ['\u{1f469}\u200d\u2696'], + ['\u{1f469}\u{1f3fb}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3fb}\u200d\u2696'], + ['\u{1f469}\u{1f3fc}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3fc}\u200d\u2696'], + ['\u{1f469}\u{1f3fd}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3fd}\u200d\u2696'], + ['\u{1f469}\u{1f3fe}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3fe}\u200d\u2696'], + ['\u{1f469}\u{1f3ff}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3ff}\u200d\u2696'], + ['\u{1f468}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f33e}'], + ['\u{1f469}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f33e}'], + ['\u{1f468}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f373}'], + ['\u{1f469}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f373}'], + ['\u{1f468}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f527}'], + ['\u{1f469}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f527}'], + ['\u{1f468}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f3ed}'], + ['\u{1f469}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f3ed}'], + ['\u{1f468}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f4bc}'], + ['\u{1f469}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f4bc}'], + ['\u{1f468}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f52c}'], + ['\u{1f469}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f52c}'], + ['\u{1f468}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f4bb}'], + ['\u{1f469}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f4bb}'], + ['\u{1f468}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f3a4}'], + ['\u{1f469}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f3a4}'], + ['\u{1f468}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f3a8}'], + ['\u{1f469}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f3a8}'], + ['\u{1f468}\u200d\u2708\ufe0f'], + ['\u{1f468}\u200d\u2708'], + ['\u{1f468}\u{1f3fb}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3fb}\u200d\u2708'], + ['\u{1f468}\u{1f3fc}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3fc}\u200d\u2708'], + ['\u{1f468}\u{1f3fd}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3fd}\u200d\u2708'], + ['\u{1f468}\u{1f3fe}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3fe}\u200d\u2708'], + ['\u{1f468}\u{1f3ff}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3ff}\u200d\u2708'], + ['\u{1f469}\u200d\u2708\ufe0f'], + ['\u{1f469}\u200d\u2708'], + ['\u{1f469}\u{1f3fb}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3fb}\u200d\u2708'], + ['\u{1f469}\u{1f3fc}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3fc}\u200d\u2708'], + ['\u{1f469}\u{1f3fd}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3fd}\u200d\u2708'], + ['\u{1f469}\u{1f3fe}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3fe}\u200d\u2708'], + ['\u{1f469}\u{1f3ff}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3ff}\u200d\u2708'], + ['\u{1f468}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f680}'], + ['\u{1f469}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f680}'], + ['\u{1f468}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f692}'], + ['\u{1f469}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f692}'], + ['\u{1f46e}'], + ['\u{1f46e}\u{1f3fb}'], + ['\u{1f46e}\u{1f3fc}'], + ['\u{1f46e}\u{1f3fd}'], + ['\u{1f46e}\u{1f3fe}'], + ['\u{1f46e}\u{1f3ff}'], + ['\u{1f46e}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u200d\u2642'], + ['\u{1f46e}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3fb}\u200d\u2642'], + ['\u{1f46e}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3fc}\u200d\u2642'], + ['\u{1f46e}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3fd}\u200d\u2642'], + ['\u{1f46e}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3fe}\u200d\u2642'], + ['\u{1f46e}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3ff}\u200d\u2642'], + ['\u{1f46e}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u200d\u2640'], + ['\u{1f46e}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3fb}\u200d\u2640'], + ['\u{1f46e}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3fc}\u200d\u2640'], + ['\u{1f46e}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3fd}\u200d\u2640'], + ['\u{1f46e}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3fe}\u200d\u2640'], + ['\u{1f46e}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3ff}\u200d\u2640'], + ['\u{1f575}\ufe0f'], + ['\u{1f575}'], + ['\u{1f575}\u{1f3fb}'], + ['\u{1f575}\u{1f3fc}'], + ['\u{1f575}\u{1f3fd}'], + ['\u{1f575}\u{1f3fe}'], + ['\u{1f575}\u{1f3ff}'], + ['\u{1f575}\ufe0f\u200d\u2642\ufe0f'], + ['\u{1f575}\u200d\u2642\ufe0f'], + ['\u{1f575}\ufe0f\u200d\u2642'], + ['\u{1f575}\u200d\u2642'], + ['\u{1f575}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3fb}\u200d\u2642'], + ['\u{1f575}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3fc}\u200d\u2642'], + ['\u{1f575}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3fd}\u200d\u2642'], + ['\u{1f575}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3fe}\u200d\u2642'], + ['\u{1f575}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3ff}\u200d\u2642'], + ['\u{1f575}\ufe0f\u200d\u2640\ufe0f'], + ['\u{1f575}\u200d\u2640\ufe0f'], + ['\u{1f575}\ufe0f\u200d\u2640'], + ['\u{1f575}\u200d\u2640'], + ['\u{1f575}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3fb}\u200d\u2640'], + ['\u{1f575}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3fc}\u200d\u2640'], + ['\u{1f575}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3fd}\u200d\u2640'], + ['\u{1f575}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3fe}\u200d\u2640'], + ['\u{1f575}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3ff}\u200d\u2640'], + ['\u{1f482}'], + ['\u{1f482}\u{1f3fb}'], + ['\u{1f482}\u{1f3fc}'], + ['\u{1f482}\u{1f3fd}'], + ['\u{1f482}\u{1f3fe}'], + ['\u{1f482}\u{1f3ff}'], + ['\u{1f482}\u200d\u2642\ufe0f'], + ['\u{1f482}\u200d\u2642'], + ['\u{1f482}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3fb}\u200d\u2642'], + ['\u{1f482}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3fc}\u200d\u2642'], + ['\u{1f482}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3fd}\u200d\u2642'], + ['\u{1f482}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3fe}\u200d\u2642'], + ['\u{1f482}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3ff}\u200d\u2642'], + ['\u{1f482}\u200d\u2640\ufe0f'], + ['\u{1f482}\u200d\u2640'], + ['\u{1f482}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3fb}\u200d\u2640'], + ['\u{1f482}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3fc}\u200d\u2640'], + ['\u{1f482}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3fd}\u200d\u2640'], + ['\u{1f482}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3fe}\u200d\u2640'], + ['\u{1f482}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3ff}\u200d\u2640'], + ['\u{1f477}'], + ['\u{1f477}\u{1f3fb}'], + ['\u{1f477}\u{1f3fc}'], + ['\u{1f477}\u{1f3fd}'], + ['\u{1f477}\u{1f3fe}'], + ['\u{1f477}\u{1f3ff}'], + ['\u{1f477}\u200d\u2642\ufe0f'], + ['\u{1f477}\u200d\u2642'], + ['\u{1f477}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3fb}\u200d\u2642'], + ['\u{1f477}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3fc}\u200d\u2642'], + ['\u{1f477}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3fd}\u200d\u2642'], + ['\u{1f477}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3fe}\u200d\u2642'], + ['\u{1f477}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3ff}\u200d\u2642'], + ['\u{1f477}\u200d\u2640\ufe0f'], + ['\u{1f477}\u200d\u2640'], + ['\u{1f477}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3fb}\u200d\u2640'], + ['\u{1f477}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3fc}\u200d\u2640'], + ['\u{1f477}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3fd}\u200d\u2640'], + ['\u{1f477}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3fe}\u200d\u2640'], + ['\u{1f477}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3ff}\u200d\u2640'], + ['\u{1f934}'], + ['\u{1f934}\u{1f3fb}'], + ['\u{1f934}\u{1f3fc}'], + ['\u{1f934}\u{1f3fd}'], + ['\u{1f934}\u{1f3fe}'], + ['\u{1f934}\u{1f3ff}'], + ['\u{1f478}'], + ['\u{1f478}\u{1f3fb}'], + ['\u{1f478}\u{1f3fc}'], + ['\u{1f478}\u{1f3fd}'], + ['\u{1f478}\u{1f3fe}'], + ['\u{1f478}\u{1f3ff}'], + ['\u{1f473}'], + ['\u{1f473}\u{1f3fb}'], + ['\u{1f473}\u{1f3fc}'], + ['\u{1f473}\u{1f3fd}'], + ['\u{1f473}\u{1f3fe}'], + ['\u{1f473}\u{1f3ff}'], + ['\u{1f473}\u200d\u2642\ufe0f'], + ['\u{1f473}\u200d\u2642'], + ['\u{1f473}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3fb}\u200d\u2642'], + ['\u{1f473}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3fc}\u200d\u2642'], + ['\u{1f473}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3fd}\u200d\u2642'], + ['\u{1f473}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3fe}\u200d\u2642'], + ['\u{1f473}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3ff}\u200d\u2642'], + ['\u{1f473}\u200d\u2640\ufe0f'], + ['\u{1f473}\u200d\u2640'], + ['\u{1f473}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3fb}\u200d\u2640'], + ['\u{1f473}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3fc}\u200d\u2640'], + ['\u{1f473}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3fd}\u200d\u2640'], + ['\u{1f473}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3fe}\u200d\u2640'], + ['\u{1f473}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3ff}\u200d\u2640'], + ['\u{1f472}'], + ['\u{1f472}\u{1f3fb}'], + ['\u{1f472}\u{1f3fc}'], + ['\u{1f472}\u{1f3fd}'], + ['\u{1f472}\u{1f3fe}'], + ['\u{1f472}\u{1f3ff}'], + ['\u{1f9d5}'], + ['\u{1f9d5}\u{1f3fb}'], + ['\u{1f9d5}\u{1f3fc}'], + ['\u{1f9d5}\u{1f3fd}'], + ['\u{1f9d5}\u{1f3fe}'], + ['\u{1f9d5}\u{1f3ff}'], + ['\u{1f9d4}'], + ['\u{1f9d4}\u{1f3fb}'], + ['\u{1f9d4}\u{1f3fc}'], + ['\u{1f9d4}\u{1f3fd}'], + ['\u{1f9d4}\u{1f3fe}'], + ['\u{1f9d4}\u{1f3ff}'], + ['\u{1f471}'], + ['\u{1f471}\u{1f3fb}'], + ['\u{1f471}\u{1f3fc}'], + ['\u{1f471}\u{1f3fd}'], + ['\u{1f471}\u{1f3fe}'], + ['\u{1f471}\u{1f3ff}'], + ['\u{1f471}\u200d\u2642\ufe0f'], + ['\u{1f471}\u200d\u2642'], + ['\u{1f471}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3fb}\u200d\u2642'], + ['\u{1f471}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3fc}\u200d\u2642'], + ['\u{1f471}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3fd}\u200d\u2642'], + ['\u{1f471}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3fe}\u200d\u2642'], + ['\u{1f471}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3ff}\u200d\u2642'], + ['\u{1f471}\u200d\u2640\ufe0f'], + ['\u{1f471}\u200d\u2640'], + ['\u{1f471}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3fb}\u200d\u2640'], + ['\u{1f471}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3fc}\u200d\u2640'], + ['\u{1f471}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3fd}\u200d\u2640'], + ['\u{1f471}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3fe}\u200d\u2640'], + ['\u{1f471}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3ff}\u200d\u2640'], + ['\u{1f468}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9b0}'], + ['\u{1f469}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9b0}'], + ['\u{1f468}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9b1}'], + ['\u{1f469}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9b1}'], + ['\u{1f468}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9b2}'], + ['\u{1f469}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9b2}'], + ['\u{1f468}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9b3}'], + ['\u{1f469}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9b3}'], + ['\u{1f935}'], + ['\u{1f935}\u{1f3fb}'], + ['\u{1f935}\u{1f3fc}'], + ['\u{1f935}\u{1f3fd}'], + ['\u{1f935}\u{1f3fe}'], + ['\u{1f935}\u{1f3ff}'], + ['\u{1f470}'], + ['\u{1f470}\u{1f3fb}'], + ['\u{1f470}\u{1f3fc}'], + ['\u{1f470}\u{1f3fd}'], + ['\u{1f470}\u{1f3fe}'], + ['\u{1f470}\u{1f3ff}'], + ['\u{1f930}'], + ['\u{1f930}\u{1f3fb}'], + ['\u{1f930}\u{1f3fc}'], + ['\u{1f930}\u{1f3fd}'], + ['\u{1f930}\u{1f3fe}'], + ['\u{1f930}\u{1f3ff}'], + ['\u{1f931}'], + ['\u{1f931}\u{1f3fb}'], + ['\u{1f931}\u{1f3fc}'], + ['\u{1f931}\u{1f3fd}'], + ['\u{1f931}\u{1f3fe}'], + ['\u{1f931}\u{1f3ff}'], + ['\u{1f47c}'], + ['\u{1f47c}\u{1f3fb}'], + ['\u{1f47c}\u{1f3fc}'], + ['\u{1f47c}\u{1f3fd}'], + ['\u{1f47c}\u{1f3fe}'], + ['\u{1f47c}\u{1f3ff}'], + ['\u{1f385}'], + ['\u{1f385}\u{1f3fb}'], + ['\u{1f385}\u{1f3fc}'], + ['\u{1f385}\u{1f3fd}'], + ['\u{1f385}\u{1f3fe}'], + ['\u{1f385}\u{1f3ff}'], + ['\u{1f936}'], + ['\u{1f936}\u{1f3fb}'], + ['\u{1f936}\u{1f3fc}'], + ['\u{1f936}\u{1f3fd}'], + ['\u{1f936}\u{1f3fe}'], + ['\u{1f936}\u{1f3ff}'], + ['\u{1f9b8}'], + ['\u{1f9b8}\u{1f3fb}'], + ['\u{1f9b8}\u{1f3fc}'], + ['\u{1f9b8}\u{1f3fd}'], + ['\u{1f9b8}\u{1f3fe}'], + ['\u{1f9b8}\u{1f3ff}'], + ['\u{1f9b8}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u200d\u2640'], + ['\u{1f9b8}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3fb}\u200d\u2640'], + ['\u{1f9b8}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3fc}\u200d\u2640'], + ['\u{1f9b8}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3fd}\u200d\u2640'], + ['\u{1f9b8}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3fe}\u200d\u2640'], + ['\u{1f9b8}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3ff}\u200d\u2640'], + ['\u{1f9b8}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u200d\u2642'], + ['\u{1f9b8}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3fb}\u200d\u2642'], + ['\u{1f9b8}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3fc}\u200d\u2642'], + ['\u{1f9b8}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3fd}\u200d\u2642'], + ['\u{1f9b8}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3fe}\u200d\u2642'], + ['\u{1f9b8}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3ff}\u200d\u2642'], + ['\u{1f9b9}'], + ['\u{1f9b9}\u{1f3fb}'], + ['\u{1f9b9}\u{1f3fc}'], + ['\u{1f9b9}\u{1f3fd}'], + ['\u{1f9b9}\u{1f3fe}'], + ['\u{1f9b9}\u{1f3ff}'], + ['\u{1f9b9}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u200d\u2640'], + ['\u{1f9b9}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3fb}\u200d\u2640'], + ['\u{1f9b9}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3fc}\u200d\u2640'], + ['\u{1f9b9}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3fd}\u200d\u2640'], + ['\u{1f9b9}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3fe}\u200d\u2640'], + ['\u{1f9b9}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3ff}\u200d\u2640'], + ['\u{1f9b9}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u200d\u2642'], + ['\u{1f9b9}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3fb}\u200d\u2642'], + ['\u{1f9b9}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3fc}\u200d\u2642'], + ['\u{1f9b9}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3fd}\u200d\u2642'], + ['\u{1f9b9}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3fe}\u200d\u2642'], + ['\u{1f9b9}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3ff}\u200d\u2642'], + ['\u{1f9d9}'], + ['\u{1f9d9}\u{1f3fb}'], + ['\u{1f9d9}\u{1f3fc}'], + ['\u{1f9d9}\u{1f3fd}'], + ['\u{1f9d9}\u{1f3fe}'], + ['\u{1f9d9}\u{1f3ff}'], + ['\u{1f9d9}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u200d\u2640'], + ['\u{1f9d9}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3fb}\u200d\u2640'], + ['\u{1f9d9}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3fc}\u200d\u2640'], + ['\u{1f9d9}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3fd}\u200d\u2640'], + ['\u{1f9d9}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3fe}\u200d\u2640'], + ['\u{1f9d9}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3ff}\u200d\u2640'], + ['\u{1f9d9}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u200d\u2642'], + ['\u{1f9d9}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3fb}\u200d\u2642'], + ['\u{1f9d9}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3fc}\u200d\u2642'], + ['\u{1f9d9}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3fd}\u200d\u2642'], + ['\u{1f9d9}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3fe}\u200d\u2642'], + ['\u{1f9d9}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3ff}\u200d\u2642'], + ['\u{1f9da}'], + ['\u{1f9da}\u{1f3fb}'], + ['\u{1f9da}\u{1f3fc}'], + ['\u{1f9da}\u{1f3fd}'], + ['\u{1f9da}\u{1f3fe}'], + ['\u{1f9da}\u{1f3ff}'], + ['\u{1f9da}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u200d\u2640'], + ['\u{1f9da}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3fb}\u200d\u2640'], + ['\u{1f9da}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3fc}\u200d\u2640'], + ['\u{1f9da}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3fd}\u200d\u2640'], + ['\u{1f9da}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3fe}\u200d\u2640'], + ['\u{1f9da}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3ff}\u200d\u2640'], + ['\u{1f9da}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u200d\u2642'], + ['\u{1f9da}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3fb}\u200d\u2642'], + ['\u{1f9da}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3fc}\u200d\u2642'], + ['\u{1f9da}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3fd}\u200d\u2642'], + ['\u{1f9da}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3fe}\u200d\u2642'], + ['\u{1f9da}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3ff}\u200d\u2642'], + ['\u{1f9db}'], + ['\u{1f9db}\u{1f3fb}'], + ['\u{1f9db}\u{1f3fc}'], + ['\u{1f9db}\u{1f3fd}'], + ['\u{1f9db}\u{1f3fe}'], + ['\u{1f9db}\u{1f3ff}'], + ['\u{1f9db}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u200d\u2640'], + ['\u{1f9db}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3fb}\u200d\u2640'], + ['\u{1f9db}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3fc}\u200d\u2640'], + ['\u{1f9db}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3fd}\u200d\u2640'], + ['\u{1f9db}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3fe}\u200d\u2640'], + ['\u{1f9db}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3ff}\u200d\u2640'], + ['\u{1f9db}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u200d\u2642'], + ['\u{1f9db}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3fb}\u200d\u2642'], + ['\u{1f9db}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3fc}\u200d\u2642'], + ['\u{1f9db}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3fd}\u200d\u2642'], + ['\u{1f9db}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3fe}\u200d\u2642'], + ['\u{1f9db}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3ff}\u200d\u2642'], + ['\u{1f9dc}'], + ['\u{1f9dc}\u{1f3fb}'], + ['\u{1f9dc}\u{1f3fc}'], + ['\u{1f9dc}\u{1f3fd}'], + ['\u{1f9dc}\u{1f3fe}'], + ['\u{1f9dc}\u{1f3ff}'], + ['\u{1f9dc}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u200d\u2640'], + ['\u{1f9dc}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3fb}\u200d\u2640'], + ['\u{1f9dc}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3fc}\u200d\u2640'], + ['\u{1f9dc}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3fd}\u200d\u2640'], + ['\u{1f9dc}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3fe}\u200d\u2640'], + ['\u{1f9dc}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3ff}\u200d\u2640'], + ['\u{1f9dc}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u200d\u2642'], + ['\u{1f9dc}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3fb}\u200d\u2642'], + ['\u{1f9dc}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3fc}\u200d\u2642'], + ['\u{1f9dc}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3fd}\u200d\u2642'], + ['\u{1f9dc}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3fe}\u200d\u2642'], + ['\u{1f9dc}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3ff}\u200d\u2642'], + ['\u{1f9dd}'], + ['\u{1f9dd}\u{1f3fb}'], + ['\u{1f9dd}\u{1f3fc}'], + ['\u{1f9dd}\u{1f3fd}'], + ['\u{1f9dd}\u{1f3fe}'], + ['\u{1f9dd}\u{1f3ff}'], + ['\u{1f9dd}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u200d\u2640'], + ['\u{1f9dd}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3fb}\u200d\u2640'], + ['\u{1f9dd}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3fc}\u200d\u2640'], + ['\u{1f9dd}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3fd}\u200d\u2640'], + ['\u{1f9dd}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3fe}\u200d\u2640'], + ['\u{1f9dd}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3ff}\u200d\u2640'], + ['\u{1f9dd}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u200d\u2642'], + ['\u{1f9dd}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3fb}\u200d\u2642'], + ['\u{1f9dd}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3fc}\u200d\u2642'], + ['\u{1f9dd}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3fd}\u200d\u2642'], + ['\u{1f9dd}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3fe}\u200d\u2642'], + ['\u{1f9dd}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3ff}\u200d\u2642'], + ['\u{1f9de}'], + ['\u{1f9de}\u200d\u2640\ufe0f'], + ['\u{1f9de}\u200d\u2640'], + ['\u{1f9de}\u200d\u2642\ufe0f'], + ['\u{1f9de}\u200d\u2642'], + ['\u{1f9df}'], + ['\u{1f9df}\u200d\u2640\ufe0f'], + ['\u{1f9df}\u200d\u2640'], + ['\u{1f9df}\u200d\u2642\ufe0f'], + ['\u{1f9df}\u200d\u2642'], + ['\u{1f64d}'], + ['\u{1f64d}\u{1f3fb}'], + ['\u{1f64d}\u{1f3fc}'], + ['\u{1f64d}\u{1f3fd}'], + ['\u{1f64d}\u{1f3fe}'], + ['\u{1f64d}\u{1f3ff}'], + ['\u{1f64d}\u200d\u2642\ufe0f'], + ['\u{1f64d}\u200d\u2642'], + ['\u{1f64d}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f64d}\u{1f3fb}\u200d\u2642'], + ['\u{1f64d}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f64d}\u{1f3fc}\u200d\u2642'], + ['\u{1f64d}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f64d}\u{1f3fd}\u200d\u2642'], + ['\u{1f64d}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f64d}\u{1f3fe}\u200d\u2642'], + ['\u{1f64d}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f64d}\u{1f3ff}\u200d\u2642'], + ['\u{1f64d}\u200d\u2640\ufe0f'], + ['\u{1f64d}\u200d\u2640'], + ['\u{1f64d}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f64d}\u{1f3fb}\u200d\u2640'], + ['\u{1f64d}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f64d}\u{1f3fc}\u200d\u2640'], + ['\u{1f64d}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f64d}\u{1f3fd}\u200d\u2640'], + ['\u{1f64d}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f64d}\u{1f3fe}\u200d\u2640'], + ['\u{1f64d}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f64d}\u{1f3ff}\u200d\u2640'], + ['\u{1f64e}'], + ['\u{1f64e}\u{1f3fb}'], + ['\u{1f64e}\u{1f3fc}'], + ['\u{1f64e}\u{1f3fd}'], + ['\u{1f64e}\u{1f3fe}'], + ['\u{1f64e}\u{1f3ff}'], + ['\u{1f64e}\u200d\u2642\ufe0f'], + ['\u{1f64e}\u200d\u2642'], + ['\u{1f64e}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f64e}\u{1f3fb}\u200d\u2642'], + ['\u{1f64e}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f64e}\u{1f3fc}\u200d\u2642'], + ['\u{1f64e}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f64e}\u{1f3fd}\u200d\u2642'], + ['\u{1f64e}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f64e}\u{1f3fe}\u200d\u2642'], + ['\u{1f64e}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f64e}\u{1f3ff}\u200d\u2642'], + ['\u{1f64e}\u200d\u2640\ufe0f'], + ['\u{1f64e}\u200d\u2640'], + ['\u{1f64e}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f64e}\u{1f3fb}\u200d\u2640'], + ['\u{1f64e}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f64e}\u{1f3fc}\u200d\u2640'], + ['\u{1f64e}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f64e}\u{1f3fd}\u200d\u2640'], + ['\u{1f64e}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f64e}\u{1f3fe}\u200d\u2640'], + ['\u{1f64e}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f64e}\u{1f3ff}\u200d\u2640'], + ['\u{1f645}'], + ['\u{1f645}\u{1f3fb}'], + ['\u{1f645}\u{1f3fc}'], + ['\u{1f645}\u{1f3fd}'], + ['\u{1f645}\u{1f3fe}'], + ['\u{1f645}\u{1f3ff}'], + ['\u{1f645}\u200d\u2642\ufe0f'], + ['\u{1f645}\u200d\u2642'], + ['\u{1f645}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f645}\u{1f3fb}\u200d\u2642'], + ['\u{1f645}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f645}\u{1f3fc}\u200d\u2642'], + ['\u{1f645}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f645}\u{1f3fd}\u200d\u2642'], + ['\u{1f645}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f645}\u{1f3fe}\u200d\u2642'], + ['\u{1f645}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f645}\u{1f3ff}\u200d\u2642'], + ['\u{1f645}\u200d\u2640\ufe0f'], + ['\u{1f645}\u200d\u2640'], + ['\u{1f645}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f645}\u{1f3fb}\u200d\u2640'], + ['\u{1f645}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f645}\u{1f3fc}\u200d\u2640'], + ['\u{1f645}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f645}\u{1f3fd}\u200d\u2640'], + ['\u{1f645}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f645}\u{1f3fe}\u200d\u2640'], + ['\u{1f645}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f645}\u{1f3ff}\u200d\u2640'], + ['\u{1f646}'], + ['\u{1f646}\u{1f3fb}'], + ['\u{1f646}\u{1f3fc}'], + ['\u{1f646}\u{1f3fd}'], + ['\u{1f646}\u{1f3fe}'], + ['\u{1f646}\u{1f3ff}'], + ['\u{1f646}\u200d\u2642\ufe0f'], + ['\u{1f646}\u200d\u2642'], + ['\u{1f646}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f646}\u{1f3fb}\u200d\u2642'], + ['\u{1f646}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f646}\u{1f3fc}\u200d\u2642'], + ['\u{1f646}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f646}\u{1f3fd}\u200d\u2642'], + ['\u{1f646}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f646}\u{1f3fe}\u200d\u2642'], + ['\u{1f646}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f646}\u{1f3ff}\u200d\u2642'], + ['\u{1f646}\u200d\u2640\ufe0f'], + ['\u{1f646}\u200d\u2640'], + ['\u{1f646}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f646}\u{1f3fb}\u200d\u2640'], + ['\u{1f646}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f646}\u{1f3fc}\u200d\u2640'], + ['\u{1f646}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f646}\u{1f3fd}\u200d\u2640'], + ['\u{1f646}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f646}\u{1f3fe}\u200d\u2640'], + ['\u{1f646}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f646}\u{1f3ff}\u200d\u2640'], + ['\u{1f481}'], + ['\u{1f481}\u{1f3fb}'], + ['\u{1f481}\u{1f3fc}'], + ['\u{1f481}\u{1f3fd}'], + ['\u{1f481}\u{1f3fe}'], + ['\u{1f481}\u{1f3ff}'], + ['\u{1f481}\u200d\u2642\ufe0f'], + ['\u{1f481}\u200d\u2642'], + ['\u{1f481}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f481}\u{1f3fb}\u200d\u2642'], + ['\u{1f481}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f481}\u{1f3fc}\u200d\u2642'], + ['\u{1f481}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f481}\u{1f3fd}\u200d\u2642'], + ['\u{1f481}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f481}\u{1f3fe}\u200d\u2642'], + ['\u{1f481}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f481}\u{1f3ff}\u200d\u2642'], + ['\u{1f481}\u200d\u2640\ufe0f'], + ['\u{1f481}\u200d\u2640'], + ['\u{1f481}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f481}\u{1f3fb}\u200d\u2640'], + ['\u{1f481}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f481}\u{1f3fc}\u200d\u2640'], + ['\u{1f481}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f481}\u{1f3fd}\u200d\u2640'], + ['\u{1f481}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f481}\u{1f3fe}\u200d\u2640'], + ['\u{1f481}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f481}\u{1f3ff}\u200d\u2640'], + ['\u{1f64b}'], + ['\u{1f64b}\u{1f3fb}'], + ['\u{1f64b}\u{1f3fc}'], + ['\u{1f64b}\u{1f3fd}'], + ['\u{1f64b}\u{1f3fe}'], + ['\u{1f64b}\u{1f3ff}'], + ['\u{1f64b}\u200d\u2642\ufe0f'], + ['\u{1f64b}\u200d\u2642'], + ['\u{1f64b}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f64b}\u{1f3fb}\u200d\u2642'], + ['\u{1f64b}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f64b}\u{1f3fc}\u200d\u2642'], + ['\u{1f64b}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f64b}\u{1f3fd}\u200d\u2642'], + ['\u{1f64b}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f64b}\u{1f3fe}\u200d\u2642'], + ['\u{1f64b}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f64b}\u{1f3ff}\u200d\u2642'], + ['\u{1f64b}\u200d\u2640\ufe0f'], + ['\u{1f64b}\u200d\u2640'], + ['\u{1f64b}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f64b}\u{1f3fb}\u200d\u2640'], + ['\u{1f64b}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f64b}\u{1f3fc}\u200d\u2640'], + ['\u{1f64b}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f64b}\u{1f3fd}\u200d\u2640'], + ['\u{1f64b}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f64b}\u{1f3fe}\u200d\u2640'], + ['\u{1f64b}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f64b}\u{1f3ff}\u200d\u2640'], + ['\u{1f647}'], + ['\u{1f647}\u{1f3fb}'], + ['\u{1f647}\u{1f3fc}'], + ['\u{1f647}\u{1f3fd}'], + ['\u{1f647}\u{1f3fe}'], + ['\u{1f647}\u{1f3ff}'], + ['\u{1f647}\u200d\u2642\ufe0f'], + ['\u{1f647}\u200d\u2642'], + ['\u{1f647}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f647}\u{1f3fb}\u200d\u2642'], + ['\u{1f647}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f647}\u{1f3fc}\u200d\u2642'], + ['\u{1f647}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f647}\u{1f3fd}\u200d\u2642'], + ['\u{1f647}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f647}\u{1f3fe}\u200d\u2642'], + ['\u{1f647}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f647}\u{1f3ff}\u200d\u2642'], + ['\u{1f647}\u200d\u2640\ufe0f'], + ['\u{1f647}\u200d\u2640'], + ['\u{1f647}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f647}\u{1f3fb}\u200d\u2640'], + ['\u{1f647}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f647}\u{1f3fc}\u200d\u2640'], + ['\u{1f647}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f647}\u{1f3fd}\u200d\u2640'], + ['\u{1f647}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f647}\u{1f3fe}\u200d\u2640'], + ['\u{1f647}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f647}\u{1f3ff}\u200d\u2640'], + ['\u{1f926}'], + ['\u{1f926}\u{1f3fb}'], + ['\u{1f926}\u{1f3fc}'], + ['\u{1f926}\u{1f3fd}'], + ['\u{1f926}\u{1f3fe}'], + ['\u{1f926}\u{1f3ff}'], + ['\u{1f926}\u200d\u2642\ufe0f'], + ['\u{1f926}\u200d\u2642'], + ['\u{1f926}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f926}\u{1f3fb}\u200d\u2642'], + ['\u{1f926}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f926}\u{1f3fc}\u200d\u2642'], + ['\u{1f926}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f926}\u{1f3fd}\u200d\u2642'], + ['\u{1f926}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f926}\u{1f3fe}\u200d\u2642'], + ['\u{1f926}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f926}\u{1f3ff}\u200d\u2642'], + ['\u{1f926}\u200d\u2640\ufe0f'], + ['\u{1f926}\u200d\u2640'], + ['\u{1f926}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f926}\u{1f3fb}\u200d\u2640'], + ['\u{1f926}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f926}\u{1f3fc}\u200d\u2640'], + ['\u{1f926}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f926}\u{1f3fd}\u200d\u2640'], + ['\u{1f926}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f926}\u{1f3fe}\u200d\u2640'], + ['\u{1f926}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f926}\u{1f3ff}\u200d\u2640'], + ['\u{1f937}'], + ['\u{1f937}\u{1f3fb}'], + ['\u{1f937}\u{1f3fc}'], + ['\u{1f937}\u{1f3fd}'], + ['\u{1f937}\u{1f3fe}'], + ['\u{1f937}\u{1f3ff}'], + ['\u{1f937}\u200d\u2642\ufe0f'], + ['\u{1f937}\u200d\u2642'], + ['\u{1f937}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f937}\u{1f3fb}\u200d\u2642'], + ['\u{1f937}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f937}\u{1f3fc}\u200d\u2642'], + ['\u{1f937}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f937}\u{1f3fd}\u200d\u2642'], + ['\u{1f937}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f937}\u{1f3fe}\u200d\u2642'], + ['\u{1f937}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f937}\u{1f3ff}\u200d\u2642'], + ['\u{1f937}\u200d\u2640\ufe0f'], + ['\u{1f937}\u200d\u2640'], + ['\u{1f937}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f937}\u{1f3fb}\u200d\u2640'], + ['\u{1f937}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f937}\u{1f3fc}\u200d\u2640'], + ['\u{1f937}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f937}\u{1f3fd}\u200d\u2640'], + ['\u{1f937}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f937}\u{1f3fe}\u200d\u2640'], + ['\u{1f937}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f937}\u{1f3ff}\u200d\u2640'], + ['\u{1f486}'], + ['\u{1f486}\u{1f3fb}'], + ['\u{1f486}\u{1f3fc}'], + ['\u{1f486}\u{1f3fd}'], + ['\u{1f486}\u{1f3fe}'], + ['\u{1f486}\u{1f3ff}'], + ['\u{1f486}\u200d\u2642\ufe0f'], + ['\u{1f486}\u200d\u2642'], + ['\u{1f486}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f486}\u{1f3fb}\u200d\u2642'], + ['\u{1f486}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f486}\u{1f3fc}\u200d\u2642'], + ['\u{1f486}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f486}\u{1f3fd}\u200d\u2642'], + ['\u{1f486}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f486}\u{1f3fe}\u200d\u2642'], + ['\u{1f486}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f486}\u{1f3ff}\u200d\u2642'], + ['\u{1f486}\u200d\u2640\ufe0f'], + ['\u{1f486}\u200d\u2640'], + ['\u{1f486}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f486}\u{1f3fb}\u200d\u2640'], + ['\u{1f486}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f486}\u{1f3fc}\u200d\u2640'], + ['\u{1f486}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f486}\u{1f3fd}\u200d\u2640'], + ['\u{1f486}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f486}\u{1f3fe}\u200d\u2640'], + ['\u{1f486}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f486}\u{1f3ff}\u200d\u2640'], + ['\u{1f487}'], + ['\u{1f487}\u{1f3fb}'], + ['\u{1f487}\u{1f3fc}'], + ['\u{1f487}\u{1f3fd}'], + ['\u{1f487}\u{1f3fe}'], + ['\u{1f487}\u{1f3ff}'], + ['\u{1f487}\u200d\u2642\ufe0f'], + ['\u{1f487}\u200d\u2642'], + ['\u{1f487}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f487}\u{1f3fb}\u200d\u2642'], + ['\u{1f487}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f487}\u{1f3fc}\u200d\u2642'], + ['\u{1f487}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f487}\u{1f3fd}\u200d\u2642'], + ['\u{1f487}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f487}\u{1f3fe}\u200d\u2642'], + ['\u{1f487}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f487}\u{1f3ff}\u200d\u2642'], + ['\u{1f487}\u200d\u2640\ufe0f'], + ['\u{1f487}\u200d\u2640'], + ['\u{1f487}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f487}\u{1f3fb}\u200d\u2640'], + ['\u{1f487}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f487}\u{1f3fc}\u200d\u2640'], + ['\u{1f487}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f487}\u{1f3fd}\u200d\u2640'], + ['\u{1f487}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f487}\u{1f3fe}\u200d\u2640'], + ['\u{1f487}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f487}\u{1f3ff}\u200d\u2640'], + ['\u{1f6b6}'], + ['\u{1f6b6}\u{1f3fb}'], + ['\u{1f6b6}\u{1f3fc}'], + ['\u{1f6b6}\u{1f3fd}'], + ['\u{1f6b6}\u{1f3fe}'], + ['\u{1f6b6}\u{1f3ff}'], + ['\u{1f6b6}\u200d\u2642\ufe0f'], + ['\u{1f6b6}\u200d\u2642'], + ['\u{1f6b6}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f6b6}\u{1f3fb}\u200d\u2642'], + ['\u{1f6b6}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f6b6}\u{1f3fc}\u200d\u2642'], + ['\u{1f6b6}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f6b6}\u{1f3fd}\u200d\u2642'], + ['\u{1f6b6}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f6b6}\u{1f3fe}\u200d\u2642'], + ['\u{1f6b6}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f6b6}\u{1f3ff}\u200d\u2642'], + ['\u{1f6b6}\u200d\u2640\ufe0f'], + ['\u{1f6b6}\u200d\u2640'], + ['\u{1f6b6}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f6b6}\u{1f3fb}\u200d\u2640'], + ['\u{1f6b6}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f6b6}\u{1f3fc}\u200d\u2640'], + ['\u{1f6b6}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f6b6}\u{1f3fd}\u200d\u2640'], + ['\u{1f6b6}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f6b6}\u{1f3fe}\u200d\u2640'], + ['\u{1f6b6}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f6b6}\u{1f3ff}\u200d\u2640'], + ['\u{1f3c3}'], + ['\u{1f3c3}\u{1f3fb}'], + ['\u{1f3c3}\u{1f3fc}'], + ['\u{1f3c3}\u{1f3fd}'], + ['\u{1f3c3}\u{1f3fe}'], + ['\u{1f3c3}\u{1f3ff}'], + ['\u{1f3c3}\u200d\u2642\ufe0f'], + ['\u{1f3c3}\u200d\u2642'], + ['\u{1f3c3}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f3c3}\u{1f3fb}\u200d\u2642'], + ['\u{1f3c3}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f3c3}\u{1f3fc}\u200d\u2642'], + ['\u{1f3c3}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f3c3}\u{1f3fd}\u200d\u2642'], + ['\u{1f3c3}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f3c3}\u{1f3fe}\u200d\u2642'], + ['\u{1f3c3}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f3c3}\u{1f3ff}\u200d\u2642'], + ['\u{1f3c3}\u200d\u2640\ufe0f'], + ['\u{1f3c3}\u200d\u2640'], + ['\u{1f3c3}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f3c3}\u{1f3fb}\u200d\u2640'], + ['\u{1f3c3}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f3c3}\u{1f3fc}\u200d\u2640'], + ['\u{1f3c3}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f3c3}\u{1f3fd}\u200d\u2640'], + ['\u{1f3c3}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f3c3}\u{1f3fe}\u200d\u2640'], + ['\u{1f3c3}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f3c3}\u{1f3ff}\u200d\u2640'], + ['\u{1f483}'], + ['\u{1f483}\u{1f3fb}'], + ['\u{1f483}\u{1f3fc}'], + ['\u{1f483}\u{1f3fd}'], + ['\u{1f483}\u{1f3fe}'], + ['\u{1f483}\u{1f3ff}'], + ['\u{1f57a}'], + ['\u{1f57a}\u{1f3fb}'], + ['\u{1f57a}\u{1f3fc}'], + ['\u{1f57a}\u{1f3fd}'], + ['\u{1f57a}\u{1f3fe}'], + ['\u{1f57a}\u{1f3ff}'], + ['\u{1f46f}'], + ['\u{1f46f}\u200d\u2642\ufe0f'], + ['\u{1f46f}\u200d\u2642'], + ['\u{1f46f}\u200d\u2640\ufe0f'], + ['\u{1f46f}\u200d\u2640'], + ['\u{1f9d6}'], + ['\u{1f9d6}\u{1f3fb}'], + ['\u{1f9d6}\u{1f3fc}'], + ['\u{1f9d6}\u{1f3fd}'], + ['\u{1f9d6}\u{1f3fe}'], + ['\u{1f9d6}\u{1f3ff}'], + ['\u{1f9d6}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u200d\u2640'], + ['\u{1f9d6}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3fb}\u200d\u2640'], + ['\u{1f9d6}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3fc}\u200d\u2640'], + ['\u{1f9d6}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3fd}\u200d\u2640'], + ['\u{1f9d6}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3fe}\u200d\u2640'], + ['\u{1f9d6}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3ff}\u200d\u2640'], + ['\u{1f9d6}\u200d\u2642\ufe0f'], + ['\u{1f9d6}\u200d\u2642'], + ['\u{1f9d6}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9d6}\u{1f3fb}\u200d\u2642'], + ['\u{1f9d6}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9d6}\u{1f3fc}\u200d\u2642'], + ['\u{1f9d6}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9d6}\u{1f3fd}\u200d\u2642'], + ['\u{1f9d6}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9d6}\u{1f3fe}\u200d\u2642'], + ['\u{1f9d6}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9d6}\u{1f3ff}\u200d\u2642'], + ['\u{1f9d7}'], + ['\u{1f9d7}\u{1f3fb}'], + ['\u{1f9d7}\u{1f3fc}'], + ['\u{1f9d7}\u{1f3fd}'], + ['\u{1f9d7}\u{1f3fe}'], + ['\u{1f9d7}\u{1f3ff}'], + ['\u{1f9d7}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u200d\u2640'], + ['\u{1f9d7}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3fb}\u200d\u2640'], + ['\u{1f9d7}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3fc}\u200d\u2640'], + ['\u{1f9d7}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3fd}\u200d\u2640'], + ['\u{1f9d7}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3fe}\u200d\u2640'], + ['\u{1f9d7}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3ff}\u200d\u2640'], + ['\u{1f9d7}\u200d\u2642\ufe0f'], + ['\u{1f9d7}\u200d\u2642'], + ['\u{1f9d7}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9d7}\u{1f3fb}\u200d\u2642'], + ['\u{1f9d7}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9d7}\u{1f3fc}\u200d\u2642'], + ['\u{1f9d7}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9d7}\u{1f3fd}\u200d\u2642'], + ['\u{1f9d7}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9d7}\u{1f3fe}\u200d\u2642'], + ['\u{1f9d7}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9d7}\u{1f3ff}\u200d\u2642'], + ['\u{1f9d8}'], + ['\u{1f9d8}\u{1f3fb}'], + ['\u{1f9d8}\u{1f3fc}'], + ['\u{1f9d8}\u{1f3fd}'], + ['\u{1f9d8}\u{1f3fe}'], + ['\u{1f9d8}\u{1f3ff}'], + ['\u{1f9d8}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u200d\u2640'], + ['\u{1f9d8}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3fb}\u200d\u2640'], + ['\u{1f9d8}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3fc}\u200d\u2640'], + ['\u{1f9d8}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3fd}\u200d\u2640'], + ['\u{1f9d8}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3fe}\u200d\u2640'], + ['\u{1f9d8}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3ff}\u200d\u2640'], + ['\u{1f9d8}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u200d\u2642'], + ['\u{1f9d8}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3fb}\u200d\u2642'], + ['\u{1f9d8}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3fc}\u200d\u2642'], + ['\u{1f9d8}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3fd}\u200d\u2642'], + ['\u{1f9d8}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3fe}\u200d\u2642'], + ['\u{1f9d8}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3ff}\u200d\u2642'], + ['\u{1f6c0}'], + ['\u{1f6c0}\u{1f3fb}'], + ['\u{1f6c0}\u{1f3fc}'], + ['\u{1f6c0}\u{1f3fd}'], + ['\u{1f6c0}\u{1f3fe}'], + ['\u{1f6c0}\u{1f3ff}'], + ['\u{1f6cc}'], + ['\u{1f6cc}\u{1f3fb}'], + ['\u{1f6cc}\u{1f3fc}'], + ['\u{1f6cc}\u{1f3fd}'], + ['\u{1f6cc}\u{1f3fe}'], + ['\u{1f6cc}\u{1f3ff}'], + ['\u{1f574}\ufe0f'], + ['\u{1f574}'], + ['\u{1f574}\u{1f3fb}'], + ['\u{1f574}\u{1f3fc}'], + ['\u{1f574}\u{1f3fd}'], + ['\u{1f574}\u{1f3fe}'], + ['\u{1f574}\u{1f3ff}'], + ['\u{1f5e3}\ufe0f'], + ['\u{1f5e3}'], + ['\u{1f464}'], + ['\u{1f465}'], + ['\u{1f93a}'], + ['\u{1f3c7}'], + ['\u{1f3c7}\u{1f3fb}'], + ['\u{1f3c7}\u{1f3fc}'], + ['\u{1f3c7}\u{1f3fd}'], + ['\u{1f3c7}\u{1f3fe}'], + ['\u{1f3c7}\u{1f3ff}'], + ['\u26f7\ufe0f'], + ['\u26f7'], + ['\u{1f3c2}'], + ['\u{1f3c2}\u{1f3fb}'], + ['\u{1f3c2}\u{1f3fc}'], + ['\u{1f3c2}\u{1f3fd}'], + ['\u{1f3c2}\u{1f3fe}'], + ['\u{1f3c2}\u{1f3ff}'], + ['\u{1f3cc}\ufe0f'], + ['\u{1f3cc}'], + ['\u{1f3cc}\u{1f3fb}'], + ['\u{1f3cc}\u{1f3fc}'], + ['\u{1f3cc}\u{1f3fd}'], + ['\u{1f3cc}\u{1f3fe}'], + ['\u{1f3cc}\u{1f3ff}'], + ['\u{1f3cc}\ufe0f\u200d\u2642\ufe0f'], + ['\u{1f3cc}\u200d\u2642\ufe0f'], + ['\u{1f3cc}\ufe0f\u200d\u2642'], + ['\u{1f3cc}\u200d\u2642'], + ['\u{1f3cc}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f3cc}\u{1f3fb}\u200d\u2642'], + ['\u{1f3cc}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f3cc}\u{1f3fc}\u200d\u2642'], + ['\u{1f3cc}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f3cc}\u{1f3fd}\u200d\u2642'], + ['\u{1f3cc}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f3cc}\u{1f3fe}\u200d\u2642'], + ['\u{1f3cc}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f3cc}\u{1f3ff}\u200d\u2642'], + ['\u{1f3cc}\ufe0f\u200d\u2640\ufe0f'], + ['\u{1f3cc}\u200d\u2640\ufe0f'], + ['\u{1f3cc}\ufe0f\u200d\u2640'], + ['\u{1f3cc}\u200d\u2640'], + ['\u{1f3cc}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f3cc}\u{1f3fb}\u200d\u2640'], + ['\u{1f3cc}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f3cc}\u{1f3fc}\u200d\u2640'], + ['\u{1f3cc}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f3cc}\u{1f3fd}\u200d\u2640'], + ['\u{1f3cc}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f3cc}\u{1f3fe}\u200d\u2640'], + ['\u{1f3cc}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f3cc}\u{1f3ff}\u200d\u2640'], + ['\u{1f3c4}'], + ['\u{1f3c4}\u{1f3fb}'], + ['\u{1f3c4}\u{1f3fc}'], + ['\u{1f3c4}\u{1f3fd}'], + ['\u{1f3c4}\u{1f3fe}'], + ['\u{1f3c4}\u{1f3ff}'], + ['\u{1f3c4}\u200d\u2642\ufe0f'], + ['\u{1f3c4}\u200d\u2642'], + ['\u{1f3c4}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f3c4}\u{1f3fb}\u200d\u2642'], + ['\u{1f3c4}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f3c4}\u{1f3fc}\u200d\u2642'], + ['\u{1f3c4}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f3c4}\u{1f3fd}\u200d\u2642'], + ['\u{1f3c4}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f3c4}\u{1f3fe}\u200d\u2642'], + ['\u{1f3c4}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f3c4}\u{1f3ff}\u200d\u2642'], + ['\u{1f3c4}\u200d\u2640\ufe0f'], + ['\u{1f3c4}\u200d\u2640'], + ['\u{1f3c4}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f3c4}\u{1f3fb}\u200d\u2640'], + ['\u{1f3c4}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f3c4}\u{1f3fc}\u200d\u2640'], + ['\u{1f3c4}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f3c4}\u{1f3fd}\u200d\u2640'], + ['\u{1f3c4}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f3c4}\u{1f3fe}\u200d\u2640'], + ['\u{1f3c4}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f3c4}\u{1f3ff}\u200d\u2640'], + ['\u{1f6a3}'], + ['\u{1f6a3}\u{1f3fb}'], + ['\u{1f6a3}\u{1f3fc}'], + ['\u{1f6a3}\u{1f3fd}'], + ['\u{1f6a3}\u{1f3fe}'], + ['\u{1f6a3}\u{1f3ff}'], + ['\u{1f6a3}\u200d\u2642\ufe0f'], + ['\u{1f6a3}\u200d\u2642'], + ['\u{1f6a3}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f6a3}\u{1f3fb}\u200d\u2642'], + ['\u{1f6a3}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f6a3}\u{1f3fc}\u200d\u2642'], + ['\u{1f6a3}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f6a3}\u{1f3fd}\u200d\u2642'], + ['\u{1f6a3}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f6a3}\u{1f3fe}\u200d\u2642'], + ['\u{1f6a3}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f6a3}\u{1f3ff}\u200d\u2642'], + ['\u{1f6a3}\u200d\u2640\ufe0f'], + ['\u{1f6a3}\u200d\u2640'], + ['\u{1f6a3}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f6a3}\u{1f3fb}\u200d\u2640'], + ['\u{1f6a3}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f6a3}\u{1f3fc}\u200d\u2640'], + ['\u{1f6a3}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f6a3}\u{1f3fd}\u200d\u2640'], + ['\u{1f6a3}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f6a3}\u{1f3fe}\u200d\u2640'], + ['\u{1f6a3}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f6a3}\u{1f3ff}\u200d\u2640'], + ['\u{1f3ca}'], + ['\u{1f3ca}\u{1f3fb}'], + ['\u{1f3ca}\u{1f3fc}'], + ['\u{1f3ca}\u{1f3fd}'], + ['\u{1f3ca}\u{1f3fe}'], + ['\u{1f3ca}\u{1f3ff}'], + ['\u{1f3ca}\u200d\u2642\ufe0f'], + ['\u{1f3ca}\u200d\u2642'], + ['\u{1f3ca}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f3ca}\u{1f3fb}\u200d\u2642'], + ['\u{1f3ca}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f3ca}\u{1f3fc}\u200d\u2642'], + ['\u{1f3ca}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f3ca}\u{1f3fd}\u200d\u2642'], + ['\u{1f3ca}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f3ca}\u{1f3fe}\u200d\u2642'], + ['\u{1f3ca}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f3ca}\u{1f3ff}\u200d\u2642'], + ['\u{1f3ca}\u200d\u2640\ufe0f'], + ['\u{1f3ca}\u200d\u2640'], + ['\u{1f3ca}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f3ca}\u{1f3fb}\u200d\u2640'], + ['\u{1f3ca}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f3ca}\u{1f3fc}\u200d\u2640'], + ['\u{1f3ca}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f3ca}\u{1f3fd}\u200d\u2640'], + ['\u{1f3ca}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f3ca}\u{1f3fe}\u200d\u2640'], + ['\u{1f3ca}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f3ca}\u{1f3ff}\u200d\u2640'], + ['\u26f9\ufe0f'], + ['\u26f9'], + ['\u26f9\u{1f3fb}'], + ['\u26f9\u{1f3fc}'], + ['\u26f9\u{1f3fd}'], + ['\u26f9\u{1f3fe}'], + ['\u26f9\u{1f3ff}'], + ['\u26f9\ufe0f\u200d\u2642\ufe0f'], + ['\u26f9\u200d\u2642\ufe0f'], + ['\u26f9\ufe0f\u200d\u2642'], + ['\u26f9\u200d\u2642'], + ['\u26f9\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u26f9\u{1f3fb}\u200d\u2642'], + ['\u26f9\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u26f9\u{1f3fc}\u200d\u2642'], + ['\u26f9\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u26f9\u{1f3fd}\u200d\u2642'], + ['\u26f9\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u26f9\u{1f3fe}\u200d\u2642'], + ['\u26f9\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u26f9\u{1f3ff}\u200d\u2642'], + ['\u26f9\ufe0f\u200d\u2640\ufe0f'], + ['\u26f9\u200d\u2640\ufe0f'], + ['\u26f9\ufe0f\u200d\u2640'], + ['\u26f9\u200d\u2640'], + ['\u26f9\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u26f9\u{1f3fb}\u200d\u2640'], + ['\u26f9\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u26f9\u{1f3fc}\u200d\u2640'], + ['\u26f9\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u26f9\u{1f3fd}\u200d\u2640'], + ['\u26f9\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u26f9\u{1f3fe}\u200d\u2640'], + ['\u26f9\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u26f9\u{1f3ff}\u200d\u2640'], + ['\u{1f3cb}\ufe0f'], + ['\u{1f3cb}'], + ['\u{1f3cb}\u{1f3fb}'], + ['\u{1f3cb}\u{1f3fc}'], + ['\u{1f3cb}\u{1f3fd}'], + ['\u{1f3cb}\u{1f3fe}'], + ['\u{1f3cb}\u{1f3ff}'], + ['\u{1f3cb}\ufe0f\u200d\u2642\ufe0f'], + ['\u{1f3cb}\u200d\u2642\ufe0f'], + ['\u{1f3cb}\ufe0f\u200d\u2642'], + ['\u{1f3cb}\u200d\u2642'], + ['\u{1f3cb}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f3cb}\u{1f3fb}\u200d\u2642'], + ['\u{1f3cb}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f3cb}\u{1f3fc}\u200d\u2642'], + ['\u{1f3cb}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f3cb}\u{1f3fd}\u200d\u2642'], + ['\u{1f3cb}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f3cb}\u{1f3fe}\u200d\u2642'], + ['\u{1f3cb}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f3cb}\u{1f3ff}\u200d\u2642'], + ['\u{1f3cb}\ufe0f\u200d\u2640\ufe0f'], + ['\u{1f3cb}\u200d\u2640\ufe0f'], + ['\u{1f3cb}\ufe0f\u200d\u2640'], + ['\u{1f3cb}\u200d\u2640'], + ['\u{1f3cb}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f3cb}\u{1f3fb}\u200d\u2640'], + ['\u{1f3cb}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f3cb}\u{1f3fc}\u200d\u2640'], + ['\u{1f3cb}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f3cb}\u{1f3fd}\u200d\u2640'], + ['\u{1f3cb}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f3cb}\u{1f3fe}\u200d\u2640'], + ['\u{1f3cb}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f3cb}\u{1f3ff}\u200d\u2640'], + ['\u{1f6b4}'], + ['\u{1f6b4}\u{1f3fb}'], + ['\u{1f6b4}\u{1f3fc}'], + ['\u{1f6b4}\u{1f3fd}'], + ['\u{1f6b4}\u{1f3fe}'], + ['\u{1f6b4}\u{1f3ff}'], + ['\u{1f6b4}\u200d\u2642\ufe0f'], + ['\u{1f6b4}\u200d\u2642'], + ['\u{1f6b4}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f6b4}\u{1f3fb}\u200d\u2642'], + ['\u{1f6b4}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f6b4}\u{1f3fc}\u200d\u2642'], + ['\u{1f6b4}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f6b4}\u{1f3fd}\u200d\u2642'], + ['\u{1f6b4}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f6b4}\u{1f3fe}\u200d\u2642'], + ['\u{1f6b4}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f6b4}\u{1f3ff}\u200d\u2642'], + ['\u{1f6b4}\u200d\u2640\ufe0f'], + ['\u{1f6b4}\u200d\u2640'], + ['\u{1f6b4}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f6b4}\u{1f3fb}\u200d\u2640'], + ['\u{1f6b4}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f6b4}\u{1f3fc}\u200d\u2640'], + ['\u{1f6b4}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f6b4}\u{1f3fd}\u200d\u2640'], + ['\u{1f6b4}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f6b4}\u{1f3fe}\u200d\u2640'], + ['\u{1f6b4}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f6b4}\u{1f3ff}\u200d\u2640'], + ['\u{1f6b5}'], + ['\u{1f6b5}\u{1f3fb}'], + ['\u{1f6b5}\u{1f3fc}'], + ['\u{1f6b5}\u{1f3fd}'], + ['\u{1f6b5}\u{1f3fe}'], + ['\u{1f6b5}\u{1f3ff}'], + ['\u{1f6b5}\u200d\u2642\ufe0f'], + ['\u{1f6b5}\u200d\u2642'], + ['\u{1f6b5}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f6b5}\u{1f3fb}\u200d\u2642'], + ['\u{1f6b5}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f6b5}\u{1f3fc}\u200d\u2642'], + ['\u{1f6b5}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f6b5}\u{1f3fd}\u200d\u2642'], + ['\u{1f6b5}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f6b5}\u{1f3fe}\u200d\u2642'], + ['\u{1f6b5}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f6b5}\u{1f3ff}\u200d\u2642'], + ['\u{1f6b5}\u200d\u2640\ufe0f'], + ['\u{1f6b5}\u200d\u2640'], + ['\u{1f6b5}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f6b5}\u{1f3fb}\u200d\u2640'], + ['\u{1f6b5}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f6b5}\u{1f3fc}\u200d\u2640'], + ['\u{1f6b5}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f6b5}\u{1f3fd}\u200d\u2640'], + ['\u{1f6b5}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f6b5}\u{1f3fe}\u200d\u2640'], + ['\u{1f6b5}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f6b5}\u{1f3ff}\u200d\u2640'], + ['\u{1f3ce}\ufe0f'], + ['\u{1f3ce}'], + ['\u{1f3cd}\ufe0f'], + ['\u{1f3cd}'], + ['\u{1f938}'], + ['\u{1f938}\u{1f3fb}'], + ['\u{1f938}\u{1f3fc}'], + ['\u{1f938}\u{1f3fd}'], + ['\u{1f938}\u{1f3fe}'], + ['\u{1f938}\u{1f3ff}'], + ['\u{1f938}\u200d\u2642\ufe0f'], + ['\u{1f938}\u200d\u2642'], + ['\u{1f938}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f938}\u{1f3fb}\u200d\u2642'], + ['\u{1f938}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f938}\u{1f3fc}\u200d\u2642'], + ['\u{1f938}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f938}\u{1f3fd}\u200d\u2642'], + ['\u{1f938}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f938}\u{1f3fe}\u200d\u2642'], + ['\u{1f938}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f938}\u{1f3ff}\u200d\u2642'], + ['\u{1f938}\u200d\u2640\ufe0f'], + ['\u{1f938}\u200d\u2640'], + ['\u{1f938}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f938}\u{1f3fb}\u200d\u2640'], + ['\u{1f938}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f938}\u{1f3fc}\u200d\u2640'], + ['\u{1f938}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f938}\u{1f3fd}\u200d\u2640'], + ['\u{1f938}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f938}\u{1f3fe}\u200d\u2640'], + ['\u{1f938}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f938}\u{1f3ff}\u200d\u2640'], + ['\u{1f93c}'], + ['\u{1f93c}\u200d\u2642\ufe0f'], + ['\u{1f93c}\u200d\u2642'], + ['\u{1f93c}\u200d\u2640\ufe0f'], + ['\u{1f93c}\u200d\u2640'], + ['\u{1f93d}'], + ['\u{1f93d}\u{1f3fb}'], + ['\u{1f93d}\u{1f3fc}'], + ['\u{1f93d}\u{1f3fd}'], + ['\u{1f93d}\u{1f3fe}'], + ['\u{1f93d}\u{1f3ff}'], + ['\u{1f93d}\u200d\u2642\ufe0f'], + ['\u{1f93d}\u200d\u2642'], + ['\u{1f93d}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f93d}\u{1f3fb}\u200d\u2642'], + ['\u{1f93d}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f93d}\u{1f3fc}\u200d\u2642'], + ['\u{1f93d}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f93d}\u{1f3fd}\u200d\u2642'], + ['\u{1f93d}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f93d}\u{1f3fe}\u200d\u2642'], + ['\u{1f93d}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f93d}\u{1f3ff}\u200d\u2642'], + ['\u{1f93d}\u200d\u2640\ufe0f'], + ['\u{1f93d}\u200d\u2640'], + ['\u{1f93d}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f93d}\u{1f3fb}\u200d\u2640'], + ['\u{1f93d}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f93d}\u{1f3fc}\u200d\u2640'], + ['\u{1f93d}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f93d}\u{1f3fd}\u200d\u2640'], + ['\u{1f93d}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f93d}\u{1f3fe}\u200d\u2640'], + ['\u{1f93d}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f93d}\u{1f3ff}\u200d\u2640'], + ['\u{1f93e}'], + ['\u{1f93e}\u{1f3fb}'], + ['\u{1f93e}\u{1f3fc}'], + ['\u{1f93e}\u{1f3fd}'], + ['\u{1f93e}\u{1f3fe}'], + ['\u{1f93e}\u{1f3ff}'], + ['\u{1f93e}\u200d\u2642\ufe0f'], + ['\u{1f93e}\u200d\u2642'], + ['\u{1f93e}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f93e}\u{1f3fb}\u200d\u2642'], + ['\u{1f93e}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f93e}\u{1f3fc}\u200d\u2642'], + ['\u{1f93e}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f93e}\u{1f3fd}\u200d\u2642'], + ['\u{1f93e}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f93e}\u{1f3fe}\u200d\u2642'], + ['\u{1f93e}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f93e}\u{1f3ff}\u200d\u2642'], + ['\u{1f93e}\u200d\u2640\ufe0f'], + ['\u{1f93e}\u200d\u2640'], + ['\u{1f93e}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f93e}\u{1f3fb}\u200d\u2640'], + ['\u{1f93e}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f93e}\u{1f3fc}\u200d\u2640'], + ['\u{1f93e}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f93e}\u{1f3fd}\u200d\u2640'], + ['\u{1f93e}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f93e}\u{1f3fe}\u200d\u2640'], + ['\u{1f93e}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f93e}\u{1f3ff}\u200d\u2640'], + ['\u{1f939}'], + ['\u{1f939}\u{1f3fb}'], + ['\u{1f939}\u{1f3fc}'], + ['\u{1f939}\u{1f3fd}'], + ['\u{1f939}\u{1f3fe}'], + ['\u{1f939}\u{1f3ff}'], + ['\u{1f939}\u200d\u2642\ufe0f'], + ['\u{1f939}\u200d\u2642'], + ['\u{1f939}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f939}\u{1f3fb}\u200d\u2642'], + ['\u{1f939}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f939}\u{1f3fc}\u200d\u2642'], + ['\u{1f939}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f939}\u{1f3fd}\u200d\u2642'], + ['\u{1f939}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f939}\u{1f3fe}\u200d\u2642'], + ['\u{1f939}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f939}\u{1f3ff}\u200d\u2642'], + ['\u{1f939}\u200d\u2640\ufe0f'], + ['\u{1f939}\u200d\u2640'], + ['\u{1f939}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f939}\u{1f3fb}\u200d\u2640'], + ['\u{1f939}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f939}\u{1f3fc}\u200d\u2640'], + ['\u{1f939}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f939}\u{1f3fd}\u200d\u2640'], + ['\u{1f939}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f939}\u{1f3fe}\u200d\u2640'], + ['\u{1f939}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f939}\u{1f3ff}\u200d\u2640'], + ['\u{1f46b}'], + ['\u{1f46c}'], + ['\u{1f46d}'], + ['\u{1f48f}'], + ['\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}'], + ['\u{1f469}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}'], + ['\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}'], + ['\u{1f468}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}'], + ['\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}'], + ['\u{1f469}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}'], + ['\u{1f491}'], + ['\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f468}'], + ['\u{1f469}\u200d\u2764\u200d\u{1f468}'], + ['\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}'], + ['\u{1f468}\u200d\u2764\u200d\u{1f468}'], + ['\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}'], + ['\u{1f469}\u200d\u2764\u200d\u{1f469}'], + ['\u{1f46a}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f467}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f469}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f467}'], + ['\u{1f469}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f933}'], + ['\u{1f933}\u{1f3fb}'], + ['\u{1f933}\u{1f3fc}'], + ['\u{1f933}\u{1f3fd}'], + ['\u{1f933}\u{1f3fe}'], + ['\u{1f933}\u{1f3ff}'], + ['\u{1f4aa}'], + ['\u{1f4aa}\u{1f3fb}'], + ['\u{1f4aa}\u{1f3fc}'], + ['\u{1f4aa}\u{1f3fd}'], + ['\u{1f4aa}\u{1f3fe}'], + ['\u{1f4aa}\u{1f3ff}'], + ['\u{1f9b5}'], + ['\u{1f9b5}\u{1f3fb}'], + ['\u{1f9b5}\u{1f3fc}'], + ['\u{1f9b5}\u{1f3fd}'], + ['\u{1f9b5}\u{1f3fe}'], + ['\u{1f9b5}\u{1f3ff}'], + ['\u{1f9b6}'], + ['\u{1f9b6}\u{1f3fb}'], + ['\u{1f9b6}\u{1f3fc}'], + ['\u{1f9b6}\u{1f3fd}'], + ['\u{1f9b6}\u{1f3fe}'], + ['\u{1f9b6}\u{1f3ff}'], + ['\u{1f448}'], + ['\u{1f448}\u{1f3fb}'], + ['\u{1f448}\u{1f3fc}'], + ['\u{1f448}\u{1f3fd}'], + ['\u{1f448}\u{1f3fe}'], + ['\u{1f448}\u{1f3ff}'], + ['\u{1f449}'], + ['\u{1f449}\u{1f3fb}'], + ['\u{1f449}\u{1f3fc}'], + ['\u{1f449}\u{1f3fd}'], + ['\u{1f449}\u{1f3fe}'], + ['\u{1f449}\u{1f3ff}'], + ['\u261d\ufe0f'], + ['\u261d'], + ['\u261d\u{1f3fb}'], + ['\u261d\u{1f3fc}'], + ['\u261d\u{1f3fd}'], + ['\u261d\u{1f3fe}'], + ['\u261d\u{1f3ff}'], + ['\u{1f446}'], + ['\u{1f446}\u{1f3fb}'], + ['\u{1f446}\u{1f3fc}'], + ['\u{1f446}\u{1f3fd}'], + ['\u{1f446}\u{1f3fe}'], + ['\u{1f446}\u{1f3ff}'], + ['\u{1f595}'], + ['\u{1f595}\u{1f3fb}'], + ['\u{1f595}\u{1f3fc}'], + ['\u{1f595}\u{1f3fd}'], + ['\u{1f595}\u{1f3fe}'], + ['\u{1f595}\u{1f3ff}'], + ['\u{1f447}'], + ['\u{1f447}\u{1f3fb}'], + ['\u{1f447}\u{1f3fc}'], + ['\u{1f447}\u{1f3fd}'], + ['\u{1f447}\u{1f3fe}'], + ['\u{1f447}\u{1f3ff}'], + ['\u270c\ufe0f'], + ['\u270c'], + ['\u270c\u{1f3fb}'], + ['\u270c\u{1f3fc}'], + ['\u270c\u{1f3fd}'], + ['\u270c\u{1f3fe}'], + ['\u270c\u{1f3ff}'], + ['\u{1f91e}'], + ['\u{1f91e}\u{1f3fb}'], + ['\u{1f91e}\u{1f3fc}'], + ['\u{1f91e}\u{1f3fd}'], + ['\u{1f91e}\u{1f3fe}'], + ['\u{1f91e}\u{1f3ff}'], + ['\u{1f596}'], + ['\u{1f596}\u{1f3fb}'], + ['\u{1f596}\u{1f3fc}'], + ['\u{1f596}\u{1f3fd}'], + ['\u{1f596}\u{1f3fe}'], + ['\u{1f596}\u{1f3ff}'], + ['\u{1f918}'], + ['\u{1f918}\u{1f3fb}'], + ['\u{1f918}\u{1f3fc}'], + ['\u{1f918}\u{1f3fd}'], + ['\u{1f918}\u{1f3fe}'], + ['\u{1f918}\u{1f3ff}'], + ['\u{1f919}'], + ['\u{1f919}\u{1f3fb}'], + ['\u{1f919}\u{1f3fc}'], + ['\u{1f919}\u{1f3fd}'], + ['\u{1f919}\u{1f3fe}'], + ['\u{1f919}\u{1f3ff}'], + ['\u{1f590}\ufe0f'], + ['\u{1f590}'], + ['\u{1f590}\u{1f3fb}'], + ['\u{1f590}\u{1f3fc}'], + ['\u{1f590}\u{1f3fd}'], + ['\u{1f590}\u{1f3fe}'], + ['\u{1f590}\u{1f3ff}'], + ['\u270b'], + ['\u270b\u{1f3fb}'], + ['\u270b\u{1f3fc}'], + ['\u270b\u{1f3fd}'], + ['\u270b\u{1f3fe}'], + ['\u270b\u{1f3ff}'], + ['\u{1f44c}'], + ['\u{1f44c}\u{1f3fb}'], + ['\u{1f44c}\u{1f3fc}'], + ['\u{1f44c}\u{1f3fd}'], + ['\u{1f44c}\u{1f3fe}'], + ['\u{1f44c}\u{1f3ff}'], + ['\u{1f44d}'], + ['\u{1f44d}\u{1f3fb}'], + ['\u{1f44d}\u{1f3fc}'], + ['\u{1f44d}\u{1f3fd}'], + ['\u{1f44d}\u{1f3fe}'], + ['\u{1f44d}\u{1f3ff}'], + ['\u{1f44e}'], + ['\u{1f44e}\u{1f3fb}'], + ['\u{1f44e}\u{1f3fc}'], + ['\u{1f44e}\u{1f3fd}'], + ['\u{1f44e}\u{1f3fe}'], + ['\u{1f44e}\u{1f3ff}'], + ['\u270a'], + ['\u270a\u{1f3fb}'], + ['\u270a\u{1f3fc}'], + ['\u270a\u{1f3fd}'], + ['\u270a\u{1f3fe}'], + ['\u270a\u{1f3ff}'], + ['\u{1f44a}'], + ['\u{1f44a}\u{1f3fb}'], + ['\u{1f44a}\u{1f3fc}'], + ['\u{1f44a}\u{1f3fd}'], + ['\u{1f44a}\u{1f3fe}'], + ['\u{1f44a}\u{1f3ff}'], + ['\u{1f91b}'], + ['\u{1f91b}\u{1f3fb}'], + ['\u{1f91b}\u{1f3fc}'], + ['\u{1f91b}\u{1f3fd}'], + ['\u{1f91b}\u{1f3fe}'], + ['\u{1f91b}\u{1f3ff}'], + ['\u{1f91c}'], + ['\u{1f91c}\u{1f3fb}'], + ['\u{1f91c}\u{1f3fc}'], + ['\u{1f91c}\u{1f3fd}'], + ['\u{1f91c}\u{1f3fe}'], + ['\u{1f91c}\u{1f3ff}'], + ['\u{1f91a}'], + ['\u{1f91a}\u{1f3fb}'], + ['\u{1f91a}\u{1f3fc}'], + ['\u{1f91a}\u{1f3fd}'], + ['\u{1f91a}\u{1f3fe}'], + ['\u{1f91a}\u{1f3ff}'], + ['\u{1f44b}'], + ['\u{1f44b}\u{1f3fb}'], + ['\u{1f44b}\u{1f3fc}'], + ['\u{1f44b}\u{1f3fd}'], + ['\u{1f44b}\u{1f3fe}'], + ['\u{1f44b}\u{1f3ff}'], + ['\u{1f91f}'], + ['\u{1f91f}\u{1f3fb}'], + ['\u{1f91f}\u{1f3fc}'], + ['\u{1f91f}\u{1f3fd}'], + ['\u{1f91f}\u{1f3fe}'], + ['\u{1f91f}\u{1f3ff}'], + ['\u270d\ufe0f'], + ['\u270d'], + ['\u270d\u{1f3fb}'], + ['\u270d\u{1f3fc}'], + ['\u270d\u{1f3fd}'], + ['\u270d\u{1f3fe}'], + ['\u270d\u{1f3ff}'], + ['\u{1f44f}'], + ['\u{1f44f}\u{1f3fb}'], + ['\u{1f44f}\u{1f3fc}'], + ['\u{1f44f}\u{1f3fd}'], + ['\u{1f44f}\u{1f3fe}'], + ['\u{1f44f}\u{1f3ff}'], + ['\u{1f450}'], + ['\u{1f450}\u{1f3fb}'], + ['\u{1f450}\u{1f3fc}'], + ['\u{1f450}\u{1f3fd}'], + ['\u{1f450}\u{1f3fe}'], + ['\u{1f450}\u{1f3ff}'], + ['\u{1f64c}'], + ['\u{1f64c}\u{1f3fb}'], + ['\u{1f64c}\u{1f3fc}'], + ['\u{1f64c}\u{1f3fd}'], + ['\u{1f64c}\u{1f3fe}'], + ['\u{1f64c}\u{1f3ff}'], + ['\u{1f932}'], + ['\u{1f932}\u{1f3fb}'], + ['\u{1f932}\u{1f3fc}'], + ['\u{1f932}\u{1f3fd}'], + ['\u{1f932}\u{1f3fe}'], + ['\u{1f932}\u{1f3ff}'], + ['\u{1f64f}'], + ['\u{1f64f}\u{1f3fb}'], + ['\u{1f64f}\u{1f3fc}'], + ['\u{1f64f}\u{1f3fd}'], + ['\u{1f64f}\u{1f3fe}'], + ['\u{1f64f}\u{1f3ff}'], + ['\u{1f91d}'], + ['\u{1f485}'], + ['\u{1f485}\u{1f3fb}'], + ['\u{1f485}\u{1f3fc}'], + ['\u{1f485}\u{1f3fd}'], + ['\u{1f485}\u{1f3fe}'], + ['\u{1f485}\u{1f3ff}'], + ['\u{1f442}'], + ['\u{1f442}\u{1f3fb}'], + ['\u{1f442}\u{1f3fc}'], + ['\u{1f442}\u{1f3fd}'], + ['\u{1f442}\u{1f3fe}'], + ['\u{1f442}\u{1f3ff}'], + ['\u{1f443}'], + ['\u{1f443}\u{1f3fb}'], + ['\u{1f443}\u{1f3fc}'], + ['\u{1f443}\u{1f3fd}'], + ['\u{1f443}\u{1f3fe}'], + ['\u{1f443}\u{1f3ff}'], + ['\u{1f9b0}'], + ['\u{1f9b1}'], + ['\u{1f9b2}'], + ['\u{1f9b3}'], + ['\u{1f463}'], + ['\u{1f440}'], + ['\u{1f441}\ufe0f'], + ['\u{1f441}'], + ['\u{1f441}\ufe0f\u200d\u{1f5e8}\ufe0f'], + ['\u{1f441}\u200d\u{1f5e8}\ufe0f'], + ['\u{1f441}\ufe0f\u200d\u{1f5e8}'], + ['\u{1f441}\u200d\u{1f5e8}'], + ['\u{1f9e0}'], + ['\u{1f9b4}'], + ['\u{1f9b7}'], + ['\u{1f445}'], + ['\u{1f444}'], + ['\u{1f48b}'], + ['\u{1f498}'], + ['\u2764\ufe0f'], + ['\u2764'], + ['\u{1f493}'], + ['\u{1f494}'], + ['\u{1f495}'], + ['\u{1f496}'], + ['\u{1f497}'], + ['\u{1f499}'], + ['\u{1f49a}'], + ['\u{1f49b}'], + ['\u{1f9e1}'], + ['\u{1f49c}'], + ['\u{1f5a4}'], + ['\u{1f49d}'], + ['\u{1f49e}'], + ['\u{1f49f}'], + ['\u2763\ufe0f'], + ['\u2763'], + ['\u{1f48c}'], + ['\u{1f4a4}'], + ['\u{1f4a2}'], + ['\u{1f4a3}'], + ['\u{1f4a5}'], + ['\u{1f4a6}'], + ['\u{1f4a8}'], + ['\u{1f4ab}'], + ['\u{1f4ac}'], + ['\u{1f5e8}\ufe0f'], + ['\u{1f5e8}'], + ['\u{1f5ef}\ufe0f'], + ['\u{1f5ef}'], + ['\u{1f4ad}'], + ['\u{1f573}\ufe0f'], + ['\u{1f573}'], + ['\u{1f453}'], + ['\u{1f576}\ufe0f'], + ['\u{1f576}'], + ['\u{1f97d}'], + ['\u{1f97c}'], + ['\u{1f454}'], + ['\u{1f455}'], + ['\u{1f456}'], + ['\u{1f9e3}'], + ['\u{1f9e4}'], + ['\u{1f9e5}'], + ['\u{1f9e6}'], + ['\u{1f457}'], + ['\u{1f458}'], + ['\u{1f459}'], + ['\u{1f45a}'], + ['\u{1f45b}'], + ['\u{1f45c}'], + ['\u{1f45d}'], + ['\u{1f6cd}\ufe0f'], + ['\u{1f6cd}'], + ['\u{1f392}'], + ['\u{1f45e}'], + ['\u{1f45f}'], + ['\u{1f97e}'], + ['\u{1f97f}'], + ['\u{1f460}'], + ['\u{1f461}'], + ['\u{1f462}'], + ['\u{1f451}'], + ['\u{1f452}'], + ['\u{1f3a9}'], + ['\u{1f393}'], + ['\u{1f9e2}'], + ['\u26d1\ufe0f'], + ['\u26d1'], + ['\u{1f4ff}'], + ['\u{1f484}'], + ['\u{1f48d}'], + ['\u{1f48e}'], + ['\u{1f435}'], + ['\u{1f412}'], + ['\u{1f98d}'], + ['\u{1f436}'], + ['\u{1f415}'], + ['\u{1f429}'], + ['\u{1f43a}'], + ['\u{1f98a}'], + ['\u{1f99d}'], + ['\u{1f431}'], + ['\u{1f408}'], + ['\u{1f981}'], + ['\u{1f42f}'], + ['\u{1f405}'], + ['\u{1f406}'], + ['\u{1f434}'], + ['\u{1f40e}'], + ['\u{1f984}'], + ['\u{1f993}'], + ['\u{1f98c}'], + ['\u{1f42e}'], + ['\u{1f402}'], + ['\u{1f403}'], + ['\u{1f404}'], + ['\u{1f437}'], + ['\u{1f416}'], + ['\u{1f417}'], + ['\u{1f43d}'], + ['\u{1f40f}'], + ['\u{1f411}'], + ['\u{1f410}'], + ['\u{1f42a}'], + ['\u{1f42b}'], + ['\u{1f999}'], + ['\u{1f992}'], + ['\u{1f418}'], + ['\u{1f98f}'], + ['\u{1f99b}'], + ['\u{1f42d}'], + ['\u{1f401}'], + ['\u{1f400}'], + ['\u{1f439}'], + ['\u{1f430}'], + ['\u{1f407}'], + ['\u{1f43f}\ufe0f'], + ['\u{1f43f}'], + ['\u{1f994}'], + ['\u{1f987}'], + ['\u{1f43b}'], + ['\u{1f428}'], + ['\u{1f43c}'], + ['\u{1f998}'], + ['\u{1f9a1}'], + ['\u{1f43e}'], + ['\u{1f983}'], + ['\u{1f414}'], + ['\u{1f413}'], + ['\u{1f423}'], + ['\u{1f424}'], + ['\u{1f425}'], + ['\u{1f426}'], + ['\u{1f427}'], + ['\u{1f54a}\ufe0f'], + ['\u{1f54a}'], + ['\u{1f985}'], + ['\u{1f986}'], + ['\u{1f9a2}'], + ['\u{1f989}'], + ['\u{1f99a}'], + ['\u{1f99c}'], + ['\u{1f438}'], + ['\u{1f40a}'], + ['\u{1f422}'], + ['\u{1f98e}'], + ['\u{1f40d}'], + ['\u{1f432}'], + ['\u{1f409}'], + ['\u{1f995}'], + ['\u{1f996}'], + ['\u{1f433}'], + ['\u{1f40b}'], + ['\u{1f42c}'], + ['\u{1f41f}'], + ['\u{1f420}'], + ['\u{1f421}'], + ['\u{1f988}'], + ['\u{1f419}'], + ['\u{1f41a}'], + ['\u{1f980}'], + ['\u{1f99e}'], + ['\u{1f990}'], + ['\u{1f991}'], + ['\u{1f40c}'], + ['\u{1f98b}'], + ['\u{1f41b}'], + ['\u{1f41c}'], + ['\u{1f41d}'], + ['\u{1f41e}'], + ['\u{1f997}'], + ['\u{1f577}\ufe0f'], + ['\u{1f577}'], + ['\u{1f578}\ufe0f'], + ['\u{1f578}'], + ['\u{1f982}'], + ['\u{1f99f}'], + ['\u{1f9a0}'], + ['\u{1f490}'], + ['\u{1f338}'], + ['\u{1f4ae}'], + ['\u{1f3f5}\ufe0f'], + ['\u{1f3f5}'], + ['\u{1f339}'], + ['\u{1f940}'], + ['\u{1f33a}'], + ['\u{1f33b}'], + ['\u{1f33c}'], + ['\u{1f337}'], + ['\u{1f331}'], + ['\u{1f332}'], + ['\u{1f333}'], + ['\u{1f334}'], + ['\u{1f335}'], + ['\u{1f33e}'], + ['\u{1f33f}'], + ['\u2618\ufe0f'], + ['\u2618'], + ['\u{1f340}'], + ['\u{1f341}'], + ['\u{1f342}'], + ['\u{1f343}'], + ['\u{1f347}'], + ['\u{1f348}'], + ['\u{1f349}'], + ['\u{1f34a}'], + ['\u{1f34b}'], + ['\u{1f34c}'], + ['\u{1f34d}'], + ['\u{1f96d}'], + ['\u{1f34e}'], + ['\u{1f34f}'], + ['\u{1f350}'], + ['\u{1f351}'], + ['\u{1f352}'], + ['\u{1f353}'], + ['\u{1f95d}'], + ['\u{1f345}'], + ['\u{1f965}'], + ['\u{1f951}'], + ['\u{1f346}'], + ['\u{1f954}'], + ['\u{1f955}'], + ['\u{1f33d}'], + ['\u{1f336}\ufe0f'], + ['\u{1f336}'], + ['\u{1f952}'], + ['\u{1f96c}'], + ['\u{1f966}'], + ['\u{1f344}'], + ['\u{1f95c}'], + ['\u{1f330}'], + ['\u{1f35e}'], + ['\u{1f950}'], + ['\u{1f956}'], + ['\u{1f968}'], + ['\u{1f96f}'], + ['\u{1f95e}'], + ['\u{1f9c0}'], + ['\u{1f356}'], + ['\u{1f357}'], + ['\u{1f969}'], + ['\u{1f953}'], + ['\u{1f354}'], + ['\u{1f35f}'], + ['\u{1f355}'], + ['\u{1f32d}'], + ['\u{1f96a}'], + ['\u{1f32e}'], + ['\u{1f32f}'], + ['\u{1f959}'], + ['\u{1f95a}'], + ['\u{1f373}'], + ['\u{1f958}'], + ['\u{1f372}'], + ['\u{1f963}'], + ['\u{1f957}'], + ['\u{1f37f}'], + ['\u{1f9c2}'], + ['\u{1f96b}'], + ['\u{1f371}'], + ['\u{1f358}'], + ['\u{1f359}'], + ['\u{1f35a}'], + ['\u{1f35b}'], + ['\u{1f35c}'], + ['\u{1f35d}'], + ['\u{1f360}'], + ['\u{1f362}'], + ['\u{1f363}'], + ['\u{1f364}'], + ['\u{1f365}'], + ['\u{1f96e}'], + ['\u{1f361}'], + ['\u{1f95f}'], + ['\u{1f960}'], + ['\u{1f961}'], + ['\u{1f366}'], + ['\u{1f367}'], + ['\u{1f368}'], + ['\u{1f369}'], + ['\u{1f36a}'], + ['\u{1f382}'], + ['\u{1f370}'], + ['\u{1f9c1}'], + ['\u{1f967}'], + ['\u{1f36b}'], + ['\u{1f36c}'], + ['\u{1f36d}'], + ['\u{1f36e}'], + ['\u{1f36f}'], + ['\u{1f37c}'], + ['\u{1f95b}'], + ['\u2615'], + ['\u{1f375}'], + ['\u{1f376}'], + ['\u{1f37e}'], + ['\u{1f377}'], + ['\u{1f378}'], + ['\u{1f379}'], + ['\u{1f37a}'], + ['\u{1f37b}'], + ['\u{1f942}'], + ['\u{1f943}'], + ['\u{1f964}'], + ['\u{1f962}'], + ['\u{1f37d}\ufe0f'], + ['\u{1f37d}'], + ['\u{1f374}'], + ['\u{1f944}'], + ['\u{1f52a}'], + ['\u{1f3fa}'], + ['\u{1f30d}'], + ['\u{1f30e}'], + ['\u{1f30f}'], + ['\u{1f310}'], + ['\u{1f5fa}\ufe0f'], + ['\u{1f5fa}'], + ['\u{1f5fe}'], + ['\u{1f9ed}'], + ['\u{1f3d4}\ufe0f'], + ['\u{1f3d4}'], + ['\u26f0\ufe0f'], + ['\u26f0'], + ['\u{1f30b}'], + ['\u{1f5fb}'], + ['\u{1f3d5}\ufe0f'], + ['\u{1f3d5}'], + ['\u{1f3d6}\ufe0f'], + ['\u{1f3d6}'], + ['\u{1f3dc}\ufe0f'], + ['\u{1f3dc}'], + ['\u{1f3dd}\ufe0f'], + ['\u{1f3dd}'], + ['\u{1f3de}\ufe0f'], + ['\u{1f3de}'], + ['\u{1f3df}\ufe0f'], + ['\u{1f3df}'], + ['\u{1f3db}\ufe0f'], + ['\u{1f3db}'], + ['\u{1f3d7}\ufe0f'], + ['\u{1f3d7}'], + ['\u{1f9f1}'], + ['\u{1f3d8}\ufe0f'], + ['\u{1f3d8}'], + ['\u{1f3da}\ufe0f'], + ['\u{1f3da}'], + ['\u{1f3e0}'], + ['\u{1f3e1}'], + ['\u{1f3e2}'], + ['\u{1f3e3}'], + ['\u{1f3e4}'], + ['\u{1f3e5}'], + ['\u{1f3e6}'], + ['\u{1f3e8}'], + ['\u{1f3e9}'], + ['\u{1f3ea}'], + ['\u{1f3eb}'], + ['\u{1f3ec}'], + ['\u{1f3ed}'], + ['\u{1f3ef}'], + ['\u{1f3f0}'], + ['\u{1f492}'], + ['\u{1f5fc}'], + ['\u{1f5fd}'], + ['\u26ea'], + ['\u{1f54c}'], + ['\u{1f54d}'], + ['\u26e9\ufe0f'], + ['\u26e9'], + ['\u{1f54b}'], + ['\u26f2'], + ['\u26fa'], + ['\u{1f301}'], + ['\u{1f303}'], + ['\u{1f3d9}\ufe0f'], + ['\u{1f3d9}'], + ['\u{1f304}'], + ['\u{1f305}'], + ['\u{1f306}'], + ['\u{1f307}'], + ['\u{1f309}'], + ['\u2668\ufe0f'], + ['\u2668'], + ['\u{1f30c}'], + ['\u{1f3a0}'], + ['\u{1f3a1}'], + ['\u{1f3a2}'], + ['\u{1f488}'], + ['\u{1f3aa}'], + ['\u{1f682}'], + ['\u{1f683}'], + ['\u{1f684}'], + ['\u{1f685}'], + ['\u{1f686}'], + ['\u{1f687}'], + ['\u{1f688}'], + ['\u{1f689}'], + ['\u{1f68a}'], + ['\u{1f69d}'], + ['\u{1f69e}'], + ['\u{1f68b}'], + ['\u{1f68c}'], + ['\u{1f68d}'], + ['\u{1f68e}'], + ['\u{1f690}'], + ['\u{1f691}'], + ['\u{1f692}'], + ['\u{1f693}'], + ['\u{1f694}'], + ['\u{1f695}'], + ['\u{1f696}'], + ['\u{1f697}'], + ['\u{1f698}'], + ['\u{1f699}'], + ['\u{1f69a}'], + ['\u{1f69b}'], + ['\u{1f69c}'], + ['\u{1f6b2}'], + ['\u{1f6f4}'], + ['\u{1f6f9}'], + ['\u{1f6f5}'], + ['\u{1f68f}'], + ['\u{1f6e3}\ufe0f'], + ['\u{1f6e3}'], + ['\u{1f6e4}\ufe0f'], + ['\u{1f6e4}'], + ['\u{1f6e2}\ufe0f'], + ['\u{1f6e2}'], + ['\u26fd'], + ['\u{1f6a8}'], + ['\u{1f6a5}'], + ['\u{1f6a6}'], + ['\u{1f6d1}'], + ['\u{1f6a7}'], + ['\u2693'], + ['\u26f5'], + ['\u{1f6f6}'], + ['\u{1f6a4}'], + ['\u{1f6f3}\ufe0f'], + ['\u{1f6f3}'], + ['\u26f4\ufe0f'], + ['\u26f4'], + ['\u{1f6e5}\ufe0f'], + ['\u{1f6e5}'], + ['\u{1f6a2}'], + ['\u2708\ufe0f'], + ['\u2708'], + ['\u{1f6e9}\ufe0f'], + ['\u{1f6e9}'], + ['\u{1f6eb}'], + ['\u{1f6ec}'], + ['\u{1f4ba}'], + ['\u{1f681}'], + ['\u{1f69f}'], + ['\u{1f6a0}'], + ['\u{1f6a1}'], + ['\u{1f6f0}\ufe0f'], + ['\u{1f6f0}'], + ['\u{1f680}'], + ['\u{1f6f8}'], + ['\u{1f6ce}\ufe0f'], + ['\u{1f6ce}'], + ['\u{1f9f3}'], + ['\u231b'], + ['\u23f3'], + ['\u231a'], + ['\u23f0'], + ['\u23f1\ufe0f'], + ['\u23f1'], + ['\u23f2\ufe0f'], + ['\u23f2'], + ['\u{1f570}\ufe0f'], + ['\u{1f570}'], + ['\u{1f55b}'], + ['\u{1f567}'], + ['\u{1f550}'], + ['\u{1f55c}'], + ['\u{1f551}'], + ['\u{1f55d}'], + ['\u{1f552}'], + ['\u{1f55e}'], + ['\u{1f553}'], + ['\u{1f55f}'], + ['\u{1f554}'], + ['\u{1f560}'], + ['\u{1f555}'], + ['\u{1f561}'], + ['\u{1f556}'], + ['\u{1f562}'], + ['\u{1f557}'], + ['\u{1f563}'], + ['\u{1f558}'], + ['\u{1f564}'], + ['\u{1f559}'], + ['\u{1f565}'], + ['\u{1f55a}'], + ['\u{1f566}'], + ['\u{1f311}'], + ['\u{1f312}'], + ['\u{1f313}'], + ['\u{1f314}'], + ['\u{1f315}'], + ['\u{1f316}'], + ['\u{1f317}'], + ['\u{1f318}'], + ['\u{1f319}'], + ['\u{1f31a}'], + ['\u{1f31b}'], + ['\u{1f31c}'], + ['\u{1f321}\ufe0f'], + ['\u{1f321}'], + ['\u2600\ufe0f'], + ['\u2600'], + ['\u{1f31d}'], + ['\u{1f31e}'], + ['\u2b50'], + ['\u{1f31f}'], + ['\u{1f320}'], + ['\u2601\ufe0f'], + ['\u2601'], + ['\u26c5'], + ['\u26c8\ufe0f'], + ['\u26c8'], + ['\u{1f324}\ufe0f'], + ['\u{1f324}'], + ['\u{1f325}\ufe0f'], + ['\u{1f325}'], + ['\u{1f326}\ufe0f'], + ['\u{1f326}'], + ['\u{1f327}\ufe0f'], + ['\u{1f327}'], + ['\u{1f328}\ufe0f'], + ['\u{1f328}'], + ['\u{1f329}\ufe0f'], + ['\u{1f329}'], + ['\u{1f32a}\ufe0f'], + ['\u{1f32a}'], + ['\u{1f32b}\ufe0f'], + ['\u{1f32b}'], + ['\u{1f32c}\ufe0f'], + ['\u{1f32c}'], + ['\u{1f300}'], + ['\u{1f308}'], + ['\u{1f302}'], + ['\u2602\ufe0f'], + ['\u2602'], + ['\u2614'], + ['\u26f1\ufe0f'], + ['\u26f1'], + ['\u26a1'], + ['\u2744\ufe0f'], + ['\u2744'], + ['\u2603\ufe0f'], + ['\u2603'], + ['\u26c4'], + ['\u2604\ufe0f'], + ['\u2604'], + ['\u{1f525}'], + ['\u{1f4a7}'], + ['\u{1f30a}'], + ['\u{1f383}'], + ['\u{1f384}'], + ['\u{1f386}'], + ['\u{1f387}'], + ['\u{1f9e8}'], + ['\u2728'], + ['\u{1f388}'], + ['\u{1f389}'], + ['\u{1f38a}'], + ['\u{1f38b}'], + ['\u{1f38d}'], + ['\u{1f38e}'], + ['\u{1f38f}'], + ['\u{1f390}'], + ['\u{1f391}'], + ['\u{1f9e7}'], + ['\u{1f380}'], + ['\u{1f381}'], + ['\u{1f397}\ufe0f'], + ['\u{1f397}'], + ['\u{1f39f}\ufe0f'], + ['\u{1f39f}'], + ['\u{1f3ab}'], + ['\u{1f396}\ufe0f'], + ['\u{1f396}'], + ['\u{1f3c6}'], + ['\u{1f3c5}'], + ['\u{1f947}'], + ['\u{1f948}'], + ['\u{1f949}'], + ['\u26bd'], + ['\u26be'], + ['\u{1f94e}'], + ['\u{1f3c0}'], + ['\u{1f3d0}'], + ['\u{1f3c8}'], + ['\u{1f3c9}'], + ['\u{1f3be}'], + ['\u{1f94f}'], + ['\u{1f3b3}'], + ['\u{1f3cf}'], + ['\u{1f3d1}'], + ['\u{1f3d2}'], + ['\u{1f94d}'], + ['\u{1f3d3}'], + ['\u{1f3f8}'], + ['\u{1f94a}'], + ['\u{1f94b}'], + ['\u{1f945}'], + ['\u26f3'], + ['\u26f8\ufe0f'], + ['\u26f8'], + ['\u{1f3a3}'], + ['\u{1f3bd}'], + ['\u{1f3bf}'], + ['\u{1f6f7}'], + ['\u{1f94c}'], + ['\u{1f3af}'], + ['\u{1f3b1}'], + ['\u{1f52e}'], + ['\u{1f9ff}'], + ['\u{1f3ae}'], + ['\u{1f579}\ufe0f'], + ['\u{1f579}'], + ['\u{1f3b0}'], + ['\u{1f3b2}'], + ['\u{1f9e9}'], + ['\u{1f9f8}'], + ['\u2660\ufe0f'], + ['\u2660'], + ['\u2665\ufe0f'], + ['\u2665'], + ['\u2666\ufe0f'], + ['\u2666'], + ['\u2663\ufe0f'], + ['\u2663'], + ['\u265f\ufe0f'], + ['\u265f'], + ['\u{1f0cf}'], + ['\u{1f004}'], + ['\u{1f3b4}'], + ['\u{1f3ad}'], + ['\u{1f5bc}\ufe0f'], + ['\u{1f5bc}'], + ['\u{1f3a8}'], + ['\u{1f9f5}'], + ['\u{1f9f6}'], + ['\u{1f507}'], + ['\u{1f508}'], + ['\u{1f509}'], + ['\u{1f50a}'], + ['\u{1f4e2}'], + ['\u{1f4e3}'], + ['\u{1f4ef}'], + ['\u{1f514}'], + ['\u{1f515}'], + ['\u{1f3bc}'], + ['\u{1f3b5}'], + ['\u{1f3b6}'], + ['\u{1f399}\ufe0f'], + ['\u{1f399}'], + ['\u{1f39a}\ufe0f'], + ['\u{1f39a}'], + ['\u{1f39b}\ufe0f'], + ['\u{1f39b}'], + ['\u{1f3a4}'], + ['\u{1f3a7}'], + ['\u{1f4fb}'], + ['\u{1f3b7}'], + ['\u{1f3b8}'], + ['\u{1f3b9}'], + ['\u{1f3ba}'], + ['\u{1f3bb}'], + ['\u{1f941}'], + ['\u{1f4f1}'], + ['\u{1f4f2}'], + ['\u260e\ufe0f'], + ['\u260e'], + ['\u{1f4de}'], + ['\u{1f4df}'], + ['\u{1f4e0}'], + ['\u{1f50b}'], + ['\u{1f50c}'], + ['\u{1f4bb}'], + ['\u{1f5a5}\ufe0f'], + ['\u{1f5a5}'], + ['\u{1f5a8}\ufe0f'], + ['\u{1f5a8}'], + ['\u2328\ufe0f'], + ['\u2328'], + ['\u{1f5b1}\ufe0f'], + ['\u{1f5b1}'], + ['\u{1f5b2}\ufe0f'], + ['\u{1f5b2}'], + ['\u{1f4bd}'], + ['\u{1f4be}'], + ['\u{1f4bf}'], + ['\u{1f4c0}'], + ['\u{1f9ee}'], + ['\u{1f3a5}'], + ['\u{1f39e}\ufe0f'], + ['\u{1f39e}'], + ['\u{1f4fd}\ufe0f'], + ['\u{1f4fd}'], + ['\u{1f3ac}'], + ['\u{1f4fa}'], + ['\u{1f4f7}'], + ['\u{1f4f8}'], + ['\u{1f4f9}'], + ['\u{1f4fc}'], + ['\u{1f50d}'], + ['\u{1f50e}'], + ['\u{1f56f}\ufe0f'], + ['\u{1f56f}'], + ['\u{1f4a1}'], + ['\u{1f526}'], + ['\u{1f3ee}'], + ['\u{1f4d4}'], + ['\u{1f4d5}'], + ['\u{1f4d6}'], + ['\u{1f4d7}'], + ['\u{1f4d8}'], + ['\u{1f4d9}'], + ['\u{1f4da}'], + ['\u{1f4d3}'], + ['\u{1f4d2}'], + ['\u{1f4c3}'], + ['\u{1f4dc}'], + ['\u{1f4c4}'], + ['\u{1f4f0}'], + ['\u{1f5de}\ufe0f'], + ['\u{1f5de}'], + ['\u{1f4d1}'], + ['\u{1f516}'], + ['\u{1f3f7}\ufe0f'], + ['\u{1f3f7}'], + ['\u{1f4b0}'], + ['\u{1f4b4}'], + ['\u{1f4b5}'], + ['\u{1f4b6}'], + ['\u{1f4b7}'], + ['\u{1f4b8}'], + ['\u{1f4b3}'], + ['\u{1f9fe}'], + ['\u{1f4b9}'], + ['\u{1f4b1}'], + ['\u{1f4b2}'], + ['\u2709\ufe0f'], + ['\u2709'], + ['\u{1f4e7}'], + ['\u{1f4e8}'], + ['\u{1f4e9}'], + ['\u{1f4e4}'], + ['\u{1f4e5}'], + ['\u{1f4e6}'], + ['\u{1f4eb}'], + ['\u{1f4ea}'], + ['\u{1f4ec}'], + ['\u{1f4ed}'], + ['\u{1f4ee}'], + ['\u{1f5f3}\ufe0f'], + ['\u{1f5f3}'], + ['\u270f\ufe0f'], + ['\u270f'], + ['\u2712\ufe0f'], + ['\u2712'], + ['\u{1f58b}\ufe0f'], + ['\u{1f58b}'], + ['\u{1f58a}\ufe0f'], + ['\u{1f58a}'], + ['\u{1f58c}\ufe0f'], + ['\u{1f58c}'], + ['\u{1f58d}\ufe0f'], + ['\u{1f58d}'], + ['\u{1f4dd}'], + ['\u{1f4bc}'], + ['\u{1f4c1}'], + ['\u{1f4c2}'], + ['\u{1f5c2}\ufe0f'], + ['\u{1f5c2}'], + ['\u{1f4c5}'], + ['\u{1f4c6}'], + ['\u{1f5d2}\ufe0f'], + ['\u{1f5d2}'], + ['\u{1f5d3}\ufe0f'], + ['\u{1f5d3}'], + ['\u{1f4c7}'], + ['\u{1f4c8}'], + ['\u{1f4c9}'], + ['\u{1f4ca}'], + ['\u{1f4cb}'], + ['\u{1f4cc}'], + ['\u{1f4cd}'], + ['\u{1f4ce}'], + ['\u{1f587}\ufe0f'], + ['\u{1f587}'], + ['\u{1f4cf}'], + ['\u{1f4d0}'], + ['\u2702\ufe0f'], + ['\u2702'], + ['\u{1f5c3}\ufe0f'], + ['\u{1f5c3}'], + ['\u{1f5c4}\ufe0f'], + ['\u{1f5c4}'], + ['\u{1f5d1}\ufe0f'], + ['\u{1f5d1}'], + ['\u{1f512}'], + ['\u{1f513}'], + ['\u{1f50f}'], + ['\u{1f510}'], + ['\u{1f511}'], + ['\u{1f5dd}\ufe0f'], + ['\u{1f5dd}'], + ['\u{1f528}'], + ['\u26cf\ufe0f'], + ['\u26cf'], + ['\u2692\ufe0f'], + ['\u2692'], + ['\u{1f6e0}\ufe0f'], + ['\u{1f6e0}'], + ['\u{1f5e1}\ufe0f'], + ['\u{1f5e1}'], + ['\u2694\ufe0f'], + ['\u2694'], + ['\u{1f52b}'], + ['\u{1f3f9}'], + ['\u{1f6e1}\ufe0f'], + ['\u{1f6e1}'], + ['\u{1f527}'], + ['\u{1f529}'], + ['\u2699\ufe0f'], + ['\u2699'], + ['\u{1f5dc}\ufe0f'], + ['\u{1f5dc}'], + ['\u2696\ufe0f'], + ['\u2696'], + ['\u{1f517}'], + ['\u26d3\ufe0f'], + ['\u26d3'], + ['\u{1f9f0}'], + ['\u{1f9f2}'], + ['\u2697\ufe0f'], + ['\u2697'], + ['\u{1f9ea}'], + ['\u{1f9eb}'], + ['\u{1f9ec}'], + ['\u{1f52c}'], + ['\u{1f52d}'], + ['\u{1f4e1}'], + ['\u{1f489}'], + ['\u{1f48a}'], + ['\u{1f6aa}'], + ['\u{1f6cf}\ufe0f'], + ['\u{1f6cf}'], + ['\u{1f6cb}\ufe0f'], + ['\u{1f6cb}'], + ['\u{1f6bd}'], + ['\u{1f6bf}'], + ['\u{1f6c1}'], + ['\u{1f9f4}'], + ['\u{1f9f7}'], + ['\u{1f9f9}'], + ['\u{1f9fa}'], + ['\u{1f9fb}'], + ['\u{1f9fc}'], + ['\u{1f9fd}'], + ['\u{1f9ef}'], + ['\u{1f6d2}'], + ['\u{1f6ac}'], + ['\u26b0\ufe0f'], + ['\u26b0'], + ['\u26b1\ufe0f'], + ['\u26b1'], + ['\u{1f5ff}'], + ['\u{1f3e7}'], + ['\u{1f6ae}'], + ['\u{1f6b0}'], + ['\u267f'], + ['\u{1f6b9}'], + ['\u{1f6ba}'], + ['\u{1f6bb}'], + ['\u{1f6bc}'], + ['\u{1f6be}'], + ['\u{1f6c2}'], + ['\u{1f6c3}'], + ['\u{1f6c4}'], + ['\u{1f6c5}'], + ['\u26a0\ufe0f'], + ['\u26a0'], + ['\u{1f6b8}'], + ['\u26d4'], + ['\u{1f6ab}'], + ['\u{1f6b3}'], + ['\u{1f6ad}'], + ['\u{1f6af}'], + ['\u{1f6b1}'], + ['\u{1f6b7}'], + ['\u{1f4f5}'], + ['\u{1f51e}'], + ['\u2622\ufe0f'], + ['\u2622'], + ['\u2623\ufe0f'], + ['\u2623'], + ['\u2b06\ufe0f'], + ['\u2b06'], + ['\u2197\ufe0f'], + ['\u2197'], + ['\u27a1\ufe0f'], + ['\u27a1'], + ['\u2198\ufe0f'], + ['\u2198'], + ['\u2b07\ufe0f'], + ['\u2b07'], + ['\u2199\ufe0f'], + ['\u2199'], + ['\u2b05\ufe0f'], + ['\u2b05'], + ['\u2196\ufe0f'], + ['\u2196'], + ['\u2195\ufe0f'], + ['\u2195'], + ['\u2194\ufe0f'], + ['\u2194'], + ['\u21a9\ufe0f'], + ['\u21a9'], + ['\u21aa\ufe0f'], + ['\u21aa'], + ['\u2934\ufe0f'], + ['\u2934'], + ['\u2935\ufe0f'], + ['\u2935'], + ['\u{1f503}'], + ['\u{1f504}'], + ['\u{1f519}'], + ['\u{1f51a}'], + ['\u{1f51b}'], + ['\u{1f51c}'], + ['\u{1f51d}'], + ['\u{1f6d0}'], + ['\u269b\ufe0f'], + ['\u269b'], + ['\u{1f549}\ufe0f'], + ['\u{1f549}'], + ['\u2721\ufe0f'], + ['\u2721'], + ['\u2638\ufe0f'], + ['\u2638'], + ['\u262f\ufe0f'], + ['\u262f'], + ['\u271d\ufe0f'], + ['\u271d'], + ['\u2626\ufe0f'], + ['\u2626'], + ['\u262a\ufe0f'], + ['\u262a'], + ['\u262e\ufe0f'], + ['\u262e'], + ['\u{1f54e}'], + ['\u{1f52f}'], + ['\u2648'], + ['\u2649'], + ['\u264a'], + ['\u264b'], + ['\u264c'], + ['\u264d'], + ['\u264e'], + ['\u264f'], + ['\u2650'], + ['\u2651'], + ['\u2652'], + ['\u2653'], + ['\u26ce'], + ['\u{1f500}'], + ['\u{1f501}'], + ['\u{1f502}'], + ['\u25b6\ufe0f'], + ['\u25b6'], + ['\u23e9'], + ['\u23ed\ufe0f'], + ['\u23ed'], + ['\u23ef\ufe0f'], + ['\u23ef'], + ['\u25c0\ufe0f'], + ['\u25c0'], + ['\u23ea'], + ['\u23ee\ufe0f'], + ['\u23ee'], + ['\u{1f53c}'], + ['\u23eb'], + ['\u{1f53d}'], + ['\u23ec'], + ['\u23f8\ufe0f'], + ['\u23f8'], + ['\u23f9\ufe0f'], + ['\u23f9'], + ['\u23fa\ufe0f'], + ['\u23fa'], + ['\u23cf\ufe0f'], + ['\u23cf'], + ['\u{1f3a6}'], + ['\u{1f505}'], + ['\u{1f506}'], + ['\u{1f4f6}'], + ['\u{1f4f3}'], + ['\u{1f4f4}'], + ['\u2640\ufe0f'], + ['\u2640'], + ['\u2642\ufe0f'], + ['\u2642'], + ['\u2695\ufe0f'], + ['\u2695'], + ['\u267e\ufe0f'], + ['\u267e'], + ['\u267b\ufe0f'], + ['\u267b'], + ['\u269c\ufe0f'], + ['\u269c'], + ['\u{1f531}'], + ['\u{1f4db}'], + ['\u{1f530}'], + ['\u2b55'], + ['\u2705'], + ['\u2611\ufe0f'], + ['\u2611'], + ['\u2714\ufe0f'], + ['\u2714'], + ['\u2716\ufe0f'], + ['\u2716'], + ['\u274c'], + ['\u274e'], + ['\u2795'], + ['\u2796'], + ['\u2797'], + ['\u27b0'], + ['\u27bf'], + ['\u303d\ufe0f'], + ['\u303d'], + ['\u2733\ufe0f'], + ['\u2733'], + ['\u2734\ufe0f'], + ['\u2734'], + ['\u2747\ufe0f'], + ['\u2747'], + ['\u203c\ufe0f'], + ['\u203c'], + ['\u2049\ufe0f'], + ['\u2049'], + ['\u2753'], + ['\u2754'], + ['\u2755'], + ['\u2757'], + ['\u3030\ufe0f'], + ['\u3030'], + ['©\ufe0f'], + ['©'], + ['®\ufe0f'], + ['®'], + ['\u2122\ufe0f'], + ['\u2122'], + ['#\ufe0f\u20e3'], + ['#\u20e3'], + ['*\ufe0f\u20e3'], + ['*\u20e3'], + ['0\ufe0f\u20e3'], + ['0\u20e3'], + ['1\ufe0f\u20e3'], + ['1\u20e3'], + ['2\ufe0f\u20e3'], + ['2\u20e3'], + ['3\ufe0f\u20e3'], + ['3\u20e3'], + ['4\ufe0f\u20e3'], + ['4\u20e3'], + ['5\ufe0f\u20e3'], + ['5\u20e3'], + ['6\ufe0f\u20e3'], + ['6\u20e3'], + ['7\ufe0f\u20e3'], + ['7\u20e3'], + ['8\ufe0f\u20e3'], + ['8\u20e3'], + ['9\ufe0f\u20e3'], + ['9\u20e3'], + ['\u{1f51f}'], + ['\u{1f4af}'], + ['\u{1f520}'], + ['\u{1f521}'], + ['\u{1f522}'], + ['\u{1f523}'], + ['\u{1f524}'], + ['\u{1f170}\ufe0f'], + ['\u{1f170}'], + ['\u{1f18e}'], + ['\u{1f171}\ufe0f'], + ['\u{1f171}'], + ['\u{1f191}'], + ['\u{1f192}'], + ['\u{1f193}'], + ['\u2139\ufe0f'], + ['\u2139'], + ['\u{1f194}'], + ['\u24c2\ufe0f'], + ['\u24c2'], + ['\u{1f195}'], + ['\u{1f196}'], + ['\u{1f17e}\ufe0f'], + ['\u{1f17e}'], + ['\u{1f197}'], + ['\u{1f17f}\ufe0f'], + ['\u{1f17f}'], + ['\u{1f198}'], + ['\u{1f199}'], + ['\u{1f19a}'], + ['\u{1f201}'], + ['\u{1f202}\ufe0f'], + ['\u{1f202}'], + ['\u{1f237}\ufe0f'], + ['\u{1f237}'], + ['\u{1f236}'], + ['\u{1f22f}'], + ['\u{1f250}'], + ['\u{1f239}'], + ['\u{1f21a}'], + ['\u{1f232}'], + ['\u{1f251}'], + ['\u{1f238}'], + ['\u{1f234}'], + ['\u{1f233}'], + ['\u3297\ufe0f'], + ['\u3297'], + ['\u3299\ufe0f'], + ['\u3299'], + ['\u{1f23a}'], + ['\u{1f235}'], + ['\u25aa\ufe0f'], + ['\u25aa'], + ['\u25ab\ufe0f'], + ['\u25ab'], + ['\u25fb\ufe0f'], + ['\u25fb'], + ['\u25fc\ufe0f'], + ['\u25fc'], + ['\u25fd'], + ['\u25fe'], + ['\u2b1b'], + ['\u2b1c'], + ['\u{1f536}'], + ['\u{1f537}'], + ['\u{1f538}'], + ['\u{1f539}'], + ['\u{1f53a}'], + ['\u{1f53b}'], + ['\u{1f4a0}'], + ['\u{1f518}'], + ['\u{1f532}'], + ['\u{1f533}'], + ['\u26aa'], + ['\u26ab'], + ['\u{1f534}'], + ['\u{1f535}'], + ['\u{1f3c1}'], + ['\u{1f6a9}'], + ['\u{1f38c}'], + ['\u{1f3f4}'], + ['\u{1f3f3}\ufe0f'], + ['\u{1f3f3}'], + ['\u{1f3f3}\ufe0f\u200d\u{1f308}'], + ['\u{1f3f3}\u200d\u{1f308}'], + ['\u{1f3f4}\u200d\u2620\ufe0f'], + ['\u{1f3f4}\u200d\u2620'], + ['\u{1f1e6}\u{1f1e8}'], + ['\u{1f1e6}\u{1f1e9}'], + ['\u{1f1e6}\u{1f1ea}'], + ['\u{1f1e6}\u{1f1eb}'], + ['\u{1f1e6}\u{1f1ec}'], + ['\u{1f1e6}\u{1f1ee}'], + ['\u{1f1e6}\u{1f1f1}'], + ['\u{1f1e6}\u{1f1f2}'], + ['\u{1f1e6}\u{1f1f4}'], + ['\u{1f1e6}\u{1f1f6}'], + ['\u{1f1e6}\u{1f1f7}'], + ['\u{1f1e6}\u{1f1f8}'], + ['\u{1f1e6}\u{1f1f9}'], + ['\u{1f1e6}\u{1f1fa}'], + ['\u{1f1e6}\u{1f1fc}'], + ['\u{1f1e6}\u{1f1fd}'], + ['\u{1f1e6}\u{1f1ff}'], + ['\u{1f1e7}\u{1f1e6}'], + ['\u{1f1e7}\u{1f1e7}'], + ['\u{1f1e7}\u{1f1e9}'], + ['\u{1f1e7}\u{1f1ea}'], + ['\u{1f1e7}\u{1f1eb}'], + ['\u{1f1e7}\u{1f1ec}'], + ['\u{1f1e7}\u{1f1ed}'], + ['\u{1f1e7}\u{1f1ee}'], + ['\u{1f1e7}\u{1f1ef}'], + ['\u{1f1e7}\u{1f1f1}'], + ['\u{1f1e7}\u{1f1f2}'], + ['\u{1f1e7}\u{1f1f3}'], + ['\u{1f1e7}\u{1f1f4}'], + ['\u{1f1e7}\u{1f1f6}'], + ['\u{1f1e7}\u{1f1f7}'], + ['\u{1f1e7}\u{1f1f8}'], + ['\u{1f1e7}\u{1f1f9}'], + ['\u{1f1e7}\u{1f1fb}'], + ['\u{1f1e7}\u{1f1fc}'], + ['\u{1f1e7}\u{1f1fe}'], + ['\u{1f1e7}\u{1f1ff}'], + ['\u{1f1e8}\u{1f1e6}'], + ['\u{1f1e8}\u{1f1e8}'], + ['\u{1f1e8}\u{1f1e9}'], + ['\u{1f1e8}\u{1f1eb}'], + ['\u{1f1e8}\u{1f1ec}'], + ['\u{1f1e8}\u{1f1ed}'], + ['\u{1f1e8}\u{1f1ee}'], + ['\u{1f1e8}\u{1f1f0}'], + ['\u{1f1e8}\u{1f1f1}'], + ['\u{1f1e8}\u{1f1f2}'], + ['\u{1f1e8}\u{1f1f3}'], + ['\u{1f1e8}\u{1f1f4}'], + ['\u{1f1e8}\u{1f1f5}'], + ['\u{1f1e8}\u{1f1f7}'], + ['\u{1f1e8}\u{1f1fa}'], + ['\u{1f1e8}\u{1f1fb}'], + ['\u{1f1e8}\u{1f1fc}'], + ['\u{1f1e8}\u{1f1fd}'], + ['\u{1f1e8}\u{1f1fe}'], + ['\u{1f1e8}\u{1f1ff}'], + ['\u{1f1e9}\u{1f1ea}'], + ['\u{1f1e9}\u{1f1ec}'], + ['\u{1f1e9}\u{1f1ef}'], + ['\u{1f1e9}\u{1f1f0}'], + ['\u{1f1e9}\u{1f1f2}'], + ['\u{1f1e9}\u{1f1f4}'], + ['\u{1f1e9}\u{1f1ff}'], + ['\u{1f1ea}\u{1f1e6}'], + ['\u{1f1ea}\u{1f1e8}'], + ['\u{1f1ea}\u{1f1ea}'], + ['\u{1f1ea}\u{1f1ec}'], + ['\u{1f1ea}\u{1f1ed}'], + ['\u{1f1ea}\u{1f1f7}'], + ['\u{1f1ea}\u{1f1f8}'], + ['\u{1f1ea}\u{1f1f9}'], + ['\u{1f1ea}\u{1f1fa}'], + ['\u{1f1eb}\u{1f1ee}'], + ['\u{1f1eb}\u{1f1ef}'], + ['\u{1f1eb}\u{1f1f0}'], + ['\u{1f1eb}\u{1f1f2}'], + ['\u{1f1eb}\u{1f1f4}'], + ['\u{1f1eb}\u{1f1f7}'], + ['\u{1f1ec}\u{1f1e6}'], + ['\u{1f1ec}\u{1f1e7}'], + ['\u{1f1ec}\u{1f1e9}'], + ['\u{1f1ec}\u{1f1ea}'], + ['\u{1f1ec}\u{1f1eb}'], + ['\u{1f1ec}\u{1f1ec}'], + ['\u{1f1ec}\u{1f1ed}'], + ['\u{1f1ec}\u{1f1ee}'], + ['\u{1f1ec}\u{1f1f1}'], + ['\u{1f1ec}\u{1f1f2}'], + ['\u{1f1ec}\u{1f1f3}'], + ['\u{1f1ec}\u{1f1f5}'], + ['\u{1f1ec}\u{1f1f6}'], + ['\u{1f1ec}\u{1f1f7}'], + ['\u{1f1ec}\u{1f1f8}'], + ['\u{1f1ec}\u{1f1f9}'], + ['\u{1f1ec}\u{1f1fa}'], + ['\u{1f1ec}\u{1f1fc}'], + ['\u{1f1ec}\u{1f1fe}'], + ['\u{1f1ed}\u{1f1f0}'], + ['\u{1f1ed}\u{1f1f2}'], + ['\u{1f1ed}\u{1f1f3}'], + ['\u{1f1ed}\u{1f1f7}'], + ['\u{1f1ed}\u{1f1f9}'], + ['\u{1f1ed}\u{1f1fa}'], + ['\u{1f1ee}\u{1f1e8}'], + ['\u{1f1ee}\u{1f1e9}'], + ['\u{1f1ee}\u{1f1ea}'], + ['\u{1f1ee}\u{1f1f1}'], + ['\u{1f1ee}\u{1f1f2}'], + ['\u{1f1ee}\u{1f1f3}'], + ['\u{1f1ee}\u{1f1f4}'], + ['\u{1f1ee}\u{1f1f6}'], + ['\u{1f1ee}\u{1f1f7}'], + ['\u{1f1ee}\u{1f1f8}'], + ['\u{1f1ee}\u{1f1f9}'], + ['\u{1f1ef}\u{1f1ea}'], + ['\u{1f1ef}\u{1f1f2}'], + ['\u{1f1ef}\u{1f1f4}'], + ['\u{1f1ef}\u{1f1f5}'], + ['\u{1f1f0}\u{1f1ea}'], + ['\u{1f1f0}\u{1f1ec}'], + ['\u{1f1f0}\u{1f1ed}'], + ['\u{1f1f0}\u{1f1ee}'], + ['\u{1f1f0}\u{1f1f2}'], + ['\u{1f1f0}\u{1f1f3}'], + ['\u{1f1f0}\u{1f1f5}'], + ['\u{1f1f0}\u{1f1f7}'], + ['\u{1f1f0}\u{1f1fc}'], + ['\u{1f1f0}\u{1f1fe}'], + ['\u{1f1f0}\u{1f1ff}'], + ['\u{1f1f1}\u{1f1e6}'], + ['\u{1f1f1}\u{1f1e7}'], + ['\u{1f1f1}\u{1f1e8}'], + ['\u{1f1f1}\u{1f1ee}'], + ['\u{1f1f1}\u{1f1f0}'], + ['\u{1f1f1}\u{1f1f7}'], + ['\u{1f1f1}\u{1f1f8}'], + ['\u{1f1f1}\u{1f1f9}'], + ['\u{1f1f1}\u{1f1fa}'], + ['\u{1f1f1}\u{1f1fb}'], + ['\u{1f1f1}\u{1f1fe}'], + ['\u{1f1f2}\u{1f1e6}'], + ['\u{1f1f2}\u{1f1e8}'], + ['\u{1f1f2}\u{1f1e9}'], + ['\u{1f1f2}\u{1f1ea}'], + ['\u{1f1f2}\u{1f1eb}'], + ['\u{1f1f2}\u{1f1ec}'], + ['\u{1f1f2}\u{1f1ed}'], + ['\u{1f1f2}\u{1f1f0}'], + ['\u{1f1f2}\u{1f1f1}'], + ['\u{1f1f2}\u{1f1f2}'], + ['\u{1f1f2}\u{1f1f3}'], + ['\u{1f1f2}\u{1f1f4}'], + ['\u{1f1f2}\u{1f1f5}'], + ['\u{1f1f2}\u{1f1f6}'], + ['\u{1f1f2}\u{1f1f7}'], + ['\u{1f1f2}\u{1f1f8}'], + ['\u{1f1f2}\u{1f1f9}'], + ['\u{1f1f2}\u{1f1fa}'], + ['\u{1f1f2}\u{1f1fb}'], + ['\u{1f1f2}\u{1f1fc}'], + ['\u{1f1f2}\u{1f1fd}'], + ['\u{1f1f2}\u{1f1fe}'], + ['\u{1f1f2}\u{1f1ff}'], + ['\u{1f1f3}\u{1f1e6}'], + ['\u{1f1f3}\u{1f1e8}'], + ['\u{1f1f3}\u{1f1ea}'], + ['\u{1f1f3}\u{1f1eb}'], + ['\u{1f1f3}\u{1f1ec}'], + ['\u{1f1f3}\u{1f1ee}'], + ['\u{1f1f3}\u{1f1f1}'], + ['\u{1f1f3}\u{1f1f4}'], + ['\u{1f1f3}\u{1f1f5}'], + ['\u{1f1f3}\u{1f1f7}'], + ['\u{1f1f3}\u{1f1fa}'], + ['\u{1f1f3}\u{1f1ff}'], + ['\u{1f1f4}\u{1f1f2}'], + ['\u{1f1f5}\u{1f1e6}'], + ['\u{1f1f5}\u{1f1ea}'], + ['\u{1f1f5}\u{1f1eb}'], + ['\u{1f1f5}\u{1f1ec}'], + ['\u{1f1f5}\u{1f1ed}'], + ['\u{1f1f5}\u{1f1f0}'], + ['\u{1f1f5}\u{1f1f1}'], + ['\u{1f1f5}\u{1f1f2}'], + ['\u{1f1f5}\u{1f1f3}'], + ['\u{1f1f5}\u{1f1f7}'], + ['\u{1f1f5}\u{1f1f8}'], + ['\u{1f1f5}\u{1f1f9}'], + ['\u{1f1f5}\u{1f1fc}'], + ['\u{1f1f5}\u{1f1fe}'], + ['\u{1f1f6}\u{1f1e6}'], + ['\u{1f1f7}\u{1f1ea}'], + ['\u{1f1f7}\u{1f1f4}'], + ['\u{1f1f7}\u{1f1f8}'], + ['\u{1f1f7}\u{1f1fa}'], + ['\u{1f1f7}\u{1f1fc}'], + ['\u{1f1f8}\u{1f1e6}'], + ['\u{1f1f8}\u{1f1e7}'], + ['\u{1f1f8}\u{1f1e8}'], + ['\u{1f1f8}\u{1f1e9}'], + ['\u{1f1f8}\u{1f1ea}'], + ['\u{1f1f8}\u{1f1ec}'], + ['\u{1f1f8}\u{1f1ed}'], + ['\u{1f1f8}\u{1f1ee}'], + ['\u{1f1f8}\u{1f1ef}'], + ['\u{1f1f8}\u{1f1f0}'], + ['\u{1f1f8}\u{1f1f1}'], + ['\u{1f1f8}\u{1f1f2}'], + ['\u{1f1f8}\u{1f1f3}'], + ['\u{1f1f8}\u{1f1f4}'], + ['\u{1f1f8}\u{1f1f7}'], + ['\u{1f1f8}\u{1f1f8}'], + ['\u{1f1f8}\u{1f1f9}'], + ['\u{1f1f8}\u{1f1fb}'], + ['\u{1f1f8}\u{1f1fd}'], + ['\u{1f1f8}\u{1f1fe}'], + ['\u{1f1f8}\u{1f1ff}'], + ['\u{1f1f9}\u{1f1e6}'], + ['\u{1f1f9}\u{1f1e8}'], + ['\u{1f1f9}\u{1f1e9}'], + ['\u{1f1f9}\u{1f1eb}'], + ['\u{1f1f9}\u{1f1ec}'], + ['\u{1f1f9}\u{1f1ed}'], + ['\u{1f1f9}\u{1f1ef}'], + ['\u{1f1f9}\u{1f1f0}'], + ['\u{1f1f9}\u{1f1f1}'], + ['\u{1f1f9}\u{1f1f2}'], + ['\u{1f1f9}\u{1f1f3}'], + ['\u{1f1f9}\u{1f1f4}'], + ['\u{1f1f9}\u{1f1f7}'], + ['\u{1f1f9}\u{1f1f9}'], + ['\u{1f1f9}\u{1f1fb}'], + ['\u{1f1f9}\u{1f1fc}'], + ['\u{1f1f9}\u{1f1ff}'], + ['\u{1f1fa}\u{1f1e6}'], + ['\u{1f1fa}\u{1f1ec}'], + ['\u{1f1fa}\u{1f1f2}'], + ['\u{1f1fa}\u{1f1f3}'], + ['\u{1f1fa}\u{1f1f8}'], + ['\u{1f1fa}\u{1f1fe}'], + ['\u{1f1fa}\u{1f1ff}'], + ['\u{1f1fb}\u{1f1e6}'], + ['\u{1f1fb}\u{1f1e8}'], + ['\u{1f1fb}\u{1f1ea}'], + ['\u{1f1fb}\u{1f1ec}'], + ['\u{1f1fb}\u{1f1ee}'], + ['\u{1f1fb}\u{1f1f3}'], + ['\u{1f1fb}\u{1f1fa}'], + ['\u{1f1fc}\u{1f1eb}'], + ['\u{1f1fc}\u{1f1f8}'], + ['\u{1f1fd}\u{1f1f0}'], + ['\u{1f1fe}\u{1f1ea}'], + ['\u{1f1fe}\u{1f1f9}'], + ['\u{1f1ff}\u{1f1e6}'], + ['\u{1f1ff}\u{1f1f2}'], + ['\u{1f1ff}\u{1f1fc}'], + ['\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}'], + ['\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}'], + ['\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}'], +]; diff --git a/pkgs/characters/test/src/unicode_tests.dart b/pkgs/characters/test/src/unicode_tests.dart new file mode 100644 index 00000000..740c9664 --- /dev/null +++ b/pkgs/characters/test/src/unicode_tests.dart @@ -0,0 +1,35 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:characters/src/grapheme_clusters/constants.dart"; + +export "unicode_grapheme_tests.dart"; + +String testDescription(List expected) { + return "÷ " + + expected + .map((s) => s.runes + .map((x) => x.toRadixString(16).padLeft(4, "0")) + .join(" × ")) + .join(" ÷ ") + + " ÷"; +} + +var categoryName = List(16) + ..[categoryOther] = "Other" + ..[categoryCR] = "CR" + ..[categoryLF] = "LF" + ..[categoryControl] = "Control" + ..[categoryExtend] = "Extend" + ..[categoryZWJ] = "ZWJ" + ..[categoryRegionalIndicator] = "RI" + ..[categoryPrepend] = "Prepend" + ..[categorySpacingMark] = "SpacingMark" + ..[categoryL] = "L" + ..[categoryV] = "V" + ..[categoryT] = "T" + ..[categoryLV] = "LV" + ..[categoryLVT] = "LVT" + ..[categoryPictographic] = "Pictographic" + ..[categoryEoT] = "EoT"; diff --git a/pkgs/characters/test/src/various_tests.dart b/pkgs/characters/test/src/various_tests.dart new file mode 100644 index 00000000..7409c5b0 --- /dev/null +++ b/pkgs/characters/test/src/various_tests.dart @@ -0,0 +1,14 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +const zalgo = [ + [ + 'Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍', + 'A̴̵̜̰͔ͫ͗͢', + 'L̠ͨͧͩ͘', + 'G̴̻͈͍͔̹̑͗̎̅͛́', + 'Ǫ̵̹̻̝̳͂̌̌͘', + '!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞' + ], +]; From 3e070bd4ec14e4eda5d242d267e49b8ca8e56f2b Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Wed, 4 Sep 2019 10:38:59 +0200 Subject: [PATCH 05/82] Add third_party directory containing licenses and referenced documents. (dart-lang/characters#5) --- .../lib/src/grapheme_clusters/table.dart | 3 +- pkgs/characters/test/src/text_samples.dart | 493 ++- .../test/src/unicode_grapheme_tests.dart | 2 +- .../GraphemeBreakProperty.txt | 1429 +++++++ .../Unicode_Consortium/GraphemeBreakTest.txt | 630 +++ .../Unicode_Consortium}/UNICODE_LICENSE.txt | 0 .../Unicode_Consortium/emoji_data.txt | 769 ++++ .../Unicode_Consortium/emoji_test.txt | 3793 +++++++++++++++++ .../Wikipedia/License CC BY-SA 3.0.txt | 69 + .../third_party/Wikipedia/hangul.txt | 488 +++ 10 files changed, 7672 insertions(+), 4 deletions(-) create mode 100644 pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakProperty.txt create mode 100644 pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakTest.txt rename pkgs/characters/{ => third_party/Unicode_Consortium}/UNICODE_LICENSE.txt (100%) create mode 100644 pkgs/characters/third_party/Unicode_Consortium/emoji_data.txt create mode 100644 pkgs/characters/third_party/Unicode_Consortium/emoji_test.txt create mode 100644 pkgs/characters/third_party/Wikipedia/License CC BY-SA 3.0.txt create mode 100644 pkgs/characters/third_party/Wikipedia/hangul.txt diff --git a/pkgs/characters/lib/src/grapheme_clusters/table.dart b/pkgs/characters/lib/src/grapheme_clusters/table.dart index 86a83298..b42a66c0 100644 --- a/pkgs/characters/lib/src/grapheme_clusters/table.dart +++ b/pkgs/characters/lib/src/grapheme_clusters/table.dart @@ -6,7 +6,8 @@ // Generated from https://www.unicode.org/Public/12.0.0/ucd/auxiliary/GraphemeBreakProperty.txt // and https://unicode.org/Public/emoji/12.0/emoji-data.txt. // Licensed under the Unicode Inc. License Agreement -// (../../UNICODE_LICENSE.txt, http://www.unicode.org/copyright.html#License) +// (../../../third_party/Unicode_Consortium/UNICODE_LICENSE.txt, +// http://www.unicode.org/copyright.html#License) const String _data = '""""""""""""""""DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' 'DDDDDDD""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""DDD' diff --git a/pkgs/characters/test/src/text_samples.dart b/pkgs/characters/test/src/text_samples.dart index bf40e8cb..61385bd6 100644 --- a/pkgs/characters/test/src/text_samples.dart +++ b/pkgs/characters/test/src/text_samples.dart @@ -2,10 +2,498 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -/// From: https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B5%AD%EC%96%B4 +/// From: https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B8%80 +/// text converted to Unicode NFD format. /// Text is available under the [Creative Commons Attribution-ShareAlike License](https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License). var hangul = """ -20세기 후반까지는 우랄-알타이 계통설이 지지를 받았는데, 우랄-알타이어족이 우랄어족과 알타이어족으로 나뉘게 된 뒤에는 알타이 계통설이 가장 가능성이 큰 것으로 여겨지고 있다. 그러나 알타이어족을 이루는 주요 언어인 튀르크어와 몽골어 사이의 유사관계가 많은 부분 어휘차용에 근거하는 등 알타이어족 사이에서도 눈에 띄는 유사점을 발견하기 어렵고, 결정적으로 기초 어휘의 일치 및 음운대응규칙이 보이지 않기 때문에 고립된 언어 내지는 한국어족으로 보고 있다. 알타이어족설 한국어가 몽골어, 퉁구스어, 터키어 등과 함께 알타이어족에 속한다고 보는 견해이다. 한국어를 알타이어족의 하나로 보는 입장에서는 한국어의 다음과 같은 속성을 근거로 든다. 모음조화가 존재한다. 용언에 굴절이 있는 교착어이다. 주어, 목적어, 동사의 어순을 가지는 S-O-V 어순의 언어이다. 어두에 특정 자음이 쓰이지 않는 두음법칙이 존재한다. 모음교체, 자음교체, 문법적 성(性), 어두자음군이 없다. 관계대명사와 접속사가 없고 접속사의 결여를 보충하기 위해 부동사를 사용한다.[9] 그러나 한국어는 알타이어족이 가지는 전형적인 특성 외에 다른 특성을 공유하지 못하기도 한다. 이는 한국어가 조기에 알타이조어에서 분리되었다는 가설을 성립하게 하였다. 한국어가 알타이어족에 속하는 언어임을 부정하는 주장은 다음과 같다. 대부분 알타이 어족 가설 자체에 해당하는 것이기도 하다. 알타이 제어에는 기초 어휘인 신체 지칭이나 친족 명칭어가 유사한 것이 거의 없다. 기초 어휘로서 대명사 일부만이 유사하고, 수사가 거의 다르다. 음운대응의 규칙성이 정확하지 못하고, 믿을만한 것이 부족하다. 알타이 제어의 언어 구조는 매우 유사하지만, 차용어를 제외하면 공통된 요소가 매우 적다. 문법 요소의 일부 유사성으로는 알타이 제어의 관련을 증명하기에 충분하지 않다. 역사적으로 밀접한 접촉을 했고, 서로 강력한 영향력을 끼친 결과, 언어구조가 유사해졌고, 차용어로 인하여 공통요소가 생겼을 가능성이 있다. 한국어가 알타이어족에 속하는 언어임을 부정하는 주장의 근거 중 하나가 음운대응의 규칙성의 부족이다. 많은 연구에도 불구하고 알타이 제어와 한국어의 음운대응 관계가 적게 밝혀진 것은 사실이다. 특히 모음의 대응은 매우 불규칙하다. 하지만 자음 중에서는 몇 가지 밝혀진 대응관계가 있다.[10] 한국인은 형질 인류 상으로는 몽골 인종이고, 언어상으로는 알타이어를 쓰고 있다. 한국의 학교에서는 2006년 기준 한국어가 알타이 어족과 가까운 관계에 있는 것으로 가르치고 있다.[11] 한-일어족설 한국어와 일본어 사이의 문법적인 유사성이 많다는 데에서 나오는 설이다. 부여어족설 등의 구체적인 가설이 나왔으나, 고대 한국어 자료가 부족하여 가설 단계에 머물러 있다. 이노우에 키요시(井上 淸)는 일본어가 친족관계를 가질 가능성이 있는 것은 오직 한국어 뿐이고, 그렇다면 공통의 조어에서 갈라진 시기를 언어연대학으로 조몬시대 중기 이전으로 추정했다.[12] 일부는 이와 같은 주장을 하는 사람은 일본인이고, 일본 제국주의가 내선일체를 내세워 한국을 식민지배했다는 점에서 한-일 어족설은 일제의 식민지배를 정당화하는 수단이 될 뿐이며 일선동조론에 불과하다고 주장한다. 극동아시아어족설 한국어 이외에도 몽골어, 퉁구스어, 터키어, 일본어, 만주어까지 한 어족으로 보며, 해당 다섯 개의 언어와 한국어가 유사하다는 점을 근거로 제시하고 있다. 비알타이어 기층설 한국의 언어학자인 김방한이 제시한 가설로, 한국어 기층에 원시 한반도어라고 부르는 정체불명의 비알타이어 기층이 있고, 그 위에 알타이어계 요소가 덮인 것이거나, 그 반대로 비알타이어가 알타이 기층에 덮여서 한국어의 뼈대가 형성되었다고 보는 가설이다. 그는 원시 한반도어와 계통적 친연성이 있는 언어로 편의상 고시베리아어족으로 분류되어 있는 니브히어(길랴크어)를 지목하였다. 음운 이 부분의 본문은 한국어 음운론입니다. 모음 다음은 대한민국 표준어를 기준으로 한 모음의 표기이다. 음소 대표적인 음성 적요 예 /ㅏ/ [a] 전설 비원순 저모음, 중설 근저모음[vn 1] /ai/ 아이 [ai] /ㅓ/ [ʌ] 후설 비원순 중저모음[vn 2] /ʌdi/ 어디 [ʌdi] /ㅗ/ [o] 후설 원순 중고모음 /oi/ 오이 [oi] /ㅜ/ [u] 후설 원순 고모음 /uɾi/ 우리 [uɾi] /ㅡ/ [ɯ] 후설 비원순 고모음 /gɯ/ 그 [kɯ] /ㅣ/ [i] 전설 비원순 고모음 /ima/ 이마 [ima] /ㅐ/ [ɛ] 전설 비원순 중저모음[vn 3] /hɛ/ 해 [hɛ] /ㅔ/ [e] 전설 비원순 중고모음[vn 3] /nue/ 누에 [nue] /ㅚ/ [ø] ([we] 허용) 전설 원순 중고모음[vn 3] /sø/ 쇠 [sø] /ㅟ/ [y] ([wi] 허용) 전설 원순 고모음[vn 3] /y/ 위 [y] 전설 모음 기호 a는 전통적으로 한국어의 중설 모음을 나타내는 데 쓰인다. 일반적으로 [ɐ]와 비슷한 소리를 낸다. 서울 방언의 /ㅓ/는 완전한 비원순 모음이 아니라 원순과 비원순의 중간적인 발음이다. 또한 문화어에서는 이 모음을 [ɔ]로 소리 낸다. 한국에서는 거의 모든 지역에서 노년층을 제외하고 /ㅐ/와 /ㅔ/의 구별이 상실되어 같은 소리로 발음된다. 그 음성은 [ɛ] 와 [e] 의 중간 소리다. 또 서울 방언과 평양 방언 모두 단모음 음소로서 /ㅚ/, /ㅟ/가 존재하지 않는다. 이들 방언에서 /ㅚ/는 보통 [we](평양 방언에서는 [wɛ])로 나타나며 /ㅟ/는 [wi]로 나타난다. 따라서 단모음의 종류가 가장 적은 서울 방언 화자의 경우 단모음은 일곱 가지(/ㅏ, ㅓ, ㅗ, ㅜ, ㅡ, ㅣ, ㅔ/)밖에 없다. 자음 양순 치경 치경구개 권설 경구개 연구개 성문 비음 m n ŋ 파열음 p b t d k ɡ 마찰음 s z ɕ ʑ ç x h ɦ 파찰음 ʨ ʥ 탄음 ɾ 접근음 w j ɰ 설측음 ɭ ʎ 음운 체계 양순음 치경음 경구개음 연구개음 성문음 파열음 평음 ㅂ (b/p) ㄷ (d/t) ㅈ (ʥ/ʨ) ㄱ (g/k) 경음 ㅃ (p͈) ㄸ (t͈) ㅉ (ʨ͈) ㄲ (k͈) 격음 ㅍ (pʰ/bʱ) ㅌ (tʰ/dʱ) ㅊ (ʨʰ/ʥʱ) ㅋ (kʰ/gʱ) 마찰음 평음 ㅅ (sʰ/zʱ) ㅎ (h/ɦ) 경음 ㅆ (s͈) 비음 ㅁ (m) ㄴ (n) ㅇ (ŋ) 유음 ㄹ (l) /ㅅ/는 [sʰ], [j]나 [i] 앞에서는 [ɕʰ]가 된다. 비음 앞과 뒤에서는 [zʱ]로 발음된다. (단, [j]나 [i] 앞에서는 [ʑʱ]가 된다.) /ㅎ/는 [h]. [j]나 [i] 앞에서는 [ç], [w]나 [u] 앞에서는 [ɸ], [ɰ] 앞에서는 [x]가 된다. 비음 앞에서는 [ɦ]로 발음되며, 비음 뒤에서는 음가가 사라진다. /ㅂ, ㄷ, ㅈ, ㄱ/는 [p], [t], [ʨ], [k]. 모음 사이, 비음 뒤에서는 [b], [d], [ʥ], [ɡ]가 된다. /ㄹ/는 모음 사이에서는 [ɾ], 어말에서 또는 겹으로 날 때는 [ɭ]. 겹으로 날 때 [i]나 [j] 앞에서는 [ʎ]가 된다. 어두에서는 음가가 없어진다. 위의 표에서 평음. 경음, 격음은 기식성에 의해 나눈 것이고, 긴장성에 의해 무기 연음. 무기 경음. 유기 경음으로 분류할 수 있다. 한국어는 긴장음 체계이다. 형태 음소론 조사의 형태는 앞의 소리의 영향을 받을 수 있다. 은/는, 이/가, 을/를과 같이 음절이 바뀌는 경우도 있고, 에서/서, 으로/로와 같이 음절이 끼어드는 경우도 있다. 은/는, 이/가, 을/를의 경우, 모음이 연쇄되는 것을 피하고자 자음이 삽입되는 규칙적인 경우이나, 와/과, 으로/로의 경우는 예외적이다. 으로/로는 ㄹ 뒤에서 독특한 분포를 보인다. 와/과 역시 중세 한국어에서는 으로/로와 마찬가지로 ㄹ뒤에서 '와'가 쓰이는 독특한 분포를 보였으나 현대한국어에서는 그렇지 않다. 와/과의 경우 이중모음/ㅘ/가 모음이 아니라는 점에서 모음 연쇄 환경이 아니고 사용빈도에 따라 분포가 설명된다.[13] 한국어 조사 자음 뒤 모음 뒤 -의 -의 -은 -는 -이 -가 -을 -를 -과 -와 -으로 -로 형태 음소론적 차이는 일부 동사에서도 관찰된다. 문법 이 부분의 본문은 한국어 문법입니다. 한국어는 어근과 접사 등 특정 표지가 붙음에 따라 단어의 기능이 결정되는 교착어로 분류된다. 특히 조사에 따라 문법적 격이 정해지며 이 때문에 고립어에 비해 어순이 비교적 유동적이기는 하나, 일반적으로 SOV형 어순, 곧 주어-목적어-동사의 구조를 가지고 있다. 또한 일반적인 경우 서술어는 반드시 문장의 끝에 위치하여야 한다. 조사는 문법적 격을 나타내는 격조사, 단어끼리 이어주는 접속조사, 특별한 의미를 가하는 보조사로 나뉘며, 조사가 붙는 체언이 개음절인지 폐음절인지에 따라 다른 조사가 붙기도 한다. 일례로, '사람'의 뒤에 붙는 주격 조사는 '이'이나, '머리' 뒤에 붙는 주격 조사는 '가'이다. 어미가 다양한 것이 특징적으로, 문장 내에서 기능이나 수식은 물론 미묘한 분위기에까지 영향을 끼치기도 한다. 특히 주로 종결 어미나 선어말 어미에 따라 드러나는 낮춤말과 평어, 높임말의 복잡한 존비어 체계가 특징적으로, 화자 간에 존댓말(높임말)과 반말(낮춤말, 평어)에 대한 합의가 명확하게 이루어지지 않은 상태에서는 의사소통에 있어서 어색한 상황이 발생한다.[14] 이러한 언어와 호칭선택 문제 때문에 갈등과 권위적 상황이 유발되기도 한다는 분석도 있다.[15] 용언은 동사와 형용사를 포함하는데, 둘의 어미 변화가 거의 동일하다는 특징이 있다. 용언의 기본형은 모두 종결어미의 일종인 '-다'로 끝나는 것으로 취급되며, 그 기능에 따라 조금씩 변하나 대부분의 경우 여전히 '다'로 끝나 문장의 끝을 암시하게 된다. 그 시제는 현재, 과거, 미래형으로 나뉘며, 이 또한 동사의 종류나 기능에 따라 다양한 어미로 나타난다. 어휘 이 부분의 본문은 한국어의 고유어, 한국어의 한자어, 및 한국어의 외래어입니다. 한국어의 어휘는 크게 고유어 ("순우리말"), 한자어, 외래어로 분류된다. 고유어는 한국어의 기층을 형성하는 고유의 어휘로, 사용 빈도가 높은 일상어는 대부분 고유어에 속한다. 그러나 고유어의 일부는 매우 이른 시기에 들어온 상고 중국어에서 유래되어 고유어로 인식되는 어휘가 있고(붓-筆, 먹-墨), 후대에 한자어의 형태가 일그러지면서 본디 말과 다른 의미를 획득하여 고유어로 인식되는 어휘도 있다(사냥>山行, 짐승>衆生). 음운적으로 ㄹ 소리로 시작되는 토착어휘는 거의 없으며, 이는 알타이 제어의 음운론적 특징의 하나이기도 하다. 한자어는 고전 중국어에서 유래된 어휘군으로 중국과의 접촉에 따라 지속해서 한국어에 유입되었으나 한자어의 비율은 사전이나 자료마다 차이가 있으나 일반적으로 50 - 70%까지로 추산된다. 그러나 일각에서는 이는 일제강점기에 가능한 한 많은 낱말들을 한자로 표기하면서 과장된 것이라는 주장도 있다.[16] 또한, 국어사전이 수록하는 한자어의 상당수는 한문 문장에만 용례가 있고, 한국어에서는 용례가 발견되지 않는 단어들이다. 국립국어연구원이 2002년 발표한 '현대 국어 사용 빈도 조사'를 보면 우리말의 낱말 사용 비율은 토박이말이 54%, 한자어 35%, 외래어가 2%였다. 이는 중국에서 받아들인 지 오래되어 외래어처럼 인식되지 않는 고전 한어(한문) 기원의 한자어와 한국에서 독자 조어된 한국제 한자어, 메이지 시대의 일본이 서양문물을 받아들이면서 서양의 개념을 번역해낸 일본제 한자어 등을 모두 포함하는 것이다. 한자어는 본질에서는 외래어이지만, 한국어에서 차지하는 위상이 특수하고, 비중이 매우 크기 때문에 다른 외래어와 달리 별도 분류한다. 마치 영어에서 라틴어, 프랑스어를 거쳐 들어온 문화어휘가 차지하는 비중과 비슷하다. 외래어라 하면 일반적으로 중국어 이외의 외국어에서 받아들인 어휘를 가리킨다. 근대 이전에는 불경을 통하여 간접 차용된 산스크리트어(한자어 형태로 들어왔기 때문에 한자어로 분류되기도 함)를 비롯하여 몽골어, 만주어, 일본어 등에서 소수의 차용어가 들어왔으며, 일제강점기에는 독일어, 프랑스어, 스페인어, 포르투갈어, 네덜란드어 등 인도유럽어족 어휘가 주로 일본을 통하여 들어왔다. 이때 '아르바이트(Arbeit)'와 같이 원어의 의미와 다르게 쓰이게 된 말도 있다. 현대에는 영어가 강한 영향력을 발휘하게 되면서 영어로부터의 많은 차용어들이 쓰이고 있다. 문자 이 부분의 본문은 한글, 이두, 향찰, 및 구결입니다. 한반도에서 처음 사용된 문자체계는 한자이다. 한문과 한자 문화가 중국으로부터 전래한 시기는 확실치 않으나, 대략 한사군 시절을 전후하여 이미 한반도에서 한자, 한문이 유입되어 있었던 것으로 추측된다. 한문 유입 이후, 고유명사 표기 등 한국어 표기의 필요성이 대두하였으며, 1934년 경주에서 발견된 임신서기석(壬申誓記石)은 어순이 한문 어순이 아닌 한국어 어순에 따라 배열되어 한자를 이용하여 한국어를 표기하기 위한 여러 고안이 행해졌음을 알 수 있다. 이 임신서기석에 사용된 변칙한문체를 서기체(誓記體) 또는 의국체(擬國體)라고 한다. 단음절어이며 고립어인 중국어를 표기하는 한자는 다음절어이면서 교착어인 한국어의 표기에 적합하지 않아 한자를 이용하여 한국어를 표기하는 방법 중에서 이두, 구결은 제한적인 쓰임새 외에는 일반화되지 못했고, 향찰은 소멸하였다. 지배계급은 한자를 이용하여 구어인 한국어를 표기하기보다는 문어체의 한문을 고수하려는 경향이 있었기 때문에, 구어(한국어)와 문어(한문)의 이중체계가 오랫동안 지속하였다. 현재 한국어 표기에 쓰이는 문자인 한글은 세종대왕이 창제하여 훈민정음이라는 이름으로 1446년에 반포한 것이다. 훈민정음 창제 원리에 대한 설이 여러 가지 있었으나, 1940년에 《세종어제훈민정음》이 발견되면서 발성 기관을 본떠 만들어졌다는 것이 밝혀졌다. 정인지는 훈민정음 반포 서문에서 "계해년 겨울에 우리 전하께서 비로소 정음 28자를 창제하시다"(癸亥冬, 我殿下創制正音二十八字.)라고 적고 있다. 최만리 등은 1444년(세종 26년) 2월에 한글 창제 반대 상소에서 "신 등이 엎드려 보건대, 언문(諺文)을 제작하신 것이 지극히 신묘하와 만물을 창조하시고 지혜를 운전하심이 천고에 뛰어나시다."(臣等伏覩諺文制作, 至爲神妙, 創物運智, 夐出千古.)라고 하며, 세종대왕이 한글을 직접 만들었음을 밝히고 있다.(세종실록 26년 2월 20일) 같은 상소에서는 "글자의 형상은 비록 옛날의 전문(篆文)을 모방하였을지라도, 음을 쓰고 글자를 합하는 것은 모두 옛것에 반대된다."(字形雖倣古之篆文, 用音合字, 盡反於古.)고 했는데, 이는 오랑캐(몽골·여진·일본 등)처럼 새로운 글자를 만들었다고 비판할 중화주의자들을 의식해 '언문은 옛글자(한자의 옛 서체)를 본떠서 만들었다'는 식으로 해명한 것에 대해 자음과 모음을 결합해 음절을 구성하는 한글의 표기방식이 표의문자인 한자와는 근본적으로 다르다고 비난한 내용으로, 한글 이전에는 조선에 한글과 같은 문자가 없었음을 확인시켜 준다. 한자는 훈민정음 창제 이후에도 공문서에 사용하는 유일한 문자로 계속 사용되었으며, 1894년 갑오개혁 이후에야 공문서에 한글이 쓰이기 시작하였다.(국한문혼용) 현재 대한민국에서는 한글이 공식문자이고, 일부 한자어는 한자를 괄호에 넣어 병기(竝記)하기도 하지만 한자의 사용은 갈수록 줄어드는 추세이다. 조선민주주의인민공화국과 중국 연변 조선족 자치주, 구 소련 지역에서는 한자를 거의 쓰지 않고 가급적 순한글로 한국어를 표기한다. 1930년대 초반 소련에서는 여러 소수 민족 언어를 대상으로 한 로마자 표기 정책의 일환으로 한국어를 로마자로 표기하는 방안을 승인했지만, 실제 로마자 표기안이 마련되어 생활에 적용되지는 않는 것으로 보인다. 이는 한국어 문자생활에서 로마자로 한글·한자를 대체하려던 방안으로 외국인들을 위한 한국어 고유명사의 표기에 쓰는 현재의 로마자 표기 규범과는 큰 차이가 있다. 다만, 현대 한국어에서는 로마자 두문자어 표기와 일부 고유 명사 표기에 로마자를 제한적으로 사용하고 있기도 하다. 방언 이 부분의 본문은 한국어의 방언입니다. '잠자리'를 부르는 여러 가지 말. 한국어의 지역별 방언 구분 한국어의 방언은 경기 방언, 영동 방언, 서북 방언, 충청 방언, 서남 방언, 동남 방언, 동북 방언, 재미 한국어, 재중 한국어, 재일 한국어 등으로 나눈다. 경기 방언과 충청 방언을 중부 말로 합쳐 일컫기도 한다. 모든 방언이 서로 의사소통이 가능한 정도의 차이를 보인다. 대한민국의 표준어는 경기 방언을 바탕으로 하고 있고 조선민주주의인민공화국의 표준어인 문화어는 서북 방언을 바탕으로 하고 있다. 최근에는 미국 등 영어 사용 국가로의 이민이 늘어나면서 이민 2세와 같이 영어를 모국어로 하는 한국계 외국인들이 영어를 번역한 듯한 한국어(번역체)를 사용하기도 한다.[17] 한국어의 남북 간 차이 이 부분의 본문은 한국어의 남북 간 차이입니다. 이 문단의 내용은 출처가 분명하지 않습니다. 지금 바로 이 문단을 편집하여, 참고하신 문헌이나 신뢰할 수 있는 출처를 각주 등으로 표기해 주세요. 검증되지 않은 내용은 삭제될 수도 있습니다. 내용에 대한 의견이 있으시다면 토론 문서에서 나누어 주세요. (2010년 5월 29일에 문단의 출처가 요청되었습니다.) 대한민국과 조선민주주의인민공화국은 약 80년 가까이 분단된 만큼 언어상의 특징도 차이가 있다. 가령 조선민주주의인민공화국에서는 건데기나 지팽이와 같이 'ㅣ'의 모음 역행 동화를 인정하는 경향이 크며, 대한민국에서 인정하는 두음 법칙이 관찰되지 않기 때문에 여자, 염원, 노동 대신 녀자, 념원, 로동과 같은 낱말을 사용한다. 대한민국에서는 상황에 따라 다양한 성격의 문체나 구어체를 활용하고, 조선민주주의인민공화국에서는 어감이 강한 표현을 많이 쓴다. 또, 조선민주주의인민공화국에서는 '찔리우다'와 같이 대한민국보다 보조용언을 겹쳐 쓰는 경우가 많으며, 접미사 '들'을 많이 쓰는 경향도 있다. 어휘 면에서는 특히 많은 차이를 보이며, 외래어 수용에 큰 거리낌이 없는 대한민국에 반해, 조선민주주의인민공화국에서는 말다듬기로 고유어가 많지만, 과거 '얼음보숭이'를 쓰던 것에 비하면 오늘날 대부분 '아이스크림'이라고 쓰는 것을 볼 때, 외래어도 어느 정도 받아들이는 추세다. 외국어로서 미국, 중국, 일본, 프랑스, 폴란드, 카자흐스탄, 러시아 등지에서는 한국어를 배우려는 사람들도 생겼다. 이는 한국의 경제 성장에 따른 국제적 위상의 확대와 한류 등의 문화적 영향력의 전파에 힘입은 바가 크다. 그러나 아직 아시아 언어 중에서는 중국어나 일본어보다 학습자의 수가 적은 편이며, 체계적인 교수법이나 교재도 부족한 형편이다. 과거에는 영어, 일본어 등 유럽, 미주 및 일본을 중심으로만 한국어 학습용 교재가 발간되었으나, 근래에는 한국어 학습 동기의 다변화와 국내 외국인 수의 증가로 중국어, 타이어, 인도네시아어, 베트남어 등 다양한 언어로 한국어 교재가 발간되고 있다. 미국 정부회계감사원이 발표한 '미국 국무부 외국어 직무수행 평가서'에 따르면, 중국어, 일본어, 아랍어와 더불어 한국어를 미국인이 가장 배우기 힘든 언어(superhard language)로 분류하고 있는데, 이는 인도유럽어족인 영어와 한국어의 여러 상이점에 따른 것이다.[18] 한편, 한국어를 배우는 대부분의 외국인은 한국어를 학문으로서 배운다는 의견도 존재한다.[19] 한국어 검정시험 대한민국 대한민국에는 현재 한국어 능력을 검정하기 위한 시험이 몇 가지 있다. 국어능력인증시험(Test of Korean Language;TOKL), 한국어능력시험(Test Of Proficiency in Korean ; TOPIK), KBS 한국어능력시험(Korean Language Test) 등이 있다. 일본 일본의 네 가지 한국어 시험 가운데 일본에서 비교적 널리 알려진 시험은 한글능력검정시험과 한국어능력시험이다. 한글능력검정시험을 뺀 나머지 모든 시험은 대한민국 표준어 시험이기 때문에 표준어가 기준이며, 이와 다른 문화어의 맞춤법이나 어법은 오답으로 처리된다. 이외 일본의 대학 입시 센터 시험에는 2002년부터 한국어가 포함되었다. 한글능력검정시험 일본의 특정 비영리법인 한글능력검정협회가 주최하는 자격시험으로 6월경(연 2회)에 실시한다. 일본의 한국어 학습자에게 가장 잘 알려진 시험이다. 5급이 가장 낮은 급수이고 4급<3급<준2급<2급<1급순으로 급수가 올라간다. 일본국내에서만 통용되며 등급이 영어검정(일본)시험과 거의 같으므로 영어검정시험과 비교 대조되는 경우가 있다. 2006년부터 "준 1급"이 없어졌다. 1, 2급은 문제의 지문을 포함하여 모든 글이 한국어로 표기되어 있다. 또한, 이 시험은 답을 적을 때 대한민국이든 조선민주주의인민공화국이든 어느 한쪽으로 일관성 있게 통일되어 있으면 정답으로 간주한다. 근래 한류 붐의 영향으로 초급 수험자는 상당히 증가했으나 반대로 1, 2급 등 고급 레벨에서는 수험자 수가 매우 적다. 2004년 전후에 상급의 시험 문제는 난도가 계속 상승하는 반면, 3급 이하의 급수는 합격률이 90%를 넘나들게 쉬워지는 현상이 일어났다. 그러나 2006년 다시 출제 기준과 난이도 조정이 이루어진 결과, 낮은 급수도 난도가 대폭 상승하여 현재에 이른다. 이러한 난이도의 유동에 따라 자격시험으로서 신뢰도가 떨어진다는 지적도 있다.[출처 필요] 한국어능력시험(TOPIK) 국립국제교육원이 주최하고 교육과학기술부가 인정하는 자격시험으로 매년 4월과 9월에 시행된다. (한국에서는 2007년부터 일본에서는 2008년부터 연 2회 볼 수 있게 되었다) 한글능력검정시험과 달리 1, 2급이 초급이고 3, 4급이 중급, 5, 6급이 고급단계이다. 한국, 일본 외에 세계 28개국에서 실시되는 국제적 시험이다. 수험자 수가 가장 많은 국가는 중국이고 두 번째가 일본이다. 외국인이 한국의 대학교, 대학원에 입학할 때 이 시험의 성적증명서 제출이 요구되는 경우가 많다. 또한, 한국의 많은 외국인 대상 어학당에서 이 시험의 결과로 반을 편성한다. 세계한국말인증시험[20](KLPT)(世界韓国語認証試験) 한글학회가 주최하는 자격시험으로 4월 10월에 시행된다. 2006년까지는 1,4,7,10월의 연 4회 시행되었으나, 2007년부터 연 2회로 단축되었다. (수험자 수가 적은 것이 원인으로 추측된다) 평가는 500점 만점의 점수제로 토익과 같은 형태이다. 한국어 레벨테스트(KLT) 점수제이고 1000점 만점이다. 시험시간은 90분이고 비교적 단시간에 시험을 볼 수 있다. 한국,일본외에 중국과 미국에서도 수험이 가능하다. 2004년부터 개시되었지만 2009년 1월 시험 시행이 정지되었다. 인터넷에서의 한국어 한국어 문서가 전 세계 웹에서 차지하는 비중은 2004년에 4.1%로, 이는 영어(35.8%), 중국어(14.1%), 일본어(9.6%), 스페인어(9%), 독일어(7%)에 이어 전 세계 6위이다.[21] 웹상에서의 한국어 사용 인구는 전 세계 75억여 명의 인구[22] 중 약 1%[23] 에 해당한다. 한국어 사용국가 대한민국 대한민국 (국가 공용어) 조선민주주의인민공화국 조선민주주의인민공화국 (국가 공용어) 중국 중화인민공화국 (연변조선족자치주의 공용어) (주요 외국어, 제2외국어 과목 채택) 일본 일본 (인구의 약 0.8% 사용. 주요 외국어, 제2외국어 과목 채택. 공항 및 지하철 안내 언어) 미국 미국 (한인타운 등지에서 사용. SAT 제2외국어 과목 채택) 러시아 러시아 (중앙아시아 및 러시아 전역 분포.) 우즈베키스탄 우즈베키스탄 카자흐스탄 카자흐스탄 관련 항목 한문 한자 한자어 한자 문화권 한국어 순화 한국어의 품사 발음하기 힘든 한국어 문장 긴 한국어 낱말 한국어 사전 한글 한글날 훈민정음 한국어 위키백과 각주 “Korean language” [Ethnologue, languages of the world]. 《에스놀로그》. 2010년. 2015년 2월 11일에 확인함. Song, Jae Jung (2005), 《The Korean language: structure, use and context》, Routledge, 15쪽, ISBN 978-0-415-32802-9. Campbell, Lyle; Mixco, Mauricio (2007), 〈Korean, A language isolate〉, 《A Glossary of Historical Linguistics》, University of Utah Press, 7, 90–91쪽, most specialists... no longer believe that the... Altaic groups... are related […] Korean is often said to belong with the Altaic hypothesis, often also with Japanese, though this is not widely supported. Dalby, David (1999–2000), 《The Register of the World's Languages and Speech Communities》, Linguasphere Press. Kim, Nam-Kil (1992), 〈Korean〉, 《International Encyclopedia of Linguistics》 2, 282–86쪽, scholars have tried to establish genetic relationships between Korean and other languages and major language families, but with little success. Róna-Tas, András (1998), 〈The Reconstruction of Proto-Turkic and the Genetic Question〉, 《The Turkic Languages》, Routledge, 67–80쪽, [Ramstedt's comparisons of Korean and Altaic] have been heavily criticised in more recent studies, though the idea of a genetic relationship has not been totally abandoned. Schönig, Claus (2003), 〈Turko-Mongolic Relations〉, 《The Mongolic Languages》, Routledge, 403–19쪽, the 'Altaic' languages do not seem to share a common basic vocabulary of the type normally present in cases of genetic relationship. 그러나. 북한에서는 한글을 이르는 말로 보통 "조선글(자)"를 쓰기 때문에 이 표현 역시 중립적일 수 없다. 다만, 최근 북한 사전들은 "한글"을 올림말로 삼는다. 이기문·이호권 『국어사』 방송통신대학출판부 2008 20쪽 이기문·이호권 『국어사』 방송통신대학출판부 2008 22쪽 국사 편찬 위원회; 국정 도서 편찬 위원회 (2006년 3월 2일). 《고등학교 국사》. 서울: (주)교학사. 19쪽쪽. 박경리, 박경리 선생 유고 '일본산고(日本散考)' 전문 , 동아일보 남, 성현; 김, 선회 (2015). “제약서열과 사용빈도”. 《언어연구》 (한국현대언어학회). doi:10.18627/jslg.31.3.201511.605. 2016년 7월 17일에 확인함. “미수다 “한국어 존댓말 그것이 궁금하다”. 《Newsen(뉴스앤미디어)》. 2008년 4월 8일. 2018년 10월 6일에 확인함. “[포럼]미묘한 호칭 갈등”. 《경향신문》. 2011년 1월 2일. 2018년 10월 6일에 확인함. “"우리말 70%가 한자말? 일제가 왜곡"”. 《한겨레》. 2009년 9월 11일. 2018년 10월 6일에 확인함. 한국 방언 자료집 - ASX, 한국역사정보통합시스템 이은주 기자 (2006년 8월 13일). “joins.com”. 《미국인들 배우기 가장 어려운 언어는 한국·중국·일본·아랍어》 (중앙일보). 2017년 12월 6일에 확인함. Koh Young-aah (2010년 7월 20일). “More foreigners study Korean academically” (영어). The Korean Herald. 2010년 8월 5일에 확인함. 세계한국말인증시험 웹사이트 2000년에 위원회를 발족한 세계한국말인증시험(KLPT)은 2001년부터 한글학회 주관하에 미주, 유럽, 동남아 등 40여 곳에서 시험을 시행해 왔다. 이택수 (2005년 6월 16일). “한글 홈피 점유 4.1% 중국·일본어 이어 6위”. 디지털타임스. 2011년 1월 10일에 확인함. 온라인에서의 언어 분포는 영어가 35.8%로 1위를 차지했고. 중국어가 14.1%, 일본어가 9.6%, 스페인어가 9%를 차지했으며, 한글은 독일어(7%)에 이어 4.1%로 6위에 올랐다. “World Population Prospects: The 2008 Revision” (영어). 국제 연합. 2009. 2011년 1월 10일에 확인함. 해당 웹페이지의 지역 항목에서 'World'를 선택하면 조회 가능. “Ethnologue - Korean” (영어). Summer Institute of Linguistics. 2011년 1월 10일에 확인함. Population 42,000,000 in Korea, South (1986). Population total all countries: 66,305,890. 외부 링크 한국 고전 번역원 국립국어원 +한글 +위키백과, 우리 모두의 백과사전. +둘러보기로 가기검색하러 가기 + 이 문서에는 옛 한글이 포함되어 있습니다. +관련 글꼴이 설치되지 않은 경우, 일부 문자가 깨진 글자로 표시될 수 있습니다. 옛 한글 도움말을 참고하여 볼 수 있습니다. + 다른 뜻에 대해서는 한글 (동음이의) 문서를 참조하십시오. + 서적에 대해서는 훈민정음 문서를, 언어에 대해서는 한국어 문서를 참조하십시오. +한글 · 조선글 + + +한글의 구조 +한글의 구조 +원래 이름 훈민정음(訓民正音) +유형 음소문자 +표기 언어 한국어, 제주어, 찌아찌아어 +사용 시기 1443년 ~ 현재 +창제자 세종 +ISO 15924 Hang +한국어의 표기법 +문자 +한글 +한자 +한글 점자 +한글전용 +국한문혼용 +이두 +향찰 +구결 +로마자 표기법 +국어의 로마자 표기법 +매큔-라이샤워 표기법 +예일 로마자 표기법 +ISO/TR 11941 +김복문 로마자 표기법 +양병선 로마자 표기법 +21세기 로마자 표기법 +음소문자의 역사 +원시 시나이 문자 (기원전 18 ~ 15세기) + +우가리트 문자 (기원전 15세기) +원시 가나안 문자 (기원전 14세기) +페니키아 문자 (기원전 11세기) +고대 히브리 문자 (기원전 10세기) +사마리아 문자 (기원전 6세기) +아람 문자 (기원전 8세기) +브라흐미 문자와 인도 문자 (기원전 6세기) +티베트 문자 (7세기) +크메르 문자/자와 문자 (9세기) +히브리 문자 (기원전 3세기) +시리아 문자 (기원전 2세기) +나바테아 문자 (기원전 2세기) +아랍 문자 (4세기) +타나 문자 (18세기) +소그드 문자 (기원전 4세기) +돌궐 문자 (5세기) +로바쉬 문자 (12세기) +위구르 문자 (8세기) +몽골 문자 (13세기) +만주 문자 (16세기) +팔라비 문자 (기원전 3세기) +아베스타 문자 (4세기) +그리스 문자 (기원전 9세기) +에트루리아 문자 (기원전 8세기) +로마자 (기원전 7세기) +룬 문자 (2세기) +고트 문자 (3세기) +콥트 문자 (300년) +아르메니아 문자 (405년) +조지아 문자 (5세기) +글라골 문자 (862년) +키릴 문자 (10세기) +아부르 문자 (1372년) +고대 히스파니아 문자 (기원전 7세기) +남아랍 문자 금석문 (기원전 9세기) +그으즈 문자 (기원전 5 ~ 6세기) +메로이트 문자 (기원전 3세기) +오검 문자 (4세기) +한글 1443년 +캐나다 문자 1840년 +주음부호 1913년 +전체 분류 +v • d • e • h +한글은 발음기관과 하늘, 땅, 사람을 본따 고안된 음소문자로, 닿소리 14자에 홀소리 10자 총 24자로 구성되어 있다. "나랏말이 중국과 달라" 문제를 느낀 조선 세종이 한국어를 표기하기 위하여 1443년 창제, 1446년 반포하였다. 낱자가 음가만 표기하기 때문에 갈래로는 음소문자에 속하나, 네모 칸에 초성, 중성, 종성을 이루는 자모음을 한데 모아 쓰는 방식 때문에 음절문자의 특성도 일부 지닌다. 원래 글자 수는 닿소리 17자에 홀소리 11자 총 28자였으나 이후 4자가 소실, 24자만 쓰이게 되었다. 대한민국과 조선민주주의인민공화국과 옌볜 조선족 자치주에서는 공용 문자로, 인도네시아 부톤 섬에서는 찌아찌아어의 보조 문자로 채택되었다. 북한에서는 조선글(朝鮮-)이라 한다. + +세계에서 유일하게 만든 사람,만든 이유,만든 날짜를 아는 글자이다. + + +목차 +1 명칭 +2 역사 +2.1 창제 +2.2 창제 논란 +2.3 조선 +2.4 근대 이후 +2.5 현대 이후 +3 창제원리 +4 구조 +4.1 낱자 +4.2 모아쓰기 +4.3 표기 가능한 글자 수와 소리나는 음절 개수 +5 한글의 유래 +6 한글에 관한 여러 이설 +6.1 파스파 문자 기원설 +6.2 기타 한글과 유사하다고 주장하는 문자 +6.2.1 가림토와 신대 문자 +6.2.2 구자라트 문자 +6.3 다른 언어에서의 한글 사용 +7 오해와 사실 +8 한글 자모일람 +8.1 방언 한글 자모 +8.2 고문 한글 자모 +8.3 복합원음와 보음 +9 관련 항목 +10 각주 +11 참고 문헌 +12 읽을거리 +13 외부 링크 +명칭 +창제 때는 백성(民)을 가르치는(訓) 바른(正) 소리(音), 훈민정음(訓民正音)이라 하였고, 줄여서 정음(正音)이라고도 했다. + +'한글'이라는 이름은 주시경이 ‘큰’, ‘바른’, ‘하나’를 뜻하는 고유어 ‘한’을 차용하여 지었다. 하지만 주시경의 의도한 뜻이 무엇이었는지는 명확히 밝혀진 바가 없다. + +한글 창제 당시에는 백성을 가르치는 바른소리라는 뜻으로 훈민정음이라 하였고, 줄여서 정음(正音)이라고도 하였다. 조선시대에는 지식층으로부터 경시되며, 본래의 이름으로 쓰지 않고 막연히 언문(諺文)[1], 언서(諺書)[2], 반절(反切)[3] 로 불리거나, 혹은 암클(여성들이 배우는 글), 아햇글(어린이들이 배우는 글)이라고 불렀다고 알려져 있다. (단, 암클, 아햇글이라는 표현은 그 출처가 불분명하다.) 1894년 갑오개혁 이후 국서(國書), 국문(國文)이라고 불렀고 혹은 조선글로 부르기도 하였는데 이것은 한국의 글이라는 보통 이름일 뿐이며, 고유명사로 한글이라는 이름이 널리 쓰이기 전에는 가갸, 정음 등으로 불렀다. + +처음 한글이라는 이름이 사용된 것에대한 명확한 기록은 없다. 다만 1913년 3월 23일 주시경이 ‘배달말글몯음(조선어문회, 朝鮮言文會)[4]’를 ‘한글모’로 바꾼 바 있고[5], 같은 해 9월 최남선의 출판사 ‘신문관(新文館)’에서 창간한 어린이 잡지 《아이들 보이》의 끝에 가로글씨로 '한글풀이’라 한 것이 있고[6], 1914년 4월에 ‘조선어강습원(朝鮮語講習院)’이 ‘한글배곧’으로 이름을 바꾼 것 등으로 볼 때 1913년 무렵 주시경이 처음으로 사용한 것으로 보이며, 1927년에는 조선어학회 회원들이 《한글》이라는 잡지를 매달 발간하였다. 한글이라는 명칭이 일반화된 것은 1928년 11월 11일 조선어연구회에서 가갸날을 한글날로 고쳐 부른 때부터라고 한다. + +현재 한글의 명칭을 대한민국에서는 한글로, 조선민주주의인민공화국에서는 조선어자모로 부르는데[7], 2001년 2월 중국 옌지에서 열린 ‘제5차 코리안 컴퓨터 처리 국제 학술 대회(ICCKL 2001)’에서는 남과 북, 해외 동포 학자들이 국제 표준화 기구(ISO)에 등록하기 위한 명칭으로 ‘정음(Jeong'eum)’을 쓰기로 합의하였다. + +다른 나라에서는 한글(Hangul/Hangeul)이라는 이름을 많이 쓰지만, 중국에서는 조선 자모(중국어: 朝鮮字母, 병음: Cháoxiǎn zìmǔ 차오셴 쯔무[*])와 같은 이름을 쓴다. 일본에서는 한글은 물론 한국어를 ‘한구루(한글)(ハングル)’로 부르기도 하는데, 이는 NHK 방송에서 한국어 강좌를 설립시에 대한민국의 ‘한국어’와 조선민주주의인민공화국의 ‘조선어’ 사이에서 중립적인 위치를 지키기 위해 한국어 강좌 명칭으로 '한글강좌'를 사용하여 많은 일본인들이 이를 보고 한글의 뜻을 한국어로 오해한 것이다. + +한글이라는 이름은 본디 문자의 이름이지만, 관용적으로는 한국어를 한글로 적은 것이라는 의미로 책이나 소프트웨어, 게임 등의 한국어 번역 작업을 한글화라 하고 번역본을 한글판이라 부르기도 한다. 그리고 한글 이름, 한글 지명처럼 고유어라는 의미로 쓰이기도 한다. 하지만 표준국어대사전에서는 두 의미 모두 등재되지 않았으며, 한국어화, 한국어판이 맞는 표현이다. + +역사 + +《훈민정음 언해》의 서두 +창제 +한국은 삼국시대부터 이두(吏讀)와 구결(口訣)을 써 왔는데, 구결은 본래 한문에 구두(句讀)를 떼는 데 쓰기 위한 일종의 보조적 편법에 지나지 않았고, 이두는 비록 한국어를 표시함에 틀림이 없었지만 한국어를 자유자재로 적을 수 없었으며, 그 표기법의 일원성(一元性)이 없어서 설사 이두로써 족하다 해도 한자교육이 선행되어야 했다. 이러한 문자생활의 불편은 한자를 쓰지 않고도, 배우기 쉽고 쓰기 쉬운 새로운 글자의 출현이 절실히 요구되었다. + +이러한 사조가 세종때에 특히 두드러져 드디어 1443년 음력 12월에 문자혁명의 결실을 보게 되었다. 훈민정음 창제의 취지에 관하여는 세종이 손수 저술한 《훈민정음》 예의편(例義篇) 첫머리에 잘 나타나 있는데, 첫째 한국어는 중국말과 다르므로 한자를 가지고는 잘 표기할 수 없으며, 둘째 우리의 고유한 글자가 없어서 문자생활의 불편이 매우 심하고, 셋째 이런 뜻에서 새로 글자를 만들었으니 일상생활에 편하게 쓰라는 것이다. + +‘훈민정음’은 “백성을 가르치는 바른소리”라는 뜻으로[8], 세종의 어제 서문과 정인지 서(序)에서 분명히 밝히고 있는바, 당시까지 한문 의존에 따른 어려움을 근본적으로 극복하기 위해 한국어의 고유문자로서 창제되었다. + +한편, 훈민정음 창제 후 5년 뒤에 《동국정운(東國正韻)》이 간행되는데, 당시 조선에서 통용되던 한자음을 중국어 원음으로 교정하기 위한 책으로서 이것의 발음 표기에 훈민정음이 사용되고 있다. 따라서, 세종의 훈민정음 창제가 한자 및 한문의 폐지를 목적한 것은 아니라고 보이며, 훈민정음의 활용 범위가 상당히 넓었음을 짐작할 수 있다. 훈민정음에 대하여 반대하는 신하들이 있었는데 대표적으로 최만리는 상소를 올려 반대하였다. 그러나 세종은 "경이 운서를 아는가? 사성칠음에 자모가 몇이나 있는가? 만일 짐이 운서를 바로잡지 아니하면 누가 이를 바로잡을 것인가?" 라고 말하였다. + +처음 만들었을 때는 낱자 28글자와 성조를 나타내는 기호(방점)가 따로 있었으나, 지금은 ㅿ, ㆁ, ㆆ, ㆍ 네 글자와 성조 기호(방점)가 사라져서 24글자가 되었다. (제주도를 비롯한 몇 곳에서는 아직도 ㆍ의 발음이 남아 있다.) + +그 뒤로 몇 백 년에 걸쳐, 식자층은 주로 한글보다는 한문 위주의 문자 생활을 했지만 한자를 배울 수 없었던 백성과 여자들은 서로 주고 받는 편지나 계약서 등에 한글을 썼고, 궁궐에서 여자끼리 주고 받는 문서에 한글을 쓰기도 하였다. + +창제 논란 +오늘날 한글이라 불리는 글이 창제되었다는 사실이 세상에 알려진 것은 세종대왕 25년인 1443년이다. 창제 당시에 한글은 '훈민정음'이라 불렸으며 1446년 음력 9월 초에는 《훈민정음》(통칭 '해례본')이 책으로 엮어졌다. 이 사실은 정인지(鄭麟趾)가 쓴 〈서(序)〉로 확인된다.[9] + +지금까지 논란이 되고 있는 부분은 세종대왕이 홀로 글을 창제했는지, 집현전 학자들의 도움을 받았는지, 아니면 세종대왕의 명을 받아 집현전 학자들이 글을 창제했는지가 문제이다. 세종실록(世宗實錄)은 훈민정음을 세종대왕이 친히 만들었다고 기록하고 있으며[10], 누구의 도움을 받았다는 기록은 없다.[11] + +다시 말하면 시월 상친제언문이십팔자(是月 上親制諺文二十八字, 세종 25년, 12월 30일)에서 ‘상친제(上親制)’란 세종이 직접 한글을 만들었다는 뜻인데 '세종실록' 안에는 다른 업적에 관해서는 "친제"라는 말이 없었지만, 훈민정음(한글)에 관해서는 이렇게 확실하게 적어 놓았다는 것이다. 또한, 집현전 학자였던 정인지가 집필한 훈민정음 해례본의 서문 중에도 세종대왕이 직접 한글을 창제했다는 내용이 있다.[12] + +그러나 성현(成俔, 1439년~1504년)의 《용재총화(慵齋叢話)》 제7권에서 세종이 언문청을 세워 신숙주, 성삼문 등에게 글을 짓도록 명을 내렸다는 주장이 나왔다. 주시경은 《대한국어문법》(1906년)에서 세종이 집현전 학자들의 도움을 받아 한글을 창제했다고 썼다. 그리하여 한글 창제에 집현전 학자들이 관여했다는 설이 우세하게 되었으나, 이기문을 비롯한 학자들은 기록에 나타난 당시 정황을 볼 때 세종이 한글을 홀로 창제한 것이 아니라고 볼 이유가 없다고 주장하고 있다. 한글 창제 후 세종은 표음주의 표기가 일반적인 당대의 표기법과는 달리 형태주의 표기를 주로 활용하고 동국정운 같은 책을 편찬한 예에서 보듯이 국어와 중국어의 전반에 걸쳐 음운학 및 언어학에 깊은 조예와 지식을 보여 주었다. 집현전 학자들은 한글 창제 후 정음청에서 한글을 사용한 편찬 사업에만 관여했다는 것이다.[13] + +조선 +처음에 ‘훈민정음’으로 반포된 한글은 조선시대에는 '언문'이라고 불렸다. 이것은 《세종실록》에서 '상친제언문이십팔자(上親製諺文二十八字)'라고 한 것에 연유하는데 한자를 제외한 문자는 ‘언문’이라고 불렀기 때문이다. 여성들이 많이 한글을 썼기 때문에 ‘암클’ 등으로 낮추어 불리기도 하였으나, 궁중과 일부양반층, 백성들 사이에서도 사용되었다. + +1445년(세종 27) 4월에 훈민정음을 처음으로 사용하여 악장(樂章)인 《용비어천가》를 편찬하고, 1447년(세종 29) 5월에 간행하였다. 목판본 10권 5책 모두 125장에 달하는 서사시로서, 한글로 엮어진 책으로는 한국 최초의 것이 된다. 세종은 “어리석은 남녀노소 모두가 쉽게 깨달을 수 있도록” 《(세종실록》, 세종 26년) 《삼강행실도》를 훈민정음으로 번역하도록 했으며, 훈민정음이 반포된 뒤에는 일부 관리를 뽑을 때 훈민정음을 시험하도록 했다. 이후로 민간과 조정의 일부 문서에서 훈민정음을 써 왔다. + +이러한 한글 보급 정책에 따라 한글은 빠르게 퍼져 반 세기 만인 1500년대 지방의 노비 수준의 신분인 도공에게까지 쓰이게 되었다.[14] + +연산군은 1504년(연산군 10년) 훈민정음을 쓰거나 가르치는 것을 금했지만, 조정안에서 훈민정음을 쓰는 것을 금하지는 않았으며, 훈민정음을 아는 사람을 일부러 궁궐에 등용하기도 했다고 전한다. + +율곡 이이가 《대학》에 구결을 달고 언해한 《대학율곡언해》는 1749년에 간행되었다.[15] + +조선 중기 이후로 가사 문학, 한글 소설 등 한글로 창작된 문학이 유행하였고, 서간에서도 한글/정음이 종종 사용되었다. + +근대 이후 +1894년(조선 고종 31년) 갑오개혁에서 마침내 한글을 ‘국문’(國文 나랏글)이라고 하여, 1894년 11월 21일 칙령 제1호 공문식(公文式) 제14조[16] 및 1895년 5월 8일 칙령 제86호 공문식 제9조[17] 에서 법령을 모두 국문을 바탕으로 삼고 한문 번역을 붙이거나 국한문을 섞어 쓰도록 하였다. 1905년 지석영이 상소한 6개 항목의 〈신정국문(新訂國文)〉이 광무황제의 재가를 얻어 한글 맞춤법으로서 공포되었으나, 그 내용의 결점이 지적되면서 1906년 5월에 이능화(李能和)가 〈국문일정의견(國文一定意見)〉을 제출하는 등 논란이 되자, 당시 학부대신 이재곤(李載崑)의 건의로 1907년 7월 8일 대한제국 학부에 통일된 문자 체계를 확립하기 위한 국어 연구 기관으로 '국문연구소(國文硏究所)'가 설치되었는데, 국문연구소의 연구 성과는 1909년 12월 28일 학부에 제출한 보고서로서 〈국문연구의정안(國文硏究議定案)〉 및 어윤적, 이종일(李鍾一), 이억(李億), 윤돈구(尹敦求), 송기용(宋綺用), 유필근(柳苾根), 지석영, 이민응(李敏應)의 8위원 연구안으로 완결되었다. + + +한글과 한문이 혼용되어 쓰인 매일신보 1944년 기사 +한편, 민간에서는 1906년 주시경이 《대한국어문법(大韓國語文法)》을 저술하여 1908년에 《국어문전음학(國語文典音學)》으로 출판하였으며, 1908년 최광옥(崔光玉)의 《대한문전(大韓文典)》, 1909년 유길준(兪吉濬)의 《대한문전(大韓文典)》, 김희상(金熙祥)의 《초등국어어전(初等國語語典)》, 1910년 주시경의 《국어문법(國語文法)》등이 출간되고, 이후에도 1911년 김희상의 《조선어전(朝鮮語典)》, 1913년 남궁억(南宮檍)의 〈조선문법(朝鮮文法)〉, 이규영(李奎榮)의 〈말듬〉, 1925년 이상춘(李常春)의 《조선어문법(朝鮮語文法)》 등으로 이어지면서, 1937년 최현배의 《우리말본》으로 집대성된다. + +이와 함께, 조선어학회와 같은 모임에서 꾸준히 애쓴 덕에 조금씩 한국어의 표준 문자로 힘을 얻게 되어 누구나 쓸 수 있게끔, 널리 퍼지게 되었다. '한글'이라는 이름은 주시경이 지은 것이며 조선어학회가 이 이름을 널리 알리기 시작한 것도 이 즈음이다. 일제강점기를 거쳐 광복을 맞이한 다음에는 남북한 모두 공문서와 법전에 한글을 쓰게 되었고, 끝내 조선어를 받아적는 글자로 자리잡게 되었다. + +현대 이후 +한국에서는 한글전용법이 시행되어 한자의 사용이 줄어들면서 1990년대 그 사용이 절정을 이루었다.[18] 이후 정부차원에서의 영어우대정책으로 인해 한글의 사용이 점차 줄고 있다는 지적이 있다.[19] + +2009년에는 문자가 없어 의사 소통에 곤란을 겪었던 인도네시아의 소수 민족인 찌아찌아족이 자신들의 언어 찌아찌아어의 표기 문자로 시범적으로 한글을 채택, 도입하였다. 그러나 주 정부의 반대와 소수만 배우는 문제 등으로 인해서 이 방법은 사용되지 않고 있다. 그리고 2012년에 솔로몬 제도에 있는 일부 주가 모어 표기문자로 한글을 도입하였다.[20] + +창제원리 +『훈민정음 해례본(訓民正音 解例本)』을 바탕으로 한글과 음양오행의 관계를 기록하였다. + +가. 모음은 음양의 원리를 기본으로 만들어졌다. + +기본 모음'ㆍ, ㅡ, ㅣ'를 보면 'ㆍ'(아래아)는 양(陽)인 하늘(天)을 본 떠 만들고, 'ㅡ'는 음(陰)인 땅(地)을 본 떠 만들었으며 'ㅣ'는 음과 양의 중간자인 인간(人)의 형상을 본 떠 만들었다. 천지인(天地人)은 단군사상에서 유래한 것으로 우주를 구성하는 주요한 요소인 하늘(·)과 땅(ㅡ), 사람(ㅣ)을 나타낸다.[21] +『훈민정음 해례본』에 따르면 'ㅏ,ㅑ, ㅗ, ㅛ'는 'ㆍ'(아래아) 계열의 글자이다. +'ㆍ'(아래아)의 속성은 양이다. 양의 특성은 위로의 상승, 바깥으로의 확장이다. 따라서 점을 위, 바깥 쪽에다 찍은 것. + +'ㅓ, ㅕ, ㅜ, ㅠ'는 그 반대로 'ㅡ' 계열의 글자이기 때문에 음의 속성을 따라, 하강, 수축의 뜻으로 점을 안쪽, 아래로 찍은 것. +나. 자음은 오행을 바탕으로 만들어졌다. + +『훈민정음 해례본』에선 각 방위와 발음기관을 연결시키고, 해당 발음기관에서 나는 소리 또한 방위와 연관시키고 있다. 방위는 또 계절과 연결이 되므로, 결국 소리는 계절과 연결된다. +(소리=방위=계절, 소리=계절) 계절은 봄, 여름, 늦여름, 가을, 겨울 순이므로, 소리 역시 어금닛소리(ㄱ, 봄), 혓소리(ㄴ, 여름), 입술소리(ㅁ, 늦여름), 잇소리(ㅅ, 가을), 목소리(ㅇ,겨울) 순으로 배열한다. + +『훈민정음 해례본』에서 기본 자음을 ㄱ,ㄴ,ㅁ,ㅅ,ㅇ,ㄹ 순으로 배열한 것은 오행 원리와 연관이 있다. +자음과 오행의 관계 정리표 +속성 계절 방위 음성 음계 +목(木, 나무) 춘(春, 봄) 동(東, 동녘) 어금닛소리(ㄱ,ㅋ,ㄲ) 각(角) +화(火, 불) 하(夏, 여름) 남, (南, 남녘) 혓소리(ㄴ,ㄷ,ㅌ,ㄸ) 치(徵) +토(土, 흙) 계하 (季夏, 늦여름) 중앙(中, 無定) 입술소리(ㅁ,ㅂ,ㅍ,ㅃ,) 궁(宮) +금(金, 쇠) 추(秋, 가을) 서(西, 서녘) 잇소리(ㅅ,ㅆ,ㅈ,ㅊ,ㅉ) 상(商) +수(水, 물) 동(冬, 겨울) 북(北, 북녘) 목소리(ㅇ, ㅎ) 우(羽) +구조 +한글은 낱소리 문자에 속하며, 낱자하나는 낱소리하나를 나타낸다. 낱소리는 닿소리(자음)와 홀소리(모음)로 이루어진다. + +한 소리마디는 첫소리(초성), 가운뎃소리(중성), 끝소리(종성)의 낱소리 세 벌로 이루어지는데, 첫소리와 끝소리에는 닿소리를 쓰고 가운뎃소리에는 홀소리를 쓴다. 한글은 낱자를 하나씩 풀어쓰지 않고 하나의 글자 마디로 모아쓰는 특징을 가지고 있다. + +낱자 +이 부분의 본문은 한글 낱자입니다. +처음 한글 낱자는 닿소리 17자와 홀소리 11자로 총 28가지였다. 오늘날 한글 낱자에 쓰이지 않는 없어진 글자를 소실자(消失字)라 하는데, 닿소리 ㅿ(반시옷), ㆁ(옛이응), ㆆ(여린히읗)과 홀소리 ㆍ(아래아)의 네 글자이다. 이로써 현대 한글은 모두 24자로서 닿소리 14자와 홀소리 10자로 되었다. 낱자의 이름과 순서는 다음과 같다. + +훈민정음 창제 당시에는 낱자 자체의 칭호법(稱號法)은 표시되어 있지 않았고, 중종 때 최세진의 《훈몽자회》에 이르러 각 낱자의 명칭이 붙게 되었다. 하지만 기역, 디귿, 시옷은 이두식 한자어 명칭을 그대로 사용하여 일제시대의 언문 철자법을 거쳐 지금까지 그대로 사용하게 되었다.[22] + +각 자모에 대한 소릿값을 살펴보면, 첫소리 아·설·순·치·후(牙舌脣齒喉)와 반설·반치(反舌半齒)의 7음으로 구별하였고, 모음은 따로 구별하지 않았다. 이러한 7음과 각 자모의 독특한 배열 순서는 중국 운서(韻書)를 그대로 모방한 것이라고 여겨진다. 그리고 실제로 쓸 적에는 각 낱자를 독립시켜 소리 나는 차례대로 적지 않고, 반드시 닿소리와 홀소리를 어울려 쓰기로 하였으니, 곧 <· ㅡ ㅗ ㅜ ㅛ ㅠ >는 자음 아래에 쓰고, <ㅏ ㅓ ㅑ ㅕ>는 자음 오른쪽에 붙여 쓰기로 하였다. 즉 음절문자(音節文字)로 하되, 그 모양이 네모꼴이 되도록 하였으니, 이는 한자의 꼴에 영향을 받았기 때문이라 여겨진다. + +닿소리 +ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ +기윽/기역 니은 디읃/디귿 리을 미음 비읍 시읏/시옷 이응 지읒 치읓 키읔 티읕 피읖 히읗 +홀소리 +ㅏ ㅑ ㅓ ㅕ ㅗ ㅛ ㅜ ㅠ ㅡ ㅣ +아 야 어 여 오 요 우 유 으 이 +이 스물네 가지를 바탕으로 하는데 모두 홑소리(단음)이고, 홑소리로 나타낼 수 없는 겹소리(복음)는 두세 홑소리를 어울러서 적되, 그 이름과 순서는 다음과 같다. + +겹닿소리 +ㄲ ㄸ ㅃ ㅆ ㅉ +된기윽/쌍기역 된디읃/쌍디귿 된비읍/쌍비읍 된시읏/쌍시옷 된지읒/쌍지읒 +겹홀소리 +ㅐ ㅒ ㅔ ㅖ ㅘ ㅙ ㅚ ㅝ ㅞ ㅟ ㅢ +애 얘 에 예 와 왜 외 워 웨 위 의 +소실자 닿소리 +ㅿ ㆁ ㆆ +반시옷 옛이응 여린히읗 +유성 치경 마찰음 연구개 비음 성문 파열음 +반시옷은 알파벳의 z에 해당하는 음가를 가진 것으로 추정되며 여린히읗은 1을 강하게 발음 시 혀로 목구멍을 막으며 발음된다. + +현대 한글에서는 끝소리가 없으면 받침을 쓰지 않고 끝소리가 있을 때에만 홑받침 또는 겹받침을 쓰는데, 홑받침에는 모든 닿소리가 쓰이며, 겹받침에는 홑홀소리 아래에만 놓이는 겹닿소리 ㄲ(쌍기역)과 ㅆ(쌍시옷)과 따로 이름이 없지만 모든 홀소리 아래에 놓일 수 있는 겹받침으로만 쓰이는 겹닿소리가 있다. 모든 받침의 소릿값은 끝소리 규칙에 따라 8갈래로 모인다.[23] + +겹받침 +ㄲ ㅆ ㄳ ㄵ ㄶ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅄ +받침의 소릿값 +ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅇ +사전에 올릴 때에는 첫소리 > 가운뎃소리 > 끝소리의 순으로 정렬하되, 그 정렬 순서는 다음과 같다. + +정렬 순서 +첫소리 ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ +가운뎃소리 ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ +끝소리 ( ) ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ +모아쓰기 +한글의 모든 낱자는 한데 모아쓰도록 하고 있으며, 닿소리를 가장 먼저 쓰고 그 오른쪽이나 아래에 홀소리를 적으며, 모든 받침은 닿소리와 홀소리 밑에 놓인다. 따라서, 글자 마디로 모아쓸 때는 다음과 같은 틀에 맞추어 쓴다. + +중성이 ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ, ㅖ, ㅣ일 때는 중성을 초성의 오른쪽에 붙여 쓴다. +초성 중성 +초성 중성 +종성 +중성이 ㅗ, ㅛ, ㅜ, ㅠ, ㅡ일 때는 중성을 아래쪽에 붙여 쓴다. 종성이 있으면 그 아래 붙여 쓴다. +초성 +중성 +초성 +중성 +종성 +중성이 ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ와 같이 아래쪽에 붙이는 모음과 오른쪽에 붙이는 모음의 복합일 때는 다음과 같이 아래쪽에 먼저, 그 다음 오른쪽에 붙여 쓴다. 종성은 마찬가지로 아래쪽에 붙여 쓴다. +초성 중성 +중성 +초성 중성 +중성 +종성 +표기 가능한 글자 수와 소리나는 음절 개수 +현대 한글은 낱자를 엮어 11,172(첫소리 19 × 가운뎃소리 21 × (끝소리 27 + 끝소리 없음 1))글자 마디를 쓸 수 있다. 11,172자 중 399자는 무받침 글자이며 10,773자는 받침 글자이다. 사용 빈도는 KS X 1001 완성형 한글 코드에 선별된 2,350글자가 상위 99.9%로 알려져 있다.[출처 필요] + +어문 규정에 의하여, 현대 한국어 표준어에서 실제 사용하는 음절은 이보다 적다. 한국어의 소리는 첫소리+가운뎃소리(+끝소리)로 이루어지는데, 표준어에서 첫소리에는 19가지 닿소리가 모두 쓰이되 첫소리에 놓인 ㅇ은 소리 나지 않는다. 끝소리는 7종성법에 따라 7갈래로 모이며 끝소리가 없는 것까지 더하여 모두 8갈래이므로 현대 한국어의 발음은 첫소리 19 × 가운뎃소리 21 × 끝소리 8 = 3,192가지 소리가 된다. + +그런데, 표준 발음법을 따르면 구개음 ㅈ, ㅉ, ㅊ 뒤의 이중 모음 ㅑ, ㅒ, ㅕ, ㅖ, ㅛ, ㅠ는 단모음 ㅏ, ㅐ, ㅓ, ㅔ, ㅗ, ㅜ로 소리나므로 첫소리 3 × 가운뎃소리 6 × 끝소리 8 = 144소리가 빠지고, 아울러 소리나는 첫소리 (ㅇ이 아닌 첫소리 뒤에 오는)를 얹은 가운뎃소리 [ㅢ]는 ㄴ을 제외하면(ㄴ의 경우는 구개음화에 따른 다른 음소로 인정하고 있다.) [ㅣ]로 소리나므로(한글 맞춤법 제9항 및 표준 발음법 제5항 단서 3) 첫소리 17 × 가운뎃소리 1 × 끝소리 8 = 136 소리가 다시 빠진다. 따라서, 현재 한국어 표준어에서 실제 사용하는 소리마디는 3192 − 144 − 136 = 2,912가지가 된다. + +옛 한글의 경우, 2009년 10월 1일 발표된 유니코드 5.2에 포함되어 있는 옛 한글 자모의 총 개수는 초성 124개, 중성 95개, 종성 137개와 채움 문자 2개(초성, 중성)이다. 방점 2개는 현재 유니코드에 등록돼 있다. 방점을 제외하고, 총 조합 가능한 글자 마디 개수를 구한다면 다음과 같다. + +조합 가능한 한글 코드(125×96×138): 1,656,000개 +완성된 한글(124×95×138): 1,625,640개 +조합 가능한 비표준 한글: 총 16,989개 +채움 문자로만 구성된 한글: 1개 +초성, 종성만 있는 비표준 한글(124×137): 16,988개 +∴ 표준 한글 총 개수(조합 가능한 한글 코드 − 비표준 한글): 1,639,011개 +한글의 유래 +《세종실록》에 최만리가 훈민정음이 “고전(古篆)을 본땄다(倣)”라고 말한 기록이 있는데,[24][25] 이 말이 모호하기 때문에 여러 가지 해석이 있다. ‘고전’의 해석에는 한자의 전자체(篆字體)라는 설과 당시에 ‘몽고전자’(蒙古篆字)로도 불렸던 파스파 문자를 말하는 것이라는 설이 있다. 《환단고기》를 인정하는 사람은 이것이 가림토를 일컫는 말이라고 주장한다. 또한 ‘본땄다’(倣)에 대해서도 그 생김새만이 닮았을 뿐이라는 풀이와 만드는 데에 참고를 했다, 또는 모두 본땄다 등의 여러 가지 해석이 있다. + +1940년 《훈민정음》(해례본)이 발견되기 이전에는 훈민정음의 창제 원리를 설명한 문헌이 존재하지 않아 그 유래에 대한 여러 이론이 제기되었다. 그 이전에 제기되었던 주요 학설은 다음과 같다. + +발음 기관 상형설: 발음 기관을 상형했다는 설. 신경준(申景濬), 홍양호(洪良浩), 최현배 +전자 기원설: 한문 비석 등에 쓰이는 전자체에서 유래되었다는 설. 황윤석(黃胤錫), 이능화 +몽골 문자 기원설: 몽골문자(파스파)에서 유래했다는 설. 이익(李翼), 유희(柳僖), 게리 레드야드(Gari Ledyard) +범자(梵字) 기원설: 불경과 함께 고대 인도 문자가 전해져, 그것에서 유래했다는 설. 성현, 이수광(李晬光) +고대 문자 전래설: 훈민정음 이전 민간에서 전해지던 고대문자로부터 유래했다는 설. +창문 상형설: 한옥의 창살 모양에서 유래했다는 설. 에카르트(P. A. Eckardt) +서장(西藏)글자·오행(五行)이론.[26] +《훈민정음》(해례본)에는 자음과 모음 각각에 대한 창제 원리가 상세히 설명되어 기본 자음 5자는 발음 기관의 모양을 추상화하고, 기본 모음 3자는 천지인 3재를 상징하여 창제되었고 다른 글자들이 획을 덧붙이는 방식으로 만들어졌다고 분명히 밝힘으로써, 여러 이설들을 잠재우고 정설이 되었다. + +한글에 관한 여러 이설 +파스파 문자 기원설 + +(위) ’파스파 문자 ꡂ [k], ꡊ [t], ꡎ [p], ꡛ [s], ꡙ [l]와 그에 대응하는 것으로 여겨지는 한글 문자 ㄱ [k], ㄷ [t], ㅂ [p], ㅈ [ts], ㄹ [l]. +(아래) 중국어를 표현하기 위한 파스파 문자 ꡯ w, ꡤ v, ꡰ f의 파생과 그의 변형 문자 ꡜ [h] +(왼쪽) 밑에 기호를 덧붙인 ꡧ [w][27] 와 유사한 중국어 표기용 한글 ㅱ w/m, ㅸ v, ㆄ f. 이 한글들은 기본자 ㅁ과 ㅇ에서 유래했다. +1966년 컬럼비아 대학의 게리 레드야드 교수는 그의 논문에서 훈민정음에서 언급한 고전(古篆)을 몽고전자(蒙古篆字)로 해석하며 한글이 파스파 문자에서 그 기하학적 모양을 차용했다고 주장했다.[28] 레드야드는 그 근거로 당시 조선의 궁에는 파스파 문자가 쓰이고 있었고, 집현전 학자 일부는 파스파 문자를 잘 알고 있었다는 점을 들며, 한글의 기본 자음은 ㄱ, ㄷ, ㅂ, ㅈ, ㄹ라고 제시했다. + +레드야드에 따르면 이 다섯개의 글자는 그 모양이 단순화되어 파열음을 위한 가획을 할 수 있는 여지(ㅋ, ㅌ, ㅍ, ㅊ)를 만들어 냈다고 한다. 그는 전통적인 설명과는 다르게 비파열음 ㄴ, ㅁ, ㅅ은 기본자 ㄷ, ㅂ, ㅈ의 윗부분이 지워진 형태라 주장했다. 그는 ㅁ이 ㅂ의 윗부분을 지워서 파생되기는 쉽지만, ㅁ에서 ㅂ의 모양을 이끌어 내는 것은 불분명하다고 주장했다. 즉 다른 파열음과 같은 방법으로 파생되었다면 ㅂ의 모양은 ㅁ위에 한 획이 더해진 형태(ㄱ-ㅋ, ㄷ-ㅌ, ㅈ-ㅊ의 관계처럼)여야 한다는 것이다. + +ㆁ자의 유래에 대한 설명도 기존과 다르다. 많은 중국 단어는 ng으로 시작하는데 세종대왕 집권 시기 즈음의 중국에서는 앞에 나오는 ng는 [ŋ]으로 발음하거나 발음하지 않았으며, 이런 단어가 한국어로 차용되었을 경우에도 이는 묵음이었다. 또한 논리적으로 추론 가능한 ng음의 모양은 ㄱ에서 가로 획을 제한 모양인데, 이는 모음 ㅣ과 구분하기 힘들었을 것이다. 따라서 세종대왕은 가로 획을 제한 ㄱ에 묵음이라는 뜻의 ㅇ을 더해 ㆁ을 만들었을 것이라 주장한다. 이는 단어 중간 혹은 끝에서의 [ŋ]의 발음과 단어 처음 부분에서의 묵음을 상징적으로 나타낼 수 있는 것이었다. + +중국어를 표기하기 위한 다른 글자는 ㅱ이었는데 훈민정음은 이를 微(미)의 초성이라 설명했다. 이는 중국 방언에 따라 m 혹은 w로 발음되는데 한글에서는 ㅁ([m])과 ㅇ의 조합(이에 대응되는 파스파 문자에서는 [w]로 발음한다)으로 만들어졌다. 파스파 문자에서 글자 밑에 환형의 모양을 그리는 것은 모음 뒤의 w를 의미했다. 레드야드는 ㅱ자의 'ㅇ'모양이 이 과정을 통해 만들어 졌다고 주장했다. + +마지막 증거로 레드야드는 ㄷ의 좌측 상단에 작게 삐져나온 형상(입술 모양으로)은 파스파 문자의 d와 유사하다는 점을 들었다. 이러한 입술 모양은 티베트 문자의 d인 ད에서도 찾아볼 수 있다. + +만약 레드야드의 이러한 기원설이 사실이라면 한글은 파스파 문자→티베트 문자→브라미 문자→아람 문자를 거쳐 결국 중동 페니키아 문자의 일족에 속하게 된다. 하지만 파스파문자는 세계의 다른 고대문자들처럼 상형문자일 뿐만 아니라 각 글자가 한가지의 음을 나타내지 않고, 그 문자를 사용하던 언어권에 따라 각기 다른 음을 가졌을 것이기 때문에 한글과 같이 소리를 표기하는 문자와의 상관관계는 레드야드 혼자만이 인정하고 있다. + +이에 대해 2009년 국어학자 정광(鄭光)은 훈민정음이 36개 중국어 초성을 기본으로 하는 등 파스파 문자로부터 일부 영향을 받았지만 글자를 만든 원리가 서로 다르며, 자음과 모음을 분리하여 독창적으로 만든 문자라고 반론하였다.[29] + +기타 한글과 유사하다고 주장하는 문자 +생김새가 한글과 유사한 문자가 있어서 한글 이전의 고대문자에 영향을 받았다는 주장이 있는데, 우연히 닮은 경우이거나 신뢰할 수 없는 출처를 근거로 하고 있다고 설명된다. + +가림토와 신대 문자 +송호수는 1984년 《광장(廣場)》 1월호 기고문에서 〈천부경〉과 《환단고기》〈태백일사〉를 참조하여 한글이 단군 시대부터 있었고, 단군조선의 가림다문(加臨多文)에서 한글과 일본의 아히루 문자가 기원했다고 주장하였다.[30] 이에 대하여 국어학자 이근수는 《광장(廣場)》 2월호의 기고문을 통하여 과학적 논증이 없는 이상 추론일 뿐이며, 참조한 고서의 대부분이 야사임을 지적하였다.[31] 또한 가림토 문자는 《환단고기》의 저자로 의심되고 있는 이유립이 한글의 모(母)문자로 창작한 가공의 문자일 가능성이 높아[32] 이러한 주장은 역사학계 및 언어학계에서 인정받지 못하고 있다. + +일본의 신대 문자 중에서도 모습이 한글과 비슷한 것이 있어 이를 가림토와 연관이 있다고 주장하기도 하나, 신대 문자가 새겨져 있는 비석마다 문자의 모습이 달라 일관성이 없고 언어학자들이 추정하는 고대 일본어의 음운 구조와도 맞지 않으며,[33] 신대 문자가 기록되었다고 하는 유물 거의 전부가 18~19세기의 것이고 에도 시대 전의 것을 찾을 수 없는바, 신대 문자라는 것은 고대 일본에 문자가 있었다고 주장하기 위한 에도 시대의 위작이며, 특히 그 중에 한글과 유사한 것들은 오히려 한글을 모방한 것임이 밝혀졌다.[34] + +구자라트 문자 +1983년 9월 KBS가 방영한 8부작 다큐멘터리 《신왕오천축국전》은[35] 구자라트 문자를 소개하면서 '자음은 ㄱ, ㄴ, ㄷ, ㄹ, ㅁ, ㅅ, ㅇ 등이고, 모음은 ㅏ, ㅑ, ㅓ, ㅕ, ㅗ, ㅛ, ㅜ, ㅠ, ㅡ, ㅣ의 열 자가 꼭 같았으며, 받침까지도 비슷하게 쓰고 있었다'고 주장하였다. + +또한, 개천학회 회장 송호수[36]는 1984년 이를 인용하면서 '자음에서는 상당수가 같고, 모음은 10자가 꼭 같다는 것이다'라고 썼다. 그는 구자라트 문자가 가림토에서 비롯되었다고 주장했다.[37][38] + +그러나 구자라트 문자는 문자 구성상 자모로 완전히 분리되는 한글과는 달리 모든 자음이 딸림 모음을 수반하는 아부기다이며, 데바나가리 문자에서 수직선을 제거한 데바나가리 파생문자로서 다른 인도계 여러 문자와 친족 관계가 명확하게 밝혀져 있기 때문에 이는 구자라트 문자의 특정 글자체와 한글 사이의 표면적 유사성에 대한 착오일 뿐이다.[39] + +다른 언어에서의 한글 사용 +한글은 2009년에 처음으로 인도네시아의 소수 민족인 찌아찌아족의 언어인 찌아찌아어를 표기하는데 사용되었다. + +이밖에도 한국에서는 한글을 표기 문자로 보급하기 위하여 노력하고 있으며 2012년 솔로몬제도의 토착어를 한글로 표기하여 교육하는 활동이 시작됐다. 2012년 10월부터 시행된 것은 2개 언어이며 결과에 따라 솔로몬제도 전역으로 확대할 예정이다.[40] + +간혹, 영어 발음을 정확하게 표기하기 위해 옛 한글 등을 부활시킨 표기법을 연구하는 경우도 있으나, 이 역시 개인 연구자에 의한 것이다. 그리고 한국인이 아닌 사람이 만든 인공어618-Vuro나 인공 문자 井卜文(Jingbu Script) 등에서 일부 한글 또는 한글을 모티브로 한 문자를 개인 수준에서 사용한 예를 볼 수 있다. + +오해와 사실 +이 부분의 본문은 한글에 대한 오해입니다. +유네스코의 세계기록유산에 등재된 것은 한글이 아니라, 책《훈민정음》(해례본)이다. +유네스코 세계기록유산은 기록물이 담고 있는 내용이 아니라 기록물 자체만을 등록 대상으로 한다. +실제의 한글은 모든 언어의 발음을 표기할 수 있는 것이 아니다. 또한, 현재의 한글은 창제 당시의 훈민정음보다 표현할 수 있는 발음 수가 적다. +'모든 소리를 표현할 수 있다는 것'은 원래 언어학적 명제가 아니고, 창제 당시에 '모든 소리는 기본 5음의 조화로 이루어진다'는 사상을 배경으로 한 철학적 표현이다. +한글 낱자는 모두 소릿값이 확정되어 있고 실제 한글 쓰임에서는 모아쓰기의 규칙도 정해져 있으므로, 한글로 표현되는 소리의 숫자는 본래 유한하며, 한글은 기본적으로 한국어에 맞추어져 있다. +현재 한글은 한국어 발음에만 사용하고 있으나, 원래의 훈민정음에서는 모아쓰기가 좀 더 다양하며, 아울러 《동국정운》에 따르면 실제의 한국어 발음뿐만 아니라, 이론적인 한자음도 훈민정음으로써 표현하고 있다. +한글은 언어의 이름이 아니라 글자의 이름이다. +창제 당시의 이름인 '훈민정음'과 그 약칭인 '정음'도 본래 글자의 이름이었다. +찌아찌아족의 찌아찌아어의 표기에는 사용되나 공식은 아니다. +한글 자모일람 +방언 한글 자모 +㄰ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿ + +ㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏ + +ㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟ + +ㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯ + +ㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿ + +ㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ㆏ + +고문 한글 자모 +ᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄋᄌᄍᄎᄏ + +ᄐᄑᄒᄓᄔᄕᄖᄗᄘᄙᄚᄛᄜᄝᄞᄟ + +ᄠᄡᄢᄣᄤᄥᄦᄧᄨᄩᄪᄫᄬᄭᄮᄯ + +ᄰᄱᄲᄳᄴᄵᄶᄷᄸᄹᄺᄻᄼᄽᄾᄿ + +ᅐᅑᅒᅓᅔᅕᅖᅗᅘᅙᅚᅛᅜᅝᅞᅟ + +복합원음와 보음 +ᅠᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯ + +ᅰᅱᅲᅳᅴᅵᅶᅷᅸᅹᅺᅻᅼᅽᅾᅿ + +ᆀᆁᆂᆃᆄᆅᆆᆇᆈᆉᆊᆋᆌᆍᆎᆏ + +ᆐᆑᆒᆓᆔᆕᆖᆗᆘᆙᆚᆛᆜᆝᆞᆟ + +ᆠᆡᆢᆨᆩᆪᆫᆬᆭᆮᆯ + +ᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿ + +ᇀᇁᇂᇃᇄᇅᇆᇇᇈᇉᇊᇋᇌᇍᇎᇏ + +ᇐᇑᇒᇓᇔᇕᇖᇗᇘᇙᇚᇛᇜᇝᇞᇟ + +ᇠᇡᇢᇣᇤᇥᇦᇧᇨᇩᇪᇫᇬᇭᇮᇯ + +ᇰᇱᇲᇳᇴᇵᇶᇷᇸᇹᇺᇻᇼᇽᇾᇿ + +관련 항목 +국어 +세종대왕 +주시경 +한글의 우수성에 관한 논란 +문자 +한글 맞춤법 +한글 낱자 +한글 낱자 목록 +한국어 +한국어 로마자 표기법 +한글전용과 국한문혼용 +조선어 신철자법 +옛 한글 +훈민정음 +한글날 +한글 위키백과 +한글의 모든 글자 +한글을 표기하는 언어 목록 +한국어 +카리어 +꽈라아에어[41] +찌아찌아어 +각주 + 이것은 훈민정음 창제 당시부터 보인다. 예컨대, 《세종실록》은 훈민정음 창제를 上親制諺文二十八字…是謂訓民正音(주상께서 친히 언문 28자를 만들어 … 이것을 훈민정음이라 이른다)이라고 기록하는데, 이것은 한글의 이름이거나 또는 굳이 한글만 지칭한 것은 아니고 한자 이외의 문자를 통칭하는 표현이다. 예컨대 《순조실록(純祖實錄)》 9년 12월 2일 기사에 역관 현의순(玄義洵)이 대마도의 사정을 보고한 글 가운데 敎之以諺文名之曰假名(언문을 가르치는데, 그 이름을 일러 가나라고 한다)과 같은 문장이 있어, 일본 문자에 대해서도 언문이라는 표현이 사용됨을 볼 수 있다.) 또한 《세종실록》 28년 11월 8일자에 언문청이라는 한글을 보급하는 구실을 하는 기관 이름이 나온다. + 한문을 지칭하는 ‘진서(眞書)’와 대비되는 표현이다. + 諺文字母俗所謂反切二十七字(세간에서 이른바 반절 27자라고 하는 언문 자모). 최세진(崔世珍), 〈범례(凡例)〉, 《훈몽자회(訓蒙字會)》. 1527. 반절은 본래 2개의 한자로 다른 한자음을 표기하는 방법을 말하며, 이렇게 소리의 표기에 사용된 글자를 반절자(反切字)라고 한다. 당시 훈민정음이 이와 비슷한 용법으로 한자음 표기에도 사용되었기 때문에 반절이라고 불렸던 것으로 보인다. + 1908년 설립한 ‘국어연구학회(國語硏究學會)’가 1911년 9월에 명칭을 바꾼 것으로, 공식적으로 한글과 한문 표기를 나란히 사용했다. + ‘本會의 名稱을 한글모라 改稱하고 이 몯음을 세움몯음으로…’, 〈한글모세움몯음적발〉, 《한글모 죽보기》. 이규영. 1917. + 한글풀이의 수록이 확인되는 것은 1914년 3월의 제7호부터 1914년 7월의 제11호까지 + 〈맞춤법〉, 《조선말규범집》. 북한(조선민주주의인민공화국) 내각직속 국어사정위원회. 1987. + “훈민정음은 백성(百姓) 가르치시는 정(正)한 소리라”(현대어 표기로 옮김), 〈세종어제훈민정음〉, 《월인석보》. 1459년. + 癸亥冬我殿下創制正音二十八字略揭例義以示之名曰訓民正音 (계해년 겨울, 우리 전하께서 정음 28자를 창제하시어, 간략하게 예를 들어 보이시고 이름을 훈민정음이라 하셨다). 정인지,〈서(序)〉, 《훈민정음》. 1446년. + “上親制諺文二十八字…是謂訓民正音”, 《세종실록》 25년 12월. + 정인지는 훈민정음을 지은 세종이 집현전 학자들에게 ‘해설서’의 편찬을 명했다고 적고 있다. 遂命詳加解釋以喩諸人…謹作諸解及例以敍其梗槪 (마침내, 해석을 상세히 더하여 사람들을 깨우치라고 명하시어… 여러 풀이와 예를 지어 그 개요를 펴내니), 정인지, 〈서〉, 《훈민정음》. 1446년. + "錢下槍制', 《훈민정음 해례본》 + 〈훈민정음 친제론〉, 이기문, 《한국문화》제13집. 서울대학교 규장각 한국학연구원, 1992년. + '라랴러려' 분청사기..."16세기 지방 하층민도 한글 사용".YTN.2011-09-08. + [1] + 第十四條 法律勅令總以國文爲本漢文附譯或用國漢文 + 第九條 法律命令은 다 國文으로써 本을 삼꼬 漢譯을 附하며 或國漢文을 混用홈 + 세계는 지금 '언어전쟁' 중 + “한글 홀대하는 사회”. 2012년 11월 30일에 원본 문서에서 보존된 문서. 2010년 2월 2일에 확인함. + 솔로몬제도 일부 주(州)서 표기문자로 한글 채택 + 최현철 기자 (2010년 10월 20일). “‘천지인’ 개발자 특허권 기부 … 표준 제정 임박”. 중앙일보. 2012년 11월 15일에 확인함. + [북녘말] 기윽 디읃 시읏 / 김태훈 : 칼럼 : 사설.칼럼 : 뉴스 : 한겨레 + 然ㄱㆁㄷㄴㅂㅁㅅㄹ八字可足用也如ㅂ·ㅣㅅ곶爲梨花여ㅿ의갗爲狐皮而ㅅ字可以通用故只用ㅅ字 ,훈민정음 해례 종성해 + 其字倣古篆分爲初中終聲合之然後乃成字 : (그 글자는 옛 전자(篆字)를 모방하고, 초·중·종성으로 나뉘어 그것을 합한 연후에 글자를 이룬다.) 《세종실록》 25년 12월 30일. + 象形而字倣古篆因聲而音叶七調 (물건의 형상을 본떠서 글자는 고전을 모방하고, 소리(聲)로 인(因)하여 음(音)은 칠조(七調)에 맞아). 《세종실록》28년 9월 29일. 이 기사는 《훈민정음》의 정인지 〈서(序)〉를 옮겨 놓은 것이다. + 글로벌세계대백과, 〈양반관료의 문화〉, 한글 창제. + 이 문자들은 확실히 증명되진 않았다. 어떤 필사본에는 ꡜ h에서 파생된 저 세 글자 모두 아래쪽이 환형으로 되어있기도 하다. + "The Korean Language Reform of 1446", Gari Ledyard. (1966) + [Why] 세종대왕 한글 창제가 '표절' 누명 쓰고 있다고?, 《조선닷컴》, 2009.10.10. + "한글은 檀君시대부터 있었다" 송호수 교수 주장에 學界관심, 《경향신문》, 1984.1.12. + 한글 世宗전 創製 "터무니없다" 李覲洙교수, 宋鎬洙교수 主張 반박, 《경향신문》, 1984.2.6. + 문명, 《만들어진 한국사》, 파란, 2010 + "日 神代文字는 한글의 僞作이다", 《경향신문》, 1985.7.17. + MBC 다큐멘터리 “미스터리 한글, 해례6211의 비밀”, 2007. 10. 7. 방송 + 《新往五天竺國傳(신왕오천축국전)》. 문순태, KBS 특별취재반. 한국방송사업단, 1983. 참조 + 당시 보도에는 S베일러대 교수로 소개되었다. + 〈한글은 세종 이전에도 있었다〉, 송호수,《廣場(광장)》1984년 1월호. 세계평화교수협의회. + 일본 神代文字 논란[깨진 링크(과거 내용 찾기)], 충북대학 국어국문학과 국어학강의실 + 〈한글과 비슷한(?) 구자라트 문자〉, 김광해, 《새국어소식》1999년 10월호. 한국어문진흥회 + [2] + 섬나라 솔로몬제도 2개주도 한글 쓴다 +참고 문헌 +〈한글〉, 《한국민족문화대백과》. 한국학중앙연구원. +읽을거리 +Portal icon 한국 포털 +Portal icon 문화 포털 +한글날에 생각해보는 훈민정음 미스터리. 김현미.《신동아》 2006년 10월호. +히브리문자 기원설을 계기로 본 훈민정음. 이기혁. 《신동아》 1997년 5월호. +어느 기하학자의 한글 창제. 《동아일보》, 2007-10-19. (영어의 v, f, θ, ð, l 등의 발음을 한글로 표기하기 - 고등과학원 최재경 교수의 제안) +'한글 연구가' 최성철씨 "이젠 한글표기법 독립운동할 때". 《동아일보》, 2006-10-09. +한글과 코드: 한글과 컴퓨터 코드에 관하여 +외부 링크 + 위키미디어 공용에 관련된 미디어 자료와 분류가 있습니다. +한글 (분류) + 위키낱말사전에 +관련된 항목이 있습니다. +한글 +디지털한글박물관 +한글학회 +한글재단 +국립국어원 +한글 듣기 테스트 +"한글 자음 쓰기 영상" - 유튜브 +"한글 모음 쓰기 영상" - 유튜브 +Heckert GNU white.svgCc.logo.circle.svg 이 문서에는 다음커뮤니케이션(현 카카오)에서 GFDL 또는 CC-SA 라이선스로 배포한 글로벌 세계대백과사전의 "양반관료의 문화" 항목을 기초로 작성된 글이 포함되어 있습니다. """; /// Sample ASCII text: Genesis from the King James Bible (1604). @@ -1647,6 +2135,7 @@ So Joseph died, being an hundred and ten years old: and they embalmed him, and h """; /// From: https://en.wiktionary.org/wiki/Appendix:English_words_with_diacritics +/// which no longer exists. /// Text is available under the [Creative Commons Attribution-ShareAlike License](https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License). const diacretics = """ à bas, à la, à la carte, à la mode, à gogo, à propos, abacá, abaká, diff --git a/pkgs/characters/test/src/unicode_grapheme_tests.dart b/pkgs/characters/test/src/unicode_grapheme_tests.dart index 6bf503f0..a07812bd 100644 --- a/pkgs/characters/test/src/unicode_grapheme_tests.dart +++ b/pkgs/characters/test/src/unicode_grapheme_tests.dart @@ -6,7 +6,7 @@ // Generated from http://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt // and https://www.unicode.org/Public/emoji/11.0/emoji-test.txt. // Licensed under the Unicode Inc. License Agreement -// (../../UNICODE_LICENSE.txt, http://www.unicode.org/copyright.html#License) +// (../../third_party/Unicode_Consortium/UNICODE_LICENSE.txt, http://www.unicode.org/copyright.html#License) // Grapheme cluster tests. const List> splitTests = [ diff --git a/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakProperty.txt b/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakProperty.txt new file mode 100644 index 00000000..d573421d --- /dev/null +++ b/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakProperty.txt @@ -0,0 +1,1429 @@ +# GraphemeBreakProperty-12.0.0.txt +# Date: 2019-01-27, 20:10:37 GMT +# © 2019 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see http://www.unicode.org/reports/tr44/ + +# ================================================ + +# Property: Grapheme_Cluster_Break + +# All code points not explicitly listed for Grapheme_Cluster_Break +# have the value Other (XX). + +# @missing: 0000..10FFFF; Other + +# ================================================ + +0600..0605 ; Prepend # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE +06DD ; Prepend # Cf ARABIC END OF AYAH +070F ; Prepend # Cf SYRIAC ABBREVIATION MARK +08E2 ; Prepend # Cf ARABIC DISPUTED END OF AYAH +0D4E ; Prepend # Lo MALAYALAM LETTER DOT REPH +110BD ; Prepend # Cf KAITHI NUMBER SIGN +110CD ; Prepend # Cf KAITHI NUMBER SIGN ABOVE +111C2..111C3 ; Prepend # Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA +11A3A ; Prepend # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A84..11A89 ; Prepend # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA +11D46 ; Prepend # Lo MASARAM GONDI REPHA + +# Total code points: 22 + +# ================================================ + +000D ; CR # Cc + +# Total code points: 1 + +# ================================================ + +000A ; LF # Cc + +# Total code points: 1 + +# ================================================ + +0000..0009 ; Control # Cc [10] .. +000B..000C ; Control # Cc [2] .. +000E..001F ; Control # Cc [18] .. +007F..009F ; Control # Cc [33] .. +00AD ; Control # Cf SOFT HYPHEN +061C ; Control # Cf ARABIC LETTER MARK +180E ; Control # Cf MONGOLIAN VOWEL SEPARATOR +200B ; Control # Cf ZERO WIDTH SPACE +200E..200F ; Control # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK +2028 ; Control # Zl LINE SEPARATOR +2029 ; Control # Zp PARAGRAPH SEPARATOR +202A..202E ; Control # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE +2060..2064 ; Control # Cf [5] WORD JOINER..INVISIBLE PLUS +2065 ; Control # Cn +2066..206F ; Control # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES +FEFF ; Control # Cf ZERO WIDTH NO-BREAK SPACE +FFF0..FFF8 ; Control # Cn [9] .. +FFF9..FFFB ; Control # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR +13430..13438 ; Control # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT +1BCA0..1BCA3 ; Control # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1D173..1D17A ; Control # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +E0000 ; Control # Cn +E0001 ; Control # Cf LANGUAGE TAG +E0002..E001F ; Control # Cn [30] .. +E0080..E00FF ; Control # Cn [128] .. +E01F0..E0FFF ; Control # Cn [3600] .. + +# Total code points: 3886 + +# ================================================ + +0300..036F ; Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0483..0487 ; Extend # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +0488..0489 ; Extend # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +0591..05BD ; Extend # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; Extend # Mn HEBREW POINT RAFE +05C1..05C2 ; Extend # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; Extend # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; Extend # Mn HEBREW POINT QAMATS QATAN +0610..061A ; Extend # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +064B..065F ; Extend # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0670 ; Extend # Mn ARABIC LETTER SUPERSCRIPT ALEF +06D6..06DC ; Extend # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DF..06E4 ; Extend # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E7..06E8 ; Extend # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; Extend # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +0711 ; Extend # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0730..074A ; Extend # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +07A6..07B0 ; Extend # Mn [11] THAANA ABAFILI..THAANA SUKUN +07EB..07F3 ; Extend # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07FD ; Extend # Mn NKO DANTAYALAN +0816..0819 ; Extend # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081B..0823 ; Extend # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +08D3..08E1 ; Extend # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA +093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE +093C ; Extend # Mn DEVANAGARI SIGN NUKTA +0941..0948 ; Extend # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +094D ; Extend # Mn DEVANAGARI SIGN VIRAMA +0951..0957 ; Extend # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0962..0963 ; Extend # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0981 ; Extend # Mn BENGALI SIGN CANDRABINDU +09BC ; Extend # Mn BENGALI SIGN NUKTA +09BE ; Extend # Mc BENGALI VOWEL SIGN AA +09C1..09C4 ; Extend # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09CD ; Extend # Mn BENGALI SIGN VIRAMA +09D7 ; Extend # Mc BENGALI AU LENGTH MARK +09E2..09E3 ; Extend # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09FE ; Extend # Mn BENGALI SANDHI MARK +0A01..0A02 ; Extend # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A3C ; Extend # Mn GURMUKHI SIGN NUKTA +0A41..0A42 ; Extend # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; Extend # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; Extend # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; Extend # Mn GURMUKHI SIGN UDAAT +0A70..0A71 ; Extend # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A75 ; Extend # Mn GURMUKHI SIGN YAKASH +0A81..0A82 ; Extend # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0ABC ; Extend # Mn GUJARATI SIGN NUKTA +0AC1..0AC5 ; Extend # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; Extend # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0ACD ; Extend # Mn GUJARATI SIGN VIRAMA +0AE2..0AE3 ; Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AFA..0AFF ; Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; Extend # Mn ORIYA SIGN CANDRABINDU +0B3C ; Extend # Mn ORIYA SIGN NUKTA +0B3E ; Extend # Mc ORIYA VOWEL SIGN AA +0B3F ; Extend # Mn ORIYA VOWEL SIGN I +0B41..0B44 ; Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B4D ; Extend # Mn ORIYA SIGN VIRAMA +0B56 ; Extend # Mn ORIYA AI LENGTH MARK +0B57 ; Extend # Mc ORIYA AU LENGTH MARK +0B62..0B63 ; Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B82 ; Extend # Mn TAMIL SIGN ANUSVARA +0BBE ; Extend # Mc TAMIL VOWEL SIGN AA +0BC0 ; Extend # Mn TAMIL VOWEL SIGN II +0BCD ; Extend # Mn TAMIL SIGN VIRAMA +0BD7 ; Extend # Mc TAMIL AU LENGTH MARK +0C00 ; Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C04 ; Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3E..0C40 ; Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C46..0C48 ; Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; Extend # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; Extend # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C62..0C63 ; Extend # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C81 ; Extend # Mn KANNADA SIGN CANDRABINDU +0CBC ; Extend # Mn KANNADA SIGN NUKTA +0CBF ; Extend # Mn KANNADA VOWEL SIGN I +0CC2 ; Extend # Mc KANNADA VOWEL SIGN UU +0CC6 ; Extend # Mn KANNADA VOWEL SIGN E +0CCC..0CCD ; Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CD5..0CD6 ; Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CE2..0CE3 ; Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0D00..0D01 ; Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D3B..0D3C ; Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D3E ; Extend # Mc MALAYALAM VOWEL SIGN AA +0D41..0D44 ; Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D4D ; Extend # Mn MALAYALAM SIGN VIRAMA +0D57 ; Extend # Mc MALAYALAM AU LENGTH MARK +0D62..0D63 ; Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0DCA ; Extend # Mn SINHALA SIGN AL-LAKUNA +0DCF ; Extend # Mc SINHALA VOWEL SIGN AELA-PILLA +0DD2..0DD4 ; Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; Extend # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DDF ; Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA +0E31 ; Extend # Mn THAI CHARACTER MAI HAN-AKAT +0E34..0E3A ; Extend # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E47..0E4E ; Extend # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0EB1 ; Extend # Mn LAO VOWEL SIGN MAI KAN +0EB4..0EBC ; Extend # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EC8..0ECD ; Extend # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA +0F18..0F19 ; Extend # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F35 ; Extend # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; Extend # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; Extend # Mn TIBETAN MARK TSA -PHRU +0F71..0F7E ; Extend # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F80..0F84 ; Extend # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F86..0F87 ; Extend # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F8D..0F97 ; Extend # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; Extend # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FC6 ; Extend # Mn TIBETAN SYMBOL PADMA GDAN +102D..1030 ; Extend # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1032..1037 ; Extend # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +1039..103A ; Extend # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103D..103E ; Extend # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +1058..1059 ; Extend # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105E..1060 ; Extend # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1071..1074 ; Extend # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1082 ; Extend # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1085..1086 ; Extend # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +108D ; Extend # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +109D ; Extend # Mn MYANMAR VOWEL SIGN AITON AI +135D..135F ; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1712..1714 ; Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1732..1734 ; Extend # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1752..1753 ; Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1772..1773 ; Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +17B4..17B5 ; Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B7..17BD ; Extend # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17C6 ; Extend # Mn KHMER SIGN NIKAHIT +17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17DD ; Extend # Mn KHMER SIGN ATTHACAN +180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +1885..1886 ; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA +1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1927..1928 ; Extend # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1932 ; Extend # Mn LIMBU SMALL LETTER ANUSVARA +1939..193B ; Extend # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; Extend # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A1B ; Extend # Mn BUGINESE VOWEL SIGN AE +1A56 ; Extend # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A58..1A5E ; Extend # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A60 ; Extend # Mn TAI THAM SIGN SAKOT +1A62 ; Extend # Mn TAI THAM VOWEL SIGN MAI SAT +1A65..1A6C ; Extend # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A73..1A7C ; Extend # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY +1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B34 ; Extend # Mn BALINESE SIGN REREKAN +1B35 ; Extend # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; Extend # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3C ; Extend # Mn BALINESE VOWEL SIGN LA LENGA +1B42 ; Extend # Mn BALINESE VOWEL SIGN PEPET +1B6B..1B73 ; Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B80..1B81 ; Extend # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1BA2..1BA5 ; Extend # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA8..1BA9 ; Extend # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAB..1BAD ; Extend # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BE6 ; Extend # Mn BATAK SIGN TOMPI +1BE8..1BE9 ; Extend # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BED ; Extend # Mn BATAK VOWEL SIGN KARO O +1BEF..1BF1 ; Extend # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1C2C..1C33 ; Extend # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C36..1C37 ; Extend # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1CD0..1CD2 ; Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; Extend # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE2..1CE8 ; Extend # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CED ; Extend # Mn VEDIC SIGN TIRYAK +1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE +1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1DC0..1DF9 ; Extend # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW +1DFB..1DFF ; Extend # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +200C ; Extend # Cf ZERO WIDTH NON-JOINER +20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH +20E1 ; Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E2..20E4 ; Extend # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +20E5..20F0 ; Extend # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2CEF..2CF1 ; Extend # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2D7F ; Extend # Mn TIFINAGH CONSONANT JOINER +2DE0..2DFF ; Extend # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +302A..302D ; Extend # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +302E..302F ; Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +3099..309A ; Extend # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A66F ; Extend # Mn COMBINING CYRILLIC VZMET +A670..A672 ; Extend # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN +A674..A67D ; Extend # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A69E..A69F ; Extend # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6F0..A6F1 ; Extend # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A802 ; Extend # Mn SYLOTI NAGRI SIGN DVISVARA +A806 ; Extend # Mn SYLOTI NAGRI SIGN HASANTA +A80B ; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A8C4..A8C5 ; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8E0..A8F1 ; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8FF ; Extend # Mn DEVANAGARI VOWEL SIGN AY +A926..A92D ; Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A947..A951 ; Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A980..A982 ; Extend # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A9B3 ; Extend # Mn JAVANESE SIGN CECAK TELU +A9B6..A9B9 ; Extend # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BC..A9BD ; Extend # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9E5 ; Extend # Mn MYANMAR SIGN SHAN SAW +AA29..AA2E ; Extend # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA31..AA32 ; Extend # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA35..AA36 ; Extend # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA43 ; Extend # Mn CHAM CONSONANT SIGN FINAL NG +AA4C ; Extend # Mn CHAM CONSONANT SIGN FINAL M +AA7C ; Extend # Mn MYANMAR SIGN TAI LAING TONE-2 +AAB0 ; Extend # Mn TAI VIET MAI KANG +AAB2..AAB4 ; Extend # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB7..AAB8 ; Extend # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AABE..AABF ; Extend # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC1 ; Extend # Mn TAI VIET TONE MAI THO +AAEC..AAED ; Extend # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAF6 ; Extend # Mn MEETEI MAYEK VIRAMA +ABE5 ; Extend # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE8 ; Extend # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABED ; Extend # Mn MEETEI MAYEK APUN IYEK +FB1E ; Extend # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FE00..FE0F ; Extend # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE20..FE2F ; Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +101FD ; Extend # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +102E0 ; Extend # Mn COPTIC EPACT THOUSANDS MARK +10376..1037A ; Extend # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10A01..10A03 ; Extend # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; Extend # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; Extend # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A38..10A3A ; Extend # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; Extend # Mn KHAROSHTHI VIRAMA +10AE5..10AE6 ; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +11001 ; Extend # Mn BRAHMI SIGN ANUSVARA +11038..11046 ; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +1107F..11081 ; Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA +110B3..110B6 ; Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B9..110BA ; Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +11100..11102 ; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11127..1112B ; Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112D..11134 ; Extend # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA +11173 ; Extend # Mn MAHAJANI SIGN NUKTA +11180..11181 ; Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +111B6..111BE ; Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111C9..111CC ; Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +1122F..11231 ; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11234 ; Extend # Mn KHOJKI SIGN ANUSVARA +11236..11237 ; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +1123E ; Extend # Mn KHOJKI SIGN SUKUN +112DF ; Extend # Mn KHUDAWADI SIGN ANUSVARA +112E3..112EA ; Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +11300..11301 ; Extend # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +1133B..1133C ; Extend # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +1133E ; Extend # Mc GRANTHA VOWEL SIGN AA +11340 ; Extend # Mn GRANTHA VOWEL SIGN II +11357 ; Extend # Mc GRANTHA AU LENGTH MARK +11366..1136C ; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +11438..1143F ; Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11442..11444 ; Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11446 ; Extend # Mn NEWA SIGN NUKTA +1145E ; Extend # Mn NEWA SANDHI MARK +114B0 ; Extend # Mc TIRHUTA VOWEL SIGN AA +114B3..114B8 ; Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114BA ; Extend # Mn TIRHUTA VOWEL SIGN SHORT E +114BD ; Extend # Mc TIRHUTA VOWEL SIGN SHORT O +114BF..114C0 ; Extend # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C2..114C3 ; Extend # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +115AF ; Extend # Mc SIDDHAM VOWEL SIGN AA +115B2..115B5 ; Extend # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115BC..115BD ; Extend # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BF..115C0 ; Extend # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115DC..115DD ; Extend # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11633..1163A ; Extend # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163D ; Extend # Mn MODI SIGN ANUSVARA +1163F..11640 ; Extend # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +116AB ; Extend # Mn TAKRI SIGN ANUSVARA +116AD ; Extend # Mn TAKRI VOWEL SIGN AA +116B0..116B5 ; Extend # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B7 ; Extend # Mn TAKRI SIGN NUKTA +1171D..1171F ; Extend # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +11722..11725 ; Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11727..1172B ; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +1182F..11837 ; Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11839..1183A ; Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +119D4..119D7 ; Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119E0 ; Extend # Mn NANDINAGARI SIGN VIRAMA +11A01..11A0A ; Extend # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A33..11A38 ; Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A3B..11A3E ; Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A47 ; Extend # Mn ZANABAZAR SQUARE SUBJOINER +11A51..11A56 ; Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A59..11A5B ; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A8A..11A96 ; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A98..11A99 ; Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11C30..11C36 ; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3F ; Extend # Mn BHAIKSUKI SIGN VIRAMA +11C92..11CA7 ; Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CAA..11CB0 ; Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB2..11CB3 ; Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB5..11CB6 ; Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D31..11D36 ; Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; Extend # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D47 ; Extend # Mn MASARAM GONDI RA-KARA +11D90..11D91 ; Extend # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D95 ; Extend # Mn GUNJALA GONDI SIGN ANUSVARA +11D97 ; Extend # Mn GUNJALA GONDI VIRAMA +11EF3..11EF4 ; Extend # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +16AF0..16AF4 ; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16B30..16B36 ; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16F4F ; Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F8F..16F92 ; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1D165 ; Extend # Mc MUSICAL SYMBOL COMBINING STEM +1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D16E..1D172 ; Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 +1D17B..1D182 ; Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; Extend # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1DA00..1DA36 ; Extend # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA3B..1DA6C ; Extend # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA75 ; Extend # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA84 ; Extend # Mn SIGNWRITING LOCATION HEAD NECK +1DA9B..1DA9F ; Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1E000..1E006 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E130..1E136 ; Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2EC..1E2EF ; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +1F3FB..1F3FF ; Extend # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 +E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG +E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 1970 + +# ================================================ + +1F1E6..1F1FF ; Regional_Indicator # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z + +# Total code points: 26 + +# ================================================ + +0903 ; SpacingMark # Mc DEVANAGARI SIGN VISARGA +093B ; SpacingMark # Mc DEVANAGARI VOWEL SIGN OOE +093E..0940 ; SpacingMark # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0949..094C ; SpacingMark # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +094E..094F ; SpacingMark # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW +0982..0983 ; SpacingMark # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +09BF..09C0 ; SpacingMark # Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II +09C7..09C8 ; SpacingMark # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; SpacingMark # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +0A03 ; SpacingMark # Mc GURMUKHI SIGN VISARGA +0A3E..0A40 ; SpacingMark # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A83 ; SpacingMark # Mc GUJARATI SIGN VISARGA +0ABE..0AC0 ; SpacingMark # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC9 ; SpacingMark # Mc GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; SpacingMark # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0B02..0B03 ; SpacingMark # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B40 ; SpacingMark # Mc ORIYA VOWEL SIGN II +0B47..0B48 ; SpacingMark # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; SpacingMark # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0BBF ; SpacingMark # Mc TAMIL VOWEL SIGN I +0BC1..0BC2 ; SpacingMark # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; SpacingMark # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; SpacingMark # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0C01..0C03 ; SpacingMark # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C41..0C44 ; SpacingMark # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C82..0C83 ; SpacingMark # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0CBE ; SpacingMark # Mc KANNADA VOWEL SIGN AA +0CC0..0CC1 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U +0CC3..0CC4 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR +0CC7..0CC8 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; SpacingMark # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0D02..0D03 ; SpacingMark # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D3F..0D40 ; SpacingMark # Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II +0D46..0D48 ; SpacingMark # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; SpacingMark # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D82..0D83 ; SpacingMark # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0DD0..0DD1 ; SpacingMark # Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD8..0DDE ; SpacingMark # Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA +0DF2..0DF3 ; SpacingMark # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0E33 ; SpacingMark # Lo THAI CHARACTER SARA AM +0EB3 ; SpacingMark # Lo LAO VOWEL SIGN AM +0F3E..0F3F ; SpacingMark # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES +0F7F ; SpacingMark # Mc TIBETAN SIGN RNAM BCAD +1031 ; SpacingMark # Mc MYANMAR VOWEL SIGN E +103B..103C ; SpacingMark # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA +1056..1057 ; SpacingMark # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +1084 ; SpacingMark # Mc MYANMAR VOWEL SIGN SHAN E +17B6 ; SpacingMark # Mc KHMER VOWEL SIGN AA +17BE..17C5 ; SpacingMark # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C7..17C8 ; SpacingMark # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +1923..1926 ; SpacingMark # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1929..192B ; SpacingMark # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1930..1931 ; SpacingMark # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1933..1938 ; SpacingMark # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1A19..1A1A ; SpacingMark # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O +1A55 ; SpacingMark # Mc TAI THAM CONSONANT SIGN MEDIAL RA +1A57 ; SpacingMark # Mc TAI THAM CONSONANT SIGN LA TANG LAI +1A6D..1A72 ; SpacingMark # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI +1B04 ; SpacingMark # Mc BALINESE SIGN BISAH +1B3B ; SpacingMark # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3D..1B41 ; SpacingMark # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B43..1B44 ; SpacingMark # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B82 ; SpacingMark # Mc SUNDANESE SIGN PANGWISAD +1BA1 ; SpacingMark # Mc SUNDANESE CONSONANT SIGN PAMINGKAL +1BA6..1BA7 ; SpacingMark # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG +1BAA ; SpacingMark # Mc SUNDANESE SIGN PAMAAEH +1BE7 ; SpacingMark # Mc BATAK VOWEL SIGN E +1BEA..1BEC ; SpacingMark # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O +1BEE ; SpacingMark # Mc BATAK VOWEL SIGN U +1BF2..1BF3 ; SpacingMark # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +1C24..1C2B ; SpacingMark # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU +1C34..1C35 ; SpacingMark # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG +1CE1 ; SpacingMark # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA +1CF7 ; SpacingMark # Mc VEDIC SIGN ATIKRAMA +A823..A824 ; SpacingMark # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A827 ; SpacingMark # Mc SYLOTI NAGRI VOWEL SIGN OO +A880..A881 ; SpacingMark # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA +A8B4..A8C3 ; SpacingMark # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU +A952..A953 ; SpacingMark # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA +A983 ; SpacingMark # Mc JAVANESE SIGN WIGNYAN +A9B4..A9B5 ; SpacingMark # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG +A9BA..A9BB ; SpacingMark # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE +A9BE..A9C0 ; SpacingMark # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON +AA2F..AA30 ; SpacingMark # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI +AA33..AA34 ; SpacingMark # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA +AA4D ; SpacingMark # Mc CHAM CONSONANT SIGN FINAL H +AAEB ; SpacingMark # Mc MEETEI MAYEK VOWEL SIGN II +AAEE..AAEF ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU +AAF5 ; SpacingMark # Mc MEETEI MAYEK VOWEL SIGN VISARGA +ABE3..ABE4 ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP +ABE6..ABE7 ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP +ABE9..ABEA ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG +ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK +11000 ; SpacingMark # Mc BRAHMI SIGN CANDRABINDU +11002 ; SpacingMark # Mc BRAHMI SIGN VISARGA +11082 ; SpacingMark # Mc KAITHI SIGN VISARGA +110B0..110B2 ; SpacingMark # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II +110B7..110B8 ; SpacingMark # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +1112C ; SpacingMark # Mc CHAKMA VOWEL SIGN E +11145..11146 ; SpacingMark # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI +11182 ; SpacingMark # Mc SHARADA SIGN VISARGA +111B3..111B5 ; SpacingMark # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II +111BF..111C0 ; SpacingMark # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA +1122C..1122E ; SpacingMark # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II +11232..11233 ; SpacingMark # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU +11235 ; SpacingMark # Mc KHOJKI SIGN VIRAMA +112E0..112E2 ; SpacingMark # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II +11302..11303 ; SpacingMark # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA +1133F ; SpacingMark # Mc GRANTHA VOWEL SIGN I +11341..11344 ; SpacingMark # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR +11347..11348 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI +1134B..1134D ; SpacingMark # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA +11362..11363 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11435..11437 ; SpacingMark # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II +11440..11441 ; SpacingMark # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU +11445 ; SpacingMark # Mc NEWA SIGN VISARGA +114B1..114B2 ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II +114B9 ; SpacingMark # Mc TIRHUTA VOWEL SIGN E +114BB..114BC ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O +114BE ; SpacingMark # Mc TIRHUTA VOWEL SIGN AU +114C1 ; SpacingMark # Mc TIRHUTA SIGN VISARGA +115B0..115B1 ; SpacingMark # Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II +115B8..115BB ; SpacingMark # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU +115BE ; SpacingMark # Mc SIDDHAM SIGN VISARGA +11630..11632 ; SpacingMark # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II +1163B..1163C ; SpacingMark # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU +1163E ; SpacingMark # Mc MODI SIGN VISARGA +116AC ; SpacingMark # Mc TAKRI SIGN VISARGA +116AE..116AF ; SpacingMark # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II +116B6 ; SpacingMark # Mc TAKRI SIGN VIRAMA +11720..11721 ; SpacingMark # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA +11726 ; SpacingMark # Mc AHOM VOWEL SIGN E +1182C..1182E ; SpacingMark # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II +11838 ; SpacingMark # Mc DOGRA SIGN VISARGA +119D1..119D3 ; SpacingMark # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II +119DC..119DF ; SpacingMark # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA +119E4 ; SpacingMark # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E +11A39 ; SpacingMark # Mc ZANABAZAR SQUARE SIGN VISARGA +11A57..11A58 ; SpacingMark # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU +11A97 ; SpacingMark # Mc SOYOMBO SIGN VISARGA +11C2F ; SpacingMark # Mc BHAIKSUKI VOWEL SIGN AA +11C3E ; SpacingMark # Mc BHAIKSUKI SIGN VISARGA +11CA9 ; SpacingMark # Mc MARCHEN SUBJOINED LETTER YA +11CB1 ; SpacingMark # Mc MARCHEN VOWEL SIGN I +11CB4 ; SpacingMark # Mc MARCHEN VOWEL SIGN O +11D8A..11D8E ; SpacingMark # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU +11D93..11D94 ; SpacingMark # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU +11D96 ; SpacingMark # Mc GUNJALA GONDI SIGN VISARGA +11EF5..11EF6 ; SpacingMark # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O +16F51..16F87 ; SpacingMark # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI +1D166 ; SpacingMark # Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D16D ; SpacingMark # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT + +# Total code points: 375 + +# ================================================ + +1100..115F ; L # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER +A960..A97C ; L # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH + +# Total code points: 125 + +# ================================================ + +1160..11A7 ; V # Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE +D7B0..D7C6 ; V # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E + +# Total code points: 95 + +# ================================================ + +11A8..11FF ; T # Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN +D7CB..D7FB ; T # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH + +# Total code points: 137 + +# ================================================ + +AC00 ; LV # Lo HANGUL SYLLABLE GA +AC1C ; LV # Lo HANGUL SYLLABLE GAE +AC38 ; LV # Lo HANGUL SYLLABLE GYA +AC54 ; LV # Lo HANGUL SYLLABLE GYAE +AC70 ; LV # Lo HANGUL SYLLABLE GEO +AC8C ; LV # Lo HANGUL SYLLABLE GE +ACA8 ; LV # Lo HANGUL SYLLABLE GYEO +ACC4 ; LV # Lo HANGUL SYLLABLE GYE +ACE0 ; LV # Lo HANGUL SYLLABLE GO +ACFC ; LV # Lo HANGUL SYLLABLE GWA +AD18 ; LV # Lo HANGUL SYLLABLE GWAE +AD34 ; LV # Lo HANGUL SYLLABLE GOE +AD50 ; LV # Lo HANGUL SYLLABLE GYO +AD6C ; LV # Lo HANGUL SYLLABLE GU +AD88 ; LV # Lo HANGUL SYLLABLE GWEO +ADA4 ; LV # Lo HANGUL SYLLABLE GWE +ADC0 ; LV # Lo HANGUL SYLLABLE GWI +ADDC ; LV # Lo HANGUL SYLLABLE GYU +ADF8 ; LV # Lo HANGUL SYLLABLE GEU +AE14 ; LV # Lo HANGUL SYLLABLE GYI +AE30 ; LV # Lo HANGUL SYLLABLE GI +AE4C ; LV # Lo HANGUL SYLLABLE GGA +AE68 ; LV # Lo HANGUL SYLLABLE GGAE +AE84 ; LV # Lo HANGUL SYLLABLE GGYA +AEA0 ; LV # Lo HANGUL SYLLABLE GGYAE +AEBC ; LV # Lo HANGUL SYLLABLE GGEO +AED8 ; LV # Lo HANGUL SYLLABLE GGE +AEF4 ; LV # Lo HANGUL SYLLABLE GGYEO +AF10 ; LV # Lo HANGUL SYLLABLE GGYE +AF2C ; LV # Lo HANGUL SYLLABLE GGO +AF48 ; LV # Lo HANGUL SYLLABLE GGWA +AF64 ; LV # Lo HANGUL SYLLABLE GGWAE +AF80 ; LV # Lo HANGUL SYLLABLE GGOE +AF9C ; LV # Lo HANGUL SYLLABLE GGYO +AFB8 ; LV # Lo HANGUL SYLLABLE GGU +AFD4 ; LV # Lo HANGUL SYLLABLE GGWEO +AFF0 ; LV # Lo HANGUL SYLLABLE GGWE +B00C ; LV # Lo HANGUL SYLLABLE GGWI +B028 ; LV # Lo HANGUL SYLLABLE GGYU +B044 ; LV # Lo HANGUL SYLLABLE GGEU +B060 ; LV # Lo HANGUL SYLLABLE GGYI +B07C ; LV # Lo HANGUL SYLLABLE GGI +B098 ; LV # Lo HANGUL SYLLABLE NA +B0B4 ; LV # Lo HANGUL SYLLABLE NAE +B0D0 ; LV # Lo HANGUL SYLLABLE NYA +B0EC ; LV # Lo HANGUL SYLLABLE NYAE +B108 ; LV # Lo HANGUL SYLLABLE NEO +B124 ; LV # Lo HANGUL SYLLABLE NE +B140 ; LV # Lo HANGUL SYLLABLE NYEO +B15C ; LV # Lo HANGUL SYLLABLE NYE +B178 ; LV # Lo HANGUL SYLLABLE NO +B194 ; LV # Lo HANGUL SYLLABLE NWA +B1B0 ; LV # Lo HANGUL SYLLABLE NWAE +B1CC ; LV # Lo HANGUL SYLLABLE NOE +B1E8 ; LV # Lo HANGUL SYLLABLE NYO +B204 ; LV # Lo HANGUL SYLLABLE NU +B220 ; LV # Lo HANGUL SYLLABLE NWEO +B23C ; LV # Lo HANGUL SYLLABLE NWE +B258 ; LV # Lo HANGUL SYLLABLE NWI +B274 ; LV # Lo HANGUL SYLLABLE NYU +B290 ; LV # Lo HANGUL SYLLABLE NEU +B2AC ; LV # Lo HANGUL SYLLABLE NYI +B2C8 ; LV # Lo HANGUL SYLLABLE NI +B2E4 ; LV # Lo HANGUL SYLLABLE DA +B300 ; LV # Lo HANGUL SYLLABLE DAE +B31C ; LV # Lo HANGUL SYLLABLE DYA +B338 ; LV # Lo HANGUL SYLLABLE DYAE +B354 ; LV # Lo HANGUL SYLLABLE DEO +B370 ; LV # Lo HANGUL SYLLABLE DE +B38C ; LV # Lo HANGUL SYLLABLE DYEO +B3A8 ; LV # Lo HANGUL SYLLABLE DYE +B3C4 ; LV # Lo HANGUL SYLLABLE DO +B3E0 ; LV # Lo HANGUL SYLLABLE DWA +B3FC ; LV # Lo HANGUL SYLLABLE DWAE +B418 ; LV # Lo HANGUL SYLLABLE DOE +B434 ; LV # Lo HANGUL SYLLABLE DYO +B450 ; LV # Lo HANGUL SYLLABLE DU +B46C ; LV # Lo HANGUL SYLLABLE DWEO +B488 ; LV # Lo HANGUL SYLLABLE DWE +B4A4 ; LV # Lo HANGUL SYLLABLE DWI +B4C0 ; LV # Lo HANGUL SYLLABLE DYU +B4DC ; LV # Lo HANGUL SYLLABLE DEU +B4F8 ; LV # Lo HANGUL SYLLABLE DYI +B514 ; LV # Lo HANGUL SYLLABLE DI +B530 ; LV # Lo HANGUL SYLLABLE DDA +B54C ; LV # Lo HANGUL SYLLABLE DDAE +B568 ; LV # Lo HANGUL SYLLABLE DDYA +B584 ; LV # Lo HANGUL SYLLABLE DDYAE +B5A0 ; LV # Lo HANGUL SYLLABLE DDEO +B5BC ; LV # Lo HANGUL SYLLABLE DDE +B5D8 ; LV # Lo HANGUL SYLLABLE DDYEO +B5F4 ; LV # Lo HANGUL SYLLABLE DDYE +B610 ; LV # Lo HANGUL SYLLABLE DDO +B62C ; LV # Lo HANGUL SYLLABLE DDWA +B648 ; LV # Lo HANGUL SYLLABLE DDWAE +B664 ; LV # Lo HANGUL SYLLABLE DDOE +B680 ; LV # Lo HANGUL SYLLABLE DDYO +B69C ; LV # Lo HANGUL SYLLABLE DDU +B6B8 ; LV # Lo HANGUL SYLLABLE DDWEO +B6D4 ; LV # Lo HANGUL SYLLABLE DDWE +B6F0 ; LV # Lo HANGUL SYLLABLE DDWI +B70C ; LV # Lo HANGUL SYLLABLE DDYU +B728 ; LV # Lo HANGUL SYLLABLE DDEU +B744 ; LV # Lo HANGUL SYLLABLE DDYI +B760 ; LV # Lo HANGUL SYLLABLE DDI +B77C ; LV # Lo HANGUL SYLLABLE RA +B798 ; LV # Lo HANGUL SYLLABLE RAE +B7B4 ; LV # Lo HANGUL SYLLABLE RYA +B7D0 ; LV # Lo HANGUL SYLLABLE RYAE +B7EC ; LV # Lo HANGUL SYLLABLE REO +B808 ; LV # Lo HANGUL SYLLABLE RE +B824 ; LV # Lo HANGUL SYLLABLE RYEO +B840 ; LV # Lo HANGUL SYLLABLE RYE +B85C ; LV # Lo HANGUL SYLLABLE RO +B878 ; LV # Lo HANGUL SYLLABLE RWA +B894 ; LV # Lo HANGUL SYLLABLE RWAE +B8B0 ; LV # Lo HANGUL SYLLABLE ROE +B8CC ; LV # Lo HANGUL SYLLABLE RYO +B8E8 ; LV # Lo HANGUL SYLLABLE RU +B904 ; LV # Lo HANGUL SYLLABLE RWEO +B920 ; LV # Lo HANGUL SYLLABLE RWE +B93C ; LV # Lo HANGUL SYLLABLE RWI +B958 ; LV # Lo HANGUL SYLLABLE RYU +B974 ; LV # Lo HANGUL SYLLABLE REU +B990 ; LV # Lo HANGUL SYLLABLE RYI +B9AC ; LV # Lo HANGUL SYLLABLE RI +B9C8 ; LV # Lo HANGUL SYLLABLE MA +B9E4 ; LV # Lo HANGUL SYLLABLE MAE +BA00 ; LV # Lo HANGUL SYLLABLE MYA +BA1C ; LV # Lo HANGUL SYLLABLE MYAE +BA38 ; LV # Lo HANGUL SYLLABLE MEO +BA54 ; LV # Lo HANGUL SYLLABLE ME +BA70 ; LV # Lo HANGUL SYLLABLE MYEO +BA8C ; LV # Lo HANGUL SYLLABLE MYE +BAA8 ; LV # Lo HANGUL SYLLABLE MO +BAC4 ; LV # Lo HANGUL SYLLABLE MWA +BAE0 ; LV # Lo HANGUL SYLLABLE MWAE +BAFC ; LV # Lo HANGUL SYLLABLE MOE +BB18 ; LV # Lo HANGUL SYLLABLE MYO +BB34 ; LV # Lo HANGUL SYLLABLE MU +BB50 ; LV # Lo HANGUL SYLLABLE MWEO +BB6C ; LV # Lo HANGUL SYLLABLE MWE +BB88 ; LV # Lo HANGUL SYLLABLE MWI +BBA4 ; LV # Lo HANGUL SYLLABLE MYU +BBC0 ; LV # Lo HANGUL SYLLABLE MEU +BBDC ; LV # Lo HANGUL SYLLABLE MYI +BBF8 ; LV # Lo HANGUL SYLLABLE MI +BC14 ; LV # Lo HANGUL SYLLABLE BA +BC30 ; LV # Lo HANGUL SYLLABLE BAE +BC4C ; LV # Lo HANGUL SYLLABLE BYA +BC68 ; LV # Lo HANGUL SYLLABLE BYAE +BC84 ; LV # Lo HANGUL SYLLABLE BEO +BCA0 ; LV # Lo HANGUL SYLLABLE BE +BCBC ; LV # Lo HANGUL SYLLABLE BYEO +BCD8 ; LV # Lo HANGUL SYLLABLE BYE +BCF4 ; LV # Lo HANGUL SYLLABLE BO +BD10 ; LV # Lo HANGUL SYLLABLE BWA +BD2C ; LV # Lo HANGUL SYLLABLE BWAE +BD48 ; LV # Lo HANGUL SYLLABLE BOE +BD64 ; LV # Lo HANGUL SYLLABLE BYO +BD80 ; LV # Lo HANGUL SYLLABLE BU +BD9C ; LV # Lo HANGUL SYLLABLE BWEO +BDB8 ; LV # Lo HANGUL SYLLABLE BWE +BDD4 ; LV # Lo HANGUL SYLLABLE BWI +BDF0 ; LV # Lo HANGUL SYLLABLE BYU +BE0C ; LV # Lo HANGUL SYLLABLE BEU +BE28 ; LV # Lo HANGUL SYLLABLE BYI +BE44 ; LV # Lo HANGUL SYLLABLE BI +BE60 ; LV # Lo HANGUL SYLLABLE BBA +BE7C ; LV # Lo HANGUL SYLLABLE BBAE +BE98 ; LV # Lo HANGUL SYLLABLE BBYA +BEB4 ; LV # Lo HANGUL SYLLABLE BBYAE +BED0 ; LV # Lo HANGUL SYLLABLE BBEO +BEEC ; LV # Lo HANGUL SYLLABLE BBE +BF08 ; LV # Lo HANGUL SYLLABLE BBYEO +BF24 ; LV # Lo HANGUL SYLLABLE BBYE +BF40 ; LV # Lo HANGUL SYLLABLE BBO +BF5C ; LV # Lo HANGUL SYLLABLE BBWA +BF78 ; LV # Lo HANGUL SYLLABLE BBWAE +BF94 ; LV # Lo HANGUL SYLLABLE BBOE +BFB0 ; LV # Lo HANGUL SYLLABLE BBYO +BFCC ; LV # Lo HANGUL SYLLABLE BBU +BFE8 ; LV # Lo HANGUL SYLLABLE BBWEO +C004 ; LV # Lo HANGUL SYLLABLE BBWE +C020 ; LV # Lo HANGUL SYLLABLE BBWI +C03C ; LV # Lo HANGUL SYLLABLE BBYU +C058 ; LV # Lo HANGUL SYLLABLE BBEU +C074 ; LV # Lo HANGUL SYLLABLE BBYI +C090 ; LV # Lo HANGUL SYLLABLE BBI +C0AC ; LV # Lo HANGUL SYLLABLE SA +C0C8 ; LV # Lo HANGUL SYLLABLE SAE +C0E4 ; LV # Lo HANGUL SYLLABLE SYA +C100 ; LV # Lo HANGUL SYLLABLE SYAE +C11C ; LV # Lo HANGUL SYLLABLE SEO +C138 ; LV # Lo HANGUL SYLLABLE SE +C154 ; LV # Lo HANGUL SYLLABLE SYEO +C170 ; LV # Lo HANGUL SYLLABLE SYE +C18C ; LV # Lo HANGUL SYLLABLE SO +C1A8 ; LV # Lo HANGUL SYLLABLE SWA +C1C4 ; LV # Lo HANGUL SYLLABLE SWAE +C1E0 ; LV # Lo HANGUL SYLLABLE SOE +C1FC ; LV # Lo HANGUL SYLLABLE SYO +C218 ; LV # Lo HANGUL SYLLABLE SU +C234 ; LV # Lo HANGUL SYLLABLE SWEO +C250 ; LV # Lo HANGUL SYLLABLE SWE +C26C ; LV # Lo HANGUL SYLLABLE SWI +C288 ; LV # Lo HANGUL SYLLABLE SYU +C2A4 ; LV # Lo HANGUL SYLLABLE SEU +C2C0 ; LV # Lo HANGUL SYLLABLE SYI +C2DC ; LV # Lo HANGUL SYLLABLE SI +C2F8 ; LV # Lo HANGUL SYLLABLE SSA +C314 ; LV # Lo HANGUL SYLLABLE SSAE +C330 ; LV # Lo HANGUL SYLLABLE SSYA +C34C ; LV # Lo HANGUL SYLLABLE SSYAE +C368 ; LV # Lo HANGUL SYLLABLE SSEO +C384 ; LV # Lo HANGUL SYLLABLE SSE +C3A0 ; LV # Lo HANGUL SYLLABLE SSYEO +C3BC ; LV # Lo HANGUL SYLLABLE SSYE +C3D8 ; LV # Lo HANGUL SYLLABLE SSO +C3F4 ; LV # Lo HANGUL SYLLABLE SSWA +C410 ; LV # Lo HANGUL SYLLABLE SSWAE +C42C ; LV # Lo HANGUL SYLLABLE SSOE +C448 ; LV # Lo HANGUL SYLLABLE SSYO +C464 ; LV # Lo HANGUL SYLLABLE SSU +C480 ; LV # Lo HANGUL SYLLABLE SSWEO +C49C ; LV # Lo HANGUL SYLLABLE SSWE +C4B8 ; LV # Lo HANGUL SYLLABLE SSWI +C4D4 ; LV # Lo HANGUL SYLLABLE SSYU +C4F0 ; LV # Lo HANGUL SYLLABLE SSEU +C50C ; LV # Lo HANGUL SYLLABLE SSYI +C528 ; LV # Lo HANGUL SYLLABLE SSI +C544 ; LV # Lo HANGUL SYLLABLE A +C560 ; LV # Lo HANGUL SYLLABLE AE +C57C ; LV # Lo HANGUL SYLLABLE YA +C598 ; LV # Lo HANGUL SYLLABLE YAE +C5B4 ; LV # Lo HANGUL SYLLABLE EO +C5D0 ; LV # Lo HANGUL SYLLABLE E +C5EC ; LV # Lo HANGUL SYLLABLE YEO +C608 ; LV # Lo HANGUL SYLLABLE YE +C624 ; LV # Lo HANGUL SYLLABLE O +C640 ; LV # Lo HANGUL SYLLABLE WA +C65C ; LV # Lo HANGUL SYLLABLE WAE +C678 ; LV # Lo HANGUL SYLLABLE OE +C694 ; LV # Lo HANGUL SYLLABLE YO +C6B0 ; LV # Lo HANGUL SYLLABLE U +C6CC ; LV # Lo HANGUL SYLLABLE WEO +C6E8 ; LV # Lo HANGUL SYLLABLE WE +C704 ; LV # Lo HANGUL SYLLABLE WI +C720 ; LV # Lo HANGUL SYLLABLE YU +C73C ; LV # Lo HANGUL SYLLABLE EU +C758 ; LV # Lo HANGUL SYLLABLE YI +C774 ; LV # Lo HANGUL SYLLABLE I +C790 ; LV # Lo HANGUL SYLLABLE JA +C7AC ; LV # Lo HANGUL SYLLABLE JAE +C7C8 ; LV # Lo HANGUL SYLLABLE JYA +C7E4 ; LV # Lo HANGUL SYLLABLE JYAE +C800 ; LV # Lo HANGUL SYLLABLE JEO +C81C ; LV # Lo HANGUL SYLLABLE JE +C838 ; LV # Lo HANGUL SYLLABLE JYEO +C854 ; LV # Lo HANGUL SYLLABLE JYE +C870 ; LV # Lo HANGUL SYLLABLE JO +C88C ; LV # Lo HANGUL SYLLABLE JWA +C8A8 ; LV # Lo HANGUL SYLLABLE JWAE +C8C4 ; LV # Lo HANGUL SYLLABLE JOE +C8E0 ; LV # Lo HANGUL SYLLABLE JYO +C8FC ; LV # Lo HANGUL SYLLABLE JU +C918 ; LV # Lo HANGUL SYLLABLE JWEO +C934 ; LV # Lo HANGUL SYLLABLE JWE +C950 ; LV # Lo HANGUL SYLLABLE JWI +C96C ; LV # Lo HANGUL SYLLABLE JYU +C988 ; LV # Lo HANGUL SYLLABLE JEU +C9A4 ; LV # Lo HANGUL SYLLABLE JYI +C9C0 ; LV # Lo HANGUL SYLLABLE JI +C9DC ; LV # Lo HANGUL SYLLABLE JJA +C9F8 ; LV # Lo HANGUL SYLLABLE JJAE +CA14 ; LV # Lo HANGUL SYLLABLE JJYA +CA30 ; LV # Lo HANGUL SYLLABLE JJYAE +CA4C ; LV # Lo HANGUL SYLLABLE JJEO +CA68 ; LV # Lo HANGUL SYLLABLE JJE +CA84 ; LV # Lo HANGUL SYLLABLE JJYEO +CAA0 ; LV # Lo HANGUL SYLLABLE JJYE +CABC ; LV # Lo HANGUL SYLLABLE JJO +CAD8 ; LV # Lo HANGUL SYLLABLE JJWA +CAF4 ; LV # Lo HANGUL SYLLABLE JJWAE +CB10 ; LV # Lo HANGUL SYLLABLE JJOE +CB2C ; LV # Lo HANGUL SYLLABLE JJYO +CB48 ; LV # Lo HANGUL SYLLABLE JJU +CB64 ; LV # Lo HANGUL SYLLABLE JJWEO +CB80 ; LV # Lo HANGUL SYLLABLE JJWE +CB9C ; LV # Lo HANGUL SYLLABLE JJWI +CBB8 ; LV # Lo HANGUL SYLLABLE JJYU +CBD4 ; LV # Lo HANGUL SYLLABLE JJEU +CBF0 ; LV # Lo HANGUL SYLLABLE JJYI +CC0C ; LV # Lo HANGUL SYLLABLE JJI +CC28 ; LV # Lo HANGUL SYLLABLE CA +CC44 ; LV # Lo HANGUL SYLLABLE CAE +CC60 ; LV # Lo HANGUL SYLLABLE CYA +CC7C ; LV # Lo HANGUL SYLLABLE CYAE +CC98 ; LV # Lo HANGUL SYLLABLE CEO +CCB4 ; LV # Lo HANGUL SYLLABLE CE +CCD0 ; LV # Lo HANGUL SYLLABLE CYEO +CCEC ; LV # Lo HANGUL SYLLABLE CYE +CD08 ; LV # Lo HANGUL SYLLABLE CO +CD24 ; LV # Lo HANGUL SYLLABLE CWA +CD40 ; LV # Lo HANGUL SYLLABLE CWAE +CD5C ; LV # Lo HANGUL SYLLABLE COE +CD78 ; LV # Lo HANGUL SYLLABLE CYO +CD94 ; LV # Lo HANGUL SYLLABLE CU +CDB0 ; LV # Lo HANGUL SYLLABLE CWEO +CDCC ; LV # Lo HANGUL SYLLABLE CWE +CDE8 ; LV # Lo HANGUL SYLLABLE CWI +CE04 ; LV # Lo HANGUL SYLLABLE CYU +CE20 ; LV # Lo HANGUL SYLLABLE CEU +CE3C ; LV # Lo HANGUL SYLLABLE CYI +CE58 ; LV # Lo HANGUL SYLLABLE CI +CE74 ; LV # Lo HANGUL SYLLABLE KA +CE90 ; LV # Lo HANGUL SYLLABLE KAE +CEAC ; LV # Lo HANGUL SYLLABLE KYA +CEC8 ; LV # Lo HANGUL SYLLABLE KYAE +CEE4 ; LV # Lo HANGUL SYLLABLE KEO +CF00 ; LV # Lo HANGUL SYLLABLE KE +CF1C ; LV # Lo HANGUL SYLLABLE KYEO +CF38 ; LV # Lo HANGUL SYLLABLE KYE +CF54 ; LV # Lo HANGUL SYLLABLE KO +CF70 ; LV # Lo HANGUL SYLLABLE KWA +CF8C ; LV # Lo HANGUL SYLLABLE KWAE +CFA8 ; LV # Lo HANGUL SYLLABLE KOE +CFC4 ; LV # Lo HANGUL SYLLABLE KYO +CFE0 ; LV # Lo HANGUL SYLLABLE KU +CFFC ; LV # Lo HANGUL SYLLABLE KWEO +D018 ; LV # Lo HANGUL SYLLABLE KWE +D034 ; LV # Lo HANGUL SYLLABLE KWI +D050 ; LV # Lo HANGUL SYLLABLE KYU +D06C ; LV # Lo HANGUL SYLLABLE KEU +D088 ; LV # Lo HANGUL SYLLABLE KYI +D0A4 ; LV # Lo HANGUL SYLLABLE KI +D0C0 ; LV # Lo HANGUL SYLLABLE TA +D0DC ; LV # Lo HANGUL SYLLABLE TAE +D0F8 ; LV # Lo HANGUL SYLLABLE TYA +D114 ; LV # Lo HANGUL SYLLABLE TYAE +D130 ; LV # Lo HANGUL SYLLABLE TEO +D14C ; LV # Lo HANGUL SYLLABLE TE +D168 ; LV # Lo HANGUL SYLLABLE TYEO +D184 ; LV # Lo HANGUL SYLLABLE TYE +D1A0 ; LV # Lo HANGUL SYLLABLE TO +D1BC ; LV # Lo HANGUL SYLLABLE TWA +D1D8 ; LV # Lo HANGUL SYLLABLE TWAE +D1F4 ; LV # Lo HANGUL SYLLABLE TOE +D210 ; LV # Lo HANGUL SYLLABLE TYO +D22C ; LV # Lo HANGUL SYLLABLE TU +D248 ; LV # Lo HANGUL SYLLABLE TWEO +D264 ; LV # Lo HANGUL SYLLABLE TWE +D280 ; LV # Lo HANGUL SYLLABLE TWI +D29C ; LV # Lo HANGUL SYLLABLE TYU +D2B8 ; LV # Lo HANGUL SYLLABLE TEU +D2D4 ; LV # Lo HANGUL SYLLABLE TYI +D2F0 ; LV # Lo HANGUL SYLLABLE TI +D30C ; LV # Lo HANGUL SYLLABLE PA +D328 ; LV # Lo HANGUL SYLLABLE PAE +D344 ; LV # Lo HANGUL SYLLABLE PYA +D360 ; LV # Lo HANGUL SYLLABLE PYAE +D37C ; LV # Lo HANGUL SYLLABLE PEO +D398 ; LV # Lo HANGUL SYLLABLE PE +D3B4 ; LV # Lo HANGUL SYLLABLE PYEO +D3D0 ; LV # Lo HANGUL SYLLABLE PYE +D3EC ; LV # Lo HANGUL SYLLABLE PO +D408 ; LV # Lo HANGUL SYLLABLE PWA +D424 ; LV # Lo HANGUL SYLLABLE PWAE +D440 ; LV # Lo HANGUL SYLLABLE POE +D45C ; LV # Lo HANGUL SYLLABLE PYO +D478 ; LV # Lo HANGUL SYLLABLE PU +D494 ; LV # Lo HANGUL SYLLABLE PWEO +D4B0 ; LV # Lo HANGUL SYLLABLE PWE +D4CC ; LV # Lo HANGUL SYLLABLE PWI +D4E8 ; LV # Lo HANGUL SYLLABLE PYU +D504 ; LV # Lo HANGUL SYLLABLE PEU +D520 ; LV # Lo HANGUL SYLLABLE PYI +D53C ; LV # Lo HANGUL SYLLABLE PI +D558 ; LV # Lo HANGUL SYLLABLE HA +D574 ; LV # Lo HANGUL SYLLABLE HAE +D590 ; LV # Lo HANGUL SYLLABLE HYA +D5AC ; LV # Lo HANGUL SYLLABLE HYAE +D5C8 ; LV # Lo HANGUL SYLLABLE HEO +D5E4 ; LV # Lo HANGUL SYLLABLE HE +D600 ; LV # Lo HANGUL SYLLABLE HYEO +D61C ; LV # Lo HANGUL SYLLABLE HYE +D638 ; LV # Lo HANGUL SYLLABLE HO +D654 ; LV # Lo HANGUL SYLLABLE HWA +D670 ; LV # Lo HANGUL SYLLABLE HWAE +D68C ; LV # Lo HANGUL SYLLABLE HOE +D6A8 ; LV # Lo HANGUL SYLLABLE HYO +D6C4 ; LV # Lo HANGUL SYLLABLE HU +D6E0 ; LV # Lo HANGUL SYLLABLE HWEO +D6FC ; LV # Lo HANGUL SYLLABLE HWE +D718 ; LV # Lo HANGUL SYLLABLE HWI +D734 ; LV # Lo HANGUL SYLLABLE HYU +D750 ; LV # Lo HANGUL SYLLABLE HEU +D76C ; LV # Lo HANGUL SYLLABLE HYI +D788 ; LV # Lo HANGUL SYLLABLE HI + +# Total code points: 399 + +# ================================================ + +AC01..AC1B ; LVT # Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH +AC1D..AC37 ; LVT # Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH +AC39..AC53 ; LVT # Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH +AC55..AC6F ; LVT # Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH +AC71..AC8B ; LVT # Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH +AC8D..ACA7 ; LVT # Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH +ACA9..ACC3 ; LVT # Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH +ACC5..ACDF ; LVT # Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH +ACE1..ACFB ; LVT # Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH +ACFD..AD17 ; LVT # Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH +AD19..AD33 ; LVT # Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH +AD35..AD4F ; LVT # Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH +AD51..AD6B ; LVT # Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH +AD6D..AD87 ; LVT # Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH +AD89..ADA3 ; LVT # Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH +ADA5..ADBF ; LVT # Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH +ADC1..ADDB ; LVT # Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH +ADDD..ADF7 ; LVT # Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH +ADF9..AE13 ; LVT # Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH +AE15..AE2F ; LVT # Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH +AE31..AE4B ; LVT # Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH +AE4D..AE67 ; LVT # Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH +AE69..AE83 ; LVT # Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH +AE85..AE9F ; LVT # Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH +AEA1..AEBB ; LVT # Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH +AEBD..AED7 ; LVT # Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH +AED9..AEF3 ; LVT # Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH +AEF5..AF0F ; LVT # Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH +AF11..AF2B ; LVT # Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH +AF2D..AF47 ; LVT # Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH +AF49..AF63 ; LVT # Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH +AF65..AF7F ; LVT # Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH +AF81..AF9B ; LVT # Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH +AF9D..AFB7 ; LVT # Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH +AFB9..AFD3 ; LVT # Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH +AFD5..AFEF ; LVT # Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH +AFF1..B00B ; LVT # Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH +B00D..B027 ; LVT # Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH +B029..B043 ; LVT # Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH +B045..B05F ; LVT # Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH +B061..B07B ; LVT # Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH +B07D..B097 ; LVT # Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH +B099..B0B3 ; LVT # Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH +B0B5..B0CF ; LVT # Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH +B0D1..B0EB ; LVT # Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH +B0ED..B107 ; LVT # Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH +B109..B123 ; LVT # Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH +B125..B13F ; LVT # Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH +B141..B15B ; LVT # Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH +B15D..B177 ; LVT # Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH +B179..B193 ; LVT # Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH +B195..B1AF ; LVT # Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH +B1B1..B1CB ; LVT # Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH +B1CD..B1E7 ; LVT # Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH +B1E9..B203 ; LVT # Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH +B205..B21F ; LVT # Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH +B221..B23B ; LVT # Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH +B23D..B257 ; LVT # Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH +B259..B273 ; LVT # Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH +B275..B28F ; LVT # Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH +B291..B2AB ; LVT # Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH +B2AD..B2C7 ; LVT # Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH +B2C9..B2E3 ; LVT # Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH +B2E5..B2FF ; LVT # Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH +B301..B31B ; LVT # Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH +B31D..B337 ; LVT # Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH +B339..B353 ; LVT # Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH +B355..B36F ; LVT # Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH +B371..B38B ; LVT # Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH +B38D..B3A7 ; LVT # Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH +B3A9..B3C3 ; LVT # Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH +B3C5..B3DF ; LVT # Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH +B3E1..B3FB ; LVT # Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH +B3FD..B417 ; LVT # Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH +B419..B433 ; LVT # Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH +B435..B44F ; LVT # Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH +B451..B46B ; LVT # Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH +B46D..B487 ; LVT # Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH +B489..B4A3 ; LVT # Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH +B4A5..B4BF ; LVT # Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH +B4C1..B4DB ; LVT # Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH +B4DD..B4F7 ; LVT # Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH +B4F9..B513 ; LVT # Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH +B515..B52F ; LVT # Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH +B531..B54B ; LVT # Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH +B54D..B567 ; LVT # Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH +B569..B583 ; LVT # Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH +B585..B59F ; LVT # Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH +B5A1..B5BB ; LVT # Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH +B5BD..B5D7 ; LVT # Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH +B5D9..B5F3 ; LVT # Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH +B5F5..B60F ; LVT # Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH +B611..B62B ; LVT # Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH +B62D..B647 ; LVT # Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH +B649..B663 ; LVT # Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH +B665..B67F ; LVT # Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH +B681..B69B ; LVT # Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH +B69D..B6B7 ; LVT # Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH +B6B9..B6D3 ; LVT # Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH +B6D5..B6EF ; LVT # Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH +B6F1..B70B ; LVT # Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH +B70D..B727 ; LVT # Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH +B729..B743 ; LVT # Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH +B745..B75F ; LVT # Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH +B761..B77B ; LVT # Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH +B77D..B797 ; LVT # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH +B799..B7B3 ; LVT # Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH +B7B5..B7CF ; LVT # Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH +B7D1..B7EB ; LVT # Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH +B7ED..B807 ; LVT # Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH +B809..B823 ; LVT # Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH +B825..B83F ; LVT # Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH +B841..B85B ; LVT # Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH +B85D..B877 ; LVT # Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH +B879..B893 ; LVT # Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH +B895..B8AF ; LVT # Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH +B8B1..B8CB ; LVT # Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH +B8CD..B8E7 ; LVT # Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH +B8E9..B903 ; LVT # Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH +B905..B91F ; LVT # Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH +B921..B93B ; LVT # Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH +B93D..B957 ; LVT # Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH +B959..B973 ; LVT # Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH +B975..B98F ; LVT # Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH +B991..B9AB ; LVT # Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH +B9AD..B9C7 ; LVT # Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH +B9C9..B9E3 ; LVT # Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH +B9E5..B9FF ; LVT # Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH +BA01..BA1B ; LVT # Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH +BA1D..BA37 ; LVT # Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH +BA39..BA53 ; LVT # Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH +BA55..BA6F ; LVT # Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH +BA71..BA8B ; LVT # Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH +BA8D..BAA7 ; LVT # Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH +BAA9..BAC3 ; LVT # Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH +BAC5..BADF ; LVT # Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH +BAE1..BAFB ; LVT # Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH +BAFD..BB17 ; LVT # Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH +BB19..BB33 ; LVT # Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH +BB35..BB4F ; LVT # Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH +BB51..BB6B ; LVT # Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH +BB6D..BB87 ; LVT # Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH +BB89..BBA3 ; LVT # Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH +BBA5..BBBF ; LVT # Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH +BBC1..BBDB ; LVT # Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH +BBDD..BBF7 ; LVT # Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH +BBF9..BC13 ; LVT # Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH +BC15..BC2F ; LVT # Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH +BC31..BC4B ; LVT # Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH +BC4D..BC67 ; LVT # Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH +BC69..BC83 ; LVT # Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH +BC85..BC9F ; LVT # Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH +BCA1..BCBB ; LVT # Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH +BCBD..BCD7 ; LVT # Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH +BCD9..BCF3 ; LVT # Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH +BCF5..BD0F ; LVT # Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH +BD11..BD2B ; LVT # Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH +BD2D..BD47 ; LVT # Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH +BD49..BD63 ; LVT # Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH +BD65..BD7F ; LVT # Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH +BD81..BD9B ; LVT # Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH +BD9D..BDB7 ; LVT # Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH +BDB9..BDD3 ; LVT # Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH +BDD5..BDEF ; LVT # Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH +BDF1..BE0B ; LVT # Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH +BE0D..BE27 ; LVT # Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH +BE29..BE43 ; LVT # Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH +BE45..BE5F ; LVT # Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH +BE61..BE7B ; LVT # Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH +BE7D..BE97 ; LVT # Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH +BE99..BEB3 ; LVT # Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH +BEB5..BECF ; LVT # Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH +BED1..BEEB ; LVT # Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH +BEED..BF07 ; LVT # Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH +BF09..BF23 ; LVT # Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH +BF25..BF3F ; LVT # Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH +BF41..BF5B ; LVT # Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH +BF5D..BF77 ; LVT # Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH +BF79..BF93 ; LVT # Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH +BF95..BFAF ; LVT # Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH +BFB1..BFCB ; LVT # Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH +BFCD..BFE7 ; LVT # Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH +BFE9..C003 ; LVT # Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH +C005..C01F ; LVT # Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH +C021..C03B ; LVT # Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH +C03D..C057 ; LVT # Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH +C059..C073 ; LVT # Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH +C075..C08F ; LVT # Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH +C091..C0AB ; LVT # Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH +C0AD..C0C7 ; LVT # Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH +C0C9..C0E3 ; LVT # Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH +C0E5..C0FF ; LVT # Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH +C101..C11B ; LVT # Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH +C11D..C137 ; LVT # Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH +C139..C153 ; LVT # Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH +C155..C16F ; LVT # Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH +C171..C18B ; LVT # Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH +C18D..C1A7 ; LVT # Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH +C1A9..C1C3 ; LVT # Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH +C1C5..C1DF ; LVT # Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH +C1E1..C1FB ; LVT # Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH +C1FD..C217 ; LVT # Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH +C219..C233 ; LVT # Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH +C235..C24F ; LVT # Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH +C251..C26B ; LVT # Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH +C26D..C287 ; LVT # Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH +C289..C2A3 ; LVT # Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH +C2A5..C2BF ; LVT # Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH +C2C1..C2DB ; LVT # Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH +C2DD..C2F7 ; LVT # Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH +C2F9..C313 ; LVT # Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH +C315..C32F ; LVT # Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH +C331..C34B ; LVT # Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH +C34D..C367 ; LVT # Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH +C369..C383 ; LVT # Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH +C385..C39F ; LVT # Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH +C3A1..C3BB ; LVT # Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH +C3BD..C3D7 ; LVT # Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH +C3D9..C3F3 ; LVT # Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH +C3F5..C40F ; LVT # Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH +C411..C42B ; LVT # Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH +C42D..C447 ; LVT # Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH +C449..C463 ; LVT # Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH +C465..C47F ; LVT # Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH +C481..C49B ; LVT # Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH +C49D..C4B7 ; LVT # Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH +C4B9..C4D3 ; LVT # Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH +C4D5..C4EF ; LVT # Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH +C4F1..C50B ; LVT # Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH +C50D..C527 ; LVT # Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH +C529..C543 ; LVT # Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH +C545..C55F ; LVT # Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH +C561..C57B ; LVT # Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH +C57D..C597 ; LVT # Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH +C599..C5B3 ; LVT # Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH +C5B5..C5CF ; LVT # Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH +C5D1..C5EB ; LVT # Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH +C5ED..C607 ; LVT # Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH +C609..C623 ; LVT # Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH +C625..C63F ; LVT # Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH +C641..C65B ; LVT # Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH +C65D..C677 ; LVT # Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH +C679..C693 ; LVT # Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH +C695..C6AF ; LVT # Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH +C6B1..C6CB ; LVT # Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH +C6CD..C6E7 ; LVT # Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH +C6E9..C703 ; LVT # Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH +C705..C71F ; LVT # Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH +C721..C73B ; LVT # Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH +C73D..C757 ; LVT # Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH +C759..C773 ; LVT # Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH +C775..C78F ; LVT # Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH +C791..C7AB ; LVT # Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH +C7AD..C7C7 ; LVT # Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH +C7C9..C7E3 ; LVT # Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH +C7E5..C7FF ; LVT # Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH +C801..C81B ; LVT # Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH +C81D..C837 ; LVT # Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH +C839..C853 ; LVT # Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH +C855..C86F ; LVT # Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH +C871..C88B ; LVT # Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH +C88D..C8A7 ; LVT # Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH +C8A9..C8C3 ; LVT # Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH +C8C5..C8DF ; LVT # Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH +C8E1..C8FB ; LVT # Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH +C8FD..C917 ; LVT # Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH +C919..C933 ; LVT # Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH +C935..C94F ; LVT # Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH +C951..C96B ; LVT # Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH +C96D..C987 ; LVT # Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH +C989..C9A3 ; LVT # Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH +C9A5..C9BF ; LVT # Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH +C9C1..C9DB ; LVT # Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH +C9DD..C9F7 ; LVT # Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH +C9F9..CA13 ; LVT # Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH +CA15..CA2F ; LVT # Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH +CA31..CA4B ; LVT # Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH +CA4D..CA67 ; LVT # Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH +CA69..CA83 ; LVT # Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH +CA85..CA9F ; LVT # Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH +CAA1..CABB ; LVT # Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH +CABD..CAD7 ; LVT # Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH +CAD9..CAF3 ; LVT # Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH +CAF5..CB0F ; LVT # Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH +CB11..CB2B ; LVT # Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH +CB2D..CB47 ; LVT # Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH +CB49..CB63 ; LVT # Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH +CB65..CB7F ; LVT # Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH +CB81..CB9B ; LVT # Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH +CB9D..CBB7 ; LVT # Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH +CBB9..CBD3 ; LVT # Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH +CBD5..CBEF ; LVT # Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH +CBF1..CC0B ; LVT # Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH +CC0D..CC27 ; LVT # Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH +CC29..CC43 ; LVT # Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH +CC45..CC5F ; LVT # Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH +CC61..CC7B ; LVT # Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH +CC7D..CC97 ; LVT # Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH +CC99..CCB3 ; LVT # Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH +CCB5..CCCF ; LVT # Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH +CCD1..CCEB ; LVT # Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH +CCED..CD07 ; LVT # Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH +CD09..CD23 ; LVT # Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH +CD25..CD3F ; LVT # Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH +CD41..CD5B ; LVT # Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH +CD5D..CD77 ; LVT # Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH +CD79..CD93 ; LVT # Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH +CD95..CDAF ; LVT # Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH +CDB1..CDCB ; LVT # Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH +CDCD..CDE7 ; LVT # Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH +CDE9..CE03 ; LVT # Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH +CE05..CE1F ; LVT # Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH +CE21..CE3B ; LVT # Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH +CE3D..CE57 ; LVT # Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH +CE59..CE73 ; LVT # Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH +CE75..CE8F ; LVT # Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH +CE91..CEAB ; LVT # Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH +CEAD..CEC7 ; LVT # Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH +CEC9..CEE3 ; LVT # Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH +CEE5..CEFF ; LVT # Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH +CF01..CF1B ; LVT # Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH +CF1D..CF37 ; LVT # Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH +CF39..CF53 ; LVT # Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH +CF55..CF6F ; LVT # Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH +CF71..CF8B ; LVT # Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH +CF8D..CFA7 ; LVT # Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH +CFA9..CFC3 ; LVT # Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH +CFC5..CFDF ; LVT # Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH +CFE1..CFFB ; LVT # Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH +CFFD..D017 ; LVT # Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH +D019..D033 ; LVT # Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH +D035..D04F ; LVT # Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH +D051..D06B ; LVT # Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH +D06D..D087 ; LVT # Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH +D089..D0A3 ; LVT # Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH +D0A5..D0BF ; LVT # Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH +D0C1..D0DB ; LVT # Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH +D0DD..D0F7 ; LVT # Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH +D0F9..D113 ; LVT # Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH +D115..D12F ; LVT # Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH +D131..D14B ; LVT # Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH +D14D..D167 ; LVT # Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH +D169..D183 ; LVT # Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH +D185..D19F ; LVT # Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH +D1A1..D1BB ; LVT # Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH +D1BD..D1D7 ; LVT # Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH +D1D9..D1F3 ; LVT # Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH +D1F5..D20F ; LVT # Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH +D211..D22B ; LVT # Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH +D22D..D247 ; LVT # Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH +D249..D263 ; LVT # Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH +D265..D27F ; LVT # Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH +D281..D29B ; LVT # Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH +D29D..D2B7 ; LVT # Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH +D2B9..D2D3 ; LVT # Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH +D2D5..D2EF ; LVT # Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH +D2F1..D30B ; LVT # Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH +D30D..D327 ; LVT # Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH +D329..D343 ; LVT # Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH +D345..D35F ; LVT # Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH +D361..D37B ; LVT # Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH +D37D..D397 ; LVT # Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH +D399..D3B3 ; LVT # Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH +D3B5..D3CF ; LVT # Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH +D3D1..D3EB ; LVT # Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH +D3ED..D407 ; LVT # Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH +D409..D423 ; LVT # Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH +D425..D43F ; LVT # Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH +D441..D45B ; LVT # Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH +D45D..D477 ; LVT # Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH +D479..D493 ; LVT # Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH +D495..D4AF ; LVT # Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH +D4B1..D4CB ; LVT # Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH +D4CD..D4E7 ; LVT # Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH +D4E9..D503 ; LVT # Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH +D505..D51F ; LVT # Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH +D521..D53B ; LVT # Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH +D53D..D557 ; LVT # Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH +D559..D573 ; LVT # Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH +D575..D58F ; LVT # Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH +D591..D5AB ; LVT # Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH +D5AD..D5C7 ; LVT # Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH +D5C9..D5E3 ; LVT # Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH +D5E5..D5FF ; LVT # Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH +D601..D61B ; LVT # Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH +D61D..D637 ; LVT # Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH +D639..D653 ; LVT # Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH +D655..D66F ; LVT # Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH +D671..D68B ; LVT # Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH +D68D..D6A7 ; LVT # Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH +D6A9..D6C3 ; LVT # Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH +D6C5..D6DF ; LVT # Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH +D6E1..D6FB ; LVT # Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH +D6FD..D717 ; LVT # Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH +D719..D733 ; LVT # Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH +D735..D74F ; LVT # Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH +D751..D76B ; LVT # Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH +D76D..D787 ; LVT # Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH +D789..D7A3 ; LVT # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH + +# Total code points: 10773 + +# ================================================ + +200D ; ZWJ # Cf ZERO WIDTH JOINER + +# Total code points: 1 + +# EOF \ No newline at end of file diff --git a/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakTest.txt b/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakTest.txt new file mode 100644 index 00000000..b443c2bd --- /dev/null +++ b/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakTest.txt @@ -0,0 +1,630 @@ +# GraphemeBreakTest-12.1.0.txt +# Date: 2019-03-10, 10:53:12 GMT +# © 2019 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see http://www.unicode.org/reports/tr44/ +# +# Default Grapheme_Cluster_Break Test +# +# Format: +# (# )? +# contains hex Unicode code points, with +# ÷ wherever there is a break opportunity, and +# × wherever there is not. +# the format can change, but currently it shows: +# - the sample character name +# - (x) the Grapheme_Cluster_Break property value for the sample character +# - [x] the rule that determines whether there is a break or not, +# as listed in the Rules section of GraphemeBreakTest.html +# +# These samples may be extended or changed in the future. +# +÷ 0020 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0020 × 0308 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0020 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (CR) ÷ [0.3] +÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0020 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (LF) ÷ [0.3] +÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0020 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (Control) ÷ [0.3] +÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0020 × 034F ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0020 × 0308 × 034F ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0020 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0020 × 0308 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0020 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0020 × 0308 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0020 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0020 × 0308 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0020 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0020 × 0308 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0020 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0020 × 0308 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0020 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0020 × 0308 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0020 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0020 × 0308 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0020 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] (Other) ÷ [0.3] +÷ 0020 × 0308 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 000D ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 000D ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] (CR) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 000D × 000A ÷ # ÷ [0.2] (CR) × [3.0] (LF) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 000D ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Control) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 000D ÷ 034F ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 000D ÷ 0308 × 034F ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 000D ÷ 0600 ÷ # ÷ [0.2] (CR) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 000D ÷ 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000D ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000D ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000D ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000D ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000D ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000D ÷ 231A ÷ # ÷ [0.2] (CR) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 000D ÷ 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 200D ÷ # ÷ [0.2] (CR) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Other) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 000A ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 000A ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] (CR) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 000A ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] (LF) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 000A ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Control) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 000A ÷ 034F ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 000A ÷ 0308 × 034F ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 000A ÷ 0600 ÷ # ÷ [0.2] (LF) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 000A ÷ 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000A ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000A ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000A ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000A ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000A ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000A ÷ 231A ÷ # ÷ [0.2] (LF) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 000A ÷ 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 200D ÷ # ÷ [0.2] (LF) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Other) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0001 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0001 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] (CR) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0001 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] (LF) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0001 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Control) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0001 ÷ 034F ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0001 ÷ 0308 × 034F ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0001 ÷ 0600 ÷ # ÷ [0.2] (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0001 ÷ 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0001 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0001 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0001 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0001 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0001 ÷ 231A ÷ # ÷ [0.2] (Control) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0001 ÷ 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 200D ÷ # ÷ [0.2] (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0308 × 200D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Other) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 034F ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 034F × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 034F ÷ 000D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 034F × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 034F ÷ 000A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 034F × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 034F ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 034F × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 034F × 034F ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 034F × 0308 × 034F ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 034F ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 034F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 034F ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 034F × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 034F × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 034F × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 034F ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 034F × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 034F ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 034F × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 034F ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 034F × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 034F ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 034F × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 034F ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 034F × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 034F ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 034F × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 034F × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 034F × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 034F × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 034F × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 034F ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 034F × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 1F1E6 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (CR) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (LF) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (Control) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 1F1E6 × 034F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1F1E6 × 0308 × 034F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1F1E6 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1F1E6 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1F1E6 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1F1E6 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1F1E6 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1F1E6 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1F1E6 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] (Other) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0600 × 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] SPACE (Other) ÷ [0.3] +÷ 0600 × 0308 ÷ 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0600 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (CR) ÷ [0.3] +÷ 0600 × 0308 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0600 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (LF) ÷ [0.3] +÷ 0600 × 0308 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0600 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (Control) ÷ [0.3] +÷ 0600 × 0308 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0600 × 034F ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0600 × 0308 × 034F ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0600 × 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0600 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0600 × 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0600 × 0308 ÷ 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0600 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0600 × 0308 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0600 × 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0600 × 0308 ÷ 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0600 × 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0600 × 0308 ÷ 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0600 × 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0600 × 0308 ÷ 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0600 × AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0600 × 0308 ÷ AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0600 × AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0600 × 0308 ÷ AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0600 × 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] WATCH (ExtPict) ÷ [0.3] +÷ 0600 × 0308 ÷ 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0600 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0308 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0600 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0308 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] (Other) ÷ [0.3] +÷ 0600 × 0308 ÷ 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (CR) ÷ [0.3] +÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (LF) ÷ [0.3] +÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (Control) ÷ [0.3] +÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0903 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0903 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0903 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0903 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0903 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0903 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0903 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0903 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0903 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0903 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0903 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0903 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] (Other) ÷ [0.3] +÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 1100 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1100 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1100 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (CR) ÷ [0.3] +÷ 1100 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 1100 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (LF) ÷ [0.3] +÷ 1100 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 1100 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (Control) ÷ [0.3] +÷ 1100 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 1100 × 034F ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1100 × 0308 × 034F ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1100 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1100 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1100 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1100 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1100 × 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1100 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1100 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1100 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1100 × AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1100 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1100 × AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1100 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1100 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1100 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1100 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1100 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1100 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1100 × 0308 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1100 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] (Other) ÷ [0.3] +÷ 1100 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 1160 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1160 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1160 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (CR) ÷ [0.3] +÷ 1160 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 1160 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (LF) ÷ [0.3] +÷ 1160 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 1160 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (Control) ÷ [0.3] +÷ 1160 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 1160 × 034F ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1160 × 0308 × 034F ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1160 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1160 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1160 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1160 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1160 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1160 × 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1160 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1160 × 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1160 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1160 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1160 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1160 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1160 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1160 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1160 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1160 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1160 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1160 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1160 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1160 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] (Other) ÷ [0.3] +÷ 1160 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 11A8 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 11A8 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (CR) ÷ [0.3] +÷ 11A8 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 11A8 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (LF) ÷ [0.3] +÷ 11A8 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 11A8 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (Control) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 11A8 × 034F ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 11A8 × 0308 × 034F ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 11A8 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 11A8 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 11A8 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 11A8 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 11A8 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 11A8 × 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 11A8 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 11A8 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 11A8 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 11A8 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 11A8 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 11A8 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 11A8 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 11A8 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 11A8 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] (Other) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ AC00 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ AC00 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ AC00 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (CR) ÷ [0.3] +÷ AC00 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ AC00 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (LF) ÷ [0.3] +÷ AC00 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ AC00 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (Control) ÷ [0.3] +÷ AC00 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ AC00 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ AC00 × 0308 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ AC00 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ AC00 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ AC00 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC00 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC00 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC00 × 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ AC00 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ AC00 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ AC00 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ AC00 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ AC00 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ AC00 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC00 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC00 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ AC00 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ AC00 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC00 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC00 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ AC00 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ AC00 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] (Other) ÷ [0.3] +÷ AC00 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ AC01 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ AC01 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ AC01 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (CR) ÷ [0.3] +÷ AC01 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ AC01 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (LF) ÷ [0.3] +÷ AC01 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ AC01 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (Control) ÷ [0.3] +÷ AC01 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ AC01 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ AC01 × 0308 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ AC01 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ AC01 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ AC01 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC01 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC01 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC01 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ AC01 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ AC01 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ AC01 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ AC01 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ AC01 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ AC01 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC01 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC01 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ AC01 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ AC01 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC01 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC01 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ AC01 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ AC01 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] (Other) ÷ [0.3] +÷ AC01 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 231A ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 231A × 0308 ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 231A ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (CR) ÷ [0.3] +÷ 231A × 0308 ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 231A ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (LF) ÷ [0.3] +÷ 231A × 0308 ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 231A ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (Control) ÷ [0.3] +÷ 231A × 0308 ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 231A × 034F ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 231A × 0308 × 034F ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 231A ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 231A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 231A ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 231A × 0308 ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 231A × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 231A × 0308 × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 231A ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 231A × 0308 ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 231A ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 231A × 0308 ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 231A ÷ 11A8 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 231A × 0308 ÷ 11A8 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 231A ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 231A × 0308 ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 231A ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 231A × 0308 ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 231A ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 231A × 0308 ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 231A × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 231A × 0308 × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 231A × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 231A × 0308 × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 231A ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] (Other) ÷ [0.3] +÷ 231A × 0308 ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0300 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0300 × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0300 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0300 × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0300 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0300 × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0300 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0300 × 034F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0300 × 0308 × 034F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0300 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0300 × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0300 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0300 × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0300 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0300 × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0300 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0300 × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0300 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0300 × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0300 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0300 × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0300 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0300 × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0300 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 200D × 0308 ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 200D ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 200D × 0308 ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 200D ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 200D × 0308 ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 200D × 034F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 200D × 0308 × 034F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 200D ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 200D ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 200D × 0308 ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 200D ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 200D × 0308 ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 200D ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 200D × 0308 ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 200D ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 200D × 0308 ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 200D ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 200D × 0308 ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 200D ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 200D × 0308 ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 200D ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 200D × 0308 ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 200D ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 200D × 0308 ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0378 ÷ 0020 ÷ # ÷ [0.2] (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0378 × 0308 ÷ 0020 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0378 ÷ 000D ÷ # ÷ [0.2] (Other) ÷ [5.0] (CR) ÷ [0.3] +÷ 0378 × 0308 ÷ 000D ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0378 ÷ 000A ÷ # ÷ [0.2] (Other) ÷ [5.0] (LF) ÷ [0.3] +÷ 0378 × 0308 ÷ 000A ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0378 ÷ 0001 ÷ # ÷ [0.2] (Other) ÷ [5.0] (Control) ÷ [0.3] +÷ 0378 × 0308 ÷ 0001 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0378 × 034F ÷ # ÷ [0.2] (Other) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0378 × 0308 × 034F ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0378 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0378 ÷ 0600 ÷ # ÷ [0.2] (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0378 × 0308 ÷ 0600 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0378 × 0903 ÷ # ÷ [0.2] (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 ÷ 1100 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0378 × 0308 ÷ 1100 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0378 ÷ 1160 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0378 × 0308 ÷ 1160 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0378 ÷ 11A8 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0378 × 0308 ÷ 11A8 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0378 ÷ AC00 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0378 ÷ AC01 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0378 × 0308 ÷ AC01 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0378 ÷ 231A ÷ # ÷ [0.2] (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0378 × 0308 ÷ 231A ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0378 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0378 × 200D ÷ # ÷ [0.2] (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0378 × 0308 × 200D ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0378 ÷ 0378 ÷ # ÷ [0.2] (Other) ÷ [999.0] (Other) ÷ [0.3] +÷ 0378 × 0308 ÷ 0378 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] (CR) × [3.0] (LF) ÷ [4.0] LATIN SMALL LETTER A (Other) ÷ [5.0] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [0.3] +÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [0.3] +÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC LETTER NOON (Other) ÷ [0.3] +÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC00 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC01 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 1F1E6 × 200D ÷ 1F1E7 × 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0061 × 0308 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] +÷ 0061 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] +÷ 0061 × 1F3FF ÷ 1F476 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] +÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [0.3] +÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] +÷ 0061 × 200D ÷ 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] +÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] +÷ 0061 × 200D ÷ 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] +# +# Lines: 602 +# +# EOF \ No newline at end of file diff --git a/pkgs/characters/UNICODE_LICENSE.txt b/pkgs/characters/third_party/Unicode_Consortium/UNICODE_LICENSE.txt similarity index 100% rename from pkgs/characters/UNICODE_LICENSE.txt rename to pkgs/characters/third_party/Unicode_Consortium/UNICODE_LICENSE.txt diff --git a/pkgs/characters/third_party/Unicode_Consortium/emoji_data.txt b/pkgs/characters/third_party/Unicode_Consortium/emoji_data.txt new file mode 100644 index 00000000..27bb7156 --- /dev/null +++ b/pkgs/characters/third_party/Unicode_Consortium/emoji_data.txt @@ -0,0 +1,769 @@ +# emoji-data.txt +# Date: 2019-01-15, 12:10:05 GMT +# © 2019 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Emoji Data for UTS #51 +# Version: 12.0 +# +# For documentation and usage, see http://www.unicode.org/reports/tr51 +# +# Format: +# ; # +# Note: there is no guarantee as to the structure of whitespace or comments +# +# Characters and sequences are listed in code point order. Users should be shown a more natural order. +# See the CLDR collation order for Emoji. + + +# ================================================ + +# All omitted code points have Emoji=No +# @missing: 0000..10FFFF ; Emoji ; No + +0023 ; Emoji # 1.1 [1] (#️) number sign +002A ; Emoji # 1.1 [1] (*️) asterisk +0030..0039 ; Emoji # 1.1 [10] (0️..9️) digit zero..digit nine +00A9 ; Emoji # 1.1 [1] (©️) copyright +00AE ; Emoji # 1.1 [1] (®️) registered +203C ; Emoji # 1.1 [1] (‼️) double exclamation mark +2049 ; Emoji # 3.0 [1] (⁉️) exclamation question mark +2122 ; Emoji # 1.1 [1] (™️) trade mark +2139 ; Emoji # 3.0 [1] (ℹ️) information +2194..2199 ; Emoji # 1.1 [6] (↔️..↙️) left-right arrow..down-left arrow +21A9..21AA ; Emoji # 1.1 [2] (↩️..↪️) right arrow curving left..left arrow curving right +231A..231B ; Emoji # 1.1 [2] (⌚..⌛) watch..hourglass done +2328 ; Emoji # 1.1 [1] (⌨️) keyboard +23CF ; Emoji # 4.0 [1] (⏏️) eject button +23E9..23F3 ; Emoji # 6.0 [11] (⏩..⏳) fast-forward button..hourglass not done +23F8..23FA ; Emoji # 7.0 [3] (⏸️..⏺️) pause button..record button +24C2 ; Emoji # 1.1 [1] (Ⓜ️) circled M +25AA..25AB ; Emoji # 1.1 [2] (▪️..▫️) black small square..white small square +25B6 ; Emoji # 1.1 [1] (▶️) play button +25C0 ; Emoji # 1.1 [1] (◀️) reverse button +25FB..25FE ; Emoji # 3.2 [4] (◻️..◾) white medium square..black medium-small square +2600..2604 ; Emoji # 1.1 [5] (☀️..☄️) sun..comet +260E ; Emoji # 1.1 [1] (☎️) telephone +2611 ; Emoji # 1.1 [1] (☑️) check box with check +2614..2615 ; Emoji # 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage +2618 ; Emoji # 4.1 [1] (☘️) shamrock +261D ; Emoji # 1.1 [1] (☝️) index pointing up +2620 ; Emoji # 1.1 [1] (☠️) skull and crossbones +2622..2623 ; Emoji # 1.1 [2] (☢️..☣️) radioactive..biohazard +2626 ; Emoji # 1.1 [1] (☦️) orthodox cross +262A ; Emoji # 1.1 [1] (☪️) star and crescent +262E..262F ; Emoji # 1.1 [2] (☮️..☯️) peace symbol..yin yang +2638..263A ; Emoji # 1.1 [3] (☸️..☺️) wheel of dharma..smiling face +2640 ; Emoji # 1.1 [1] (♀️) female sign +2642 ; Emoji # 1.1 [1] (♂️) male sign +2648..2653 ; Emoji # 1.1 [12] (♈..♓) Aries..Pisces +265F..2660 ; Emoji # 1.1 [2] (♟️..♠️) chess pawn..spade suit +2663 ; Emoji # 1.1 [1] (♣️) club suit +2665..2666 ; Emoji # 1.1 [2] (♥️..♦️) heart suit..diamond suit +2668 ; Emoji # 1.1 [1] (♨️) hot springs +267B ; Emoji # 3.2 [1] (♻️) recycling symbol +267E..267F ; Emoji # 4.1 [2] (♾️..♿) infinity..wheelchair symbol +2692..2697 ; Emoji # 4.1 [6] (⚒️..⚗️) hammer and pick..alembic +2699 ; Emoji # 4.1 [1] (⚙️) gear +269B..269C ; Emoji # 4.1 [2] (⚛️..⚜️) atom symbol..fleur-de-lis +26A0..26A1 ; Emoji # 4.0 [2] (⚠️..⚡) warning..high voltage +26AA..26AB ; Emoji # 4.1 [2] (⚪..⚫) white circle..black circle +26B0..26B1 ; Emoji # 4.1 [2] (⚰️..⚱️) coffin..funeral urn +26BD..26BE ; Emoji # 5.2 [2] (⚽..⚾) soccer ball..baseball +26C4..26C5 ; Emoji # 5.2 [2] (⛄..⛅) snowman without snow..sun behind cloud +26C8 ; Emoji # 5.2 [1] (⛈️) cloud with lightning and rain +26CE ; Emoji # 6.0 [1] (⛎) Ophiuchus +26CF ; Emoji # 5.2 [1] (⛏️) pick +26D1 ; Emoji # 5.2 [1] (⛑️) rescue worker’s helmet +26D3..26D4 ; Emoji # 5.2 [2] (⛓️..⛔) chains..no entry +26E9..26EA ; Emoji # 5.2 [2] (⛩️..⛪) shinto shrine..church +26F0..26F5 ; Emoji # 5.2 [6] (⛰️..⛵) mountain..sailboat +26F7..26FA ; Emoji # 5.2 [4] (⛷️..⛺) skier..tent +26FD ; Emoji # 5.2 [1] (⛽) fuel pump +2702 ; Emoji # 1.1 [1] (✂️) scissors +2705 ; Emoji # 6.0 [1] (✅) check mark button +2708..2709 ; Emoji # 1.1 [2] (✈️..✉️) airplane..envelope +270A..270B ; Emoji # 6.0 [2] (✊..✋) raised fist..raised hand +270C..270D ; Emoji # 1.1 [2] (✌️..✍️) victory hand..writing hand +270F ; Emoji # 1.1 [1] (✏️) pencil +2712 ; Emoji # 1.1 [1] (✒️) black nib +2714 ; Emoji # 1.1 [1] (✔️) check mark +2716 ; Emoji # 1.1 [1] (✖️) multiplication sign +271D ; Emoji # 1.1 [1] (✝️) latin cross +2721 ; Emoji # 1.1 [1] (✡️) star of David +2728 ; Emoji # 6.0 [1] (✨) sparkles +2733..2734 ; Emoji # 1.1 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star +2744 ; Emoji # 1.1 [1] (❄️) snowflake +2747 ; Emoji # 1.1 [1] (❇️) sparkle +274C ; Emoji # 6.0 [1] (❌) cross mark +274E ; Emoji # 6.0 [1] (❎) cross mark button +2753..2755 ; Emoji # 6.0 [3] (❓..❕) question mark..white exclamation mark +2757 ; Emoji # 5.2 [1] (❗) exclamation mark +2763..2764 ; Emoji # 1.1 [2] (❣️..❤️) heart exclamation..red heart +2795..2797 ; Emoji # 6.0 [3] (➕..➗) plus sign..division sign +27A1 ; Emoji # 1.1 [1] (➡️) right arrow +27B0 ; Emoji # 6.0 [1] (➰) curly loop +27BF ; Emoji # 6.0 [1] (➿) double curly loop +2934..2935 ; Emoji # 3.2 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down +2B05..2B07 ; Emoji # 4.0 [3] (⬅️..⬇️) left arrow..down arrow +2B1B..2B1C ; Emoji # 5.1 [2] (⬛..⬜) black large square..white large square +2B50 ; Emoji # 5.1 [1] (⭐) star +2B55 ; Emoji # 5.2 [1] (⭕) hollow red circle +3030 ; Emoji # 1.1 [1] (〰️) wavy dash +303D ; Emoji # 3.2 [1] (〽️) part alternation mark +3297 ; Emoji # 1.1 [1] (㊗️) Japanese “congratulations” button +3299 ; Emoji # 1.1 [1] (㊙️) Japanese “secret” button +1F004 ; Emoji # 5.1 [1] (🀄) mahjong red dragon +1F0CF ; Emoji # 6.0 [1] (🃏) joker +1F170..1F171 ; Emoji # 6.0 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) +1F17E ; Emoji # 6.0 [1] (🅾️) O button (blood type) +1F17F ; Emoji # 5.2 [1] (🅿️) P button +1F18E ; Emoji # 6.0 [1] (🆎) AB button (blood type) +1F191..1F19A ; Emoji # 6.0 [10] (🆑..🆚) CL button..VS button +1F1E6..1F1FF ; Emoji # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z +1F201..1F202 ; Emoji # 6.0 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button +1F21A ; Emoji # 5.2 [1] (🈚) Japanese “free of charge” button +1F22F ; Emoji # 5.2 [1] (🈯) Japanese “reserved” button +1F232..1F23A ; Emoji # 6.0 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button +1F250..1F251 ; Emoji # 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button +1F300..1F320 ; Emoji # 6.0 [33] (🌀..🌠) cyclone..shooting star +1F321 ; Emoji # 7.0 [1] (🌡️) thermometer +1F324..1F32C ; Emoji # 7.0 [9] (🌤️..🌬️) sun behind small cloud..wind face +1F32D..1F32F ; Emoji # 8.0 [3] (🌭..🌯) hot dog..burrito +1F330..1F335 ; Emoji # 6.0 [6] (🌰..🌵) chestnut..cactus +1F336 ; Emoji # 7.0 [1] (🌶️) hot pepper +1F337..1F37C ; Emoji # 6.0 [70] (🌷..🍼) tulip..baby bottle +1F37D ; Emoji # 7.0 [1] (🍽️) fork and knife with plate +1F37E..1F37F ; Emoji # 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn +1F380..1F393 ; Emoji # 6.0 [20] (🎀..🎓) ribbon..graduation cap +1F396..1F397 ; Emoji # 7.0 [2] (🎖️..🎗️) military medal..reminder ribbon +1F399..1F39B ; Emoji # 7.0 [3] (🎙️..🎛️) studio microphone..control knobs +1F39E..1F39F ; Emoji # 7.0 [2] (🎞️..🎟️) film frames..admission tickets +1F3A0..1F3C4 ; Emoji # 6.0 [37] (🎠..🏄) carousel horse..person surfing +1F3C5 ; Emoji # 7.0 [1] (🏅) sports medal +1F3C6..1F3CA ; Emoji # 6.0 [5] (🏆..🏊) trophy..person swimming +1F3CB..1F3CE ; Emoji # 7.0 [4] (🏋️..🏎️) person lifting weights..racing car +1F3CF..1F3D3 ; Emoji # 8.0 [5] (🏏..🏓) cricket game..ping pong +1F3D4..1F3DF ; Emoji # 7.0 [12] (🏔️..🏟️) snow-capped mountain..stadium +1F3E0..1F3F0 ; Emoji # 6.0 [17] (🏠..🏰) house..castle +1F3F3..1F3F5 ; Emoji # 7.0 [3] (🏳️..🏵️) white flag..rosette +1F3F7 ; Emoji # 7.0 [1] (🏷️) label +1F3F8..1F3FF ; Emoji # 8.0 [8] (🏸..🏿) badminton..dark skin tone +1F400..1F43E ; Emoji # 6.0 [63] (🐀..🐾) rat..paw prints +1F43F ; Emoji # 7.0 [1] (🐿️) chipmunk +1F440 ; Emoji # 6.0 [1] (👀) eyes +1F441 ; Emoji # 7.0 [1] (👁️) eye +1F442..1F4F7 ; Emoji # 6.0[182] (👂..📷) ear..camera +1F4F8 ; Emoji # 7.0 [1] (📸) camera with flash +1F4F9..1F4FC ; Emoji # 6.0 [4] (📹..📼) video camera..videocassette +1F4FD ; Emoji # 7.0 [1] (📽️) film projector +1F4FF ; Emoji # 8.0 [1] (📿) prayer beads +1F500..1F53D ; Emoji # 6.0 [62] (🔀..🔽) shuffle tracks button..downwards button +1F549..1F54A ; Emoji # 7.0 [2] (🕉️..🕊️) om..dove +1F54B..1F54E ; Emoji # 8.0 [4] (🕋..🕎) kaaba..menorah +1F550..1F567 ; Emoji # 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty +1F56F..1F570 ; Emoji # 7.0 [2] (🕯️..🕰️) candle..mantelpiece clock +1F573..1F579 ; Emoji # 7.0 [7] (🕳️..🕹️) hole..joystick +1F57A ; Emoji # 9.0 [1] (🕺) man dancing +1F587 ; Emoji # 7.0 [1] (🖇️) linked paperclips +1F58A..1F58D ; Emoji # 7.0 [4] (🖊️..🖍️) pen..crayon +1F590 ; Emoji # 7.0 [1] (🖐️) hand with fingers splayed +1F595..1F596 ; Emoji # 7.0 [2] (🖕..🖖) middle finger..vulcan salute +1F5A4 ; Emoji # 9.0 [1] (🖤) black heart +1F5A5 ; Emoji # 7.0 [1] (🖥️) desktop computer +1F5A8 ; Emoji # 7.0 [1] (🖨️) printer +1F5B1..1F5B2 ; Emoji # 7.0 [2] (🖱️..🖲️) computer mouse..trackball +1F5BC ; Emoji # 7.0 [1] (🖼️) framed picture +1F5C2..1F5C4 ; Emoji # 7.0 [3] (🗂️..🗄️) card index dividers..file cabinet +1F5D1..1F5D3 ; Emoji # 7.0 [3] (🗑️..🗓️) wastebasket..spiral calendar +1F5DC..1F5DE ; Emoji # 7.0 [3] (🗜️..🗞️) clamp..rolled-up newspaper +1F5E1 ; Emoji # 7.0 [1] (🗡️) dagger +1F5E3 ; Emoji # 7.0 [1] (🗣️) speaking head +1F5E8 ; Emoji # 7.0 [1] (🗨️) left speech bubble +1F5EF ; Emoji # 7.0 [1] (🗯️) right anger bubble +1F5F3 ; Emoji # 7.0 [1] (🗳️) ballot box with ballot +1F5FA ; Emoji # 7.0 [1] (🗺️) world map +1F5FB..1F5FF ; Emoji # 6.0 [5] (🗻..🗿) mount fuji..moai +1F600 ; Emoji # 6.1 [1] (😀) grinning face +1F601..1F610 ; Emoji # 6.0 [16] (😁..😐) beaming face with smiling eyes..neutral face +1F611 ; Emoji # 6.1 [1] (😑) expressionless face +1F612..1F614 ; Emoji # 6.0 [3] (😒..😔) unamused face..pensive face +1F615 ; Emoji # 6.1 [1] (😕) confused face +1F616 ; Emoji # 6.0 [1] (😖) confounded face +1F617 ; Emoji # 6.1 [1] (😗) kissing face +1F618 ; Emoji # 6.0 [1] (😘) face blowing a kiss +1F619 ; Emoji # 6.1 [1] (😙) kissing face with smiling eyes +1F61A ; Emoji # 6.0 [1] (😚) kissing face with closed eyes +1F61B ; Emoji # 6.1 [1] (😛) face with tongue +1F61C..1F61E ; Emoji # 6.0 [3] (😜..😞) winking face with tongue..disappointed face +1F61F ; Emoji # 6.1 [1] (😟) worried face +1F620..1F625 ; Emoji # 6.0 [6] (😠..😥) angry face..sad but relieved face +1F626..1F627 ; Emoji # 6.1 [2] (😦..😧) frowning face with open mouth..anguished face +1F628..1F62B ; Emoji # 6.0 [4] (😨..😫) fearful face..tired face +1F62C ; Emoji # 6.1 [1] (😬) grimacing face +1F62D ; Emoji # 6.0 [1] (😭) loudly crying face +1F62E..1F62F ; Emoji # 6.1 [2] (😮..😯) face with open mouth..hushed face +1F630..1F633 ; Emoji # 6.0 [4] (😰..😳) anxious face with sweat..flushed face +1F634 ; Emoji # 6.1 [1] (😴) sleeping face +1F635..1F640 ; Emoji # 6.0 [12] (😵..🙀) dizzy face..weary cat +1F641..1F642 ; Emoji # 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face +1F643..1F644 ; Emoji # 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes +1F645..1F64F ; Emoji # 6.0 [11] (🙅..🙏) person gesturing NO..folded hands +1F680..1F6C5 ; Emoji # 6.0 [70] (🚀..🛅) rocket..left luggage +1F6CB..1F6CF ; Emoji # 7.0 [5] (🛋️..🛏️) couch and lamp..bed +1F6D0 ; Emoji # 8.0 [1] (🛐) place of worship +1F6D1..1F6D2 ; Emoji # 9.0 [2] (🛑..🛒) stop sign..shopping cart +1F6D5 ; Emoji # 12.0 [1] (🛕) hindu temple +1F6E0..1F6E5 ; Emoji # 7.0 [6] (🛠️..🛥️) hammer and wrench..motor boat +1F6E9 ; Emoji # 7.0 [1] (🛩️) small airplane +1F6EB..1F6EC ; Emoji # 7.0 [2] (🛫..🛬) airplane departure..airplane arrival +1F6F0 ; Emoji # 7.0 [1] (🛰️) satellite +1F6F3 ; Emoji # 7.0 [1] (🛳️) passenger ship +1F6F4..1F6F6 ; Emoji # 9.0 [3] (🛴..🛶) kick scooter..canoe +1F6F7..1F6F8 ; Emoji # 10.0 [2] (🛷..🛸) sled..flying saucer +1F6F9 ; Emoji # 11.0 [1] (🛹) skateboard +1F6FA ; Emoji # 12.0 [1] (🛺) auto rickshaw +1F7E0..1F7EB ; Emoji # 12.0 [12] (🟠..🟫) orange circle..brown square +1F90D..1F90F ; Emoji # 12.0 [3] (🤍..🤏) white heart..pinching hand +1F910..1F918 ; Emoji # 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns +1F919..1F91E ; Emoji # 9.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Emoji # 10.0 [1] (🤟) love-you gesture +1F920..1F927 ; Emoji # 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face +1F928..1F92F ; Emoji # 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head +1F930 ; Emoji # 9.0 [1] (🤰) pregnant woman +1F931..1F932 ; Emoji # 10.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F93A ; Emoji # 9.0 [8] (🤳..🤺) selfie..person fencing +1F93C..1F93E ; Emoji # 9.0 [3] (🤼..🤾) people wrestling..person playing handball +1F93F ; Emoji # 12.0 [1] (🤿) diving mask +1F940..1F945 ; Emoji # 9.0 [6] (🥀..🥅) wilted flower..goal net +1F947..1F94B ; Emoji # 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform +1F94C ; Emoji # 10.0 [1] (🥌) curling stone +1F94D..1F94F ; Emoji # 11.0 [3] (🥍..🥏) lacrosse..flying disc +1F950..1F95E ; Emoji # 9.0 [15] (🥐..🥞) croissant..pancakes +1F95F..1F96B ; Emoji # 10.0 [13] (🥟..🥫) dumpling..canned food +1F96C..1F970 ; Emoji # 11.0 [5] (🥬..🥰) leafy green..smiling face with hearts +1F971 ; Emoji # 12.0 [1] (🥱) yawning face +1F973..1F976 ; Emoji # 11.0 [4] (🥳..🥶) partying face..cold face +1F97A ; Emoji # 11.0 [1] (🥺) pleading face +1F97B ; Emoji # 12.0 [1] (🥻) sari +1F97C..1F97F ; Emoji # 11.0 [4] (🥼..🥿) lab coat..flat shoe +1F980..1F984 ; Emoji # 8.0 [5] (🦀..🦄) crab..unicorn +1F985..1F991 ; Emoji # 9.0 [13] (🦅..🦑) eagle..squid +1F992..1F997 ; Emoji # 10.0 [6] (🦒..🦗) giraffe..cricket +1F998..1F9A2 ; Emoji # 11.0 [11] (🦘..🦢) kangaroo..swan +1F9A5..1F9AA ; Emoji # 12.0 [6] (🦥..🦪) sloth..oyster +1F9AE..1F9AF ; Emoji # 12.0 [2] (🦮..🦯) guide dog..probing cane +1F9B0..1F9B9 ; Emoji # 11.0 [10] (🦰..🦹) red hair..supervillain +1F9BA..1F9BF ; Emoji # 12.0 [6] (🦺..🦿) safety vest..mechanical leg +1F9C0 ; Emoji # 8.0 [1] (🧀) cheese wedge +1F9C1..1F9C2 ; Emoji # 11.0 [2] (🧁..🧂) cupcake..salt +1F9C3..1F9CA ; Emoji # 12.0 [8] (🧃..🧊) beverage box..ice cube +1F9CD..1F9CF ; Emoji # 12.0 [3] (🧍..🧏) person standing..deaf person +1F9D0..1F9E6 ; Emoji # 10.0 [23] (🧐..🧦) face with monocle..socks +1F9E7..1F9FF ; Emoji # 11.0 [25] (🧧..🧿) red envelope..nazar amulet +1FA70..1FA73 ; Emoji # 12.0 [4] (🩰..🩳) ballet shoes..shorts +1FA78..1FA7A ; Emoji # 12.0 [3] (🩸..🩺) drop of blood..stethoscope +1FA80..1FA82 ; Emoji # 12.0 [3] (🪀..🪂) yo-yo..parachute +1FA90..1FA95 ; Emoji # 12.0 [6] (🪐..🪕) ringed planet..banjo + +# Total elements: 1311 + +# ================================================ + +# All omitted code points have Emoji_Presentation=No +# @missing: 0000..10FFFF ; Emoji_Presentation ; No + +231A..231B ; Emoji_Presentation # 1.1 [2] (⌚..⌛) watch..hourglass done +23E9..23EC ; Emoji_Presentation # 6.0 [4] (⏩..⏬) fast-forward button..fast down button +23F0 ; Emoji_Presentation # 6.0 [1] (⏰) alarm clock +23F3 ; Emoji_Presentation # 6.0 [1] (⏳) hourglass not done +25FD..25FE ; Emoji_Presentation # 3.2 [2] (◽..◾) white medium-small square..black medium-small square +2614..2615 ; Emoji_Presentation # 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage +2648..2653 ; Emoji_Presentation # 1.1 [12] (♈..♓) Aries..Pisces +267F ; Emoji_Presentation # 4.1 [1] (♿) wheelchair symbol +2693 ; Emoji_Presentation # 4.1 [1] (⚓) anchor +26A1 ; Emoji_Presentation # 4.0 [1] (⚡) high voltage +26AA..26AB ; Emoji_Presentation # 4.1 [2] (⚪..⚫) white circle..black circle +26BD..26BE ; Emoji_Presentation # 5.2 [2] (⚽..⚾) soccer ball..baseball +26C4..26C5 ; Emoji_Presentation # 5.2 [2] (⛄..⛅) snowman without snow..sun behind cloud +26CE ; Emoji_Presentation # 6.0 [1] (⛎) Ophiuchus +26D4 ; Emoji_Presentation # 5.2 [1] (⛔) no entry +26EA ; Emoji_Presentation # 5.2 [1] (⛪) church +26F2..26F3 ; Emoji_Presentation # 5.2 [2] (⛲..⛳) fountain..flag in hole +26F5 ; Emoji_Presentation # 5.2 [1] (⛵) sailboat +26FA ; Emoji_Presentation # 5.2 [1] (⛺) tent +26FD ; Emoji_Presentation # 5.2 [1] (⛽) fuel pump +2705 ; Emoji_Presentation # 6.0 [1] (✅) check mark button +270A..270B ; Emoji_Presentation # 6.0 [2] (✊..✋) raised fist..raised hand +2728 ; Emoji_Presentation # 6.0 [1] (✨) sparkles +274C ; Emoji_Presentation # 6.0 [1] (❌) cross mark +274E ; Emoji_Presentation # 6.0 [1] (❎) cross mark button +2753..2755 ; Emoji_Presentation # 6.0 [3] (❓..❕) question mark..white exclamation mark +2757 ; Emoji_Presentation # 5.2 [1] (❗) exclamation mark +2795..2797 ; Emoji_Presentation # 6.0 [3] (➕..➗) plus sign..division sign +27B0 ; Emoji_Presentation # 6.0 [1] (➰) curly loop +27BF ; Emoji_Presentation # 6.0 [1] (➿) double curly loop +2B1B..2B1C ; Emoji_Presentation # 5.1 [2] (⬛..⬜) black large square..white large square +2B50 ; Emoji_Presentation # 5.1 [1] (⭐) star +2B55 ; Emoji_Presentation # 5.2 [1] (⭕) hollow red circle +1F004 ; Emoji_Presentation # 5.1 [1] (🀄) mahjong red dragon +1F0CF ; Emoji_Presentation # 6.0 [1] (🃏) joker +1F18E ; Emoji_Presentation # 6.0 [1] (🆎) AB button (blood type) +1F191..1F19A ; Emoji_Presentation # 6.0 [10] (🆑..🆚) CL button..VS button +1F1E6..1F1FF ; Emoji_Presentation # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z +1F201 ; Emoji_Presentation # 6.0 [1] (🈁) Japanese “here” button +1F21A ; Emoji_Presentation # 5.2 [1] (🈚) Japanese “free of charge” button +1F22F ; Emoji_Presentation # 5.2 [1] (🈯) Japanese “reserved” button +1F232..1F236 ; Emoji_Presentation # 6.0 [5] (🈲..🈶) Japanese “prohibited” button..Japanese “not free of charge” button +1F238..1F23A ; Emoji_Presentation # 6.0 [3] (🈸..🈺) Japanese “application” button..Japanese “open for business” button +1F250..1F251 ; Emoji_Presentation # 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button +1F300..1F320 ; Emoji_Presentation # 6.0 [33] (🌀..🌠) cyclone..shooting star +1F32D..1F32F ; Emoji_Presentation # 8.0 [3] (🌭..🌯) hot dog..burrito +1F330..1F335 ; Emoji_Presentation # 6.0 [6] (🌰..🌵) chestnut..cactus +1F337..1F37C ; Emoji_Presentation # 6.0 [70] (🌷..🍼) tulip..baby bottle +1F37E..1F37F ; Emoji_Presentation # 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn +1F380..1F393 ; Emoji_Presentation # 6.0 [20] (🎀..🎓) ribbon..graduation cap +1F3A0..1F3C4 ; Emoji_Presentation # 6.0 [37] (🎠..🏄) carousel horse..person surfing +1F3C5 ; Emoji_Presentation # 7.0 [1] (🏅) sports medal +1F3C6..1F3CA ; Emoji_Presentation # 6.0 [5] (🏆..🏊) trophy..person swimming +1F3CF..1F3D3 ; Emoji_Presentation # 8.0 [5] (🏏..🏓) cricket game..ping pong +1F3E0..1F3F0 ; Emoji_Presentation # 6.0 [17] (🏠..🏰) house..castle +1F3F4 ; Emoji_Presentation # 7.0 [1] (🏴) black flag +1F3F8..1F3FF ; Emoji_Presentation # 8.0 [8] (🏸..🏿) badminton..dark skin tone +1F400..1F43E ; Emoji_Presentation # 6.0 [63] (🐀..🐾) rat..paw prints +1F440 ; Emoji_Presentation # 6.0 [1] (👀) eyes +1F442..1F4F7 ; Emoji_Presentation # 6.0[182] (👂..📷) ear..camera +1F4F8 ; Emoji_Presentation # 7.0 [1] (📸) camera with flash +1F4F9..1F4FC ; Emoji_Presentation # 6.0 [4] (📹..📼) video camera..videocassette +1F4FF ; Emoji_Presentation # 8.0 [1] (📿) prayer beads +1F500..1F53D ; Emoji_Presentation # 6.0 [62] (🔀..🔽) shuffle tracks button..downwards button +1F54B..1F54E ; Emoji_Presentation # 8.0 [4] (🕋..🕎) kaaba..menorah +1F550..1F567 ; Emoji_Presentation # 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty +1F57A ; Emoji_Presentation # 9.0 [1] (🕺) man dancing +1F595..1F596 ; Emoji_Presentation # 7.0 [2] (🖕..🖖) middle finger..vulcan salute +1F5A4 ; Emoji_Presentation # 9.0 [1] (🖤) black heart +1F5FB..1F5FF ; Emoji_Presentation # 6.0 [5] (🗻..🗿) mount fuji..moai +1F600 ; Emoji_Presentation # 6.1 [1] (😀) grinning face +1F601..1F610 ; Emoji_Presentation # 6.0 [16] (😁..😐) beaming face with smiling eyes..neutral face +1F611 ; Emoji_Presentation # 6.1 [1] (😑) expressionless face +1F612..1F614 ; Emoji_Presentation # 6.0 [3] (😒..😔) unamused face..pensive face +1F615 ; Emoji_Presentation # 6.1 [1] (😕) confused face +1F616 ; Emoji_Presentation # 6.0 [1] (😖) confounded face +1F617 ; Emoji_Presentation # 6.1 [1] (😗) kissing face +1F618 ; Emoji_Presentation # 6.0 [1] (😘) face blowing a kiss +1F619 ; Emoji_Presentation # 6.1 [1] (😙) kissing face with smiling eyes +1F61A ; Emoji_Presentation # 6.0 [1] (😚) kissing face with closed eyes +1F61B ; Emoji_Presentation # 6.1 [1] (😛) face with tongue +1F61C..1F61E ; Emoji_Presentation # 6.0 [3] (😜..😞) winking face with tongue..disappointed face +1F61F ; Emoji_Presentation # 6.1 [1] (😟) worried face +1F620..1F625 ; Emoji_Presentation # 6.0 [6] (😠..😥) angry face..sad but relieved face +1F626..1F627 ; Emoji_Presentation # 6.1 [2] (😦..😧) frowning face with open mouth..anguished face +1F628..1F62B ; Emoji_Presentation # 6.0 [4] (😨..😫) fearful face..tired face +1F62C ; Emoji_Presentation # 6.1 [1] (😬) grimacing face +1F62D ; Emoji_Presentation # 6.0 [1] (😭) loudly crying face +1F62E..1F62F ; Emoji_Presentation # 6.1 [2] (😮..😯) face with open mouth..hushed face +1F630..1F633 ; Emoji_Presentation # 6.0 [4] (😰..😳) anxious face with sweat..flushed face +1F634 ; Emoji_Presentation # 6.1 [1] (😴) sleeping face +1F635..1F640 ; Emoji_Presentation # 6.0 [12] (😵..🙀) dizzy face..weary cat +1F641..1F642 ; Emoji_Presentation # 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face +1F643..1F644 ; Emoji_Presentation # 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes +1F645..1F64F ; Emoji_Presentation # 6.0 [11] (🙅..🙏) person gesturing NO..folded hands +1F680..1F6C5 ; Emoji_Presentation # 6.0 [70] (🚀..🛅) rocket..left luggage +1F6CC ; Emoji_Presentation # 7.0 [1] (🛌) person in bed +1F6D0 ; Emoji_Presentation # 8.0 [1] (🛐) place of worship +1F6D1..1F6D2 ; Emoji_Presentation # 9.0 [2] (🛑..🛒) stop sign..shopping cart +1F6D5 ; Emoji_Presentation # 12.0 [1] (🛕) hindu temple +1F6EB..1F6EC ; Emoji_Presentation # 7.0 [2] (🛫..🛬) airplane departure..airplane arrival +1F6F4..1F6F6 ; Emoji_Presentation # 9.0 [3] (🛴..🛶) kick scooter..canoe +1F6F7..1F6F8 ; Emoji_Presentation # 10.0 [2] (🛷..🛸) sled..flying saucer +1F6F9 ; Emoji_Presentation # 11.0 [1] (🛹) skateboard +1F6FA ; Emoji_Presentation # 12.0 [1] (🛺) auto rickshaw +1F7E0..1F7EB ; Emoji_Presentation # 12.0 [12] (🟠..🟫) orange circle..brown square +1F90D..1F90F ; Emoji_Presentation # 12.0 [3] (🤍..🤏) white heart..pinching hand +1F910..1F918 ; Emoji_Presentation # 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns +1F919..1F91E ; Emoji_Presentation # 9.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Emoji_Presentation # 10.0 [1] (🤟) love-you gesture +1F920..1F927 ; Emoji_Presentation # 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face +1F928..1F92F ; Emoji_Presentation # 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head +1F930 ; Emoji_Presentation # 9.0 [1] (🤰) pregnant woman +1F931..1F932 ; Emoji_Presentation # 10.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F93A ; Emoji_Presentation # 9.0 [8] (🤳..🤺) selfie..person fencing +1F93C..1F93E ; Emoji_Presentation # 9.0 [3] (🤼..🤾) people wrestling..person playing handball +1F93F ; Emoji_Presentation # 12.0 [1] (🤿) diving mask +1F940..1F945 ; Emoji_Presentation # 9.0 [6] (🥀..🥅) wilted flower..goal net +1F947..1F94B ; Emoji_Presentation # 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform +1F94C ; Emoji_Presentation # 10.0 [1] (🥌) curling stone +1F94D..1F94F ; Emoji_Presentation # 11.0 [3] (🥍..🥏) lacrosse..flying disc +1F950..1F95E ; Emoji_Presentation # 9.0 [15] (🥐..🥞) croissant..pancakes +1F95F..1F96B ; Emoji_Presentation # 10.0 [13] (🥟..🥫) dumpling..canned food +1F96C..1F970 ; Emoji_Presentation # 11.0 [5] (🥬..🥰) leafy green..smiling face with hearts +1F971 ; Emoji_Presentation # 12.0 [1] (🥱) yawning face +1F973..1F976 ; Emoji_Presentation # 11.0 [4] (🥳..🥶) partying face..cold face +1F97A ; Emoji_Presentation # 11.0 [1] (🥺) pleading face +1F97B ; Emoji_Presentation # 12.0 [1] (🥻) sari +1F97C..1F97F ; Emoji_Presentation # 11.0 [4] (🥼..🥿) lab coat..flat shoe +1F980..1F984 ; Emoji_Presentation # 8.0 [5] (🦀..🦄) crab..unicorn +1F985..1F991 ; Emoji_Presentation # 9.0 [13] (🦅..🦑) eagle..squid +1F992..1F997 ; Emoji_Presentation # 10.0 [6] (🦒..🦗) giraffe..cricket +1F998..1F9A2 ; Emoji_Presentation # 11.0 [11] (🦘..🦢) kangaroo..swan +1F9A5..1F9AA ; Emoji_Presentation # 12.0 [6] (🦥..🦪) sloth..oyster +1F9AE..1F9AF ; Emoji_Presentation # 12.0 [2] (🦮..🦯) guide dog..probing cane +1F9B0..1F9B9 ; Emoji_Presentation # 11.0 [10] (🦰..🦹) red hair..supervillain +1F9BA..1F9BF ; Emoji_Presentation # 12.0 [6] (🦺..🦿) safety vest..mechanical leg +1F9C0 ; Emoji_Presentation # 8.0 [1] (🧀) cheese wedge +1F9C1..1F9C2 ; Emoji_Presentation # 11.0 [2] (🧁..🧂) cupcake..salt +1F9C3..1F9CA ; Emoji_Presentation # 12.0 [8] (🧃..🧊) beverage box..ice cube +1F9CD..1F9CF ; Emoji_Presentation # 12.0 [3] (🧍..🧏) person standing..deaf person +1F9D0..1F9E6 ; Emoji_Presentation # 10.0 [23] (🧐..🧦) face with monocle..socks +1F9E7..1F9FF ; Emoji_Presentation # 11.0 [25] (🧧..🧿) red envelope..nazar amulet +1FA70..1FA73 ; Emoji_Presentation # 12.0 [4] (🩰..🩳) ballet shoes..shorts +1FA78..1FA7A ; Emoji_Presentation # 12.0 [3] (🩸..🩺) drop of blood..stethoscope +1FA80..1FA82 ; Emoji_Presentation # 12.0 [3] (🪀..🪂) yo-yo..parachute +1FA90..1FA95 ; Emoji_Presentation # 12.0 [6] (🪐..🪕) ringed planet..banjo + +# Total elements: 1093 + +# ================================================ + +# All omitted code points have Emoji_Modifier=No +# @missing: 0000..10FFFF ; Emoji_Modifier ; No + +1F3FB..1F3FF ; Emoji_Modifier # 8.0 [5] (🏻..🏿) light skin tone..dark skin tone + +# Total elements: 5 + +# ================================================ + +# All omitted code points have Emoji_Modifier_Base=No +# @missing: 0000..10FFFF ; Emoji_Modifier_Base ; No + +261D ; Emoji_Modifier_Base # 1.1 [1] (☝️) index pointing up +26F9 ; Emoji_Modifier_Base # 5.2 [1] (⛹️) person bouncing ball +270A..270B ; Emoji_Modifier_Base # 6.0 [2] (✊..✋) raised fist..raised hand +270C..270D ; Emoji_Modifier_Base # 1.1 [2] (✌️..✍️) victory hand..writing hand +1F385 ; Emoji_Modifier_Base # 6.0 [1] (🎅) Santa Claus +1F3C2..1F3C4 ; Emoji_Modifier_Base # 6.0 [3] (🏂..🏄) snowboarder..person surfing +1F3C7 ; Emoji_Modifier_Base # 6.0 [1] (🏇) horse racing +1F3CA ; Emoji_Modifier_Base # 6.0 [1] (🏊) person swimming +1F3CB..1F3CC ; Emoji_Modifier_Base # 7.0 [2] (🏋️..🏌️) person lifting weights..person golfing +1F442..1F443 ; Emoji_Modifier_Base # 6.0 [2] (👂..👃) ear..nose +1F446..1F450 ; Emoji_Modifier_Base # 6.0 [11] (👆..👐) backhand index pointing up..open hands +1F466..1F478 ; Emoji_Modifier_Base # 6.0 [19] (👦..👸) boy..princess +1F47C ; Emoji_Modifier_Base # 6.0 [1] (👼) baby angel +1F481..1F483 ; Emoji_Modifier_Base # 6.0 [3] (💁..💃) person tipping hand..woman dancing +1F485..1F487 ; Emoji_Modifier_Base # 6.0 [3] (💅..💇) nail polish..person getting haircut +1F48F ; Emoji_Modifier_Base # 6.0 [1] (💏) kiss +1F491 ; Emoji_Modifier_Base # 6.0 [1] (💑) couple with heart +1F4AA ; Emoji_Modifier_Base # 6.0 [1] (💪) flexed biceps +1F574..1F575 ; Emoji_Modifier_Base # 7.0 [2] (🕴️..🕵️) man in suit levitating..detective +1F57A ; Emoji_Modifier_Base # 9.0 [1] (🕺) man dancing +1F590 ; Emoji_Modifier_Base # 7.0 [1] (🖐️) hand with fingers splayed +1F595..1F596 ; Emoji_Modifier_Base # 7.0 [2] (🖕..🖖) middle finger..vulcan salute +1F645..1F647 ; Emoji_Modifier_Base # 6.0 [3] (🙅..🙇) person gesturing NO..person bowing +1F64B..1F64F ; Emoji_Modifier_Base # 6.0 [5] (🙋..🙏) person raising hand..folded hands +1F6A3 ; Emoji_Modifier_Base # 6.0 [1] (🚣) person rowing boat +1F6B4..1F6B6 ; Emoji_Modifier_Base # 6.0 [3] (🚴..🚶) person biking..person walking +1F6C0 ; Emoji_Modifier_Base # 6.0 [1] (🛀) person taking bath +1F6CC ; Emoji_Modifier_Base # 7.0 [1] (🛌) person in bed +1F90F ; Emoji_Modifier_Base # 12.0 [1] (🤏) pinching hand +1F918 ; Emoji_Modifier_Base # 8.0 [1] (🤘) sign of the horns +1F919..1F91E ; Emoji_Modifier_Base # 9.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Emoji_Modifier_Base # 10.0 [1] (🤟) love-you gesture +1F926 ; Emoji_Modifier_Base # 9.0 [1] (🤦) person facepalming +1F930 ; Emoji_Modifier_Base # 9.0 [1] (🤰) pregnant woman +1F931..1F932 ; Emoji_Modifier_Base # 10.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F939 ; Emoji_Modifier_Base # 9.0 [7] (🤳..🤹) selfie..person juggling +1F93C..1F93E ; Emoji_Modifier_Base # 9.0 [3] (🤼..🤾) people wrestling..person playing handball +1F9B5..1F9B6 ; Emoji_Modifier_Base # 11.0 [2] (🦵..🦶) leg..foot +1F9B8..1F9B9 ; Emoji_Modifier_Base # 11.0 [2] (🦸..🦹) superhero..supervillain +1F9BB ; Emoji_Modifier_Base # 12.0 [1] (🦻) ear with hearing aid +1F9CD..1F9CF ; Emoji_Modifier_Base # 12.0 [3] (🧍..🧏) person standing..deaf person +1F9D1..1F9DD ; Emoji_Modifier_Base # 10.0 [13] (🧑..🧝) person..elf + +# Total elements: 120 + +# ================================================ + +# All omitted code points have Emoji_Component=No +# @missing: 0000..10FFFF ; Emoji_Component ; No + +0023 ; Emoji_Component # 1.1 [1] (#️) number sign +002A ; Emoji_Component # 1.1 [1] (*️) asterisk +0030..0039 ; Emoji_Component # 1.1 [10] (0️..9️) digit zero..digit nine +200D ; Emoji_Component # 1.1 [1] (‍) zero width joiner +20E3 ; Emoji_Component # 3.0 [1] (⃣) combining enclosing keycap +FE0F ; Emoji_Component # 3.2 [1] () VARIATION SELECTOR-16 +1F1E6..1F1FF ; Emoji_Component # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z +1F3FB..1F3FF ; Emoji_Component # 8.0 [5] (🏻..🏿) light skin tone..dark skin tone +1F9B0..1F9B3 ; Emoji_Component # 11.0 [4] (🦰..🦳) red hair..white hair +E0020..E007F ; Emoji_Component # 3.1 [96] (󠀠..󠁿) tag space..cancel tag + +# Total elements: 146 + +# ================================================ + +# All omitted code points have Extended_Pictographic=No +# @missing: 0000..10FFFF ; Extended_Pictographic ; No + +00A9 ; Extended_Pictographic# 1.1 [1] (©️) copyright +00AE ; Extended_Pictographic# 1.1 [1] (®️) registered +203C ; Extended_Pictographic# 1.1 [1] (‼️) double exclamation mark +2049 ; Extended_Pictographic# 3.0 [1] (⁉️) exclamation question mark +2122 ; Extended_Pictographic# 1.1 [1] (™️) trade mark +2139 ; Extended_Pictographic# 3.0 [1] (ℹ️) information +2194..2199 ; Extended_Pictographic# 1.1 [6] (↔️..↙️) left-right arrow..down-left arrow +21A9..21AA ; Extended_Pictographic# 1.1 [2] (↩️..↪️) right arrow curving left..left arrow curving right +231A..231B ; Extended_Pictographic# 1.1 [2] (⌚..⌛) watch..hourglass done +2328 ; Extended_Pictographic# 1.1 [1] (⌨️) keyboard +2388 ; Extended_Pictographic# 3.0 [1] (⎈) HELM SYMBOL +23CF ; Extended_Pictographic# 4.0 [1] (⏏️) eject button +23E9..23F3 ; Extended_Pictographic# 6.0 [11] (⏩..⏳) fast-forward button..hourglass not done +23F8..23FA ; Extended_Pictographic# 7.0 [3] (⏸️..⏺️) pause button..record button +24C2 ; Extended_Pictographic# 1.1 [1] (Ⓜ️) circled M +25AA..25AB ; Extended_Pictographic# 1.1 [2] (▪️..▫️) black small square..white small square +25B6 ; Extended_Pictographic# 1.1 [1] (▶️) play button +25C0 ; Extended_Pictographic# 1.1 [1] (◀️) reverse button +25FB..25FE ; Extended_Pictographic# 3.2 [4] (◻️..◾) white medium square..black medium-small square +2600..2605 ; Extended_Pictographic# 1.1 [6] (☀️..★) sun..BLACK STAR +2607..2612 ; Extended_Pictographic# 1.1 [12] (☇..☒) LIGHTNING..BALLOT BOX WITH X +2614..2615 ; Extended_Pictographic# 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage +2616..2617 ; Extended_Pictographic# 3.2 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE +2618 ; Extended_Pictographic# 4.1 [1] (☘️) shamrock +2619 ; Extended_Pictographic# 3.0 [1] (☙) REVERSED ROTATED FLORAL HEART BULLET +261A..266F ; Extended_Pictographic# 1.1 [86] (☚..♯) BLACK LEFT POINTING INDEX..MUSIC SHARP SIGN +2670..2671 ; Extended_Pictographic# 3.0 [2] (♰..♱) WEST SYRIAC CROSS..EAST SYRIAC CROSS +2672..267D ; Extended_Pictographic# 3.2 [12] (♲..♽) UNIVERSAL RECYCLING SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL +267E..267F ; Extended_Pictographic# 4.1 [2] (♾️..♿) infinity..wheelchair symbol +2680..2685 ; Extended_Pictographic# 3.2 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 +2690..2691 ; Extended_Pictographic# 4.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG +2692..269C ; Extended_Pictographic# 4.1 [11] (⚒️..⚜️) hammer and pick..fleur-de-lis +269D ; Extended_Pictographic# 5.1 [1] (⚝) OUTLINED WHITE STAR +269E..269F ; Extended_Pictographic# 5.2 [2] (⚞..⚟) THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT +26A0..26A1 ; Extended_Pictographic# 4.0 [2] (⚠️..⚡) warning..high voltage +26A2..26B1 ; Extended_Pictographic# 4.1 [16] (⚢..⚱️) DOUBLED FEMALE SIGN..funeral urn +26B2 ; Extended_Pictographic# 5.0 [1] (⚲) NEUTER +26B3..26BC ; Extended_Pictographic# 5.1 [10] (⚳..⚼) CERES..SESQUIQUADRATE +26BD..26BF ; Extended_Pictographic# 5.2 [3] (⚽..⚿) soccer ball..SQUARED KEY +26C0..26C3 ; Extended_Pictographic# 5.1 [4] (⛀..⛃) WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING +26C4..26CD ; Extended_Pictographic# 5.2 [10] (⛄..⛍) snowman without snow..DISABLED CAR +26CE ; Extended_Pictographic# 6.0 [1] (⛎) Ophiuchus +26CF..26E1 ; Extended_Pictographic# 5.2 [19] (⛏️..⛡) pick..RESTRICTED LEFT ENTRY-2 +26E2 ; Extended_Pictographic# 6.0 [1] (⛢) ASTRONOMICAL SYMBOL FOR URANUS +26E3 ; Extended_Pictographic# 5.2 [1] (⛣) HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE +26E4..26E7 ; Extended_Pictographic# 6.0 [4] (⛤..⛧) PENTAGRAM..INVERTED PENTAGRAM +26E8..26FF ; Extended_Pictographic# 5.2 [24] (⛨..⛿) BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE +2700 ; Extended_Pictographic# 7.0 [1] (✀) BLACK SAFETY SCISSORS +2701..2704 ; Extended_Pictographic# 1.1 [4] (✁..✄) UPPER BLADE SCISSORS..WHITE SCISSORS +2705 ; Extended_Pictographic# 6.0 [1] (✅) check mark button +2708..2709 ; Extended_Pictographic# 1.1 [2] (✈️..✉️) airplane..envelope +270A..270B ; Extended_Pictographic# 6.0 [2] (✊..✋) raised fist..raised hand +270C..2712 ; Extended_Pictographic# 1.1 [7] (✌️..✒️) victory hand..black nib +2714 ; Extended_Pictographic# 1.1 [1] (✔️) check mark +2716 ; Extended_Pictographic# 1.1 [1] (✖️) multiplication sign +271D ; Extended_Pictographic# 1.1 [1] (✝️) latin cross +2721 ; Extended_Pictographic# 1.1 [1] (✡️) star of David +2728 ; Extended_Pictographic# 6.0 [1] (✨) sparkles +2733..2734 ; Extended_Pictographic# 1.1 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star +2744 ; Extended_Pictographic# 1.1 [1] (❄️) snowflake +2747 ; Extended_Pictographic# 1.1 [1] (❇️) sparkle +274C ; Extended_Pictographic# 6.0 [1] (❌) cross mark +274E ; Extended_Pictographic# 6.0 [1] (❎) cross mark button +2753..2755 ; Extended_Pictographic# 6.0 [3] (❓..❕) question mark..white exclamation mark +2757 ; Extended_Pictographic# 5.2 [1] (❗) exclamation mark +2763..2767 ; Extended_Pictographic# 1.1 [5] (❣️..❧) heart exclamation..ROTATED FLORAL HEART BULLET +2795..2797 ; Extended_Pictographic# 6.0 [3] (➕..➗) plus sign..division sign +27A1 ; Extended_Pictographic# 1.1 [1] (➡️) right arrow +27B0 ; Extended_Pictographic# 6.0 [1] (➰) curly loop +27BF ; Extended_Pictographic# 6.0 [1] (➿) double curly loop +2934..2935 ; Extended_Pictographic# 3.2 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down +2B05..2B07 ; Extended_Pictographic# 4.0 [3] (⬅️..⬇️) left arrow..down arrow +2B1B..2B1C ; Extended_Pictographic# 5.1 [2] (⬛..⬜) black large square..white large square +2B50 ; Extended_Pictographic# 5.1 [1] (⭐) star +2B55 ; Extended_Pictographic# 5.2 [1] (⭕) hollow red circle +3030 ; Extended_Pictographic# 1.1 [1] (〰️) wavy dash +303D ; Extended_Pictographic# 3.2 [1] (〽️) part alternation mark +3297 ; Extended_Pictographic# 1.1 [1] (㊗️) Japanese “congratulations” button +3299 ; Extended_Pictographic# 1.1 [1] (㊙️) Japanese “secret” button +1F000..1F02B ; Extended_Pictographic# 5.1 [44] (🀀..🀫) MAHJONG TILE EAST WIND..MAHJONG TILE BACK +1F02C..1F02F ; Extended_Pictographic# NA [4] (🀬..🀯) .. +1F030..1F093 ; Extended_Pictographic# 5.1[100] (🀰..🂓) DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 +1F094..1F09F ; Extended_Pictographic# NA [12] (🂔..🂟) .. +1F0A0..1F0AE ; Extended_Pictographic# 6.0 [15] (🂠..🂮) PLAYING CARD BACK..PLAYING CARD KING OF SPADES +1F0AF..1F0B0 ; Extended_Pictographic# NA [2] (🂯..🂰) .. +1F0B1..1F0BE ; Extended_Pictographic# 6.0 [14] (🂱..🂾) PLAYING CARD ACE OF HEARTS..PLAYING CARD KING OF HEARTS +1F0BF ; Extended_Pictographic# 7.0 [1] (🂿) PLAYING CARD RED JOKER +1F0C0 ; Extended_Pictographic# NA [1] (🃀) +1F0C1..1F0CF ; Extended_Pictographic# 6.0 [15] (🃁..🃏) PLAYING CARD ACE OF DIAMONDS..joker +1F0D0 ; Extended_Pictographic# NA [1] (🃐) +1F0D1..1F0DF ; Extended_Pictographic# 6.0 [15] (🃑..🃟) PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER +1F0E0..1F0F5 ; Extended_Pictographic# 7.0 [22] (🃠..🃵) PLAYING CARD FOOL..PLAYING CARD TRUMP-21 +1F0F6..1F0FF ; Extended_Pictographic# NA [10] (🃶..🃿) .. +1F10D..1F10F ; Extended_Pictographic# NA [3] (🄍..🄏) .. +1F12F ; Extended_Pictographic# 11.0 [1] (🄯) COPYLEFT SYMBOL +1F16C ; Extended_Pictographic# 12.0 [1] (🅬) RAISED MR SIGN +1F16D..1F16F ; Extended_Pictographic# NA [3] (🅭..🅯) .. +1F170..1F171 ; Extended_Pictographic# 6.0 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) +1F17E ; Extended_Pictographic# 6.0 [1] (🅾️) O button (blood type) +1F17F ; Extended_Pictographic# 5.2 [1] (🅿️) P button +1F18E ; Extended_Pictographic# 6.0 [1] (🆎) AB button (blood type) +1F191..1F19A ; Extended_Pictographic# 6.0 [10] (🆑..🆚) CL button..VS button +1F1AD..1F1E5 ; Extended_Pictographic# NA [57] (🆭..🇥) .. +1F201..1F202 ; Extended_Pictographic# 6.0 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button +1F203..1F20F ; Extended_Pictographic# NA [13] (🈃..🈏) .. +1F21A ; Extended_Pictographic# 5.2 [1] (🈚) Japanese “free of charge” button +1F22F ; Extended_Pictographic# 5.2 [1] (🈯) Japanese “reserved” button +1F232..1F23A ; Extended_Pictographic# 6.0 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button +1F23C..1F23F ; Extended_Pictographic# NA [4] (🈼..🈿) .. +1F249..1F24F ; Extended_Pictographic# NA [7] (🉉..🉏) .. +1F250..1F251 ; Extended_Pictographic# 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button +1F252..1F25F ; Extended_Pictographic# NA [14] (🉒..🉟) .. +1F260..1F265 ; Extended_Pictographic# 10.0 [6] (🉠..🉥) ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI +1F266..1F2FF ; Extended_Pictographic# NA[154] (🉦..🋿) .. +1F300..1F320 ; Extended_Pictographic# 6.0 [33] (🌀..🌠) cyclone..shooting star +1F321..1F32C ; Extended_Pictographic# 7.0 [12] (🌡️..🌬️) thermometer..wind face +1F32D..1F32F ; Extended_Pictographic# 8.0 [3] (🌭..🌯) hot dog..burrito +1F330..1F335 ; Extended_Pictographic# 6.0 [6] (🌰..🌵) chestnut..cactus +1F336 ; Extended_Pictographic# 7.0 [1] (🌶️) hot pepper +1F337..1F37C ; Extended_Pictographic# 6.0 [70] (🌷..🍼) tulip..baby bottle +1F37D ; Extended_Pictographic# 7.0 [1] (🍽️) fork and knife with plate +1F37E..1F37F ; Extended_Pictographic# 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn +1F380..1F393 ; Extended_Pictographic# 6.0 [20] (🎀..🎓) ribbon..graduation cap +1F394..1F39F ; Extended_Pictographic# 7.0 [12] (🎔..🎟️) HEART WITH TIP ON THE LEFT..admission tickets +1F3A0..1F3C4 ; Extended_Pictographic# 6.0 [37] (🎠..🏄) carousel horse..person surfing +1F3C5 ; Extended_Pictographic# 7.0 [1] (🏅) sports medal +1F3C6..1F3CA ; Extended_Pictographic# 6.0 [5] (🏆..🏊) trophy..person swimming +1F3CB..1F3CE ; Extended_Pictographic# 7.0 [4] (🏋️..🏎️) person lifting weights..racing car +1F3CF..1F3D3 ; Extended_Pictographic# 8.0 [5] (🏏..🏓) cricket game..ping pong +1F3D4..1F3DF ; Extended_Pictographic# 7.0 [12] (🏔️..🏟️) snow-capped mountain..stadium +1F3E0..1F3F0 ; Extended_Pictographic# 6.0 [17] (🏠..🏰) house..castle +1F3F1..1F3F7 ; Extended_Pictographic# 7.0 [7] (🏱..🏷️) WHITE PENNANT..label +1F3F8..1F3FA ; Extended_Pictographic# 8.0 [3] (🏸..🏺) badminton..amphora +1F400..1F43E ; Extended_Pictographic# 6.0 [63] (🐀..🐾) rat..paw prints +1F43F ; Extended_Pictographic# 7.0 [1] (🐿️) chipmunk +1F440 ; Extended_Pictographic# 6.0 [1] (👀) eyes +1F441 ; Extended_Pictographic# 7.0 [1] (👁️) eye +1F442..1F4F7 ; Extended_Pictographic# 6.0[182] (👂..📷) ear..camera +1F4F8 ; Extended_Pictographic# 7.0 [1] (📸) camera with flash +1F4F9..1F4FC ; Extended_Pictographic# 6.0 [4] (📹..📼) video camera..videocassette +1F4FD..1F4FE ; Extended_Pictographic# 7.0 [2] (📽️..📾) film projector..PORTABLE STEREO +1F4FF ; Extended_Pictographic# 8.0 [1] (📿) prayer beads +1F500..1F53D ; Extended_Pictographic# 6.0 [62] (🔀..🔽) shuffle tracks button..downwards button +1F546..1F54A ; Extended_Pictographic# 7.0 [5] (🕆..🕊️) WHITE LATIN CROSS..dove +1F54B..1F54F ; Extended_Pictographic# 8.0 [5] (🕋..🕏) kaaba..BOWL OF HYGIEIA +1F550..1F567 ; Extended_Pictographic# 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty +1F568..1F579 ; Extended_Pictographic# 7.0 [18] (🕨..🕹️) RIGHT SPEAKER..joystick +1F57A ; Extended_Pictographic# 9.0 [1] (🕺) man dancing +1F57B..1F5A3 ; Extended_Pictographic# 7.0 [41] (🕻..🖣) LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX +1F5A4 ; Extended_Pictographic# 9.0 [1] (🖤) black heart +1F5A5..1F5FA ; Extended_Pictographic# 7.0 [86] (🖥️..🗺️) desktop computer..world map +1F5FB..1F5FF ; Extended_Pictographic# 6.0 [5] (🗻..🗿) mount fuji..moai +1F600 ; Extended_Pictographic# 6.1 [1] (😀) grinning face +1F601..1F610 ; Extended_Pictographic# 6.0 [16] (😁..😐) beaming face with smiling eyes..neutral face +1F611 ; Extended_Pictographic# 6.1 [1] (😑) expressionless face +1F612..1F614 ; Extended_Pictographic# 6.0 [3] (😒..😔) unamused face..pensive face +1F615 ; Extended_Pictographic# 6.1 [1] (😕) confused face +1F616 ; Extended_Pictographic# 6.0 [1] (😖) confounded face +1F617 ; Extended_Pictographic# 6.1 [1] (😗) kissing face +1F618 ; Extended_Pictographic# 6.0 [1] (😘) face blowing a kiss +1F619 ; Extended_Pictographic# 6.1 [1] (😙) kissing face with smiling eyes +1F61A ; Extended_Pictographic# 6.0 [1] (😚) kissing face with closed eyes +1F61B ; Extended_Pictographic# 6.1 [1] (😛) face with tongue +1F61C..1F61E ; Extended_Pictographic# 6.0 [3] (😜..😞) winking face with tongue..disappointed face +1F61F ; Extended_Pictographic# 6.1 [1] (😟) worried face +1F620..1F625 ; Extended_Pictographic# 6.0 [6] (😠..😥) angry face..sad but relieved face +1F626..1F627 ; Extended_Pictographic# 6.1 [2] (😦..😧) frowning face with open mouth..anguished face +1F628..1F62B ; Extended_Pictographic# 6.0 [4] (😨..😫) fearful face..tired face +1F62C ; Extended_Pictographic# 6.1 [1] (😬) grimacing face +1F62D ; Extended_Pictographic# 6.0 [1] (😭) loudly crying face +1F62E..1F62F ; Extended_Pictographic# 6.1 [2] (😮..😯) face with open mouth..hushed face +1F630..1F633 ; Extended_Pictographic# 6.0 [4] (😰..😳) anxious face with sweat..flushed face +1F634 ; Extended_Pictographic# 6.1 [1] (😴) sleeping face +1F635..1F640 ; Extended_Pictographic# 6.0 [12] (😵..🙀) dizzy face..weary cat +1F641..1F642 ; Extended_Pictographic# 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face +1F643..1F644 ; Extended_Pictographic# 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes +1F645..1F64F ; Extended_Pictographic# 6.0 [11] (🙅..🙏) person gesturing NO..folded hands +1F680..1F6C5 ; Extended_Pictographic# 6.0 [70] (🚀..🛅) rocket..left luggage +1F6C6..1F6CF ; Extended_Pictographic# 7.0 [10] (🛆..🛏️) TRIANGLE WITH ROUNDED CORNERS..bed +1F6D0 ; Extended_Pictographic# 8.0 [1] (🛐) place of worship +1F6D1..1F6D2 ; Extended_Pictographic# 9.0 [2] (🛑..🛒) stop sign..shopping cart +1F6D3..1F6D4 ; Extended_Pictographic# 10.0 [2] (🛓..🛔) STUPA..PAGODA +1F6D5 ; Extended_Pictographic# 12.0 [1] (🛕) hindu temple +1F6D6..1F6DF ; Extended_Pictographic# NA [10] (🛖..🛟) .. +1F6E0..1F6EC ; Extended_Pictographic# 7.0 [13] (🛠️..🛬) hammer and wrench..airplane arrival +1F6ED..1F6EF ; Extended_Pictographic# NA [3] (🛭..🛯) .. +1F6F0..1F6F3 ; Extended_Pictographic# 7.0 [4] (🛰️..🛳️) satellite..passenger ship +1F6F4..1F6F6 ; Extended_Pictographic# 9.0 [3] (🛴..🛶) kick scooter..canoe +1F6F7..1F6F8 ; Extended_Pictographic# 10.0 [2] (🛷..🛸) sled..flying saucer +1F6F9 ; Extended_Pictographic# 11.0 [1] (🛹) skateboard +1F6FA ; Extended_Pictographic# 12.0 [1] (🛺) auto rickshaw +1F6FB..1F6FF ; Extended_Pictographic# NA [5] (🛻..🛿) .. +1F774..1F77F ; Extended_Pictographic# NA [12] (🝴..🝿) .. +1F7D5..1F7D8 ; Extended_Pictographic# 11.0 [4] (🟕..🟘) CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE +1F7D9..1F7DF ; Extended_Pictographic# NA [7] (🟙..🟟) .. +1F7E0..1F7EB ; Extended_Pictographic# 12.0 [12] (🟠..🟫) orange circle..brown square +1F7EC..1F7FF ; Extended_Pictographic# NA [20] (🟬..🟿) .. +1F80C..1F80F ; Extended_Pictographic# NA [4] (🠌..🠏) .. +1F848..1F84F ; Extended_Pictographic# NA [8] (🡈..🡏) .. +1F85A..1F85F ; Extended_Pictographic# NA [6] (🡚..🡟) .. +1F888..1F88F ; Extended_Pictographic# NA [8] (🢈..🢏) .. +1F8AE..1F8FF ; Extended_Pictographic# NA [82] (🢮..🣿) .. +1F90C ; Extended_Pictographic# NA [1] (🤌) +1F90D..1F90F ; Extended_Pictographic# 12.0 [3] (🤍..🤏) white heart..pinching hand +1F910..1F918 ; Extended_Pictographic# 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns +1F919..1F91E ; Extended_Pictographic# 9.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Extended_Pictographic# 10.0 [1] (🤟) love-you gesture +1F920..1F927 ; Extended_Pictographic# 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face +1F928..1F92F ; Extended_Pictographic# 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head +1F930 ; Extended_Pictographic# 9.0 [1] (🤰) pregnant woman +1F931..1F932 ; Extended_Pictographic# 10.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F93A ; Extended_Pictographic# 9.0 [8] (🤳..🤺) selfie..person fencing +1F93C..1F93E ; Extended_Pictographic# 9.0 [3] (🤼..🤾) people wrestling..person playing handball +1F93F ; Extended_Pictographic# 12.0 [1] (🤿) diving mask +1F940..1F945 ; Extended_Pictographic# 9.0 [6] (🥀..🥅) wilted flower..goal net +1F947..1F94B ; Extended_Pictographic# 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform +1F94C ; Extended_Pictographic# 10.0 [1] (🥌) curling stone +1F94D..1F94F ; Extended_Pictographic# 11.0 [3] (🥍..🥏) lacrosse..flying disc +1F950..1F95E ; Extended_Pictographic# 9.0 [15] (🥐..🥞) croissant..pancakes +1F95F..1F96B ; Extended_Pictographic# 10.0 [13] (🥟..🥫) dumpling..canned food +1F96C..1F970 ; Extended_Pictographic# 11.0 [5] (🥬..🥰) leafy green..smiling face with hearts +1F971 ; Extended_Pictographic# 12.0 [1] (🥱) yawning face +1F972 ; Extended_Pictographic# NA [1] (🥲) +1F973..1F976 ; Extended_Pictographic# 11.0 [4] (🥳..🥶) partying face..cold face +1F977..1F979 ; Extended_Pictographic# NA [3] (🥷..🥹) .. +1F97A ; Extended_Pictographic# 11.0 [1] (🥺) pleading face +1F97B ; Extended_Pictographic# 12.0 [1] (🥻) sari +1F97C..1F97F ; Extended_Pictographic# 11.0 [4] (🥼..🥿) lab coat..flat shoe +1F980..1F984 ; Extended_Pictographic# 8.0 [5] (🦀..🦄) crab..unicorn +1F985..1F991 ; Extended_Pictographic# 9.0 [13] (🦅..🦑) eagle..squid +1F992..1F997 ; Extended_Pictographic# 10.0 [6] (🦒..🦗) giraffe..cricket +1F998..1F9A2 ; Extended_Pictographic# 11.0 [11] (🦘..🦢) kangaroo..swan +1F9A3..1F9A4 ; Extended_Pictographic# NA [2] (🦣..🦤) .. +1F9A5..1F9AA ; Extended_Pictographic# 12.0 [6] (🦥..🦪) sloth..oyster +1F9AB..1F9AD ; Extended_Pictographic# NA [3] (🦫..🦭) .. +1F9AE..1F9AF ; Extended_Pictographic# 12.0 [2] (🦮..🦯) guide dog..probing cane +1F9B0..1F9B9 ; Extended_Pictographic# 11.0 [10] (🦰..🦹) red hair..supervillain +1F9BA..1F9BF ; Extended_Pictographic# 12.0 [6] (🦺..🦿) safety vest..mechanical leg +1F9C0 ; Extended_Pictographic# 8.0 [1] (🧀) cheese wedge +1F9C1..1F9C2 ; Extended_Pictographic# 11.0 [2] (🧁..🧂) cupcake..salt +1F9C3..1F9CA ; Extended_Pictographic# 12.0 [8] (🧃..🧊) beverage box..ice cube +1F9CB..1F9CC ; Extended_Pictographic# NA [2] (🧋..🧌) .. +1F9CD..1F9CF ; Extended_Pictographic# 12.0 [3] (🧍..🧏) person standing..deaf person +1F9D0..1F9E6 ; Extended_Pictographic# 10.0 [23] (🧐..🧦) face with monocle..socks +1F9E7..1F9FF ; Extended_Pictographic# 11.0 [25] (🧧..🧿) red envelope..nazar amulet +1FA00..1FA53 ; Extended_Pictographic# 12.0 [84] (🨀..🩓) NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP +1FA54..1FA5F ; Extended_Pictographic# NA [12] (🩔..🩟) .. +1FA60..1FA6D ; Extended_Pictographic# 11.0 [14] (🩠..🩭) XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER +1FA6E..1FA6F ; Extended_Pictographic# NA [2] (🩮..🩯) .. +1FA70..1FA73 ; Extended_Pictographic# 12.0 [4] (🩰..🩳) ballet shoes..shorts +1FA74..1FA77 ; Extended_Pictographic# NA [4] (🩴..🩷) .. +1FA78..1FA7A ; Extended_Pictographic# 12.0 [3] (🩸..🩺) drop of blood..stethoscope +1FA7B..1FA7F ; Extended_Pictographic# NA [5] (🩻..🩿) .. +1FA80..1FA82 ; Extended_Pictographic# 12.0 [3] (🪀..🪂) yo-yo..parachute +1FA83..1FA8F ; Extended_Pictographic# NA [13] (🪃..🪏) .. +1FA90..1FA95 ; Extended_Pictographic# 12.0 [6] (🪐..🪕) ringed planet..banjo +1FA96..1FFFD ; Extended_Pictographic# NA[1384] (🪖..🿽) .. + +# Total elements: 3793 + +#EOF \ No newline at end of file diff --git a/pkgs/characters/third_party/Unicode_Consortium/emoji_test.txt b/pkgs/characters/third_party/Unicode_Consortium/emoji_test.txt new file mode 100644 index 00000000..05b6f2c7 --- /dev/null +++ b/pkgs/characters/third_party/Unicode_Consortium/emoji_test.txt @@ -0,0 +1,3793 @@ +# emoji-test.txt +# Date: 2018-02-07, 09:44:06 GMT +# © 2018 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Emoji Keyboard/Display Test Data for UTS #51 +# Version: 11.0 +# +# For documentation and usage, see http://www.unicode.org/reports/tr51 +# +# This file provides data for testing which emoji forms should be in keyboards and which should also be displayed/processed. +# Format +# Code points; status # emoji name +# Status +# fully-qualified — see “Emoji Implementation Notes” in UTS #51 +# non-fully-qualified — see “Emoji Implementation Notes” in UTS #51 +# Notes: +# • This currently omits the 12 keycap bases, the 5 modifier characters, and 26 singleton Regional Indicator characters +# • The file is in CLDR order, not codepoint order. This is recommended (but not required!) for keyboard palettes. +# • The groups and subgroups are purely illustrative. See the Emoji Order chart for more information. + +# group: Smileys & People + +# subgroup: face-positive +1F600 ; fully-qualified # 😀 grinning face +1F601 ; fully-qualified # 😁 beaming face with smiling eyes +1F602 ; fully-qualified # 😂 face with tears of joy +1F923 ; fully-qualified # 🤣 rolling on the floor laughing +1F603 ; fully-qualified # 😃 grinning face with big eyes +1F604 ; fully-qualified # 😄 grinning face with smiling eyes +1F605 ; fully-qualified # 😅 grinning face with sweat +1F606 ; fully-qualified # 😆 grinning squinting face +1F609 ; fully-qualified # 😉 winking face +1F60A ; fully-qualified # 😊 smiling face with smiling eyes +1F60B ; fully-qualified # 😋 face savoring food +1F60E ; fully-qualified # 😎 smiling face with sunglasses +1F60D ; fully-qualified # 😍 smiling face with heart-eyes +1F618 ; fully-qualified # 😘 face blowing a kiss +1F970 ; fully-qualified # 🥰 smiling face with 3 hearts +1F617 ; fully-qualified # 😗 kissing face +1F619 ; fully-qualified # 😙 kissing face with smiling eyes +1F61A ; fully-qualified # 😚 kissing face with closed eyes +263A FE0F ; fully-qualified # ☺️ smiling face +263A ; non-fully-qualified # ☺ smiling face +1F642 ; fully-qualified # 🙂 slightly smiling face +1F917 ; fully-qualified # 🤗 hugging face +1F929 ; fully-qualified # 🤩 star-struck + +# subgroup: face-neutral +1F914 ; fully-qualified # 🤔 thinking face +1F928 ; fully-qualified # 🤨 face with raised eyebrow +1F610 ; fully-qualified # 😐 neutral face +1F611 ; fully-qualified # 😑 expressionless face +1F636 ; fully-qualified # 😶 face without mouth +1F644 ; fully-qualified # 🙄 face with rolling eyes +1F60F ; fully-qualified # 😏 smirking face +1F623 ; fully-qualified # 😣 persevering face +1F625 ; fully-qualified # 😥 sad but relieved face +1F62E ; fully-qualified # 😮 face with open mouth +1F910 ; fully-qualified # 🤐 zipper-mouth face +1F62F ; fully-qualified # 😯 hushed face +1F62A ; fully-qualified # 😪 sleepy face +1F62B ; fully-qualified # 😫 tired face +1F634 ; fully-qualified # 😴 sleeping face +1F60C ; fully-qualified # 😌 relieved face +1F61B ; fully-qualified # 😛 face with tongue +1F61C ; fully-qualified # 😜 winking face with tongue +1F61D ; fully-qualified # 😝 squinting face with tongue +1F924 ; fully-qualified # 🤤 drooling face +1F612 ; fully-qualified # 😒 unamused face +1F613 ; fully-qualified # 😓 downcast face with sweat +1F614 ; fully-qualified # 😔 pensive face +1F615 ; fully-qualified # 😕 confused face +1F643 ; fully-qualified # 🙃 upside-down face +1F911 ; fully-qualified # 🤑 money-mouth face +1F632 ; fully-qualified # 😲 astonished face + +# subgroup: face-negative +2639 FE0F ; fully-qualified # ☹️ frowning face +2639 ; non-fully-qualified # ☹ frowning face +1F641 ; fully-qualified # 🙁 slightly frowning face +1F616 ; fully-qualified # 😖 confounded face +1F61E ; fully-qualified # 😞 disappointed face +1F61F ; fully-qualified # 😟 worried face +1F624 ; fully-qualified # 😤 face with steam from nose +1F622 ; fully-qualified # 😢 crying face +1F62D ; fully-qualified # 😭 loudly crying face +1F626 ; fully-qualified # 😦 frowning face with open mouth +1F627 ; fully-qualified # 😧 anguished face +1F628 ; fully-qualified # 😨 fearful face +1F629 ; fully-qualified # 😩 weary face +1F92F ; fully-qualified # 🤯 exploding head +1F62C ; fully-qualified # 😬 grimacing face +1F630 ; fully-qualified # 😰 anxious face with sweat +1F631 ; fully-qualified # 😱 face screaming in fear +1F975 ; fully-qualified # 🥵 hot face +1F976 ; fully-qualified # 🥶 cold face +1F633 ; fully-qualified # 😳 flushed face +1F92A ; fully-qualified # 🤪 zany face +1F635 ; fully-qualified # 😵 dizzy face +1F621 ; fully-qualified # 😡 pouting face +1F620 ; fully-qualified # 😠 angry face +1F92C ; fully-qualified # 🤬 face with symbols on mouth + +# subgroup: face-sick +1F637 ; fully-qualified # 😷 face with medical mask +1F912 ; fully-qualified # 🤒 face with thermometer +1F915 ; fully-qualified # 🤕 face with head-bandage +1F922 ; fully-qualified # 🤢 nauseated face +1F92E ; fully-qualified # 🤮 face vomiting +1F927 ; fully-qualified # 🤧 sneezing face + +# subgroup: face-role +1F607 ; fully-qualified # 😇 smiling face with halo +1F920 ; fully-qualified # 🤠 cowboy hat face +1F973 ; fully-qualified # 🥳 partying face +1F974 ; fully-qualified # 🥴 woozy face +1F97A ; fully-qualified # 🥺 pleading face +1F925 ; fully-qualified # 🤥 lying face +1F92B ; fully-qualified # 🤫 shushing face +1F92D ; fully-qualified # 🤭 face with hand over mouth +1F9D0 ; fully-qualified # 🧐 face with monocle +1F913 ; fully-qualified # 🤓 nerd face + +# subgroup: face-fantasy +1F608 ; fully-qualified # 😈 smiling face with horns +1F47F ; fully-qualified # 👿 angry face with horns +1F921 ; fully-qualified # 🤡 clown face +1F479 ; fully-qualified # 👹 ogre +1F47A ; fully-qualified # 👺 goblin +1F480 ; fully-qualified # 💀 skull +2620 FE0F ; fully-qualified # ☠️ skull and crossbones +2620 ; non-fully-qualified # ☠ skull and crossbones +1F47B ; fully-qualified # 👻 ghost +1F47D ; fully-qualified # 👽 alien +1F47E ; fully-qualified # 👾 alien monster +1F916 ; fully-qualified # 🤖 robot face +1F4A9 ; fully-qualified # 💩 pile of poo + +# subgroup: cat-face +1F63A ; fully-qualified # 😺 grinning cat face +1F638 ; fully-qualified # 😸 grinning cat face with smiling eyes +1F639 ; fully-qualified # 😹 cat face with tears of joy +1F63B ; fully-qualified # 😻 smiling cat face with heart-eyes +1F63C ; fully-qualified # 😼 cat face with wry smile +1F63D ; fully-qualified # 😽 kissing cat face +1F640 ; fully-qualified # 🙀 weary cat face +1F63F ; fully-qualified # 😿 crying cat face +1F63E ; fully-qualified # 😾 pouting cat face + +# subgroup: monkey-face +1F648 ; fully-qualified # 🙈 see-no-evil monkey +1F649 ; fully-qualified # 🙉 hear-no-evil monkey +1F64A ; fully-qualified # 🙊 speak-no-evil monkey + +# subgroup: skin-tone +1F3FB ; fully-qualified # 🏻 light skin tone +1F3FC ; fully-qualified # 🏼 medium-light skin tone +1F3FD ; fully-qualified # 🏽 medium skin tone +1F3FE ; fully-qualified # 🏾 medium-dark skin tone +1F3FF ; fully-qualified # 🏿 dark skin tone + +# subgroup: person +1F476 ; fully-qualified # 👶 baby +1F476 1F3FB ; fully-qualified # 👶🏻 baby: light skin tone +1F476 1F3FC ; fully-qualified # 👶🏼 baby: medium-light skin tone +1F476 1F3FD ; fully-qualified # 👶🏽 baby: medium skin tone +1F476 1F3FE ; fully-qualified # 👶🏾 baby: medium-dark skin tone +1F476 1F3FF ; fully-qualified # 👶🏿 baby: dark skin tone +1F9D2 ; fully-qualified # 🧒 child +1F9D2 1F3FB ; fully-qualified # 🧒🏻 child: light skin tone +1F9D2 1F3FC ; fully-qualified # 🧒🏼 child: medium-light skin tone +1F9D2 1F3FD ; fully-qualified # 🧒🏽 child: medium skin tone +1F9D2 1F3FE ; fully-qualified # 🧒🏾 child: medium-dark skin tone +1F9D2 1F3FF ; fully-qualified # 🧒🏿 child: dark skin tone +1F466 ; fully-qualified # 👦 boy +1F466 1F3FB ; fully-qualified # 👦🏻 boy: light skin tone +1F466 1F3FC ; fully-qualified # 👦🏼 boy: medium-light skin tone +1F466 1F3FD ; fully-qualified # 👦🏽 boy: medium skin tone +1F466 1F3FE ; fully-qualified # 👦🏾 boy: medium-dark skin tone +1F466 1F3FF ; fully-qualified # 👦🏿 boy: dark skin tone +1F467 ; fully-qualified # 👧 girl +1F467 1F3FB ; fully-qualified # 👧🏻 girl: light skin tone +1F467 1F3FC ; fully-qualified # 👧🏼 girl: medium-light skin tone +1F467 1F3FD ; fully-qualified # 👧🏽 girl: medium skin tone +1F467 1F3FE ; fully-qualified # 👧🏾 girl: medium-dark skin tone +1F467 1F3FF ; fully-qualified # 👧🏿 girl: dark skin tone +1F9D1 ; fully-qualified # 🧑 adult +1F9D1 1F3FB ; fully-qualified # 🧑🏻 adult: light skin tone +1F9D1 1F3FC ; fully-qualified # 🧑🏼 adult: medium-light skin tone +1F9D1 1F3FD ; fully-qualified # 🧑🏽 adult: medium skin tone +1F9D1 1F3FE ; fully-qualified # 🧑🏾 adult: medium-dark skin tone +1F9D1 1F3FF ; fully-qualified # 🧑🏿 adult: dark skin tone +1F468 ; fully-qualified # 👨 man +1F468 1F3FB ; fully-qualified # 👨🏻 man: light skin tone +1F468 1F3FC ; fully-qualified # 👨🏼 man: medium-light skin tone +1F468 1F3FD ; fully-qualified # 👨🏽 man: medium skin tone +1F468 1F3FE ; fully-qualified # 👨🏾 man: medium-dark skin tone +1F468 1F3FF ; fully-qualified # 👨🏿 man: dark skin tone +1F469 ; fully-qualified # 👩 woman +1F469 1F3FB ; fully-qualified # 👩🏻 woman: light skin tone +1F469 1F3FC ; fully-qualified # 👩🏼 woman: medium-light skin tone +1F469 1F3FD ; fully-qualified # 👩🏽 woman: medium skin tone +1F469 1F3FE ; fully-qualified # 👩🏾 woman: medium-dark skin tone +1F469 1F3FF ; fully-qualified # 👩🏿 woman: dark skin tone +1F9D3 ; fully-qualified # 🧓 older adult +1F9D3 1F3FB ; fully-qualified # 🧓🏻 older adult: light skin tone +1F9D3 1F3FC ; fully-qualified # 🧓🏼 older adult: medium-light skin tone +1F9D3 1F3FD ; fully-qualified # 🧓🏽 older adult: medium skin tone +1F9D3 1F3FE ; fully-qualified # 🧓🏾 older adult: medium-dark skin tone +1F9D3 1F3FF ; fully-qualified # 🧓🏿 older adult: dark skin tone +1F474 ; fully-qualified # 👴 old man +1F474 1F3FB ; fully-qualified # 👴🏻 old man: light skin tone +1F474 1F3FC ; fully-qualified # 👴🏼 old man: medium-light skin tone +1F474 1F3FD ; fully-qualified # 👴🏽 old man: medium skin tone +1F474 1F3FE ; fully-qualified # 👴🏾 old man: medium-dark skin tone +1F474 1F3FF ; fully-qualified # 👴🏿 old man: dark skin tone +1F475 ; fully-qualified # 👵 old woman +1F475 1F3FB ; fully-qualified # 👵🏻 old woman: light skin tone +1F475 1F3FC ; fully-qualified # 👵🏼 old woman: medium-light skin tone +1F475 1F3FD ; fully-qualified # 👵🏽 old woman: medium skin tone +1F475 1F3FE ; fully-qualified # 👵🏾 old woman: medium-dark skin tone +1F475 1F3FF ; fully-qualified # 👵🏿 old woman: dark skin tone + +# subgroup: person-role +1F468 200D 2695 FE0F ; fully-qualified # 👨‍⚕️ man health worker +1F468 200D 2695 ; non-fully-qualified # 👨‍⚕ man health worker +1F468 1F3FB 200D 2695 FE0F ; fully-qualified # 👨🏻‍⚕️ man health worker: light skin tone +1F468 1F3FB 200D 2695 ; non-fully-qualified # 👨🏻‍⚕ man health worker: light skin tone +1F468 1F3FC 200D 2695 FE0F ; fully-qualified # 👨🏼‍⚕️ man health worker: medium-light skin tone +1F468 1F3FC 200D 2695 ; non-fully-qualified # 👨🏼‍⚕ man health worker: medium-light skin tone +1F468 1F3FD 200D 2695 FE0F ; fully-qualified # 👨🏽‍⚕️ man health worker: medium skin tone +1F468 1F3FD 200D 2695 ; non-fully-qualified # 👨🏽‍⚕ man health worker: medium skin tone +1F468 1F3FE 200D 2695 FE0F ; fully-qualified # 👨🏾‍⚕️ man health worker: medium-dark skin tone +1F468 1F3FE 200D 2695 ; non-fully-qualified # 👨🏾‍⚕ man health worker: medium-dark skin tone +1F468 1F3FF 200D 2695 FE0F ; fully-qualified # 👨🏿‍⚕️ man health worker: dark skin tone +1F468 1F3FF 200D 2695 ; non-fully-qualified # 👨🏿‍⚕ man health worker: dark skin tone +1F469 200D 2695 FE0F ; fully-qualified # 👩‍⚕️ woman health worker +1F469 200D 2695 ; non-fully-qualified # 👩‍⚕ woman health worker +1F469 1F3FB 200D 2695 FE0F ; fully-qualified # 👩🏻‍⚕️ woman health worker: light skin tone +1F469 1F3FB 200D 2695 ; non-fully-qualified # 👩🏻‍⚕ woman health worker: light skin tone +1F469 1F3FC 200D 2695 FE0F ; fully-qualified # 👩🏼‍⚕️ woman health worker: medium-light skin tone +1F469 1F3FC 200D 2695 ; non-fully-qualified # 👩🏼‍⚕ woman health worker: medium-light skin tone +1F469 1F3FD 200D 2695 FE0F ; fully-qualified # 👩🏽‍⚕️ woman health worker: medium skin tone +1F469 1F3FD 200D 2695 ; non-fully-qualified # 👩🏽‍⚕ woman health worker: medium skin tone +1F469 1F3FE 200D 2695 FE0F ; fully-qualified # 👩🏾‍⚕️ woman health worker: medium-dark skin tone +1F469 1F3FE 200D 2695 ; non-fully-qualified # 👩🏾‍⚕ woman health worker: medium-dark skin tone +1F469 1F3FF 200D 2695 FE0F ; fully-qualified # 👩🏿‍⚕️ woman health worker: dark skin tone +1F469 1F3FF 200D 2695 ; non-fully-qualified # 👩🏿‍⚕ woman health worker: dark skin tone +1F468 200D 1F393 ; fully-qualified # 👨‍🎓 man student +1F468 1F3FB 200D 1F393 ; fully-qualified # 👨🏻‍🎓 man student: light skin tone +1F468 1F3FC 200D 1F393 ; fully-qualified # 👨🏼‍🎓 man student: medium-light skin tone +1F468 1F3FD 200D 1F393 ; fully-qualified # 👨🏽‍🎓 man student: medium skin tone +1F468 1F3FE 200D 1F393 ; fully-qualified # 👨🏾‍🎓 man student: medium-dark skin tone +1F468 1F3FF 200D 1F393 ; fully-qualified # 👨🏿‍🎓 man student: dark skin tone +1F469 200D 1F393 ; fully-qualified # 👩‍🎓 woman student +1F469 1F3FB 200D 1F393 ; fully-qualified # 👩🏻‍🎓 woman student: light skin tone +1F469 1F3FC 200D 1F393 ; fully-qualified # 👩🏼‍🎓 woman student: medium-light skin tone +1F469 1F3FD 200D 1F393 ; fully-qualified # 👩🏽‍🎓 woman student: medium skin tone +1F469 1F3FE 200D 1F393 ; fully-qualified # 👩🏾‍🎓 woman student: medium-dark skin tone +1F469 1F3FF 200D 1F393 ; fully-qualified # 👩🏿‍🎓 woman student: dark skin tone +1F468 200D 1F3EB ; fully-qualified # 👨‍🏫 man teacher +1F468 1F3FB 200D 1F3EB ; fully-qualified # 👨🏻‍🏫 man teacher: light skin tone +1F468 1F3FC 200D 1F3EB ; fully-qualified # 👨🏼‍🏫 man teacher: medium-light skin tone +1F468 1F3FD 200D 1F3EB ; fully-qualified # 👨🏽‍🏫 man teacher: medium skin tone +1F468 1F3FE 200D 1F3EB ; fully-qualified # 👨🏾‍🏫 man teacher: medium-dark skin tone +1F468 1F3FF 200D 1F3EB ; fully-qualified # 👨🏿‍🏫 man teacher: dark skin tone +1F469 200D 1F3EB ; fully-qualified # 👩‍🏫 woman teacher +1F469 1F3FB 200D 1F3EB ; fully-qualified # 👩🏻‍🏫 woman teacher: light skin tone +1F469 1F3FC 200D 1F3EB ; fully-qualified # 👩🏼‍🏫 woman teacher: medium-light skin tone +1F469 1F3FD 200D 1F3EB ; fully-qualified # 👩🏽‍🏫 woman teacher: medium skin tone +1F469 1F3FE 200D 1F3EB ; fully-qualified # 👩🏾‍🏫 woman teacher: medium-dark skin tone +1F469 1F3FF 200D 1F3EB ; fully-qualified # 👩🏿‍🏫 woman teacher: dark skin tone +1F468 200D 2696 FE0F ; fully-qualified # 👨‍⚖️ man judge +1F468 200D 2696 ; non-fully-qualified # 👨‍⚖ man judge +1F468 1F3FB 200D 2696 FE0F ; fully-qualified # 👨🏻‍⚖️ man judge: light skin tone +1F468 1F3FB 200D 2696 ; non-fully-qualified # 👨🏻‍⚖ man judge: light skin tone +1F468 1F3FC 200D 2696 FE0F ; fully-qualified # 👨🏼‍⚖️ man judge: medium-light skin tone +1F468 1F3FC 200D 2696 ; non-fully-qualified # 👨🏼‍⚖ man judge: medium-light skin tone +1F468 1F3FD 200D 2696 FE0F ; fully-qualified # 👨🏽‍⚖️ man judge: medium skin tone +1F468 1F3FD 200D 2696 ; non-fully-qualified # 👨🏽‍⚖ man judge: medium skin tone +1F468 1F3FE 200D 2696 FE0F ; fully-qualified # 👨🏾‍⚖️ man judge: medium-dark skin tone +1F468 1F3FE 200D 2696 ; non-fully-qualified # 👨🏾‍⚖ man judge: medium-dark skin tone +1F468 1F3FF 200D 2696 FE0F ; fully-qualified # 👨🏿‍⚖️ man judge: dark skin tone +1F468 1F3FF 200D 2696 ; non-fully-qualified # 👨🏿‍⚖ man judge: dark skin tone +1F469 200D 2696 FE0F ; fully-qualified # 👩‍⚖️ woman judge +1F469 200D 2696 ; non-fully-qualified # 👩‍⚖ woman judge +1F469 1F3FB 200D 2696 FE0F ; fully-qualified # 👩🏻‍⚖️ woman judge: light skin tone +1F469 1F3FB 200D 2696 ; non-fully-qualified # 👩🏻‍⚖ woman judge: light skin tone +1F469 1F3FC 200D 2696 FE0F ; fully-qualified # 👩🏼‍⚖️ woman judge: medium-light skin tone +1F469 1F3FC 200D 2696 ; non-fully-qualified # 👩🏼‍⚖ woman judge: medium-light skin tone +1F469 1F3FD 200D 2696 FE0F ; fully-qualified # 👩🏽‍⚖️ woman judge: medium skin tone +1F469 1F3FD 200D 2696 ; non-fully-qualified # 👩🏽‍⚖ woman judge: medium skin tone +1F469 1F3FE 200D 2696 FE0F ; fully-qualified # 👩🏾‍⚖️ woman judge: medium-dark skin tone +1F469 1F3FE 200D 2696 ; non-fully-qualified # 👩🏾‍⚖ woman judge: medium-dark skin tone +1F469 1F3FF 200D 2696 FE0F ; fully-qualified # 👩🏿‍⚖️ woman judge: dark skin tone +1F469 1F3FF 200D 2696 ; non-fully-qualified # 👩🏿‍⚖ woman judge: dark skin tone +1F468 200D 1F33E ; fully-qualified # 👨‍🌾 man farmer +1F468 1F3FB 200D 1F33E ; fully-qualified # 👨🏻‍🌾 man farmer: light skin tone +1F468 1F3FC 200D 1F33E ; fully-qualified # 👨🏼‍🌾 man farmer: medium-light skin tone +1F468 1F3FD 200D 1F33E ; fully-qualified # 👨🏽‍🌾 man farmer: medium skin tone +1F468 1F3FE 200D 1F33E ; fully-qualified # 👨🏾‍🌾 man farmer: medium-dark skin tone +1F468 1F3FF 200D 1F33E ; fully-qualified # 👨🏿‍🌾 man farmer: dark skin tone +1F469 200D 1F33E ; fully-qualified # 👩‍🌾 woman farmer +1F469 1F3FB 200D 1F33E ; fully-qualified # 👩🏻‍🌾 woman farmer: light skin tone +1F469 1F3FC 200D 1F33E ; fully-qualified # 👩🏼‍🌾 woman farmer: medium-light skin tone +1F469 1F3FD 200D 1F33E ; fully-qualified # 👩🏽‍🌾 woman farmer: medium skin tone +1F469 1F3FE 200D 1F33E ; fully-qualified # 👩🏾‍🌾 woman farmer: medium-dark skin tone +1F469 1F3FF 200D 1F33E ; fully-qualified # 👩🏿‍🌾 woman farmer: dark skin tone +1F468 200D 1F373 ; fully-qualified # 👨‍🍳 man cook +1F468 1F3FB 200D 1F373 ; fully-qualified # 👨🏻‍🍳 man cook: light skin tone +1F468 1F3FC 200D 1F373 ; fully-qualified # 👨🏼‍🍳 man cook: medium-light skin tone +1F468 1F3FD 200D 1F373 ; fully-qualified # 👨🏽‍🍳 man cook: medium skin tone +1F468 1F3FE 200D 1F373 ; fully-qualified # 👨🏾‍🍳 man cook: medium-dark skin tone +1F468 1F3FF 200D 1F373 ; fully-qualified # 👨🏿‍🍳 man cook: dark skin tone +1F469 200D 1F373 ; fully-qualified # 👩‍🍳 woman cook +1F469 1F3FB 200D 1F373 ; fully-qualified # 👩🏻‍🍳 woman cook: light skin tone +1F469 1F3FC 200D 1F373 ; fully-qualified # 👩🏼‍🍳 woman cook: medium-light skin tone +1F469 1F3FD 200D 1F373 ; fully-qualified # 👩🏽‍🍳 woman cook: medium skin tone +1F469 1F3FE 200D 1F373 ; fully-qualified # 👩🏾‍🍳 woman cook: medium-dark skin tone +1F469 1F3FF 200D 1F373 ; fully-qualified # 👩🏿‍🍳 woman cook: dark skin tone +1F468 200D 1F527 ; fully-qualified # 👨‍🔧 man mechanic +1F468 1F3FB 200D 1F527 ; fully-qualified # 👨🏻‍🔧 man mechanic: light skin tone +1F468 1F3FC 200D 1F527 ; fully-qualified # 👨🏼‍🔧 man mechanic: medium-light skin tone +1F468 1F3FD 200D 1F527 ; fully-qualified # 👨🏽‍🔧 man mechanic: medium skin tone +1F468 1F3FE 200D 1F527 ; fully-qualified # 👨🏾‍🔧 man mechanic: medium-dark skin tone +1F468 1F3FF 200D 1F527 ; fully-qualified # 👨🏿‍🔧 man mechanic: dark skin tone +1F469 200D 1F527 ; fully-qualified # 👩‍🔧 woman mechanic +1F469 1F3FB 200D 1F527 ; fully-qualified # 👩🏻‍🔧 woman mechanic: light skin tone +1F469 1F3FC 200D 1F527 ; fully-qualified # 👩🏼‍🔧 woman mechanic: medium-light skin tone +1F469 1F3FD 200D 1F527 ; fully-qualified # 👩🏽‍🔧 woman mechanic: medium skin tone +1F469 1F3FE 200D 1F527 ; fully-qualified # 👩🏾‍🔧 woman mechanic: medium-dark skin tone +1F469 1F3FF 200D 1F527 ; fully-qualified # 👩🏿‍🔧 woman mechanic: dark skin tone +1F468 200D 1F3ED ; fully-qualified # 👨‍🏭 man factory worker +1F468 1F3FB 200D 1F3ED ; fully-qualified # 👨🏻‍🏭 man factory worker: light skin tone +1F468 1F3FC 200D 1F3ED ; fully-qualified # 👨🏼‍🏭 man factory worker: medium-light skin tone +1F468 1F3FD 200D 1F3ED ; fully-qualified # 👨🏽‍🏭 man factory worker: medium skin tone +1F468 1F3FE 200D 1F3ED ; fully-qualified # 👨🏾‍🏭 man factory worker: medium-dark skin tone +1F468 1F3FF 200D 1F3ED ; fully-qualified # 👨🏿‍🏭 man factory worker: dark skin tone +1F469 200D 1F3ED ; fully-qualified # 👩‍🏭 woman factory worker +1F469 1F3FB 200D 1F3ED ; fully-qualified # 👩🏻‍🏭 woman factory worker: light skin tone +1F469 1F3FC 200D 1F3ED ; fully-qualified # 👩🏼‍🏭 woman factory worker: medium-light skin tone +1F469 1F3FD 200D 1F3ED ; fully-qualified # 👩🏽‍🏭 woman factory worker: medium skin tone +1F469 1F3FE 200D 1F3ED ; fully-qualified # 👩🏾‍🏭 woman factory worker: medium-dark skin tone +1F469 1F3FF 200D 1F3ED ; fully-qualified # 👩🏿‍🏭 woman factory worker: dark skin tone +1F468 200D 1F4BC ; fully-qualified # 👨‍💼 man office worker +1F468 1F3FB 200D 1F4BC ; fully-qualified # 👨🏻‍💼 man office worker: light skin tone +1F468 1F3FC 200D 1F4BC ; fully-qualified # 👨🏼‍💼 man office worker: medium-light skin tone +1F468 1F3FD 200D 1F4BC ; fully-qualified # 👨🏽‍💼 man office worker: medium skin tone +1F468 1F3FE 200D 1F4BC ; fully-qualified # 👨🏾‍💼 man office worker: medium-dark skin tone +1F468 1F3FF 200D 1F4BC ; fully-qualified # 👨🏿‍💼 man office worker: dark skin tone +1F469 200D 1F4BC ; fully-qualified # 👩‍💼 woman office worker +1F469 1F3FB 200D 1F4BC ; fully-qualified # 👩🏻‍💼 woman office worker: light skin tone +1F469 1F3FC 200D 1F4BC ; fully-qualified # 👩🏼‍💼 woman office worker: medium-light skin tone +1F469 1F3FD 200D 1F4BC ; fully-qualified # 👩🏽‍💼 woman office worker: medium skin tone +1F469 1F3FE 200D 1F4BC ; fully-qualified # 👩🏾‍💼 woman office worker: medium-dark skin tone +1F469 1F3FF 200D 1F4BC ; fully-qualified # 👩🏿‍💼 woman office worker: dark skin tone +1F468 200D 1F52C ; fully-qualified # 👨‍🔬 man scientist +1F468 1F3FB 200D 1F52C ; fully-qualified # 👨🏻‍🔬 man scientist: light skin tone +1F468 1F3FC 200D 1F52C ; fully-qualified # 👨🏼‍🔬 man scientist: medium-light skin tone +1F468 1F3FD 200D 1F52C ; fully-qualified # 👨🏽‍🔬 man scientist: medium skin tone +1F468 1F3FE 200D 1F52C ; fully-qualified # 👨🏾‍🔬 man scientist: medium-dark skin tone +1F468 1F3FF 200D 1F52C ; fully-qualified # 👨🏿‍🔬 man scientist: dark skin tone +1F469 200D 1F52C ; fully-qualified # 👩‍🔬 woman scientist +1F469 1F3FB 200D 1F52C ; fully-qualified # 👩🏻‍🔬 woman scientist: light skin tone +1F469 1F3FC 200D 1F52C ; fully-qualified # 👩🏼‍🔬 woman scientist: medium-light skin tone +1F469 1F3FD 200D 1F52C ; fully-qualified # 👩🏽‍🔬 woman scientist: medium skin tone +1F469 1F3FE 200D 1F52C ; fully-qualified # 👩🏾‍🔬 woman scientist: medium-dark skin tone +1F469 1F3FF 200D 1F52C ; fully-qualified # 👩🏿‍🔬 woman scientist: dark skin tone +1F468 200D 1F4BB ; fully-qualified # 👨‍💻 man technologist +1F468 1F3FB 200D 1F4BB ; fully-qualified # 👨🏻‍💻 man technologist: light skin tone +1F468 1F3FC 200D 1F4BB ; fully-qualified # 👨🏼‍💻 man technologist: medium-light skin tone +1F468 1F3FD 200D 1F4BB ; fully-qualified # 👨🏽‍💻 man technologist: medium skin tone +1F468 1F3FE 200D 1F4BB ; fully-qualified # 👨🏾‍💻 man technologist: medium-dark skin tone +1F468 1F3FF 200D 1F4BB ; fully-qualified # 👨🏿‍💻 man technologist: dark skin tone +1F469 200D 1F4BB ; fully-qualified # 👩‍💻 woman technologist +1F469 1F3FB 200D 1F4BB ; fully-qualified # 👩🏻‍💻 woman technologist: light skin tone +1F469 1F3FC 200D 1F4BB ; fully-qualified # 👩🏼‍💻 woman technologist: medium-light skin tone +1F469 1F3FD 200D 1F4BB ; fully-qualified # 👩🏽‍💻 woman technologist: medium skin tone +1F469 1F3FE 200D 1F4BB ; fully-qualified # 👩🏾‍💻 woman technologist: medium-dark skin tone +1F469 1F3FF 200D 1F4BB ; fully-qualified # 👩🏿‍💻 woman technologist: dark skin tone +1F468 200D 1F3A4 ; fully-qualified # 👨‍🎤 man singer +1F468 1F3FB 200D 1F3A4 ; fully-qualified # 👨🏻‍🎤 man singer: light skin tone +1F468 1F3FC 200D 1F3A4 ; fully-qualified # 👨🏼‍🎤 man singer: medium-light skin tone +1F468 1F3FD 200D 1F3A4 ; fully-qualified # 👨🏽‍🎤 man singer: medium skin tone +1F468 1F3FE 200D 1F3A4 ; fully-qualified # 👨🏾‍🎤 man singer: medium-dark skin tone +1F468 1F3FF 200D 1F3A4 ; fully-qualified # 👨🏿‍🎤 man singer: dark skin tone +1F469 200D 1F3A4 ; fully-qualified # 👩‍🎤 woman singer +1F469 1F3FB 200D 1F3A4 ; fully-qualified # 👩🏻‍🎤 woman singer: light skin tone +1F469 1F3FC 200D 1F3A4 ; fully-qualified # 👩🏼‍🎤 woman singer: medium-light skin tone +1F469 1F3FD 200D 1F3A4 ; fully-qualified # 👩🏽‍🎤 woman singer: medium skin tone +1F469 1F3FE 200D 1F3A4 ; fully-qualified # 👩🏾‍🎤 woman singer: medium-dark skin tone +1F469 1F3FF 200D 1F3A4 ; fully-qualified # 👩🏿‍🎤 woman singer: dark skin tone +1F468 200D 1F3A8 ; fully-qualified # 👨‍🎨 man artist +1F468 1F3FB 200D 1F3A8 ; fully-qualified # 👨🏻‍🎨 man artist: light skin tone +1F468 1F3FC 200D 1F3A8 ; fully-qualified # 👨🏼‍🎨 man artist: medium-light skin tone +1F468 1F3FD 200D 1F3A8 ; fully-qualified # 👨🏽‍🎨 man artist: medium skin tone +1F468 1F3FE 200D 1F3A8 ; fully-qualified # 👨🏾‍🎨 man artist: medium-dark skin tone +1F468 1F3FF 200D 1F3A8 ; fully-qualified # 👨🏿‍🎨 man artist: dark skin tone +1F469 200D 1F3A8 ; fully-qualified # 👩‍🎨 woman artist +1F469 1F3FB 200D 1F3A8 ; fully-qualified # 👩🏻‍🎨 woman artist: light skin tone +1F469 1F3FC 200D 1F3A8 ; fully-qualified # 👩🏼‍🎨 woman artist: medium-light skin tone +1F469 1F3FD 200D 1F3A8 ; fully-qualified # 👩🏽‍🎨 woman artist: medium skin tone +1F469 1F3FE 200D 1F3A8 ; fully-qualified # 👩🏾‍🎨 woman artist: medium-dark skin tone +1F469 1F3FF 200D 1F3A8 ; fully-qualified # 👩🏿‍🎨 woman artist: dark skin tone +1F468 200D 2708 FE0F ; fully-qualified # 👨‍✈️ man pilot +1F468 200D 2708 ; non-fully-qualified # 👨‍✈ man pilot +1F468 1F3FB 200D 2708 FE0F ; fully-qualified # 👨🏻‍✈️ man pilot: light skin tone +1F468 1F3FB 200D 2708 ; non-fully-qualified # 👨🏻‍✈ man pilot: light skin tone +1F468 1F3FC 200D 2708 FE0F ; fully-qualified # 👨🏼‍✈️ man pilot: medium-light skin tone +1F468 1F3FC 200D 2708 ; non-fully-qualified # 👨🏼‍✈ man pilot: medium-light skin tone +1F468 1F3FD 200D 2708 FE0F ; fully-qualified # 👨🏽‍✈️ man pilot: medium skin tone +1F468 1F3FD 200D 2708 ; non-fully-qualified # 👨🏽‍✈ man pilot: medium skin tone +1F468 1F3FE 200D 2708 FE0F ; fully-qualified # 👨🏾‍✈️ man pilot: medium-dark skin tone +1F468 1F3FE 200D 2708 ; non-fully-qualified # 👨🏾‍✈ man pilot: medium-dark skin tone +1F468 1F3FF 200D 2708 FE0F ; fully-qualified # 👨🏿‍✈️ man pilot: dark skin tone +1F468 1F3FF 200D 2708 ; non-fully-qualified # 👨🏿‍✈ man pilot: dark skin tone +1F469 200D 2708 FE0F ; fully-qualified # 👩‍✈️ woman pilot +1F469 200D 2708 ; non-fully-qualified # 👩‍✈ woman pilot +1F469 1F3FB 200D 2708 FE0F ; fully-qualified # 👩🏻‍✈️ woman pilot: light skin tone +1F469 1F3FB 200D 2708 ; non-fully-qualified # 👩🏻‍✈ woman pilot: light skin tone +1F469 1F3FC 200D 2708 FE0F ; fully-qualified # 👩🏼‍✈️ woman pilot: medium-light skin tone +1F469 1F3FC 200D 2708 ; non-fully-qualified # 👩🏼‍✈ woman pilot: medium-light skin tone +1F469 1F3FD 200D 2708 FE0F ; fully-qualified # 👩🏽‍✈️ woman pilot: medium skin tone +1F469 1F3FD 200D 2708 ; non-fully-qualified # 👩🏽‍✈ woman pilot: medium skin tone +1F469 1F3FE 200D 2708 FE0F ; fully-qualified # 👩🏾‍✈️ woman pilot: medium-dark skin tone +1F469 1F3FE 200D 2708 ; non-fully-qualified # 👩🏾‍✈ woman pilot: medium-dark skin tone +1F469 1F3FF 200D 2708 FE0F ; fully-qualified # 👩🏿‍✈️ woman pilot: dark skin tone +1F469 1F3FF 200D 2708 ; non-fully-qualified # 👩🏿‍✈ woman pilot: dark skin tone +1F468 200D 1F680 ; fully-qualified # 👨‍🚀 man astronaut +1F468 1F3FB 200D 1F680 ; fully-qualified # 👨🏻‍🚀 man astronaut: light skin tone +1F468 1F3FC 200D 1F680 ; fully-qualified # 👨🏼‍🚀 man astronaut: medium-light skin tone +1F468 1F3FD 200D 1F680 ; fully-qualified # 👨🏽‍🚀 man astronaut: medium skin tone +1F468 1F3FE 200D 1F680 ; fully-qualified # 👨🏾‍🚀 man astronaut: medium-dark skin tone +1F468 1F3FF 200D 1F680 ; fully-qualified # 👨🏿‍🚀 man astronaut: dark skin tone +1F469 200D 1F680 ; fully-qualified # 👩‍🚀 woman astronaut +1F469 1F3FB 200D 1F680 ; fully-qualified # 👩🏻‍🚀 woman astronaut: light skin tone +1F469 1F3FC 200D 1F680 ; fully-qualified # 👩🏼‍🚀 woman astronaut: medium-light skin tone +1F469 1F3FD 200D 1F680 ; fully-qualified # 👩🏽‍🚀 woman astronaut: medium skin tone +1F469 1F3FE 200D 1F680 ; fully-qualified # 👩🏾‍🚀 woman astronaut: medium-dark skin tone +1F469 1F3FF 200D 1F680 ; fully-qualified # 👩🏿‍🚀 woman astronaut: dark skin tone +1F468 200D 1F692 ; fully-qualified # 👨‍🚒 man firefighter +1F468 1F3FB 200D 1F692 ; fully-qualified # 👨🏻‍🚒 man firefighter: light skin tone +1F468 1F3FC 200D 1F692 ; fully-qualified # 👨🏼‍🚒 man firefighter: medium-light skin tone +1F468 1F3FD 200D 1F692 ; fully-qualified # 👨🏽‍🚒 man firefighter: medium skin tone +1F468 1F3FE 200D 1F692 ; fully-qualified # 👨🏾‍🚒 man firefighter: medium-dark skin tone +1F468 1F3FF 200D 1F692 ; fully-qualified # 👨🏿‍🚒 man firefighter: dark skin tone +1F469 200D 1F692 ; fully-qualified # 👩‍🚒 woman firefighter +1F469 1F3FB 200D 1F692 ; fully-qualified # 👩🏻‍🚒 woman firefighter: light skin tone +1F469 1F3FC 200D 1F692 ; fully-qualified # 👩🏼‍🚒 woman firefighter: medium-light skin tone +1F469 1F3FD 200D 1F692 ; fully-qualified # 👩🏽‍🚒 woman firefighter: medium skin tone +1F469 1F3FE 200D 1F692 ; fully-qualified # 👩🏾‍🚒 woman firefighter: medium-dark skin tone +1F469 1F3FF 200D 1F692 ; fully-qualified # 👩🏿‍🚒 woman firefighter: dark skin tone +1F46E ; fully-qualified # 👮 police officer +1F46E 1F3FB ; fully-qualified # 👮🏻 police officer: light skin tone +1F46E 1F3FC ; fully-qualified # 👮🏼 police officer: medium-light skin tone +1F46E 1F3FD ; fully-qualified # 👮🏽 police officer: medium skin tone +1F46E 1F3FE ; fully-qualified # 👮🏾 police officer: medium-dark skin tone +1F46E 1F3FF ; fully-qualified # 👮🏿 police officer: dark skin tone +1F46E 200D 2642 FE0F ; fully-qualified # 👮‍♂️ man police officer +1F46E 200D 2642 ; non-fully-qualified # 👮‍♂ man police officer +1F46E 1F3FB 200D 2642 FE0F ; fully-qualified # 👮🏻‍♂️ man police officer: light skin tone +1F46E 1F3FB 200D 2642 ; non-fully-qualified # 👮🏻‍♂ man police officer: light skin tone +1F46E 1F3FC 200D 2642 FE0F ; fully-qualified # 👮🏼‍♂️ man police officer: medium-light skin tone +1F46E 1F3FC 200D 2642 ; non-fully-qualified # 👮🏼‍♂ man police officer: medium-light skin tone +1F46E 1F3FD 200D 2642 FE0F ; fully-qualified # 👮🏽‍♂️ man police officer: medium skin tone +1F46E 1F3FD 200D 2642 ; non-fully-qualified # 👮🏽‍♂ man police officer: medium skin tone +1F46E 1F3FE 200D 2642 FE0F ; fully-qualified # 👮🏾‍♂️ man police officer: medium-dark skin tone +1F46E 1F3FE 200D 2642 ; non-fully-qualified # 👮🏾‍♂ man police officer: medium-dark skin tone +1F46E 1F3FF 200D 2642 FE0F ; fully-qualified # 👮🏿‍♂️ man police officer: dark skin tone +1F46E 1F3FF 200D 2642 ; non-fully-qualified # 👮🏿‍♂ man police officer: dark skin tone +1F46E 200D 2640 FE0F ; fully-qualified # 👮‍♀️ woman police officer +1F46E 200D 2640 ; non-fully-qualified # 👮‍♀ woman police officer +1F46E 1F3FB 200D 2640 FE0F ; fully-qualified # 👮🏻‍♀️ woman police officer: light skin tone +1F46E 1F3FB 200D 2640 ; non-fully-qualified # 👮🏻‍♀ woman police officer: light skin tone +1F46E 1F3FC 200D 2640 FE0F ; fully-qualified # 👮🏼‍♀️ woman police officer: medium-light skin tone +1F46E 1F3FC 200D 2640 ; non-fully-qualified # 👮🏼‍♀ woman police officer: medium-light skin tone +1F46E 1F3FD 200D 2640 FE0F ; fully-qualified # 👮🏽‍♀️ woman police officer: medium skin tone +1F46E 1F3FD 200D 2640 ; non-fully-qualified # 👮🏽‍♀ woman police officer: medium skin tone +1F46E 1F3FE 200D 2640 FE0F ; fully-qualified # 👮🏾‍♀️ woman police officer: medium-dark skin tone +1F46E 1F3FE 200D 2640 ; non-fully-qualified # 👮🏾‍♀ woman police officer: medium-dark skin tone +1F46E 1F3FF 200D 2640 FE0F ; fully-qualified # 👮🏿‍♀️ woman police officer: dark skin tone +1F46E 1F3FF 200D 2640 ; non-fully-qualified # 👮🏿‍♀ woman police officer: dark skin tone +1F575 FE0F ; fully-qualified # 🕵️ detective +1F575 ; non-fully-qualified # 🕵 detective +1F575 1F3FB ; fully-qualified # 🕵🏻 detective: light skin tone +1F575 1F3FC ; fully-qualified # 🕵🏼 detective: medium-light skin tone +1F575 1F3FD ; fully-qualified # 🕵🏽 detective: medium skin tone +1F575 1F3FE ; fully-qualified # 🕵🏾 detective: medium-dark skin tone +1F575 1F3FF ; fully-qualified # 🕵🏿 detective: dark skin tone +1F575 FE0F 200D 2642 FE0F ; fully-qualified # 🕵️‍♂️ man detective +1F575 200D 2642 FE0F ; non-fully-qualified # 🕵‍♂️ man detective +1F575 FE0F 200D 2642 ; non-fully-qualified # 🕵️‍♂ man detective +1F575 200D 2642 ; non-fully-qualified # 🕵‍♂ man detective +1F575 1F3FB 200D 2642 FE0F ; fully-qualified # 🕵🏻‍♂️ man detective: light skin tone +1F575 1F3FB 200D 2642 ; non-fully-qualified # 🕵🏻‍♂ man detective: light skin tone +1F575 1F3FC 200D 2642 FE0F ; fully-qualified # 🕵🏼‍♂️ man detective: medium-light skin tone +1F575 1F3FC 200D 2642 ; non-fully-qualified # 🕵🏼‍♂ man detective: medium-light skin tone +1F575 1F3FD 200D 2642 FE0F ; fully-qualified # 🕵🏽‍♂️ man detective: medium skin tone +1F575 1F3FD 200D 2642 ; non-fully-qualified # 🕵🏽‍♂ man detective: medium skin tone +1F575 1F3FE 200D 2642 FE0F ; fully-qualified # 🕵🏾‍♂️ man detective: medium-dark skin tone +1F575 1F3FE 200D 2642 ; non-fully-qualified # 🕵🏾‍♂ man detective: medium-dark skin tone +1F575 1F3FF 200D 2642 FE0F ; fully-qualified # 🕵🏿‍♂️ man detective: dark skin tone +1F575 1F3FF 200D 2642 ; non-fully-qualified # 🕵🏿‍♂ man detective: dark skin tone +1F575 FE0F 200D 2640 FE0F ; fully-qualified # 🕵️‍♀️ woman detective +1F575 200D 2640 FE0F ; non-fully-qualified # 🕵‍♀️ woman detective +1F575 FE0F 200D 2640 ; non-fully-qualified # 🕵️‍♀ woman detective +1F575 200D 2640 ; non-fully-qualified # 🕵‍♀ woman detective +1F575 1F3FB 200D 2640 FE0F ; fully-qualified # 🕵🏻‍♀️ woman detective: light skin tone +1F575 1F3FB 200D 2640 ; non-fully-qualified # 🕵🏻‍♀ woman detective: light skin tone +1F575 1F3FC 200D 2640 FE0F ; fully-qualified # 🕵🏼‍♀️ woman detective: medium-light skin tone +1F575 1F3FC 200D 2640 ; non-fully-qualified # 🕵🏼‍♀ woman detective: medium-light skin tone +1F575 1F3FD 200D 2640 FE0F ; fully-qualified # 🕵🏽‍♀️ woman detective: medium skin tone +1F575 1F3FD 200D 2640 ; non-fully-qualified # 🕵🏽‍♀ woman detective: medium skin tone +1F575 1F3FE 200D 2640 FE0F ; fully-qualified # 🕵🏾‍♀️ woman detective: medium-dark skin tone +1F575 1F3FE 200D 2640 ; non-fully-qualified # 🕵🏾‍♀ woman detective: medium-dark skin tone +1F575 1F3FF 200D 2640 FE0F ; fully-qualified # 🕵🏿‍♀️ woman detective: dark skin tone +1F575 1F3FF 200D 2640 ; non-fully-qualified # 🕵🏿‍♀ woman detective: dark skin tone +1F482 ; fully-qualified # 💂 guard +1F482 1F3FB ; fully-qualified # 💂🏻 guard: light skin tone +1F482 1F3FC ; fully-qualified # 💂🏼 guard: medium-light skin tone +1F482 1F3FD ; fully-qualified # 💂🏽 guard: medium skin tone +1F482 1F3FE ; fully-qualified # 💂🏾 guard: medium-dark skin tone +1F482 1F3FF ; fully-qualified # 💂🏿 guard: dark skin tone +1F482 200D 2642 FE0F ; fully-qualified # 💂‍♂️ man guard +1F482 200D 2642 ; non-fully-qualified # 💂‍♂ man guard +1F482 1F3FB 200D 2642 FE0F ; fully-qualified # 💂🏻‍♂️ man guard: light skin tone +1F482 1F3FB 200D 2642 ; non-fully-qualified # 💂🏻‍♂ man guard: light skin tone +1F482 1F3FC 200D 2642 FE0F ; fully-qualified # 💂🏼‍♂️ man guard: medium-light skin tone +1F482 1F3FC 200D 2642 ; non-fully-qualified # 💂🏼‍♂ man guard: medium-light skin tone +1F482 1F3FD 200D 2642 FE0F ; fully-qualified # 💂🏽‍♂️ man guard: medium skin tone +1F482 1F3FD 200D 2642 ; non-fully-qualified # 💂🏽‍♂ man guard: medium skin tone +1F482 1F3FE 200D 2642 FE0F ; fully-qualified # 💂🏾‍♂️ man guard: medium-dark skin tone +1F482 1F3FE 200D 2642 ; non-fully-qualified # 💂🏾‍♂ man guard: medium-dark skin tone +1F482 1F3FF 200D 2642 FE0F ; fully-qualified # 💂🏿‍♂️ man guard: dark skin tone +1F482 1F3FF 200D 2642 ; non-fully-qualified # 💂🏿‍♂ man guard: dark skin tone +1F482 200D 2640 FE0F ; fully-qualified # 💂‍♀️ woman guard +1F482 200D 2640 ; non-fully-qualified # 💂‍♀ woman guard +1F482 1F3FB 200D 2640 FE0F ; fully-qualified # 💂🏻‍♀️ woman guard: light skin tone +1F482 1F3FB 200D 2640 ; non-fully-qualified # 💂🏻‍♀ woman guard: light skin tone +1F482 1F3FC 200D 2640 FE0F ; fully-qualified # 💂🏼‍♀️ woman guard: medium-light skin tone +1F482 1F3FC 200D 2640 ; non-fully-qualified # 💂🏼‍♀ woman guard: medium-light skin tone +1F482 1F3FD 200D 2640 FE0F ; fully-qualified # 💂🏽‍♀️ woman guard: medium skin tone +1F482 1F3FD 200D 2640 ; non-fully-qualified # 💂🏽‍♀ woman guard: medium skin tone +1F482 1F3FE 200D 2640 FE0F ; fully-qualified # 💂🏾‍♀️ woman guard: medium-dark skin tone +1F482 1F3FE 200D 2640 ; non-fully-qualified # 💂🏾‍♀ woman guard: medium-dark skin tone +1F482 1F3FF 200D 2640 FE0F ; fully-qualified # 💂🏿‍♀️ woman guard: dark skin tone +1F482 1F3FF 200D 2640 ; non-fully-qualified # 💂🏿‍♀ woman guard: dark skin tone +1F477 ; fully-qualified # 👷 construction worker +1F477 1F3FB ; fully-qualified # 👷🏻 construction worker: light skin tone +1F477 1F3FC ; fully-qualified # 👷🏼 construction worker: medium-light skin tone +1F477 1F3FD ; fully-qualified # 👷🏽 construction worker: medium skin tone +1F477 1F3FE ; fully-qualified # 👷🏾 construction worker: medium-dark skin tone +1F477 1F3FF ; fully-qualified # 👷🏿 construction worker: dark skin tone +1F477 200D 2642 FE0F ; fully-qualified # 👷‍♂️ man construction worker +1F477 200D 2642 ; non-fully-qualified # 👷‍♂ man construction worker +1F477 1F3FB 200D 2642 FE0F ; fully-qualified # 👷🏻‍♂️ man construction worker: light skin tone +1F477 1F3FB 200D 2642 ; non-fully-qualified # 👷🏻‍♂ man construction worker: light skin tone +1F477 1F3FC 200D 2642 FE0F ; fully-qualified # 👷🏼‍♂️ man construction worker: medium-light skin tone +1F477 1F3FC 200D 2642 ; non-fully-qualified # 👷🏼‍♂ man construction worker: medium-light skin tone +1F477 1F3FD 200D 2642 FE0F ; fully-qualified # 👷🏽‍♂️ man construction worker: medium skin tone +1F477 1F3FD 200D 2642 ; non-fully-qualified # 👷🏽‍♂ man construction worker: medium skin tone +1F477 1F3FE 200D 2642 FE0F ; fully-qualified # 👷🏾‍♂️ man construction worker: medium-dark skin tone +1F477 1F3FE 200D 2642 ; non-fully-qualified # 👷🏾‍♂ man construction worker: medium-dark skin tone +1F477 1F3FF 200D 2642 FE0F ; fully-qualified # 👷🏿‍♂️ man construction worker: dark skin tone +1F477 1F3FF 200D 2642 ; non-fully-qualified # 👷🏿‍♂ man construction worker: dark skin tone +1F477 200D 2640 FE0F ; fully-qualified # 👷‍♀️ woman construction worker +1F477 200D 2640 ; non-fully-qualified # 👷‍♀ woman construction worker +1F477 1F3FB 200D 2640 FE0F ; fully-qualified # 👷🏻‍♀️ woman construction worker: light skin tone +1F477 1F3FB 200D 2640 ; non-fully-qualified # 👷🏻‍♀ woman construction worker: light skin tone +1F477 1F3FC 200D 2640 FE0F ; fully-qualified # 👷🏼‍♀️ woman construction worker: medium-light skin tone +1F477 1F3FC 200D 2640 ; non-fully-qualified # 👷🏼‍♀ woman construction worker: medium-light skin tone +1F477 1F3FD 200D 2640 FE0F ; fully-qualified # 👷🏽‍♀️ woman construction worker: medium skin tone +1F477 1F3FD 200D 2640 ; non-fully-qualified # 👷🏽‍♀ woman construction worker: medium skin tone +1F477 1F3FE 200D 2640 FE0F ; fully-qualified # 👷🏾‍♀️ woman construction worker: medium-dark skin tone +1F477 1F3FE 200D 2640 ; non-fully-qualified # 👷🏾‍♀ woman construction worker: medium-dark skin tone +1F477 1F3FF 200D 2640 FE0F ; fully-qualified # 👷🏿‍♀️ woman construction worker: dark skin tone +1F477 1F3FF 200D 2640 ; non-fully-qualified # 👷🏿‍♀ woman construction worker: dark skin tone +1F934 ; fully-qualified # 🤴 prince +1F934 1F3FB ; fully-qualified # 🤴🏻 prince: light skin tone +1F934 1F3FC ; fully-qualified # 🤴🏼 prince: medium-light skin tone +1F934 1F3FD ; fully-qualified # 🤴🏽 prince: medium skin tone +1F934 1F3FE ; fully-qualified # 🤴🏾 prince: medium-dark skin tone +1F934 1F3FF ; fully-qualified # 🤴🏿 prince: dark skin tone +1F478 ; fully-qualified # 👸 princess +1F478 1F3FB ; fully-qualified # 👸🏻 princess: light skin tone +1F478 1F3FC ; fully-qualified # 👸🏼 princess: medium-light skin tone +1F478 1F3FD ; fully-qualified # 👸🏽 princess: medium skin tone +1F478 1F3FE ; fully-qualified # 👸🏾 princess: medium-dark skin tone +1F478 1F3FF ; fully-qualified # 👸🏿 princess: dark skin tone +1F473 ; fully-qualified # 👳 person wearing turban +1F473 1F3FB ; fully-qualified # 👳🏻 person wearing turban: light skin tone +1F473 1F3FC ; fully-qualified # 👳🏼 person wearing turban: medium-light skin tone +1F473 1F3FD ; fully-qualified # 👳🏽 person wearing turban: medium skin tone +1F473 1F3FE ; fully-qualified # 👳🏾 person wearing turban: medium-dark skin tone +1F473 1F3FF ; fully-qualified # 👳🏿 person wearing turban: dark skin tone +1F473 200D 2642 FE0F ; fully-qualified # 👳‍♂️ man wearing turban +1F473 200D 2642 ; non-fully-qualified # 👳‍♂ man wearing turban +1F473 1F3FB 200D 2642 FE0F ; fully-qualified # 👳🏻‍♂️ man wearing turban: light skin tone +1F473 1F3FB 200D 2642 ; non-fully-qualified # 👳🏻‍♂ man wearing turban: light skin tone +1F473 1F3FC 200D 2642 FE0F ; fully-qualified # 👳🏼‍♂️ man wearing turban: medium-light skin tone +1F473 1F3FC 200D 2642 ; non-fully-qualified # 👳🏼‍♂ man wearing turban: medium-light skin tone +1F473 1F3FD 200D 2642 FE0F ; fully-qualified # 👳🏽‍♂️ man wearing turban: medium skin tone +1F473 1F3FD 200D 2642 ; non-fully-qualified # 👳🏽‍♂ man wearing turban: medium skin tone +1F473 1F3FE 200D 2642 FE0F ; fully-qualified # 👳🏾‍♂️ man wearing turban: medium-dark skin tone +1F473 1F3FE 200D 2642 ; non-fully-qualified # 👳🏾‍♂ man wearing turban: medium-dark skin tone +1F473 1F3FF 200D 2642 FE0F ; fully-qualified # 👳🏿‍♂️ man wearing turban: dark skin tone +1F473 1F3FF 200D 2642 ; non-fully-qualified # 👳🏿‍♂ man wearing turban: dark skin tone +1F473 200D 2640 FE0F ; fully-qualified # 👳‍♀️ woman wearing turban +1F473 200D 2640 ; non-fully-qualified # 👳‍♀ woman wearing turban +1F473 1F3FB 200D 2640 FE0F ; fully-qualified # 👳🏻‍♀️ woman wearing turban: light skin tone +1F473 1F3FB 200D 2640 ; non-fully-qualified # 👳🏻‍♀ woman wearing turban: light skin tone +1F473 1F3FC 200D 2640 FE0F ; fully-qualified # 👳🏼‍♀️ woman wearing turban: medium-light skin tone +1F473 1F3FC 200D 2640 ; non-fully-qualified # 👳🏼‍♀ woman wearing turban: medium-light skin tone +1F473 1F3FD 200D 2640 FE0F ; fully-qualified # 👳🏽‍♀️ woman wearing turban: medium skin tone +1F473 1F3FD 200D 2640 ; non-fully-qualified # 👳🏽‍♀ woman wearing turban: medium skin tone +1F473 1F3FE 200D 2640 FE0F ; fully-qualified # 👳🏾‍♀️ woman wearing turban: medium-dark skin tone +1F473 1F3FE 200D 2640 ; non-fully-qualified # 👳🏾‍♀ woman wearing turban: medium-dark skin tone +1F473 1F3FF 200D 2640 FE0F ; fully-qualified # 👳🏿‍♀️ woman wearing turban: dark skin tone +1F473 1F3FF 200D 2640 ; non-fully-qualified # 👳🏿‍♀ woman wearing turban: dark skin tone +1F472 ; fully-qualified # 👲 man with Chinese cap +1F472 1F3FB ; fully-qualified # 👲🏻 man with Chinese cap: light skin tone +1F472 1F3FC ; fully-qualified # 👲🏼 man with Chinese cap: medium-light skin tone +1F472 1F3FD ; fully-qualified # 👲🏽 man with Chinese cap: medium skin tone +1F472 1F3FE ; fully-qualified # 👲🏾 man with Chinese cap: medium-dark skin tone +1F472 1F3FF ; fully-qualified # 👲🏿 man with Chinese cap: dark skin tone +1F9D5 ; fully-qualified # 🧕 woman with headscarf +1F9D5 1F3FB ; fully-qualified # 🧕🏻 woman with headscarf: light skin tone +1F9D5 1F3FC ; fully-qualified # 🧕🏼 woman with headscarf: medium-light skin tone +1F9D5 1F3FD ; fully-qualified # 🧕🏽 woman with headscarf: medium skin tone +1F9D5 1F3FE ; fully-qualified # 🧕🏾 woman with headscarf: medium-dark skin tone +1F9D5 1F3FF ; fully-qualified # 🧕🏿 woman with headscarf: dark skin tone +1F9D4 ; fully-qualified # 🧔 bearded person +1F9D4 1F3FB ; fully-qualified # 🧔🏻 bearded person: light skin tone +1F9D4 1F3FC ; fully-qualified # 🧔🏼 bearded person: medium-light skin tone +1F9D4 1F3FD ; fully-qualified # 🧔🏽 bearded person: medium skin tone +1F9D4 1F3FE ; fully-qualified # 🧔🏾 bearded person: medium-dark skin tone +1F9D4 1F3FF ; fully-qualified # 🧔🏿 bearded person: dark skin tone +1F471 ; fully-qualified # 👱 blond-haired person +1F471 1F3FB ; fully-qualified # 👱🏻 blond-haired person: light skin tone +1F471 1F3FC ; fully-qualified # 👱🏼 blond-haired person: medium-light skin tone +1F471 1F3FD ; fully-qualified # 👱🏽 blond-haired person: medium skin tone +1F471 1F3FE ; fully-qualified # 👱🏾 blond-haired person: medium-dark skin tone +1F471 1F3FF ; fully-qualified # 👱🏿 blond-haired person: dark skin tone +1F471 200D 2642 FE0F ; fully-qualified # 👱‍♂️ blond-haired man +1F471 200D 2642 ; non-fully-qualified # 👱‍♂ blond-haired man +1F471 1F3FB 200D 2642 FE0F ; fully-qualified # 👱🏻‍♂️ blond-haired man: light skin tone +1F471 1F3FB 200D 2642 ; non-fully-qualified # 👱🏻‍♂ blond-haired man: light skin tone +1F471 1F3FC 200D 2642 FE0F ; fully-qualified # 👱🏼‍♂️ blond-haired man: medium-light skin tone +1F471 1F3FC 200D 2642 ; non-fully-qualified # 👱🏼‍♂ blond-haired man: medium-light skin tone +1F471 1F3FD 200D 2642 FE0F ; fully-qualified # 👱🏽‍♂️ blond-haired man: medium skin tone +1F471 1F3FD 200D 2642 ; non-fully-qualified # 👱🏽‍♂ blond-haired man: medium skin tone +1F471 1F3FE 200D 2642 FE0F ; fully-qualified # 👱🏾‍♂️ blond-haired man: medium-dark skin tone +1F471 1F3FE 200D 2642 ; non-fully-qualified # 👱🏾‍♂ blond-haired man: medium-dark skin tone +1F471 1F3FF 200D 2642 FE0F ; fully-qualified # 👱🏿‍♂️ blond-haired man: dark skin tone +1F471 1F3FF 200D 2642 ; non-fully-qualified # 👱🏿‍♂ blond-haired man: dark skin tone +1F471 200D 2640 FE0F ; fully-qualified # 👱‍♀️ blond-haired woman +1F471 200D 2640 ; non-fully-qualified # 👱‍♀ blond-haired woman +1F471 1F3FB 200D 2640 FE0F ; fully-qualified # 👱🏻‍♀️ blond-haired woman: light skin tone +1F471 1F3FB 200D 2640 ; non-fully-qualified # 👱🏻‍♀ blond-haired woman: light skin tone +1F471 1F3FC 200D 2640 FE0F ; fully-qualified # 👱🏼‍♀️ blond-haired woman: medium-light skin tone +1F471 1F3FC 200D 2640 ; non-fully-qualified # 👱🏼‍♀ blond-haired woman: medium-light skin tone +1F471 1F3FD 200D 2640 FE0F ; fully-qualified # 👱🏽‍♀️ blond-haired woman: medium skin tone +1F471 1F3FD 200D 2640 ; non-fully-qualified # 👱🏽‍♀ blond-haired woman: medium skin tone +1F471 1F3FE 200D 2640 FE0F ; fully-qualified # 👱🏾‍♀️ blond-haired woman: medium-dark skin tone +1F471 1F3FE 200D 2640 ; non-fully-qualified # 👱🏾‍♀ blond-haired woman: medium-dark skin tone +1F471 1F3FF 200D 2640 FE0F ; fully-qualified # 👱🏿‍♀️ blond-haired woman: dark skin tone +1F471 1F3FF 200D 2640 ; non-fully-qualified # 👱🏿‍♀ blond-haired woman: dark skin tone +1F468 200D 1F9B0 ; fully-qualified # 👨‍🦰 man, red haired +1F468 1F3FB 200D 1F9B0 ; fully-qualified # 👨🏻‍🦰 man, red haired: light skin tone +1F468 1F3FC 200D 1F9B0 ; fully-qualified # 👨🏼‍🦰 man, red haired: medium-light skin tone +1F468 1F3FD 200D 1F9B0 ; fully-qualified # 👨🏽‍🦰 man, red haired: medium skin tone +1F468 1F3FE 200D 1F9B0 ; fully-qualified # 👨🏾‍🦰 man, red haired: medium-dark skin tone +1F468 1F3FF 200D 1F9B0 ; fully-qualified # 👨🏿‍🦰 man, red haired: dark skin tone +1F469 200D 1F9B0 ; fully-qualified # 👩‍🦰 woman, red haired +1F469 1F3FB 200D 1F9B0 ; fully-qualified # 👩🏻‍🦰 woman, red haired: light skin tone +1F469 1F3FC 200D 1F9B0 ; fully-qualified # 👩🏼‍🦰 woman, red haired: medium-light skin tone +1F469 1F3FD 200D 1F9B0 ; fully-qualified # 👩🏽‍🦰 woman, red haired: medium skin tone +1F469 1F3FE 200D 1F9B0 ; fully-qualified # 👩🏾‍🦰 woman, red haired: medium-dark skin tone +1F469 1F3FF 200D 1F9B0 ; fully-qualified # 👩🏿‍🦰 woman, red haired: dark skin tone +1F468 200D 1F9B1 ; fully-qualified # 👨‍🦱 man, curly haired +1F468 1F3FB 200D 1F9B1 ; fully-qualified # 👨🏻‍🦱 man, curly haired: light skin tone +1F468 1F3FC 200D 1F9B1 ; fully-qualified # 👨🏼‍🦱 man, curly haired: medium-light skin tone +1F468 1F3FD 200D 1F9B1 ; fully-qualified # 👨🏽‍🦱 man, curly haired: medium skin tone +1F468 1F3FE 200D 1F9B1 ; fully-qualified # 👨🏾‍🦱 man, curly haired: medium-dark skin tone +1F468 1F3FF 200D 1F9B1 ; fully-qualified # 👨🏿‍🦱 man, curly haired: dark skin tone +1F469 200D 1F9B1 ; fully-qualified # 👩‍🦱 woman, curly haired +1F469 1F3FB 200D 1F9B1 ; fully-qualified # 👩🏻‍🦱 woman, curly haired: light skin tone +1F469 1F3FC 200D 1F9B1 ; fully-qualified # 👩🏼‍🦱 woman, curly haired: medium-light skin tone +1F469 1F3FD 200D 1F9B1 ; fully-qualified # 👩🏽‍🦱 woman, curly haired: medium skin tone +1F469 1F3FE 200D 1F9B1 ; fully-qualified # 👩🏾‍🦱 woman, curly haired: medium-dark skin tone +1F469 1F3FF 200D 1F9B1 ; fully-qualified # 👩🏿‍🦱 woman, curly haired: dark skin tone +1F468 200D 1F9B2 ; fully-qualified # 👨‍🦲 man, bald +1F468 1F3FB 200D 1F9B2 ; fully-qualified # 👨🏻‍🦲 man, bald: light skin tone +1F468 1F3FC 200D 1F9B2 ; fully-qualified # 👨🏼‍🦲 man, bald: medium-light skin tone +1F468 1F3FD 200D 1F9B2 ; fully-qualified # 👨🏽‍🦲 man, bald: medium skin tone +1F468 1F3FE 200D 1F9B2 ; fully-qualified # 👨🏾‍🦲 man, bald: medium-dark skin tone +1F468 1F3FF 200D 1F9B2 ; fully-qualified # 👨🏿‍🦲 man, bald: dark skin tone +1F469 200D 1F9B2 ; fully-qualified # 👩‍🦲 woman, bald +1F469 1F3FB 200D 1F9B2 ; fully-qualified # 👩🏻‍🦲 woman, bald: light skin tone +1F469 1F3FC 200D 1F9B2 ; fully-qualified # 👩🏼‍🦲 woman, bald: medium-light skin tone +1F469 1F3FD 200D 1F9B2 ; fully-qualified # 👩🏽‍🦲 woman, bald: medium skin tone +1F469 1F3FE 200D 1F9B2 ; fully-qualified # 👩🏾‍🦲 woman, bald: medium-dark skin tone +1F469 1F3FF 200D 1F9B2 ; fully-qualified # 👩🏿‍🦲 woman, bald: dark skin tone +1F468 200D 1F9B3 ; fully-qualified # 👨‍🦳 man, white haired +1F468 1F3FB 200D 1F9B3 ; fully-qualified # 👨🏻‍🦳 man, white haired: light skin tone +1F468 1F3FC 200D 1F9B3 ; fully-qualified # 👨🏼‍🦳 man, white haired: medium-light skin tone +1F468 1F3FD 200D 1F9B3 ; fully-qualified # 👨🏽‍🦳 man, white haired: medium skin tone +1F468 1F3FE 200D 1F9B3 ; fully-qualified # 👨🏾‍🦳 man, white haired: medium-dark skin tone +1F468 1F3FF 200D 1F9B3 ; fully-qualified # 👨🏿‍🦳 man, white haired: dark skin tone +1F469 200D 1F9B3 ; fully-qualified # 👩‍🦳 woman, white haired +1F469 1F3FB 200D 1F9B3 ; fully-qualified # 👩🏻‍🦳 woman, white haired: light skin tone +1F469 1F3FC 200D 1F9B3 ; fully-qualified # 👩🏼‍🦳 woman, white haired: medium-light skin tone +1F469 1F3FD 200D 1F9B3 ; fully-qualified # 👩🏽‍🦳 woman, white haired: medium skin tone +1F469 1F3FE 200D 1F9B3 ; fully-qualified # 👩🏾‍🦳 woman, white haired: medium-dark skin tone +1F469 1F3FF 200D 1F9B3 ; fully-qualified # 👩🏿‍🦳 woman, white haired: dark skin tone +1F935 ; fully-qualified # 🤵 man in tuxedo +1F935 1F3FB ; fully-qualified # 🤵🏻 man in tuxedo: light skin tone +1F935 1F3FC ; fully-qualified # 🤵🏼 man in tuxedo: medium-light skin tone +1F935 1F3FD ; fully-qualified # 🤵🏽 man in tuxedo: medium skin tone +1F935 1F3FE ; fully-qualified # 🤵🏾 man in tuxedo: medium-dark skin tone +1F935 1F3FF ; fully-qualified # 🤵🏿 man in tuxedo: dark skin tone +1F470 ; fully-qualified # 👰 bride with veil +1F470 1F3FB ; fully-qualified # 👰🏻 bride with veil: light skin tone +1F470 1F3FC ; fully-qualified # 👰🏼 bride with veil: medium-light skin tone +1F470 1F3FD ; fully-qualified # 👰🏽 bride with veil: medium skin tone +1F470 1F3FE ; fully-qualified # 👰🏾 bride with veil: medium-dark skin tone +1F470 1F3FF ; fully-qualified # 👰🏿 bride with veil: dark skin tone +1F930 ; fully-qualified # 🤰 pregnant woman +1F930 1F3FB ; fully-qualified # 🤰🏻 pregnant woman: light skin tone +1F930 1F3FC ; fully-qualified # 🤰🏼 pregnant woman: medium-light skin tone +1F930 1F3FD ; fully-qualified # 🤰🏽 pregnant woman: medium skin tone +1F930 1F3FE ; fully-qualified # 🤰🏾 pregnant woman: medium-dark skin tone +1F930 1F3FF ; fully-qualified # 🤰🏿 pregnant woman: dark skin tone +1F931 ; fully-qualified # 🤱 breast-feeding +1F931 1F3FB ; fully-qualified # 🤱🏻 breast-feeding: light skin tone +1F931 1F3FC ; fully-qualified # 🤱🏼 breast-feeding: medium-light skin tone +1F931 1F3FD ; fully-qualified # 🤱🏽 breast-feeding: medium skin tone +1F931 1F3FE ; fully-qualified # 🤱🏾 breast-feeding: medium-dark skin tone +1F931 1F3FF ; fully-qualified # 🤱🏿 breast-feeding: dark skin tone + +# subgroup: person-fantasy +1F47C ; fully-qualified # 👼 baby angel +1F47C 1F3FB ; fully-qualified # 👼🏻 baby angel: light skin tone +1F47C 1F3FC ; fully-qualified # 👼🏼 baby angel: medium-light skin tone +1F47C 1F3FD ; fully-qualified # 👼🏽 baby angel: medium skin tone +1F47C 1F3FE ; fully-qualified # 👼🏾 baby angel: medium-dark skin tone +1F47C 1F3FF ; fully-qualified # 👼🏿 baby angel: dark skin tone +1F385 ; fully-qualified # 🎅 Santa Claus +1F385 1F3FB ; fully-qualified # 🎅🏻 Santa Claus: light skin tone +1F385 1F3FC ; fully-qualified # 🎅🏼 Santa Claus: medium-light skin tone +1F385 1F3FD ; fully-qualified # 🎅🏽 Santa Claus: medium skin tone +1F385 1F3FE ; fully-qualified # 🎅🏾 Santa Claus: medium-dark skin tone +1F385 1F3FF ; fully-qualified # 🎅🏿 Santa Claus: dark skin tone +1F936 ; fully-qualified # 🤶 Mrs. Claus +1F936 1F3FB ; fully-qualified # 🤶🏻 Mrs. Claus: light skin tone +1F936 1F3FC ; fully-qualified # 🤶🏼 Mrs. Claus: medium-light skin tone +1F936 1F3FD ; fully-qualified # 🤶🏽 Mrs. Claus: medium skin tone +1F936 1F3FE ; fully-qualified # 🤶🏾 Mrs. Claus: medium-dark skin tone +1F936 1F3FF ; fully-qualified # 🤶🏿 Mrs. Claus: dark skin tone +1F9B8 ; fully-qualified # 🦸 superhero +1F9B8 1F3FB ; fully-qualified # 🦸🏻 superhero: light skin tone +1F9B8 1F3FC ; fully-qualified # 🦸🏼 superhero: medium-light skin tone +1F9B8 1F3FD ; fully-qualified # 🦸🏽 superhero: medium skin tone +1F9B8 1F3FE ; fully-qualified # 🦸🏾 superhero: medium-dark skin tone +1F9B8 1F3FF ; fully-qualified # 🦸🏿 superhero: dark skin tone +1F9B8 200D 2640 FE0F ; fully-qualified # 🦸‍♀️ woman superhero +1F9B8 200D 2640 ; non-fully-qualified # 🦸‍♀ woman superhero +1F9B8 1F3FB 200D 2640 FE0F ; fully-qualified # 🦸🏻‍♀️ woman superhero: light skin tone +1F9B8 1F3FB 200D 2640 ; non-fully-qualified # 🦸🏻‍♀ woman superhero: light skin tone +1F9B8 1F3FC 200D 2640 FE0F ; fully-qualified # 🦸🏼‍♀️ woman superhero: medium-light skin tone +1F9B8 1F3FC 200D 2640 ; non-fully-qualified # 🦸🏼‍♀ woman superhero: medium-light skin tone +1F9B8 1F3FD 200D 2640 FE0F ; fully-qualified # 🦸🏽‍♀️ woman superhero: medium skin tone +1F9B8 1F3FD 200D 2640 ; non-fully-qualified # 🦸🏽‍♀ woman superhero: medium skin tone +1F9B8 1F3FE 200D 2640 FE0F ; fully-qualified # 🦸🏾‍♀️ woman superhero: medium-dark skin tone +1F9B8 1F3FE 200D 2640 ; non-fully-qualified # 🦸🏾‍♀ woman superhero: medium-dark skin tone +1F9B8 1F3FF 200D 2640 FE0F ; fully-qualified # 🦸🏿‍♀️ woman superhero: dark skin tone +1F9B8 1F3FF 200D 2640 ; non-fully-qualified # 🦸🏿‍♀ woman superhero: dark skin tone +1F9B8 200D 2642 FE0F ; fully-qualified # 🦸‍♂️ man superhero +1F9B8 200D 2642 ; non-fully-qualified # 🦸‍♂ man superhero +1F9B8 1F3FB 200D 2642 FE0F ; fully-qualified # 🦸🏻‍♂️ man superhero: light skin tone +1F9B8 1F3FB 200D 2642 ; non-fully-qualified # 🦸🏻‍♂ man superhero: light skin tone +1F9B8 1F3FC 200D 2642 FE0F ; fully-qualified # 🦸🏼‍♂️ man superhero: medium-light skin tone +1F9B8 1F3FC 200D 2642 ; non-fully-qualified # 🦸🏼‍♂ man superhero: medium-light skin tone +1F9B8 1F3FD 200D 2642 FE0F ; fully-qualified # 🦸🏽‍♂️ man superhero: medium skin tone +1F9B8 1F3FD 200D 2642 ; non-fully-qualified # 🦸🏽‍♂ man superhero: medium skin tone +1F9B8 1F3FE 200D 2642 FE0F ; fully-qualified # 🦸🏾‍♂️ man superhero: medium-dark skin tone +1F9B8 1F3FE 200D 2642 ; non-fully-qualified # 🦸🏾‍♂ man superhero: medium-dark skin tone +1F9B8 1F3FF 200D 2642 FE0F ; fully-qualified # 🦸🏿‍♂️ man superhero: dark skin tone +1F9B8 1F3FF 200D 2642 ; non-fully-qualified # 🦸🏿‍♂ man superhero: dark skin tone +1F9B9 ; fully-qualified # 🦹 supervillain +1F9B9 1F3FB ; fully-qualified # 🦹🏻 supervillain: light skin tone +1F9B9 1F3FC ; fully-qualified # 🦹🏼 supervillain: medium-light skin tone +1F9B9 1F3FD ; fully-qualified # 🦹🏽 supervillain: medium skin tone +1F9B9 1F3FE ; fully-qualified # 🦹🏾 supervillain: medium-dark skin tone +1F9B9 1F3FF ; fully-qualified # 🦹🏿 supervillain: dark skin tone +1F9B9 200D 2640 FE0F ; fully-qualified # 🦹‍♀️ woman supervillain +1F9B9 200D 2640 ; non-fully-qualified # 🦹‍♀ woman supervillain +1F9B9 1F3FB 200D 2640 FE0F ; fully-qualified # 🦹🏻‍♀️ woman supervillain: light skin tone +1F9B9 1F3FB 200D 2640 ; non-fully-qualified # 🦹🏻‍♀ woman supervillain: light skin tone +1F9B9 1F3FC 200D 2640 FE0F ; fully-qualified # 🦹🏼‍♀️ woman supervillain: medium-light skin tone +1F9B9 1F3FC 200D 2640 ; non-fully-qualified # 🦹🏼‍♀ woman supervillain: medium-light skin tone +1F9B9 1F3FD 200D 2640 FE0F ; fully-qualified # 🦹🏽‍♀️ woman supervillain: medium skin tone +1F9B9 1F3FD 200D 2640 ; non-fully-qualified # 🦹🏽‍♀ woman supervillain: medium skin tone +1F9B9 1F3FE 200D 2640 FE0F ; fully-qualified # 🦹🏾‍♀️ woman supervillain: medium-dark skin tone +1F9B9 1F3FE 200D 2640 ; non-fully-qualified # 🦹🏾‍♀ woman supervillain: medium-dark skin tone +1F9B9 1F3FF 200D 2640 FE0F ; fully-qualified # 🦹🏿‍♀️ woman supervillain: dark skin tone +1F9B9 1F3FF 200D 2640 ; non-fully-qualified # 🦹🏿‍♀ woman supervillain: dark skin tone +1F9B9 200D 2642 FE0F ; fully-qualified # 🦹‍♂️ man supervillain +1F9B9 200D 2642 ; non-fully-qualified # 🦹‍♂ man supervillain +1F9B9 1F3FB 200D 2642 FE0F ; fully-qualified # 🦹🏻‍♂️ man supervillain: light skin tone +1F9B9 1F3FB 200D 2642 ; non-fully-qualified # 🦹🏻‍♂ man supervillain: light skin tone +1F9B9 1F3FC 200D 2642 FE0F ; fully-qualified # 🦹🏼‍♂️ man supervillain: medium-light skin tone +1F9B9 1F3FC 200D 2642 ; non-fully-qualified # 🦹🏼‍♂ man supervillain: medium-light skin tone +1F9B9 1F3FD 200D 2642 FE0F ; fully-qualified # 🦹🏽‍♂️ man supervillain: medium skin tone +1F9B9 1F3FD 200D 2642 ; non-fully-qualified # 🦹🏽‍♂ man supervillain: medium skin tone +1F9B9 1F3FE 200D 2642 FE0F ; fully-qualified # 🦹🏾‍♂️ man supervillain: medium-dark skin tone +1F9B9 1F3FE 200D 2642 ; non-fully-qualified # 🦹🏾‍♂ man supervillain: medium-dark skin tone +1F9B9 1F3FF 200D 2642 FE0F ; fully-qualified # 🦹🏿‍♂️ man supervillain: dark skin tone +1F9B9 1F3FF 200D 2642 ; non-fully-qualified # 🦹🏿‍♂ man supervillain: dark skin tone +1F9D9 ; fully-qualified # 🧙 mage +1F9D9 1F3FB ; fully-qualified # 🧙🏻 mage: light skin tone +1F9D9 1F3FC ; fully-qualified # 🧙🏼 mage: medium-light skin tone +1F9D9 1F3FD ; fully-qualified # 🧙🏽 mage: medium skin tone +1F9D9 1F3FE ; fully-qualified # 🧙🏾 mage: medium-dark skin tone +1F9D9 1F3FF ; fully-qualified # 🧙🏿 mage: dark skin tone +1F9D9 200D 2640 FE0F ; fully-qualified # 🧙‍♀️ woman mage +1F9D9 200D 2640 ; non-fully-qualified # 🧙‍♀ woman mage +1F9D9 1F3FB 200D 2640 FE0F ; fully-qualified # 🧙🏻‍♀️ woman mage: light skin tone +1F9D9 1F3FB 200D 2640 ; non-fully-qualified # 🧙🏻‍♀ woman mage: light skin tone +1F9D9 1F3FC 200D 2640 FE0F ; fully-qualified # 🧙🏼‍♀️ woman mage: medium-light skin tone +1F9D9 1F3FC 200D 2640 ; non-fully-qualified # 🧙🏼‍♀ woman mage: medium-light skin tone +1F9D9 1F3FD 200D 2640 FE0F ; fully-qualified # 🧙🏽‍♀️ woman mage: medium skin tone +1F9D9 1F3FD 200D 2640 ; non-fully-qualified # 🧙🏽‍♀ woman mage: medium skin tone +1F9D9 1F3FE 200D 2640 FE0F ; fully-qualified # 🧙🏾‍♀️ woman mage: medium-dark skin tone +1F9D9 1F3FE 200D 2640 ; non-fully-qualified # 🧙🏾‍♀ woman mage: medium-dark skin tone +1F9D9 1F3FF 200D 2640 FE0F ; fully-qualified # 🧙🏿‍♀️ woman mage: dark skin tone +1F9D9 1F3FF 200D 2640 ; non-fully-qualified # 🧙🏿‍♀ woman mage: dark skin tone +1F9D9 200D 2642 FE0F ; fully-qualified # 🧙‍♂️ man mage +1F9D9 200D 2642 ; non-fully-qualified # 🧙‍♂ man mage +1F9D9 1F3FB 200D 2642 FE0F ; fully-qualified # 🧙🏻‍♂️ man mage: light skin tone +1F9D9 1F3FB 200D 2642 ; non-fully-qualified # 🧙🏻‍♂ man mage: light skin tone +1F9D9 1F3FC 200D 2642 FE0F ; fully-qualified # 🧙🏼‍♂️ man mage: medium-light skin tone +1F9D9 1F3FC 200D 2642 ; non-fully-qualified # 🧙🏼‍♂ man mage: medium-light skin tone +1F9D9 1F3FD 200D 2642 FE0F ; fully-qualified # 🧙🏽‍♂️ man mage: medium skin tone +1F9D9 1F3FD 200D 2642 ; non-fully-qualified # 🧙🏽‍♂ man mage: medium skin tone +1F9D9 1F3FE 200D 2642 FE0F ; fully-qualified # 🧙🏾‍♂️ man mage: medium-dark skin tone +1F9D9 1F3FE 200D 2642 ; non-fully-qualified # 🧙🏾‍♂ man mage: medium-dark skin tone +1F9D9 1F3FF 200D 2642 FE0F ; fully-qualified # 🧙🏿‍♂️ man mage: dark skin tone +1F9D9 1F3FF 200D 2642 ; non-fully-qualified # 🧙🏿‍♂ man mage: dark skin tone +1F9DA ; fully-qualified # 🧚 fairy +1F9DA 1F3FB ; fully-qualified # 🧚🏻 fairy: light skin tone +1F9DA 1F3FC ; fully-qualified # 🧚🏼 fairy: medium-light skin tone +1F9DA 1F3FD ; fully-qualified # 🧚🏽 fairy: medium skin tone +1F9DA 1F3FE ; fully-qualified # 🧚🏾 fairy: medium-dark skin tone +1F9DA 1F3FF ; fully-qualified # 🧚🏿 fairy: dark skin tone +1F9DA 200D 2640 FE0F ; fully-qualified # 🧚‍♀️ woman fairy +1F9DA 200D 2640 ; non-fully-qualified # 🧚‍♀ woman fairy +1F9DA 1F3FB 200D 2640 FE0F ; fully-qualified # 🧚🏻‍♀️ woman fairy: light skin tone +1F9DA 1F3FB 200D 2640 ; non-fully-qualified # 🧚🏻‍♀ woman fairy: light skin tone +1F9DA 1F3FC 200D 2640 FE0F ; fully-qualified # 🧚🏼‍♀️ woman fairy: medium-light skin tone +1F9DA 1F3FC 200D 2640 ; non-fully-qualified # 🧚🏼‍♀ woman fairy: medium-light skin tone +1F9DA 1F3FD 200D 2640 FE0F ; fully-qualified # 🧚🏽‍♀️ woman fairy: medium skin tone +1F9DA 1F3FD 200D 2640 ; non-fully-qualified # 🧚🏽‍♀ woman fairy: medium skin tone +1F9DA 1F3FE 200D 2640 FE0F ; fully-qualified # 🧚🏾‍♀️ woman fairy: medium-dark skin tone +1F9DA 1F3FE 200D 2640 ; non-fully-qualified # 🧚🏾‍♀ woman fairy: medium-dark skin tone +1F9DA 1F3FF 200D 2640 FE0F ; fully-qualified # 🧚🏿‍♀️ woman fairy: dark skin tone +1F9DA 1F3FF 200D 2640 ; non-fully-qualified # 🧚🏿‍♀ woman fairy: dark skin tone +1F9DA 200D 2642 FE0F ; fully-qualified # 🧚‍♂️ man fairy +1F9DA 200D 2642 ; non-fully-qualified # 🧚‍♂ man fairy +1F9DA 1F3FB 200D 2642 FE0F ; fully-qualified # 🧚🏻‍♂️ man fairy: light skin tone +1F9DA 1F3FB 200D 2642 ; non-fully-qualified # 🧚🏻‍♂ man fairy: light skin tone +1F9DA 1F3FC 200D 2642 FE0F ; fully-qualified # 🧚🏼‍♂️ man fairy: medium-light skin tone +1F9DA 1F3FC 200D 2642 ; non-fully-qualified # 🧚🏼‍♂ man fairy: medium-light skin tone +1F9DA 1F3FD 200D 2642 FE0F ; fully-qualified # 🧚🏽‍♂️ man fairy: medium skin tone +1F9DA 1F3FD 200D 2642 ; non-fully-qualified # 🧚🏽‍♂ man fairy: medium skin tone +1F9DA 1F3FE 200D 2642 FE0F ; fully-qualified # 🧚🏾‍♂️ man fairy: medium-dark skin tone +1F9DA 1F3FE 200D 2642 ; non-fully-qualified # 🧚🏾‍♂ man fairy: medium-dark skin tone +1F9DA 1F3FF 200D 2642 FE0F ; fully-qualified # 🧚🏿‍♂️ man fairy: dark skin tone +1F9DA 1F3FF 200D 2642 ; non-fully-qualified # 🧚🏿‍♂ man fairy: dark skin tone +1F9DB ; fully-qualified # 🧛 vampire +1F9DB 1F3FB ; fully-qualified # 🧛🏻 vampire: light skin tone +1F9DB 1F3FC ; fully-qualified # 🧛🏼 vampire: medium-light skin tone +1F9DB 1F3FD ; fully-qualified # 🧛🏽 vampire: medium skin tone +1F9DB 1F3FE ; fully-qualified # 🧛🏾 vampire: medium-dark skin tone +1F9DB 1F3FF ; fully-qualified # 🧛🏿 vampire: dark skin tone +1F9DB 200D 2640 FE0F ; fully-qualified # 🧛‍♀️ woman vampire +1F9DB 200D 2640 ; non-fully-qualified # 🧛‍♀ woman vampire +1F9DB 1F3FB 200D 2640 FE0F ; fully-qualified # 🧛🏻‍♀️ woman vampire: light skin tone +1F9DB 1F3FB 200D 2640 ; non-fully-qualified # 🧛🏻‍♀ woman vampire: light skin tone +1F9DB 1F3FC 200D 2640 FE0F ; fully-qualified # 🧛🏼‍♀️ woman vampire: medium-light skin tone +1F9DB 1F3FC 200D 2640 ; non-fully-qualified # 🧛🏼‍♀ woman vampire: medium-light skin tone +1F9DB 1F3FD 200D 2640 FE0F ; fully-qualified # 🧛🏽‍♀️ woman vampire: medium skin tone +1F9DB 1F3FD 200D 2640 ; non-fully-qualified # 🧛🏽‍♀ woman vampire: medium skin tone +1F9DB 1F3FE 200D 2640 FE0F ; fully-qualified # 🧛🏾‍♀️ woman vampire: medium-dark skin tone +1F9DB 1F3FE 200D 2640 ; non-fully-qualified # 🧛🏾‍♀ woman vampire: medium-dark skin tone +1F9DB 1F3FF 200D 2640 FE0F ; fully-qualified # 🧛🏿‍♀️ woman vampire: dark skin tone +1F9DB 1F3FF 200D 2640 ; non-fully-qualified # 🧛🏿‍♀ woman vampire: dark skin tone +1F9DB 200D 2642 FE0F ; fully-qualified # 🧛‍♂️ man vampire +1F9DB 200D 2642 ; non-fully-qualified # 🧛‍♂ man vampire +1F9DB 1F3FB 200D 2642 FE0F ; fully-qualified # 🧛🏻‍♂️ man vampire: light skin tone +1F9DB 1F3FB 200D 2642 ; non-fully-qualified # 🧛🏻‍♂ man vampire: light skin tone +1F9DB 1F3FC 200D 2642 FE0F ; fully-qualified # 🧛🏼‍♂️ man vampire: medium-light skin tone +1F9DB 1F3FC 200D 2642 ; non-fully-qualified # 🧛🏼‍♂ man vampire: medium-light skin tone +1F9DB 1F3FD 200D 2642 FE0F ; fully-qualified # 🧛🏽‍♂️ man vampire: medium skin tone +1F9DB 1F3FD 200D 2642 ; non-fully-qualified # 🧛🏽‍♂ man vampire: medium skin tone +1F9DB 1F3FE 200D 2642 FE0F ; fully-qualified # 🧛🏾‍♂️ man vampire: medium-dark skin tone +1F9DB 1F3FE 200D 2642 ; non-fully-qualified # 🧛🏾‍♂ man vampire: medium-dark skin tone +1F9DB 1F3FF 200D 2642 FE0F ; fully-qualified # 🧛🏿‍♂️ man vampire: dark skin tone +1F9DB 1F3FF 200D 2642 ; non-fully-qualified # 🧛🏿‍♂ man vampire: dark skin tone +1F9DC ; fully-qualified # 🧜 merperson +1F9DC 1F3FB ; fully-qualified # 🧜🏻 merperson: light skin tone +1F9DC 1F3FC ; fully-qualified # 🧜🏼 merperson: medium-light skin tone +1F9DC 1F3FD ; fully-qualified # 🧜🏽 merperson: medium skin tone +1F9DC 1F3FE ; fully-qualified # 🧜🏾 merperson: medium-dark skin tone +1F9DC 1F3FF ; fully-qualified # 🧜🏿 merperson: dark skin tone +1F9DC 200D 2640 FE0F ; fully-qualified # 🧜‍♀️ mermaid +1F9DC 200D 2640 ; non-fully-qualified # 🧜‍♀ mermaid +1F9DC 1F3FB 200D 2640 FE0F ; fully-qualified # 🧜🏻‍♀️ mermaid: light skin tone +1F9DC 1F3FB 200D 2640 ; non-fully-qualified # 🧜🏻‍♀ mermaid: light skin tone +1F9DC 1F3FC 200D 2640 FE0F ; fully-qualified # 🧜🏼‍♀️ mermaid: medium-light skin tone +1F9DC 1F3FC 200D 2640 ; non-fully-qualified # 🧜🏼‍♀ mermaid: medium-light skin tone +1F9DC 1F3FD 200D 2640 FE0F ; fully-qualified # 🧜🏽‍♀️ mermaid: medium skin tone +1F9DC 1F3FD 200D 2640 ; non-fully-qualified # 🧜🏽‍♀ mermaid: medium skin tone +1F9DC 1F3FE 200D 2640 FE0F ; fully-qualified # 🧜🏾‍♀️ mermaid: medium-dark skin tone +1F9DC 1F3FE 200D 2640 ; non-fully-qualified # 🧜🏾‍♀ mermaid: medium-dark skin tone +1F9DC 1F3FF 200D 2640 FE0F ; fully-qualified # 🧜🏿‍♀️ mermaid: dark skin tone +1F9DC 1F3FF 200D 2640 ; non-fully-qualified # 🧜🏿‍♀ mermaid: dark skin tone +1F9DC 200D 2642 FE0F ; fully-qualified # 🧜‍♂️ merman +1F9DC 200D 2642 ; non-fully-qualified # 🧜‍♂ merman +1F9DC 1F3FB 200D 2642 FE0F ; fully-qualified # 🧜🏻‍♂️ merman: light skin tone +1F9DC 1F3FB 200D 2642 ; non-fully-qualified # 🧜🏻‍♂ merman: light skin tone +1F9DC 1F3FC 200D 2642 FE0F ; fully-qualified # 🧜🏼‍♂️ merman: medium-light skin tone +1F9DC 1F3FC 200D 2642 ; non-fully-qualified # 🧜🏼‍♂ merman: medium-light skin tone +1F9DC 1F3FD 200D 2642 FE0F ; fully-qualified # 🧜🏽‍♂️ merman: medium skin tone +1F9DC 1F3FD 200D 2642 ; non-fully-qualified # 🧜🏽‍♂ merman: medium skin tone +1F9DC 1F3FE 200D 2642 FE0F ; fully-qualified # 🧜🏾‍♂️ merman: medium-dark skin tone +1F9DC 1F3FE 200D 2642 ; non-fully-qualified # 🧜🏾‍♂ merman: medium-dark skin tone +1F9DC 1F3FF 200D 2642 FE0F ; fully-qualified # 🧜🏿‍♂️ merman: dark skin tone +1F9DC 1F3FF 200D 2642 ; non-fully-qualified # 🧜🏿‍♂ merman: dark skin tone +1F9DD ; fully-qualified # 🧝 elf +1F9DD 1F3FB ; fully-qualified # 🧝🏻 elf: light skin tone +1F9DD 1F3FC ; fully-qualified # 🧝🏼 elf: medium-light skin tone +1F9DD 1F3FD ; fully-qualified # 🧝🏽 elf: medium skin tone +1F9DD 1F3FE ; fully-qualified # 🧝🏾 elf: medium-dark skin tone +1F9DD 1F3FF ; fully-qualified # 🧝🏿 elf: dark skin tone +1F9DD 200D 2640 FE0F ; fully-qualified # 🧝‍♀️ woman elf +1F9DD 200D 2640 ; non-fully-qualified # 🧝‍♀ woman elf +1F9DD 1F3FB 200D 2640 FE0F ; fully-qualified # 🧝🏻‍♀️ woman elf: light skin tone +1F9DD 1F3FB 200D 2640 ; non-fully-qualified # 🧝🏻‍♀ woman elf: light skin tone +1F9DD 1F3FC 200D 2640 FE0F ; fully-qualified # 🧝🏼‍♀️ woman elf: medium-light skin tone +1F9DD 1F3FC 200D 2640 ; non-fully-qualified # 🧝🏼‍♀ woman elf: medium-light skin tone +1F9DD 1F3FD 200D 2640 FE0F ; fully-qualified # 🧝🏽‍♀️ woman elf: medium skin tone +1F9DD 1F3FD 200D 2640 ; non-fully-qualified # 🧝🏽‍♀ woman elf: medium skin tone +1F9DD 1F3FE 200D 2640 FE0F ; fully-qualified # 🧝🏾‍♀️ woman elf: medium-dark skin tone +1F9DD 1F3FE 200D 2640 ; non-fully-qualified # 🧝🏾‍♀ woman elf: medium-dark skin tone +1F9DD 1F3FF 200D 2640 FE0F ; fully-qualified # 🧝🏿‍♀️ woman elf: dark skin tone +1F9DD 1F3FF 200D 2640 ; non-fully-qualified # 🧝🏿‍♀ woman elf: dark skin tone +1F9DD 200D 2642 FE0F ; fully-qualified # 🧝‍♂️ man elf +1F9DD 200D 2642 ; non-fully-qualified # 🧝‍♂ man elf +1F9DD 1F3FB 200D 2642 FE0F ; fully-qualified # 🧝🏻‍♂️ man elf: light skin tone +1F9DD 1F3FB 200D 2642 ; non-fully-qualified # 🧝🏻‍♂ man elf: light skin tone +1F9DD 1F3FC 200D 2642 FE0F ; fully-qualified # 🧝🏼‍♂️ man elf: medium-light skin tone +1F9DD 1F3FC 200D 2642 ; non-fully-qualified # 🧝🏼‍♂ man elf: medium-light skin tone +1F9DD 1F3FD 200D 2642 FE0F ; fully-qualified # 🧝🏽‍♂️ man elf: medium skin tone +1F9DD 1F3FD 200D 2642 ; non-fully-qualified # 🧝🏽‍♂ man elf: medium skin tone +1F9DD 1F3FE 200D 2642 FE0F ; fully-qualified # 🧝🏾‍♂️ man elf: medium-dark skin tone +1F9DD 1F3FE 200D 2642 ; non-fully-qualified # 🧝🏾‍♂ man elf: medium-dark skin tone +1F9DD 1F3FF 200D 2642 FE0F ; fully-qualified # 🧝🏿‍♂️ man elf: dark skin tone +1F9DD 1F3FF 200D 2642 ; non-fully-qualified # 🧝🏿‍♂ man elf: dark skin tone +1F9DE ; fully-qualified # 🧞 genie +1F9DE 200D 2640 FE0F ; fully-qualified # 🧞‍♀️ woman genie +1F9DE 200D 2640 ; non-fully-qualified # 🧞‍♀ woman genie +1F9DE 200D 2642 FE0F ; fully-qualified # 🧞‍♂️ man genie +1F9DE 200D 2642 ; non-fully-qualified # 🧞‍♂ man genie +1F9DF ; fully-qualified # 🧟 zombie +1F9DF 200D 2640 FE0F ; fully-qualified # 🧟‍♀️ woman zombie +1F9DF 200D 2640 ; non-fully-qualified # 🧟‍♀ woman zombie +1F9DF 200D 2642 FE0F ; fully-qualified # 🧟‍♂️ man zombie +1F9DF 200D 2642 ; non-fully-qualified # 🧟‍♂ man zombie + +# subgroup: person-gesture +1F64D ; fully-qualified # 🙍 person frowning +1F64D 1F3FB ; fully-qualified # 🙍🏻 person frowning: light skin tone +1F64D 1F3FC ; fully-qualified # 🙍🏼 person frowning: medium-light skin tone +1F64D 1F3FD ; fully-qualified # 🙍🏽 person frowning: medium skin tone +1F64D 1F3FE ; fully-qualified # 🙍🏾 person frowning: medium-dark skin tone +1F64D 1F3FF ; fully-qualified # 🙍🏿 person frowning: dark skin tone +1F64D 200D 2642 FE0F ; fully-qualified # 🙍‍♂️ man frowning +1F64D 200D 2642 ; non-fully-qualified # 🙍‍♂ man frowning +1F64D 1F3FB 200D 2642 FE0F ; fully-qualified # 🙍🏻‍♂️ man frowning: light skin tone +1F64D 1F3FB 200D 2642 ; non-fully-qualified # 🙍🏻‍♂ man frowning: light skin tone +1F64D 1F3FC 200D 2642 FE0F ; fully-qualified # 🙍🏼‍♂️ man frowning: medium-light skin tone +1F64D 1F3FC 200D 2642 ; non-fully-qualified # 🙍🏼‍♂ man frowning: medium-light skin tone +1F64D 1F3FD 200D 2642 FE0F ; fully-qualified # 🙍🏽‍♂️ man frowning: medium skin tone +1F64D 1F3FD 200D 2642 ; non-fully-qualified # 🙍🏽‍♂ man frowning: medium skin tone +1F64D 1F3FE 200D 2642 FE0F ; fully-qualified # 🙍🏾‍♂️ man frowning: medium-dark skin tone +1F64D 1F3FE 200D 2642 ; non-fully-qualified # 🙍🏾‍♂ man frowning: medium-dark skin tone +1F64D 1F3FF 200D 2642 FE0F ; fully-qualified # 🙍🏿‍♂️ man frowning: dark skin tone +1F64D 1F3FF 200D 2642 ; non-fully-qualified # 🙍🏿‍♂ man frowning: dark skin tone +1F64D 200D 2640 FE0F ; fully-qualified # 🙍‍♀️ woman frowning +1F64D 200D 2640 ; non-fully-qualified # 🙍‍♀ woman frowning +1F64D 1F3FB 200D 2640 FE0F ; fully-qualified # 🙍🏻‍♀️ woman frowning: light skin tone +1F64D 1F3FB 200D 2640 ; non-fully-qualified # 🙍🏻‍♀ woman frowning: light skin tone +1F64D 1F3FC 200D 2640 FE0F ; fully-qualified # 🙍🏼‍♀️ woman frowning: medium-light skin tone +1F64D 1F3FC 200D 2640 ; non-fully-qualified # 🙍🏼‍♀ woman frowning: medium-light skin tone +1F64D 1F3FD 200D 2640 FE0F ; fully-qualified # 🙍🏽‍♀️ woman frowning: medium skin tone +1F64D 1F3FD 200D 2640 ; non-fully-qualified # 🙍🏽‍♀ woman frowning: medium skin tone +1F64D 1F3FE 200D 2640 FE0F ; fully-qualified # 🙍🏾‍♀️ woman frowning: medium-dark skin tone +1F64D 1F3FE 200D 2640 ; non-fully-qualified # 🙍🏾‍♀ woman frowning: medium-dark skin tone +1F64D 1F3FF 200D 2640 FE0F ; fully-qualified # 🙍🏿‍♀️ woman frowning: dark skin tone +1F64D 1F3FF 200D 2640 ; non-fully-qualified # 🙍🏿‍♀ woman frowning: dark skin tone +1F64E ; fully-qualified # 🙎 person pouting +1F64E 1F3FB ; fully-qualified # 🙎🏻 person pouting: light skin tone +1F64E 1F3FC ; fully-qualified # 🙎🏼 person pouting: medium-light skin tone +1F64E 1F3FD ; fully-qualified # 🙎🏽 person pouting: medium skin tone +1F64E 1F3FE ; fully-qualified # 🙎🏾 person pouting: medium-dark skin tone +1F64E 1F3FF ; fully-qualified # 🙎🏿 person pouting: dark skin tone +1F64E 200D 2642 FE0F ; fully-qualified # 🙎‍♂️ man pouting +1F64E 200D 2642 ; non-fully-qualified # 🙎‍♂ man pouting +1F64E 1F3FB 200D 2642 FE0F ; fully-qualified # 🙎🏻‍♂️ man pouting: light skin tone +1F64E 1F3FB 200D 2642 ; non-fully-qualified # 🙎🏻‍♂ man pouting: light skin tone +1F64E 1F3FC 200D 2642 FE0F ; fully-qualified # 🙎🏼‍♂️ man pouting: medium-light skin tone +1F64E 1F3FC 200D 2642 ; non-fully-qualified # 🙎🏼‍♂ man pouting: medium-light skin tone +1F64E 1F3FD 200D 2642 FE0F ; fully-qualified # 🙎🏽‍♂️ man pouting: medium skin tone +1F64E 1F3FD 200D 2642 ; non-fully-qualified # 🙎🏽‍♂ man pouting: medium skin tone +1F64E 1F3FE 200D 2642 FE0F ; fully-qualified # 🙎🏾‍♂️ man pouting: medium-dark skin tone +1F64E 1F3FE 200D 2642 ; non-fully-qualified # 🙎🏾‍♂ man pouting: medium-dark skin tone +1F64E 1F3FF 200D 2642 FE0F ; fully-qualified # 🙎🏿‍♂️ man pouting: dark skin tone +1F64E 1F3FF 200D 2642 ; non-fully-qualified # 🙎🏿‍♂ man pouting: dark skin tone +1F64E 200D 2640 FE0F ; fully-qualified # 🙎‍♀️ woman pouting +1F64E 200D 2640 ; non-fully-qualified # 🙎‍♀ woman pouting +1F64E 1F3FB 200D 2640 FE0F ; fully-qualified # 🙎🏻‍♀️ woman pouting: light skin tone +1F64E 1F3FB 200D 2640 ; non-fully-qualified # 🙎🏻‍♀ woman pouting: light skin tone +1F64E 1F3FC 200D 2640 FE0F ; fully-qualified # 🙎🏼‍♀️ woman pouting: medium-light skin tone +1F64E 1F3FC 200D 2640 ; non-fully-qualified # 🙎🏼‍♀ woman pouting: medium-light skin tone +1F64E 1F3FD 200D 2640 FE0F ; fully-qualified # 🙎🏽‍♀️ woman pouting: medium skin tone +1F64E 1F3FD 200D 2640 ; non-fully-qualified # 🙎🏽‍♀ woman pouting: medium skin tone +1F64E 1F3FE 200D 2640 FE0F ; fully-qualified # 🙎🏾‍♀️ woman pouting: medium-dark skin tone +1F64E 1F3FE 200D 2640 ; non-fully-qualified # 🙎🏾‍♀ woman pouting: medium-dark skin tone +1F64E 1F3FF 200D 2640 FE0F ; fully-qualified # 🙎🏿‍♀️ woman pouting: dark skin tone +1F64E 1F3FF 200D 2640 ; non-fully-qualified # 🙎🏿‍♀ woman pouting: dark skin tone +1F645 ; fully-qualified # 🙅 person gesturing NO +1F645 1F3FB ; fully-qualified # 🙅🏻 person gesturing NO: light skin tone +1F645 1F3FC ; fully-qualified # 🙅🏼 person gesturing NO: medium-light skin tone +1F645 1F3FD ; fully-qualified # 🙅🏽 person gesturing NO: medium skin tone +1F645 1F3FE ; fully-qualified # 🙅🏾 person gesturing NO: medium-dark skin tone +1F645 1F3FF ; fully-qualified # 🙅🏿 person gesturing NO: dark skin tone +1F645 200D 2642 FE0F ; fully-qualified # 🙅‍♂️ man gesturing NO +1F645 200D 2642 ; non-fully-qualified # 🙅‍♂ man gesturing NO +1F645 1F3FB 200D 2642 FE0F ; fully-qualified # 🙅🏻‍♂️ man gesturing NO: light skin tone +1F645 1F3FB 200D 2642 ; non-fully-qualified # 🙅🏻‍♂ man gesturing NO: light skin tone +1F645 1F3FC 200D 2642 FE0F ; fully-qualified # 🙅🏼‍♂️ man gesturing NO: medium-light skin tone +1F645 1F3FC 200D 2642 ; non-fully-qualified # 🙅🏼‍♂ man gesturing NO: medium-light skin tone +1F645 1F3FD 200D 2642 FE0F ; fully-qualified # 🙅🏽‍♂️ man gesturing NO: medium skin tone +1F645 1F3FD 200D 2642 ; non-fully-qualified # 🙅🏽‍♂ man gesturing NO: medium skin tone +1F645 1F3FE 200D 2642 FE0F ; fully-qualified # 🙅🏾‍♂️ man gesturing NO: medium-dark skin tone +1F645 1F3FE 200D 2642 ; non-fully-qualified # 🙅🏾‍♂ man gesturing NO: medium-dark skin tone +1F645 1F3FF 200D 2642 FE0F ; fully-qualified # 🙅🏿‍♂️ man gesturing NO: dark skin tone +1F645 1F3FF 200D 2642 ; non-fully-qualified # 🙅🏿‍♂ man gesturing NO: dark skin tone +1F645 200D 2640 FE0F ; fully-qualified # 🙅‍♀️ woman gesturing NO +1F645 200D 2640 ; non-fully-qualified # 🙅‍♀ woman gesturing NO +1F645 1F3FB 200D 2640 FE0F ; fully-qualified # 🙅🏻‍♀️ woman gesturing NO: light skin tone +1F645 1F3FB 200D 2640 ; non-fully-qualified # 🙅🏻‍♀ woman gesturing NO: light skin tone +1F645 1F3FC 200D 2640 FE0F ; fully-qualified # 🙅🏼‍♀️ woman gesturing NO: medium-light skin tone +1F645 1F3FC 200D 2640 ; non-fully-qualified # 🙅🏼‍♀ woman gesturing NO: medium-light skin tone +1F645 1F3FD 200D 2640 FE0F ; fully-qualified # 🙅🏽‍♀️ woman gesturing NO: medium skin tone +1F645 1F3FD 200D 2640 ; non-fully-qualified # 🙅🏽‍♀ woman gesturing NO: medium skin tone +1F645 1F3FE 200D 2640 FE0F ; fully-qualified # 🙅🏾‍♀️ woman gesturing NO: medium-dark skin tone +1F645 1F3FE 200D 2640 ; non-fully-qualified # 🙅🏾‍♀ woman gesturing NO: medium-dark skin tone +1F645 1F3FF 200D 2640 FE0F ; fully-qualified # 🙅🏿‍♀️ woman gesturing NO: dark skin tone +1F645 1F3FF 200D 2640 ; non-fully-qualified # 🙅🏿‍♀ woman gesturing NO: dark skin tone +1F646 ; fully-qualified # 🙆 person gesturing OK +1F646 1F3FB ; fully-qualified # 🙆🏻 person gesturing OK: light skin tone +1F646 1F3FC ; fully-qualified # 🙆🏼 person gesturing OK: medium-light skin tone +1F646 1F3FD ; fully-qualified # 🙆🏽 person gesturing OK: medium skin tone +1F646 1F3FE ; fully-qualified # 🙆🏾 person gesturing OK: medium-dark skin tone +1F646 1F3FF ; fully-qualified # 🙆🏿 person gesturing OK: dark skin tone +1F646 200D 2642 FE0F ; fully-qualified # 🙆‍♂️ man gesturing OK +1F646 200D 2642 ; non-fully-qualified # 🙆‍♂ man gesturing OK +1F646 1F3FB 200D 2642 FE0F ; fully-qualified # 🙆🏻‍♂️ man gesturing OK: light skin tone +1F646 1F3FB 200D 2642 ; non-fully-qualified # 🙆🏻‍♂ man gesturing OK: light skin tone +1F646 1F3FC 200D 2642 FE0F ; fully-qualified # 🙆🏼‍♂️ man gesturing OK: medium-light skin tone +1F646 1F3FC 200D 2642 ; non-fully-qualified # 🙆🏼‍♂ man gesturing OK: medium-light skin tone +1F646 1F3FD 200D 2642 FE0F ; fully-qualified # 🙆🏽‍♂️ man gesturing OK: medium skin tone +1F646 1F3FD 200D 2642 ; non-fully-qualified # 🙆🏽‍♂ man gesturing OK: medium skin tone +1F646 1F3FE 200D 2642 FE0F ; fully-qualified # 🙆🏾‍♂️ man gesturing OK: medium-dark skin tone +1F646 1F3FE 200D 2642 ; non-fully-qualified # 🙆🏾‍♂ man gesturing OK: medium-dark skin tone +1F646 1F3FF 200D 2642 FE0F ; fully-qualified # 🙆🏿‍♂️ man gesturing OK: dark skin tone +1F646 1F3FF 200D 2642 ; non-fully-qualified # 🙆🏿‍♂ man gesturing OK: dark skin tone +1F646 200D 2640 FE0F ; fully-qualified # 🙆‍♀️ woman gesturing OK +1F646 200D 2640 ; non-fully-qualified # 🙆‍♀ woman gesturing OK +1F646 1F3FB 200D 2640 FE0F ; fully-qualified # 🙆🏻‍♀️ woman gesturing OK: light skin tone +1F646 1F3FB 200D 2640 ; non-fully-qualified # 🙆🏻‍♀ woman gesturing OK: light skin tone +1F646 1F3FC 200D 2640 FE0F ; fully-qualified # 🙆🏼‍♀️ woman gesturing OK: medium-light skin tone +1F646 1F3FC 200D 2640 ; non-fully-qualified # 🙆🏼‍♀ woman gesturing OK: medium-light skin tone +1F646 1F3FD 200D 2640 FE0F ; fully-qualified # 🙆🏽‍♀️ woman gesturing OK: medium skin tone +1F646 1F3FD 200D 2640 ; non-fully-qualified # 🙆🏽‍♀ woman gesturing OK: medium skin tone +1F646 1F3FE 200D 2640 FE0F ; fully-qualified # 🙆🏾‍♀️ woman gesturing OK: medium-dark skin tone +1F646 1F3FE 200D 2640 ; non-fully-qualified # 🙆🏾‍♀ woman gesturing OK: medium-dark skin tone +1F646 1F3FF 200D 2640 FE0F ; fully-qualified # 🙆🏿‍♀️ woman gesturing OK: dark skin tone +1F646 1F3FF 200D 2640 ; non-fully-qualified # 🙆🏿‍♀ woman gesturing OK: dark skin tone +1F481 ; fully-qualified # 💁 person tipping hand +1F481 1F3FB ; fully-qualified # 💁🏻 person tipping hand: light skin tone +1F481 1F3FC ; fully-qualified # 💁🏼 person tipping hand: medium-light skin tone +1F481 1F3FD ; fully-qualified # 💁🏽 person tipping hand: medium skin tone +1F481 1F3FE ; fully-qualified # 💁🏾 person tipping hand: medium-dark skin tone +1F481 1F3FF ; fully-qualified # 💁🏿 person tipping hand: dark skin tone +1F481 200D 2642 FE0F ; fully-qualified # 💁‍♂️ man tipping hand +1F481 200D 2642 ; non-fully-qualified # 💁‍♂ man tipping hand +1F481 1F3FB 200D 2642 FE0F ; fully-qualified # 💁🏻‍♂️ man tipping hand: light skin tone +1F481 1F3FB 200D 2642 ; non-fully-qualified # 💁🏻‍♂ man tipping hand: light skin tone +1F481 1F3FC 200D 2642 FE0F ; fully-qualified # 💁🏼‍♂️ man tipping hand: medium-light skin tone +1F481 1F3FC 200D 2642 ; non-fully-qualified # 💁🏼‍♂ man tipping hand: medium-light skin tone +1F481 1F3FD 200D 2642 FE0F ; fully-qualified # 💁🏽‍♂️ man tipping hand: medium skin tone +1F481 1F3FD 200D 2642 ; non-fully-qualified # 💁🏽‍♂ man tipping hand: medium skin tone +1F481 1F3FE 200D 2642 FE0F ; fully-qualified # 💁🏾‍♂️ man tipping hand: medium-dark skin tone +1F481 1F3FE 200D 2642 ; non-fully-qualified # 💁🏾‍♂ man tipping hand: medium-dark skin tone +1F481 1F3FF 200D 2642 FE0F ; fully-qualified # 💁🏿‍♂️ man tipping hand: dark skin tone +1F481 1F3FF 200D 2642 ; non-fully-qualified # 💁🏿‍♂ man tipping hand: dark skin tone +1F481 200D 2640 FE0F ; fully-qualified # 💁‍♀️ woman tipping hand +1F481 200D 2640 ; non-fully-qualified # 💁‍♀ woman tipping hand +1F481 1F3FB 200D 2640 FE0F ; fully-qualified # 💁🏻‍♀️ woman tipping hand: light skin tone +1F481 1F3FB 200D 2640 ; non-fully-qualified # 💁🏻‍♀ woman tipping hand: light skin tone +1F481 1F3FC 200D 2640 FE0F ; fully-qualified # 💁🏼‍♀️ woman tipping hand: medium-light skin tone +1F481 1F3FC 200D 2640 ; non-fully-qualified # 💁🏼‍♀ woman tipping hand: medium-light skin tone +1F481 1F3FD 200D 2640 FE0F ; fully-qualified # 💁🏽‍♀️ woman tipping hand: medium skin tone +1F481 1F3FD 200D 2640 ; non-fully-qualified # 💁🏽‍♀ woman tipping hand: medium skin tone +1F481 1F3FE 200D 2640 FE0F ; fully-qualified # 💁🏾‍♀️ woman tipping hand: medium-dark skin tone +1F481 1F3FE 200D 2640 ; non-fully-qualified # 💁🏾‍♀ woman tipping hand: medium-dark skin tone +1F481 1F3FF 200D 2640 FE0F ; fully-qualified # 💁🏿‍♀️ woman tipping hand: dark skin tone +1F481 1F3FF 200D 2640 ; non-fully-qualified # 💁🏿‍♀ woman tipping hand: dark skin tone +1F64B ; fully-qualified # 🙋 person raising hand +1F64B 1F3FB ; fully-qualified # 🙋🏻 person raising hand: light skin tone +1F64B 1F3FC ; fully-qualified # 🙋🏼 person raising hand: medium-light skin tone +1F64B 1F3FD ; fully-qualified # 🙋🏽 person raising hand: medium skin tone +1F64B 1F3FE ; fully-qualified # 🙋🏾 person raising hand: medium-dark skin tone +1F64B 1F3FF ; fully-qualified # 🙋🏿 person raising hand: dark skin tone +1F64B 200D 2642 FE0F ; fully-qualified # 🙋‍♂️ man raising hand +1F64B 200D 2642 ; non-fully-qualified # 🙋‍♂ man raising hand +1F64B 1F3FB 200D 2642 FE0F ; fully-qualified # 🙋🏻‍♂️ man raising hand: light skin tone +1F64B 1F3FB 200D 2642 ; non-fully-qualified # 🙋🏻‍♂ man raising hand: light skin tone +1F64B 1F3FC 200D 2642 FE0F ; fully-qualified # 🙋🏼‍♂️ man raising hand: medium-light skin tone +1F64B 1F3FC 200D 2642 ; non-fully-qualified # 🙋🏼‍♂ man raising hand: medium-light skin tone +1F64B 1F3FD 200D 2642 FE0F ; fully-qualified # 🙋🏽‍♂️ man raising hand: medium skin tone +1F64B 1F3FD 200D 2642 ; non-fully-qualified # 🙋🏽‍♂ man raising hand: medium skin tone +1F64B 1F3FE 200D 2642 FE0F ; fully-qualified # 🙋🏾‍♂️ man raising hand: medium-dark skin tone +1F64B 1F3FE 200D 2642 ; non-fully-qualified # 🙋🏾‍♂ man raising hand: medium-dark skin tone +1F64B 1F3FF 200D 2642 FE0F ; fully-qualified # 🙋🏿‍♂️ man raising hand: dark skin tone +1F64B 1F3FF 200D 2642 ; non-fully-qualified # 🙋🏿‍♂ man raising hand: dark skin tone +1F64B 200D 2640 FE0F ; fully-qualified # 🙋‍♀️ woman raising hand +1F64B 200D 2640 ; non-fully-qualified # 🙋‍♀ woman raising hand +1F64B 1F3FB 200D 2640 FE0F ; fully-qualified # 🙋🏻‍♀️ woman raising hand: light skin tone +1F64B 1F3FB 200D 2640 ; non-fully-qualified # 🙋🏻‍♀ woman raising hand: light skin tone +1F64B 1F3FC 200D 2640 FE0F ; fully-qualified # 🙋🏼‍♀️ woman raising hand: medium-light skin tone +1F64B 1F3FC 200D 2640 ; non-fully-qualified # 🙋🏼‍♀ woman raising hand: medium-light skin tone +1F64B 1F3FD 200D 2640 FE0F ; fully-qualified # 🙋🏽‍♀️ woman raising hand: medium skin tone +1F64B 1F3FD 200D 2640 ; non-fully-qualified # 🙋🏽‍♀ woman raising hand: medium skin tone +1F64B 1F3FE 200D 2640 FE0F ; fully-qualified # 🙋🏾‍♀️ woman raising hand: medium-dark skin tone +1F64B 1F3FE 200D 2640 ; non-fully-qualified # 🙋🏾‍♀ woman raising hand: medium-dark skin tone +1F64B 1F3FF 200D 2640 FE0F ; fully-qualified # 🙋🏿‍♀️ woman raising hand: dark skin tone +1F64B 1F3FF 200D 2640 ; non-fully-qualified # 🙋🏿‍♀ woman raising hand: dark skin tone +1F647 ; fully-qualified # 🙇 person bowing +1F647 1F3FB ; fully-qualified # 🙇🏻 person bowing: light skin tone +1F647 1F3FC ; fully-qualified # 🙇🏼 person bowing: medium-light skin tone +1F647 1F3FD ; fully-qualified # 🙇🏽 person bowing: medium skin tone +1F647 1F3FE ; fully-qualified # 🙇🏾 person bowing: medium-dark skin tone +1F647 1F3FF ; fully-qualified # 🙇🏿 person bowing: dark skin tone +1F647 200D 2642 FE0F ; fully-qualified # 🙇‍♂️ man bowing +1F647 200D 2642 ; non-fully-qualified # 🙇‍♂ man bowing +1F647 1F3FB 200D 2642 FE0F ; fully-qualified # 🙇🏻‍♂️ man bowing: light skin tone +1F647 1F3FB 200D 2642 ; non-fully-qualified # 🙇🏻‍♂ man bowing: light skin tone +1F647 1F3FC 200D 2642 FE0F ; fully-qualified # 🙇🏼‍♂️ man bowing: medium-light skin tone +1F647 1F3FC 200D 2642 ; non-fully-qualified # 🙇🏼‍♂ man bowing: medium-light skin tone +1F647 1F3FD 200D 2642 FE0F ; fully-qualified # 🙇🏽‍♂️ man bowing: medium skin tone +1F647 1F3FD 200D 2642 ; non-fully-qualified # 🙇🏽‍♂ man bowing: medium skin tone +1F647 1F3FE 200D 2642 FE0F ; fully-qualified # 🙇🏾‍♂️ man bowing: medium-dark skin tone +1F647 1F3FE 200D 2642 ; non-fully-qualified # 🙇🏾‍♂ man bowing: medium-dark skin tone +1F647 1F3FF 200D 2642 FE0F ; fully-qualified # 🙇🏿‍♂️ man bowing: dark skin tone +1F647 1F3FF 200D 2642 ; non-fully-qualified # 🙇🏿‍♂ man bowing: dark skin tone +1F647 200D 2640 FE0F ; fully-qualified # 🙇‍♀️ woman bowing +1F647 200D 2640 ; non-fully-qualified # 🙇‍♀ woman bowing +1F647 1F3FB 200D 2640 FE0F ; fully-qualified # 🙇🏻‍♀️ woman bowing: light skin tone +1F647 1F3FB 200D 2640 ; non-fully-qualified # 🙇🏻‍♀ woman bowing: light skin tone +1F647 1F3FC 200D 2640 FE0F ; fully-qualified # 🙇🏼‍♀️ woman bowing: medium-light skin tone +1F647 1F3FC 200D 2640 ; non-fully-qualified # 🙇🏼‍♀ woman bowing: medium-light skin tone +1F647 1F3FD 200D 2640 FE0F ; fully-qualified # 🙇🏽‍♀️ woman bowing: medium skin tone +1F647 1F3FD 200D 2640 ; non-fully-qualified # 🙇🏽‍♀ woman bowing: medium skin tone +1F647 1F3FE 200D 2640 FE0F ; fully-qualified # 🙇🏾‍♀️ woman bowing: medium-dark skin tone +1F647 1F3FE 200D 2640 ; non-fully-qualified # 🙇🏾‍♀ woman bowing: medium-dark skin tone +1F647 1F3FF 200D 2640 FE0F ; fully-qualified # 🙇🏿‍♀️ woman bowing: dark skin tone +1F647 1F3FF 200D 2640 ; non-fully-qualified # 🙇🏿‍♀ woman bowing: dark skin tone +1F926 ; fully-qualified # 🤦 person facepalming +1F926 1F3FB ; fully-qualified # 🤦🏻 person facepalming: light skin tone +1F926 1F3FC ; fully-qualified # 🤦🏼 person facepalming: medium-light skin tone +1F926 1F3FD ; fully-qualified # 🤦🏽 person facepalming: medium skin tone +1F926 1F3FE ; fully-qualified # 🤦🏾 person facepalming: medium-dark skin tone +1F926 1F3FF ; fully-qualified # 🤦🏿 person facepalming: dark skin tone +1F926 200D 2642 FE0F ; fully-qualified # 🤦‍♂️ man facepalming +1F926 200D 2642 ; non-fully-qualified # 🤦‍♂ man facepalming +1F926 1F3FB 200D 2642 FE0F ; fully-qualified # 🤦🏻‍♂️ man facepalming: light skin tone +1F926 1F3FB 200D 2642 ; non-fully-qualified # 🤦🏻‍♂ man facepalming: light skin tone +1F926 1F3FC 200D 2642 FE0F ; fully-qualified # 🤦🏼‍♂️ man facepalming: medium-light skin tone +1F926 1F3FC 200D 2642 ; non-fully-qualified # 🤦🏼‍♂ man facepalming: medium-light skin tone +1F926 1F3FD 200D 2642 FE0F ; fully-qualified # 🤦🏽‍♂️ man facepalming: medium skin tone +1F926 1F3FD 200D 2642 ; non-fully-qualified # 🤦🏽‍♂ man facepalming: medium skin tone +1F926 1F3FE 200D 2642 FE0F ; fully-qualified # 🤦🏾‍♂️ man facepalming: medium-dark skin tone +1F926 1F3FE 200D 2642 ; non-fully-qualified # 🤦🏾‍♂ man facepalming: medium-dark skin tone +1F926 1F3FF 200D 2642 FE0F ; fully-qualified # 🤦🏿‍♂️ man facepalming: dark skin tone +1F926 1F3FF 200D 2642 ; non-fully-qualified # 🤦🏿‍♂ man facepalming: dark skin tone +1F926 200D 2640 FE0F ; fully-qualified # 🤦‍♀️ woman facepalming +1F926 200D 2640 ; non-fully-qualified # 🤦‍♀ woman facepalming +1F926 1F3FB 200D 2640 FE0F ; fully-qualified # 🤦🏻‍♀️ woman facepalming: light skin tone +1F926 1F3FB 200D 2640 ; non-fully-qualified # 🤦🏻‍♀ woman facepalming: light skin tone +1F926 1F3FC 200D 2640 FE0F ; fully-qualified # 🤦🏼‍♀️ woman facepalming: medium-light skin tone +1F926 1F3FC 200D 2640 ; non-fully-qualified # 🤦🏼‍♀ woman facepalming: medium-light skin tone +1F926 1F3FD 200D 2640 FE0F ; fully-qualified # 🤦🏽‍♀️ woman facepalming: medium skin tone +1F926 1F3FD 200D 2640 ; non-fully-qualified # 🤦🏽‍♀ woman facepalming: medium skin tone +1F926 1F3FE 200D 2640 FE0F ; fully-qualified # 🤦🏾‍♀️ woman facepalming: medium-dark skin tone +1F926 1F3FE 200D 2640 ; non-fully-qualified # 🤦🏾‍♀ woman facepalming: medium-dark skin tone +1F926 1F3FF 200D 2640 FE0F ; fully-qualified # 🤦🏿‍♀️ woman facepalming: dark skin tone +1F926 1F3FF 200D 2640 ; non-fully-qualified # 🤦🏿‍♀ woman facepalming: dark skin tone +1F937 ; fully-qualified # 🤷 person shrugging +1F937 1F3FB ; fully-qualified # 🤷🏻 person shrugging: light skin tone +1F937 1F3FC ; fully-qualified # 🤷🏼 person shrugging: medium-light skin tone +1F937 1F3FD ; fully-qualified # 🤷🏽 person shrugging: medium skin tone +1F937 1F3FE ; fully-qualified # 🤷🏾 person shrugging: medium-dark skin tone +1F937 1F3FF ; fully-qualified # 🤷🏿 person shrugging: dark skin tone +1F937 200D 2642 FE0F ; fully-qualified # 🤷‍♂️ man shrugging +1F937 200D 2642 ; non-fully-qualified # 🤷‍♂ man shrugging +1F937 1F3FB 200D 2642 FE0F ; fully-qualified # 🤷🏻‍♂️ man shrugging: light skin tone +1F937 1F3FB 200D 2642 ; non-fully-qualified # 🤷🏻‍♂ man shrugging: light skin tone +1F937 1F3FC 200D 2642 FE0F ; fully-qualified # 🤷🏼‍♂️ man shrugging: medium-light skin tone +1F937 1F3FC 200D 2642 ; non-fully-qualified # 🤷🏼‍♂ man shrugging: medium-light skin tone +1F937 1F3FD 200D 2642 FE0F ; fully-qualified # 🤷🏽‍♂️ man shrugging: medium skin tone +1F937 1F3FD 200D 2642 ; non-fully-qualified # 🤷🏽‍♂ man shrugging: medium skin tone +1F937 1F3FE 200D 2642 FE0F ; fully-qualified # 🤷🏾‍♂️ man shrugging: medium-dark skin tone +1F937 1F3FE 200D 2642 ; non-fully-qualified # 🤷🏾‍♂ man shrugging: medium-dark skin tone +1F937 1F3FF 200D 2642 FE0F ; fully-qualified # 🤷🏿‍♂️ man shrugging: dark skin tone +1F937 1F3FF 200D 2642 ; non-fully-qualified # 🤷🏿‍♂ man shrugging: dark skin tone +1F937 200D 2640 FE0F ; fully-qualified # 🤷‍♀️ woman shrugging +1F937 200D 2640 ; non-fully-qualified # 🤷‍♀ woman shrugging +1F937 1F3FB 200D 2640 FE0F ; fully-qualified # 🤷🏻‍♀️ woman shrugging: light skin tone +1F937 1F3FB 200D 2640 ; non-fully-qualified # 🤷🏻‍♀ woman shrugging: light skin tone +1F937 1F3FC 200D 2640 FE0F ; fully-qualified # 🤷🏼‍♀️ woman shrugging: medium-light skin tone +1F937 1F3FC 200D 2640 ; non-fully-qualified # 🤷🏼‍♀ woman shrugging: medium-light skin tone +1F937 1F3FD 200D 2640 FE0F ; fully-qualified # 🤷🏽‍♀️ woman shrugging: medium skin tone +1F937 1F3FD 200D 2640 ; non-fully-qualified # 🤷🏽‍♀ woman shrugging: medium skin tone +1F937 1F3FE 200D 2640 FE0F ; fully-qualified # 🤷🏾‍♀️ woman shrugging: medium-dark skin tone +1F937 1F3FE 200D 2640 ; non-fully-qualified # 🤷🏾‍♀ woman shrugging: medium-dark skin tone +1F937 1F3FF 200D 2640 FE0F ; fully-qualified # 🤷🏿‍♀️ woman shrugging: dark skin tone +1F937 1F3FF 200D 2640 ; non-fully-qualified # 🤷🏿‍♀ woman shrugging: dark skin tone + +# subgroup: person-activity +1F486 ; fully-qualified # 💆 person getting massage +1F486 1F3FB ; fully-qualified # 💆🏻 person getting massage: light skin tone +1F486 1F3FC ; fully-qualified # 💆🏼 person getting massage: medium-light skin tone +1F486 1F3FD ; fully-qualified # 💆🏽 person getting massage: medium skin tone +1F486 1F3FE ; fully-qualified # 💆🏾 person getting massage: medium-dark skin tone +1F486 1F3FF ; fully-qualified # 💆🏿 person getting massage: dark skin tone +1F486 200D 2642 FE0F ; fully-qualified # 💆‍♂️ man getting massage +1F486 200D 2642 ; non-fully-qualified # 💆‍♂ man getting massage +1F486 1F3FB 200D 2642 FE0F ; fully-qualified # 💆🏻‍♂️ man getting massage: light skin tone +1F486 1F3FB 200D 2642 ; non-fully-qualified # 💆🏻‍♂ man getting massage: light skin tone +1F486 1F3FC 200D 2642 FE0F ; fully-qualified # 💆🏼‍♂️ man getting massage: medium-light skin tone +1F486 1F3FC 200D 2642 ; non-fully-qualified # 💆🏼‍♂ man getting massage: medium-light skin tone +1F486 1F3FD 200D 2642 FE0F ; fully-qualified # 💆🏽‍♂️ man getting massage: medium skin tone +1F486 1F3FD 200D 2642 ; non-fully-qualified # 💆🏽‍♂ man getting massage: medium skin tone +1F486 1F3FE 200D 2642 FE0F ; fully-qualified # 💆🏾‍♂️ man getting massage: medium-dark skin tone +1F486 1F3FE 200D 2642 ; non-fully-qualified # 💆🏾‍♂ man getting massage: medium-dark skin tone +1F486 1F3FF 200D 2642 FE0F ; fully-qualified # 💆🏿‍♂️ man getting massage: dark skin tone +1F486 1F3FF 200D 2642 ; non-fully-qualified # 💆🏿‍♂ man getting massage: dark skin tone +1F486 200D 2640 FE0F ; fully-qualified # 💆‍♀️ woman getting massage +1F486 200D 2640 ; non-fully-qualified # 💆‍♀ woman getting massage +1F486 1F3FB 200D 2640 FE0F ; fully-qualified # 💆🏻‍♀️ woman getting massage: light skin tone +1F486 1F3FB 200D 2640 ; non-fully-qualified # 💆🏻‍♀ woman getting massage: light skin tone +1F486 1F3FC 200D 2640 FE0F ; fully-qualified # 💆🏼‍♀️ woman getting massage: medium-light skin tone +1F486 1F3FC 200D 2640 ; non-fully-qualified # 💆🏼‍♀ woman getting massage: medium-light skin tone +1F486 1F3FD 200D 2640 FE0F ; fully-qualified # 💆🏽‍♀️ woman getting massage: medium skin tone +1F486 1F3FD 200D 2640 ; non-fully-qualified # 💆🏽‍♀ woman getting massage: medium skin tone +1F486 1F3FE 200D 2640 FE0F ; fully-qualified # 💆🏾‍♀️ woman getting massage: medium-dark skin tone +1F486 1F3FE 200D 2640 ; non-fully-qualified # 💆🏾‍♀ woman getting massage: medium-dark skin tone +1F486 1F3FF 200D 2640 FE0F ; fully-qualified # 💆🏿‍♀️ woman getting massage: dark skin tone +1F486 1F3FF 200D 2640 ; non-fully-qualified # 💆🏿‍♀ woman getting massage: dark skin tone +1F487 ; fully-qualified # 💇 person getting haircut +1F487 1F3FB ; fully-qualified # 💇🏻 person getting haircut: light skin tone +1F487 1F3FC ; fully-qualified # 💇🏼 person getting haircut: medium-light skin tone +1F487 1F3FD ; fully-qualified # 💇🏽 person getting haircut: medium skin tone +1F487 1F3FE ; fully-qualified # 💇🏾 person getting haircut: medium-dark skin tone +1F487 1F3FF ; fully-qualified # 💇🏿 person getting haircut: dark skin tone +1F487 200D 2642 FE0F ; fully-qualified # 💇‍♂️ man getting haircut +1F487 200D 2642 ; non-fully-qualified # 💇‍♂ man getting haircut +1F487 1F3FB 200D 2642 FE0F ; fully-qualified # 💇🏻‍♂️ man getting haircut: light skin tone +1F487 1F3FB 200D 2642 ; non-fully-qualified # 💇🏻‍♂ man getting haircut: light skin tone +1F487 1F3FC 200D 2642 FE0F ; fully-qualified # 💇🏼‍♂️ man getting haircut: medium-light skin tone +1F487 1F3FC 200D 2642 ; non-fully-qualified # 💇🏼‍♂ man getting haircut: medium-light skin tone +1F487 1F3FD 200D 2642 FE0F ; fully-qualified # 💇🏽‍♂️ man getting haircut: medium skin tone +1F487 1F3FD 200D 2642 ; non-fully-qualified # 💇🏽‍♂ man getting haircut: medium skin tone +1F487 1F3FE 200D 2642 FE0F ; fully-qualified # 💇🏾‍♂️ man getting haircut: medium-dark skin tone +1F487 1F3FE 200D 2642 ; non-fully-qualified # 💇🏾‍♂ man getting haircut: medium-dark skin tone +1F487 1F3FF 200D 2642 FE0F ; fully-qualified # 💇🏿‍♂️ man getting haircut: dark skin tone +1F487 1F3FF 200D 2642 ; non-fully-qualified # 💇🏿‍♂ man getting haircut: dark skin tone +1F487 200D 2640 FE0F ; fully-qualified # 💇‍♀️ woman getting haircut +1F487 200D 2640 ; non-fully-qualified # 💇‍♀ woman getting haircut +1F487 1F3FB 200D 2640 FE0F ; fully-qualified # 💇🏻‍♀️ woman getting haircut: light skin tone +1F487 1F3FB 200D 2640 ; non-fully-qualified # 💇🏻‍♀ woman getting haircut: light skin tone +1F487 1F3FC 200D 2640 FE0F ; fully-qualified # 💇🏼‍♀️ woman getting haircut: medium-light skin tone +1F487 1F3FC 200D 2640 ; non-fully-qualified # 💇🏼‍♀ woman getting haircut: medium-light skin tone +1F487 1F3FD 200D 2640 FE0F ; fully-qualified # 💇🏽‍♀️ woman getting haircut: medium skin tone +1F487 1F3FD 200D 2640 ; non-fully-qualified # 💇🏽‍♀ woman getting haircut: medium skin tone +1F487 1F3FE 200D 2640 FE0F ; fully-qualified # 💇🏾‍♀️ woman getting haircut: medium-dark skin tone +1F487 1F3FE 200D 2640 ; non-fully-qualified # 💇🏾‍♀ woman getting haircut: medium-dark skin tone +1F487 1F3FF 200D 2640 FE0F ; fully-qualified # 💇🏿‍♀️ woman getting haircut: dark skin tone +1F487 1F3FF 200D 2640 ; non-fully-qualified # 💇🏿‍♀ woman getting haircut: dark skin tone +1F6B6 ; fully-qualified # 🚶 person walking +1F6B6 1F3FB ; fully-qualified # 🚶🏻 person walking: light skin tone +1F6B6 1F3FC ; fully-qualified # 🚶🏼 person walking: medium-light skin tone +1F6B6 1F3FD ; fully-qualified # 🚶🏽 person walking: medium skin tone +1F6B6 1F3FE ; fully-qualified # 🚶🏾 person walking: medium-dark skin tone +1F6B6 1F3FF ; fully-qualified # 🚶🏿 person walking: dark skin tone +1F6B6 200D 2642 FE0F ; fully-qualified # 🚶‍♂️ man walking +1F6B6 200D 2642 ; non-fully-qualified # 🚶‍♂ man walking +1F6B6 1F3FB 200D 2642 FE0F ; fully-qualified # 🚶🏻‍♂️ man walking: light skin tone +1F6B6 1F3FB 200D 2642 ; non-fully-qualified # 🚶🏻‍♂ man walking: light skin tone +1F6B6 1F3FC 200D 2642 FE0F ; fully-qualified # 🚶🏼‍♂️ man walking: medium-light skin tone +1F6B6 1F3FC 200D 2642 ; non-fully-qualified # 🚶🏼‍♂ man walking: medium-light skin tone +1F6B6 1F3FD 200D 2642 FE0F ; fully-qualified # 🚶🏽‍♂️ man walking: medium skin tone +1F6B6 1F3FD 200D 2642 ; non-fully-qualified # 🚶🏽‍♂ man walking: medium skin tone +1F6B6 1F3FE 200D 2642 FE0F ; fully-qualified # 🚶🏾‍♂️ man walking: medium-dark skin tone +1F6B6 1F3FE 200D 2642 ; non-fully-qualified # 🚶🏾‍♂ man walking: medium-dark skin tone +1F6B6 1F3FF 200D 2642 FE0F ; fully-qualified # 🚶🏿‍♂️ man walking: dark skin tone +1F6B6 1F3FF 200D 2642 ; non-fully-qualified # 🚶🏿‍♂ man walking: dark skin tone +1F6B6 200D 2640 FE0F ; fully-qualified # 🚶‍♀️ woman walking +1F6B6 200D 2640 ; non-fully-qualified # 🚶‍♀ woman walking +1F6B6 1F3FB 200D 2640 FE0F ; fully-qualified # 🚶🏻‍♀️ woman walking: light skin tone +1F6B6 1F3FB 200D 2640 ; non-fully-qualified # 🚶🏻‍♀ woman walking: light skin tone +1F6B6 1F3FC 200D 2640 FE0F ; fully-qualified # 🚶🏼‍♀️ woman walking: medium-light skin tone +1F6B6 1F3FC 200D 2640 ; non-fully-qualified # 🚶🏼‍♀ woman walking: medium-light skin tone +1F6B6 1F3FD 200D 2640 FE0F ; fully-qualified # 🚶🏽‍♀️ woman walking: medium skin tone +1F6B6 1F3FD 200D 2640 ; non-fully-qualified # 🚶🏽‍♀ woman walking: medium skin tone +1F6B6 1F3FE 200D 2640 FE0F ; fully-qualified # 🚶🏾‍♀️ woman walking: medium-dark skin tone +1F6B6 1F3FE 200D 2640 ; non-fully-qualified # 🚶🏾‍♀ woman walking: medium-dark skin tone +1F6B6 1F3FF 200D 2640 FE0F ; fully-qualified # 🚶🏿‍♀️ woman walking: dark skin tone +1F6B6 1F3FF 200D 2640 ; non-fully-qualified # 🚶🏿‍♀ woman walking: dark skin tone +1F3C3 ; fully-qualified # 🏃 person running +1F3C3 1F3FB ; fully-qualified # 🏃🏻 person running: light skin tone +1F3C3 1F3FC ; fully-qualified # 🏃🏼 person running: medium-light skin tone +1F3C3 1F3FD ; fully-qualified # 🏃🏽 person running: medium skin tone +1F3C3 1F3FE ; fully-qualified # 🏃🏾 person running: medium-dark skin tone +1F3C3 1F3FF ; fully-qualified # 🏃🏿 person running: dark skin tone +1F3C3 200D 2642 FE0F ; fully-qualified # 🏃‍♂️ man running +1F3C3 200D 2642 ; non-fully-qualified # 🏃‍♂ man running +1F3C3 1F3FB 200D 2642 FE0F ; fully-qualified # 🏃🏻‍♂️ man running: light skin tone +1F3C3 1F3FB 200D 2642 ; non-fully-qualified # 🏃🏻‍♂ man running: light skin tone +1F3C3 1F3FC 200D 2642 FE0F ; fully-qualified # 🏃🏼‍♂️ man running: medium-light skin tone +1F3C3 1F3FC 200D 2642 ; non-fully-qualified # 🏃🏼‍♂ man running: medium-light skin tone +1F3C3 1F3FD 200D 2642 FE0F ; fully-qualified # 🏃🏽‍♂️ man running: medium skin tone +1F3C3 1F3FD 200D 2642 ; non-fully-qualified # 🏃🏽‍♂ man running: medium skin tone +1F3C3 1F3FE 200D 2642 FE0F ; fully-qualified # 🏃🏾‍♂️ man running: medium-dark skin tone +1F3C3 1F3FE 200D 2642 ; non-fully-qualified # 🏃🏾‍♂ man running: medium-dark skin tone +1F3C3 1F3FF 200D 2642 FE0F ; fully-qualified # 🏃🏿‍♂️ man running: dark skin tone +1F3C3 1F3FF 200D 2642 ; non-fully-qualified # 🏃🏿‍♂ man running: dark skin tone +1F3C3 200D 2640 FE0F ; fully-qualified # 🏃‍♀️ woman running +1F3C3 200D 2640 ; non-fully-qualified # 🏃‍♀ woman running +1F3C3 1F3FB 200D 2640 FE0F ; fully-qualified # 🏃🏻‍♀️ woman running: light skin tone +1F3C3 1F3FB 200D 2640 ; non-fully-qualified # 🏃🏻‍♀ woman running: light skin tone +1F3C3 1F3FC 200D 2640 FE0F ; fully-qualified # 🏃🏼‍♀️ woman running: medium-light skin tone +1F3C3 1F3FC 200D 2640 ; non-fully-qualified # 🏃🏼‍♀ woman running: medium-light skin tone +1F3C3 1F3FD 200D 2640 FE0F ; fully-qualified # 🏃🏽‍♀️ woman running: medium skin tone +1F3C3 1F3FD 200D 2640 ; non-fully-qualified # 🏃🏽‍♀ woman running: medium skin tone +1F3C3 1F3FE 200D 2640 FE0F ; fully-qualified # 🏃🏾‍♀️ woman running: medium-dark skin tone +1F3C3 1F3FE 200D 2640 ; non-fully-qualified # 🏃🏾‍♀ woman running: medium-dark skin tone +1F3C3 1F3FF 200D 2640 FE0F ; fully-qualified # 🏃🏿‍♀️ woman running: dark skin tone +1F3C3 1F3FF 200D 2640 ; non-fully-qualified # 🏃🏿‍♀ woman running: dark skin tone +1F483 ; fully-qualified # 💃 woman dancing +1F483 1F3FB ; fully-qualified # 💃🏻 woman dancing: light skin tone +1F483 1F3FC ; fully-qualified # 💃🏼 woman dancing: medium-light skin tone +1F483 1F3FD ; fully-qualified # 💃🏽 woman dancing: medium skin tone +1F483 1F3FE ; fully-qualified # 💃🏾 woman dancing: medium-dark skin tone +1F483 1F3FF ; fully-qualified # 💃🏿 woman dancing: dark skin tone +1F57A ; fully-qualified # 🕺 man dancing +1F57A 1F3FB ; fully-qualified # 🕺🏻 man dancing: light skin tone +1F57A 1F3FC ; fully-qualified # 🕺🏼 man dancing: medium-light skin tone +1F57A 1F3FD ; fully-qualified # 🕺🏽 man dancing: medium skin tone +1F57A 1F3FE ; fully-qualified # 🕺🏾 man dancing: medium-dark skin tone +1F57A 1F3FF ; fully-qualified # 🕺🏿 man dancing: dark skin tone +1F46F ; fully-qualified # 👯 people with bunny ears +1F46F 200D 2642 FE0F ; fully-qualified # 👯‍♂️ men with bunny ears +1F46F 200D 2642 ; non-fully-qualified # 👯‍♂ men with bunny ears +1F46F 200D 2640 FE0F ; fully-qualified # 👯‍♀️ women with bunny ears +1F46F 200D 2640 ; non-fully-qualified # 👯‍♀ women with bunny ears +1F9D6 ; fully-qualified # 🧖 person in steamy room +1F9D6 1F3FB ; fully-qualified # 🧖🏻 person in steamy room: light skin tone +1F9D6 1F3FC ; fully-qualified # 🧖🏼 person in steamy room: medium-light skin tone +1F9D6 1F3FD ; fully-qualified # 🧖🏽 person in steamy room: medium skin tone +1F9D6 1F3FE ; fully-qualified # 🧖🏾 person in steamy room: medium-dark skin tone +1F9D6 1F3FF ; fully-qualified # 🧖🏿 person in steamy room: dark skin tone +1F9D6 200D 2640 FE0F ; fully-qualified # 🧖‍♀️ woman in steamy room +1F9D6 200D 2640 ; non-fully-qualified # 🧖‍♀ woman in steamy room +1F9D6 1F3FB 200D 2640 FE0F ; fully-qualified # 🧖🏻‍♀️ woman in steamy room: light skin tone +1F9D6 1F3FB 200D 2640 ; non-fully-qualified # 🧖🏻‍♀ woman in steamy room: light skin tone +1F9D6 1F3FC 200D 2640 FE0F ; fully-qualified # 🧖🏼‍♀️ woman in steamy room: medium-light skin tone +1F9D6 1F3FC 200D 2640 ; non-fully-qualified # 🧖🏼‍♀ woman in steamy room: medium-light skin tone +1F9D6 1F3FD 200D 2640 FE0F ; fully-qualified # 🧖🏽‍♀️ woman in steamy room: medium skin tone +1F9D6 1F3FD 200D 2640 ; non-fully-qualified # 🧖🏽‍♀ woman in steamy room: medium skin tone +1F9D6 1F3FE 200D 2640 FE0F ; fully-qualified # 🧖🏾‍♀️ woman in steamy room: medium-dark skin tone +1F9D6 1F3FE 200D 2640 ; non-fully-qualified # 🧖🏾‍♀ woman in steamy room: medium-dark skin tone +1F9D6 1F3FF 200D 2640 FE0F ; fully-qualified # 🧖🏿‍♀️ woman in steamy room: dark skin tone +1F9D6 1F3FF 200D 2640 ; non-fully-qualified # 🧖🏿‍♀ woman in steamy room: dark skin tone +1F9D6 200D 2642 FE0F ; fully-qualified # 🧖‍♂️ man in steamy room +1F9D6 200D 2642 ; non-fully-qualified # 🧖‍♂ man in steamy room +1F9D6 1F3FB 200D 2642 FE0F ; fully-qualified # 🧖🏻‍♂️ man in steamy room: light skin tone +1F9D6 1F3FB 200D 2642 ; non-fully-qualified # 🧖🏻‍♂ man in steamy room: light skin tone +1F9D6 1F3FC 200D 2642 FE0F ; fully-qualified # 🧖🏼‍♂️ man in steamy room: medium-light skin tone +1F9D6 1F3FC 200D 2642 ; non-fully-qualified # 🧖🏼‍♂ man in steamy room: medium-light skin tone +1F9D6 1F3FD 200D 2642 FE0F ; fully-qualified # 🧖🏽‍♂️ man in steamy room: medium skin tone +1F9D6 1F3FD 200D 2642 ; non-fully-qualified # 🧖🏽‍♂ man in steamy room: medium skin tone +1F9D6 1F3FE 200D 2642 FE0F ; fully-qualified # 🧖🏾‍♂️ man in steamy room: medium-dark skin tone +1F9D6 1F3FE 200D 2642 ; non-fully-qualified # 🧖🏾‍♂ man in steamy room: medium-dark skin tone +1F9D6 1F3FF 200D 2642 FE0F ; fully-qualified # 🧖🏿‍♂️ man in steamy room: dark skin tone +1F9D6 1F3FF 200D 2642 ; non-fully-qualified # 🧖🏿‍♂ man in steamy room: dark skin tone +1F9D7 ; fully-qualified # 🧗 person climbing +1F9D7 1F3FB ; fully-qualified # 🧗🏻 person climbing: light skin tone +1F9D7 1F3FC ; fully-qualified # 🧗🏼 person climbing: medium-light skin tone +1F9D7 1F3FD ; fully-qualified # 🧗🏽 person climbing: medium skin tone +1F9D7 1F3FE ; fully-qualified # 🧗🏾 person climbing: medium-dark skin tone +1F9D7 1F3FF ; fully-qualified # 🧗🏿 person climbing: dark skin tone +1F9D7 200D 2640 FE0F ; fully-qualified # 🧗‍♀️ woman climbing +1F9D7 200D 2640 ; non-fully-qualified # 🧗‍♀ woman climbing +1F9D7 1F3FB 200D 2640 FE0F ; fully-qualified # 🧗🏻‍♀️ woman climbing: light skin tone +1F9D7 1F3FB 200D 2640 ; non-fully-qualified # 🧗🏻‍♀ woman climbing: light skin tone +1F9D7 1F3FC 200D 2640 FE0F ; fully-qualified # 🧗🏼‍♀️ woman climbing: medium-light skin tone +1F9D7 1F3FC 200D 2640 ; non-fully-qualified # 🧗🏼‍♀ woman climbing: medium-light skin tone +1F9D7 1F3FD 200D 2640 FE0F ; fully-qualified # 🧗🏽‍♀️ woman climbing: medium skin tone +1F9D7 1F3FD 200D 2640 ; non-fully-qualified # 🧗🏽‍♀ woman climbing: medium skin tone +1F9D7 1F3FE 200D 2640 FE0F ; fully-qualified # 🧗🏾‍♀️ woman climbing: medium-dark skin tone +1F9D7 1F3FE 200D 2640 ; non-fully-qualified # 🧗🏾‍♀ woman climbing: medium-dark skin tone +1F9D7 1F3FF 200D 2640 FE0F ; fully-qualified # 🧗🏿‍♀️ woman climbing: dark skin tone +1F9D7 1F3FF 200D 2640 ; non-fully-qualified # 🧗🏿‍♀ woman climbing: dark skin tone +1F9D7 200D 2642 FE0F ; fully-qualified # 🧗‍♂️ man climbing +1F9D7 200D 2642 ; non-fully-qualified # 🧗‍♂ man climbing +1F9D7 1F3FB 200D 2642 FE0F ; fully-qualified # 🧗🏻‍♂️ man climbing: light skin tone +1F9D7 1F3FB 200D 2642 ; non-fully-qualified # 🧗🏻‍♂ man climbing: light skin tone +1F9D7 1F3FC 200D 2642 FE0F ; fully-qualified # 🧗🏼‍♂️ man climbing: medium-light skin tone +1F9D7 1F3FC 200D 2642 ; non-fully-qualified # 🧗🏼‍♂ man climbing: medium-light skin tone +1F9D7 1F3FD 200D 2642 FE0F ; fully-qualified # 🧗🏽‍♂️ man climbing: medium skin tone +1F9D7 1F3FD 200D 2642 ; non-fully-qualified # 🧗🏽‍♂ man climbing: medium skin tone +1F9D7 1F3FE 200D 2642 FE0F ; fully-qualified # 🧗🏾‍♂️ man climbing: medium-dark skin tone +1F9D7 1F3FE 200D 2642 ; non-fully-qualified # 🧗🏾‍♂ man climbing: medium-dark skin tone +1F9D7 1F3FF 200D 2642 FE0F ; fully-qualified # 🧗🏿‍♂️ man climbing: dark skin tone +1F9D7 1F3FF 200D 2642 ; non-fully-qualified # 🧗🏿‍♂ man climbing: dark skin tone +1F9D8 ; fully-qualified # 🧘 person in lotus position +1F9D8 1F3FB ; fully-qualified # 🧘🏻 person in lotus position: light skin tone +1F9D8 1F3FC ; fully-qualified # 🧘🏼 person in lotus position: medium-light skin tone +1F9D8 1F3FD ; fully-qualified # 🧘🏽 person in lotus position: medium skin tone +1F9D8 1F3FE ; fully-qualified # 🧘🏾 person in lotus position: medium-dark skin tone +1F9D8 1F3FF ; fully-qualified # 🧘🏿 person in lotus position: dark skin tone +1F9D8 200D 2640 FE0F ; fully-qualified # 🧘‍♀️ woman in lotus position +1F9D8 200D 2640 ; non-fully-qualified # 🧘‍♀ woman in lotus position +1F9D8 1F3FB 200D 2640 FE0F ; fully-qualified # 🧘🏻‍♀️ woman in lotus position: light skin tone +1F9D8 1F3FB 200D 2640 ; non-fully-qualified # 🧘🏻‍♀ woman in lotus position: light skin tone +1F9D8 1F3FC 200D 2640 FE0F ; fully-qualified # 🧘🏼‍♀️ woman in lotus position: medium-light skin tone +1F9D8 1F3FC 200D 2640 ; non-fully-qualified # 🧘🏼‍♀ woman in lotus position: medium-light skin tone +1F9D8 1F3FD 200D 2640 FE0F ; fully-qualified # 🧘🏽‍♀️ woman in lotus position: medium skin tone +1F9D8 1F3FD 200D 2640 ; non-fully-qualified # 🧘🏽‍♀ woman in lotus position: medium skin tone +1F9D8 1F3FE 200D 2640 FE0F ; fully-qualified # 🧘🏾‍♀️ woman in lotus position: medium-dark skin tone +1F9D8 1F3FE 200D 2640 ; non-fully-qualified # 🧘🏾‍♀ woman in lotus position: medium-dark skin tone +1F9D8 1F3FF 200D 2640 FE0F ; fully-qualified # 🧘🏿‍♀️ woman in lotus position: dark skin tone +1F9D8 1F3FF 200D 2640 ; non-fully-qualified # 🧘🏿‍♀ woman in lotus position: dark skin tone +1F9D8 200D 2642 FE0F ; fully-qualified # 🧘‍♂️ man in lotus position +1F9D8 200D 2642 ; non-fully-qualified # 🧘‍♂ man in lotus position +1F9D8 1F3FB 200D 2642 FE0F ; fully-qualified # 🧘🏻‍♂️ man in lotus position: light skin tone +1F9D8 1F3FB 200D 2642 ; non-fully-qualified # 🧘🏻‍♂ man in lotus position: light skin tone +1F9D8 1F3FC 200D 2642 FE0F ; fully-qualified # 🧘🏼‍♂️ man in lotus position: medium-light skin tone +1F9D8 1F3FC 200D 2642 ; non-fully-qualified # 🧘🏼‍♂ man in lotus position: medium-light skin tone +1F9D8 1F3FD 200D 2642 FE0F ; fully-qualified # 🧘🏽‍♂️ man in lotus position: medium skin tone +1F9D8 1F3FD 200D 2642 ; non-fully-qualified # 🧘🏽‍♂ man in lotus position: medium skin tone +1F9D8 1F3FE 200D 2642 FE0F ; fully-qualified # 🧘🏾‍♂️ man in lotus position: medium-dark skin tone +1F9D8 1F3FE 200D 2642 ; non-fully-qualified # 🧘🏾‍♂ man in lotus position: medium-dark skin tone +1F9D8 1F3FF 200D 2642 FE0F ; fully-qualified # 🧘🏿‍♂️ man in lotus position: dark skin tone +1F9D8 1F3FF 200D 2642 ; non-fully-qualified # 🧘🏿‍♂ man in lotus position: dark skin tone +1F6C0 ; fully-qualified # 🛀 person taking bath +1F6C0 1F3FB ; fully-qualified # 🛀🏻 person taking bath: light skin tone +1F6C0 1F3FC ; fully-qualified # 🛀🏼 person taking bath: medium-light skin tone +1F6C0 1F3FD ; fully-qualified # 🛀🏽 person taking bath: medium skin tone +1F6C0 1F3FE ; fully-qualified # 🛀🏾 person taking bath: medium-dark skin tone +1F6C0 1F3FF ; fully-qualified # 🛀🏿 person taking bath: dark skin tone +1F6CC ; fully-qualified # 🛌 person in bed +1F6CC 1F3FB ; fully-qualified # 🛌🏻 person in bed: light skin tone +1F6CC 1F3FC ; fully-qualified # 🛌🏼 person in bed: medium-light skin tone +1F6CC 1F3FD ; fully-qualified # 🛌🏽 person in bed: medium skin tone +1F6CC 1F3FE ; fully-qualified # 🛌🏾 person in bed: medium-dark skin tone +1F6CC 1F3FF ; fully-qualified # 🛌🏿 person in bed: dark skin tone +1F574 FE0F ; fully-qualified # 🕴️ man in suit levitating +1F574 ; non-fully-qualified # 🕴 man in suit levitating +1F574 1F3FB ; fully-qualified # 🕴🏻 man in suit levitating: light skin tone +1F574 1F3FC ; fully-qualified # 🕴🏼 man in suit levitating: medium-light skin tone +1F574 1F3FD ; fully-qualified # 🕴🏽 man in suit levitating: medium skin tone +1F574 1F3FE ; fully-qualified # 🕴🏾 man in suit levitating: medium-dark skin tone +1F574 1F3FF ; fully-qualified # 🕴🏿 man in suit levitating: dark skin tone +1F5E3 FE0F ; fully-qualified # 🗣️ speaking head +1F5E3 ; non-fully-qualified # 🗣 speaking head +1F464 ; fully-qualified # 👤 bust in silhouette +1F465 ; fully-qualified # 👥 busts in silhouette + +# subgroup: person-sport +1F93A ; fully-qualified # 🤺 person fencing +1F3C7 ; fully-qualified # 🏇 horse racing +1F3C7 1F3FB ; fully-qualified # 🏇🏻 horse racing: light skin tone +1F3C7 1F3FC ; fully-qualified # 🏇🏼 horse racing: medium-light skin tone +1F3C7 1F3FD ; fully-qualified # 🏇🏽 horse racing: medium skin tone +1F3C7 1F3FE ; fully-qualified # 🏇🏾 horse racing: medium-dark skin tone +1F3C7 1F3FF ; fully-qualified # 🏇🏿 horse racing: dark skin tone +26F7 FE0F ; fully-qualified # ⛷️ skier +26F7 ; non-fully-qualified # ⛷ skier +1F3C2 ; fully-qualified # 🏂 snowboarder +1F3C2 1F3FB ; fully-qualified # 🏂🏻 snowboarder: light skin tone +1F3C2 1F3FC ; fully-qualified # 🏂🏼 snowboarder: medium-light skin tone +1F3C2 1F3FD ; fully-qualified # 🏂🏽 snowboarder: medium skin tone +1F3C2 1F3FE ; fully-qualified # 🏂🏾 snowboarder: medium-dark skin tone +1F3C2 1F3FF ; fully-qualified # 🏂🏿 snowboarder: dark skin tone +1F3CC FE0F ; fully-qualified # 🏌️ person golfing +1F3CC ; non-fully-qualified # 🏌 person golfing +1F3CC 1F3FB ; fully-qualified # 🏌🏻 person golfing: light skin tone +1F3CC 1F3FC ; fully-qualified # 🏌🏼 person golfing: medium-light skin tone +1F3CC 1F3FD ; fully-qualified # 🏌🏽 person golfing: medium skin tone +1F3CC 1F3FE ; fully-qualified # 🏌🏾 person golfing: medium-dark skin tone +1F3CC 1F3FF ; fully-qualified # 🏌🏿 person golfing: dark skin tone +1F3CC FE0F 200D 2642 FE0F ; fully-qualified # 🏌️‍♂️ man golfing +1F3CC 200D 2642 FE0F ; non-fully-qualified # 🏌‍♂️ man golfing +1F3CC FE0F 200D 2642 ; non-fully-qualified # 🏌️‍♂ man golfing +1F3CC 200D 2642 ; non-fully-qualified # 🏌‍♂ man golfing +1F3CC 1F3FB 200D 2642 FE0F ; fully-qualified # 🏌🏻‍♂️ man golfing: light skin tone +1F3CC 1F3FB 200D 2642 ; non-fully-qualified # 🏌🏻‍♂ man golfing: light skin tone +1F3CC 1F3FC 200D 2642 FE0F ; fully-qualified # 🏌🏼‍♂️ man golfing: medium-light skin tone +1F3CC 1F3FC 200D 2642 ; non-fully-qualified # 🏌🏼‍♂ man golfing: medium-light skin tone +1F3CC 1F3FD 200D 2642 FE0F ; fully-qualified # 🏌🏽‍♂️ man golfing: medium skin tone +1F3CC 1F3FD 200D 2642 ; non-fully-qualified # 🏌🏽‍♂ man golfing: medium skin tone +1F3CC 1F3FE 200D 2642 FE0F ; fully-qualified # 🏌🏾‍♂️ man golfing: medium-dark skin tone +1F3CC 1F3FE 200D 2642 ; non-fully-qualified # 🏌🏾‍♂ man golfing: medium-dark skin tone +1F3CC 1F3FF 200D 2642 FE0F ; fully-qualified # 🏌🏿‍♂️ man golfing: dark skin tone +1F3CC 1F3FF 200D 2642 ; non-fully-qualified # 🏌🏿‍♂ man golfing: dark skin tone +1F3CC FE0F 200D 2640 FE0F ; fully-qualified # 🏌️‍♀️ woman golfing +1F3CC 200D 2640 FE0F ; non-fully-qualified # 🏌‍♀️ woman golfing +1F3CC FE0F 200D 2640 ; non-fully-qualified # 🏌️‍♀ woman golfing +1F3CC 200D 2640 ; non-fully-qualified # 🏌‍♀ woman golfing +1F3CC 1F3FB 200D 2640 FE0F ; fully-qualified # 🏌🏻‍♀️ woman golfing: light skin tone +1F3CC 1F3FB 200D 2640 ; non-fully-qualified # 🏌🏻‍♀ woman golfing: light skin tone +1F3CC 1F3FC 200D 2640 FE0F ; fully-qualified # 🏌🏼‍♀️ woman golfing: medium-light skin tone +1F3CC 1F3FC 200D 2640 ; non-fully-qualified # 🏌🏼‍♀ woman golfing: medium-light skin tone +1F3CC 1F3FD 200D 2640 FE0F ; fully-qualified # 🏌🏽‍♀️ woman golfing: medium skin tone +1F3CC 1F3FD 200D 2640 ; non-fully-qualified # 🏌🏽‍♀ woman golfing: medium skin tone +1F3CC 1F3FE 200D 2640 FE0F ; fully-qualified # 🏌🏾‍♀️ woman golfing: medium-dark skin tone +1F3CC 1F3FE 200D 2640 ; non-fully-qualified # 🏌🏾‍♀ woman golfing: medium-dark skin tone +1F3CC 1F3FF 200D 2640 FE0F ; fully-qualified # 🏌🏿‍♀️ woman golfing: dark skin tone +1F3CC 1F3FF 200D 2640 ; non-fully-qualified # 🏌🏿‍♀ woman golfing: dark skin tone +1F3C4 ; fully-qualified # 🏄 person surfing +1F3C4 1F3FB ; fully-qualified # 🏄🏻 person surfing: light skin tone +1F3C4 1F3FC ; fully-qualified # 🏄🏼 person surfing: medium-light skin tone +1F3C4 1F3FD ; fully-qualified # 🏄🏽 person surfing: medium skin tone +1F3C4 1F3FE ; fully-qualified # 🏄🏾 person surfing: medium-dark skin tone +1F3C4 1F3FF ; fully-qualified # 🏄🏿 person surfing: dark skin tone +1F3C4 200D 2642 FE0F ; fully-qualified # 🏄‍♂️ man surfing +1F3C4 200D 2642 ; non-fully-qualified # 🏄‍♂ man surfing +1F3C4 1F3FB 200D 2642 FE0F ; fully-qualified # 🏄🏻‍♂️ man surfing: light skin tone +1F3C4 1F3FB 200D 2642 ; non-fully-qualified # 🏄🏻‍♂ man surfing: light skin tone +1F3C4 1F3FC 200D 2642 FE0F ; fully-qualified # 🏄🏼‍♂️ man surfing: medium-light skin tone +1F3C4 1F3FC 200D 2642 ; non-fully-qualified # 🏄🏼‍♂ man surfing: medium-light skin tone +1F3C4 1F3FD 200D 2642 FE0F ; fully-qualified # 🏄🏽‍♂️ man surfing: medium skin tone +1F3C4 1F3FD 200D 2642 ; non-fully-qualified # 🏄🏽‍♂ man surfing: medium skin tone +1F3C4 1F3FE 200D 2642 FE0F ; fully-qualified # 🏄🏾‍♂️ man surfing: medium-dark skin tone +1F3C4 1F3FE 200D 2642 ; non-fully-qualified # 🏄🏾‍♂ man surfing: medium-dark skin tone +1F3C4 1F3FF 200D 2642 FE0F ; fully-qualified # 🏄🏿‍♂️ man surfing: dark skin tone +1F3C4 1F3FF 200D 2642 ; non-fully-qualified # 🏄🏿‍♂ man surfing: dark skin tone +1F3C4 200D 2640 FE0F ; fully-qualified # 🏄‍♀️ woman surfing +1F3C4 200D 2640 ; non-fully-qualified # 🏄‍♀ woman surfing +1F3C4 1F3FB 200D 2640 FE0F ; fully-qualified # 🏄🏻‍♀️ woman surfing: light skin tone +1F3C4 1F3FB 200D 2640 ; non-fully-qualified # 🏄🏻‍♀ woman surfing: light skin tone +1F3C4 1F3FC 200D 2640 FE0F ; fully-qualified # 🏄🏼‍♀️ woman surfing: medium-light skin tone +1F3C4 1F3FC 200D 2640 ; non-fully-qualified # 🏄🏼‍♀ woman surfing: medium-light skin tone +1F3C4 1F3FD 200D 2640 FE0F ; fully-qualified # 🏄🏽‍♀️ woman surfing: medium skin tone +1F3C4 1F3FD 200D 2640 ; non-fully-qualified # 🏄🏽‍♀ woman surfing: medium skin tone +1F3C4 1F3FE 200D 2640 FE0F ; fully-qualified # 🏄🏾‍♀️ woman surfing: medium-dark skin tone +1F3C4 1F3FE 200D 2640 ; non-fully-qualified # 🏄🏾‍♀ woman surfing: medium-dark skin tone +1F3C4 1F3FF 200D 2640 FE0F ; fully-qualified # 🏄🏿‍♀️ woman surfing: dark skin tone +1F3C4 1F3FF 200D 2640 ; non-fully-qualified # 🏄🏿‍♀ woman surfing: dark skin tone +1F6A3 ; fully-qualified # 🚣 person rowing boat +1F6A3 1F3FB ; fully-qualified # 🚣🏻 person rowing boat: light skin tone +1F6A3 1F3FC ; fully-qualified # 🚣🏼 person rowing boat: medium-light skin tone +1F6A3 1F3FD ; fully-qualified # 🚣🏽 person rowing boat: medium skin tone +1F6A3 1F3FE ; fully-qualified # 🚣🏾 person rowing boat: medium-dark skin tone +1F6A3 1F3FF ; fully-qualified # 🚣🏿 person rowing boat: dark skin tone +1F6A3 200D 2642 FE0F ; fully-qualified # 🚣‍♂️ man rowing boat +1F6A3 200D 2642 ; non-fully-qualified # 🚣‍♂ man rowing boat +1F6A3 1F3FB 200D 2642 FE0F ; fully-qualified # 🚣🏻‍♂️ man rowing boat: light skin tone +1F6A3 1F3FB 200D 2642 ; non-fully-qualified # 🚣🏻‍♂ man rowing boat: light skin tone +1F6A3 1F3FC 200D 2642 FE0F ; fully-qualified # 🚣🏼‍♂️ man rowing boat: medium-light skin tone +1F6A3 1F3FC 200D 2642 ; non-fully-qualified # 🚣🏼‍♂ man rowing boat: medium-light skin tone +1F6A3 1F3FD 200D 2642 FE0F ; fully-qualified # 🚣🏽‍♂️ man rowing boat: medium skin tone +1F6A3 1F3FD 200D 2642 ; non-fully-qualified # 🚣🏽‍♂ man rowing boat: medium skin tone +1F6A3 1F3FE 200D 2642 FE0F ; fully-qualified # 🚣🏾‍♂️ man rowing boat: medium-dark skin tone +1F6A3 1F3FE 200D 2642 ; non-fully-qualified # 🚣🏾‍♂ man rowing boat: medium-dark skin tone +1F6A3 1F3FF 200D 2642 FE0F ; fully-qualified # 🚣🏿‍♂️ man rowing boat: dark skin tone +1F6A3 1F3FF 200D 2642 ; non-fully-qualified # 🚣🏿‍♂ man rowing boat: dark skin tone +1F6A3 200D 2640 FE0F ; fully-qualified # 🚣‍♀️ woman rowing boat +1F6A3 200D 2640 ; non-fully-qualified # 🚣‍♀ woman rowing boat +1F6A3 1F3FB 200D 2640 FE0F ; fully-qualified # 🚣🏻‍♀️ woman rowing boat: light skin tone +1F6A3 1F3FB 200D 2640 ; non-fully-qualified # 🚣🏻‍♀ woman rowing boat: light skin tone +1F6A3 1F3FC 200D 2640 FE0F ; fully-qualified # 🚣🏼‍♀️ woman rowing boat: medium-light skin tone +1F6A3 1F3FC 200D 2640 ; non-fully-qualified # 🚣🏼‍♀ woman rowing boat: medium-light skin tone +1F6A3 1F3FD 200D 2640 FE0F ; fully-qualified # 🚣🏽‍♀️ woman rowing boat: medium skin tone +1F6A3 1F3FD 200D 2640 ; non-fully-qualified # 🚣🏽‍♀ woman rowing boat: medium skin tone +1F6A3 1F3FE 200D 2640 FE0F ; fully-qualified # 🚣🏾‍♀️ woman rowing boat: medium-dark skin tone +1F6A3 1F3FE 200D 2640 ; non-fully-qualified # 🚣🏾‍♀ woman rowing boat: medium-dark skin tone +1F6A3 1F3FF 200D 2640 FE0F ; fully-qualified # 🚣🏿‍♀️ woman rowing boat: dark skin tone +1F6A3 1F3FF 200D 2640 ; non-fully-qualified # 🚣🏿‍♀ woman rowing boat: dark skin tone +1F3CA ; fully-qualified # 🏊 person swimming +1F3CA 1F3FB ; fully-qualified # 🏊🏻 person swimming: light skin tone +1F3CA 1F3FC ; fully-qualified # 🏊🏼 person swimming: medium-light skin tone +1F3CA 1F3FD ; fully-qualified # 🏊🏽 person swimming: medium skin tone +1F3CA 1F3FE ; fully-qualified # 🏊🏾 person swimming: medium-dark skin tone +1F3CA 1F3FF ; fully-qualified # 🏊🏿 person swimming: dark skin tone +1F3CA 200D 2642 FE0F ; fully-qualified # 🏊‍♂️ man swimming +1F3CA 200D 2642 ; non-fully-qualified # 🏊‍♂ man swimming +1F3CA 1F3FB 200D 2642 FE0F ; fully-qualified # 🏊🏻‍♂️ man swimming: light skin tone +1F3CA 1F3FB 200D 2642 ; non-fully-qualified # 🏊🏻‍♂ man swimming: light skin tone +1F3CA 1F3FC 200D 2642 FE0F ; fully-qualified # 🏊🏼‍♂️ man swimming: medium-light skin tone +1F3CA 1F3FC 200D 2642 ; non-fully-qualified # 🏊🏼‍♂ man swimming: medium-light skin tone +1F3CA 1F3FD 200D 2642 FE0F ; fully-qualified # 🏊🏽‍♂️ man swimming: medium skin tone +1F3CA 1F3FD 200D 2642 ; non-fully-qualified # 🏊🏽‍♂ man swimming: medium skin tone +1F3CA 1F3FE 200D 2642 FE0F ; fully-qualified # 🏊🏾‍♂️ man swimming: medium-dark skin tone +1F3CA 1F3FE 200D 2642 ; non-fully-qualified # 🏊🏾‍♂ man swimming: medium-dark skin tone +1F3CA 1F3FF 200D 2642 FE0F ; fully-qualified # 🏊🏿‍♂️ man swimming: dark skin tone +1F3CA 1F3FF 200D 2642 ; non-fully-qualified # 🏊🏿‍♂ man swimming: dark skin tone +1F3CA 200D 2640 FE0F ; fully-qualified # 🏊‍♀️ woman swimming +1F3CA 200D 2640 ; non-fully-qualified # 🏊‍♀ woman swimming +1F3CA 1F3FB 200D 2640 FE0F ; fully-qualified # 🏊🏻‍♀️ woman swimming: light skin tone +1F3CA 1F3FB 200D 2640 ; non-fully-qualified # 🏊🏻‍♀ woman swimming: light skin tone +1F3CA 1F3FC 200D 2640 FE0F ; fully-qualified # 🏊🏼‍♀️ woman swimming: medium-light skin tone +1F3CA 1F3FC 200D 2640 ; non-fully-qualified # 🏊🏼‍♀ woman swimming: medium-light skin tone +1F3CA 1F3FD 200D 2640 FE0F ; fully-qualified # 🏊🏽‍♀️ woman swimming: medium skin tone +1F3CA 1F3FD 200D 2640 ; non-fully-qualified # 🏊🏽‍♀ woman swimming: medium skin tone +1F3CA 1F3FE 200D 2640 FE0F ; fully-qualified # 🏊🏾‍♀️ woman swimming: medium-dark skin tone +1F3CA 1F3FE 200D 2640 ; non-fully-qualified # 🏊🏾‍♀ woman swimming: medium-dark skin tone +1F3CA 1F3FF 200D 2640 FE0F ; fully-qualified # 🏊🏿‍♀️ woman swimming: dark skin tone +1F3CA 1F3FF 200D 2640 ; non-fully-qualified # 🏊🏿‍♀ woman swimming: dark skin tone +26F9 FE0F ; fully-qualified # ⛹️ person bouncing ball +26F9 ; non-fully-qualified # ⛹ person bouncing ball +26F9 1F3FB ; fully-qualified # ⛹🏻 person bouncing ball: light skin tone +26F9 1F3FC ; fully-qualified # ⛹🏼 person bouncing ball: medium-light skin tone +26F9 1F3FD ; fully-qualified # ⛹🏽 person bouncing ball: medium skin tone +26F9 1F3FE ; fully-qualified # ⛹🏾 person bouncing ball: medium-dark skin tone +26F9 1F3FF ; fully-qualified # ⛹🏿 person bouncing ball: dark skin tone +26F9 FE0F 200D 2642 FE0F ; fully-qualified # ⛹️‍♂️ man bouncing ball +26F9 200D 2642 FE0F ; non-fully-qualified # ⛹‍♂️ man bouncing ball +26F9 FE0F 200D 2642 ; non-fully-qualified # ⛹️‍♂ man bouncing ball +26F9 200D 2642 ; non-fully-qualified # ⛹‍♂ man bouncing ball +26F9 1F3FB 200D 2642 FE0F ; fully-qualified # ⛹🏻‍♂️ man bouncing ball: light skin tone +26F9 1F3FB 200D 2642 ; non-fully-qualified # ⛹🏻‍♂ man bouncing ball: light skin tone +26F9 1F3FC 200D 2642 FE0F ; fully-qualified # ⛹🏼‍♂️ man bouncing ball: medium-light skin tone +26F9 1F3FC 200D 2642 ; non-fully-qualified # ⛹🏼‍♂ man bouncing ball: medium-light skin tone +26F9 1F3FD 200D 2642 FE0F ; fully-qualified # ⛹🏽‍♂️ man bouncing ball: medium skin tone +26F9 1F3FD 200D 2642 ; non-fully-qualified # ⛹🏽‍♂ man bouncing ball: medium skin tone +26F9 1F3FE 200D 2642 FE0F ; fully-qualified # ⛹🏾‍♂️ man bouncing ball: medium-dark skin tone +26F9 1F3FE 200D 2642 ; non-fully-qualified # ⛹🏾‍♂ man bouncing ball: medium-dark skin tone +26F9 1F3FF 200D 2642 FE0F ; fully-qualified # ⛹🏿‍♂️ man bouncing ball: dark skin tone +26F9 1F3FF 200D 2642 ; non-fully-qualified # ⛹🏿‍♂ man bouncing ball: dark skin tone +26F9 FE0F 200D 2640 FE0F ; fully-qualified # ⛹️‍♀️ woman bouncing ball +26F9 200D 2640 FE0F ; non-fully-qualified # ⛹‍♀️ woman bouncing ball +26F9 FE0F 200D 2640 ; non-fully-qualified # ⛹️‍♀ woman bouncing ball +26F9 200D 2640 ; non-fully-qualified # ⛹‍♀ woman bouncing ball +26F9 1F3FB 200D 2640 FE0F ; fully-qualified # ⛹🏻‍♀️ woman bouncing ball: light skin tone +26F9 1F3FB 200D 2640 ; non-fully-qualified # ⛹🏻‍♀ woman bouncing ball: light skin tone +26F9 1F3FC 200D 2640 FE0F ; fully-qualified # ⛹🏼‍♀️ woman bouncing ball: medium-light skin tone +26F9 1F3FC 200D 2640 ; non-fully-qualified # ⛹🏼‍♀ woman bouncing ball: medium-light skin tone +26F9 1F3FD 200D 2640 FE0F ; fully-qualified # ⛹🏽‍♀️ woman bouncing ball: medium skin tone +26F9 1F3FD 200D 2640 ; non-fully-qualified # ⛹🏽‍♀ woman bouncing ball: medium skin tone +26F9 1F3FE 200D 2640 FE0F ; fully-qualified # ⛹🏾‍♀️ woman bouncing ball: medium-dark skin tone +26F9 1F3FE 200D 2640 ; non-fully-qualified # ⛹🏾‍♀ woman bouncing ball: medium-dark skin tone +26F9 1F3FF 200D 2640 FE0F ; fully-qualified # ⛹🏿‍♀️ woman bouncing ball: dark skin tone +26F9 1F3FF 200D 2640 ; non-fully-qualified # ⛹🏿‍♀ woman bouncing ball: dark skin tone +1F3CB FE0F ; fully-qualified # 🏋️ person lifting weights +1F3CB ; non-fully-qualified # 🏋 person lifting weights +1F3CB 1F3FB ; fully-qualified # 🏋🏻 person lifting weights: light skin tone +1F3CB 1F3FC ; fully-qualified # 🏋🏼 person lifting weights: medium-light skin tone +1F3CB 1F3FD ; fully-qualified # 🏋🏽 person lifting weights: medium skin tone +1F3CB 1F3FE ; fully-qualified # 🏋🏾 person lifting weights: medium-dark skin tone +1F3CB 1F3FF ; fully-qualified # 🏋🏿 person lifting weights: dark skin tone +1F3CB FE0F 200D 2642 FE0F ; fully-qualified # 🏋️‍♂️ man lifting weights +1F3CB 200D 2642 FE0F ; non-fully-qualified # 🏋‍♂️ man lifting weights +1F3CB FE0F 200D 2642 ; non-fully-qualified # 🏋️‍♂ man lifting weights +1F3CB 200D 2642 ; non-fully-qualified # 🏋‍♂ man lifting weights +1F3CB 1F3FB 200D 2642 FE0F ; fully-qualified # 🏋🏻‍♂️ man lifting weights: light skin tone +1F3CB 1F3FB 200D 2642 ; non-fully-qualified # 🏋🏻‍♂ man lifting weights: light skin tone +1F3CB 1F3FC 200D 2642 FE0F ; fully-qualified # 🏋🏼‍♂️ man lifting weights: medium-light skin tone +1F3CB 1F3FC 200D 2642 ; non-fully-qualified # 🏋🏼‍♂ man lifting weights: medium-light skin tone +1F3CB 1F3FD 200D 2642 FE0F ; fully-qualified # 🏋🏽‍♂️ man lifting weights: medium skin tone +1F3CB 1F3FD 200D 2642 ; non-fully-qualified # 🏋🏽‍♂ man lifting weights: medium skin tone +1F3CB 1F3FE 200D 2642 FE0F ; fully-qualified # 🏋🏾‍♂️ man lifting weights: medium-dark skin tone +1F3CB 1F3FE 200D 2642 ; non-fully-qualified # 🏋🏾‍♂ man lifting weights: medium-dark skin tone +1F3CB 1F3FF 200D 2642 FE0F ; fully-qualified # 🏋🏿‍♂️ man lifting weights: dark skin tone +1F3CB 1F3FF 200D 2642 ; non-fully-qualified # 🏋🏿‍♂ man lifting weights: dark skin tone +1F3CB FE0F 200D 2640 FE0F ; fully-qualified # 🏋️‍♀️ woman lifting weights +1F3CB 200D 2640 FE0F ; non-fully-qualified # 🏋‍♀️ woman lifting weights +1F3CB FE0F 200D 2640 ; non-fully-qualified # 🏋️‍♀ woman lifting weights +1F3CB 200D 2640 ; non-fully-qualified # 🏋‍♀ woman lifting weights +1F3CB 1F3FB 200D 2640 FE0F ; fully-qualified # 🏋🏻‍♀️ woman lifting weights: light skin tone +1F3CB 1F3FB 200D 2640 ; non-fully-qualified # 🏋🏻‍♀ woman lifting weights: light skin tone +1F3CB 1F3FC 200D 2640 FE0F ; fully-qualified # 🏋🏼‍♀️ woman lifting weights: medium-light skin tone +1F3CB 1F3FC 200D 2640 ; non-fully-qualified # 🏋🏼‍♀ woman lifting weights: medium-light skin tone +1F3CB 1F3FD 200D 2640 FE0F ; fully-qualified # 🏋🏽‍♀️ woman lifting weights: medium skin tone +1F3CB 1F3FD 200D 2640 ; non-fully-qualified # 🏋🏽‍♀ woman lifting weights: medium skin tone +1F3CB 1F3FE 200D 2640 FE0F ; fully-qualified # 🏋🏾‍♀️ woman lifting weights: medium-dark skin tone +1F3CB 1F3FE 200D 2640 ; non-fully-qualified # 🏋🏾‍♀ woman lifting weights: medium-dark skin tone +1F3CB 1F3FF 200D 2640 FE0F ; fully-qualified # 🏋🏿‍♀️ woman lifting weights: dark skin tone +1F3CB 1F3FF 200D 2640 ; non-fully-qualified # 🏋🏿‍♀ woman lifting weights: dark skin tone +1F6B4 ; fully-qualified # 🚴 person biking +1F6B4 1F3FB ; fully-qualified # 🚴🏻 person biking: light skin tone +1F6B4 1F3FC ; fully-qualified # 🚴🏼 person biking: medium-light skin tone +1F6B4 1F3FD ; fully-qualified # 🚴🏽 person biking: medium skin tone +1F6B4 1F3FE ; fully-qualified # 🚴🏾 person biking: medium-dark skin tone +1F6B4 1F3FF ; fully-qualified # 🚴🏿 person biking: dark skin tone +1F6B4 200D 2642 FE0F ; fully-qualified # 🚴‍♂️ man biking +1F6B4 200D 2642 ; non-fully-qualified # 🚴‍♂ man biking +1F6B4 1F3FB 200D 2642 FE0F ; fully-qualified # 🚴🏻‍♂️ man biking: light skin tone +1F6B4 1F3FB 200D 2642 ; non-fully-qualified # 🚴🏻‍♂ man biking: light skin tone +1F6B4 1F3FC 200D 2642 FE0F ; fully-qualified # 🚴🏼‍♂️ man biking: medium-light skin tone +1F6B4 1F3FC 200D 2642 ; non-fully-qualified # 🚴🏼‍♂ man biking: medium-light skin tone +1F6B4 1F3FD 200D 2642 FE0F ; fully-qualified # 🚴🏽‍♂️ man biking: medium skin tone +1F6B4 1F3FD 200D 2642 ; non-fully-qualified # 🚴🏽‍♂ man biking: medium skin tone +1F6B4 1F3FE 200D 2642 FE0F ; fully-qualified # 🚴🏾‍♂️ man biking: medium-dark skin tone +1F6B4 1F3FE 200D 2642 ; non-fully-qualified # 🚴🏾‍♂ man biking: medium-dark skin tone +1F6B4 1F3FF 200D 2642 FE0F ; fully-qualified # 🚴🏿‍♂️ man biking: dark skin tone +1F6B4 1F3FF 200D 2642 ; non-fully-qualified # 🚴🏿‍♂ man biking: dark skin tone +1F6B4 200D 2640 FE0F ; fully-qualified # 🚴‍♀️ woman biking +1F6B4 200D 2640 ; non-fully-qualified # 🚴‍♀ woman biking +1F6B4 1F3FB 200D 2640 FE0F ; fully-qualified # 🚴🏻‍♀️ woman biking: light skin tone +1F6B4 1F3FB 200D 2640 ; non-fully-qualified # 🚴🏻‍♀ woman biking: light skin tone +1F6B4 1F3FC 200D 2640 FE0F ; fully-qualified # 🚴🏼‍♀️ woman biking: medium-light skin tone +1F6B4 1F3FC 200D 2640 ; non-fully-qualified # 🚴🏼‍♀ woman biking: medium-light skin tone +1F6B4 1F3FD 200D 2640 FE0F ; fully-qualified # 🚴🏽‍♀️ woman biking: medium skin tone +1F6B4 1F3FD 200D 2640 ; non-fully-qualified # 🚴🏽‍♀ woman biking: medium skin tone +1F6B4 1F3FE 200D 2640 FE0F ; fully-qualified # 🚴🏾‍♀️ woman biking: medium-dark skin tone +1F6B4 1F3FE 200D 2640 ; non-fully-qualified # 🚴🏾‍♀ woman biking: medium-dark skin tone +1F6B4 1F3FF 200D 2640 FE0F ; fully-qualified # 🚴🏿‍♀️ woman biking: dark skin tone +1F6B4 1F3FF 200D 2640 ; non-fully-qualified # 🚴🏿‍♀ woman biking: dark skin tone +1F6B5 ; fully-qualified # 🚵 person mountain biking +1F6B5 1F3FB ; fully-qualified # 🚵🏻 person mountain biking: light skin tone +1F6B5 1F3FC ; fully-qualified # 🚵🏼 person mountain biking: medium-light skin tone +1F6B5 1F3FD ; fully-qualified # 🚵🏽 person mountain biking: medium skin tone +1F6B5 1F3FE ; fully-qualified # 🚵🏾 person mountain biking: medium-dark skin tone +1F6B5 1F3FF ; fully-qualified # 🚵🏿 person mountain biking: dark skin tone +1F6B5 200D 2642 FE0F ; fully-qualified # 🚵‍♂️ man mountain biking +1F6B5 200D 2642 ; non-fully-qualified # 🚵‍♂ man mountain biking +1F6B5 1F3FB 200D 2642 FE0F ; fully-qualified # 🚵🏻‍♂️ man mountain biking: light skin tone +1F6B5 1F3FB 200D 2642 ; non-fully-qualified # 🚵🏻‍♂ man mountain biking: light skin tone +1F6B5 1F3FC 200D 2642 FE0F ; fully-qualified # 🚵🏼‍♂️ man mountain biking: medium-light skin tone +1F6B5 1F3FC 200D 2642 ; non-fully-qualified # 🚵🏼‍♂ man mountain biking: medium-light skin tone +1F6B5 1F3FD 200D 2642 FE0F ; fully-qualified # 🚵🏽‍♂️ man mountain biking: medium skin tone +1F6B5 1F3FD 200D 2642 ; non-fully-qualified # 🚵🏽‍♂ man mountain biking: medium skin tone +1F6B5 1F3FE 200D 2642 FE0F ; fully-qualified # 🚵🏾‍♂️ man mountain biking: medium-dark skin tone +1F6B5 1F3FE 200D 2642 ; non-fully-qualified # 🚵🏾‍♂ man mountain biking: medium-dark skin tone +1F6B5 1F3FF 200D 2642 FE0F ; fully-qualified # 🚵🏿‍♂️ man mountain biking: dark skin tone +1F6B5 1F3FF 200D 2642 ; non-fully-qualified # 🚵🏿‍♂ man mountain biking: dark skin tone +1F6B5 200D 2640 FE0F ; fully-qualified # 🚵‍♀️ woman mountain biking +1F6B5 200D 2640 ; non-fully-qualified # 🚵‍♀ woman mountain biking +1F6B5 1F3FB 200D 2640 FE0F ; fully-qualified # 🚵🏻‍♀️ woman mountain biking: light skin tone +1F6B5 1F3FB 200D 2640 ; non-fully-qualified # 🚵🏻‍♀ woman mountain biking: light skin tone +1F6B5 1F3FC 200D 2640 FE0F ; fully-qualified # 🚵🏼‍♀️ woman mountain biking: medium-light skin tone +1F6B5 1F3FC 200D 2640 ; non-fully-qualified # 🚵🏼‍♀ woman mountain biking: medium-light skin tone +1F6B5 1F3FD 200D 2640 FE0F ; fully-qualified # 🚵🏽‍♀️ woman mountain biking: medium skin tone +1F6B5 1F3FD 200D 2640 ; non-fully-qualified # 🚵🏽‍♀ woman mountain biking: medium skin tone +1F6B5 1F3FE 200D 2640 FE0F ; fully-qualified # 🚵🏾‍♀️ woman mountain biking: medium-dark skin tone +1F6B5 1F3FE 200D 2640 ; non-fully-qualified # 🚵🏾‍♀ woman mountain biking: medium-dark skin tone +1F6B5 1F3FF 200D 2640 FE0F ; fully-qualified # 🚵🏿‍♀️ woman mountain biking: dark skin tone +1F6B5 1F3FF 200D 2640 ; non-fully-qualified # 🚵🏿‍♀ woman mountain biking: dark skin tone +1F3CE FE0F ; fully-qualified # 🏎️ racing car +1F3CE ; non-fully-qualified # 🏎 racing car +1F3CD FE0F ; fully-qualified # 🏍️ motorcycle +1F3CD ; non-fully-qualified # 🏍 motorcycle +1F938 ; fully-qualified # 🤸 person cartwheeling +1F938 1F3FB ; fully-qualified # 🤸🏻 person cartwheeling: light skin tone +1F938 1F3FC ; fully-qualified # 🤸🏼 person cartwheeling: medium-light skin tone +1F938 1F3FD ; fully-qualified # 🤸🏽 person cartwheeling: medium skin tone +1F938 1F3FE ; fully-qualified # 🤸🏾 person cartwheeling: medium-dark skin tone +1F938 1F3FF ; fully-qualified # 🤸🏿 person cartwheeling: dark skin tone +1F938 200D 2642 FE0F ; fully-qualified # 🤸‍♂️ man cartwheeling +1F938 200D 2642 ; non-fully-qualified # 🤸‍♂ man cartwheeling +1F938 1F3FB 200D 2642 FE0F ; fully-qualified # 🤸🏻‍♂️ man cartwheeling: light skin tone +1F938 1F3FB 200D 2642 ; non-fully-qualified # 🤸🏻‍♂ man cartwheeling: light skin tone +1F938 1F3FC 200D 2642 FE0F ; fully-qualified # 🤸🏼‍♂️ man cartwheeling: medium-light skin tone +1F938 1F3FC 200D 2642 ; non-fully-qualified # 🤸🏼‍♂ man cartwheeling: medium-light skin tone +1F938 1F3FD 200D 2642 FE0F ; fully-qualified # 🤸🏽‍♂️ man cartwheeling: medium skin tone +1F938 1F3FD 200D 2642 ; non-fully-qualified # 🤸🏽‍♂ man cartwheeling: medium skin tone +1F938 1F3FE 200D 2642 FE0F ; fully-qualified # 🤸🏾‍♂️ man cartwheeling: medium-dark skin tone +1F938 1F3FE 200D 2642 ; non-fully-qualified # 🤸🏾‍♂ man cartwheeling: medium-dark skin tone +1F938 1F3FF 200D 2642 FE0F ; fully-qualified # 🤸🏿‍♂️ man cartwheeling: dark skin tone +1F938 1F3FF 200D 2642 ; non-fully-qualified # 🤸🏿‍♂ man cartwheeling: dark skin tone +1F938 200D 2640 FE0F ; fully-qualified # 🤸‍♀️ woman cartwheeling +1F938 200D 2640 ; non-fully-qualified # 🤸‍♀ woman cartwheeling +1F938 1F3FB 200D 2640 FE0F ; fully-qualified # 🤸🏻‍♀️ woman cartwheeling: light skin tone +1F938 1F3FB 200D 2640 ; non-fully-qualified # 🤸🏻‍♀ woman cartwheeling: light skin tone +1F938 1F3FC 200D 2640 FE0F ; fully-qualified # 🤸🏼‍♀️ woman cartwheeling: medium-light skin tone +1F938 1F3FC 200D 2640 ; non-fully-qualified # 🤸🏼‍♀ woman cartwheeling: medium-light skin tone +1F938 1F3FD 200D 2640 FE0F ; fully-qualified # 🤸🏽‍♀️ woman cartwheeling: medium skin tone +1F938 1F3FD 200D 2640 ; non-fully-qualified # 🤸🏽‍♀ woman cartwheeling: medium skin tone +1F938 1F3FE 200D 2640 FE0F ; fully-qualified # 🤸🏾‍♀️ woman cartwheeling: medium-dark skin tone +1F938 1F3FE 200D 2640 ; non-fully-qualified # 🤸🏾‍♀ woman cartwheeling: medium-dark skin tone +1F938 1F3FF 200D 2640 FE0F ; fully-qualified # 🤸🏿‍♀️ woman cartwheeling: dark skin tone +1F938 1F3FF 200D 2640 ; non-fully-qualified # 🤸🏿‍♀ woman cartwheeling: dark skin tone +1F93C ; fully-qualified # 🤼 people wrestling +1F93C 200D 2642 FE0F ; fully-qualified # 🤼‍♂️ men wrestling +1F93C 200D 2642 ; non-fully-qualified # 🤼‍♂ men wrestling +1F93C 200D 2640 FE0F ; fully-qualified # 🤼‍♀️ women wrestling +1F93C 200D 2640 ; non-fully-qualified # 🤼‍♀ women wrestling +1F93D ; fully-qualified # 🤽 person playing water polo +1F93D 1F3FB ; fully-qualified # 🤽🏻 person playing water polo: light skin tone +1F93D 1F3FC ; fully-qualified # 🤽🏼 person playing water polo: medium-light skin tone +1F93D 1F3FD ; fully-qualified # 🤽🏽 person playing water polo: medium skin tone +1F93D 1F3FE ; fully-qualified # 🤽🏾 person playing water polo: medium-dark skin tone +1F93D 1F3FF ; fully-qualified # 🤽🏿 person playing water polo: dark skin tone +1F93D 200D 2642 FE0F ; fully-qualified # 🤽‍♂️ man playing water polo +1F93D 200D 2642 ; non-fully-qualified # 🤽‍♂ man playing water polo +1F93D 1F3FB 200D 2642 FE0F ; fully-qualified # 🤽🏻‍♂️ man playing water polo: light skin tone +1F93D 1F3FB 200D 2642 ; non-fully-qualified # 🤽🏻‍♂ man playing water polo: light skin tone +1F93D 1F3FC 200D 2642 FE0F ; fully-qualified # 🤽🏼‍♂️ man playing water polo: medium-light skin tone +1F93D 1F3FC 200D 2642 ; non-fully-qualified # 🤽🏼‍♂ man playing water polo: medium-light skin tone +1F93D 1F3FD 200D 2642 FE0F ; fully-qualified # 🤽🏽‍♂️ man playing water polo: medium skin tone +1F93D 1F3FD 200D 2642 ; non-fully-qualified # 🤽🏽‍♂ man playing water polo: medium skin tone +1F93D 1F3FE 200D 2642 FE0F ; fully-qualified # 🤽🏾‍♂️ man playing water polo: medium-dark skin tone +1F93D 1F3FE 200D 2642 ; non-fully-qualified # 🤽🏾‍♂ man playing water polo: medium-dark skin tone +1F93D 1F3FF 200D 2642 FE0F ; fully-qualified # 🤽🏿‍♂️ man playing water polo: dark skin tone +1F93D 1F3FF 200D 2642 ; non-fully-qualified # 🤽🏿‍♂ man playing water polo: dark skin tone +1F93D 200D 2640 FE0F ; fully-qualified # 🤽‍♀️ woman playing water polo +1F93D 200D 2640 ; non-fully-qualified # 🤽‍♀ woman playing water polo +1F93D 1F3FB 200D 2640 FE0F ; fully-qualified # 🤽🏻‍♀️ woman playing water polo: light skin tone +1F93D 1F3FB 200D 2640 ; non-fully-qualified # 🤽🏻‍♀ woman playing water polo: light skin tone +1F93D 1F3FC 200D 2640 FE0F ; fully-qualified # 🤽🏼‍♀️ woman playing water polo: medium-light skin tone +1F93D 1F3FC 200D 2640 ; non-fully-qualified # 🤽🏼‍♀ woman playing water polo: medium-light skin tone +1F93D 1F3FD 200D 2640 FE0F ; fully-qualified # 🤽🏽‍♀️ woman playing water polo: medium skin tone +1F93D 1F3FD 200D 2640 ; non-fully-qualified # 🤽🏽‍♀ woman playing water polo: medium skin tone +1F93D 1F3FE 200D 2640 FE0F ; fully-qualified # 🤽🏾‍♀️ woman playing water polo: medium-dark skin tone +1F93D 1F3FE 200D 2640 ; non-fully-qualified # 🤽🏾‍♀ woman playing water polo: medium-dark skin tone +1F93D 1F3FF 200D 2640 FE0F ; fully-qualified # 🤽🏿‍♀️ woman playing water polo: dark skin tone +1F93D 1F3FF 200D 2640 ; non-fully-qualified # 🤽🏿‍♀ woman playing water polo: dark skin tone +1F93E ; fully-qualified # 🤾 person playing handball +1F93E 1F3FB ; fully-qualified # 🤾🏻 person playing handball: light skin tone +1F93E 1F3FC ; fully-qualified # 🤾🏼 person playing handball: medium-light skin tone +1F93E 1F3FD ; fully-qualified # 🤾🏽 person playing handball: medium skin tone +1F93E 1F3FE ; fully-qualified # 🤾🏾 person playing handball: medium-dark skin tone +1F93E 1F3FF ; fully-qualified # 🤾🏿 person playing handball: dark skin tone +1F93E 200D 2642 FE0F ; fully-qualified # 🤾‍♂️ man playing handball +1F93E 200D 2642 ; non-fully-qualified # 🤾‍♂ man playing handball +1F93E 1F3FB 200D 2642 FE0F ; fully-qualified # 🤾🏻‍♂️ man playing handball: light skin tone +1F93E 1F3FB 200D 2642 ; non-fully-qualified # 🤾🏻‍♂ man playing handball: light skin tone +1F93E 1F3FC 200D 2642 FE0F ; fully-qualified # 🤾🏼‍♂️ man playing handball: medium-light skin tone +1F93E 1F3FC 200D 2642 ; non-fully-qualified # 🤾🏼‍♂ man playing handball: medium-light skin tone +1F93E 1F3FD 200D 2642 FE0F ; fully-qualified # 🤾🏽‍♂️ man playing handball: medium skin tone +1F93E 1F3FD 200D 2642 ; non-fully-qualified # 🤾🏽‍♂ man playing handball: medium skin tone +1F93E 1F3FE 200D 2642 FE0F ; fully-qualified # 🤾🏾‍♂️ man playing handball: medium-dark skin tone +1F93E 1F3FE 200D 2642 ; non-fully-qualified # 🤾🏾‍♂ man playing handball: medium-dark skin tone +1F93E 1F3FF 200D 2642 FE0F ; fully-qualified # 🤾🏿‍♂️ man playing handball: dark skin tone +1F93E 1F3FF 200D 2642 ; non-fully-qualified # 🤾🏿‍♂ man playing handball: dark skin tone +1F93E 200D 2640 FE0F ; fully-qualified # 🤾‍♀️ woman playing handball +1F93E 200D 2640 ; non-fully-qualified # 🤾‍♀ woman playing handball +1F93E 1F3FB 200D 2640 FE0F ; fully-qualified # 🤾🏻‍♀️ woman playing handball: light skin tone +1F93E 1F3FB 200D 2640 ; non-fully-qualified # 🤾🏻‍♀ woman playing handball: light skin tone +1F93E 1F3FC 200D 2640 FE0F ; fully-qualified # 🤾🏼‍♀️ woman playing handball: medium-light skin tone +1F93E 1F3FC 200D 2640 ; non-fully-qualified # 🤾🏼‍♀ woman playing handball: medium-light skin tone +1F93E 1F3FD 200D 2640 FE0F ; fully-qualified # 🤾🏽‍♀️ woman playing handball: medium skin tone +1F93E 1F3FD 200D 2640 ; non-fully-qualified # 🤾🏽‍♀ woman playing handball: medium skin tone +1F93E 1F3FE 200D 2640 FE0F ; fully-qualified # 🤾🏾‍♀️ woman playing handball: medium-dark skin tone +1F93E 1F3FE 200D 2640 ; non-fully-qualified # 🤾🏾‍♀ woman playing handball: medium-dark skin tone +1F93E 1F3FF 200D 2640 FE0F ; fully-qualified # 🤾🏿‍♀️ woman playing handball: dark skin tone +1F93E 1F3FF 200D 2640 ; non-fully-qualified # 🤾🏿‍♀ woman playing handball: dark skin tone +1F939 ; fully-qualified # 🤹 person juggling +1F939 1F3FB ; fully-qualified # 🤹🏻 person juggling: light skin tone +1F939 1F3FC ; fully-qualified # 🤹🏼 person juggling: medium-light skin tone +1F939 1F3FD ; fully-qualified # 🤹🏽 person juggling: medium skin tone +1F939 1F3FE ; fully-qualified # 🤹🏾 person juggling: medium-dark skin tone +1F939 1F3FF ; fully-qualified # 🤹🏿 person juggling: dark skin tone +1F939 200D 2642 FE0F ; fully-qualified # 🤹‍♂️ man juggling +1F939 200D 2642 ; non-fully-qualified # 🤹‍♂ man juggling +1F939 1F3FB 200D 2642 FE0F ; fully-qualified # 🤹🏻‍♂️ man juggling: light skin tone +1F939 1F3FB 200D 2642 ; non-fully-qualified # 🤹🏻‍♂ man juggling: light skin tone +1F939 1F3FC 200D 2642 FE0F ; fully-qualified # 🤹🏼‍♂️ man juggling: medium-light skin tone +1F939 1F3FC 200D 2642 ; non-fully-qualified # 🤹🏼‍♂ man juggling: medium-light skin tone +1F939 1F3FD 200D 2642 FE0F ; fully-qualified # 🤹🏽‍♂️ man juggling: medium skin tone +1F939 1F3FD 200D 2642 ; non-fully-qualified # 🤹🏽‍♂ man juggling: medium skin tone +1F939 1F3FE 200D 2642 FE0F ; fully-qualified # 🤹🏾‍♂️ man juggling: medium-dark skin tone +1F939 1F3FE 200D 2642 ; non-fully-qualified # 🤹🏾‍♂ man juggling: medium-dark skin tone +1F939 1F3FF 200D 2642 FE0F ; fully-qualified # 🤹🏿‍♂️ man juggling: dark skin tone +1F939 1F3FF 200D 2642 ; non-fully-qualified # 🤹🏿‍♂ man juggling: dark skin tone +1F939 200D 2640 FE0F ; fully-qualified # 🤹‍♀️ woman juggling +1F939 200D 2640 ; non-fully-qualified # 🤹‍♀ woman juggling +1F939 1F3FB 200D 2640 FE0F ; fully-qualified # 🤹🏻‍♀️ woman juggling: light skin tone +1F939 1F3FB 200D 2640 ; non-fully-qualified # 🤹🏻‍♀ woman juggling: light skin tone +1F939 1F3FC 200D 2640 FE0F ; fully-qualified # 🤹🏼‍♀️ woman juggling: medium-light skin tone +1F939 1F3FC 200D 2640 ; non-fully-qualified # 🤹🏼‍♀ woman juggling: medium-light skin tone +1F939 1F3FD 200D 2640 FE0F ; fully-qualified # 🤹🏽‍♀️ woman juggling: medium skin tone +1F939 1F3FD 200D 2640 ; non-fully-qualified # 🤹🏽‍♀ woman juggling: medium skin tone +1F939 1F3FE 200D 2640 FE0F ; fully-qualified # 🤹🏾‍♀️ woman juggling: medium-dark skin tone +1F939 1F3FE 200D 2640 ; non-fully-qualified # 🤹🏾‍♀ woman juggling: medium-dark skin tone +1F939 1F3FF 200D 2640 FE0F ; fully-qualified # 🤹🏿‍♀️ woman juggling: dark skin tone +1F939 1F3FF 200D 2640 ; non-fully-qualified # 🤹🏿‍♀ woman juggling: dark skin tone + +# subgroup: family +1F46B ; fully-qualified # 👫 man and woman holding hands +1F46C ; fully-qualified # 👬 two men holding hands +1F46D ; fully-qualified # 👭 two women holding hands +1F48F ; fully-qualified # 💏 kiss +1F469 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # 👩‍❤️‍💋‍👨 kiss: woman, man +1F469 200D 2764 200D 1F48B 200D 1F468 ; non-fully-qualified # 👩‍❤‍💋‍👨 kiss: woman, man +1F468 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # 👨‍❤️‍💋‍👨 kiss: man, man +1F468 200D 2764 200D 1F48B 200D 1F468 ; non-fully-qualified # 👨‍❤‍💋‍👨 kiss: man, man +1F469 200D 2764 FE0F 200D 1F48B 200D 1F469 ; fully-qualified # 👩‍❤️‍💋‍👩 kiss: woman, woman +1F469 200D 2764 200D 1F48B 200D 1F469 ; non-fully-qualified # 👩‍❤‍💋‍👩 kiss: woman, woman +1F491 ; fully-qualified # 💑 couple with heart +1F469 200D 2764 FE0F 200D 1F468 ; fully-qualified # 👩‍❤️‍👨 couple with heart: woman, man +1F469 200D 2764 200D 1F468 ; non-fully-qualified # 👩‍❤‍👨 couple with heart: woman, man +1F468 200D 2764 FE0F 200D 1F468 ; fully-qualified # 👨‍❤️‍👨 couple with heart: man, man +1F468 200D 2764 200D 1F468 ; non-fully-qualified # 👨‍❤‍👨 couple with heart: man, man +1F469 200D 2764 FE0F 200D 1F469 ; fully-qualified # 👩‍❤️‍👩 couple with heart: woman, woman +1F469 200D 2764 200D 1F469 ; non-fully-qualified # 👩‍❤‍👩 couple with heart: woman, woman +1F46A ; fully-qualified # 👪 family +1F468 200D 1F469 200D 1F466 ; fully-qualified # 👨‍👩‍👦 family: man, woman, boy +1F468 200D 1F469 200D 1F467 ; fully-qualified # 👨‍👩‍👧 family: man, woman, girl +1F468 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👩‍👧‍👦 family: man, woman, girl, boy +1F468 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👩‍👦‍👦 family: man, woman, boy, boy +1F468 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👩‍👧‍👧 family: man, woman, girl, girl +1F468 200D 1F468 200D 1F466 ; fully-qualified # 👨‍👨‍👦 family: man, man, boy +1F468 200D 1F468 200D 1F467 ; fully-qualified # 👨‍👨‍👧 family: man, man, girl +1F468 200D 1F468 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👨‍👧‍👦 family: man, man, girl, boy +1F468 200D 1F468 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👨‍👦‍👦 family: man, man, boy, boy +1F468 200D 1F468 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👨‍👧‍👧 family: man, man, girl, girl +1F469 200D 1F469 200D 1F466 ; fully-qualified # 👩‍👩‍👦 family: woman, woman, boy +1F469 200D 1F469 200D 1F467 ; fully-qualified # 👩‍👩‍👧 family: woman, woman, girl +1F469 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👩‍👩‍👧‍👦 family: woman, woman, girl, boy +1F469 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # 👩‍👩‍👦‍👦 family: woman, woman, boy, boy +1F469 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # 👩‍👩‍👧‍👧 family: woman, woman, girl, girl +1F468 200D 1F466 ; fully-qualified # 👨‍👦 family: man, boy +1F468 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👦‍👦 family: man, boy, boy +1F468 200D 1F467 ; fully-qualified # 👨‍👧 family: man, girl +1F468 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👧‍👦 family: man, girl, boy +1F468 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👧‍👧 family: man, girl, girl +1F469 200D 1F466 ; fully-qualified # 👩‍👦 family: woman, boy +1F469 200D 1F466 200D 1F466 ; fully-qualified # 👩‍👦‍👦 family: woman, boy, boy +1F469 200D 1F467 ; fully-qualified # 👩‍👧 family: woman, girl +1F469 200D 1F467 200D 1F466 ; fully-qualified # 👩‍👧‍👦 family: woman, girl, boy +1F469 200D 1F467 200D 1F467 ; fully-qualified # 👩‍👧‍👧 family: woman, girl, girl + +# subgroup: body +1F933 ; fully-qualified # 🤳 selfie +1F933 1F3FB ; fully-qualified # 🤳🏻 selfie: light skin tone +1F933 1F3FC ; fully-qualified # 🤳🏼 selfie: medium-light skin tone +1F933 1F3FD ; fully-qualified # 🤳🏽 selfie: medium skin tone +1F933 1F3FE ; fully-qualified # 🤳🏾 selfie: medium-dark skin tone +1F933 1F3FF ; fully-qualified # 🤳🏿 selfie: dark skin tone +1F4AA ; fully-qualified # 💪 flexed biceps +1F4AA 1F3FB ; fully-qualified # 💪🏻 flexed biceps: light skin tone +1F4AA 1F3FC ; fully-qualified # 💪🏼 flexed biceps: medium-light skin tone +1F4AA 1F3FD ; fully-qualified # 💪🏽 flexed biceps: medium skin tone +1F4AA 1F3FE ; fully-qualified # 💪🏾 flexed biceps: medium-dark skin tone +1F4AA 1F3FF ; fully-qualified # 💪🏿 flexed biceps: dark skin tone +1F9B5 ; fully-qualified # 🦵 leg +1F9B5 1F3FB ; fully-qualified # 🦵🏻 leg: light skin tone +1F9B5 1F3FC ; fully-qualified # 🦵🏼 leg: medium-light skin tone +1F9B5 1F3FD ; fully-qualified # 🦵🏽 leg: medium skin tone +1F9B5 1F3FE ; fully-qualified # 🦵🏾 leg: medium-dark skin tone +1F9B5 1F3FF ; fully-qualified # 🦵🏿 leg: dark skin tone +1F9B6 ; fully-qualified # 🦶 foot +1F9B6 1F3FB ; fully-qualified # 🦶🏻 foot: light skin tone +1F9B6 1F3FC ; fully-qualified # 🦶🏼 foot: medium-light skin tone +1F9B6 1F3FD ; fully-qualified # 🦶🏽 foot: medium skin tone +1F9B6 1F3FE ; fully-qualified # 🦶🏾 foot: medium-dark skin tone +1F9B6 1F3FF ; fully-qualified # 🦶🏿 foot: dark skin tone +1F448 ; fully-qualified # 👈 backhand index pointing left +1F448 1F3FB ; fully-qualified # 👈🏻 backhand index pointing left: light skin tone +1F448 1F3FC ; fully-qualified # 👈🏼 backhand index pointing left: medium-light skin tone +1F448 1F3FD ; fully-qualified # 👈🏽 backhand index pointing left: medium skin tone +1F448 1F3FE ; fully-qualified # 👈🏾 backhand index pointing left: medium-dark skin tone +1F448 1F3FF ; fully-qualified # 👈🏿 backhand index pointing left: dark skin tone +1F449 ; fully-qualified # 👉 backhand index pointing right +1F449 1F3FB ; fully-qualified # 👉🏻 backhand index pointing right: light skin tone +1F449 1F3FC ; fully-qualified # 👉🏼 backhand index pointing right: medium-light skin tone +1F449 1F3FD ; fully-qualified # 👉🏽 backhand index pointing right: medium skin tone +1F449 1F3FE ; fully-qualified # 👉🏾 backhand index pointing right: medium-dark skin tone +1F449 1F3FF ; fully-qualified # 👉🏿 backhand index pointing right: dark skin tone +261D FE0F ; fully-qualified # ☝️ index pointing up +261D ; non-fully-qualified # ☝ index pointing up +261D 1F3FB ; fully-qualified # ☝🏻 index pointing up: light skin tone +261D 1F3FC ; fully-qualified # ☝🏼 index pointing up: medium-light skin tone +261D 1F3FD ; fully-qualified # ☝🏽 index pointing up: medium skin tone +261D 1F3FE ; fully-qualified # ☝🏾 index pointing up: medium-dark skin tone +261D 1F3FF ; fully-qualified # ☝🏿 index pointing up: dark skin tone +1F446 ; fully-qualified # 👆 backhand index pointing up +1F446 1F3FB ; fully-qualified # 👆🏻 backhand index pointing up: light skin tone +1F446 1F3FC ; fully-qualified # 👆🏼 backhand index pointing up: medium-light skin tone +1F446 1F3FD ; fully-qualified # 👆🏽 backhand index pointing up: medium skin tone +1F446 1F3FE ; fully-qualified # 👆🏾 backhand index pointing up: medium-dark skin tone +1F446 1F3FF ; fully-qualified # 👆🏿 backhand index pointing up: dark skin tone +1F595 ; fully-qualified # 🖕 middle finger +1F595 1F3FB ; fully-qualified # 🖕🏻 middle finger: light skin tone +1F595 1F3FC ; fully-qualified # 🖕🏼 middle finger: medium-light skin tone +1F595 1F3FD ; fully-qualified # 🖕🏽 middle finger: medium skin tone +1F595 1F3FE ; fully-qualified # 🖕🏾 middle finger: medium-dark skin tone +1F595 1F3FF ; fully-qualified # 🖕🏿 middle finger: dark skin tone +1F447 ; fully-qualified # 👇 backhand index pointing down +1F447 1F3FB ; fully-qualified # 👇🏻 backhand index pointing down: light skin tone +1F447 1F3FC ; fully-qualified # 👇🏼 backhand index pointing down: medium-light skin tone +1F447 1F3FD ; fully-qualified # 👇🏽 backhand index pointing down: medium skin tone +1F447 1F3FE ; fully-qualified # 👇🏾 backhand index pointing down: medium-dark skin tone +1F447 1F3FF ; fully-qualified # 👇🏿 backhand index pointing down: dark skin tone +270C FE0F ; fully-qualified # ✌️ victory hand +270C ; non-fully-qualified # ✌ victory hand +270C 1F3FB ; fully-qualified # ✌🏻 victory hand: light skin tone +270C 1F3FC ; fully-qualified # ✌🏼 victory hand: medium-light skin tone +270C 1F3FD ; fully-qualified # ✌🏽 victory hand: medium skin tone +270C 1F3FE ; fully-qualified # ✌🏾 victory hand: medium-dark skin tone +270C 1F3FF ; fully-qualified # ✌🏿 victory hand: dark skin tone +1F91E ; fully-qualified # 🤞 crossed fingers +1F91E 1F3FB ; fully-qualified # 🤞🏻 crossed fingers: light skin tone +1F91E 1F3FC ; fully-qualified # 🤞🏼 crossed fingers: medium-light skin tone +1F91E 1F3FD ; fully-qualified # 🤞🏽 crossed fingers: medium skin tone +1F91E 1F3FE ; fully-qualified # 🤞🏾 crossed fingers: medium-dark skin tone +1F91E 1F3FF ; fully-qualified # 🤞🏿 crossed fingers: dark skin tone +1F596 ; fully-qualified # 🖖 vulcan salute +1F596 1F3FB ; fully-qualified # 🖖🏻 vulcan salute: light skin tone +1F596 1F3FC ; fully-qualified # 🖖🏼 vulcan salute: medium-light skin tone +1F596 1F3FD ; fully-qualified # 🖖🏽 vulcan salute: medium skin tone +1F596 1F3FE ; fully-qualified # 🖖🏾 vulcan salute: medium-dark skin tone +1F596 1F3FF ; fully-qualified # 🖖🏿 vulcan salute: dark skin tone +1F918 ; fully-qualified # 🤘 sign of the horns +1F918 1F3FB ; fully-qualified # 🤘🏻 sign of the horns: light skin tone +1F918 1F3FC ; fully-qualified # 🤘🏼 sign of the horns: medium-light skin tone +1F918 1F3FD ; fully-qualified # 🤘🏽 sign of the horns: medium skin tone +1F918 1F3FE ; fully-qualified # 🤘🏾 sign of the horns: medium-dark skin tone +1F918 1F3FF ; fully-qualified # 🤘🏿 sign of the horns: dark skin tone +1F919 ; fully-qualified # 🤙 call me hand +1F919 1F3FB ; fully-qualified # 🤙🏻 call me hand: light skin tone +1F919 1F3FC ; fully-qualified # 🤙🏼 call me hand: medium-light skin tone +1F919 1F3FD ; fully-qualified # 🤙🏽 call me hand: medium skin tone +1F919 1F3FE ; fully-qualified # 🤙🏾 call me hand: medium-dark skin tone +1F919 1F3FF ; fully-qualified # 🤙🏿 call me hand: dark skin tone +1F590 FE0F ; fully-qualified # 🖐️ hand with fingers splayed +1F590 ; non-fully-qualified # 🖐 hand with fingers splayed +1F590 1F3FB ; fully-qualified # 🖐🏻 hand with fingers splayed: light skin tone +1F590 1F3FC ; fully-qualified # 🖐🏼 hand with fingers splayed: medium-light skin tone +1F590 1F3FD ; fully-qualified # 🖐🏽 hand with fingers splayed: medium skin tone +1F590 1F3FE ; fully-qualified # 🖐🏾 hand with fingers splayed: medium-dark skin tone +1F590 1F3FF ; fully-qualified # 🖐🏿 hand with fingers splayed: dark skin tone +270B ; fully-qualified # ✋ raised hand +270B 1F3FB ; fully-qualified # ✋🏻 raised hand: light skin tone +270B 1F3FC ; fully-qualified # ✋🏼 raised hand: medium-light skin tone +270B 1F3FD ; fully-qualified # ✋🏽 raised hand: medium skin tone +270B 1F3FE ; fully-qualified # ✋🏾 raised hand: medium-dark skin tone +270B 1F3FF ; fully-qualified # ✋🏿 raised hand: dark skin tone +1F44C ; fully-qualified # 👌 OK hand +1F44C 1F3FB ; fully-qualified # 👌🏻 OK hand: light skin tone +1F44C 1F3FC ; fully-qualified # 👌🏼 OK hand: medium-light skin tone +1F44C 1F3FD ; fully-qualified # 👌🏽 OK hand: medium skin tone +1F44C 1F3FE ; fully-qualified # 👌🏾 OK hand: medium-dark skin tone +1F44C 1F3FF ; fully-qualified # 👌🏿 OK hand: dark skin tone +1F44D ; fully-qualified # 👍 thumbs up +1F44D 1F3FB ; fully-qualified # 👍🏻 thumbs up: light skin tone +1F44D 1F3FC ; fully-qualified # 👍🏼 thumbs up: medium-light skin tone +1F44D 1F3FD ; fully-qualified # 👍🏽 thumbs up: medium skin tone +1F44D 1F3FE ; fully-qualified # 👍🏾 thumbs up: medium-dark skin tone +1F44D 1F3FF ; fully-qualified # 👍🏿 thumbs up: dark skin tone +1F44E ; fully-qualified # 👎 thumbs down +1F44E 1F3FB ; fully-qualified # 👎🏻 thumbs down: light skin tone +1F44E 1F3FC ; fully-qualified # 👎🏼 thumbs down: medium-light skin tone +1F44E 1F3FD ; fully-qualified # 👎🏽 thumbs down: medium skin tone +1F44E 1F3FE ; fully-qualified # 👎🏾 thumbs down: medium-dark skin tone +1F44E 1F3FF ; fully-qualified # 👎🏿 thumbs down: dark skin tone +270A ; fully-qualified # ✊ raised fist +270A 1F3FB ; fully-qualified # ✊🏻 raised fist: light skin tone +270A 1F3FC ; fully-qualified # ✊🏼 raised fist: medium-light skin tone +270A 1F3FD ; fully-qualified # ✊🏽 raised fist: medium skin tone +270A 1F3FE ; fully-qualified # ✊🏾 raised fist: medium-dark skin tone +270A 1F3FF ; fully-qualified # ✊🏿 raised fist: dark skin tone +1F44A ; fully-qualified # 👊 oncoming fist +1F44A 1F3FB ; fully-qualified # 👊🏻 oncoming fist: light skin tone +1F44A 1F3FC ; fully-qualified # 👊🏼 oncoming fist: medium-light skin tone +1F44A 1F3FD ; fully-qualified # 👊🏽 oncoming fist: medium skin tone +1F44A 1F3FE ; fully-qualified # 👊🏾 oncoming fist: medium-dark skin tone +1F44A 1F3FF ; fully-qualified # 👊🏿 oncoming fist: dark skin tone +1F91B ; fully-qualified # 🤛 left-facing fist +1F91B 1F3FB ; fully-qualified # 🤛🏻 left-facing fist: light skin tone +1F91B 1F3FC ; fully-qualified # 🤛🏼 left-facing fist: medium-light skin tone +1F91B 1F3FD ; fully-qualified # 🤛🏽 left-facing fist: medium skin tone +1F91B 1F3FE ; fully-qualified # 🤛🏾 left-facing fist: medium-dark skin tone +1F91B 1F3FF ; fully-qualified # 🤛🏿 left-facing fist: dark skin tone +1F91C ; fully-qualified # 🤜 right-facing fist +1F91C 1F3FB ; fully-qualified # 🤜🏻 right-facing fist: light skin tone +1F91C 1F3FC ; fully-qualified # 🤜🏼 right-facing fist: medium-light skin tone +1F91C 1F3FD ; fully-qualified # 🤜🏽 right-facing fist: medium skin tone +1F91C 1F3FE ; fully-qualified # 🤜🏾 right-facing fist: medium-dark skin tone +1F91C 1F3FF ; fully-qualified # 🤜🏿 right-facing fist: dark skin tone +1F91A ; fully-qualified # 🤚 raised back of hand +1F91A 1F3FB ; fully-qualified # 🤚🏻 raised back of hand: light skin tone +1F91A 1F3FC ; fully-qualified # 🤚🏼 raised back of hand: medium-light skin tone +1F91A 1F3FD ; fully-qualified # 🤚🏽 raised back of hand: medium skin tone +1F91A 1F3FE ; fully-qualified # 🤚🏾 raised back of hand: medium-dark skin tone +1F91A 1F3FF ; fully-qualified # 🤚🏿 raised back of hand: dark skin tone +1F44B ; fully-qualified # 👋 waving hand +1F44B 1F3FB ; fully-qualified # 👋🏻 waving hand: light skin tone +1F44B 1F3FC ; fully-qualified # 👋🏼 waving hand: medium-light skin tone +1F44B 1F3FD ; fully-qualified # 👋🏽 waving hand: medium skin tone +1F44B 1F3FE ; fully-qualified # 👋🏾 waving hand: medium-dark skin tone +1F44B 1F3FF ; fully-qualified # 👋🏿 waving hand: dark skin tone +1F91F ; fully-qualified # 🤟 love-you gesture +1F91F 1F3FB ; fully-qualified # 🤟🏻 love-you gesture: light skin tone +1F91F 1F3FC ; fully-qualified # 🤟🏼 love-you gesture: medium-light skin tone +1F91F 1F3FD ; fully-qualified # 🤟🏽 love-you gesture: medium skin tone +1F91F 1F3FE ; fully-qualified # 🤟🏾 love-you gesture: medium-dark skin tone +1F91F 1F3FF ; fully-qualified # 🤟🏿 love-you gesture: dark skin tone +270D FE0F ; fully-qualified # ✍️ writing hand +270D ; non-fully-qualified # ✍ writing hand +270D 1F3FB ; fully-qualified # ✍🏻 writing hand: light skin tone +270D 1F3FC ; fully-qualified # ✍🏼 writing hand: medium-light skin tone +270D 1F3FD ; fully-qualified # ✍🏽 writing hand: medium skin tone +270D 1F3FE ; fully-qualified # ✍🏾 writing hand: medium-dark skin tone +270D 1F3FF ; fully-qualified # ✍🏿 writing hand: dark skin tone +1F44F ; fully-qualified # 👏 clapping hands +1F44F 1F3FB ; fully-qualified # 👏🏻 clapping hands: light skin tone +1F44F 1F3FC ; fully-qualified # 👏🏼 clapping hands: medium-light skin tone +1F44F 1F3FD ; fully-qualified # 👏🏽 clapping hands: medium skin tone +1F44F 1F3FE ; fully-qualified # 👏🏾 clapping hands: medium-dark skin tone +1F44F 1F3FF ; fully-qualified # 👏🏿 clapping hands: dark skin tone +1F450 ; fully-qualified # 👐 open hands +1F450 1F3FB ; fully-qualified # 👐🏻 open hands: light skin tone +1F450 1F3FC ; fully-qualified # 👐🏼 open hands: medium-light skin tone +1F450 1F3FD ; fully-qualified # 👐🏽 open hands: medium skin tone +1F450 1F3FE ; fully-qualified # 👐🏾 open hands: medium-dark skin tone +1F450 1F3FF ; fully-qualified # 👐🏿 open hands: dark skin tone +1F64C ; fully-qualified # 🙌 raising hands +1F64C 1F3FB ; fully-qualified # 🙌🏻 raising hands: light skin tone +1F64C 1F3FC ; fully-qualified # 🙌🏼 raising hands: medium-light skin tone +1F64C 1F3FD ; fully-qualified # 🙌🏽 raising hands: medium skin tone +1F64C 1F3FE ; fully-qualified # 🙌🏾 raising hands: medium-dark skin tone +1F64C 1F3FF ; fully-qualified # 🙌🏿 raising hands: dark skin tone +1F932 ; fully-qualified # 🤲 palms up together +1F932 1F3FB ; fully-qualified # 🤲🏻 palms up together: light skin tone +1F932 1F3FC ; fully-qualified # 🤲🏼 palms up together: medium-light skin tone +1F932 1F3FD ; fully-qualified # 🤲🏽 palms up together: medium skin tone +1F932 1F3FE ; fully-qualified # 🤲🏾 palms up together: medium-dark skin tone +1F932 1F3FF ; fully-qualified # 🤲🏿 palms up together: dark skin tone +1F64F ; fully-qualified # 🙏 folded hands +1F64F 1F3FB ; fully-qualified # 🙏🏻 folded hands: light skin tone +1F64F 1F3FC ; fully-qualified # 🙏🏼 folded hands: medium-light skin tone +1F64F 1F3FD ; fully-qualified # 🙏🏽 folded hands: medium skin tone +1F64F 1F3FE ; fully-qualified # 🙏🏾 folded hands: medium-dark skin tone +1F64F 1F3FF ; fully-qualified # 🙏🏿 folded hands: dark skin tone +1F91D ; fully-qualified # 🤝 handshake +1F485 ; fully-qualified # 💅 nail polish +1F485 1F3FB ; fully-qualified # 💅🏻 nail polish: light skin tone +1F485 1F3FC ; fully-qualified # 💅🏼 nail polish: medium-light skin tone +1F485 1F3FD ; fully-qualified # 💅🏽 nail polish: medium skin tone +1F485 1F3FE ; fully-qualified # 💅🏾 nail polish: medium-dark skin tone +1F485 1F3FF ; fully-qualified # 💅🏿 nail polish: dark skin tone +1F442 ; fully-qualified # 👂 ear +1F442 1F3FB ; fully-qualified # 👂🏻 ear: light skin tone +1F442 1F3FC ; fully-qualified # 👂🏼 ear: medium-light skin tone +1F442 1F3FD ; fully-qualified # 👂🏽 ear: medium skin tone +1F442 1F3FE ; fully-qualified # 👂🏾 ear: medium-dark skin tone +1F442 1F3FF ; fully-qualified # 👂🏿 ear: dark skin tone +1F443 ; fully-qualified # 👃 nose +1F443 1F3FB ; fully-qualified # 👃🏻 nose: light skin tone +1F443 1F3FC ; fully-qualified # 👃🏼 nose: medium-light skin tone +1F443 1F3FD ; fully-qualified # 👃🏽 nose: medium skin tone +1F443 1F3FE ; fully-qualified # 👃🏾 nose: medium-dark skin tone +1F443 1F3FF ; fully-qualified # 👃🏿 nose: dark skin tone +1F9B0 ; fully-qualified # 🦰 red-haired +1F9B1 ; fully-qualified # 🦱 curly-haired +1F9B2 ; fully-qualified # 🦲 bald +1F9B3 ; fully-qualified # 🦳 white-haired +1F463 ; fully-qualified # 👣 footprints +1F440 ; fully-qualified # 👀 eyes +1F441 FE0F ; fully-qualified # 👁️ eye +1F441 ; non-fully-qualified # 👁 eye +1F441 FE0F 200D 1F5E8 FE0F ; fully-qualified # 👁️‍🗨️ eye in speech bubble +1F441 200D 1F5E8 FE0F ; non-fully-qualified # 👁‍🗨️ eye in speech bubble +1F441 FE0F 200D 1F5E8 ; non-fully-qualified # 👁️‍🗨 eye in speech bubble +1F441 200D 1F5E8 ; non-fully-qualified # 👁‍🗨 eye in speech bubble +1F9E0 ; fully-qualified # 🧠 brain +1F9B4 ; fully-qualified # 🦴 bone +1F9B7 ; fully-qualified # 🦷 tooth +1F445 ; fully-qualified # 👅 tongue +1F444 ; fully-qualified # 👄 mouth + +# subgroup: emotion +1F48B ; fully-qualified # 💋 kiss mark +1F498 ; fully-qualified # 💘 heart with arrow +2764 FE0F ; fully-qualified # ❤️ red heart +2764 ; non-fully-qualified # ❤ red heart +1F493 ; fully-qualified # 💓 beating heart +1F494 ; fully-qualified # 💔 broken heart +1F495 ; fully-qualified # 💕 two hearts +1F496 ; fully-qualified # 💖 sparkling heart +1F497 ; fully-qualified # 💗 growing heart +1F499 ; fully-qualified # 💙 blue heart +1F49A ; fully-qualified # 💚 green heart +1F49B ; fully-qualified # 💛 yellow heart +1F9E1 ; fully-qualified # 🧡 orange heart +1F49C ; fully-qualified # 💜 purple heart +1F5A4 ; fully-qualified # 🖤 black heart +1F49D ; fully-qualified # 💝 heart with ribbon +1F49E ; fully-qualified # 💞 revolving hearts +1F49F ; fully-qualified # 💟 heart decoration +2763 FE0F ; fully-qualified # ❣️ heavy heart exclamation +2763 ; non-fully-qualified # ❣ heavy heart exclamation +1F48C ; fully-qualified # 💌 love letter +1F4A4 ; fully-qualified # 💤 zzz +1F4A2 ; fully-qualified # 💢 anger symbol +1F4A3 ; fully-qualified # 💣 bomb +1F4A5 ; fully-qualified # 💥 collision +1F4A6 ; fully-qualified # 💦 sweat droplets +1F4A8 ; fully-qualified # 💨 dashing away +1F4AB ; fully-qualified # 💫 dizzy +1F4AC ; fully-qualified # 💬 speech balloon +1F5E8 FE0F ; fully-qualified # 🗨️ left speech bubble +1F5E8 ; non-fully-qualified # 🗨 left speech bubble +1F5EF FE0F ; fully-qualified # 🗯️ right anger bubble +1F5EF ; non-fully-qualified # 🗯 right anger bubble +1F4AD ; fully-qualified # 💭 thought balloon +1F573 FE0F ; fully-qualified # 🕳️ hole +1F573 ; non-fully-qualified # 🕳 hole + +# subgroup: clothing +1F453 ; fully-qualified # 👓 glasses +1F576 FE0F ; fully-qualified # 🕶️ sunglasses +1F576 ; non-fully-qualified # 🕶 sunglasses +1F97D ; fully-qualified # 🥽 goggles +1F97C ; fully-qualified # 🥼 lab coat +1F454 ; fully-qualified # 👔 necktie +1F455 ; fully-qualified # 👕 t-shirt +1F456 ; fully-qualified # 👖 jeans +1F9E3 ; fully-qualified # 🧣 scarf +1F9E4 ; fully-qualified # 🧤 gloves +1F9E5 ; fully-qualified # 🧥 coat +1F9E6 ; fully-qualified # 🧦 socks +1F457 ; fully-qualified # 👗 dress +1F458 ; fully-qualified # 👘 kimono +1F459 ; fully-qualified # 👙 bikini +1F45A ; fully-qualified # 👚 woman’s clothes +1F45B ; fully-qualified # 👛 purse +1F45C ; fully-qualified # 👜 handbag +1F45D ; fully-qualified # 👝 clutch bag +1F6CD FE0F ; fully-qualified # 🛍️ shopping bags +1F6CD ; non-fully-qualified # 🛍 shopping bags +1F392 ; fully-qualified # 🎒 school backpack +1F45E ; fully-qualified # 👞 man’s shoe +1F45F ; fully-qualified # 👟 running shoe +1F97E ; fully-qualified # 🥾 hiking boot +1F97F ; fully-qualified # 🥿 woman’s flat shoe +1F460 ; fully-qualified # 👠 high-heeled shoe +1F461 ; fully-qualified # 👡 woman’s sandal +1F462 ; fully-qualified # 👢 woman’s boot +1F451 ; fully-qualified # 👑 crown +1F452 ; fully-qualified # 👒 woman’s hat +1F3A9 ; fully-qualified # 🎩 top hat +1F393 ; fully-qualified # 🎓 graduation cap +1F9E2 ; fully-qualified # 🧢 billed cap +26D1 FE0F ; fully-qualified # ⛑️ rescue worker’s helmet +26D1 ; non-fully-qualified # ⛑ rescue worker’s helmet +1F4FF ; fully-qualified # 📿 prayer beads +1F484 ; fully-qualified # 💄 lipstick +1F48D ; fully-qualified # 💍 ring +1F48E ; fully-qualified # 💎 gem stone + +# Smileys & People subtotal: 2210 +# Smileys & People subtotal: 625 w/o modifiers + +# group: Animals & Nature + +# subgroup: animal-mammal +1F435 ; fully-qualified # 🐵 monkey face +1F412 ; fully-qualified # 🐒 monkey +1F98D ; fully-qualified # 🦍 gorilla +1F436 ; fully-qualified # 🐶 dog face +1F415 ; fully-qualified # 🐕 dog +1F429 ; fully-qualified # 🐩 poodle +1F43A ; fully-qualified # 🐺 wolf face +1F98A ; fully-qualified # 🦊 fox face +1F99D ; fully-qualified # 🦝 raccoon +1F431 ; fully-qualified # 🐱 cat face +1F408 ; fully-qualified # 🐈 cat +1F981 ; fully-qualified # 🦁 lion face +1F42F ; fully-qualified # 🐯 tiger face +1F405 ; fully-qualified # 🐅 tiger +1F406 ; fully-qualified # 🐆 leopard +1F434 ; fully-qualified # 🐴 horse face +1F40E ; fully-qualified # 🐎 horse +1F984 ; fully-qualified # 🦄 unicorn face +1F993 ; fully-qualified # 🦓 zebra +1F98C ; fully-qualified # 🦌 deer +1F42E ; fully-qualified # 🐮 cow face +1F402 ; fully-qualified # 🐂 ox +1F403 ; fully-qualified # 🐃 water buffalo +1F404 ; fully-qualified # 🐄 cow +1F437 ; fully-qualified # 🐷 pig face +1F416 ; fully-qualified # 🐖 pig +1F417 ; fully-qualified # 🐗 boar +1F43D ; fully-qualified # 🐽 pig nose +1F40F ; fully-qualified # 🐏 ram +1F411 ; fully-qualified # 🐑 ewe +1F410 ; fully-qualified # 🐐 goat +1F42A ; fully-qualified # 🐪 camel +1F42B ; fully-qualified # 🐫 two-hump camel +1F999 ; fully-qualified # 🦙 llama +1F992 ; fully-qualified # 🦒 giraffe +1F418 ; fully-qualified # 🐘 elephant +1F98F ; fully-qualified # 🦏 rhinoceros +1F99B ; fully-qualified # 🦛 hippopotamus +1F42D ; fully-qualified # 🐭 mouse face +1F401 ; fully-qualified # 🐁 mouse +1F400 ; fully-qualified # 🐀 rat +1F439 ; fully-qualified # 🐹 hamster face +1F430 ; fully-qualified # 🐰 rabbit face +1F407 ; fully-qualified # 🐇 rabbit +1F43F FE0F ; fully-qualified # 🐿️ chipmunk +1F43F ; non-fully-qualified # 🐿 chipmunk +1F994 ; fully-qualified # 🦔 hedgehog +1F987 ; fully-qualified # 🦇 bat +1F43B ; fully-qualified # 🐻 bear face +1F428 ; fully-qualified # 🐨 koala +1F43C ; fully-qualified # 🐼 panda face +1F998 ; fully-qualified # 🦘 kangaroo +1F9A1 ; fully-qualified # 🦡 badger +1F43E ; fully-qualified # 🐾 paw prints + +# subgroup: animal-bird +1F983 ; fully-qualified # 🦃 turkey +1F414 ; fully-qualified # 🐔 chicken +1F413 ; fully-qualified # 🐓 rooster +1F423 ; fully-qualified # 🐣 hatching chick +1F424 ; fully-qualified # 🐤 baby chick +1F425 ; fully-qualified # 🐥 front-facing baby chick +1F426 ; fully-qualified # 🐦 bird +1F427 ; fully-qualified # 🐧 penguin +1F54A FE0F ; fully-qualified # 🕊️ dove +1F54A ; non-fully-qualified # 🕊 dove +1F985 ; fully-qualified # 🦅 eagle +1F986 ; fully-qualified # 🦆 duck +1F9A2 ; fully-qualified # 🦢 swan +1F989 ; fully-qualified # 🦉 owl +1F99A ; fully-qualified # 🦚 peacock +1F99C ; fully-qualified # 🦜 parrot + +# subgroup: animal-amphibian +1F438 ; fully-qualified # 🐸 frog face + +# subgroup: animal-reptile +1F40A ; fully-qualified # 🐊 crocodile +1F422 ; fully-qualified # 🐢 turtle +1F98E ; fully-qualified # 🦎 lizard +1F40D ; fully-qualified # 🐍 snake +1F432 ; fully-qualified # 🐲 dragon face +1F409 ; fully-qualified # 🐉 dragon +1F995 ; fully-qualified # 🦕 sauropod +1F996 ; fully-qualified # 🦖 T-Rex + +# subgroup: animal-marine +1F433 ; fully-qualified # 🐳 spouting whale +1F40B ; fully-qualified # 🐋 whale +1F42C ; fully-qualified # 🐬 dolphin +1F41F ; fully-qualified # 🐟 fish +1F420 ; fully-qualified # 🐠 tropical fish +1F421 ; fully-qualified # 🐡 blowfish +1F988 ; fully-qualified # 🦈 shark +1F419 ; fully-qualified # 🐙 octopus +1F41A ; fully-qualified # 🐚 spiral shell +1F980 ; fully-qualified # 🦀 crab +1F99E ; fully-qualified # 🦞 lobster +1F990 ; fully-qualified # 🦐 shrimp +1F991 ; fully-qualified # 🦑 squid + +# subgroup: animal-bug +1F40C ; fully-qualified # 🐌 snail +1F98B ; fully-qualified # 🦋 butterfly +1F41B ; fully-qualified # 🐛 bug +1F41C ; fully-qualified # 🐜 ant +1F41D ; fully-qualified # 🐝 honeybee +1F41E ; fully-qualified # 🐞 lady beetle +1F997 ; fully-qualified # 🦗 cricket +1F577 FE0F ; fully-qualified # 🕷️ spider +1F577 ; non-fully-qualified # 🕷 spider +1F578 FE0F ; fully-qualified # 🕸️ spider web +1F578 ; non-fully-qualified # 🕸 spider web +1F982 ; fully-qualified # 🦂 scorpion +1F99F ; fully-qualified # 🦟 mosquito +1F9A0 ; fully-qualified # 🦠 microbe + +# subgroup: plant-flower +1F490 ; fully-qualified # 💐 bouquet +1F338 ; fully-qualified # 🌸 cherry blossom +1F4AE ; fully-qualified # 💮 white flower +1F3F5 FE0F ; fully-qualified # 🏵️ rosette +1F3F5 ; non-fully-qualified # 🏵 rosette +1F339 ; fully-qualified # 🌹 rose +1F940 ; fully-qualified # 🥀 wilted flower +1F33A ; fully-qualified # 🌺 hibiscus +1F33B ; fully-qualified # 🌻 sunflower +1F33C ; fully-qualified # 🌼 blossom +1F337 ; fully-qualified # 🌷 tulip + +# subgroup: plant-other +1F331 ; fully-qualified # 🌱 seedling +1F332 ; fully-qualified # 🌲 evergreen tree +1F333 ; fully-qualified # 🌳 deciduous tree +1F334 ; fully-qualified # 🌴 palm tree +1F335 ; fully-qualified # 🌵 cactus +1F33E ; fully-qualified # 🌾 sheaf of rice +1F33F ; fully-qualified # 🌿 herb +2618 FE0F ; fully-qualified # ☘️ shamrock +2618 ; non-fully-qualified # ☘ shamrock +1F340 ; fully-qualified # 🍀 four leaf clover +1F341 ; fully-qualified # 🍁 maple leaf +1F342 ; fully-qualified # 🍂 fallen leaf +1F343 ; fully-qualified # 🍃 leaf fluttering in wind + +# Animals & Nature subtotal: 130 +# Animals & Nature subtotal: 130 w/o modifiers + +# group: Food & Drink + +# subgroup: food-fruit +1F347 ; fully-qualified # 🍇 grapes +1F348 ; fully-qualified # 🍈 melon +1F349 ; fully-qualified # 🍉 watermelon +1F34A ; fully-qualified # 🍊 tangerine +1F34B ; fully-qualified # 🍋 lemon +1F34C ; fully-qualified # 🍌 banana +1F34D ; fully-qualified # 🍍 pineapple +1F96D ; fully-qualified # 🥭 mango +1F34E ; fully-qualified # 🍎 red apple +1F34F ; fully-qualified # 🍏 green apple +1F350 ; fully-qualified # 🍐 pear +1F351 ; fully-qualified # 🍑 peach +1F352 ; fully-qualified # 🍒 cherries +1F353 ; fully-qualified # 🍓 strawberry +1F95D ; fully-qualified # 🥝 kiwi fruit +1F345 ; fully-qualified # 🍅 tomato +1F965 ; fully-qualified # 🥥 coconut + +# subgroup: food-vegetable +1F951 ; fully-qualified # 🥑 avocado +1F346 ; fully-qualified # 🍆 eggplant +1F954 ; fully-qualified # 🥔 potato +1F955 ; fully-qualified # 🥕 carrot +1F33D ; fully-qualified # 🌽 ear of corn +1F336 FE0F ; fully-qualified # 🌶️ hot pepper +1F336 ; non-fully-qualified # 🌶 hot pepper +1F952 ; fully-qualified # 🥒 cucumber +1F96C ; fully-qualified # 🥬 leafy green +1F966 ; fully-qualified # 🥦 broccoli +1F344 ; fully-qualified # 🍄 mushroom +1F95C ; fully-qualified # 🥜 peanuts +1F330 ; fully-qualified # 🌰 chestnut + +# subgroup: food-prepared +1F35E ; fully-qualified # 🍞 bread +1F950 ; fully-qualified # 🥐 croissant +1F956 ; fully-qualified # 🥖 baguette bread +1F968 ; fully-qualified # 🥨 pretzel +1F96F ; fully-qualified # 🥯 bagel +1F95E ; fully-qualified # 🥞 pancakes +1F9C0 ; fully-qualified # 🧀 cheese wedge +1F356 ; fully-qualified # 🍖 meat on bone +1F357 ; fully-qualified # 🍗 poultry leg +1F969 ; fully-qualified # 🥩 cut of meat +1F953 ; fully-qualified # 🥓 bacon +1F354 ; fully-qualified # 🍔 hamburger +1F35F ; fully-qualified # 🍟 french fries +1F355 ; fully-qualified # 🍕 pizza +1F32D ; fully-qualified # 🌭 hot dog +1F96A ; fully-qualified # 🥪 sandwich +1F32E ; fully-qualified # 🌮 taco +1F32F ; fully-qualified # 🌯 burrito +1F959 ; fully-qualified # 🥙 stuffed flatbread +1F95A ; fully-qualified # 🥚 egg +1F373 ; fully-qualified # 🍳 cooking +1F958 ; fully-qualified # 🥘 shallow pan of food +1F372 ; fully-qualified # 🍲 pot of food +1F963 ; fully-qualified # 🥣 bowl with spoon +1F957 ; fully-qualified # 🥗 green salad +1F37F ; fully-qualified # 🍿 popcorn +1F9C2 ; fully-qualified # 🧂 salt +1F96B ; fully-qualified # 🥫 canned food + +# subgroup: food-asian +1F371 ; fully-qualified # 🍱 bento box +1F358 ; fully-qualified # 🍘 rice cracker +1F359 ; fully-qualified # 🍙 rice ball +1F35A ; fully-qualified # 🍚 cooked rice +1F35B ; fully-qualified # 🍛 curry rice +1F35C ; fully-qualified # 🍜 steaming bowl +1F35D ; fully-qualified # 🍝 spaghetti +1F360 ; fully-qualified # 🍠 roasted sweet potato +1F362 ; fully-qualified # 🍢 oden +1F363 ; fully-qualified # 🍣 sushi +1F364 ; fully-qualified # 🍤 fried shrimp +1F365 ; fully-qualified # 🍥 fish cake with swirl +1F96E ; fully-qualified # 🥮 moon cake +1F361 ; fully-qualified # 🍡 dango +1F95F ; fully-qualified # 🥟 dumpling +1F960 ; fully-qualified # 🥠 fortune cookie +1F961 ; fully-qualified # 🥡 takeout box + +# subgroup: food-sweet +1F366 ; fully-qualified # 🍦 soft ice cream +1F367 ; fully-qualified # 🍧 shaved ice +1F368 ; fully-qualified # 🍨 ice cream +1F369 ; fully-qualified # 🍩 doughnut +1F36A ; fully-qualified # 🍪 cookie +1F382 ; fully-qualified # 🎂 birthday cake +1F370 ; fully-qualified # 🍰 shortcake +1F9C1 ; fully-qualified # 🧁 cupcake +1F967 ; fully-qualified # 🥧 pie +1F36B ; fully-qualified # 🍫 chocolate bar +1F36C ; fully-qualified # 🍬 candy +1F36D ; fully-qualified # 🍭 lollipop +1F36E ; fully-qualified # 🍮 custard +1F36F ; fully-qualified # 🍯 honey pot + +# subgroup: drink +1F37C ; fully-qualified # 🍼 baby bottle +1F95B ; fully-qualified # 🥛 glass of milk +2615 ; fully-qualified # ☕ hot beverage +1F375 ; fully-qualified # 🍵 teacup without handle +1F376 ; fully-qualified # 🍶 sake +1F37E ; fully-qualified # 🍾 bottle with popping cork +1F377 ; fully-qualified # 🍷 wine glass +1F378 ; fully-qualified # 🍸 cocktail glass +1F379 ; fully-qualified # 🍹 tropical drink +1F37A ; fully-qualified # 🍺 beer mug +1F37B ; fully-qualified # 🍻 clinking beer mugs +1F942 ; fully-qualified # 🥂 clinking glasses +1F943 ; fully-qualified # 🥃 tumbler glass +1F964 ; fully-qualified # 🥤 cup with straw + +# subgroup: dishware +1F962 ; fully-qualified # 🥢 chopsticks +1F37D FE0F ; fully-qualified # 🍽️ fork and knife with plate +1F37D ; non-fully-qualified # 🍽 fork and knife with plate +1F374 ; fully-qualified # 🍴 fork and knife +1F944 ; fully-qualified # 🥄 spoon +1F52A ; fully-qualified # 🔪 kitchen knife +1F3FA ; fully-qualified # 🏺 amphora + +# Food & Drink subtotal: 110 +# Food & Drink subtotal: 110 w/o modifiers + +# group: Travel & Places + +# subgroup: place-map +1F30D ; fully-qualified # 🌍 globe showing Europe-Africa +1F30E ; fully-qualified # 🌎 globe showing Americas +1F30F ; fully-qualified # 🌏 globe showing Asia-Australia +1F310 ; fully-qualified # 🌐 globe with meridians +1F5FA FE0F ; fully-qualified # 🗺️ world map +1F5FA ; non-fully-qualified # 🗺 world map +1F5FE ; fully-qualified # 🗾 map of Japan +1F9ED ; fully-qualified # 🧭 compass + +# subgroup: place-geographic +1F3D4 FE0F ; fully-qualified # 🏔️ snow-capped mountain +1F3D4 ; non-fully-qualified # 🏔 snow-capped mountain +26F0 FE0F ; fully-qualified # ⛰️ mountain +26F0 ; non-fully-qualified # ⛰ mountain +1F30B ; fully-qualified # 🌋 volcano +1F5FB ; fully-qualified # 🗻 mount fuji +1F3D5 FE0F ; fully-qualified # 🏕️ camping +1F3D5 ; non-fully-qualified # 🏕 camping +1F3D6 FE0F ; fully-qualified # 🏖️ beach with umbrella +1F3D6 ; non-fully-qualified # 🏖 beach with umbrella +1F3DC FE0F ; fully-qualified # 🏜️ desert +1F3DC ; non-fully-qualified # 🏜 desert +1F3DD FE0F ; fully-qualified # 🏝️ desert island +1F3DD ; non-fully-qualified # 🏝 desert island +1F3DE FE0F ; fully-qualified # 🏞️ national park +1F3DE ; non-fully-qualified # 🏞 national park + +# subgroup: place-building +1F3DF FE0F ; fully-qualified # 🏟️ stadium +1F3DF ; non-fully-qualified # 🏟 stadium +1F3DB FE0F ; fully-qualified # 🏛️ classical building +1F3DB ; non-fully-qualified # 🏛 classical building +1F3D7 FE0F ; fully-qualified # 🏗️ building construction +1F3D7 ; non-fully-qualified # 🏗 building construction +1F9F1 ; fully-qualified # 🧱 bricks +1F3D8 FE0F ; fully-qualified # 🏘️ houses +1F3D8 ; non-fully-qualified # 🏘 houses +1F3DA FE0F ; fully-qualified # 🏚️ derelict house +1F3DA ; non-fully-qualified # 🏚 derelict house +1F3E0 ; fully-qualified # 🏠 house +1F3E1 ; fully-qualified # 🏡 house with garden +1F3E2 ; fully-qualified # 🏢 office building +1F3E3 ; fully-qualified # 🏣 Japanese post office +1F3E4 ; fully-qualified # 🏤 post office +1F3E5 ; fully-qualified # 🏥 hospital +1F3E6 ; fully-qualified # 🏦 bank +1F3E8 ; fully-qualified # 🏨 hotel +1F3E9 ; fully-qualified # 🏩 love hotel +1F3EA ; fully-qualified # 🏪 convenience store +1F3EB ; fully-qualified # 🏫 school +1F3EC ; fully-qualified # 🏬 department store +1F3ED ; fully-qualified # 🏭 factory +1F3EF ; fully-qualified # 🏯 Japanese castle +1F3F0 ; fully-qualified # 🏰 castle +1F492 ; fully-qualified # 💒 wedding +1F5FC ; fully-qualified # 🗼 Tokyo tower +1F5FD ; fully-qualified # 🗽 Statue of Liberty + +# subgroup: place-religious +26EA ; fully-qualified # ⛪ church +1F54C ; fully-qualified # 🕌 mosque +1F54D ; fully-qualified # 🕍 synagogue +26E9 FE0F ; fully-qualified # ⛩️ shinto shrine +26E9 ; non-fully-qualified # ⛩ shinto shrine +1F54B ; fully-qualified # 🕋 kaaba + +# subgroup: place-other +26F2 ; fully-qualified # ⛲ fountain +26FA ; fully-qualified # ⛺ tent +1F301 ; fully-qualified # 🌁 foggy +1F303 ; fully-qualified # 🌃 night with stars +1F3D9 FE0F ; fully-qualified # 🏙️ cityscape +1F3D9 ; non-fully-qualified # 🏙 cityscape +1F304 ; fully-qualified # 🌄 sunrise over mountains +1F305 ; fully-qualified # 🌅 sunrise +1F306 ; fully-qualified # 🌆 cityscape at dusk +1F307 ; fully-qualified # 🌇 sunset +1F309 ; fully-qualified # 🌉 bridge at night +2668 FE0F ; fully-qualified # ♨️ hot springs +2668 ; non-fully-qualified # ♨ hot springs +1F30C ; fully-qualified # 🌌 milky way +1F3A0 ; fully-qualified # 🎠 carousel horse +1F3A1 ; fully-qualified # 🎡 ferris wheel +1F3A2 ; fully-qualified # 🎢 roller coaster +1F488 ; fully-qualified # 💈 barber pole +1F3AA ; fully-qualified # 🎪 circus tent + +# subgroup: transport-ground +1F682 ; fully-qualified # 🚂 locomotive +1F683 ; fully-qualified # 🚃 railway car +1F684 ; fully-qualified # 🚄 high-speed train +1F685 ; fully-qualified # 🚅 bullet train +1F686 ; fully-qualified # 🚆 train +1F687 ; fully-qualified # 🚇 metro +1F688 ; fully-qualified # 🚈 light rail +1F689 ; fully-qualified # 🚉 station +1F68A ; fully-qualified # 🚊 tram +1F69D ; fully-qualified # 🚝 monorail +1F69E ; fully-qualified # 🚞 mountain railway +1F68B ; fully-qualified # 🚋 tram car +1F68C ; fully-qualified # 🚌 bus +1F68D ; fully-qualified # 🚍 oncoming bus +1F68E ; fully-qualified # 🚎 trolleybus +1F690 ; fully-qualified # 🚐 minibus +1F691 ; fully-qualified # 🚑 ambulance +1F692 ; fully-qualified # 🚒 fire engine +1F693 ; fully-qualified # 🚓 police car +1F694 ; fully-qualified # 🚔 oncoming police car +1F695 ; fully-qualified # 🚕 taxi +1F696 ; fully-qualified # 🚖 oncoming taxi +1F697 ; fully-qualified # 🚗 automobile +1F698 ; fully-qualified # 🚘 oncoming automobile +1F699 ; fully-qualified # 🚙 sport utility vehicle +1F69A ; fully-qualified # 🚚 delivery truck +1F69B ; fully-qualified # 🚛 articulated lorry +1F69C ; fully-qualified # 🚜 tractor +1F6B2 ; fully-qualified # 🚲 bicycle +1F6F4 ; fully-qualified # 🛴 kick scooter +1F6F9 ; fully-qualified # 🛹 skateboard +1F6F5 ; fully-qualified # 🛵 motor scooter +1F68F ; fully-qualified # 🚏 bus stop +1F6E3 FE0F ; fully-qualified # 🛣️ motorway +1F6E3 ; non-fully-qualified # 🛣 motorway +1F6E4 FE0F ; fully-qualified # 🛤️ railway track +1F6E4 ; non-fully-qualified # 🛤 railway track +1F6E2 FE0F ; fully-qualified # 🛢️ oil drum +1F6E2 ; non-fully-qualified # 🛢 oil drum +26FD ; fully-qualified # ⛽ fuel pump +1F6A8 ; fully-qualified # 🚨 police car light +1F6A5 ; fully-qualified # 🚥 horizontal traffic light +1F6A6 ; fully-qualified # 🚦 vertical traffic light +1F6D1 ; fully-qualified # 🛑 stop sign +1F6A7 ; fully-qualified # 🚧 construction + +# subgroup: transport-water +2693 ; fully-qualified # ⚓ anchor +26F5 ; fully-qualified # ⛵ sailboat +1F6F6 ; fully-qualified # 🛶 canoe +1F6A4 ; fully-qualified # 🚤 speedboat +1F6F3 FE0F ; fully-qualified # 🛳️ passenger ship +1F6F3 ; non-fully-qualified # 🛳 passenger ship +26F4 FE0F ; fully-qualified # ⛴️ ferry +26F4 ; non-fully-qualified # ⛴ ferry +1F6E5 FE0F ; fully-qualified # 🛥️ motor boat +1F6E5 ; non-fully-qualified # 🛥 motor boat +1F6A2 ; fully-qualified # 🚢 ship + +# subgroup: transport-air +2708 FE0F ; fully-qualified # ✈️ airplane +2708 ; non-fully-qualified # ✈ airplane +1F6E9 FE0F ; fully-qualified # 🛩️ small airplane +1F6E9 ; non-fully-qualified # 🛩 small airplane +1F6EB ; fully-qualified # 🛫 airplane departure +1F6EC ; fully-qualified # 🛬 airplane arrival +1F4BA ; fully-qualified # 💺 seat +1F681 ; fully-qualified # 🚁 helicopter +1F69F ; fully-qualified # 🚟 suspension railway +1F6A0 ; fully-qualified # 🚠 mountain cableway +1F6A1 ; fully-qualified # 🚡 aerial tramway +1F6F0 FE0F ; fully-qualified # 🛰️ satellite +1F6F0 ; non-fully-qualified # 🛰 satellite +1F680 ; fully-qualified # 🚀 rocket +1F6F8 ; fully-qualified # 🛸 flying saucer + +# subgroup: hotel +1F6CE FE0F ; fully-qualified # 🛎️ bellhop bell +1F6CE ; non-fully-qualified # 🛎 bellhop bell +1F9F3 ; fully-qualified # 🧳 luggage + +# subgroup: time +231B ; fully-qualified # ⌛ hourglass done +23F3 ; fully-qualified # ⏳ hourglass not done +231A ; fully-qualified # ⌚ watch +23F0 ; fully-qualified # ⏰ alarm clock +23F1 FE0F ; fully-qualified # ⏱️ stopwatch +23F1 ; non-fully-qualified # ⏱ stopwatch +23F2 FE0F ; fully-qualified # ⏲️ timer clock +23F2 ; non-fully-qualified # ⏲ timer clock +1F570 FE0F ; fully-qualified # 🕰️ mantelpiece clock +1F570 ; non-fully-qualified # 🕰 mantelpiece clock +1F55B ; fully-qualified # 🕛 twelve o’clock +1F567 ; fully-qualified # 🕧 twelve-thirty +1F550 ; fully-qualified # 🕐 one o’clock +1F55C ; fully-qualified # 🕜 one-thirty +1F551 ; fully-qualified # 🕑 two o’clock +1F55D ; fully-qualified # 🕝 two-thirty +1F552 ; fully-qualified # 🕒 three o’clock +1F55E ; fully-qualified # 🕞 three-thirty +1F553 ; fully-qualified # 🕓 four o’clock +1F55F ; fully-qualified # 🕟 four-thirty +1F554 ; fully-qualified # 🕔 five o’clock +1F560 ; fully-qualified # 🕠 five-thirty +1F555 ; fully-qualified # 🕕 six o’clock +1F561 ; fully-qualified # 🕡 six-thirty +1F556 ; fully-qualified # 🕖 seven o’clock +1F562 ; fully-qualified # 🕢 seven-thirty +1F557 ; fully-qualified # 🕗 eight o’clock +1F563 ; fully-qualified # 🕣 eight-thirty +1F558 ; fully-qualified # 🕘 nine o’clock +1F564 ; fully-qualified # 🕤 nine-thirty +1F559 ; fully-qualified # 🕙 ten o’clock +1F565 ; fully-qualified # 🕥 ten-thirty +1F55A ; fully-qualified # 🕚 eleven o’clock +1F566 ; fully-qualified # 🕦 eleven-thirty + +# subgroup: sky & weather +1F311 ; fully-qualified # 🌑 new moon +1F312 ; fully-qualified # 🌒 waxing crescent moon +1F313 ; fully-qualified # 🌓 first quarter moon +1F314 ; fully-qualified # 🌔 waxing gibbous moon +1F315 ; fully-qualified # 🌕 full moon +1F316 ; fully-qualified # 🌖 waning gibbous moon +1F317 ; fully-qualified # 🌗 last quarter moon +1F318 ; fully-qualified # 🌘 waning crescent moon +1F319 ; fully-qualified # 🌙 crescent moon +1F31A ; fully-qualified # 🌚 new moon face +1F31B ; fully-qualified # 🌛 first quarter moon face +1F31C ; fully-qualified # 🌜 last quarter moon face +1F321 FE0F ; fully-qualified # 🌡️ thermometer +1F321 ; non-fully-qualified # 🌡 thermometer +2600 FE0F ; fully-qualified # ☀️ sun +2600 ; non-fully-qualified # ☀ sun +1F31D ; fully-qualified # 🌝 full moon face +1F31E ; fully-qualified # 🌞 sun with face +2B50 ; fully-qualified # ⭐ star +1F31F ; fully-qualified # 🌟 glowing star +1F320 ; fully-qualified # 🌠 shooting star +2601 FE0F ; fully-qualified # ☁️ cloud +2601 ; non-fully-qualified # ☁ cloud +26C5 ; fully-qualified # ⛅ sun behind cloud +26C8 FE0F ; fully-qualified # ⛈️ cloud with lightning and rain +26C8 ; non-fully-qualified # ⛈ cloud with lightning and rain +1F324 FE0F ; fully-qualified # 🌤️ sun behind small cloud +1F324 ; non-fully-qualified # 🌤 sun behind small cloud +1F325 FE0F ; fully-qualified # 🌥️ sun behind large cloud +1F325 ; non-fully-qualified # 🌥 sun behind large cloud +1F326 FE0F ; fully-qualified # 🌦️ sun behind rain cloud +1F326 ; non-fully-qualified # 🌦 sun behind rain cloud +1F327 FE0F ; fully-qualified # 🌧️ cloud with rain +1F327 ; non-fully-qualified # 🌧 cloud with rain +1F328 FE0F ; fully-qualified # 🌨️ cloud with snow +1F328 ; non-fully-qualified # 🌨 cloud with snow +1F329 FE0F ; fully-qualified # 🌩️ cloud with lightning +1F329 ; non-fully-qualified # 🌩 cloud with lightning +1F32A FE0F ; fully-qualified # 🌪️ tornado +1F32A ; non-fully-qualified # 🌪 tornado +1F32B FE0F ; fully-qualified # 🌫️ fog +1F32B ; non-fully-qualified # 🌫 fog +1F32C FE0F ; fully-qualified # 🌬️ wind face +1F32C ; non-fully-qualified # 🌬 wind face +1F300 ; fully-qualified # 🌀 cyclone +1F308 ; fully-qualified # 🌈 rainbow +1F302 ; fully-qualified # 🌂 closed umbrella +2602 FE0F ; fully-qualified # ☂️ umbrella +2602 ; non-fully-qualified # ☂ umbrella +2614 ; fully-qualified # ☔ umbrella with rain drops +26F1 FE0F ; fully-qualified # ⛱️ umbrella on ground +26F1 ; non-fully-qualified # ⛱ umbrella on ground +26A1 ; fully-qualified # ⚡ high voltage +2744 FE0F ; fully-qualified # ❄️ snowflake +2744 ; non-fully-qualified # ❄ snowflake +2603 FE0F ; fully-qualified # ☃️ snowman +2603 ; non-fully-qualified # ☃ snowman +26C4 ; fully-qualified # ⛄ snowman without snow +2604 FE0F ; fully-qualified # ☄️ comet +2604 ; non-fully-qualified # ☄ comet +1F525 ; fully-qualified # 🔥 fire +1F4A7 ; fully-qualified # 💧 droplet +1F30A ; fully-qualified # 🌊 water wave + +# Travel & Places subtotal: 249 +# Travel & Places subtotal: 249 w/o modifiers + +# group: Activities + +# subgroup: event +1F383 ; fully-qualified # 🎃 jack-o-lantern +1F384 ; fully-qualified # 🎄 Christmas tree +1F386 ; fully-qualified # 🎆 fireworks +1F387 ; fully-qualified # 🎇 sparkler +1F9E8 ; fully-qualified # 🧨 firecracker +2728 ; fully-qualified # ✨ sparkles +1F388 ; fully-qualified # 🎈 balloon +1F389 ; fully-qualified # 🎉 party popper +1F38A ; fully-qualified # 🎊 confetti ball +1F38B ; fully-qualified # 🎋 tanabata tree +1F38D ; fully-qualified # 🎍 pine decoration +1F38E ; fully-qualified # 🎎 Japanese dolls +1F38F ; fully-qualified # 🎏 carp streamer +1F390 ; fully-qualified # 🎐 wind chime +1F391 ; fully-qualified # 🎑 moon viewing ceremony +1F9E7 ; fully-qualified # 🧧 red envelope +1F380 ; fully-qualified # 🎀 ribbon +1F381 ; fully-qualified # 🎁 wrapped gift +1F397 FE0F ; fully-qualified # 🎗️ reminder ribbon +1F397 ; non-fully-qualified # 🎗 reminder ribbon +1F39F FE0F ; fully-qualified # 🎟️ admission tickets +1F39F ; non-fully-qualified # 🎟 admission tickets +1F3AB ; fully-qualified # 🎫 ticket + +# subgroup: award-medal +1F396 FE0F ; fully-qualified # 🎖️ military medal +1F396 ; non-fully-qualified # 🎖 military medal +1F3C6 ; fully-qualified # 🏆 trophy +1F3C5 ; fully-qualified # 🏅 sports medal +1F947 ; fully-qualified # 🥇 1st place medal +1F948 ; fully-qualified # 🥈 2nd place medal +1F949 ; fully-qualified # 🥉 3rd place medal + +# subgroup: sport +26BD ; fully-qualified # ⚽ soccer ball +26BE ; fully-qualified # ⚾ baseball +1F94E ; fully-qualified # 🥎 softball +1F3C0 ; fully-qualified # 🏀 basketball +1F3D0 ; fully-qualified # 🏐 volleyball +1F3C8 ; fully-qualified # 🏈 american football +1F3C9 ; fully-qualified # 🏉 rugby football +1F3BE ; fully-qualified # 🎾 tennis +1F94F ; fully-qualified # 🥏 flying disc +1F3B3 ; fully-qualified # 🎳 bowling +1F3CF ; fully-qualified # 🏏 cricket game +1F3D1 ; fully-qualified # 🏑 field hockey +1F3D2 ; fully-qualified # 🏒 ice hockey +1F94D ; fully-qualified # 🥍 lacrosse +1F3D3 ; fully-qualified # 🏓 ping pong +1F3F8 ; fully-qualified # 🏸 badminton +1F94A ; fully-qualified # 🥊 boxing glove +1F94B ; fully-qualified # 🥋 martial arts uniform +1F945 ; fully-qualified # 🥅 goal net +26F3 ; fully-qualified # ⛳ flag in hole +26F8 FE0F ; fully-qualified # ⛸️ ice skate +26F8 ; non-fully-qualified # ⛸ ice skate +1F3A3 ; fully-qualified # 🎣 fishing pole +1F3BD ; fully-qualified # 🎽 running shirt +1F3BF ; fully-qualified # 🎿 skis +1F6F7 ; fully-qualified # 🛷 sled +1F94C ; fully-qualified # 🥌 curling stone + +# subgroup: game +1F3AF ; fully-qualified # 🎯 direct hit +1F3B1 ; fully-qualified # 🎱 pool 8 ball +1F52E ; fully-qualified # 🔮 crystal ball +1F9FF ; fully-qualified # 🧿 nazar amulet +1F3AE ; fully-qualified # 🎮 video game +1F579 FE0F ; fully-qualified # 🕹️ joystick +1F579 ; non-fully-qualified # 🕹 joystick +1F3B0 ; fully-qualified # 🎰 slot machine +1F3B2 ; fully-qualified # 🎲 game die +1F9E9 ; fully-qualified # 🧩 jigsaw +1F9F8 ; fully-qualified # 🧸 teddy bear +2660 FE0F ; fully-qualified # ♠️ spade suit +2660 ; non-fully-qualified # ♠ spade suit +2665 FE0F ; fully-qualified # ♥️ heart suit +2665 ; non-fully-qualified # ♥ heart suit +2666 FE0F ; fully-qualified # ♦️ diamond suit +2666 ; non-fully-qualified # ♦ diamond suit +2663 FE0F ; fully-qualified # ♣️ club suit +2663 ; non-fully-qualified # ♣ club suit +265F FE0F ; fully-qualified # ♟️ chess pawn +265F ; non-fully-qualified # ♟ chess pawn +1F0CF ; fully-qualified # 🃏 joker +1F004 ; fully-qualified # 🀄 mahjong red dragon +1F3B4 ; fully-qualified # 🎴 flower playing cards + +# subgroup: arts & crafts +1F3AD ; fully-qualified # 🎭 performing arts +1F5BC FE0F ; fully-qualified # 🖼️ framed picture +1F5BC ; non-fully-qualified # 🖼 framed picture +1F3A8 ; fully-qualified # 🎨 artist palette +1F9F5 ; fully-qualified # 🧵 thread +1F9F6 ; fully-qualified # 🧶 yarn + +# Activities subtotal: 87 +# Activities subtotal: 87 w/o modifiers + +# group: Objects + +# subgroup: sound +1F507 ; fully-qualified # 🔇 muted speaker +1F508 ; fully-qualified # 🔈 speaker low volume +1F509 ; fully-qualified # 🔉 speaker medium volume +1F50A ; fully-qualified # 🔊 speaker high volume +1F4E2 ; fully-qualified # 📢 loudspeaker +1F4E3 ; fully-qualified # 📣 megaphone +1F4EF ; fully-qualified # 📯 postal horn +1F514 ; fully-qualified # 🔔 bell +1F515 ; fully-qualified # 🔕 bell with slash + +# subgroup: music +1F3BC ; fully-qualified # 🎼 musical score +1F3B5 ; fully-qualified # 🎵 musical note +1F3B6 ; fully-qualified # 🎶 musical notes +1F399 FE0F ; fully-qualified # 🎙️ studio microphone +1F399 ; non-fully-qualified # 🎙 studio microphone +1F39A FE0F ; fully-qualified # 🎚️ level slider +1F39A ; non-fully-qualified # 🎚 level slider +1F39B FE0F ; fully-qualified # 🎛️ control knobs +1F39B ; non-fully-qualified # 🎛 control knobs +1F3A4 ; fully-qualified # 🎤 microphone +1F3A7 ; fully-qualified # 🎧 headphone +1F4FB ; fully-qualified # 📻 radio + +# subgroup: musical-instrument +1F3B7 ; fully-qualified # 🎷 saxophone +1F3B8 ; fully-qualified # 🎸 guitar +1F3B9 ; fully-qualified # 🎹 musical keyboard +1F3BA ; fully-qualified # 🎺 trumpet +1F3BB ; fully-qualified # 🎻 violin +1F941 ; fully-qualified # 🥁 drum + +# subgroup: phone +1F4F1 ; fully-qualified # 📱 mobile phone +1F4F2 ; fully-qualified # 📲 mobile phone with arrow +260E FE0F ; fully-qualified # ☎️ telephone +260E ; non-fully-qualified # ☎ telephone +1F4DE ; fully-qualified # 📞 telephone receiver +1F4DF ; fully-qualified # 📟 pager +1F4E0 ; fully-qualified # 📠 fax machine + +# subgroup: computer +1F50B ; fully-qualified # 🔋 battery +1F50C ; fully-qualified # 🔌 electric plug +1F4BB ; fully-qualified # 💻 laptop computer +1F5A5 FE0F ; fully-qualified # 🖥️ desktop computer +1F5A5 ; non-fully-qualified # 🖥 desktop computer +1F5A8 FE0F ; fully-qualified # 🖨️ printer +1F5A8 ; non-fully-qualified # 🖨 printer +2328 FE0F ; fully-qualified # ⌨️ keyboard +2328 ; non-fully-qualified # ⌨ keyboard +1F5B1 FE0F ; fully-qualified # 🖱️ computer mouse +1F5B1 ; non-fully-qualified # 🖱 computer mouse +1F5B2 FE0F ; fully-qualified # 🖲️ trackball +1F5B2 ; non-fully-qualified # 🖲 trackball +1F4BD ; fully-qualified # 💽 computer disk +1F4BE ; fully-qualified # 💾 floppy disk +1F4BF ; fully-qualified # 💿 optical disk +1F4C0 ; fully-qualified # 📀 dvd +1F9EE ; fully-qualified # 🧮 abacus + +# subgroup: light & video +1F3A5 ; fully-qualified # 🎥 movie camera +1F39E FE0F ; fully-qualified # 🎞️ film frames +1F39E ; non-fully-qualified # 🎞 film frames +1F4FD FE0F ; fully-qualified # 📽️ film projector +1F4FD ; non-fully-qualified # 📽 film projector +1F3AC ; fully-qualified # 🎬 clapper board +1F4FA ; fully-qualified # 📺 television +1F4F7 ; fully-qualified # 📷 camera +1F4F8 ; fully-qualified # 📸 camera with flash +1F4F9 ; fully-qualified # 📹 video camera +1F4FC ; fully-qualified # 📼 videocassette +1F50D ; fully-qualified # 🔍 magnifying glass tilted left +1F50E ; fully-qualified # 🔎 magnifying glass tilted right +1F56F FE0F ; fully-qualified # 🕯️ candle +1F56F ; non-fully-qualified # 🕯 candle +1F4A1 ; fully-qualified # 💡 light bulb +1F526 ; fully-qualified # 🔦 flashlight +1F3EE ; fully-qualified # 🏮 red paper lantern + +# subgroup: book-paper +1F4D4 ; fully-qualified # 📔 notebook with decorative cover +1F4D5 ; fully-qualified # 📕 closed book +1F4D6 ; fully-qualified # 📖 open book +1F4D7 ; fully-qualified # 📗 green book +1F4D8 ; fully-qualified # 📘 blue book +1F4D9 ; fully-qualified # 📙 orange book +1F4DA ; fully-qualified # 📚 books +1F4D3 ; fully-qualified # 📓 notebook +1F4D2 ; fully-qualified # 📒 ledger +1F4C3 ; fully-qualified # 📃 page with curl +1F4DC ; fully-qualified # 📜 scroll +1F4C4 ; fully-qualified # 📄 page facing up +1F4F0 ; fully-qualified # 📰 newspaper +1F5DE FE0F ; fully-qualified # 🗞️ rolled-up newspaper +1F5DE ; non-fully-qualified # 🗞 rolled-up newspaper +1F4D1 ; fully-qualified # 📑 bookmark tabs +1F516 ; fully-qualified # 🔖 bookmark +1F3F7 FE0F ; fully-qualified # 🏷️ label +1F3F7 ; non-fully-qualified # 🏷 label + +# subgroup: money +1F4B0 ; fully-qualified # 💰 money bag +1F4B4 ; fully-qualified # 💴 yen banknote +1F4B5 ; fully-qualified # 💵 dollar banknote +1F4B6 ; fully-qualified # 💶 euro banknote +1F4B7 ; fully-qualified # 💷 pound banknote +1F4B8 ; fully-qualified # 💸 money with wings +1F4B3 ; fully-qualified # 💳 credit card +1F9FE ; fully-qualified # 🧾 receipt +1F4B9 ; fully-qualified # 💹 chart increasing with yen +1F4B1 ; fully-qualified # 💱 currency exchange +1F4B2 ; fully-qualified # 💲 heavy dollar sign + +# subgroup: mail +2709 FE0F ; fully-qualified # ✉️ envelope +2709 ; non-fully-qualified # ✉ envelope +1F4E7 ; fully-qualified # 📧 e-mail +1F4E8 ; fully-qualified # 📨 incoming envelope +1F4E9 ; fully-qualified # 📩 envelope with arrow +1F4E4 ; fully-qualified # 📤 outbox tray +1F4E5 ; fully-qualified # 📥 inbox tray +1F4E6 ; fully-qualified # 📦 package +1F4EB ; fully-qualified # 📫 closed mailbox with raised flag +1F4EA ; fully-qualified # 📪 closed mailbox with lowered flag +1F4EC ; fully-qualified # 📬 open mailbox with raised flag +1F4ED ; fully-qualified # 📭 open mailbox with lowered flag +1F4EE ; fully-qualified # 📮 postbox +1F5F3 FE0F ; fully-qualified # 🗳️ ballot box with ballot +1F5F3 ; non-fully-qualified # 🗳 ballot box with ballot + +# subgroup: writing +270F FE0F ; fully-qualified # ✏️ pencil +270F ; non-fully-qualified # ✏ pencil +2712 FE0F ; fully-qualified # ✒️ black nib +2712 ; non-fully-qualified # ✒ black nib +1F58B FE0F ; fully-qualified # 🖋️ fountain pen +1F58B ; non-fully-qualified # 🖋 fountain pen +1F58A FE0F ; fully-qualified # 🖊️ pen +1F58A ; non-fully-qualified # 🖊 pen +1F58C FE0F ; fully-qualified # 🖌️ paintbrush +1F58C ; non-fully-qualified # 🖌 paintbrush +1F58D FE0F ; fully-qualified # 🖍️ crayon +1F58D ; non-fully-qualified # 🖍 crayon +1F4DD ; fully-qualified # 📝 memo + +# subgroup: office +1F4BC ; fully-qualified # 💼 briefcase +1F4C1 ; fully-qualified # 📁 file folder +1F4C2 ; fully-qualified # 📂 open file folder +1F5C2 FE0F ; fully-qualified # 🗂️ card index dividers +1F5C2 ; non-fully-qualified # 🗂 card index dividers +1F4C5 ; fully-qualified # 📅 calendar +1F4C6 ; fully-qualified # 📆 tear-off calendar +1F5D2 FE0F ; fully-qualified # 🗒️ spiral notepad +1F5D2 ; non-fully-qualified # 🗒 spiral notepad +1F5D3 FE0F ; fully-qualified # 🗓️ spiral calendar +1F5D3 ; non-fully-qualified # 🗓 spiral calendar +1F4C7 ; fully-qualified # 📇 card index +1F4C8 ; fully-qualified # 📈 chart increasing +1F4C9 ; fully-qualified # 📉 chart decreasing +1F4CA ; fully-qualified # 📊 bar chart +1F4CB ; fully-qualified # 📋 clipboard +1F4CC ; fully-qualified # 📌 pushpin +1F4CD ; fully-qualified # 📍 round pushpin +1F4CE ; fully-qualified # 📎 paperclip +1F587 FE0F ; fully-qualified # 🖇️ linked paperclips +1F587 ; non-fully-qualified # 🖇 linked paperclips +1F4CF ; fully-qualified # 📏 straight ruler +1F4D0 ; fully-qualified # 📐 triangular ruler +2702 FE0F ; fully-qualified # ✂️ scissors +2702 ; non-fully-qualified # ✂ scissors +1F5C3 FE0F ; fully-qualified # 🗃️ card file box +1F5C3 ; non-fully-qualified # 🗃 card file box +1F5C4 FE0F ; fully-qualified # 🗄️ file cabinet +1F5C4 ; non-fully-qualified # 🗄 file cabinet +1F5D1 FE0F ; fully-qualified # 🗑️ wastebasket +1F5D1 ; non-fully-qualified # 🗑 wastebasket + +# subgroup: lock +1F512 ; fully-qualified # 🔒 locked +1F513 ; fully-qualified # 🔓 unlocked +1F50F ; fully-qualified # 🔏 locked with pen +1F510 ; fully-qualified # 🔐 locked with key +1F511 ; fully-qualified # 🔑 key +1F5DD FE0F ; fully-qualified # 🗝️ old key +1F5DD ; non-fully-qualified # 🗝 old key + +# subgroup: tool +1F528 ; fully-qualified # 🔨 hammer +26CF FE0F ; fully-qualified # ⛏️ pick +26CF ; non-fully-qualified # ⛏ pick +2692 FE0F ; fully-qualified # ⚒️ hammer and pick +2692 ; non-fully-qualified # ⚒ hammer and pick +1F6E0 FE0F ; fully-qualified # 🛠️ hammer and wrench +1F6E0 ; non-fully-qualified # 🛠 hammer and wrench +1F5E1 FE0F ; fully-qualified # 🗡️ dagger +1F5E1 ; non-fully-qualified # 🗡 dagger +2694 FE0F ; fully-qualified # ⚔️ crossed swords +2694 ; non-fully-qualified # ⚔ crossed swords +1F52B ; fully-qualified # 🔫 pistol +1F3F9 ; fully-qualified # 🏹 bow and arrow +1F6E1 FE0F ; fully-qualified # 🛡️ shield +1F6E1 ; non-fully-qualified # 🛡 shield +1F527 ; fully-qualified # 🔧 wrench +1F529 ; fully-qualified # 🔩 nut and bolt +2699 FE0F ; fully-qualified # ⚙️ gear +2699 ; non-fully-qualified # ⚙ gear +1F5DC FE0F ; fully-qualified # 🗜️ clamp +1F5DC ; non-fully-qualified # 🗜 clamp +2696 FE0F ; fully-qualified # ⚖️ balance scale +2696 ; non-fully-qualified # ⚖ balance scale +1F517 ; fully-qualified # 🔗 link +26D3 FE0F ; fully-qualified # ⛓️ chains +26D3 ; non-fully-qualified # ⛓ chains +1F9F0 ; fully-qualified # 🧰 toolbox +1F9F2 ; fully-qualified # 🧲 magnet + +# subgroup: science +2697 FE0F ; fully-qualified # ⚗️ alembic +2697 ; non-fully-qualified # ⚗ alembic +1F9EA ; fully-qualified # 🧪 test tube +1F9EB ; fully-qualified # 🧫 petri dish +1F9EC ; fully-qualified # 🧬 dna +1F52C ; fully-qualified # 🔬 microscope +1F52D ; fully-qualified # 🔭 telescope +1F4E1 ; fully-qualified # 📡 satellite antenna + +# subgroup: medical +1F489 ; fully-qualified # 💉 syringe +1F48A ; fully-qualified # 💊 pill + +# subgroup: household +1F6AA ; fully-qualified # 🚪 door +1F6CF FE0F ; fully-qualified # 🛏️ bed +1F6CF ; non-fully-qualified # 🛏 bed +1F6CB FE0F ; fully-qualified # 🛋️ couch and lamp +1F6CB ; non-fully-qualified # 🛋 couch and lamp +1F6BD ; fully-qualified # 🚽 toilet +1F6BF ; fully-qualified # 🚿 shower +1F6C1 ; fully-qualified # 🛁 bathtub +1F9F4 ; fully-qualified # 🧴 lotion bottle +1F9F7 ; fully-qualified # 🧷 safety pin +1F9F9 ; fully-qualified # 🧹 broom +1F9FA ; fully-qualified # 🧺 basket +1F9FB ; fully-qualified # 🧻 roll of paper +1F9FC ; fully-qualified # 🧼 soap +1F9FD ; fully-qualified # 🧽 sponge +1F9EF ; fully-qualified # 🧯 fire extinguisher +1F6D2 ; fully-qualified # 🛒 shopping cart + +# subgroup: other-object +1F6AC ; fully-qualified # 🚬 cigarette +26B0 FE0F ; fully-qualified # ⚰️ coffin +26B0 ; non-fully-qualified # ⚰ coffin +26B1 FE0F ; fully-qualified # ⚱️ funeral urn +26B1 ; non-fully-qualified # ⚱ funeral urn +1F5FF ; fully-qualified # 🗿 moai + +# Objects subtotal: 227 +# Objects subtotal: 227 w/o modifiers + +# group: Symbols + +# subgroup: transport-sign +1F3E7 ; fully-qualified # 🏧 ATM sign +1F6AE ; fully-qualified # 🚮 litter in bin sign +1F6B0 ; fully-qualified # 🚰 potable water +267F ; fully-qualified # ♿ wheelchair symbol +1F6B9 ; fully-qualified # 🚹 men’s room +1F6BA ; fully-qualified # 🚺 women’s room +1F6BB ; fully-qualified # 🚻 restroom +1F6BC ; fully-qualified # 🚼 baby symbol +1F6BE ; fully-qualified # 🚾 water closet +1F6C2 ; fully-qualified # 🛂 passport control +1F6C3 ; fully-qualified # 🛃 customs +1F6C4 ; fully-qualified # 🛄 baggage claim +1F6C5 ; fully-qualified # 🛅 left luggage + +# subgroup: warning +26A0 FE0F ; fully-qualified # ⚠️ warning +26A0 ; non-fully-qualified # ⚠ warning +1F6B8 ; fully-qualified # 🚸 children crossing +26D4 ; fully-qualified # ⛔ no entry +1F6AB ; fully-qualified # 🚫 prohibited +1F6B3 ; fully-qualified # 🚳 no bicycles +1F6AD ; fully-qualified # 🚭 no smoking +1F6AF ; fully-qualified # 🚯 no littering +1F6B1 ; fully-qualified # 🚱 non-potable water +1F6B7 ; fully-qualified # 🚷 no pedestrians +1F4F5 ; fully-qualified # 📵 no mobile phones +1F51E ; fully-qualified # 🔞 no one under eighteen +2622 FE0F ; fully-qualified # ☢️ radioactive +2622 ; non-fully-qualified # ☢ radioactive +2623 FE0F ; fully-qualified # ☣️ biohazard +2623 ; non-fully-qualified # ☣ biohazard + +# subgroup: arrow +2B06 FE0F ; fully-qualified # ⬆️ up arrow +2B06 ; non-fully-qualified # ⬆ up arrow +2197 FE0F ; fully-qualified # ↗️ up-right arrow +2197 ; non-fully-qualified # ↗ up-right arrow +27A1 FE0F ; fully-qualified # ➡️ right arrow +27A1 ; non-fully-qualified # ➡ right arrow +2198 FE0F ; fully-qualified # ↘️ down-right arrow +2198 ; non-fully-qualified # ↘ down-right arrow +2B07 FE0F ; fully-qualified # ⬇️ down arrow +2B07 ; non-fully-qualified # ⬇ down arrow +2199 FE0F ; fully-qualified # ↙️ down-left arrow +2199 ; non-fully-qualified # ↙ down-left arrow +2B05 FE0F ; fully-qualified # ⬅️ left arrow +2B05 ; non-fully-qualified # ⬅ left arrow +2196 FE0F ; fully-qualified # ↖️ up-left arrow +2196 ; non-fully-qualified # ↖ up-left arrow +2195 FE0F ; fully-qualified # ↕️ up-down arrow +2195 ; non-fully-qualified # ↕ up-down arrow +2194 FE0F ; fully-qualified # ↔️ left-right arrow +2194 ; non-fully-qualified # ↔ left-right arrow +21A9 FE0F ; fully-qualified # ↩️ right arrow curving left +21A9 ; non-fully-qualified # ↩ right arrow curving left +21AA FE0F ; fully-qualified # ↪️ left arrow curving right +21AA ; non-fully-qualified # ↪ left arrow curving right +2934 FE0F ; fully-qualified # ⤴️ right arrow curving up +2934 ; non-fully-qualified # ⤴ right arrow curving up +2935 FE0F ; fully-qualified # ⤵️ right arrow curving down +2935 ; non-fully-qualified # ⤵ right arrow curving down +1F503 ; fully-qualified # 🔃 clockwise vertical arrows +1F504 ; fully-qualified # 🔄 counterclockwise arrows button +1F519 ; fully-qualified # 🔙 BACK arrow +1F51A ; fully-qualified # 🔚 END arrow +1F51B ; fully-qualified # 🔛 ON! arrow +1F51C ; fully-qualified # 🔜 SOON arrow +1F51D ; fully-qualified # 🔝 TOP arrow + +# subgroup: religion +1F6D0 ; fully-qualified # 🛐 place of worship +269B FE0F ; fully-qualified # ⚛️ atom symbol +269B ; non-fully-qualified # ⚛ atom symbol +1F549 FE0F ; fully-qualified # 🕉️ om +1F549 ; non-fully-qualified # 🕉 om +2721 FE0F ; fully-qualified # ✡️ star of David +2721 ; non-fully-qualified # ✡ star of David +2638 FE0F ; fully-qualified # ☸️ wheel of dharma +2638 ; non-fully-qualified # ☸ wheel of dharma +262F FE0F ; fully-qualified # ☯️ yin yang +262F ; non-fully-qualified # ☯ yin yang +271D FE0F ; fully-qualified # ✝️ latin cross +271D ; non-fully-qualified # ✝ latin cross +2626 FE0F ; fully-qualified # ☦️ orthodox cross +2626 ; non-fully-qualified # ☦ orthodox cross +262A FE0F ; fully-qualified # ☪️ star and crescent +262A ; non-fully-qualified # ☪ star and crescent +262E FE0F ; fully-qualified # ☮️ peace symbol +262E ; non-fully-qualified # ☮ peace symbol +1F54E ; fully-qualified # 🕎 menorah +1F52F ; fully-qualified # 🔯 dotted six-pointed star + +# subgroup: zodiac +2648 ; fully-qualified # ♈ Aries +2649 ; fully-qualified # ♉ Taurus +264A ; fully-qualified # ♊ Gemini +264B ; fully-qualified # ♋ Cancer +264C ; fully-qualified # ♌ Leo +264D ; fully-qualified # ♍ Virgo +264E ; fully-qualified # ♎ Libra +264F ; fully-qualified # ♏ Scorpio +2650 ; fully-qualified # ♐ Sagittarius +2651 ; fully-qualified # ♑ Capricorn +2652 ; fully-qualified # ♒ Aquarius +2653 ; fully-qualified # ♓ Pisces +26CE ; fully-qualified # ⛎ Ophiuchus + +# subgroup: av-symbol +1F500 ; fully-qualified # 🔀 shuffle tracks button +1F501 ; fully-qualified # 🔁 repeat button +1F502 ; fully-qualified # 🔂 repeat single button +25B6 FE0F ; fully-qualified # ▶️ play button +25B6 ; non-fully-qualified # ▶ play button +23E9 ; fully-qualified # ⏩ fast-forward button +23ED FE0F ; fully-qualified # ⏭️ next track button +23ED ; non-fully-qualified # ⏭ next track button +23EF FE0F ; fully-qualified # ⏯️ play or pause button +23EF ; non-fully-qualified # ⏯ play or pause button +25C0 FE0F ; fully-qualified # ◀️ reverse button +25C0 ; non-fully-qualified # ◀ reverse button +23EA ; fully-qualified # ⏪ fast reverse button +23EE FE0F ; fully-qualified # ⏮️ last track button +23EE ; non-fully-qualified # ⏮ last track button +1F53C ; fully-qualified # 🔼 upwards button +23EB ; fully-qualified # ⏫ fast up button +1F53D ; fully-qualified # 🔽 downwards button +23EC ; fully-qualified # ⏬ fast down button +23F8 FE0F ; fully-qualified # ⏸️ pause button +23F8 ; non-fully-qualified # ⏸ pause button +23F9 FE0F ; fully-qualified # ⏹️ stop button +23F9 ; non-fully-qualified # ⏹ stop button +23FA FE0F ; fully-qualified # ⏺️ record button +23FA ; non-fully-qualified # ⏺ record button +23CF FE0F ; fully-qualified # ⏏️ eject button +23CF ; non-fully-qualified # ⏏ eject button +1F3A6 ; fully-qualified # 🎦 cinema +1F505 ; fully-qualified # 🔅 dim button +1F506 ; fully-qualified # 🔆 bright button +1F4F6 ; fully-qualified # 📶 antenna bars +1F4F3 ; fully-qualified # 📳 vibration mode +1F4F4 ; fully-qualified # 📴 mobile phone off + +# subgroup: other-symbol +2640 FE0F ; fully-qualified # ♀️ female sign +2640 ; non-fully-qualified # ♀ female sign +2642 FE0F ; fully-qualified # ♂️ male sign +2642 ; non-fully-qualified # ♂ male sign +2695 FE0F ; fully-qualified # ⚕️ medical symbol +2695 ; non-fully-qualified # ⚕ medical symbol +267E FE0F ; fully-qualified # ♾️ infinity +267E ; non-fully-qualified # ♾ infinity +267B FE0F ; fully-qualified # ♻️ recycling symbol +267B ; non-fully-qualified # ♻ recycling symbol +269C FE0F ; fully-qualified # ⚜️ fleur-de-lis +269C ; non-fully-qualified # ⚜ fleur-de-lis +1F531 ; fully-qualified # 🔱 trident emblem +1F4DB ; fully-qualified # 📛 name badge +1F530 ; fully-qualified # 🔰 Japanese symbol for beginner +2B55 ; fully-qualified # ⭕ heavy large circle +2705 ; fully-qualified # ✅ white heavy check mark +2611 FE0F ; fully-qualified # ☑️ ballot box with check +2611 ; non-fully-qualified # ☑ ballot box with check +2714 FE0F ; fully-qualified # ✔️ heavy check mark +2714 ; non-fully-qualified # ✔ heavy check mark +2716 FE0F ; fully-qualified # ✖️ heavy multiplication x +2716 ; non-fully-qualified # ✖ heavy multiplication x +274C ; fully-qualified # ❌ cross mark +274E ; fully-qualified # ❎ cross mark button +2795 ; fully-qualified # ➕ heavy plus sign +2796 ; fully-qualified # ➖ heavy minus sign +2797 ; fully-qualified # ➗ heavy division sign +27B0 ; fully-qualified # ➰ curly loop +27BF ; fully-qualified # ➿ double curly loop +303D FE0F ; fully-qualified # 〽️ part alternation mark +303D ; non-fully-qualified # 〽 part alternation mark +2733 FE0F ; fully-qualified # ✳️ eight-spoked asterisk +2733 ; non-fully-qualified # ✳ eight-spoked asterisk +2734 FE0F ; fully-qualified # ✴️ eight-pointed star +2734 ; non-fully-qualified # ✴ eight-pointed star +2747 FE0F ; fully-qualified # ❇️ sparkle +2747 ; non-fully-qualified # ❇ sparkle +203C FE0F ; fully-qualified # ‼️ double exclamation mark +203C ; non-fully-qualified # ‼ double exclamation mark +2049 FE0F ; fully-qualified # ⁉️ exclamation question mark +2049 ; non-fully-qualified # ⁉ exclamation question mark +2753 ; fully-qualified # ❓ question mark +2754 ; fully-qualified # ❔ white question mark +2755 ; fully-qualified # ❕ white exclamation mark +2757 ; fully-qualified # ❗ exclamation mark +3030 FE0F ; fully-qualified # 〰️ wavy dash +3030 ; non-fully-qualified # 〰 wavy dash +00A9 FE0F ; fully-qualified # ©️ copyright +00A9 ; non-fully-qualified # © copyright +00AE FE0F ; fully-qualified # ®️ registered +00AE ; non-fully-qualified # ® registered +2122 FE0F ; fully-qualified # ™️ trade mark +2122 ; non-fully-qualified # ™ trade mark + +# subgroup: keycap +0023 FE0F 20E3 ; fully-qualified # #️⃣ keycap: # +0023 20E3 ; non-fully-qualified # #⃣ keycap: # +002A FE0F 20E3 ; fully-qualified # *️⃣ keycap: * +002A 20E3 ; non-fully-qualified # *⃣ keycap: * +0030 FE0F 20E3 ; fully-qualified # 0️⃣ keycap: 0 +0030 20E3 ; non-fully-qualified # 0⃣ keycap: 0 +0031 FE0F 20E3 ; fully-qualified # 1️⃣ keycap: 1 +0031 20E3 ; non-fully-qualified # 1⃣ keycap: 1 +0032 FE0F 20E3 ; fully-qualified # 2️⃣ keycap: 2 +0032 20E3 ; non-fully-qualified # 2⃣ keycap: 2 +0033 FE0F 20E3 ; fully-qualified # 3️⃣ keycap: 3 +0033 20E3 ; non-fully-qualified # 3⃣ keycap: 3 +0034 FE0F 20E3 ; fully-qualified # 4️⃣ keycap: 4 +0034 20E3 ; non-fully-qualified # 4⃣ keycap: 4 +0035 FE0F 20E3 ; fully-qualified # 5️⃣ keycap: 5 +0035 20E3 ; non-fully-qualified # 5⃣ keycap: 5 +0036 FE0F 20E3 ; fully-qualified # 6️⃣ keycap: 6 +0036 20E3 ; non-fully-qualified # 6⃣ keycap: 6 +0037 FE0F 20E3 ; fully-qualified # 7️⃣ keycap: 7 +0037 20E3 ; non-fully-qualified # 7⃣ keycap: 7 +0038 FE0F 20E3 ; fully-qualified # 8️⃣ keycap: 8 +0038 20E3 ; non-fully-qualified # 8⃣ keycap: 8 +0039 FE0F 20E3 ; fully-qualified # 9️⃣ keycap: 9 +0039 20E3 ; non-fully-qualified # 9⃣ keycap: 9 +1F51F ; fully-qualified # 🔟 keycap: 10 + +# subgroup: alphanum +1F4AF ; fully-qualified # 💯 hundred points +1F520 ; fully-qualified # 🔠 input latin uppercase +1F521 ; fully-qualified # 🔡 input latin lowercase +1F522 ; fully-qualified # 🔢 input numbers +1F523 ; fully-qualified # 🔣 input symbols +1F524 ; fully-qualified # 🔤 input latin letters +1F170 FE0F ; fully-qualified # 🅰️ A button (blood type) +1F170 ; non-fully-qualified # 🅰 A button (blood type) +1F18E ; fully-qualified # 🆎 AB button (blood type) +1F171 FE0F ; fully-qualified # 🅱️ B button (blood type) +1F171 ; non-fully-qualified # 🅱 B button (blood type) +1F191 ; fully-qualified # 🆑 CL button +1F192 ; fully-qualified # 🆒 COOL button +1F193 ; fully-qualified # 🆓 FREE button +2139 FE0F ; fully-qualified # ℹ️ information +2139 ; non-fully-qualified # ℹ information +1F194 ; fully-qualified # 🆔 ID button +24C2 FE0F ; fully-qualified # Ⓜ️ circled M +24C2 ; non-fully-qualified # Ⓜ circled M +1F195 ; fully-qualified # 🆕 NEW button +1F196 ; fully-qualified # 🆖 NG button +1F17E FE0F ; fully-qualified # 🅾️ O button (blood type) +1F17E ; non-fully-qualified # 🅾 O button (blood type) +1F197 ; fully-qualified # 🆗 OK button +1F17F FE0F ; fully-qualified # 🅿️ P button +1F17F ; non-fully-qualified # 🅿 P button +1F198 ; fully-qualified # 🆘 SOS button +1F199 ; fully-qualified # 🆙 UP! button +1F19A ; fully-qualified # 🆚 VS button +1F201 ; fully-qualified # 🈁 Japanese “here” button +1F202 FE0F ; fully-qualified # 🈂️ Japanese “service charge” button +1F202 ; non-fully-qualified # 🈂 Japanese “service charge” button +1F237 FE0F ; fully-qualified # 🈷️ Japanese “monthly amount” button +1F237 ; non-fully-qualified # 🈷 Japanese “monthly amount” button +1F236 ; fully-qualified # 🈶 Japanese “not free of charge” button +1F22F ; fully-qualified # 🈯 Japanese “reserved” button +1F250 ; fully-qualified # 🉐 Japanese “bargain” button +1F239 ; fully-qualified # 🈹 Japanese “discount” button +1F21A ; fully-qualified # 🈚 Japanese “free of charge” button +1F232 ; fully-qualified # 🈲 Japanese “prohibited” button +1F251 ; fully-qualified # 🉑 Japanese “acceptable” button +1F238 ; fully-qualified # 🈸 Japanese “application” button +1F234 ; fully-qualified # 🈴 Japanese “passing grade” button +1F233 ; fully-qualified # 🈳 Japanese “vacancy” button +3297 FE0F ; fully-qualified # ㊗️ Japanese “congratulations” button +3297 ; non-fully-qualified # ㊗ Japanese “congratulations” button +3299 FE0F ; fully-qualified # ㊙️ Japanese “secret” button +3299 ; non-fully-qualified # ㊙ Japanese “secret” button +1F23A ; fully-qualified # 🈺 Japanese “open for business” button +1F235 ; fully-qualified # 🈵 Japanese “no vacancy” button + +# subgroup: geometric +25AA FE0F ; fully-qualified # ▪️ black small square +25AA ; non-fully-qualified # ▪ black small square +25AB FE0F ; fully-qualified # ▫️ white small square +25AB ; non-fully-qualified # ▫ white small square +25FB FE0F ; fully-qualified # ◻️ white medium square +25FB ; non-fully-qualified # ◻ white medium square +25FC FE0F ; fully-qualified # ◼️ black medium square +25FC ; non-fully-qualified # ◼ black medium square +25FD ; fully-qualified # ◽ white medium-small square +25FE ; fully-qualified # ◾ black medium-small square +2B1B ; fully-qualified # ⬛ black large square +2B1C ; fully-qualified # ⬜ white large square +1F536 ; fully-qualified # 🔶 large orange diamond +1F537 ; fully-qualified # 🔷 large blue diamond +1F538 ; fully-qualified # 🔸 small orange diamond +1F539 ; fully-qualified # 🔹 small blue diamond +1F53A ; fully-qualified # 🔺 red triangle pointed up +1F53B ; fully-qualified # 🔻 red triangle pointed down +1F4A0 ; fully-qualified # 💠 diamond with a dot +1F518 ; fully-qualified # 🔘 radio button +1F532 ; fully-qualified # 🔲 black square button +1F533 ; fully-qualified # 🔳 white square button +26AA ; fully-qualified # ⚪ white circle +26AB ; fully-qualified # ⚫ black circle +1F534 ; fully-qualified # 🔴 red circle +1F535 ; fully-qualified # 🔵 blue circle + +# Symbols subtotal: 286 +# Symbols subtotal: 286 w/o modifiers + +# group: Flags + +# subgroup: flag +1F3C1 ; fully-qualified # 🏁 chequered flag +1F6A9 ; fully-qualified # 🚩 triangular flag +1F38C ; fully-qualified # 🎌 crossed flags +1F3F4 ; fully-qualified # 🏴 black flag +1F3F3 FE0F ; fully-qualified # 🏳️ white flag +1F3F3 ; non-fully-qualified # 🏳 white flag +1F3F3 FE0F 200D 1F308 ; fully-qualified # 🏳️‍🌈 rainbow flag +1F3F3 200D 1F308 ; non-fully-qualified # 🏳‍🌈 rainbow flag +1F3F4 200D 2620 FE0F ; fully-qualified # 🏴‍☠️ pirate flag +1F3F4 200D 2620 ; non-fully-qualified # 🏴‍☠ pirate flag + +# subgroup: country-flag +1F1E6 1F1E8 ; fully-qualified # 🇦🇨 Ascension Island +1F1E6 1F1E9 ; fully-qualified # 🇦🇩 Andorra +1F1E6 1F1EA ; fully-qualified # 🇦🇪 United Arab Emirates +1F1E6 1F1EB ; fully-qualified # 🇦🇫 Afghanistan +1F1E6 1F1EC ; fully-qualified # 🇦🇬 Antigua & Barbuda +1F1E6 1F1EE ; fully-qualified # 🇦🇮 Anguilla +1F1E6 1F1F1 ; fully-qualified # 🇦🇱 Albania +1F1E6 1F1F2 ; fully-qualified # 🇦🇲 Armenia +1F1E6 1F1F4 ; fully-qualified # 🇦🇴 Angola +1F1E6 1F1F6 ; fully-qualified # 🇦🇶 Antarctica +1F1E6 1F1F7 ; fully-qualified # 🇦🇷 Argentina +1F1E6 1F1F8 ; fully-qualified # 🇦🇸 American Samoa +1F1E6 1F1F9 ; fully-qualified # 🇦🇹 Austria +1F1E6 1F1FA ; fully-qualified # 🇦🇺 Australia +1F1E6 1F1FC ; fully-qualified # 🇦🇼 Aruba +1F1E6 1F1FD ; fully-qualified # 🇦🇽 Åland Islands +1F1E6 1F1FF ; fully-qualified # 🇦🇿 Azerbaijan +1F1E7 1F1E6 ; fully-qualified # 🇧🇦 Bosnia & Herzegovina +1F1E7 1F1E7 ; fully-qualified # 🇧🇧 Barbados +1F1E7 1F1E9 ; fully-qualified # 🇧🇩 Bangladesh +1F1E7 1F1EA ; fully-qualified # 🇧🇪 Belgium +1F1E7 1F1EB ; fully-qualified # 🇧🇫 Burkina Faso +1F1E7 1F1EC ; fully-qualified # 🇧🇬 Bulgaria +1F1E7 1F1ED ; fully-qualified # 🇧🇭 Bahrain +1F1E7 1F1EE ; fully-qualified # 🇧🇮 Burundi +1F1E7 1F1EF ; fully-qualified # 🇧🇯 Benin +1F1E7 1F1F1 ; fully-qualified # 🇧🇱 St. Barthélemy +1F1E7 1F1F2 ; fully-qualified # 🇧🇲 Bermuda +1F1E7 1F1F3 ; fully-qualified # 🇧🇳 Brunei +1F1E7 1F1F4 ; fully-qualified # 🇧🇴 Bolivia +1F1E7 1F1F6 ; fully-qualified # 🇧🇶 Caribbean Netherlands +1F1E7 1F1F7 ; fully-qualified # 🇧🇷 Brazil +1F1E7 1F1F8 ; fully-qualified # 🇧🇸 Bahamas +1F1E7 1F1F9 ; fully-qualified # 🇧🇹 Bhutan +1F1E7 1F1FB ; fully-qualified # 🇧🇻 Bouvet Island +1F1E7 1F1FC ; fully-qualified # 🇧🇼 Botswana +1F1E7 1F1FE ; fully-qualified # 🇧🇾 Belarus +1F1E7 1F1FF ; fully-qualified # 🇧🇿 Belize +1F1E8 1F1E6 ; fully-qualified # 🇨🇦 Canada +1F1E8 1F1E8 ; fully-qualified # 🇨🇨 Cocos (Keeling) Islands +1F1E8 1F1E9 ; fully-qualified # 🇨🇩 Congo - Kinshasa +1F1E8 1F1EB ; fully-qualified # 🇨🇫 Central African Republic +1F1E8 1F1EC ; fully-qualified # 🇨🇬 Congo - Brazzaville +1F1E8 1F1ED ; fully-qualified # 🇨🇭 Switzerland +1F1E8 1F1EE ; fully-qualified # 🇨🇮 Côte d’Ivoire +1F1E8 1F1F0 ; fully-qualified # 🇨🇰 Cook Islands +1F1E8 1F1F1 ; fully-qualified # 🇨🇱 Chile +1F1E8 1F1F2 ; fully-qualified # 🇨🇲 Cameroon +1F1E8 1F1F3 ; fully-qualified # 🇨🇳 China +1F1E8 1F1F4 ; fully-qualified # 🇨🇴 Colombia +1F1E8 1F1F5 ; fully-qualified # 🇨🇵 Clipperton Island +1F1E8 1F1F7 ; fully-qualified # 🇨🇷 Costa Rica +1F1E8 1F1FA ; fully-qualified # 🇨🇺 Cuba +1F1E8 1F1FB ; fully-qualified # 🇨🇻 Cape Verde +1F1E8 1F1FC ; fully-qualified # 🇨🇼 Curaçao +1F1E8 1F1FD ; fully-qualified # 🇨🇽 Christmas Island +1F1E8 1F1FE ; fully-qualified # 🇨🇾 Cyprus +1F1E8 1F1FF ; fully-qualified # 🇨🇿 Czechia +1F1E9 1F1EA ; fully-qualified # 🇩🇪 Germany +1F1E9 1F1EC ; fully-qualified # 🇩🇬 Diego Garcia +1F1E9 1F1EF ; fully-qualified # 🇩🇯 Djibouti +1F1E9 1F1F0 ; fully-qualified # 🇩🇰 Denmark +1F1E9 1F1F2 ; fully-qualified # 🇩🇲 Dominica +1F1E9 1F1F4 ; fully-qualified # 🇩🇴 Dominican Republic +1F1E9 1F1FF ; fully-qualified # 🇩🇿 Algeria +1F1EA 1F1E6 ; fully-qualified # 🇪🇦 Ceuta & Melilla +1F1EA 1F1E8 ; fully-qualified # 🇪🇨 Ecuador +1F1EA 1F1EA ; fully-qualified # 🇪🇪 Estonia +1F1EA 1F1EC ; fully-qualified # 🇪🇬 Egypt +1F1EA 1F1ED ; fully-qualified # 🇪🇭 Western Sahara +1F1EA 1F1F7 ; fully-qualified # 🇪🇷 Eritrea +1F1EA 1F1F8 ; fully-qualified # 🇪🇸 Spain +1F1EA 1F1F9 ; fully-qualified # 🇪🇹 Ethiopia +1F1EA 1F1FA ; fully-qualified # 🇪🇺 European Union +1F1EB 1F1EE ; fully-qualified # 🇫🇮 Finland +1F1EB 1F1EF ; fully-qualified # 🇫🇯 Fiji +1F1EB 1F1F0 ; fully-qualified # 🇫🇰 Falkland Islands +1F1EB 1F1F2 ; fully-qualified # 🇫🇲 Micronesia +1F1EB 1F1F4 ; fully-qualified # 🇫🇴 Faroe Islands +1F1EB 1F1F7 ; fully-qualified # 🇫🇷 France +1F1EC 1F1E6 ; fully-qualified # 🇬🇦 Gabon +1F1EC 1F1E7 ; fully-qualified # 🇬🇧 United Kingdom +1F1EC 1F1E9 ; fully-qualified # 🇬🇩 Grenada +1F1EC 1F1EA ; fully-qualified # 🇬🇪 Georgia +1F1EC 1F1EB ; fully-qualified # 🇬🇫 French Guiana +1F1EC 1F1EC ; fully-qualified # 🇬🇬 Guernsey +1F1EC 1F1ED ; fully-qualified # 🇬🇭 Ghana +1F1EC 1F1EE ; fully-qualified # 🇬🇮 Gibraltar +1F1EC 1F1F1 ; fully-qualified # 🇬🇱 Greenland +1F1EC 1F1F2 ; fully-qualified # 🇬🇲 Gambia +1F1EC 1F1F3 ; fully-qualified # 🇬🇳 Guinea +1F1EC 1F1F5 ; fully-qualified # 🇬🇵 Guadeloupe +1F1EC 1F1F6 ; fully-qualified # 🇬🇶 Equatorial Guinea +1F1EC 1F1F7 ; fully-qualified # 🇬🇷 Greece +1F1EC 1F1F8 ; fully-qualified # 🇬🇸 South Georgia & South Sandwich Islands +1F1EC 1F1F9 ; fully-qualified # 🇬🇹 Guatemala +1F1EC 1F1FA ; fully-qualified # 🇬🇺 Guam +1F1EC 1F1FC ; fully-qualified # 🇬🇼 Guinea-Bissau +1F1EC 1F1FE ; fully-qualified # 🇬🇾 Guyana +1F1ED 1F1F0 ; fully-qualified # 🇭🇰 Hong Kong SAR China +1F1ED 1F1F2 ; fully-qualified # 🇭🇲 Heard & McDonald Islands +1F1ED 1F1F3 ; fully-qualified # 🇭🇳 Honduras +1F1ED 1F1F7 ; fully-qualified # 🇭🇷 Croatia +1F1ED 1F1F9 ; fully-qualified # 🇭🇹 Haiti +1F1ED 1F1FA ; fully-qualified # 🇭🇺 Hungary +1F1EE 1F1E8 ; fully-qualified # 🇮🇨 Canary Islands +1F1EE 1F1E9 ; fully-qualified # 🇮🇩 Indonesia +1F1EE 1F1EA ; fully-qualified # 🇮🇪 Ireland +1F1EE 1F1F1 ; fully-qualified # 🇮🇱 Israel +1F1EE 1F1F2 ; fully-qualified # 🇮🇲 Isle of Man +1F1EE 1F1F3 ; fully-qualified # 🇮🇳 India +1F1EE 1F1F4 ; fully-qualified # 🇮🇴 British Indian Ocean Territory +1F1EE 1F1F6 ; fully-qualified # 🇮🇶 Iraq +1F1EE 1F1F7 ; fully-qualified # 🇮🇷 Iran +1F1EE 1F1F8 ; fully-qualified # 🇮🇸 Iceland +1F1EE 1F1F9 ; fully-qualified # 🇮🇹 Italy +1F1EF 1F1EA ; fully-qualified # 🇯🇪 Jersey +1F1EF 1F1F2 ; fully-qualified # 🇯🇲 Jamaica +1F1EF 1F1F4 ; fully-qualified # 🇯🇴 Jordan +1F1EF 1F1F5 ; fully-qualified # 🇯🇵 Japan +1F1F0 1F1EA ; fully-qualified # 🇰🇪 Kenya +1F1F0 1F1EC ; fully-qualified # 🇰🇬 Kyrgyzstan +1F1F0 1F1ED ; fully-qualified # 🇰🇭 Cambodia +1F1F0 1F1EE ; fully-qualified # 🇰🇮 Kiribati +1F1F0 1F1F2 ; fully-qualified # 🇰🇲 Comoros +1F1F0 1F1F3 ; fully-qualified # 🇰🇳 St. Kitts & Nevis +1F1F0 1F1F5 ; fully-qualified # 🇰🇵 North Korea +1F1F0 1F1F7 ; fully-qualified # 🇰🇷 South Korea +1F1F0 1F1FC ; fully-qualified # 🇰🇼 Kuwait +1F1F0 1F1FE ; fully-qualified # 🇰🇾 Cayman Islands +1F1F0 1F1FF ; fully-qualified # 🇰🇿 Kazakhstan +1F1F1 1F1E6 ; fully-qualified # 🇱🇦 Laos +1F1F1 1F1E7 ; fully-qualified # 🇱🇧 Lebanon +1F1F1 1F1E8 ; fully-qualified # 🇱🇨 St. Lucia +1F1F1 1F1EE ; fully-qualified # 🇱🇮 Liechtenstein +1F1F1 1F1F0 ; fully-qualified # 🇱🇰 Sri Lanka +1F1F1 1F1F7 ; fully-qualified # 🇱🇷 Liberia +1F1F1 1F1F8 ; fully-qualified # 🇱🇸 Lesotho +1F1F1 1F1F9 ; fully-qualified # 🇱🇹 Lithuania +1F1F1 1F1FA ; fully-qualified # 🇱🇺 Luxembourg +1F1F1 1F1FB ; fully-qualified # 🇱🇻 Latvia +1F1F1 1F1FE ; fully-qualified # 🇱🇾 Libya +1F1F2 1F1E6 ; fully-qualified # 🇲🇦 Morocco +1F1F2 1F1E8 ; fully-qualified # 🇲🇨 Monaco +1F1F2 1F1E9 ; fully-qualified # 🇲🇩 Moldova +1F1F2 1F1EA ; fully-qualified # 🇲🇪 Montenegro +1F1F2 1F1EB ; fully-qualified # 🇲🇫 St. Martin +1F1F2 1F1EC ; fully-qualified # 🇲🇬 Madagascar +1F1F2 1F1ED ; fully-qualified # 🇲🇭 Marshall Islands +1F1F2 1F1F0 ; fully-qualified # 🇲🇰 Macedonia +1F1F2 1F1F1 ; fully-qualified # 🇲🇱 Mali +1F1F2 1F1F2 ; fully-qualified # 🇲🇲 Myanmar (Burma) +1F1F2 1F1F3 ; fully-qualified # 🇲🇳 Mongolia +1F1F2 1F1F4 ; fully-qualified # 🇲🇴 Macau SAR China +1F1F2 1F1F5 ; fully-qualified # 🇲🇵 Northern Mariana Islands +1F1F2 1F1F6 ; fully-qualified # 🇲🇶 Martinique +1F1F2 1F1F7 ; fully-qualified # 🇲🇷 Mauritania +1F1F2 1F1F8 ; fully-qualified # 🇲🇸 Montserrat +1F1F2 1F1F9 ; fully-qualified # 🇲🇹 Malta +1F1F2 1F1FA ; fully-qualified # 🇲🇺 Mauritius +1F1F2 1F1FB ; fully-qualified # 🇲🇻 Maldives +1F1F2 1F1FC ; fully-qualified # 🇲🇼 Malawi +1F1F2 1F1FD ; fully-qualified # 🇲🇽 Mexico +1F1F2 1F1FE ; fully-qualified # 🇲🇾 Malaysia +1F1F2 1F1FF ; fully-qualified # 🇲🇿 Mozambique +1F1F3 1F1E6 ; fully-qualified # 🇳🇦 Namibia +1F1F3 1F1E8 ; fully-qualified # 🇳🇨 New Caledonia +1F1F3 1F1EA ; fully-qualified # 🇳🇪 Niger +1F1F3 1F1EB ; fully-qualified # 🇳🇫 Norfolk Island +1F1F3 1F1EC ; fully-qualified # 🇳🇬 Nigeria +1F1F3 1F1EE ; fully-qualified # 🇳🇮 Nicaragua +1F1F3 1F1F1 ; fully-qualified # 🇳🇱 Netherlands +1F1F3 1F1F4 ; fully-qualified # 🇳🇴 Norway +1F1F3 1F1F5 ; fully-qualified # 🇳🇵 Nepal +1F1F3 1F1F7 ; fully-qualified # 🇳🇷 Nauru +1F1F3 1F1FA ; fully-qualified # 🇳🇺 Niue +1F1F3 1F1FF ; fully-qualified # 🇳🇿 New Zealand +1F1F4 1F1F2 ; fully-qualified # 🇴🇲 Oman +1F1F5 1F1E6 ; fully-qualified # 🇵🇦 Panama +1F1F5 1F1EA ; fully-qualified # 🇵🇪 Peru +1F1F5 1F1EB ; fully-qualified # 🇵🇫 French Polynesia +1F1F5 1F1EC ; fully-qualified # 🇵🇬 Papua New Guinea +1F1F5 1F1ED ; fully-qualified # 🇵🇭 Philippines +1F1F5 1F1F0 ; fully-qualified # 🇵🇰 Pakistan +1F1F5 1F1F1 ; fully-qualified # 🇵🇱 Poland +1F1F5 1F1F2 ; fully-qualified # 🇵🇲 St. Pierre & Miquelon +1F1F5 1F1F3 ; fully-qualified # 🇵🇳 Pitcairn Islands +1F1F5 1F1F7 ; fully-qualified # 🇵🇷 Puerto Rico +1F1F5 1F1F8 ; fully-qualified # 🇵🇸 Palestinian Territories +1F1F5 1F1F9 ; fully-qualified # 🇵🇹 Portugal +1F1F5 1F1FC ; fully-qualified # 🇵🇼 Palau +1F1F5 1F1FE ; fully-qualified # 🇵🇾 Paraguay +1F1F6 1F1E6 ; fully-qualified # 🇶🇦 Qatar +1F1F7 1F1EA ; fully-qualified # 🇷🇪 Réunion +1F1F7 1F1F4 ; fully-qualified # 🇷🇴 Romania +1F1F7 1F1F8 ; fully-qualified # 🇷🇸 Serbia +1F1F7 1F1FA ; fully-qualified # 🇷🇺 Russia +1F1F7 1F1FC ; fully-qualified # 🇷🇼 Rwanda +1F1F8 1F1E6 ; fully-qualified # 🇸🇦 Saudi Arabia +1F1F8 1F1E7 ; fully-qualified # 🇸🇧 Solomon Islands +1F1F8 1F1E8 ; fully-qualified # 🇸🇨 Seychelles +1F1F8 1F1E9 ; fully-qualified # 🇸🇩 Sudan +1F1F8 1F1EA ; fully-qualified # 🇸🇪 Sweden +1F1F8 1F1EC ; fully-qualified # 🇸🇬 Singapore +1F1F8 1F1ED ; fully-qualified # 🇸🇭 St. Helena +1F1F8 1F1EE ; fully-qualified # 🇸🇮 Slovenia +1F1F8 1F1EF ; fully-qualified # 🇸🇯 Svalbard & Jan Mayen +1F1F8 1F1F0 ; fully-qualified # 🇸🇰 Slovakia +1F1F8 1F1F1 ; fully-qualified # 🇸🇱 Sierra Leone +1F1F8 1F1F2 ; fully-qualified # 🇸🇲 San Marino +1F1F8 1F1F3 ; fully-qualified # 🇸🇳 Senegal +1F1F8 1F1F4 ; fully-qualified # 🇸🇴 Somalia +1F1F8 1F1F7 ; fully-qualified # 🇸🇷 Suriname +1F1F8 1F1F8 ; fully-qualified # 🇸🇸 South Sudan +1F1F8 1F1F9 ; fully-qualified # 🇸🇹 São Tomé & Príncipe +1F1F8 1F1FB ; fully-qualified # 🇸🇻 El Salvador +1F1F8 1F1FD ; fully-qualified # 🇸🇽 Sint Maarten +1F1F8 1F1FE ; fully-qualified # 🇸🇾 Syria +1F1F8 1F1FF ; fully-qualified # 🇸🇿 Swaziland +1F1F9 1F1E6 ; fully-qualified # 🇹🇦 Tristan da Cunha +1F1F9 1F1E8 ; fully-qualified # 🇹🇨 Turks & Caicos Islands +1F1F9 1F1E9 ; fully-qualified # 🇹🇩 Chad +1F1F9 1F1EB ; fully-qualified # 🇹🇫 French Southern Territories +1F1F9 1F1EC ; fully-qualified # 🇹🇬 Togo +1F1F9 1F1ED ; fully-qualified # 🇹🇭 Thailand +1F1F9 1F1EF ; fully-qualified # 🇹🇯 Tajikistan +1F1F9 1F1F0 ; fully-qualified # 🇹🇰 Tokelau +1F1F9 1F1F1 ; fully-qualified # 🇹🇱 Timor-Leste +1F1F9 1F1F2 ; fully-qualified # 🇹🇲 Turkmenistan +1F1F9 1F1F3 ; fully-qualified # 🇹🇳 Tunisia +1F1F9 1F1F4 ; fully-qualified # 🇹🇴 Tonga +1F1F9 1F1F7 ; fully-qualified # 🇹🇷 Turkey +1F1F9 1F1F9 ; fully-qualified # 🇹🇹 Trinidad & Tobago +1F1F9 1F1FB ; fully-qualified # 🇹🇻 Tuvalu +1F1F9 1F1FC ; fully-qualified # 🇹🇼 Taiwan +1F1F9 1F1FF ; fully-qualified # 🇹🇿 Tanzania +1F1FA 1F1E6 ; fully-qualified # 🇺🇦 Ukraine +1F1FA 1F1EC ; fully-qualified # 🇺🇬 Uganda +1F1FA 1F1F2 ; fully-qualified # 🇺🇲 U.S. Outlying Islands +1F1FA 1F1F3 ; fully-qualified # 🇺🇳 United Nations +1F1FA 1F1F8 ; fully-qualified # 🇺🇸 United States +1F1FA 1F1FE ; fully-qualified # 🇺🇾 Uruguay +1F1FA 1F1FF ; fully-qualified # 🇺🇿 Uzbekistan +1F1FB 1F1E6 ; fully-qualified # 🇻🇦 Vatican City +1F1FB 1F1E8 ; fully-qualified # 🇻🇨 St. Vincent & Grenadines +1F1FB 1F1EA ; fully-qualified # 🇻🇪 Venezuela +1F1FB 1F1EC ; fully-qualified # 🇻🇬 British Virgin Islands +1F1FB 1F1EE ; fully-qualified # 🇻🇮 U.S. Virgin Islands +1F1FB 1F1F3 ; fully-qualified # 🇻🇳 Vietnam +1F1FB 1F1FA ; fully-qualified # 🇻🇺 Vanuatu +1F1FC 1F1EB ; fully-qualified # 🇼🇫 Wallis & Futuna +1F1FC 1F1F8 ; fully-qualified # 🇼🇸 Samoa +1F1FD 1F1F0 ; fully-qualified # 🇽🇰 Kosovo +1F1FE 1F1EA ; fully-qualified # 🇾🇪 Yemen +1F1FE 1F1F9 ; fully-qualified # 🇾🇹 Mayotte +1F1FF 1F1E6 ; fully-qualified # 🇿🇦 South Africa +1F1FF 1F1F2 ; fully-qualified # 🇿🇲 Zambia +1F1FF 1F1FC ; fully-qualified # 🇿🇼 Zimbabwe + +# subgroup: subdivision-flag +1F3F4 E0067 E0062 E0065 E006E E0067 E007F ; fully-qualified # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 England +1F3F4 E0067 E0062 E0073 E0063 E0074 E007F ; fully-qualified # 🏴󠁧󠁢󠁳󠁣󠁴󠁿 Scotland +1F3F4 E0067 E0062 E0077 E006C E0073 E007F ; fully-qualified # 🏴󠁧󠁢󠁷󠁬󠁳󠁿 Wales + +# Flags subtotal: 271 +# Flags subtotal: 271 w/o modifiers + +#EOF \ No newline at end of file diff --git a/pkgs/characters/third_party/Wikipedia/License CC BY-SA 3.0.txt b/pkgs/characters/third_party/Wikipedia/License CC BY-SA 3.0.txt new file mode 100644 index 00000000..d6e56c1e --- /dev/null +++ b/pkgs/characters/third_party/Wikipedia/License CC BY-SA 3.0.txt @@ -0,0 +1,69 @@ + +Creative Commons Attribution-ShareAlike 3.0 Unported License +https://creativecommons.org/licenses/by-sa/3.0/ + +License +------- + +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions +"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. +"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. +"Creative Commons Compatible License" means a license that is listed at https://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. +"Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. +"License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. +"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. +"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. +"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. +"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. +"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. +"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. +2. Fair Dealing Rights +Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant +Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + +to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; +to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; +to Distribute and Publicly Perform the Work including as incorporated in Collections; and, +to Distribute and Publicly Perform Adaptations. +For the avoidance of doubt: +Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; +Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, +Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions +The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + +You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. +You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. +If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. +Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. +5. Representations, Warranties and Disclaimer +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability +EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination +This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. +Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. +8. Miscellaneous +Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. +Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. +If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. +No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. +This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. +The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. +Creative Commons Notice +Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + +Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License. + +Creative Commons may be contacted at https://creativecommons.org/. \ No newline at end of file diff --git a/pkgs/characters/third_party/Wikipedia/hangul.txt b/pkgs/characters/third_party/Wikipedia/hangul.txt new file mode 100644 index 00000000..5cb22258 --- /dev/null +++ b/pkgs/characters/third_party/Wikipedia/hangul.txt @@ -0,0 +1,488 @@ +한글 +위키백과, 우리 모두의 백과사전. +둘러보기로 가기검색하러 가기 + 이 문서에는 옛 한글이 포함되어 있습니다. +관련 글꼴이 설치되지 않은 경우, 일부 문자가 깨진 글자로 표시될 수 있습니다. 옛 한글 도움말을 참고하여 볼 수 있습니다. + 다른 뜻에 대해서는 한글 (동음이의) 문서를 참조하십시오. + 서적에 대해서는 훈민정음 문서를, 언어에 대해서는 한국어 문서를 참조하십시오. +한글 · 조선글 + + +한글의 구조 +한글의 구조 +원래 이름 훈민정음(訓民正音) +유형 음소문자 +표기 언어 한국어, 제주어, 찌아찌아어 +사용 시기 1443년 ~ 현재 +창제자 세종 +ISO 15924 Hang +한국어의 표기법 +문자 +한글 +한자 +한글 점자 +한글전용 +국한문혼용 +이두 +향찰 +구결 +로마자 표기법 +국어의 로마자 표기법 +매큔-라이샤워 표기법 +예일 로마자 표기법 +ISO/TR 11941 +김복문 로마자 표기법 +양병선 로마자 표기법 +21세기 로마자 표기법 +음소문자의 역사 +원시 시나이 문자 (기원전 18 ~ 15세기) + +우가리트 문자 (기원전 15세기) +원시 가나안 문자 (기원전 14세기) +페니키아 문자 (기원전 11세기) +고대 히브리 문자 (기원전 10세기) +사마리아 문자 (기원전 6세기) +아람 문자 (기원전 8세기) +브라흐미 문자와 인도 문자 (기원전 6세기) +티베트 문자 (7세기) +크메르 문자/자와 문자 (9세기) +히브리 문자 (기원전 3세기) +시리아 문자 (기원전 2세기) +나바테아 문자 (기원전 2세기) +아랍 문자 (4세기) +타나 문자 (18세기) +소그드 문자 (기원전 4세기) +돌궐 문자 (5세기) +로바쉬 문자 (12세기) +위구르 문자 (8세기) +몽골 문자 (13세기) +만주 문자 (16세기) +팔라비 문자 (기원전 3세기) +아베스타 문자 (4세기) +그리스 문자 (기원전 9세기) +에트루리아 문자 (기원전 8세기) +로마자 (기원전 7세기) +룬 문자 (2세기) +고트 문자 (3세기) +콥트 문자 (300년) +아르메니아 문자 (405년) +조지아 문자 (5세기) +글라골 문자 (862년) +키릴 문자 (10세기) +아부르 문자 (1372년) +고대 히스파니아 문자 (기원전 7세기) +남아랍 문자 금석문 (기원전 9세기) +그으즈 문자 (기원전 5 ~ 6세기) +메로이트 문자 (기원전 3세기) +오검 문자 (4세기) +한글 1443년 +캐나다 문자 1840년 +주음부호 1913년 +전체 분류 +v • d • e • h +한글은 발음기관과 하늘, 땅, 사람을 본따 고안된 음소문자로, 닿소리 14자에 홀소리 10자 총 24자로 구성되어 있다. "나랏말이 중국과 달라" 문제를 느낀 조선 세종이 한국어를 표기하기 위하여 1443년 창제, 1446년 반포하였다. 낱자가 음가만 표기하기 때문에 갈래로는 음소문자에 속하나, 네모 칸에 초성, 중성, 종성을 이루는 자모음을 한데 모아 쓰는 방식 때문에 음절문자의 특성도 일부 지닌다. 원래 글자 수는 닿소리 17자에 홀소리 11자 총 28자였으나 이후 4자가 소실, 24자만 쓰이게 되었다. 대한민국과 조선민주주의인민공화국과 옌볜 조선족 자치주에서는 공용 문자로, 인도네시아 부톤 섬에서는 찌아찌아어의 보조 문자로 채택되었다. 북한에서는 조선글(朝鮮-)이라 한다. + +세계에서 유일하게 만든 사람,만든 이유,만든 날짜를 아는 글자이다. + + +목차 +1 명칭 +2 역사 +2.1 창제 +2.2 창제 논란 +2.3 조선 +2.4 근대 이후 +2.5 현대 이후 +3 창제원리 +4 구조 +4.1 낱자 +4.2 모아쓰기 +4.3 표기 가능한 글자 수와 소리나는 음절 개수 +5 한글의 유래 +6 한글에 관한 여러 이설 +6.1 파스파 문자 기원설 +6.2 기타 한글과 유사하다고 주장하는 문자 +6.2.1 가림토와 신대 문자 +6.2.2 구자라트 문자 +6.3 다른 언어에서의 한글 사용 +7 오해와 사실 +8 한글 자모일람 +8.1 방언 한글 자모 +8.2 고문 한글 자모 +8.3 복합원음와 보음 +9 관련 항목 +10 각주 +11 참고 문헌 +12 읽을거리 +13 외부 링크 +명칭 +창제 때는 백성(民)을 가르치는(訓) 바른(正) 소리(音), 훈민정음(訓民正音)이라 하였고, 줄여서 정음(正音)이라고도 했다. + +'한글'이라는 이름은 주시경이 ‘큰’, ‘바른’, ‘하나’를 뜻하는 고유어 ‘한’을 차용하여 지었다. 하지만 주시경의 의도한 뜻이 무엇이었는지는 명확히 밝혀진 바가 없다. + +한글 창제 당시에는 백성을 가르치는 바른소리라는 뜻으로 훈민정음이라 하였고, 줄여서 정음(正音)이라고도 하였다. 조선시대에는 지식층으로부터 경시되며, 본래의 이름으로 쓰지 않고 막연히 언문(諺文)[1], 언서(諺書)[2], 반절(反切)[3] 로 불리거나, 혹은 암클(여성들이 배우는 글), 아햇글(어린이들이 배우는 글)이라고 불렀다고 알려져 있다. (단, 암클, 아햇글이라는 표현은 그 출처가 불분명하다.) 1894년 갑오개혁 이후 국서(國書), 국문(國文)이라고 불렀고 혹은 조선글로 부르기도 하였는데 이것은 한국의 글이라는 보통 이름일 뿐이며, 고유명사로 한글이라는 이름이 널리 쓰이기 전에는 가갸, 정음 등으로 불렀다. + +처음 한글이라는 이름이 사용된 것에대한 명확한 기록은 없다. 다만 1913년 3월 23일 주시경이 ‘배달말글몯음(조선어문회, 朝鮮言文會)[4]’를 ‘한글모’로 바꾼 바 있고[5], 같은 해 9월 최남선의 출판사 ‘신문관(新文館)’에서 창간한 어린이 잡지 《아이들 보이》의 끝에 가로글씨로 '한글풀이’라 한 것이 있고[6], 1914년 4월에 ‘조선어강습원(朝鮮語講習院)’이 ‘한글배곧’으로 이름을 바꾼 것 등으로 볼 때 1913년 무렵 주시경이 처음으로 사용한 것으로 보이며, 1927년에는 조선어학회 회원들이 《한글》이라는 잡지를 매달 발간하였다. 한글이라는 명칭이 일반화된 것은 1928년 11월 11일 조선어연구회에서 가갸날을 한글날로 고쳐 부른 때부터라고 한다. + +현재 한글의 명칭을 대한민국에서는 한글로, 조선민주주의인민공화국에서는 조선어자모로 부르는데[7], 2001년 2월 중국 옌지에서 열린 ‘제5차 코리안 컴퓨터 처리 국제 학술 대회(ICCKL 2001)’에서는 남과 북, 해외 동포 학자들이 국제 표준화 기구(ISO)에 등록하기 위한 명칭으로 ‘정음(Jeong'eum)’을 쓰기로 합의하였다. + +다른 나라에서는 한글(Hangul/Hangeul)이라는 이름을 많이 쓰지만, 중국에서는 조선 자모(중국어: 朝鮮字母, 병음: Cháoxiǎn zìmǔ 차오셴 쯔무[*])와 같은 이름을 쓴다. 일본에서는 한글은 물론 한국어를 ‘한구루(한글)(ハングル)’로 부르기도 하는데, 이는 NHK 방송에서 한국어 강좌를 설립시에 대한민국의 ‘한국어’와 조선민주주의인민공화국의 ‘조선어’ 사이에서 중립적인 위치를 지키기 위해 한국어 강좌 명칭으로 '한글강좌'를 사용하여 많은 일본인들이 이를 보고 한글의 뜻을 한국어로 오해한 것이다. + +한글이라는 이름은 본디 문자의 이름이지만, 관용적으로는 한국어를 한글로 적은 것이라는 의미로 책이나 소프트웨어, 게임 등의 한국어 번역 작업을 한글화라 하고 번역본을 한글판이라 부르기도 한다. 그리고 한글 이름, 한글 지명처럼 고유어라는 의미로 쓰이기도 한다. 하지만 표준국어대사전에서는 두 의미 모두 등재되지 않았으며, 한국어화, 한국어판이 맞는 표현이다. + +역사 + +《훈민정음 언해》의 서두 +창제 +한국은 삼국시대부터 이두(吏讀)와 구결(口訣)을 써 왔는데, 구결은 본래 한문에 구두(句讀)를 떼는 데 쓰기 위한 일종의 보조적 편법에 지나지 않았고, 이두는 비록 한국어를 표시함에 틀림이 없었지만 한국어를 자유자재로 적을 수 없었으며, 그 표기법의 일원성(一元性)이 없어서 설사 이두로써 족하다 해도 한자교육이 선행되어야 했다. 이러한 문자생활의 불편은 한자를 쓰지 않고도, 배우기 쉽고 쓰기 쉬운 새로운 글자의 출현이 절실히 요구되었다. + +이러한 사조가 세종때에 특히 두드러져 드디어 1443년 음력 12월에 문자혁명의 결실을 보게 되었다. 훈민정음 창제의 취지에 관하여는 세종이 손수 저술한 《훈민정음》 예의편(例義篇) 첫머리에 잘 나타나 있는데, 첫째 한국어는 중국말과 다르므로 한자를 가지고는 잘 표기할 수 없으며, 둘째 우리의 고유한 글자가 없어서 문자생활의 불편이 매우 심하고, 셋째 이런 뜻에서 새로 글자를 만들었으니 일상생활에 편하게 쓰라는 것이다. + +‘훈민정음’은 “백성을 가르치는 바른소리”라는 뜻으로[8], 세종의 어제 서문과 정인지 서(序)에서 분명히 밝히고 있는바, 당시까지 한문 의존에 따른 어려움을 근본적으로 극복하기 위해 한국어의 고유문자로서 창제되었다. + +한편, 훈민정음 창제 후 5년 뒤에 《동국정운(東國正韻)》이 간행되는데, 당시 조선에서 통용되던 한자음을 중국어 원음으로 교정하기 위한 책으로서 이것의 발음 표기에 훈민정음이 사용되고 있다. 따라서, 세종의 훈민정음 창제가 한자 및 한문의 폐지를 목적한 것은 아니라고 보이며, 훈민정음의 활용 범위가 상당히 넓었음을 짐작할 수 있다. 훈민정음에 대하여 반대하는 신하들이 있었는데 대표적으로 최만리는 상소를 올려 반대하였다. 그러나 세종은 "경이 운서를 아는가? 사성칠음에 자모가 몇이나 있는가? 만일 짐이 운서를 바로잡지 아니하면 누가 이를 바로잡을 것인가?" 라고 말하였다. + +처음 만들었을 때는 낱자 28글자와 성조를 나타내는 기호(방점)가 따로 있었으나, 지금은 ㅿ, ㆁ, ㆆ, ㆍ 네 글자와 성조 기호(방점)가 사라져서 24글자가 되었다. (제주도를 비롯한 몇 곳에서는 아직도 ㆍ의 발음이 남아 있다.) + +그 뒤로 몇 백 년에 걸쳐, 식자층은 주로 한글보다는 한문 위주의 문자 생활을 했지만 한자를 배울 수 없었던 백성과 여자들은 서로 주고 받는 편지나 계약서 등에 한글을 썼고, 궁궐에서 여자끼리 주고 받는 문서에 한글을 쓰기도 하였다. + +창제 논란 +오늘날 한글이라 불리는 글이 창제되었다는 사실이 세상에 알려진 것은 세종대왕 25년인 1443년이다. 창제 당시에 한글은 '훈민정음'이라 불렸으며 1446년 음력 9월 초에는 《훈민정음》(통칭 '해례본')이 책으로 엮어졌다. 이 사실은 정인지(鄭麟趾)가 쓴 〈서(序)〉로 확인된다.[9] + +지금까지 논란이 되고 있는 부분은 세종대왕이 홀로 글을 창제했는지, 집현전 학자들의 도움을 받았는지, 아니면 세종대왕의 명을 받아 집현전 학자들이 글을 창제했는지가 문제이다. 세종실록(世宗實錄)은 훈민정음을 세종대왕이 친히 만들었다고 기록하고 있으며[10], 누구의 도움을 받았다는 기록은 없다.[11] + +다시 말하면 시월 상친제언문이십팔자(是月 上親制諺文二十八字, 세종 25년, 12월 30일)에서 ‘상친제(上親制)’란 세종이 직접 한글을 만들었다는 뜻인데 '세종실록' 안에는 다른 업적에 관해서는 "친제"라는 말이 없었지만, 훈민정음(한글)에 관해서는 이렇게 확실하게 적어 놓았다는 것이다. 또한, 집현전 학자였던 정인지가 집필한 훈민정음 해례본의 서문 중에도 세종대왕이 직접 한글을 창제했다는 내용이 있다.[12] + +그러나 성현(成俔, 1439년~1504년)의 《용재총화(慵齋叢話)》 제7권에서 세종이 언문청을 세워 신숙주, 성삼문 등에게 글을 짓도록 명을 내렸다는 주장이 나왔다. 주시경은 《대한국어문법》(1906년)에서 세종이 집현전 학자들의 도움을 받아 한글을 창제했다고 썼다. 그리하여 한글 창제에 집현전 학자들이 관여했다는 설이 우세하게 되었으나, 이기문을 비롯한 학자들은 기록에 나타난 당시 정황을 볼 때 세종이 한글을 홀로 창제한 것이 아니라고 볼 이유가 없다고 주장하고 있다. 한글 창제 후 세종은 표음주의 표기가 일반적인 당대의 표기법과는 달리 형태주의 표기를 주로 활용하고 동국정운 같은 책을 편찬한 예에서 보듯이 국어와 중국어의 전반에 걸쳐 음운학 및 언어학에 깊은 조예와 지식을 보여 주었다. 집현전 학자들은 한글 창제 후 정음청에서 한글을 사용한 편찬 사업에만 관여했다는 것이다.[13] + +조선 +처음에 ‘훈민정음’으로 반포된 한글은 조선시대에는 '언문'이라고 불렸다. 이것은 《세종실록》에서 '상친제언문이십팔자(上親製諺文二十八字)'라고 한 것에 연유하는데 한자를 제외한 문자는 ‘언문’이라고 불렀기 때문이다. 여성들이 많이 한글을 썼기 때문에 ‘암클’ 등으로 낮추어 불리기도 하였으나, 궁중과 일부양반층, 백성들 사이에서도 사용되었다. + +1445년(세종 27) 4월에 훈민정음을 처음으로 사용하여 악장(樂章)인 《용비어천가》를 편찬하고, 1447년(세종 29) 5월에 간행하였다. 목판본 10권 5책 모두 125장에 달하는 서사시로서, 한글로 엮어진 책으로는 한국 최초의 것이 된다. 세종은 “어리석은 남녀노소 모두가 쉽게 깨달을 수 있도록” 《(세종실록》, 세종 26년) 《삼강행실도》를 훈민정음으로 번역하도록 했으며, 훈민정음이 반포된 뒤에는 일부 관리를 뽑을 때 훈민정음을 시험하도록 했다. 이후로 민간과 조정의 일부 문서에서 훈민정음을 써 왔다. + +이러한 한글 보급 정책에 따라 한글은 빠르게 퍼져 반 세기 만인 1500년대 지방의 노비 수준의 신분인 도공에게까지 쓰이게 되었다.[14] + +연산군은 1504년(연산군 10년) 훈민정음을 쓰거나 가르치는 것을 금했지만, 조정안에서 훈민정음을 쓰는 것을 금하지는 않았으며, 훈민정음을 아는 사람을 일부러 궁궐에 등용하기도 했다고 전한다. + +율곡 이이가 《대학》에 구결을 달고 언해한 《대학율곡언해》는 1749년에 간행되었다.[15] + +조선 중기 이후로 가사 문학, 한글 소설 등 한글로 창작된 문학이 유행하였고, 서간에서도 한글/정음이 종종 사용되었다. + +근대 이후 +1894년(조선 고종 31년) 갑오개혁에서 마침내 한글을 ‘국문’(國文 나랏글)이라고 하여, 1894년 11월 21일 칙령 제1호 공문식(公文式) 제14조[16] 및 1895년 5월 8일 칙령 제86호 공문식 제9조[17] 에서 법령을 모두 국문을 바탕으로 삼고 한문 번역을 붙이거나 국한문을 섞어 쓰도록 하였다. 1905년 지석영이 상소한 6개 항목의 〈신정국문(新訂國文)〉이 광무황제의 재가를 얻어 한글 맞춤법으로서 공포되었으나, 그 내용의 결점이 지적되면서 1906년 5월에 이능화(李能和)가 〈국문일정의견(國文一定意見)〉을 제출하는 등 논란이 되자, 당시 학부대신 이재곤(李載崑)의 건의로 1907년 7월 8일 대한제국 학부에 통일된 문자 체계를 확립하기 위한 국어 연구 기관으로 '국문연구소(國文硏究所)'가 설치되었는데, 국문연구소의 연구 성과는 1909년 12월 28일 학부에 제출한 보고서로서 〈국문연구의정안(國文硏究議定案)〉 및 어윤적, 이종일(李鍾一), 이억(李億), 윤돈구(尹敦求), 송기용(宋綺用), 유필근(柳苾根), 지석영, 이민응(李敏應)의 8위원 연구안으로 완결되었다. + + +한글과 한문이 혼용되어 쓰인 매일신보 1944년 기사 +한편, 민간에서는 1906년 주시경이 《대한국어문법(大韓國語文法)》을 저술하여 1908년에 《국어문전음학(國語文典音學)》으로 출판하였으며, 1908년 최광옥(崔光玉)의 《대한문전(大韓文典)》, 1909년 유길준(兪吉濬)의 《대한문전(大韓文典)》, 김희상(金熙祥)의 《초등국어어전(初等國語語典)》, 1910년 주시경의 《국어문법(國語文法)》등이 출간되고, 이후에도 1911년 김희상의 《조선어전(朝鮮語典)》, 1913년 남궁억(南宮檍)의 〈조선문법(朝鮮文法)〉, 이규영(李奎榮)의 〈말듬〉, 1925년 이상춘(李常春)의 《조선어문법(朝鮮語文法)》 등으로 이어지면서, 1937년 최현배의 《우리말본》으로 집대성된다. + +이와 함께, 조선어학회와 같은 모임에서 꾸준히 애쓴 덕에 조금씩 한국어의 표준 문자로 힘을 얻게 되어 누구나 쓸 수 있게끔, 널리 퍼지게 되었다. '한글'이라는 이름은 주시경이 지은 것이며 조선어학회가 이 이름을 널리 알리기 시작한 것도 이 즈음이다. 일제강점기를 거쳐 광복을 맞이한 다음에는 남북한 모두 공문서와 법전에 한글을 쓰게 되었고, 끝내 조선어를 받아적는 글자로 자리잡게 되었다. + +현대 이후 +한국에서는 한글전용법이 시행되어 한자의 사용이 줄어들면서 1990년대 그 사용이 절정을 이루었다.[18] 이후 정부차원에서의 영어우대정책으로 인해 한글의 사용이 점차 줄고 있다는 지적이 있다.[19] + +2009년에는 문자가 없어 의사 소통에 곤란을 겪었던 인도네시아의 소수 민족인 찌아찌아족이 자신들의 언어 찌아찌아어의 표기 문자로 시범적으로 한글을 채택, 도입하였다. 그러나 주 정부의 반대와 소수만 배우는 문제 등으로 인해서 이 방법은 사용되지 않고 있다. 그리고 2012년에 솔로몬 제도에 있는 일부 주가 모어 표기문자로 한글을 도입하였다.[20] + +창제원리 +『훈민정음 해례본(訓民正音 解例本)』을 바탕으로 한글과 음양오행의 관계를 기록하였다. + +가. 모음은 음양의 원리를 기본으로 만들어졌다. + +기본 모음'ㆍ, ㅡ, ㅣ'를 보면 'ㆍ'(아래아)는 양(陽)인 하늘(天)을 본 떠 만들고, 'ㅡ'는 음(陰)인 땅(地)을 본 떠 만들었으며 'ㅣ'는 음과 양의 중간자인 인간(人)의 형상을 본 떠 만들었다. 천지인(天地人)은 단군사상에서 유래한 것으로 우주를 구성하는 주요한 요소인 하늘(·)과 땅(ㅡ), 사람(ㅣ)을 나타낸다.[21] +『훈민정음 해례본』에 따르면 'ㅏ,ㅑ, ㅗ, ㅛ'는 'ㆍ'(아래아) 계열의 글자이다. +'ㆍ'(아래아)의 속성은 양이다. 양의 특성은 위로의 상승, 바깥으로의 확장이다. 따라서 점을 위, 바깥 쪽에다 찍은 것. + +'ㅓ, ㅕ, ㅜ, ㅠ'는 그 반대로 'ㅡ' 계열의 글자이기 때문에 음의 속성을 따라, 하강, 수축의 뜻으로 점을 안쪽, 아래로 찍은 것. +나. 자음은 오행을 바탕으로 만들어졌다. + +『훈민정음 해례본』에선 각 방위와 발음기관을 연결시키고, 해당 발음기관에서 나는 소리 또한 방위와 연관시키고 있다. 방위는 또 계절과 연결이 되므로, 결국 소리는 계절과 연결된다. +(소리=방위=계절, 소리=계절) 계절은 봄, 여름, 늦여름, 가을, 겨울 순이므로, 소리 역시 어금닛소리(ㄱ, 봄), 혓소리(ㄴ, 여름), 입술소리(ㅁ, 늦여름), 잇소리(ㅅ, 가을), 목소리(ㅇ,겨울) 순으로 배열한다. + +『훈민정음 해례본』에서 기본 자음을 ㄱ,ㄴ,ㅁ,ㅅ,ㅇ,ㄹ 순으로 배열한 것은 오행 원리와 연관이 있다. +자음과 오행의 관계 정리표 +속성 계절 방위 음성 음계 +목(木, 나무) 춘(春, 봄) 동(東, 동녘) 어금닛소리(ㄱ,ㅋ,ㄲ) 각(角) +화(火, 불) 하(夏, 여름) 남, (南, 남녘) 혓소리(ㄴ,ㄷ,ㅌ,ㄸ) 치(徵) +토(土, 흙) 계하 (季夏, 늦여름) 중앙(中, 無定) 입술소리(ㅁ,ㅂ,ㅍ,ㅃ,) 궁(宮) +금(金, 쇠) 추(秋, 가을) 서(西, 서녘) 잇소리(ㅅ,ㅆ,ㅈ,ㅊ,ㅉ) 상(商) +수(水, 물) 동(冬, 겨울) 북(北, 북녘) 목소리(ㅇ, ㅎ) 우(羽) +구조 +한글은 낱소리 문자에 속하며, 낱자하나는 낱소리하나를 나타낸다. 낱소리는 닿소리(자음)와 홀소리(모음)로 이루어진다. + +한 소리마디는 첫소리(초성), 가운뎃소리(중성), 끝소리(종성)의 낱소리 세 벌로 이루어지는데, 첫소리와 끝소리에는 닿소리를 쓰고 가운뎃소리에는 홀소리를 쓴다. 한글은 낱자를 하나씩 풀어쓰지 않고 하나의 글자 마디로 모아쓰는 특징을 가지고 있다. + +낱자 +이 부분의 본문은 한글 낱자입니다. +처음 한글 낱자는 닿소리 17자와 홀소리 11자로 총 28가지였다. 오늘날 한글 낱자에 쓰이지 않는 없어진 글자를 소실자(消失字)라 하는데, 닿소리 ㅿ(반시옷), ㆁ(옛이응), ㆆ(여린히읗)과 홀소리 ㆍ(아래아)의 네 글자이다. 이로써 현대 한글은 모두 24자로서 닿소리 14자와 홀소리 10자로 되었다. 낱자의 이름과 순서는 다음과 같다. + +훈민정음 창제 당시에는 낱자 자체의 칭호법(稱號法)은 표시되어 있지 않았고, 중종 때 최세진의 《훈몽자회》에 이르러 각 낱자의 명칭이 붙게 되었다. 하지만 기역, 디귿, 시옷은 이두식 한자어 명칭을 그대로 사용하여 일제시대의 언문 철자법을 거쳐 지금까지 그대로 사용하게 되었다.[22] + +각 자모에 대한 소릿값을 살펴보면, 첫소리 아·설·순·치·후(牙舌脣齒喉)와 반설·반치(反舌半齒)의 7음으로 구별하였고, 모음은 따로 구별하지 않았다. 이러한 7음과 각 자모의 독특한 배열 순서는 중국 운서(韻書)를 그대로 모방한 것이라고 여겨진다. 그리고 실제로 쓸 적에는 각 낱자를 독립시켜 소리 나는 차례대로 적지 않고, 반드시 닿소리와 홀소리를 어울려 쓰기로 하였으니, 곧 <· ㅡ ㅗ ㅜ ㅛ ㅠ >는 자음 아래에 쓰고, <ㅏ ㅓ ㅑ ㅕ>는 자음 오른쪽에 붙여 쓰기로 하였다. 즉 음절문자(音節文字)로 하되, 그 모양이 네모꼴이 되도록 하였으니, 이는 한자의 꼴에 영향을 받았기 때문이라 여겨진다. + +닿소리 +ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ +기윽/기역 니은 디읃/디귿 리을 미음 비읍 시읏/시옷 이응 지읒 치읓 키읔 티읕 피읖 히읗 +홀소리 +ㅏ ㅑ ㅓ ㅕ ㅗ ㅛ ㅜ ㅠ ㅡ ㅣ +아 야 어 여 오 요 우 유 으 이 +이 스물네 가지를 바탕으로 하는데 모두 홑소리(단음)이고, 홑소리로 나타낼 수 없는 겹소리(복음)는 두세 홑소리를 어울러서 적되, 그 이름과 순서는 다음과 같다. + +겹닿소리 +ㄲ ㄸ ㅃ ㅆ ㅉ +된기윽/쌍기역 된디읃/쌍디귿 된비읍/쌍비읍 된시읏/쌍시옷 된지읒/쌍지읒 +겹홀소리 +ㅐ ㅒ ㅔ ㅖ ㅘ ㅙ ㅚ ㅝ ㅞ ㅟ ㅢ +애 얘 에 예 와 왜 외 워 웨 위 의 +소실자 닿소리 +ㅿ ㆁ ㆆ +반시옷 옛이응 여린히읗 +유성 치경 마찰음 연구개 비음 성문 파열음 +반시옷은 알파벳의 z에 해당하는 음가를 가진 것으로 추정되며 여린히읗은 1을 강하게 발음 시 혀로 목구멍을 막으며 발음된다. + +현대 한글에서는 끝소리가 없으면 받침을 쓰지 않고 끝소리가 있을 때에만 홑받침 또는 겹받침을 쓰는데, 홑받침에는 모든 닿소리가 쓰이며, 겹받침에는 홑홀소리 아래에만 놓이는 겹닿소리 ㄲ(쌍기역)과 ㅆ(쌍시옷)과 따로 이름이 없지만 모든 홀소리 아래에 놓일 수 있는 겹받침으로만 쓰이는 겹닿소리가 있다. 모든 받침의 소릿값은 끝소리 규칙에 따라 8갈래로 모인다.[23] + +겹받침 +ㄲ ㅆ ㄳ ㄵ ㄶ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅄ +받침의 소릿값 +ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅇ +사전에 올릴 때에는 첫소리 > 가운뎃소리 > 끝소리의 순으로 정렬하되, 그 정렬 순서는 다음과 같다. + +정렬 순서 +첫소리 ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ +가운뎃소리 ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ +끝소리 ( ) ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ +모아쓰기 +한글의 모든 낱자는 한데 모아쓰도록 하고 있으며, 닿소리를 가장 먼저 쓰고 그 오른쪽이나 아래에 홀소리를 적으며, 모든 받침은 닿소리와 홀소리 밑에 놓인다. 따라서, 글자 마디로 모아쓸 때는 다음과 같은 틀에 맞추어 쓴다. + +중성이 ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ, ㅖ, ㅣ일 때는 중성을 초성의 오른쪽에 붙여 쓴다. +초성 중성 +초성 중성 +종성 +중성이 ㅗ, ㅛ, ㅜ, ㅠ, ㅡ일 때는 중성을 아래쪽에 붙여 쓴다. 종성이 있으면 그 아래 붙여 쓴다. +초성 +중성 +초성 +중성 +종성 +중성이 ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ와 같이 아래쪽에 붙이는 모음과 오른쪽에 붙이는 모음의 복합일 때는 다음과 같이 아래쪽에 먼저, 그 다음 오른쪽에 붙여 쓴다. 종성은 마찬가지로 아래쪽에 붙여 쓴다. +초성 중성 +중성 +초성 중성 +중성 +종성 +표기 가능한 글자 수와 소리나는 음절 개수 +현대 한글은 낱자를 엮어 11,172(첫소리 19 × 가운뎃소리 21 × (끝소리 27 + 끝소리 없음 1))글자 마디를 쓸 수 있다. 11,172자 중 399자는 무받침 글자이며 10,773자는 받침 글자이다. 사용 빈도는 KS X 1001 완성형 한글 코드에 선별된 2,350글자가 상위 99.9%로 알려져 있다.[출처 필요] + +어문 규정에 의하여, 현대 한국어 표준어에서 실제 사용하는 음절은 이보다 적다. 한국어의 소리는 첫소리+가운뎃소리(+끝소리)로 이루어지는데, 표준어에서 첫소리에는 19가지 닿소리가 모두 쓰이되 첫소리에 놓인 ㅇ은 소리 나지 않는다. 끝소리는 7종성법에 따라 7갈래로 모이며 끝소리가 없는 것까지 더하여 모두 8갈래이므로 현대 한국어의 발음은 첫소리 19 × 가운뎃소리 21 × 끝소리 8 = 3,192가지 소리가 된다. + +그런데, 표준 발음법을 따르면 구개음 ㅈ, ㅉ, ㅊ 뒤의 이중 모음 ㅑ, ㅒ, ㅕ, ㅖ, ㅛ, ㅠ는 단모음 ㅏ, ㅐ, ㅓ, ㅔ, ㅗ, ㅜ로 소리나므로 첫소리 3 × 가운뎃소리 6 × 끝소리 8 = 144소리가 빠지고, 아울러 소리나는 첫소리 (ㅇ이 아닌 첫소리 뒤에 오는)를 얹은 가운뎃소리 [ㅢ]는 ㄴ을 제외하면(ㄴ의 경우는 구개음화에 따른 다른 음소로 인정하고 있다.) [ㅣ]로 소리나므로(한글 맞춤법 제9항 및 표준 발음법 제5항 단서 3) 첫소리 17 × 가운뎃소리 1 × 끝소리 8 = 136 소리가 다시 빠진다. 따라서, 현재 한국어 표준어에서 실제 사용하는 소리마디는 3192 − 144 − 136 = 2,912가지가 된다. + +옛 한글의 경우, 2009년 10월 1일 발표된 유니코드 5.2에 포함되어 있는 옛 한글 자모의 총 개수는 초성 124개, 중성 95개, 종성 137개와 채움 문자 2개(초성, 중성)이다. 방점 2개는 현재 유니코드에 등록돼 있다. 방점을 제외하고, 총 조합 가능한 글자 마디 개수를 구한다면 다음과 같다. + +조합 가능한 한글 코드(125×96×138): 1,656,000개 +완성된 한글(124×95×138): 1,625,640개 +조합 가능한 비표준 한글: 총 16,989개 +채움 문자로만 구성된 한글: 1개 +초성, 종성만 있는 비표준 한글(124×137): 16,988개 +∴ 표준 한글 총 개수(조합 가능한 한글 코드 − 비표준 한글): 1,639,011개 +한글의 유래 +《세종실록》에 최만리가 훈민정음이 “고전(古篆)을 본땄다(倣)”라고 말한 기록이 있는데,[24][25] 이 말이 모호하기 때문에 여러 가지 해석이 있다. ‘고전’의 해석에는 한자의 전자체(篆字體)라는 설과 당시에 ‘몽고전자’(蒙古篆字)로도 불렸던 파스파 문자를 말하는 것이라는 설이 있다. 《환단고기》를 인정하는 사람은 이것이 가림토를 일컫는 말이라고 주장한다. 또한 ‘본땄다’(倣)에 대해서도 그 생김새만이 닮았을 뿐이라는 풀이와 만드는 데에 참고를 했다, 또는 모두 본땄다 등의 여러 가지 해석이 있다. + +1940년 《훈민정음》(해례본)이 발견되기 이전에는 훈민정음의 창제 원리를 설명한 문헌이 존재하지 않아 그 유래에 대한 여러 이론이 제기되었다. 그 이전에 제기되었던 주요 학설은 다음과 같다. + +발음 기관 상형설: 발음 기관을 상형했다는 설. 신경준(申景濬), 홍양호(洪良浩), 최현배 +전자 기원설: 한문 비석 등에 쓰이는 전자체에서 유래되었다는 설. 황윤석(黃胤錫), 이능화 +몽골 문자 기원설: 몽골문자(파스파)에서 유래했다는 설. 이익(李翼), 유희(柳僖), 게리 레드야드(Gari Ledyard) +범자(梵字) 기원설: 불경과 함께 고대 인도 문자가 전해져, 그것에서 유래했다는 설. 성현, 이수광(李晬光) +고대 문자 전래설: 훈민정음 이전 민간에서 전해지던 고대문자로부터 유래했다는 설. +창문 상형설: 한옥의 창살 모양에서 유래했다는 설. 에카르트(P. A. Eckardt) +서장(西藏)글자·오행(五行)이론.[26] +《훈민정음》(해례본)에는 자음과 모음 각각에 대한 창제 원리가 상세히 설명되어 기본 자음 5자는 발음 기관의 모양을 추상화하고, 기본 모음 3자는 천지인 3재를 상징하여 창제되었고 다른 글자들이 획을 덧붙이는 방식으로 만들어졌다고 분명히 밝힘으로써, 여러 이설들을 잠재우고 정설이 되었다. + +한글에 관한 여러 이설 +파스파 문자 기원설 + +(위) ’파스파 문자 ꡂ [k], ꡊ [t], ꡎ [p], ꡛ [s], ꡙ [l]와 그에 대응하는 것으로 여겨지는 한글 문자 ㄱ [k], ㄷ [t], ㅂ [p], ㅈ [ts], ㄹ [l]. +(아래) 중국어를 표현하기 위한 파스파 문자 ꡯ w, ꡤ v, ꡰ f의 파생과 그의 변형 문자 ꡜ [h] +(왼쪽) 밑에 기호를 덧붙인 ꡧ [w][27] 와 유사한 중국어 표기용 한글 ㅱ w/m, ㅸ v, ㆄ f. 이 한글들은 기본자 ㅁ과 ㅇ에서 유래했다. +1966년 컬럼비아 대학의 게리 레드야드 교수는 그의 논문에서 훈민정음에서 언급한 고전(古篆)을 몽고전자(蒙古篆字)로 해석하며 한글이 파스파 문자에서 그 기하학적 모양을 차용했다고 주장했다.[28] 레드야드는 그 근거로 당시 조선의 궁에는 파스파 문자가 쓰이고 있었고, 집현전 학자 일부는 파스파 문자를 잘 알고 있었다는 점을 들며, 한글의 기본 자음은 ㄱ, ㄷ, ㅂ, ㅈ, ㄹ라고 제시했다. + +레드야드에 따르면 이 다섯개의 글자는 그 모양이 단순화되어 파열음을 위한 가획을 할 수 있는 여지(ㅋ, ㅌ, ㅍ, ㅊ)를 만들어 냈다고 한다. 그는 전통적인 설명과는 다르게 비파열음 ㄴ, ㅁ, ㅅ은 기본자 ㄷ, ㅂ, ㅈ의 윗부분이 지워진 형태라 주장했다. 그는 ㅁ이 ㅂ의 윗부분을 지워서 파생되기는 쉽지만, ㅁ에서 ㅂ의 모양을 이끌어 내는 것은 불분명하다고 주장했다. 즉 다른 파열음과 같은 방법으로 파생되었다면 ㅂ의 모양은 ㅁ위에 한 획이 더해진 형태(ㄱ-ㅋ, ㄷ-ㅌ, ㅈ-ㅊ의 관계처럼)여야 한다는 것이다. + +ㆁ자의 유래에 대한 설명도 기존과 다르다. 많은 중국 단어는 ng으로 시작하는데 세종대왕 집권 시기 즈음의 중국에서는 앞에 나오는 ng는 [ŋ]으로 발음하거나 발음하지 않았으며, 이런 단어가 한국어로 차용되었을 경우에도 이는 묵음이었다. 또한 논리적으로 추론 가능한 ng음의 모양은 ㄱ에서 가로 획을 제한 모양인데, 이는 모음 ㅣ과 구분하기 힘들었을 것이다. 따라서 세종대왕은 가로 획을 제한 ㄱ에 묵음이라는 뜻의 ㅇ을 더해 ㆁ을 만들었을 것이라 주장한다. 이는 단어 중간 혹은 끝에서의 [ŋ]의 발음과 단어 처음 부분에서의 묵음을 상징적으로 나타낼 수 있는 것이었다. + +중국어를 표기하기 위한 다른 글자는 ㅱ이었는데 훈민정음은 이를 微(미)의 초성이라 설명했다. 이는 중국 방언에 따라 m 혹은 w로 발음되는데 한글에서는 ㅁ([m])과 ㅇ의 조합(이에 대응되는 파스파 문자에서는 [w]로 발음한다)으로 만들어졌다. 파스파 문자에서 글자 밑에 환형의 모양을 그리는 것은 모음 뒤의 w를 의미했다. 레드야드는 ㅱ자의 'ㅇ'모양이 이 과정을 통해 만들어 졌다고 주장했다. + +마지막 증거로 레드야드는 ㄷ의 좌측 상단에 작게 삐져나온 형상(입술 모양으로)은 파스파 문자의 d와 유사하다는 점을 들었다. 이러한 입술 모양은 티베트 문자의 d인 ད에서도 찾아볼 수 있다. + +만약 레드야드의 이러한 기원설이 사실이라면 한글은 파스파 문자→티베트 문자→브라미 문자→아람 문자를 거쳐 결국 중동 페니키아 문자의 일족에 속하게 된다. 하지만 파스파문자는 세계의 다른 고대문자들처럼 상형문자일 뿐만 아니라 각 글자가 한가지의 음을 나타내지 않고, 그 문자를 사용하던 언어권에 따라 각기 다른 음을 가졌을 것이기 때문에 한글과 같이 소리를 표기하는 문자와의 상관관계는 레드야드 혼자만이 인정하고 있다. + +이에 대해 2009년 국어학자 정광(鄭光)은 훈민정음이 36개 중국어 초성을 기본으로 하는 등 파스파 문자로부터 일부 영향을 받았지만 글자를 만든 원리가 서로 다르며, 자음과 모음을 분리하여 독창적으로 만든 문자라고 반론하였다.[29] + +기타 한글과 유사하다고 주장하는 문자 +생김새가 한글과 유사한 문자가 있어서 한글 이전의 고대문자에 영향을 받았다는 주장이 있는데, 우연히 닮은 경우이거나 신뢰할 수 없는 출처를 근거로 하고 있다고 설명된다. + +가림토와 신대 문자 +송호수는 1984년 《광장(廣場)》 1월호 기고문에서 〈천부경〉과 《환단고기》〈태백일사〉를 참조하여 한글이 단군 시대부터 있었고, 단군조선의 가림다문(加臨多文)에서 한글과 일본의 아히루 문자가 기원했다고 주장하였다.[30] 이에 대하여 국어학자 이근수는 《광장(廣場)》 2월호의 기고문을 통하여 과학적 논증이 없는 이상 추론일 뿐이며, 참조한 고서의 대부분이 야사임을 지적하였다.[31] 또한 가림토 문자는 《환단고기》의 저자로 의심되고 있는 이유립이 한글의 모(母)문자로 창작한 가공의 문자일 가능성이 높아[32] 이러한 주장은 역사학계 및 언어학계에서 인정받지 못하고 있다. + +일본의 신대 문자 중에서도 모습이 한글과 비슷한 것이 있어 이를 가림토와 연관이 있다고 주장하기도 하나, 신대 문자가 새겨져 있는 비석마다 문자의 모습이 달라 일관성이 없고 언어학자들이 추정하는 고대 일본어의 음운 구조와도 맞지 않으며,[33] 신대 문자가 기록되었다고 하는 유물 거의 전부가 18~19세기의 것이고 에도 시대 전의 것을 찾을 수 없는바, 신대 문자라는 것은 고대 일본에 문자가 있었다고 주장하기 위한 에도 시대의 위작이며, 특히 그 중에 한글과 유사한 것들은 오히려 한글을 모방한 것임이 밝혀졌다.[34] + +구자라트 문자 +1983년 9월 KBS가 방영한 8부작 다큐멘터리 《신왕오천축국전》은[35] 구자라트 문자를 소개하면서 '자음은 ㄱ, ㄴ, ㄷ, ㄹ, ㅁ, ㅅ, ㅇ 등이고, 모음은 ㅏ, ㅑ, ㅓ, ㅕ, ㅗ, ㅛ, ㅜ, ㅠ, ㅡ, ㅣ의 열 자가 꼭 같았으며, 받침까지도 비슷하게 쓰고 있었다'고 주장하였다. + +또한, 개천학회 회장 송호수[36]는 1984년 이를 인용하면서 '자음에서는 상당수가 같고, 모음은 10자가 꼭 같다는 것이다'라고 썼다. 그는 구자라트 문자가 가림토에서 비롯되었다고 주장했다.[37][38] + +그러나 구자라트 문자는 문자 구성상 자모로 완전히 분리되는 한글과는 달리 모든 자음이 딸림 모음을 수반하는 아부기다이며, 데바나가리 문자에서 수직선을 제거한 데바나가리 파생문자로서 다른 인도계 여러 문자와 친족 관계가 명확하게 밝혀져 있기 때문에 이는 구자라트 문자의 특정 글자체와 한글 사이의 표면적 유사성에 대한 착오일 뿐이다.[39] + +다른 언어에서의 한글 사용 +한글은 2009년에 처음으로 인도네시아의 소수 민족인 찌아찌아족의 언어인 찌아찌아어를 표기하는데 사용되었다. + +이밖에도 한국에서는 한글을 표기 문자로 보급하기 위하여 노력하고 있으며 2012년 솔로몬제도의 토착어를 한글로 표기하여 교육하는 활동이 시작됐다. 2012년 10월부터 시행된 것은 2개 언어이며 결과에 따라 솔로몬제도 전역으로 확대할 예정이다.[40] + +간혹, 영어 발음을 정확하게 표기하기 위해 옛 한글 등을 부활시킨 표기법을 연구하는 경우도 있으나, 이 역시 개인 연구자에 의한 것이다. 그리고 한국인이 아닌 사람이 만든 인공어618-Vuro나 인공 문자 井卜文(Jingbu Script) 등에서 일부 한글 또는 한글을 모티브로 한 문자를 개인 수준에서 사용한 예를 볼 수 있다. + +오해와 사실 +이 부분의 본문은 한글에 대한 오해입니다. +유네스코의 세계기록유산에 등재된 것은 한글이 아니라, 책《훈민정음》(해례본)이다. +유네스코 세계기록유산은 기록물이 담고 있는 내용이 아니라 기록물 자체만을 등록 대상으로 한다. +실제의 한글은 모든 언어의 발음을 표기할 수 있는 것이 아니다. 또한, 현재의 한글은 창제 당시의 훈민정음보다 표현할 수 있는 발음 수가 적다. +'모든 소리를 표현할 수 있다는 것'은 원래 언어학적 명제가 아니고, 창제 당시에 '모든 소리는 기본 5음의 조화로 이루어진다'는 사상을 배경으로 한 철학적 표현이다. +한글 낱자는 모두 소릿값이 확정되어 있고 실제 한글 쓰임에서는 모아쓰기의 규칙도 정해져 있으므로, 한글로 표현되는 소리의 숫자는 본래 유한하며, 한글은 기본적으로 한국어에 맞추어져 있다. +현재 한글은 한국어 발음에만 사용하고 있으나, 원래의 훈민정음에서는 모아쓰기가 좀 더 다양하며, 아울러 《동국정운》에 따르면 실제의 한국어 발음뿐만 아니라, 이론적인 한자음도 훈민정음으로써 표현하고 있다. +한글은 언어의 이름이 아니라 글자의 이름이다. +창제 당시의 이름인 '훈민정음'과 그 약칭인 '정음'도 본래 글자의 이름이었다. +찌아찌아족의 찌아찌아어의 표기에는 사용되나 공식은 아니다. +한글 자모일람 +방언 한글 자모 +㄰ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿ + +ㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏ + +ㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟ + +ㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯ + +ㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿ + +ㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ㆏ + +고문 한글 자모 +ᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄋᄌᄍᄎᄏ + +ᄐᄑᄒᄓᄔᄕᄖᄗᄘᄙᄚᄛᄜᄝᄞᄟ + +ᄠᄡᄢᄣᄤᄥᄦᄧᄨᄩᄪᄫᄬᄭᄮᄯ + +ᄰᄱᄲᄳᄴᄵᄶᄷᄸᄹᄺᄻᄼᄽᄾᄿ + +ᅐᅑᅒᅓᅔᅕᅖᅗᅘᅙᅚᅛᅜᅝᅞᅟ + +복합원음와 보음 +ᅠᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯ + +ᅰᅱᅲᅳᅴᅵᅶᅷᅸᅹᅺᅻᅼᅽᅾᅿ + +ᆀᆁᆂᆃᆄᆅᆆᆇᆈᆉᆊᆋᆌᆍᆎᆏ + +ᆐᆑᆒᆓᆔᆕᆖᆗᆘᆙᆚᆛᆜᆝᆞᆟ + +ᆠᆡᆢᆨᆩᆪᆫᆬᆭᆮᆯ + +ᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿ + +ᇀᇁᇂᇃᇄᇅᇆᇇᇈᇉᇊᇋᇌᇍᇎᇏ + +ᇐᇑᇒᇓᇔᇕᇖᇗᇘᇙᇚᇛᇜᇝᇞᇟ + +ᇠᇡᇢᇣᇤᇥᇦᇧᇨᇩᇪᇫᇬᇭᇮᇯ + +ᇰᇱᇲᇳᇴᇵᇶᇷᇸᇹᇺᇻᇼᇽᇾᇿ + +관련 항목 +국어 +세종대왕 +주시경 +한글의 우수성에 관한 논란 +문자 +한글 맞춤법 +한글 낱자 +한글 낱자 목록 +한국어 +한국어 로마자 표기법 +한글전용과 국한문혼용 +조선어 신철자법 +옛 한글 +훈민정음 +한글날 +한글 위키백과 +한글의 모든 글자 +한글을 표기하는 언어 목록 +한국어 +카리어 +꽈라아에어[41] +찌아찌아어 +각주 + 이것은 훈민정음 창제 당시부터 보인다. 예컨대, 《세종실록》은 훈민정음 창제를 上親制諺文二十八字…是謂訓民正音(주상께서 친히 언문 28자를 만들어 … 이것을 훈민정음이라 이른다)이라고 기록하는데, 이것은 한글의 이름이거나 또는 굳이 한글만 지칭한 것은 아니고 한자 이외의 문자를 통칭하는 표현이다. 예컨대 《순조실록(純祖實錄)》 9년 12월 2일 기사에 역관 현의순(玄義洵)이 대마도의 사정을 보고한 글 가운데 敎之以諺文名之曰假名(언문을 가르치는데, 그 이름을 일러 가나라고 한다)과 같은 문장이 있어, 일본 문자에 대해서도 언문이라는 표현이 사용됨을 볼 수 있다.) 또한 《세종실록》 28년 11월 8일자에 언문청이라는 한글을 보급하는 구실을 하는 기관 이름이 나온다. + 한문을 지칭하는 ‘진서(眞書)’와 대비되는 표현이다. + 諺文字母俗所謂反切二十七字(세간에서 이른바 반절 27자라고 하는 언문 자모). 최세진(崔世珍), 〈범례(凡例)〉, 《훈몽자회(訓蒙字會)》. 1527. 반절은 본래 2개의 한자로 다른 한자음을 표기하는 방법을 말하며, 이렇게 소리의 표기에 사용된 글자를 반절자(反切字)라고 한다. 당시 훈민정음이 이와 비슷한 용법으로 한자음 표기에도 사용되었기 때문에 반절이라고 불렸던 것으로 보인다. + 1908년 설립한 ‘국어연구학회(國語硏究學會)’가 1911년 9월에 명칭을 바꾼 것으로, 공식적으로 한글과 한문 표기를 나란히 사용했다. + ‘本會의 名稱을 한글모라 改稱하고 이 몯음을 세움몯음으로…’, 〈한글모세움몯음적발〉, 《한글모 죽보기》. 이규영. 1917. + 한글풀이의 수록이 확인되는 것은 1914년 3월의 제7호부터 1914년 7월의 제11호까지 + 〈맞춤법〉, 《조선말규범집》. 북한(조선민주주의인민공화국) 내각직속 국어사정위원회. 1987. + “훈민정음은 백성(百姓) 가르치시는 정(正)한 소리라”(현대어 표기로 옮김), 〈세종어제훈민정음〉, 《월인석보》. 1459년. + 癸亥冬我殿下創制正音二十八字略揭例義以示之名曰訓民正音 (계해년 겨울, 우리 전하께서 정음 28자를 창제하시어, 간략하게 예를 들어 보이시고 이름을 훈민정음이라 하셨다). 정인지,〈서(序)〉, 《훈민정음》. 1446년. + “上親制諺文二十八字…是謂訓民正音”, 《세종실록》 25년 12월. + 정인지는 훈민정음을 지은 세종이 집현전 학자들에게 ‘해설서’의 편찬을 명했다고 적고 있다. 遂命詳加解釋以喩諸人…謹作諸解及例以敍其梗槪 (마침내, 해석을 상세히 더하여 사람들을 깨우치라고 명하시어… 여러 풀이와 예를 지어 그 개요를 펴내니), 정인지, 〈서〉, 《훈민정음》. 1446년. + "錢下槍制', 《훈민정음 해례본》 + 〈훈민정음 친제론〉, 이기문, 《한국문화》제13집. 서울대학교 규장각 한국학연구원, 1992년. + '라랴러려' 분청사기..."16세기 지방 하층민도 한글 사용".YTN.2011-09-08. + [1] + 第十四條 法律勅令總以國文爲本漢文附譯或用國漢文 + 第九條 法律命令은 다 國文으로써 本을 삼꼬 漢譯을 附하며 或國漢文을 混用홈 + 세계는 지금 '언어전쟁' 중 + “한글 홀대하는 사회”. 2012년 11월 30일에 원본 문서에서 보존된 문서. 2010년 2월 2일에 확인함. + 솔로몬제도 일부 주(州)서 표기문자로 한글 채택 + 최현철 기자 (2010년 10월 20일). “‘천지인’ 개발자 특허권 기부 … 표준 제정 임박”. 중앙일보. 2012년 11월 15일에 확인함. + [북녘말] 기윽 디읃 시읏 / 김태훈 : 칼럼 : 사설.칼럼 : 뉴스 : 한겨레 + 然ㄱㆁㄷㄴㅂㅁㅅㄹ八字可足用也如ㅂ·ㅣㅅ곶爲梨花여ㅿ의갗爲狐皮而ㅅ字可以通用故只用ㅅ字 ,훈민정음 해례 종성해 + 其字倣古篆分爲初中終聲合之然後乃成字 : (그 글자는 옛 전자(篆字)를 모방하고, 초·중·종성으로 나뉘어 그것을 합한 연후에 글자를 이룬다.) 《세종실록》 25년 12월 30일. + 象形而字倣古篆因聲而音叶七調 (물건의 형상을 본떠서 글자는 고전을 모방하고, 소리(聲)로 인(因)하여 음(音)은 칠조(七調)에 맞아). 《세종실록》28년 9월 29일. 이 기사는 《훈민정음》의 정인지 〈서(序)〉를 옮겨 놓은 것이다. + 글로벌세계대백과, 〈양반관료의 문화〉, 한글 창제. + 이 문자들은 확실히 증명되진 않았다. 어떤 필사본에는 ꡜ h에서 파생된 저 세 글자 모두 아래쪽이 환형으로 되어있기도 하다. + "The Korean Language Reform of 1446", Gari Ledyard. (1966) + [Why] 세종대왕 한글 창제가 '표절' 누명 쓰고 있다고?, 《조선닷컴》, 2009.10.10. + "한글은 檀君시대부터 있었다" 송호수 교수 주장에 學界관심, 《경향신문》, 1984.1.12. + 한글 世宗전 創製 "터무니없다" 李覲洙교수, 宋鎬洙교수 主張 반박, 《경향신문》, 1984.2.6. + 문명, 《만들어진 한국사》, 파란, 2010 + "日 神代文字는 한글의 僞作이다", 《경향신문》, 1985.7.17. + MBC 다큐멘터리 “미스터리 한글, 해례6211의 비밀”, 2007. 10. 7. 방송 + 《新往五天竺國傳(신왕오천축국전)》. 문순태, KBS 특별취재반. 한국방송사업단, 1983. 참조 + 당시 보도에는 S베일러대 교수로 소개되었다. + 〈한글은 세종 이전에도 있었다〉, 송호수,《廣場(광장)》1984년 1월호. 세계평화교수협의회. + 일본 神代文字 논란[깨진 링크(과거 내용 찾기)], 충북대학 국어국문학과 국어학강의실 + 〈한글과 비슷한(?) 구자라트 문자〉, 김광해, 《새국어소식》1999년 10월호. 한국어문진흥회 + [2] + 섬나라 솔로몬제도 2개주도 한글 쓴다 +참고 문헌 +〈한글〉, 《한국민족문화대백과》. 한국학중앙연구원. +읽을거리 +Portal icon 한국 포털 +Portal icon 문화 포털 +한글날에 생각해보는 훈민정음 미스터리. 김현미.《신동아》 2006년 10월호. +히브리문자 기원설을 계기로 본 훈민정음. 이기혁. 《신동아》 1997년 5월호. +어느 기하학자의 한글 창제. 《동아일보》, 2007-10-19. (영어의 v, f, θ, ð, l 등의 발음을 한글로 표기하기 - 고등과학원 최재경 교수의 제안) +'한글 연구가' 최성철씨 "이젠 한글표기법 독립운동할 때". 《동아일보》, 2006-10-09. +한글과 코드: 한글과 컴퓨터 코드에 관하여 +외부 링크 + 위키미디어 공용에 관련된 미디어 자료와 분류가 있습니다. +한글 (분류) + 위키낱말사전에 +관련된 항목이 있습니다. +한글 +디지털한글박물관 +한글학회 +한글재단 +국립국어원 +한글 듣기 테스트 +"한글 자음 쓰기 영상" - 유튜브 +"한글 모음 쓰기 영상" - 유튜브 +Heckert GNU white.svgCc.logo.circle.svg 이 문서에는 다음커뮤니케이션(현 카카오)에서 GFDL 또는 CC-SA 라이선스로 배포한 글로벌 세계대백과사전의 "양반관료의 문화" 항목을 기초로 작성된 글이 포함되어 있습니다. \ No newline at end of file From 21dd4addecca34c2a8a540a2377c00e0dfbe3e50 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Fri, 27 Sep 2019 13:38:55 +0200 Subject: [PATCH 06/82] Update README.md (dart-lang/characters#7) --- pkgs/characters/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 83013521..456ba840 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,5 +1,8 @@ [![Build Status](https://travis-ci.org/dart-lang/characters.svg?branch=master)](https://travis-ci.org/dart-lang/characters) +**NOTE**: This package is considered experimental, and breaking API changes are +to be expected. + `Characters` are strings viewed as sequences of *user-perceived character*s, also know as [Unicode (extended) grapheme clusters](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries). From 9545eaee23695786e4b4ff530955dee3f752afde Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Thu, 10 Oct 2019 11:15:51 +0200 Subject: [PATCH 07/82] First attempt at index-agnostic API. (dart-lang/characters#6) Version 0.2.0. --- pkgs/characters/.vscode/launch.json | 14 + pkgs/characters/README.md | 4 +- pkgs/characters/benchmark/benchmark.dart | 99 ++ pkgs/characters/lib/src/characters.dart | 657 ++++++++---- pkgs/characters/lib/src/characters_impl.dart | 965 ++++++++++++------ .../lib/src/grapheme_clusters/breaks.dart | 2 + pkgs/characters/pubspec.yaml | 2 +- pkgs/characters/test/characters_test.dart | 484 +++++---- 8 files changed, 1540 insertions(+), 687 deletions(-) create mode 100644 pkgs/characters/.vscode/launch.json create mode 100644 pkgs/characters/benchmark/benchmark.dart diff --git a/pkgs/characters/.vscode/launch.json b/pkgs/characters/.vscode/launch.json new file mode 100644 index 00000000..c078e2bc --- /dev/null +++ b/pkgs/characters/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Dart", + "program": "bin/main.dart", + "request": "launch", + "type": "dart" + } + ] +} \ No newline at end of file diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 456ba840..94d3cc79 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -7,6 +7,4 @@ to be expected. also know as [Unicode (extended) grapheme clusters](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries). The `Characters` class allows access to the individual characters of a string, -and a way to navigate back and forth between them. -It also has a set of utility functions for inspecting and modifying strings -without breaking up graphemes clusters. +and a way to navigate back and forth between them using a `CharacterRange`. diff --git a/pkgs/characters/benchmark/benchmark.dart b/pkgs/characters/benchmark/benchmark.dart new file mode 100644 index 00000000..5345b9dd --- /dev/null +++ b/pkgs/characters/benchmark/benchmark.dart @@ -0,0 +1,99 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Benchmark of efficiency of grapheme cluster operations. + +import "package:characters/characters.dart"; + +import "../test/src/text_samples.dart"; + +double bench(int Function() action, int ms) { + int elapsed = 0; + int count = 0; + var stopwatch = Stopwatch()..start(); + do { + count += action(); + elapsed = stopwatch.elapsedMilliseconds; + } while (elapsed < ms); + return count / elapsed; +} + +int iterateIndicesOnly() { + int graphemeClusters = 0; + var char = Characters(hangul).iterator; + while (char.moveNext()) graphemeClusters++; + char = Characters(genesis).iterator; + while (char.moveNext()) graphemeClusters++; + return graphemeClusters; +} + +int iterateStrings() { + int codeUnits = 0; + var char = Characters(hangul).iterator; + while (char.moveNext()) codeUnits += char.current.length; + char = Characters(genesis).iterator; + while (char.moveNext()) codeUnits += char.current.length; + return codeUnits; +} + +int reverseStrings() { + var revHangul = reverse(hangul); + var rev2Hangul = reverse(revHangul); + if (hangul != rev2Hangul || hangul == revHangul) throw "Bad reverse"; + + var revGenesis = reverse(genesis); + var rev2Genesis = reverse(revGenesis); + if (genesis != rev2Genesis || genesis == revGenesis) throw "Bad reverse"; + + return (hangul.length + genesis.length) * 2; +} + +int replaceStrings() { + int count = 0; + { + const language = "한글"; + assert(language.length == 6); + var chars = Characters(hangul); + var replaced = + chars.replaceAll(Characters(language), Characters("Hangul!")); + count += replaced.string.length - hangul.length; + } + { + var chars = Characters(genesis); + var replaced = chars.replaceAll(Characters("And"), Characters("Also")); + count += replaced.string.length - genesis.length; + } + return count; +} + +String reverse(String input) { + var chars = Characters(input); + var buffer = StringBuffer(); + for (var it = chars.iteratorAtEnd; it.moveBack();) { + buffer.write(it.current); + } + return buffer.toString(); +} + +void main(List args) { + int count = 1; + if (args.isNotEmpty) count = int.tryParse(args[0]) ?? 1; + + // Warmup. + bench(iterateIndicesOnly, 250); + bench(iterateStrings, 250); + bench(reverseStrings, 250); + bench(replaceStrings, 250); + + for (int i = 0; i < count; i++) { + var performance = bench(iterateIndicesOnly, 2000); + print("Index Iteration: $performance gc/ms"); + performance = bench(iterateStrings, 2000); + print("String Iteration: $performance cu/ms"); + performance = bench(reverseStrings, 2000); + print("String Reversing: $performance cu/ms"); + performance = bench(replaceStrings, 2000); + print("String Replacing: $performance changes/ms"); + } +} diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index 40ddbd28..3e5170c0 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -2,12 +2,7 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import "dart:collection"; - -import "grapheme_clusters/constants.dart"; -import "grapheme_clusters/breaks.dart"; - -part "characters_impl.dart"; +import "characters_impl.dart"; /// The characters of a string. /// @@ -20,30 +15,37 @@ part "characters_impl.dart"; /// the elements can be computed eagerly, and in that case the /// operation returns a new `Characters` object. /// -/// A `Characters` also supports operations based on -/// string indices into the underlying string. -/// -/// Inspection operations like [indexOf] or [lastIndexAfter] -/// returns such indices which are guranteed to be at character -/// boundaries. -/// Most such operations use the index as starting point, -/// but will still only work on entire characters. -/// A few, like [substring] and [replaceSubstring], work directly -/// on the underlying string, independently of character -/// boundaries. +/// The [iterator] provided by [Characters] is a [CharacterRange] +/// which allows iterating the independent characters in both directions, +/// but which also provides ways to select other ranges of characters +/// in different ways. abstract class Characters implements Iterable { /// Creates a [Characters] allowing iteration of /// the characters of [string]. - factory Characters(String string) = _Characters; + factory Characters(String string) = StringCharacters; /// The string to iterate over. String get string; - /// A specialized character iterator. + /// Iterator over the characters of this string. + /// + /// Returns [CharacterRange] positioned before the first character + /// of this [Characters]. /// /// Allows iterating the characters of [string] as a plain iterator, - // as well as controlling the iteration in more detail. - Character get iterator; + /// using [CharacterRange.moveNext], + /// as well as controlling the iteration in more detail. + CharacterRange get iterator; + + /// Iterator over the characters of this string. + /// + /// Returns [CharacterRange] positioned after the last character + /// of this [Characters]. + /// + /// Allows iterating the characters of [string] backwards + /// using [CharacterRange.movePrevious], + /// as well as controlling the iteration in more detail. + CharacterRange get iteratorAtEnd; /// Whether [Character] is an element of this sequence of /// characters. @@ -58,83 +60,32 @@ abstract class Characters implements Iterable { /// as a subsequence. bool containsAll(Characters other); - /// Whether [other] is an initial subsequence of this sequence - /// of characters. - /// - /// If [startIndex] is provided, then checks whether - /// [other] is an initial subsequence of the characters - /// starting at the character boundary [startIndex]. - /// - /// Returns `true` if [other] is a sub-sequence of this sequence of - /// characters startings at the character boundary [startIndex]. - /// Returns `false` if [startIndex] is not a character boundary, - /// or if [other] does not occur at that position. - bool startsWith(Characters other, [int startIndex = 0]); - - /// Whether [other] is an trailing subsequence of this sequence - /// of characters. - /// - /// If [endIndex] is provided, then checks whether - /// [other] is a trailing subsequence of the characters - /// starting at the character boundary [endIndex]. - /// - /// Returns `true` if [other] is a sub-sequence of this sequence of - /// characters startings at the character boundary [endIndex]. - /// Returns `false` if [endIndex] is not a character boundary, - /// or if [other] does not occur at that position. - bool endsWith(Characters other, [int endIndex]); - - /// The string index before the first place where [other] occurs as - /// a subsequence of these characters. + /// Whether this string starts with the characters of [other]. /// - /// Returns the [string] index before first occurrence of the character - /// of [other] in the sequence of characters of [string]. - /// Returns a negative number if there is no such occurrence of [other]. - /// - /// If [startIndex] is supplied, returns the index after the first occurrence - /// of [other] in this which starts no earlier than [startIndex], and again - /// returns `null` if there is no such occurrence. That is, if the result - /// is non-negative, it is greater than or equal to [startIndex]. - int indexOf(Characters other, [int startIndex]); + /// Returns `true` if [other] the characters of [other] + /// are also the first characters of this string, + /// and `false` otherwise. + bool startsWith(Characters other); - /// The string index after the first place [other] occurs as a subsequence of - /// these characters. - /// - /// Returns the [string] index after the first occurrence of the character - /// of [other] in the sequence of characters of [string]. - /// Returns a negative number if there is no such occurrence of [other]. + /// Whether this string ends with the characters of [other]. /// - /// If [startIndex] is supplied, returns the index after the first occurrence - /// of [other] in this which starts no earlier than [startIndex], and again - /// returns `null` if there is no such occurrence. That is, if the result - /// is non-negative, it is greater than or equal to [startIndex]. - int indexAfter(Characters other, [int startIndex]); + /// Returns `true` if [other] the characters of [other] + /// are also the last characters of this string, + /// and `false` otherwise. + bool endsWith(Characters other); - /// The string index before the last place where [other] occurs as - /// a subsequence of these characters. - /// - /// Returns the [string] index before last occurrence of the character - /// of [other] in the sequence of characters of [string]. - /// Returns a negative number if there is no such occurrence of [other]. + /// Finds the first occurrence of [characters] in this string. /// - /// If [startIndex] is supplied, returns the before after the first occurrence - /// of [other] in this which starts no later than [startIndex], and again - /// returns `null` if there is no such occurrence. That is the result - /// is less than or equal to [startIndex]. - int lastIndexOf(Characters other, [int startIndex]); + /// Returns a [CharacterRange] containing the first occurrence of + /// [characters] in this string. + /// Returns `null` if there is no such occurrence. + CharacterRange /*?*/ findFirst(Characters characters); - /// The string index after the last place where [other] occurs as - /// a subsequence of these characters. + /// Finds the last occurrence of [characters]. /// - /// Returns the [string] index after the last occurrence of the character - /// of [other] in the sequence of characters of [string]. - /// Returns a negative number if there is no such occurrence of [other]. - /// - /// If [startIndex] is supplied, returns the index after the last occurrence - /// of [other] in this which ends no later than [startIndex], and again - /// returns `null` if there is no such occurrence. That is the result - /// is less than or equal to [startIndex]. - int lastIndexAfter(Characters other, [int startIndex]); + /// Returns a [CharacterRange] containing the last occurrence of + /// [characters]. Returns `null` if there is no such occurrence, + CharacterRange /*?*/ findLast(Characters characters); /// Eagerly selects a subset of the characters. /// @@ -170,21 +121,6 @@ abstract class Characters implements Iterable { /// is returned. Characters takeLast(int count); - /// Eagerly selects a range of characters. - /// - /// Both [start] and [end] are offsets of characters, - /// not indices into [string]. - /// The [start] must be non-negative and [end] must be at least - /// as large as [start]. - /// - /// If [start] is at least as great as [length], then the result - /// is an empty sequence of graphemes. - /// If [end] is greater than [length], the count of character - /// available, then it acts the same as if it was [length]. - /// - /// A call like `gc.getRange(a, b)` is equivalent to `gc.take(b).skip(a)`. - Characters getRange(int start, int end); - /// Eagerly selects a trailing sequence of characters. /// /// Checks each character, from first to last, against [test], @@ -240,41 +176,18 @@ abstract class Characters implements Iterable { /// of this sequence of strings with any other sequence of strings. Characters operator +(Characters other); - /// The characters of [string] with [other] inserted at [index]. - /// - /// The [index] is a string can be any index into [string]. - Characters insertAt(int index, Characters other); - - /// The characters of [string] with a substring replaced by other. - Characters replaceSubstring(int startIndex, int endIndex, Characters other); - - /// The characters of a substring of [string]. - /// - /// The [startIndex] and [endIndex] must be a valid range of [string] - /// (0 ≤ `startIndex` ≤ `endIndex` ≤ `string.length`). - /// If [endIndex] is omitted, it defaults to `string.length`. - Characters substring(int startIndex, [int endIndex]); - - /// Replaces [source] with [replacement]. + /// Replaces [pattern] with [replacement]. /// /// Returns a new [GrapehemeClusters] where all occurrences of the - /// [source] character sequence are replaced by [replacement], + /// [pattern] character sequence are replaced by [replacement], /// unless the occurrence overlaps a prior replaced sequence. - /// - /// If [startIndex] is provided, only replace characters - /// starting no earlier than [startIndex] in [string]. - Characters replaceAll(Characters source, Characters replacement, - [int startIndex = 0]); + Characters replaceAll(Characters pattern, Characters replacement); - /// Replaces the first [source] with [replacement]. + /// Replaces the first [pattern] with [replacement]. /// /// Returns a new [Characters] where the first occurence of the - /// [source] character sequence, if any, is replaced by [replacement]. - /// - /// If [startIndex] is provided, replaces the first occurrence - /// of [source] starting no earlier than [startIndex] in [string], if any. - Characters replaceFirst(Characters source, Characters replacement, - [int startIndex = 0]); + /// [pattern] character sequence, if any, is replaced by [replacement]. + Characters replaceFirst(Characters pattern, Characters replacement); /// The characters of the lower-case version of [string]. Characters toLowerCase(); @@ -292,85 +205,437 @@ abstract class Characters implements Iterable { String toString(); } -/// Iterator over characters of a string. +/// A range of characters of a [Characters]. /// -/// Characters are Unicode grapheme clusters represented as substrings -/// of the original string. +/// A range of consecutive characters in [source], +/// corresponding to a start and end position in the source sequence. +/// The range may even be empty, but that will still correspond to a position +/// where both start and end happen to be the same position. /// -/// The [start] and [end] indices will iterate the grapheme cluster -/// boundaries of the string while the [Character] is iterating the -/// grapheme clusters. A string with *n* grapheme clusters will have -/// *n + 1* boundaries (except when *n* is zero, then there are also -/// zero boundaries). Those boundaries can be accessed as, for example: -/// ```dart -/// Iterable graphemeClusterBoundaries(String string) sync* { -/// if (string.isEmpty) return; -/// var char = Characters(string).iterator; -/// var hasNext = false; -/// do { -/// hasNext = char.moveNext(); -/// yield char.start; -/// } while (hasNext); -/// } -/// ``` -abstract class Character implements BidirectionalIterator { +/// The source sequence can be separated into the *preceeding* characters, +/// those before the range, the range itself, and the *following* characters, +/// those after the range. +/// +/// Some operations inspect or act on the characters of the current range, +/// and other operations modify the range by moving the start and/or end +/// position. +/// +/// In general, an operation with a name starting with `move` will move +/// both start and end positions, selecting an entirely new range +/// which does not overlap the current range. +/// Operations starting with `collapse` reduces the current range to +/// a sub-range of itself. +/// Operations starting with `expand` increase the current range +/// by moving/ the end postion to a later position +/// or the start position to an earlier position, +/// and operations starting with `drop` reduce the current range +/// by moving the start to a later position or the end to an earlier position, +/// therebyt dropping characters from one or both ends from the current range. +/// +/// +/// The character range implements [Iterator] +/// The [moveNext] operation, when called with no argument, +/// iterates the *next* single characters of the [source] sequence. +abstract class CharacterRange implements Iterator { /// Creates a new character iterator iterating the character /// of [string]. - factory Character(String string) = _Character; + factory CharacterRange(String string) = StringCharacterRange; + + /// The character sequence that this range is a sub-sequence of. + Characters get source; + + /// The code units of the current character range. + List get codeUnits; + + /// The code points of the current character range. + Runes get runes; - /// The beginning of the current character in the underlying string. + /// Creates a copy of this [Character]. + /// + /// The copy is in the exact same state as this iterator. + /// Can be used to iterate the following characters more than once + /// at the same time. To simply rewind an iterator, remember the + /// [start] or [end] position and use [reset] to reset the iterator + /// to that position. + CharacterRange copy(); + + /// Whether the current range is empty. /// - /// This index is always at a cluster boundary unless the iterator - /// has been reset to a non-boundary index. + /// An empty range has no characters, but still has a position as + /// a sub-sequence of the source character sequence. + bool get isEmpty; + + /// Whether the current range is not empty. /// - /// If equal to [end], there is no current character, and [moveNext] - /// needs to be called first before accessing [current]. - /// This is the case at the beginning of iteration, - /// after [moveNext] has returned false, - /// or after calling [reset]. - int get start; + /// A non-empty range contains at least one character. + bool get isNotEmpty; - /// The end of the current character in the underlying string. + /// Moves the range to be the next [count] characters after the current range. + /// + /// The new range starts and the end of the current range and includes + /// the next [count] characters, or as many as available if there + /// are fewer than [count] characters following the current range. /// - /// This index is always at a cluster boundary unless the iterator - /// has been reset to a non-boundary index. + /// The [count] must not be negative. + /// If it is zero, the call has the same effect as [collapseToEnd]. /// - /// If equal to [start], there is no current character. - int get end; + /// Returns `true` if there were [count] following characters + /// and `false` if not. + bool moveNext([int count = 1]); - /// The code units of the current character. - List get codeUnits; + /// Moves the range to the next occurrence of [target] + /// after the current range. + /// + /// If there is an occurrence of [target] in the characters following + /// the current range, + /// then the new range contains exactly the first such occurrence of [target]. + /// + /// If there is no occurrence of [target] after the current range, + /// the range is not modified. + /// + /// Returns `true` if the range is modified and `false` if not. + bool moveTo(Characters target); - /// The code points of the current character. - Runes get runes; + /// Moves to the range until the next occurrence of [target]. + /// + /// If there is an occurrence of [target] in the characters following + /// the current range, + /// then the new range contains the characters from the end + /// of the current range until, but no including the first such + /// occurrence of [target]. + /// + /// If there is no occurrence of [target] after the current range, + /// the new range contains all the characters following the current range, + /// from the end of the current range until the end of the string. + /// + /// Returns `true` if there was an occurrence of [target]. + bool moveUntil(Characters target); + + /// Moves the range to be the last [count] characters before the current + /// range. + /// + /// The new range ends at the start of the current range and includes + /// the previous [count] characters, or as many as available if there + /// are fewer than [count] characters preceding the current range. + /// + /// The [count] must not be negative. + /// If it is zero, the call has the same effect as [collapseToStart]. + /// + /// Returns `true` if there were [count] preceding characters + /// and `false` if not. + bool moveBack([int count = 1]); - /// Resets the iterator to the [index] position. + /// Moves the range to the last occurrence of [target] + /// before the current range. + /// + /// If there is an occurrence of [target] in the characters preceding + /// the current range, + /// then the new range contains exactly the last such occurrence of [target]. + /// + /// If there is no occurrence of [target] after the current range, + /// the range is not modified. /// - /// There is no [current] character after a reset, - /// a call to [moveNext] is needed to find the end of the character - /// at the [index] position. - /// A `reset(0)` will reset to the beginning of the string, as for a newly - /// created iterator. - void reset(int index); + /// Returns `true` if the range is modified and `false` if not. + bool moveBackTo(Characters target); - /// Resets the iterator to the start of the string. + /// Moves to the range after the previous occurence of [target]. /// - /// The iterator will be in the same state as a newly created iterator - /// from [Characters.iterator]. - void resetStart(); + /// If there is an occurrence of [target] in the characters preceding + /// the current range, + /// then the new range contains the characters after + /// the last such occurrence, and up to the start of the current range. + /// + /// If there is no occurrence of [target] after the current range, + /// the new range contains all the characters preceding the current range, + /// from the start of the string to the start of the current range. + /// + /// Returns `true` if there was an occurrence of [target]. + bool moveBackUntil(Characters target); - /// Resets the iterator to the end of the string. + /// Expands the current range with the next [count] characters. + /// + /// Expands the current range to include the first [count] characters + /// following the current range, or as many as are available if + /// there are fewer than [count] characters following the current range. /// - /// The iterator will be in the same state as an iterator which has - /// performed [moveNext] until it returned false. - void resetEnd(); + /// The [count] must not be negative. + /// If it is zero, the range does not change. + /// + /// Returns `true` if there are at least [count] characters following + /// the current range, and `false` if not. + bool expandNext([int count = 1]); - /// Creates a copy of this [Character]. + /// Expands the range to include the next occurence of [target]. /// - /// The copy is in the exact same state as this iterator. - /// Can be used to iterate the following characters more than once - /// at the same time. To simply rewind an iterator, remember the - /// [start] or [end] position and use [reset] to reset the iterator - /// to that position. - Character copy(); + /// If there is an occurrence of [target] in the characters following + /// the current range, the end of the the range is moved to just after + /// the first such occurrence. + /// + /// If there is no such occurrence of [target], the range is not modified. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + /// Notice that if [target] is empty, + /// the result is `true` even though the range is not modified. + bool expandTo(Characters target); + + /// Expands the range to include characters until the next [target]. + /// + /// If there is an occurrence of [target] in the characters following + /// the current range, the end of the the range is moved to just before + /// the first such occurrence. + /// + /// If there is no such occurrence of [target], the end of the range is + /// moved to the end of [source]. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + bool expandUntil(Characters target); + + /// Expands the range with the following characters satisfying [test]. + /// + /// Iterates through the characters following the current range + /// and includes them into the range until finding a character that + /// [test] returns `false` for. + void expandWhile(bool Function(String) test); + + /// Expands the range to the end of [source]. + void expandAll(); + + /// Expands the current range with the preceding [count] characters. + /// + /// Expands the current range to include the last [count] characters + /// preceding the current range, or as many as are available if + /// there are fewer than [count] characters preceding the current range. + /// + /// The [count] must not be negative. + /// If it is zero, the range does not change. + /// + /// Returns `true` if there are at least [count] characters preceding + /// the current range, and `false` if not. + bool expandBack([int count = 1]); + + /// Expands the range to include the previous occurence of [target]. + /// + /// If there is an occurrence of [target] in the characters preceding + /// the current range, the stat of the the range is moved to just before + /// the last such occurrence. + /// + /// If there is no such occurrence of [target], the range is not modified. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + /// Notice that if [target] is empty, + /// the result is `true` even though the range is not modified. + bool expandBackTo(Characters target); + + /// Expands the range to include characters back until the previous [target]. + /// + /// If there is an occurrence of [target] in the characters preceding + /// the current range, the start of the the range is moved to just after + /// the last such occurrence. + /// + /// If there is no such occurrence of [target], the end of the range is + /// moved to the end of [source]. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + bool expandBackUntil(Characters target); + + /// Expands the range with the preceding characters satisffying [test]. + /// + /// Iterates back through the characters preceding the current range + /// and includes them into the range until finding a character that + /// [test] returns `false` for. + void expandBackWhile(bool Function(String) test); + + /// Expands the range back to the start of [source]. + void expandBackAll(); + + /// Collapses the range to its start. + /// + /// Sets the end of the range to be the same position as the start. + /// The new range is empty and positioned at the start of the current range. + void collapseToStart(); + + /// Collapses to the first occurrence of [target] in the current range. + /// + /// If there is an occurrence of [target] in the characters of the current + /// range, then the new range contains exactly the characters of the + /// first such occurrence. + /// + /// If there is no such occurrence, the range is not changed. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + bool collapseToFirst(Characters target); + + /// Collapses to the last occurrence of [target] in the current range. + /// + /// If there is an occurrence of [target] in the characters of the current + /// range, then the new range contains exactly the characters of the + /// last such occurrence. + /// + /// If there is no such occurrence, the range is not changed. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + bool collapseToLast(Characters target); + + /// Collapses the range to its end. + /// + /// Sets the start of the range to be the same as its end. + /// The new range is an empty range positioned at the end + /// of the current range. + void collapseToEnd(); + + /// Drop the first [count] characters from the range. + /// + /// Advances the start of the range to after the [count] first characters + /// of the range, or as many as are available if + /// there are fewer than [count] characters in the current range. + /// + /// The [count] must not be negative. + /// If it is zero, the range is not changed. + /// + /// Returns `true` if there are [count] characters in the range, + /// and `false` if there are fewer. + bool dropFirst([int count = 1]); + + /// Drops the first occurrence of [target] in the range. + /// + /// If the range contains any occurrences of [target], + /// then all characters before the end of the first such occurrence + /// is removed from the range. + /// This advances the start of the range to the end of the + /// first occurrence of [target]. + /// + /// If there are no occurrences of [target] in the range, + /// the range is not changed. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + bool dropTo(Characters target); + + /// Drops characters from the start of the range until before + /// the first occurrence of [target]. + /// + /// If the range contains any occurrences of [target], + /// then all characters before the start of the first such occurrence + /// is removed from the range. + /// This advances the start of the range to the start of the + /// first occurrence of [target]. + /// + /// If there are no occurrences of [target] in the range, + /// all characteres in the range are removed, + /// which gives the same effect as [collapseToEnd]. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + bool dropUntil(Characters target); + + /// Drops characters from the start of the range while they satisfy [test]. + /// + /// Iterates the characters of the current range from the start + /// and removes all the iterated characters until one is + /// reached for which [test] returns `false`. + /// If on such character is found, all characters are removed, + /// which gives the same effect as [collapseToEnd]. + void dropWhile(bool Function(String) test); + + /// Drop the last [count] characters from the range. + /// + /// Retracts the end of the range to before the [count] last characters + /// of the range, or as many as are available if + /// there are fewer than [count] characters in the current range. + /// + /// The [count] must not be negative. + /// If it is zero, the range is not changed. + /// + /// Returns `true` if there are [count] characters in the range, + /// and `false` if there are fewer. + bool dropLast([int count = 1]); + + /// Drops the last occurrence of [target] in the range. + /// + /// If the range contains any occurrences of [target], + /// then all characters after the start of the first such occurrence + /// is removed from the range. + /// This retracts the end of the range to the start of the + /// last occurrence of [target]. + /// + /// If there are no occurrences of [target] in the range, + /// the range is not changed. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + bool dropBackTo(Characters target); + + /// Drops characters from the end of the range until after + /// the last occurrence of [target]. + /// + /// If the range contains any occurrences of [target], + /// then all characters after the end of the last such occurrence + /// is removed from the range. + /// This retracts the end of the range to the end of the + /// last occurrence of [target]. + /// + /// If there are no occurrences of [target] in the range, + /// all characteres in the range are removed, + /// which gives the same effect as [collapseToStart]. + /// + /// Returns `true` if there is an occurrence of [target] and `false` if not. + bool dropBackUntil(Characters target); + + /// Drops characters from the end of the range while they satisfy [test]. + /// + /// Iterates the characters of the current range backwards from the end + /// and removes all the iterated characters until one is + /// reached for which [test] returns `false`. + /// If on such character is found, all characters are removed, + /// which gives the same effect as [collapseToStart]. + void dropBackWhile(bool Function(String) test); + + /// Creates a new [Characters] sequence by replacing the current range. + /// + /// Replaces the current range in [source] with [replacement]. + /// + /// Returns a new [Characters] instance. Since the inserted characters + /// may combine with the preceding or following characters, grapheme cluster + /// boundaries need to be recomputed from scratch. + Characters replaceRange(Characters replacement); + + /// Replaces all occurrences of [pattern] in the range with [replacement]. + /// + /// Replaces the first occurrence of [pattern] in the range, then repeatedly + /// finds and replaces the next occurrence which does not overlap with + /// the earlier, already replaced, occurrence. + /// + /// Returns new [Characters] instance for the resulting string. + Characters replaceAll(Characters pattern, Characters replacement); + + /// Replaces the first occurrence of [pattern] with [replacement]. + /// + /// Finds the first occurrence of [pattern] in the current range, + /// then replaces that occurrence with [replacement] and returns + /// the [Characters] of that string. + /// + /// If there is no first occurrence of [pattern], then the + /// characters of the source string is returned. + Characters replaceFirst(Characters pattern, Characters replacement); + + /// Whether the current range starts with [characters]. + /// + /// Returns `true` if the characters of the current range starts with + /// [characters], `false` if not. + bool startsWith(Characters characters); + + /// Whether the current range ends with [characters]. + /// + /// Returns `true` if the characters of the current range ends with + /// [characters], `false` if not. + bool endsWith(Characters characters); + + /// Whether the current range is preceded by [characters]. + /// + /// Returns `true` if the characters immediately preceding the current + /// range are [characters], and `false` if not. + bool isPrecededBy(Characters characters); + + /// Whether the current range is followed by [characters]. + /// + /// Returns `true` if the characters immediately following the current + /// range are [characters], and `false` if not. + bool isFollowedBy(Characters characters); } diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index 2369eb9d..109d7501 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -2,32 +2,48 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -part of "characters.dart"; +import "dart:collection" show ListBase; + +import 'package:characters/src/grapheme_clusters/table.dart'; + +import "characters.dart"; +import "grapheme_clusters/constants.dart"; +import "grapheme_clusters/breaks.dart"; /// The grapheme clusters of a string. -class _Characters extends Iterable implements Characters { +/// +/// Backed by a single string. +class StringCharacters extends Iterable implements Characters { // Try to avoid allocating more empty grapheme clusters. - static const Characters _empty = const _Characters._(""); + static const StringCharacters _empty = const StringCharacters(""); final String string; - const _Characters._(this.string); + const StringCharacters(this.string); + + @override + CharacterRange get iterator => StringCharacterRange._(string, 0, 0); - factory _Characters(String string) => - string.isEmpty ? _empty : _Characters._(string); + @override + CharacterRange get iteratorAtEnd => + StringCharacterRange._(string, string.length, string.length); - Character get iterator => _Character(string); + StringCharacterRange get _rangeAll => + StringCharacterRange._(string, 0, string.length); + @override String get first => string.isEmpty ? throw StateError("No element") : string.substring( 0, Breaks(string, 0, string.length, stateSoTNoBreak).nextBreak()); + @override String get last => string.isEmpty ? throw StateError("No element") : string.substring( BackBreaks(string, string.length, 0, stateEoTNoBreak).nextBreak()); + @override String get single { if (string.isEmpty) throw StateError("No element"); int firstEnd = @@ -36,10 +52,13 @@ class _Characters extends Iterable implements Characters { throw StateError("Too many elements"); } + @override bool get isEmpty => string.isEmpty; + @override bool get isNotEmpty => string.isNotEmpty; + @override int get length { if (string.isEmpty) return 0; var brk = Breaks(string, 0, string.length, stateSoTNoBreak); @@ -48,6 +67,7 @@ class _Characters extends Iterable implements Characters { return length; } + @override Iterable whereType() { Iterable self = this; if (self is Iterable) { @@ -56,11 +76,13 @@ class _Characters extends Iterable implements Characters { return Iterable.empty(); } + @override String join([String separator = ""]) { if (separator == "") return string; - return _explodeReplace(separator, "", 0); + return _explodeReplace(string, 0, string.length, separator, ""); } + @override String lastWhere(bool test(String element), {String orElse()}) { int cursor = string.length; var brk = BackBreaks(string, cursor, 0, stateEoTNoBreak); @@ -74,6 +96,7 @@ class _Characters extends Iterable implements Characters { throw StateError("no element"); } + @override String elementAt(int index) { RangeError.checkNotNegative(index, "index"); int count = 0; @@ -90,162 +113,61 @@ class _Characters extends Iterable implements Characters { throw RangeError.index(index, this, "index", null, count); } + @override bool contains(Object other) { if (other is String) { if (other.isEmpty) return false; int next = Breaks(other, 0, other.length, stateSoTNoBreak).nextBreak(); if (next != other.length) return false; // [other] is single grapheme cluster. - return _indexOf(other, 0) >= 0; + return _indexOf(string, other, 0, string.length) >= 0; } return false; } - int indexOf(Characters other, [int startIndex]) { - int length = string.length; - if (startIndex == null) { - startIndex = 0; - } else { - RangeError.checkValidRange(startIndex, length, length, "startIndex"); - } - return _indexOf(other.string, startIndex); - } - - /// Finds first occurrence of [otherString] at grapheme cluster boundaries. - /// - /// Only finds occurrences starting at or after [startIndex]. - int _indexOf(String otherString, int startIndex) { - int otherLength = otherString.length; - if (otherLength == 0) { - return nextBreak(string, 0, string.length, startIndex); - } - int length = string.length; - while (startIndex + otherLength <= length) { - int matchIndex = string.indexOf(otherString, startIndex); - if (matchIndex < 0) return matchIndex; - if (isGraphemeClusterBoundary(string, 0, length, matchIndex) && - isGraphemeClusterBoundary( - string, 0, length, matchIndex + otherLength)) { - return matchIndex; - } - startIndex = matchIndex + 1; - } - return -1; - } - - /// Finds last occurrence of [otherString] at grapheme cluster boundaries. - /// - /// Starts searching backwards at [startIndex]. - int _lastIndexOf(String otherString, int startIndex) { - int otherLength = otherString.length; - if (otherLength == 0) { - return previousBreak(string, 0, string.length, startIndex); - } - int length = string.length; - while (startIndex >= 0) { - int matchIndex = string.lastIndexOf(otherString, startIndex); - if (matchIndex < 0) return matchIndex; - if (isGraphemeClusterBoundary(string, 0, length, matchIndex) && - isGraphemeClusterBoundary( - string, 0, length, matchIndex + otherLength)) { - return matchIndex; - } - startIndex = matchIndex - 1; - } - return -1; - } - - bool startsWith(Characters other, [int startIndex = 0]) { + @override + bool startsWith(Characters other) { int length = string.length; - RangeError.checkValueInInterval(startIndex, 0, length, "startIndex"); String otherString = other.string; if (otherString.isEmpty) return true; - return string.startsWith(otherString, startIndex) && - isGraphemeClusterBoundary( - string, 0, length, startIndex + otherString.length); + return string.startsWith(otherString) && + isGraphemeClusterBoundary(string, 0, length, otherString.length); } - bool endsWith(Characters other, [int endIndex]) { + @override + bool endsWith(Characters other) { int length = string.length; - if (endIndex == null) { - endIndex = length; - } else { - RangeError.checkValueInInterval(endIndex, 0, length, "endIndex"); - } String otherString = other.string; if (otherString.isEmpty) return true; int otherLength = otherString.length; - int start = endIndex - otherLength; + int start = string.length - otherLength; return start >= 0 && string.startsWith(otherString, start) && - isGraphemeClusterBoundary(string, 0, endIndex, start); + isGraphemeClusterBoundary(string, 0, length, start); } - Characters replaceAll(Characters pattern, Characters replacement, - [int startIndex = 0]) { - if (startIndex > 0) { - RangeError.checkValueInInterval( - startIndex, 0, string.length, "startIndex"); - } - if (pattern.string.isEmpty) { - if (string.isEmpty) return replacement; - var replacementString = replacement.string; - return Characters( - _explodeReplace(replacementString, replacementString, startIndex)); - } - int start = startIndex; - StringBuffer buffer; - int next = -1; - while ((next = this.indexOf(pattern, start)) >= 0) { - (buffer ??= StringBuffer()) - ..write(string.substring(start, next)) - ..write(replacement); - start = next + pattern.string.length; - } - if (buffer == null) return this; - buffer.write(string.substring(start)); - return Characters(buffer.toString()); - } - - // Replaces every internal grapheme cluster boundary with - // [internalReplacement] and adds [outerReplacement] at both ends - // Starts at [startIndex]. - String _explodeReplace( - String internalReplacement, String outerReplacement, int startIndex) { - var buffer = StringBuffer(string.substring(0, startIndex)); - var breaks = Breaks(string, startIndex, string.length, stateSoTNoBreak); - int index = 0; - String replacement = outerReplacement; - while ((index = breaks.nextBreak()) >= 0) { - buffer..write(replacement)..write(string.substring(startIndex, index)); - startIndex = index; - replacement = internalReplacement; - } - buffer.write(outerReplacement); - return buffer.toString(); - } + @override + Characters replaceAll(Characters pattern, Characters replacement) => + _rangeAll.replaceAll(pattern, replacement); - Characters replaceFirst(Characters source, Characters replacement, - [int startIndex = 0]) { - if (startIndex != 0) { - RangeError.checkValueInInterval( - startIndex, 0, string.length, "startIndex"); - } - int index = _indexOf(source.string, startIndex); - if (index < 0) return this; - return Characters(string.replaceRange( - index, index + source.string.length, replacement.string)); + @override + Characters replaceFirst(Characters pattern, Characters replacement) { + var range = _rangeAll; + if (!range.collapseToFirst(pattern)) return this; + return range.replaceRange(replacement); } - bool containsAll(Characters other) { - return _indexOf(other.string, 0) >= 0; - } + @override + bool containsAll(Characters other) => + _indexOf(string, other.string, 0, string.length) >= 0; + @override Characters skip(int count) { RangeError.checkNotNegative(count, "count"); if (count == 0) return this; if (string.isNotEmpty) { - var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + int stringLength = string.length; + var breaks = Breaks(string, 0, stringLength, stateSoTNoBreak); int startIndex = 0; while (count > 0) { int index = breaks.nextBreak(); @@ -256,11 +178,13 @@ class _Characters extends Iterable implements Characters { return _empty; } } - return _Characters(string.substring(startIndex)); + if (startIndex == stringLength) return _empty; + return StringCharacters(string.substring(startIndex)); } return this; } + @override Characters take(int count) { RangeError.checkNotNegative(count, "count"); if (count == 0) return _empty; @@ -270,26 +194,29 @@ class _Characters extends Iterable implements Characters { while (count > 0) { int index = breaks.nextBreak(); if (index >= 0) { - count--; endIndex = index; + count--; } else { return this; } } - return _Characters._(string.substring(0, endIndex)); + return StringCharacters(string.substring(0, endIndex)); } return this; } + @override Characters skipWhile(bool Function(String) test) { if (string.isNotEmpty) { - var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + int stringLength = string.length; + var breaks = Breaks(string, 0, stringLength, stateSoTNoBreak); int index = 0; int startIndex = 0; while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(startIndex, index))) { if (startIndex == 0) return this; - return _Characters._(string.substring(startIndex)); + if (startIndex == stringLength) return _empty; + return StringCharacters(string.substring(startIndex)); } startIndex = index; } @@ -297,6 +224,7 @@ class _Characters extends Iterable implements Characters { return _empty; } + @override Characters takeWhile(bool Function(String) test) { if (string.isNotEmpty) { var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); @@ -305,7 +233,7 @@ class _Characters extends Iterable implements Characters { while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(endIndex, index))) { if (endIndex == 0) return _empty; - return _Characters._(string.substring(0, endIndex)); + return StringCharacters(string.substring(0, endIndex)); } endIndex = index; } @@ -313,42 +241,18 @@ class _Characters extends Iterable implements Characters { return this; } - Characters where(bool Function(String) test) => - _Characters(super.where(test).join()); - - Characters operator +(Characters other) => _Characters(string + other.string); - - Characters getRange(int start, int end) { - RangeError.checkNotNegative(start, "start"); - if (end < start) throw RangeError.range(end, start, null, "end"); - if (string.isEmpty) return this; - var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); - int startIndex = 0; - int endIndex = string.length; - end -= start; - while (start > 0) { - int index = breaks.nextBreak(); - if (index >= 0) { - startIndex = index; - start--; - } else { - return _empty; - } - } - while (end > 0) { - int index = breaks.nextBreak(); - if (index >= 0) { - endIndex = index; - end--; - } else { - if (startIndex == 0) return this; - return _Characters(string.substring(startIndex)); - } - } - if (startIndex == 0 && endIndex == string.length) return this; - return _Characters(string.substring(startIndex, endIndex)); + @override + Characters where(bool Function(String) test) { + var string = super.where(test).join(); + if (string.isEmpty) return _empty; + return StringCharacters(super.where(test).join()); } + @override + Characters operator +(Characters other) => + StringCharacters(string + other.string); + + @override Characters skipLast(int count) { RangeError.checkNotNegative(count, "count"); if (count == 0) return this; @@ -364,11 +268,12 @@ class _Characters extends Iterable implements Characters { return _empty; } } - return _Characters(string.substring(0, endIndex)); + if (endIndex > 0) return StringCharacters(string.substring(0, endIndex)); } return _empty; } + @override Characters skipLastWhile(bool Function(String) test) { if (string.isNotEmpty) { var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); @@ -377,7 +282,7 @@ class _Characters extends Iterable implements Characters { while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(index, end))) { if (end == string.length) return this; - return _Characters(string.substring(0, end)); + return end == 0 ? _empty : StringCharacters(string.substring(0, end)); } end = index; } @@ -385,9 +290,10 @@ class _Characters extends Iterable implements Characters { return _empty; } + @override Characters takeLast(int count) { RangeError.checkNotNegative(count, "count"); - if (count == 0) return this; + if (count == 0) return _empty; if (string.isNotEmpty) { var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); int startIndex = string.length; @@ -400,11 +306,14 @@ class _Characters extends Iterable implements Characters { return this; } } - return _Characters(string.substring(startIndex)); + if (startIndex > 0) { + return StringCharacters(string.substring(startIndex)); + } } return this; } + @override Characters takeLastWhile(bool Function(String) test) { if (string.isNotEmpty) { var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); @@ -412,7 +321,8 @@ class _Characters extends Iterable implements Characters { int start = string.length; while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(index, start))) { - return _Characters(string.substring(start)); + if (start == string.length) return _empty; + return StringCharacters(string.substring(start)); } start = index; } @@ -420,179 +330,531 @@ class _Characters extends Iterable implements Characters { return this; } - int indexAfter(Characters other, [int startIndex]) { - int length = string.length; - String otherString = other.string; - int otherLength = otherString.length; - if (startIndex == null) { - startIndex = 0; + @override + Characters toLowerCase() => StringCharacters(string.toLowerCase()); + + @override + Characters toUpperCase() => StringCharacters(string.toUpperCase()); + + @override + bool operator ==(Object other) => + other is Characters && string == other.string; + + @override + int get hashCode => string.hashCode; + + @override + String toString() => string; + + @override + CharacterRange findFirst(Characters characters) { + var range = _rangeAll; + if (range.collapseToFirst(characters)) return range; + return null; + } + + @override + CharacterRange findLast(Characters characters) { + var range = _rangeAll; + if (range.collapseToLast(characters)) return range; + return null; + } +} + +/// A [CharacterRange] on a single string. +class StringCharacterRange implements CharacterRange { + /// The source string. + final String _string; + + /// Start index of range in string. + /// + /// The index is a code unit index in the [String]. + /// It is always at a grapheme cluster boundary. + int _start; + + /// End index of range in string. + /// + /// The index is a code unit index in the [String]. + /// It is always at a grapheme cluster boundary. + int _end; + + /// The [current] value is created lazily and cached to avoid repeated + /// or unnecessary string allocation. + String _currentCache; + + StringCharacterRange(String string) : this._(string, 0, 0); + StringCharacterRange._(this._string, this._start, this._end); + + /// Changes the current range. + /// + /// Resets all cached state. + void _move(int start, int end) { + _start = start; + _end = end; + _currentCache = null; + } + + /// Creates a [Breaks] from [_end] to `_string.length`. + /// + /// Uses information stored in [_state] for cases where the next + /// character has already been seen. + Breaks _breaksFromEnd() { + return Breaks(_string, _end, _string.length, stateSoTNoBreak); + } + + /// Creates a [Breaks] from string start to [_start]. + /// + /// Uses information stored in [_state] for cases where the previous + /// character has already been seen. + BackBreaks _backBreaksFromStart() { + return BackBreaks(_string, _start, 0, stateEoTNoBreak); + } + + @override + String get current => _currentCache ??= _string.substring(_start, _end); + + @override + bool moveNext([int count = 1]) => _advanceEnd(count, _end); + + bool _advanceEnd(int count, int newStart) { + if (count > 0) { + var state = stateSoTNoBreak; + int index = _end; + while (index < _string.length) { + int char = _string.codeUnitAt(index); + int category = categoryControl; + int nextIndex = index + 1; + if (char & 0xFC00 != 0xD800) { + category = low(char); + } else if (nextIndex < _string.length) { + int nextChar = _string.codeUnitAt(nextIndex); + if (nextChar & 0xFC00 == 0xDC00) { + nextIndex += 1; + category = high(char, nextChar); + } + } + state = move(state, category); + if (state & stateNoBreak == 0 && --count == 0) { + _move(newStart, index); + return true; + } + index = nextIndex; + } + _move(newStart, _string.length); + return count == 1 && state != stateSoTNoBreak; + } else if (count == 0) { + _move(newStart, _end); + return true; } else { - RangeError.checkValueInInterval(startIndex, 0, length, "startIndex"); + throw RangeError.range(count, 0, null, "count"); } - if (otherLength > startIndex) startIndex = otherLength; - int start = _indexOf(other.string, startIndex - otherLength); - if (start < 0) return start; - return start + otherLength; } - Characters insertAt(int index, Characters other) { - int length = string.length; - RangeError.checkValidRange(index, length, length, "index"); - if (string.isEmpty) { - assert(index == 0); - return other; + bool _moveNextPattern(String patternString, int start, int end) { + int offset = _indexOf(_string, patternString, start, end); + if (offset >= 0) { + _move(offset, offset + patternString.length); + return true; } - return _Characters._(string.replaceRange(index, index, other.string)); + return false; } - int lastIndexAfter(Characters other, [int startIndex]) { - String otherString = other.string; - int otherLength = otherString.length; - if (startIndex == null) { - startIndex = string.length; - } else { - RangeError.checkValueInInterval( - startIndex, 0, string.length, "startIndex"); + @override + bool moveBack([int count = 1]) => _retractStart(count, _start); + + bool _retractStart(int count, int newEnd) { + RangeError.checkNotNegative(count, "count"); + var breaks = _backBreaksFromStart(); + int start = _start; + while (count > 0) { + int nextBreak = breaks.nextBreak(); + if (nextBreak >= 0) { + start = nextBreak; + } else { + break; + } + count--; } - if (otherLength > startIndex) return -1; - int start = _lastIndexOf(otherString, startIndex - otherLength); - if (start < 0) return start; - return start + otherLength; + _move(start, newEnd); + return count == 0; } - int lastIndexOf(Characters other, [int startIndex]) { - if (startIndex == null) { - startIndex = string.length; - } else { - RangeError.checkValueInInterval( - startIndex, 0, string.length, "startIndex"); + bool _movePreviousPattern(String patternString, int start, int end) { + int offset = _lastIndexOf(_string, patternString, start, end); + if (offset >= 0) { + _move(offset, offset + patternString.length); + return true; } - return _lastIndexOf(other.string, startIndex); + return false; } - Characters replaceSubstring(int startIndex, int endIndex, Characters other) { - RangeError.checkValidRange( - startIndex, endIndex, string.length, "startIndex", "endIndex"); - if (startIndex == 0 && endIndex == string.length) return other; - return _Characters._( - string.replaceRange(startIndex, endIndex, other.string)); + @override + List get codeUnits => _CodeUnits(_string, _start, _end); + + @override + Runes get runes => Runes(current); + + @override + CharacterRange copy() { + return StringCharacterRange._(_string, _start, _end); } - Characters substring(int startIndex, [int endIndex]) { - endIndex = RangeError.checkValidRange( - startIndex, endIndex, string.length, "startIndex", "endIndex"); - return _Characters(string.substring(startIndex, endIndex)); + @override + void collapseToEnd() { + _move(_end, _end); } - Characters toLowerCase() => _Characters(string.toLowerCase()); + @override + void collapseToStart() { + _move(_start, _start); + } - Characters toUpperCase() => _Characters(string.toUpperCase()); + @override + bool dropFirst([int count = 1]) { + RangeError.checkNotNegative(count, "count"); + if (_start == _end) return count == 0; + var breaks = Breaks(_string, _start, _end, stateSoTNoBreak); + while (count > 0) { + int nextBreak = breaks.nextBreak(); + if (nextBreak >= 0) { + _start = nextBreak; + _currentCache = null; + count--; + } else { + return false; + } + } + return true; + } - bool operator ==(Object other) => - other is Characters && string == other.string; + @override + bool dropTo(Characters target) { + if (_start == _end) return target.isEmpty; + var targetString = target.string; + var index = _indexOf(_string, targetString, _start, _end); + if (index >= 0) { + _move(index + targetString.length, _end); + return true; + } + return false; + } - int get hashCode => string.hashCode; + @override + bool dropUntil(Characters target) { + if (_start == _end) return target.isEmpty; + var targetString = target.string; + var index = _indexOf(_string, targetString, _start, _end); + if (index >= 0) { + _move(index, _end); + return true; + } + _move(_end, _end); + return false; + } - String toString() => string; -} + @override + void dropWhile(bool Function(String) test) { + if (_start == _end) return; + var breaks = Breaks(_string, _start, _end, stateSoTNoBreak); + int cursor = _start; + int next = 0; + while ((next = breaks.nextBreak()) >= 0) { + if (!test(_string.substring(cursor, next))) { + break; + } + cursor = next; + } + _move(cursor, _end); + } -class _Character implements Character { - static const int _directionForward = 0; - static const int _directionBackward = 0x04; - static const int _directionMask = 0x04; - static const int _cursorDeltaMask = 0x03; + @override + bool dropLast([int count = 1]) { + RangeError.checkNotNegative(count, "count"); + var breaks = BackBreaks(_string, _end, _start, stateEoTNoBreak); + while (count > 0) { + int nextBreak = breaks.nextBreak(); + if (nextBreak >= 0) { + _end = nextBreak; + _currentCache = null; + count--; + } else { + return false; + } + } + return true; + } - final String _string; - int _start; - int _end; - // Encodes current state, - // whether we are moving forwards or backwards ([_directionMask]), - // and how far ahead the cursor is from the start/end ([_cursorDeltaMask]). - int _state; - // The [current] value is created lazily and cached to avoid repeated - // or unnecessary string allocation. - String _currentCache; + @override + bool dropBackTo(Characters target) { + if (_start == _end) return target.isEmpty; + var targetString = target.string; + var index = _lastIndexOf(_string, targetString, _start, _end); + if (index >= 0) { + _move(_start, index); + return true; + } + return false; + } + + @override + bool dropBackUntil(Characters target) { + if (_start == _end) return target.isEmpty; + var targetString = target.string; + var index = _lastIndexOf(_string, targetString, _start, _end); + if (index >= 0) { + _move(_start, index + targetString.length); + return true; + } + _move(_start, _start); + return false; + } - _Character(String string) : this._(string, 0, 0, stateSoTNoBreak); - _Character._(this._string, this._start, this._end, this._state); + @override + void dropBackWhile(bool Function(String) test) { + if (_start == _end) return; + var breaks = BackBreaks(_string, _end, _start, stateEoTNoBreak); + int cursor = _end; + int next = 0; + while ((next = breaks.nextBreak()) >= 0) { + if (!test(_string.substring(next, cursor))) { + break; + } + cursor = next; + } + _move(_start, cursor); + } - int get start => _start; - int get end => _end; + @override + bool expandNext([int count = 1]) => _advanceEnd(count, _start); - String get current => _currentCache ??= - (_start == _end ? null : _string.substring(_start, _end)); + @override + bool expandTo(Characters target) { + String targetString = target.string; + int index = _indexOf(_string, targetString, _end, _string.length); + if (index >= 0) { + _move(_start, index + targetString.length); + return true; + } + return false; + } - bool moveNext() { - int state = _state; + @override + void expandWhile(bool Function(String character) test) { + var breaks = _breaksFromEnd(); int cursor = _end; - if (state & _directionMask != _directionForward) { - state = stateSoTNoBreak; - } else { - cursor += state & _cursorDeltaMask; + int next = 0; + while ((next = breaks.nextBreak()) >= 0) { + if (!test(_string.substring(cursor, next))) { + break; + } + cursor = next; } - var breaks = Breaks(_string, cursor, _string.length, state); - var next = breaks.nextBreak(); - _currentCache = null; - _start = _end; - if (next >= 0) { - _end = next; - _state = - (breaks.state & 0xF0) | _directionForward | (breaks.cursor - next); + _move(_start, cursor); + } + + @override + void expandAll() { + _move(_start, _string.length); + } + + @override + bool expandBack([int count = 1]) => _retractStart(count, _end); + + @override + bool expandBackTo(Characters target) { + var targetString = target.string; + int index = _lastIndexOf(_string, targetString, 0, _start); + if (index >= 0) { + _move(index, _end); return true; } - _state = stateEoTNoBreak | _directionBackward; return false; } - bool movePrevious() { - int state = _state; + @override + void expandBackWhile(bool Function(String character) test) { + var breaks = _backBreaksFromStart(); int cursor = _start; - if (state & _directionMask == _directionForward) { - state = stateEoTNoBreak; - } else { - cursor -= state & _cursorDeltaMask; + int next = 0; + while ((next = breaks.nextBreak()) >= 0) { + if (!test(_string.substring(next, cursor))) { + _move(cursor, _end); + return; + } + cursor = next; } - var breaks = BackBreaks(_string, cursor, 0, state); - var next = breaks.nextBreak(); - _currentCache = null; - _end = _start; - if (next >= 0) { - _start = next; - _state = - (breaks.state & 0xF0) | _directionBackward | (next - breaks.cursor); + _move(0, _end); + } + + @override + bool expandBackUntil(Characters target) { + return _retractStartUntil(target.string, _end); + } + + @override + void expandBackAll() { + _move(0, _end); + } + + @override + bool expandUntil(Characters target) { + return _advanceEndUntil(target.string, _start); + } + + @override + bool get isEmpty => _start == _end; + + @override + bool get isNotEmpty => _start != _end; + + @override + bool moveBackUntil(Characters target) { + var targetString = target.string; + return _retractStartUntil(targetString, _start); + } + + bool _retractStartUntil(String targetString, int newEnd) { + var index = _lastIndexOf(_string, targetString, 0, _start); + if (index >= 0) { + _move(index + targetString.length, newEnd); return true; } - _state = stateSoTNoBreak | _directionForward; + _move(0, newEnd); return false; } - List get codeUnits => _CodeUnits(_string, _start, _end); + @override + bool collapseToFirst(Characters target) { + return _moveNextPattern(target.string, _start, _end); + } - Runes get runes => Runes(current); + @override + bool collapseToLast(Characters target) { + return _movePreviousPattern(target.string, _start, _end); + } - void reset(int index) { - RangeError.checkValueInInterval(index, 0, _string.length, "index"); - _reset(index); + @override + bool moveUntil(Characters target) { + var targetString = target.string; + return _advanceEndUntil(targetString, _end); } - void resetStart() { - _reset(0); + bool _advanceEndUntil(String targetString, int newStart) { + int index = _indexOf(_string, targetString, _end, _string.length); + if (index >= 0) { + _move(newStart, index); + return true; + } + _move(newStart, _string.length); + return false; } - void resetEnd() { - _state = stateEoTNoBreak | _directionBackward; - _currentCache = null; - _start = _end = _string.length; + @override + Characters replaceFirst(Characters pattern, Characters replacement) { + String patternString = pattern.string; + String replacementString = replacement.string; + if (patternString.isEmpty) { + return StringCharacters( + _string.replaceRange(_start, _start, replacementString)); + } + int index = _indexOf(_string, patternString, _start, _end); + String result = _string; + if (index >= 0) { + result = _string.replaceRange( + index, index + patternString.length, replacementString); + } + return StringCharacters(result); } - void _reset(int index) { - _state = stateSoTNoBreak | _directionForward; - _currentCache = null; - _start = _end = index; + @override + Characters replaceAll(Characters pattern, Characters replacement) { + var patternString = pattern.string; + var replacementString = replacement.string; + if (patternString.isEmpty) { + var replaced = _explodeReplace( + _string, _start, _end, replacementString, replacementString); + return StringCharacters(replaced); + } + if (_start == _end) return Characters(_string); + int start = 0; + int cursor = _start; + StringBuffer buffer; + while ((cursor = _indexOf(_string, patternString, cursor, _end)) >= 0) { + (buffer ??= StringBuffer()) + ..write(_string.substring(start, cursor)) + ..write(replacementString); + cursor += patternString.length; + start = cursor; + } + if (buffer == null) return Characters(_string); + buffer.write(_string.substring(start)); + return Characters(buffer.toString()); + } + + @override + Characters replaceRange(Characters replacement) { + return Characters(_string.replaceRange(_start, _end, replacement.string)); + } + + @override + Characters get source => Characters(_string); + + @override + bool startsWith(Characters characters) { + return _startsWith(_start, _end, characters.string); + } + + @override + bool endsWith(Characters characters) { + return _endsWith(_start, _end, characters.string); + } + + @override + bool isFollowedBy(Characters characters) { + return _startsWith(_end, _string.length, characters.string); + } + + @override + bool isPrecededBy(Characters characters) { + return _endsWith(0, _start, characters.string); + } + + bool _endsWith(int start, int end, String string) { + int length = string.length; + int stringStart = end - length; + return stringStart >= start && + _string.startsWith(string, stringStart) && + isGraphemeClusterBoundary(_string, start, end, stringStart); + } + + bool _startsWith(int start, int end, String string) { + int length = string.length; + int stringEnd = start + length; + return stringEnd <= end && + _string.startsWith(string, start) && + isGraphemeClusterBoundary(_string, start, end, stringEnd); + } + + @override + bool moveBackTo(Characters target) { + var targetString = target.string; + int index = _lastIndexOf(_string, targetString, 0, _start); + if (index >= 0) { + _move(index, index + targetString.length); + return true; + } + return false; } - Character copy() { - return _Character._(_string, _start, _end, _state); + @override + bool moveTo(Characters target) { + var targetString = target.string; + int index = _indexOf(_string, targetString, _end, _string.length); + if (index >= 0) { + _move(index, index + targetString.length); + return true; + } + return false; } } @@ -619,3 +881,106 @@ class _CodeUnits extends ListBase { throw UnsupportedError("Cannot modify an unmodifiable list"); } } + +String _explodeReplace(String string, int start, int end, + String internalReplacement, String outerReplacement) { + if (start == end) { + return string.replaceRange(start, start, outerReplacement); + } + var buffer = StringBuffer(string.substring(0, start)); + var breaks = Breaks(string, start, end, stateSoTNoBreak); + int index = 0; + String replacement = outerReplacement; + while ((index = breaks.nextBreak()) >= 0) { + buffer..write(replacement)..write(string.substring(start, index)); + start = index; + replacement = internalReplacement; + } + buffer..write(outerReplacement)..write(string.substring(end)); + return buffer.toString(); +} + +/// Finds [pattern] in the range from [start] to [end]. +/// +/// Both [start] and [end] are grapheme cluster boundaries in the +/// [source] string. +int _indexOf(String source, String pattern, int start, int end) { + int patternLength = pattern.length; + if (patternLength == 0) return start; + // Any start position after realEnd won't fit the pattern before end. + int realEnd = end - patternLength; + if (realEnd < start) return -1; + // Use indexOf if what we can overshoot is + // less than twice as much as what we have left to search. + int rest = source.length - realEnd; + if (rest <= (realEnd - start) * 2) { + int index = 0; + while (start < realEnd && (index = source.indexOf(pattern, start)) >= 0) { + if (index > realEnd) return -1; + if (isGraphemeClusterBoundary(source, start, end, index) && + isGraphemeClusterBoundary( + source, start, end, index + patternLength)) { + return index; + } + start = index + 1; + } + return -1; + } + return _gcIndexOf(source, pattern, start, end); +} + +int _gcIndexOf(String source, String pattern, int start, int end) { + var breaks = Breaks(source, start, end, stateSoT); + int index = 0; + while ((index = breaks.nextBreak()) >= 0) { + int endIndex = index + pattern.length; + if (endIndex > end) break; + if (source.startsWith(pattern, index) && + isGraphemeClusterBoundary(source, start, end, endIndex)) { + return index; + } + } + return -1; +} + +/// Finds pattern in the range from [start] to [end]. +/// Both [start] and [end] are grapheme cluster boundaries in the +/// [source] string. +int _lastIndexOf(String source, String pattern, int start, int end) { + int patternLength = pattern.length; + if (patternLength == 0) return end; + // Start of pattern must be in range [start .. end - patternLength]. + int realEnd = end - patternLength; + if (realEnd < start) return -1; + // If the range from 0 to start is no more than double the range from + // start to end, use lastIndexOf. + if (realEnd * 2 > start) { + int index = 0; + while (realEnd >= start && + (index = source.lastIndexOf(pattern, realEnd)) >= 0) { + if (index < start) return -1; + if (isGraphemeClusterBoundary(source, start, end, index) && + isGraphemeClusterBoundary( + source, start, end, index + patternLength)) { + return index; + } + realEnd = index - 1; + } + return -1; + } + return _gcLastIndexOf(source, pattern, start, end); +} + +int _gcLastIndexOf(String source, String pattern, int start, int end) { + var breaks = BackBreaks(source, end, start, stateEoT); + int index = 0; + while ((index = breaks.nextBreak()) >= 0) { + int startIndex = index - pattern.length; + if (startIndex < start) break; + if (source.startsWith(pattern, startIndex) && + isGraphemeClusterBoundary(source, start, end, startIndex)) { + return startIndex; + } + } + return -1; +} diff --git a/pkgs/characters/lib/src/grapheme_clusters/breaks.dart b/pkgs/characters/lib/src/grapheme_clusters/breaks.dart index 1460e050..9a41609f 100644 --- a/pkgs/characters/lib/src/grapheme_clusters/breaks.dart +++ b/pkgs/characters/lib/src/grapheme_clusters/breaks.dart @@ -329,6 +329,8 @@ int previousBreak(String text, int start, int end, int index) { } /// The next break no earlier than [position] in `string.substring(start, end)`. +/// +/// The index need not be at a grapheme cluster boundary. int nextBreak(String text, int start, int end, int index) { assert(0 <= start); assert(start <= index); diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index db261081..5f1858cb 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 0.1.0 +version: 0.2.0 environment: sdk: "^2.4.0" dev_dependencies: diff --git a/pkgs/characters/test/characters_test.dart b/pkgs/characters/test/characters_test.dart index 7039038b..cbb6e039 100644 --- a/pkgs/characters/test/characters_test.dart +++ b/pkgs/characters/test/characters_test.dart @@ -22,119 +22,50 @@ void main([List args]) { : Random().nextInt(0x3FFFFFFF); random = Random(seed); group("[Random Seed: $seed]", tests); - group("index", () { - test("simple", () { - var flag = "\u{1F1E9}\u{1F1F0}"; - var string = "Hi $flag!"; // Regional Indications "DK". + group("characters", () { + test("operations", () { + var flag = "\u{1F1E9}\u{1F1F0}"; // Regional Indicators "DK". + var string = "Hi $flag!"; expect(string.length, 8); - expect(gc(string).toList(), ["H", "i", " ", flag, "!"]); - - expect(gc(string).indexOf(gc("")), 0); - expect(gc(string).indexOf(gc(""), 3), 3); - expect(gc(string).indexOf(gc(""), 4), 7); - expect(gc(string).indexOf(gc(flag)), 3); - expect(gc(string).indexOf(gc(flag), 3), 3); - expect(gc(string).indexOf(gc(flag), 4), lessThan(0)); - - expect(gc(string).indexAfter(gc("")), 0); - expect(gc(string).indexAfter(gc(""), 3), 3); - expect(gc(string).indexAfter(gc(""), 4), 7); - expect(gc(string).indexAfter(gc(flag)), 7); - expect(gc(string).indexAfter(gc(flag), 7), 7); - expect(gc(string).indexAfter(gc(flag), 8), lessThan(0)); - - expect(gc(string).lastIndexOf(gc("")), string.length); - expect(gc(string).lastIndexOf(gc(""), 7), 7); - expect(gc(string).lastIndexOf(gc(""), 6), 3); - expect(gc(string).lastIndexOf(gc(""), 0), 0); - expect(gc(string).lastIndexOf(gc(flag)), 3); - expect(gc(string).lastIndexOf(gc(flag), 6), 3); - expect(gc(string).lastIndexOf(gc(flag), 2), lessThan(0)); - - expect(gc(string).lastIndexAfter(gc("")), string.length); - expect(gc(string).lastIndexAfter(gc(""), 7), 7); - expect(gc(string).lastIndexAfter(gc(""), 6), 3); - expect(gc(string).lastIndexAfter(gc(""), 0), 0); - expect(gc(string).lastIndexAfter(gc(flag)), 7); - expect(gc(string).lastIndexAfter(gc(flag), 7), 7); - expect(gc(string).lastIndexAfter(gc(flag), 6), lessThan(0)); - }); - test("multiple", () { - var flag = "\u{1F1E9}\u{1F1F0}"; // DK. - var revFlag = "\u{1F1F0}\u{1F1E9}"; // KD. - var string = "-${flag}-$flag$flag-"; - expect(gc(string).indexOf(gc(flag)), 1); - expect(gc(string).indexOf(gc(flag), 2), 6); - expect(gc(string).indexOf(gc(flag), 6), 6); - expect(gc(string).indexOf(gc(flag), 7), 10); - expect(gc(string).indexOf(gc(flag), 10), 10); - expect(gc(string).indexOf(gc(flag), 11), lessThan(0)); - - expect(gc(string).indexOf(gc(revFlag)), lessThan(0)); + var cs = gc(string); + expect(cs.length, 5); + expect(cs.toList(), ["H", "i", " ", flag, "!"]); + expect(cs.skip(2).toString(), " $flag!"); + expect(cs.skipLast(2).toString(), "Hi "); + expect(cs.take(2).toString(), "Hi"); + expect(cs.takeLast(2).toString(), "$flag!"); + + expect(cs.contains("\u{1F1E9}"), false); + expect(cs.contains(flag), true); + expect(cs.contains("$flag!"), false); + expect(cs.containsAll(gc("$flag!")), true); + + expect(cs.takeWhile((x) => x != " ").toString(), "Hi"); + expect(cs.takeLastWhile((x) => x != " ").toString(), "$flag!"); + expect(cs.skipWhile((x) => x != " ").toString(), " $flag!"); + expect(cs.skipLastWhile((x) => x != " ").toString(), "Hi "); + + expect(cs.findFirst(gc("")).moveBack(), false); + expect(cs.findFirst(gc(flag)).current, flag); + expect(cs.findLast(gc(flag)).current, flag); + expect(cs.iterator.moveNext(), true); + expect(cs.iterator.moveBack(), false); + expect((cs.iterator..moveNext()).current, "H"); + expect(cs.iteratorAtEnd.moveNext(), false); + expect(cs.iteratorAtEnd.moveBack(), true); + expect((cs.iteratorAtEnd..moveBack()).current, "!"); }); - test("nonBoundary", () { - // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. - var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. - var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. - var zwj = "\u200d"; // U+200D, ZWJ - var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram - var flagRainbow = "$flag$white$zwj$rainbow"; - expect(gc(flagRainbow).length, 1); - for (var part in [flag, white, zwj, rainbow]) { - expect(gc(flagRainbow).indexOf(gc(part)), lessThan(0)); - expect(gc(flagRainbow).indexAfter(gc(part)), lessThan(0)); - expect(gc(flagRainbow).lastIndexOf(gc(part)), lessThan(0)); - expect(gc(flagRainbow).lastIndexAfter(gc(part)), lessThan(0)); - } - expect(gc(flagRainbow + flagRainbow).indexOf(gc(flagRainbow)), 0); - expect(gc(flagRainbow + flagRainbow).indexAfter(gc(flagRainbow)), 6); - expect(gc(flagRainbow + flagRainbow).lastIndexOf(gc(flagRainbow)), 6); - expect(gc(flagRainbow + flagRainbow).lastIndexAfter(gc(flagRainbow)), 12); - // 1 11 11 11 2 - // indices 0 67 90 12 34 67 3 - var partsAndWhole = - "$flagRainbow $flag $white $zwj $rainbow $flagRainbow"; - // Flag and rainbow are independent graphemes. - expect(gc(partsAndWhole).toList(), [ - flagRainbow, - " ", - flag, - " $white", // Other + Extend - " $zwj", // Other + ZWJ - " ", - rainbow, - " ", - flagRainbow - ]); - expect(gc(partsAndWhole).indexOf(gc(flag)), 7); - expect(gc(partsAndWhole).indexAfter(gc(flag)), 9); - expect(gc(partsAndWhole).lastIndexOf(gc(flag)), 7); - expect(gc(partsAndWhole).lastIndexAfter(gc(flag)), 9); - - expect(gc(partsAndWhole).indexOf(gc(rainbow)), 14); - expect(gc(partsAndWhole).indexAfter(gc(rainbow)), 16); - expect(gc(partsAndWhole).lastIndexOf(gc(rainbow)), 14); - expect(gc(partsAndWhole).lastIndexAfter(gc(rainbow)), 16); - - expect(gc(partsAndWhole).indexOf(gc(white)), lessThan(0)); - expect(gc(partsAndWhole).indexAfter(gc(white)), lessThan(0)); - expect(gc(partsAndWhole).lastIndexOf(gc(white)), lessThan(0)); - expect(gc(partsAndWhole).lastIndexAfter(gc(white)), lessThan(0)); - expect(gc(partsAndWhole).indexOf(gc(" $white")), 9); - expect(gc(partsAndWhole).indexAfter(gc(" $white")), 11); - expect(gc(partsAndWhole).lastIndexOf(gc(" $white")), 9); - expect(gc(partsAndWhole).lastIndexAfter(gc(" $white")), 11); - - expect(gc(partsAndWhole).indexOf(gc(zwj)), lessThan(0)); - expect(gc(partsAndWhole).indexAfter(gc(zwj)), lessThan(0)); - expect(gc(partsAndWhole).lastIndexOf(gc(zwj)), lessThan(0)); - expect(gc(partsAndWhole).lastIndexAfter(gc(zwj)), lessThan(0)); - expect(gc(partsAndWhole).indexOf(gc(" $zwj")), 11); - expect(gc(partsAndWhole).indexAfter(gc(" $zwj")), 13); - expect(gc(partsAndWhole).lastIndexOf(gc(" $zwj")), 11); - expect(gc(partsAndWhole).lastIndexAfter(gc(" $zwj")), 13); - }); + testParts(gc("a"), gc("b"), gc("c"), gc("d"), gc("e")); + + // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. + var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. + var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. + var zwj = "\u200d"; // U+200D, ZWJ + var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram + + testParts(gc("$flag$white$zwj$rainbow"), gc("$flag$white"), gc("$rainbow"), + gc("$flag$zwj$rainbow"), gc("!")); }); } @@ -277,22 +208,7 @@ void expectGC(Characters actual, List expected) { expected.take(expected.length - 1).join()); expect(actual.takeLast(1).toString(), expected.skip(expected.length - 1).join()); - - expect(actual.indexOf(gc(expected.first)), 0); - expect(actual.indexAfter(gc(expected.first)), expected.first.length); - expect(actual.lastIndexOf(gc(expected.last)), - text.length - expected.last.length); - expect(actual.lastIndexAfter(gc(expected.last)), text.length); - if (expected.length > 1) { - if (expected[0] != expected[1]) { - expect(actual.indexOf(gc(expected[1])), expected[0].length); - } - } } - - expect(actual.getRange(1, 3).toString(), expected.take(3).skip(1).join()); - expect(actual.getRange(1, 3).toString(), expected.take(3).skip(1).join()); - bool isEven(String s) => s.length.isEven; expect( @@ -313,48 +229,27 @@ void expectGC(Characters actual, List expected) { expect((actual + actual).toString(), actual.string + actual.string); - List accumulatedLengths = [0]; - for (int i = 0; i < expected.length; i++) { - accumulatedLengths.add(accumulatedLengths.last + expected[i].length); - } - // Iteration. var it = actual.iterator; - expect(it.start, 0); - expect(it.end, 0); + expect(it.isEmpty, true); for (var i = 0; i < expected.length; i++) { expect(it.moveNext(), true); - expect(it.start, accumulatedLengths[i]); - expect(it.end, accumulatedLengths[i + 1]); expect(it.current, expected[i]); expect(actual.elementAt(i), expected[i]); expect(actual.skip(i).first, expected[i]); } expect(it.moveNext(), false); - expect(it.start, accumulatedLengths.last); - expect(it.end, accumulatedLengths.last); for (var i = expected.length - 1; i >= 0; i--) { - expect(it.movePrevious(), true); - expect(it.start, accumulatedLengths[i]); - expect(it.end, accumulatedLengths[i + 1]); + expect(it.moveBack(), true); expect(it.current, expected[i]); } - expect(it.movePrevious(), false); - expect(it.start, 0); - expect(it.end, 0); + expect(it.moveBack(), false); + expect(it.isEmpty, true); // GraphemeClusters operations. - expect(actual.toUpperCase().toString(), text.toUpperCase()); - expect(actual.toLowerCase().toString(), text.toLowerCase()); - - if (text.isNotEmpty) { - expect(actual.insertAt(1, gc("abc")).toString(), - text.replaceRange(1, 1, "abc")); - expect(actual.replaceSubstring(0, 1, gc("abc")).toString(), - text.replaceRange(0, 1, "abc")); - expect(actual.substring(0, 1).string, actual.string.substring(0, 1)); - } + expect(actual.toUpperCase().string, text.toUpperCase()); + expect(actual.toLowerCase().string, text.toLowerCase()); expect(actual.string, text); @@ -368,36 +263,9 @@ void expectGC(Characters actual, List expected) { expect(actual.endsWith(gc(expected.sublist(i).join())), true); for (int t = s + 1; t <= steps; t++) { int j = expected.length * t ~/ steps; - int start = accumulatedLengths[i]; - int end = accumulatedLengths[j]; var slice = expected.sublist(i, j).join(); var gcs = gc(slice); expect(actual.containsAll(gcs), true); - expect(actual.startsWith(gcs, start), true); - expect(actual.endsWith(gcs, end), true); - } - } - if (accumulatedLengths.last > expected.length) { - int i = expected.indexWhere((s) => s.length != 1); - assert(accumulatedLengths[i + 1] > accumulatedLengths[i] + 1); - expect( - actual.startsWith(gc(text.substring(0, accumulatedLengths[i] + 1))), - false); - expect(actual.endsWith(gc(text.substring(accumulatedLengths[i] + 1))), - false); - if (i > 0) { - expect( - actual.startsWith( - gc(text.substring(1, accumulatedLengths[i] + 1)), 1), - false); - } - if (i < expected.length - 1) { - int secondToLast = accumulatedLengths[expected.length - 1]; - expect( - actual.endsWith( - gc(text.substring(accumulatedLengths[i] + 1, secondToLast)), - secondToLast), - false); } } } @@ -408,7 +276,7 @@ void expectGC(Characters actual, List expected) { int pos = -1; if (random.nextBool()) { pos = expected.length; - it.reset(text.length); + it = actual.iteratorAtEnd; } int steps = 5 + random.nextInt(expected.length * 2 + 1); bool lastMove = false; @@ -416,23 +284,19 @@ void expectGC(Characters actual, List expected) { bool back = false; if (pos < 0) { expect(lastMove, false); - expect(it.start, 0); - expect(it.end, 0); + expect(it.isEmpty, true); } else if (pos >= expected.length) { expect(lastMove, false); - expect(it.start, text.length); - expect(it.end, text.length); + expect(it.isEmpty, true); back = true; } else { expect(lastMove, true); expect(it.current, expected[pos]); - expect(it.start, accumulatedLengths[pos]); - expect(it.end, accumulatedLengths[pos + 1]); back = random.nextBool(); } if (--steps < 0) break; if (back) { - lastMove = it.movePrevious(); + lastMove = it.moveBack(); pos -= 1; } else { lastMove = it.moveNext(); @@ -443,3 +307,249 @@ void expectGC(Characters actual, List expected) { } Characters gc(String string) => Characters(string); + +void testParts( + Characters a, Characters b, Characters c, Characters d, Characters e) { + var cs = gc("$a$b$c$d$e"); + test("$cs", () { + var it = cs.iterator; + expect(it.isEmpty, true); + expect(it.isNotEmpty, false); + expect(it.current, ""); + + // moveNext(). + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$a"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$b"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$c"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$d"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$e"); + expect(it.moveNext(), false); + expect(it.isEmpty, true); + expect(it.current, ""); + + // moveBack(). + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$e"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$d"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$c"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$b"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$a"); + expect(it.moveBack(), false); + expect(it.isEmpty, true); + expect(it.current, ""); + + // moveNext(int). + expect(it.moveTo(c), true); + expect(it.current, "$c"); + expect(it.moveTo(b), false); + expect(it.moveTo(c), false); + expect(it.current, "$c"); + expect(it.moveTo(d), true); + expect(it.current, "$d"); + + // moveBack(c). + expect(it.moveBackTo(c), true); + expect(it.current, "$c"); + expect(it.moveBackTo(d), false); + expect(it.moveBackTo(c), false); + expect(it.moveBackTo(a), true); + expect(it.current, "$a"); + + // moveNext(n) + expect(it.moveBack(), false); + + expect(it.moveNext(2), true); + expect(it.current, "$a$b"); + expect(it.moveNext(4), false); + expect(it.current, "$c$d$e"); + expect(it.moveNext(0), true); + expect(it.current, ""); + expect(it.moveNext(1), false); + expect(it.current, ""); + + // moveBack(n). + expect(it.moveBack(2), true); + expect(it.current, "$d$e"); + expect(it.moveBack(1), true); + expect(it.current, "$c"); + expect(it.moveBack(3), false); + expect(it.current, "$a$b"); + expect(it.moveBack(), false); + + // moveFirst. + it.expandAll(); + expect(it.current, "$a$b$c$d$e"); + expect(it.collapseToFirst(b), true); + expect(it.current, "$b"); + it.expandAll(); + expect(it.current, "$b$c$d$e"); + expect(it.collapseToFirst(a), false); + expect(it.current, "$b$c$d$e"); + + // moveBackTo + it.expandBackAll(); + expect(it.current, "$a$b$c$d$e"); + expect(it.collapseToLast(c), true); + expect(it.current, "$c"); + + // includeNext/includePrevious + expect(it.expandTo(e), true); + expect(it.current, "$c$d$e"); + expect(it.expandTo(e), false); + expect(it.expandBackTo(b), true); + expect(it.current, "$b$c$d$e"); + expect(it.expandBackTo(b), false); + expect(it.current, "$b$c$d$e"); + expect(it.collapseToFirst(c), true); + expect(it.current, "$c"); + + // includeUntilNext/expandBackUntil + expect(it.expandBackUntil(a), true); + expect(it.current, "$b$c"); + expect(it.expandBackUntil(a), true); + expect(it.current, "$b$c"); + expect(it.expandUntil(e), true); + expect(it.current, "$b$c$d"); + expect(it.expandUntil(e), true); + expect(it.current, "$b$c$d"); + + // dropFirst/dropLast + expect(it.dropFirst(), true); + expect(it.current, "$c$d"); + expect(it.dropLast(), true); + expect(it.current, "$c"); + it.expandBackAll(); + it.expandAll(); + expect(it.current, "$a$b$c$d$e"); + expect(it.dropTo(b), true); + expect(it.current, "$c$d$e"); + expect(it.dropBackTo(d), true); + expect(it.current, "$c"); + + it.expandBackAll(); + it.expandAll(); + expect(it.current, "$a$b$c$d$e"); + + expect(it.dropUntil(b), true); + expect(it.current, "$b$c$d$e"); + expect(it.dropBackUntil(d), true); + expect(it.current, "$b$c$d"); + + it.dropWhile((x) => x == b.string); + expect(it.current, "$c$d"); + it.expandBackAll(); + expect(it.current, "$a$b$c$d"); + it.dropBackWhile((x) => x != b.string); + expect(it.current, "$a$b"); + it.dropBackWhile((x) => false); + expect(it.current, "$a$b"); + + // include..While + it.expandWhile((x) => false); + expect(it.current, "$a$b"); + it.expandWhile((x) => x != e.string); + expect(it.current, "$a$b$c$d"); + expect(it.collapseToFirst(c), true); + expect(it.current, "$c"); + it.expandBackWhile((x) => false); + expect(it.current, "$c"); + it.expandBackWhile((x) => x != a.string); + expect(it.current, "$b$c"); + + var cs2 = cs.replaceAll(c, gc("")); + var cs3 = cs.replaceFirst(c, gc("")); + var cs4 = cs.findFirst(c).replaceRange(gc("")); + var cse = gc("$a$b$d$e"); + expect(cs2, cse); + expect(cs3, cse); + expect(cs4, cse); + var cs5 = cs4.replaceAll(a, c); + expect(cs5, gc("$c$b$d$e")); + var cs6 = cs5.replaceAll(gc(""), a); + expect(cs6, gc("$a$c$a$b$a$d$a$e$a")); + var cs7 = cs6.replaceFirst(b, a); + expect(cs7, gc("$a$c$a$a$a$d$a$e$a")); + var cs8 = cs7.replaceFirst(e, a); + expect(cs8, gc("$a$c$a$a$a$d$a$a$a")); + var cs9 = cs8.replaceAll(a + a, b); + expect(cs9, gc("$a$c$b$a$d$b$a")); + it = cs9.iterator; + it.moveTo(b + a); + expect("$b$a", it.current); + it.expandTo(b + a); + expect("$b$a$d$b$a", it.current); + var cs10 = it.replaceAll(b + a, e + e); + expect(cs10, gc("$a$c$e$e$d$e$e")); + var cs11 = it.replaceRange(e); + expect(cs11, gc("$a$c$e")); + + expect(cs.startsWith(gc("")), true); + expect(cs.startsWith(a), true); + expect(cs.startsWith(a + b), true); + expect(cs.startsWith(gc("$a$b$c")), true); + expect(cs.startsWith(gc("$a$b$c$d")), true); + expect(cs.startsWith(gc("$a$b$c$d$e")), true); + expect(cs.startsWith(b), false); + expect(cs.startsWith(c), false); + expect(cs.startsWith(d), false); + expect(cs.startsWith(e), false); + + expect(cs.endsWith(gc("")), true); + expect(cs.endsWith(e), true); + expect(cs.endsWith(d + e), true); + expect(cs.endsWith(gc("$c$d$e")), true); + expect(cs.endsWith(gc("$b$c$d$e")), true); + expect(cs.endsWith(gc("$a$b$c$d$e")), true); + expect(cs.endsWith(d), false); + expect(cs.endsWith(c), false); + expect(cs.endsWith(b), false); + expect(cs.endsWith(a), false); + + it = cs.findFirst(b + c); + expect(it.startsWith(gc("")), true); + expect(it.startsWith(b), true); + expect(it.startsWith(b + c), true); + expect(it.startsWith(a + b + c), false); + expect(it.startsWith(b + c + d), false); + expect(it.startsWith(a), false); + + expect(it.endsWith(gc("")), true); + expect(it.endsWith(c), true); + expect(it.endsWith(b + c), true); + expect(it.endsWith(a + b + c), false); + expect(it.endsWith(b + c + d), false); + expect(it.endsWith(d), false); + + it.collapseToFirst(c); + expect(it.isPrecededBy(gc("")), true); + expect(it.isPrecededBy(b), true); + expect(it.isPrecededBy(a + b), true); + expect(it.isPrecededBy(a + b + c), false); + expect(it.isPrecededBy(a), false); + + expect(it.isFollowedBy(gc("")), true); + expect(it.isFollowedBy(d), true); + expect(it.isFollowedBy(d + e), true); + expect(it.isFollowedBy(c + d + e), false); + expect(it.isFollowedBy(e), false); + }); +} From 265a6f1a6935ee576e73366a01742ed6c04b6ed2 Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Tue, 22 Oct 2019 16:34:11 +0200 Subject: [PATCH 08/82] Change replace to keep its position in the new result. Add a few members. (dart-lang/characters#8) Add move-operations to character range for selecting everything before or after the current range. Add getters for the characters or strings before and after the current range (and characters of the current range, to complement `current` which returns a string). Change replace operations to return a range on the replaced result which contains the original range post-modification. --- pkgs/characters/.travis.yml | 2 +- pkgs/characters/lib/src/characters.dart | 97 ++++++++++++++----- pkgs/characters/lib/src/characters_impl.dart | 86 +++++++++++----- .../lib/src/grapheme_clusters/breaks.dart | 4 +- pkgs/characters/pubspec.yaml | 4 +- pkgs/characters/test/characters_test.dart | 70 ++++++++++++- 6 files changed, 209 insertions(+), 54 deletions(-) diff --git a/pkgs/characters/.travis.yml b/pkgs/characters/.travis.yml index 5ed3b1d8..27cdad66 100644 --- a/pkgs/characters/.travis.yml +++ b/pkgs/characters/.travis.yml @@ -1,7 +1,7 @@ language: dart dart: - dev -- 2.4.0 +- 2.5.0 # Only building master means that we don't run two builds for each pull request. dart_task: - test: --platform vm,chrome diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index 3e5170c0..eec3ca89 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -178,15 +178,20 @@ abstract class Characters implements Iterable { /// Replaces [pattern] with [replacement]. /// - /// Returns a new [GrapehemeClusters] where all occurrences of the - /// [pattern] character sequence are replaced by [replacement], - /// unless the occurrence overlaps a prior replaced sequence. + /// Returns a new [Characters] sequence where all occurrences of the + /// [pattern] characters are replaced by [replacement], + /// unless the occurrence overlaps a prior + /// replaced occurrence of [pattern]. + /// + /// Returns the current characters if there is no occurrence of [pattern]. Characters replaceAll(Characters pattern, Characters replacement); - /// Replaces the first [pattern] with [replacement]. + /// Replaces the first occurrence of [pattern] with [replacement]. /// /// Returns a new [Characters] where the first occurence of the /// [pattern] character sequence, if any, is replaced by [replacement]. + /// + /// Returns the current characters if there is no occurrence of [pattern]. Characters replaceFirst(Characters pattern, Characters replacement); /// The characters of the lower-case version of [string]. @@ -250,7 +255,22 @@ abstract class CharacterRange implements Iterator { /// The code points of the current character range. Runes get runes; - /// Creates a copy of this [Character]. + /// The characters of this range. + Characters get currentCharacters; + + /// The characters before the current range. + Characters get charactersBefore; + + /// The characters after the current range. + Characters get charactersAfter; + + /// The string of the characters before the current range. + String get stringBefore; + + /// The string of the characters after the current range. + String get stringAfter; + + /// Creates a copy of this [CharacterRange]. /// /// The copy is in the exact same state as this iterator. /// Can be used to iterate the following characters more than once @@ -283,6 +303,9 @@ abstract class CharacterRange implements Iterator { /// and `false` if not. bool moveNext([int count = 1]); + /// Moves the range to be everything after the current range. + void moveNextAll(); + /// Moves the range to the next occurrence of [target] /// after the current range. /// @@ -325,6 +348,9 @@ abstract class CharacterRange implements Iterator { /// and `false` if not. bool moveBack([int count = 1]); + /// Moves the range to be everything before the current range. + void moveBackAll(); + /// Moves the range to the last occurrence of [target] /// before the current range. /// @@ -587,33 +613,58 @@ abstract class CharacterRange implements Iterator { /// which gives the same effect as [collapseToStart]. void dropBackWhile(bool Function(String) test); - /// Creates a new [Characters] sequence by replacing the current range. + /// Replaces the current range with [replacement] and returns the result. /// - /// Replaces the current range in [source] with [replacement]. + /// Replaces the current range in [source] with [replacement] + /// and returns a range of the resulting characters + /// which contains the replacement characters. /// - /// Returns a new [Characters] instance. Since the inserted characters - /// may combine with the preceding or following characters, grapheme cluster - /// boundaries need to be recomputed from scratch. - Characters replaceRange(Characters replacement); + /// The inserted characters may combine with + /// the preceding or following code points, + /// so that the start and end of the original range + /// are no longer grapheme cluster boundaries. + /// In that case, the returned range may extend into into the code points + /// before and after the original range. + CharacterRange replaceRange(Characters replacement); - /// Replaces all occurrences of [pattern] in the range with [replacement]. + /// Replaces [pattern] in the current range with [replacement]. /// - /// Replaces the first occurrence of [pattern] in the range, then repeatedly - /// finds and replaces the next occurrence which does not overlap with - /// the earlier, already replaced, occurrence. + /// Replaces all occurrences of [pattern] in the current range with + /// [replacement], unless they overlap with an earlier occurrence of + /// [pattern] which was replaced. + /// Then returns a range on the resulting characters + /// which contains all inserted replacement characters + /// and any remaining characters of the original range. /// - /// Returns new [Characters] instance for the resulting string. - Characters replaceAll(Characters pattern, Characters replacement); + /// The inserted characters may combine with + /// the preceding or following code points, + /// so that the start and end of the original range + /// are no longer grapheme cluster boundaries. + /// In that case, the returned range may extend into into the code points + /// before and after the original range. + /// + /// Returns `null` if there are no occurrences of [pattern] + /// in the current range. + CharacterRange /*?*/ replaceAll(Characters pattern, Characters replacement); /// Replaces the first occurrence of [pattern] with [replacement]. /// /// Finds the first occurrence of [pattern] in the current range, - /// then replaces that occurrence with [replacement] and returns - /// the [Characters] of that string. - /// - /// If there is no first occurrence of [pattern], then the - /// characters of the source string is returned. - Characters replaceFirst(Characters pattern, Characters replacement); + /// then replaces that occurrence with [replacement]. + /// Then returns a range on the resulting characters + /// which contains the inserted replacement characters + /// and any remaining characters of the original range. + /// + /// The inserted characters may combine with + /// the preceding or following code points, + /// so that the start and end of the original range + /// are no longer grapheme cluster boundaries. + /// In that case, the returned range may extend into into the code points + /// before and after the original range. + /// + /// Returns `null` if there are no occurrences of [pattern] + /// in the current range. + CharacterRange /*?*/ replaceFirst(Characters pattern, Characters replacement); /// Whether the current range starts with [characters]. /// diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index 109d7501..46b10b66 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -148,14 +148,11 @@ class StringCharacters extends Iterable implements Characters { @override Characters replaceAll(Characters pattern, Characters replacement) => - _rangeAll.replaceAll(pattern, replacement); + _rangeAll.replaceAll(pattern, replacement)?.source ?? this; @override - Characters replaceFirst(Characters pattern, Characters replacement) { - var range = _rangeAll; - if (!range.collapseToFirst(pattern)) return this; - return range.replaceRange(replacement); - } + Characters replaceFirst(Characters pattern, Characters replacement) => + _rangeAll.replaceFirst(pattern, replacement)?.source ?? this; @override bool containsAll(Characters other) => @@ -750,32 +747,37 @@ class StringCharacterRange implements CharacterRange { } @override - Characters replaceFirst(Characters pattern, Characters replacement) { + CharacterRange /*?*/ replaceFirst( + Characters pattern, Characters replacement) { String patternString = pattern.string; String replacementString = replacement.string; + String replaced; if (patternString.isEmpty) { - return StringCharacters( - _string.replaceRange(_start, _start, replacementString)); - } - int index = _indexOf(_string, patternString, _start, _end); - String result = _string; - if (index >= 0) { - result = _string.replaceRange( - index, index + patternString.length, replacementString); + replaced = _string.replaceRange(_start, _start, replacementString); + } else { + int index = _indexOf(_string, patternString, _start, _end); + if (index >= 0) { + replaced = _string.replaceRange( + index, index + patternString.length, replacementString); + } else { + return null; + } } - return StringCharacters(result); + int newEnd = replaced.length - _string.length + _end; + return _expandRange(replaced, _start, newEnd); } @override - Characters replaceAll(Characters pattern, Characters replacement) { + CharacterRange /*?*/ replaceAll(Characters pattern, Characters replacement) { var patternString = pattern.string; var replacementString = replacement.string; if (patternString.isEmpty) { var replaced = _explodeReplace( _string, _start, _end, replacementString, replacementString); - return StringCharacters(replaced); + int newEnd = replaced.length - (_string.length - _end); + return _expandRange(replaced, _start, newEnd); } - if (_start == _end) return Characters(_string); + if (_start == _end) return null; int start = 0; int cursor = _start; StringBuffer buffer; @@ -786,14 +788,26 @@ class StringCharacterRange implements CharacterRange { cursor += patternString.length; start = cursor; } - if (buffer == null) return Characters(_string); + if (buffer == null) return null; buffer.write(_string.substring(start)); - return Characters(buffer.toString()); + String replaced = buffer.toString(); + int newEnd = replaced.length - (_string.length - _end); + return _expandRange(replaced, _start, newEnd); } @override - Characters replaceRange(Characters replacement) { - return Characters(_string.replaceRange(_start, _end, replacement.string)); + CharacterRange replaceRange(Characters replacement) { + String replacementString = replacement.string; + String resultString = _string.replaceRange(_start, _end, replacementString); + return _expandRange( + resultString, _start, _start + replacementString.length); + } + + // Expands a range if its start or end are not grapheme cluster boundaries. + StringCharacterRange _expandRange(String string, int start, int end) { + start = previousBreak(string, 0, string.length, start); + end = nextBreak(string, 0, string.length, end); + return StringCharacterRange._(string, start, end); } @override @@ -856,6 +870,32 @@ class StringCharacterRange implements CharacterRange { } return false; } + + @override + Characters get charactersAfter => StringCharacters(_string.substring(_end)); + + @override + Characters get charactersBefore => + StringCharacters(_string.substring(0, _start)); + + @override + Characters get currentCharacters => StringCharacters(current); + + @override + void moveBackAll() { + _move(0, _start); + } + + @override + void moveNextAll() { + _move(_end, _string.length); + } + + @override + String get stringAfter => _string.substring(_end); + + @override + String get stringBefore => _string.substring(0, _start); } class _CodeUnits extends ListBase { diff --git a/pkgs/characters/lib/src/grapheme_clusters/breaks.dart b/pkgs/characters/lib/src/grapheme_clusters/breaks.dart index 9a41609f..08d1d841 100644 --- a/pkgs/characters/lib/src/grapheme_clusters/breaks.dart +++ b/pkgs/characters/lib/src/grapheme_clusters/breaks.dart @@ -295,7 +295,7 @@ bool isGraphemeClusterBoundary(String text, int start, int end, int index) { return start != end; } -/// The most recent break no later than [position] in +/// The most recent break no later than [index] in /// `string.substring(start, end)`. int previousBreak(String text, int start, int end, int index) { assert(0 <= start); @@ -328,7 +328,7 @@ int previousBreak(String text, int start, int end, int index) { .nextBreak(); } -/// The next break no earlier than [position] in `string.substring(start, end)`. +/// The next break no earlier than [index] in `string.substring(start, end)`. /// /// The index need not be at a grapheme cluster boundary. int nextBreak(String text, int start, int end, int index) { diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 5f1858cb..4084b0bc 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,6 +1,6 @@ name: characters -version: 0.2.0 +version: 0.3.0 environment: - sdk: "^2.4.0" + sdk: "^2.5.0" dev_dependencies: test: "^1.6.0" diff --git a/pkgs/characters/test/characters_test.dart b/pkgs/characters/test/characters_test.dart index cbb6e039..8ef5ec21 100644 --- a/pkgs/characters/test/characters_test.dart +++ b/pkgs/characters/test/characters_test.dart @@ -477,7 +477,7 @@ void testParts( var cs2 = cs.replaceAll(c, gc("")); var cs3 = cs.replaceFirst(c, gc("")); - var cs4 = cs.findFirst(c).replaceRange(gc("")); + var cs4 = cs.findFirst(c).replaceRange(gc("")).source; var cse = gc("$a$b$d$e"); expect(cs2, cse); expect(cs3, cse); @@ -498,9 +498,11 @@ void testParts( it.expandTo(b + a); expect("$b$a$d$b$a", it.current); var cs10 = it.replaceAll(b + a, e + e); - expect(cs10, gc("$a$c$e$e$d$e$e")); + expect(cs10.currentCharacters, e + e + d + e + e); + expect(cs10.source, gc("$a$c$e$e$d$e$e")); var cs11 = it.replaceRange(e); - expect(cs11, gc("$a$c$e")); + expect(cs11.currentCharacters, e); + expect(cs11.source, gc("$a$c$e")); expect(cs.startsWith(gc("")), true); expect(cs.startsWith(a), true); @@ -552,4 +554,66 @@ void testParts( expect(it.isFollowedBy(c + d + e), false); expect(it.isFollowedBy(e), false); }); + test("replace methods", () { + // Unicode grapheme breaking character classes, + // represented by their first value. + + var pattern = gc("\t"); // A non-combining entry to be replaced. + var non = gc(""); + + var c = otr + cr + pattern + lf + pic + pattern + zwj + pic + otr; + var r = c.replaceAll(pattern, non); + expect(r, otr + cr + lf + pic + zwj + pic + otr); + var ci = c.iterator..moveNextAll(); + var ri = ci.replaceAll(pattern, non); + expect(ri.currentCharacters, otr + cr + lf + pic + zwj + pic + otr); + ci.dropFirst(); + ci.dropLast(); + expect(ci.currentCharacters, cr + pattern + lf + pic + pattern + zwj + pic); + expect(ci.currentCharacters.length, 7); + ri = ci.replaceAll(pattern, non); + expect(ri.currentCharacters, cr + lf + pic + zwj + pic); + expect(ri.currentCharacters.length, 2); + ci.dropFirst(); + ci.dropLast(5); + expect(ci.currentCharacters, pattern); + ri = ci.replaceAll(pattern, non); + expect(ri.currentCharacters, cr + lf); + ci.moveNext(2); + ci.moveNext(1); + expect(ci.currentCharacters, pattern); + ri = ci.replaceAll(pattern, non); + expect(ri.currentCharacters, pic + zwj + pic); + + c = otr + pic + ext + pattern + pic + ext + otr; + expect(c.length, 5); + ci = c.iterator..moveTo(pattern); + expect(ci.currentCharacters, pattern); + ri = ci.replaceAll(pattern, zwj); + expect(ri.currentCharacters, pic + ext + zwj + pic + ext); + + c = reg + pattern + reg + reg; + ci = c.iterator..moveTo(pattern); + ri = ci.replaceRange(non); + expect(ri.currentCharacters, reg + reg); + expect(ri.moveNext(), true); + expect(ri.currentCharacters, reg); + }); } + +/// Sample characters from each breaking algorithm category. +final Characters ctl = gc("\x00"); // Control, NUL. +final Characters cr = gc("\r"); // Carriage Return, CR. +final Characters lf = gc("\n"); // Newline, NL. +final Characters otr = gc(" "); // Other, Space. +final Characters ext = gc("\u0300"); // Extend, Combining Grave Accent. +final Characters spc = gc("\u0903"); // Spacing Mark, Devanagari Sign Visarga. +final Characters pre = gc("\u0600"); // Prepend, Arabic Number Sign. +final Characters zwj = gc("\u200d"); // Zero-Width Joiner. +final Characters pic = gc("\u00a9"); // Extended Pictographic, Copyright. +final Characters reg = gc("\u{1f1e6}"); // Regional Identifier "a". +final Characters hanl = gc("\u1100"); // Hangul L, Choseong Kiyeok. +final Characters hanv = gc("\u1160"); // Hangul V, Jungseong Filler. +final Characters hant = gc("\u11a8"); // Hangul T, Jongseong Kiyeok. +final Characters hanlv = gc("\uac00"); // Hangul LV, Syllable Ga. +final Characters hanlvt = gc("\uac01"); // Hangul LVT, Syllable Gag. From 4408e7ff7b17789ec365e91f581dcecbaf87eb6e Mon Sep 17 00:00:00 2001 From: Lasse Reichstein Holst Nielsen Date: Tue, 22 Oct 2019 16:36:47 +0200 Subject: [PATCH 09/82] Add required fields to pubspec.yaml.s --- pkgs/characters/pubspec.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 4084b0bc..558fc7b6 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,6 +1,10 @@ name: characters version: 0.3.0 +description: String replacement with operations that are Unicode/grapheme cluster aware. +author: Dart Team +homepage: https://www.github.com/dart-lang/characters + environment: - sdk: "^2.5.0" + sdk: ">=2.5.0 <3.0.0" dev_dependencies: test: "^1.6.0" From ef80511cc7124f2e249bcf375bf5a279e2808899 Mon Sep 17 00:00:00 2001 From: Lasse Reichstein Holst Nielsen Date: Tue, 22 Oct 2019 16:38:07 +0200 Subject: [PATCH 10/82] Update changelog. --- pkgs/characters/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 48a2bb32..72ceefe1 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.3.0 + +* Updated API which does not expose the underlying string indices. + ## 0.1.0 * Initial release \ No newline at end of file From 053bf6f51618b57912ab87c33cb615732bc4a6b1 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Fri, 25 Oct 2019 14:19:58 +0200 Subject: [PATCH 11/82] Enable pedantic lints and fix to meet (dart-lang/characters#10) --- pkgs/characters/analysis_options.yaml | 1 + pkgs/characters/benchmark/benchmark.dart | 16 ++++++++++++---- pkgs/characters/lib/src/characters_impl.dart | 8 +++++--- pkgs/characters/pubspec.yaml | 1 + 4 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 pkgs/characters/analysis_options.yaml diff --git a/pkgs/characters/analysis_options.yaml b/pkgs/characters/analysis_options.yaml new file mode 100644 index 00000000..108d1058 --- /dev/null +++ b/pkgs/characters/analysis_options.yaml @@ -0,0 +1 @@ +include: package:pedantic/analysis_options.yaml diff --git a/pkgs/characters/benchmark/benchmark.dart b/pkgs/characters/benchmark/benchmark.dart index 5345b9dd..c6ab05e8 100644 --- a/pkgs/characters/benchmark/benchmark.dart +++ b/pkgs/characters/benchmark/benchmark.dart @@ -22,18 +22,26 @@ double bench(int Function() action, int ms) { int iterateIndicesOnly() { int graphemeClusters = 0; var char = Characters(hangul).iterator; - while (char.moveNext()) graphemeClusters++; + while (char.moveNext()) { + graphemeClusters++; + } char = Characters(genesis).iterator; - while (char.moveNext()) graphemeClusters++; + while (char.moveNext()) { + graphemeClusters++; + } return graphemeClusters; } int iterateStrings() { int codeUnits = 0; var char = Characters(hangul).iterator; - while (char.moveNext()) codeUnits += char.current.length; + while (char.moveNext()) { + codeUnits += char.current.length; + } char = Characters(genesis).iterator; - while (char.moveNext()) codeUnits += char.current.length; + while (char.moveNext()) { + codeUnits += char.current.length; + } return codeUnits; } diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index 46b10b66..85d615c3 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -15,7 +15,7 @@ import "grapheme_clusters/breaks.dart"; /// Backed by a single string. class StringCharacters extends Iterable implements Characters { // Try to avoid allocating more empty grapheme clusters. - static const StringCharacters _empty = const StringCharacters(""); + static const StringCharacters _empty = StringCharacters(""); final String string; @@ -63,7 +63,9 @@ class StringCharacters extends Iterable implements Characters { if (string.isEmpty) return 0; var brk = Breaks(string, 0, string.length, stateSoTNoBreak); int length = 0; - while (brk.nextBreak() >= 0) length++; + while (brk.nextBreak() >= 0) { + length++; + } return length; } @@ -917,7 +919,7 @@ class _CodeUnits extends ListBase { } @override - void set length(int newLength) { + set length(int newLength) { throw UnsupportedError("Cannot modify an unmodifiable list"); } } diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 558fc7b6..603ed583 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -8,3 +8,4 @@ environment: sdk: ">=2.5.0 <3.0.0" dev_dependencies: test: "^1.6.0" + pedantic: From a79808c952891b13134f6d23b4724de4e11b1b54 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Fri, 25 Oct 2019 14:33:43 +0200 Subject: [PATCH 12/82] Add small example (dart-lang/characters#9) --- pkgs/characters/CHANGELOG.md | 5 +++++ pkgs/characters/example/main.dart | 21 +++++++++++++++++++++ pkgs/characters/pubspec.yaml | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 pkgs/characters/example/main.dart diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 72ceefe1..198373a6 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.3.1 + +* Added small example in `example/main.dart` +* Enabled pedantic lints and updated code to resolve issues. + ## 0.3.0 * Updated API which does not expose the underlying string indices. diff --git a/pkgs/characters/example/main.dart b/pkgs/characters/example/main.dart new file mode 100644 index 00000000..65cda685 --- /dev/null +++ b/pkgs/characters/example/main.dart @@ -0,0 +1,21 @@ +import 'package:characters/characters.dart'; + +// Small API examples. For full API docs see: +// https://pub.dev/documentation/characters/latest/characters/characters-library.html +main() { + String hi = 'Hi 🇩🇰'; + print('String is "$hi"\n'); + + // Length. + print('String.length: ${hi.length}'); + print('Characters.length: ${Characters(hi).length}\n'); + + // Skip last character. + print('String.substring: "${hi.substring(0, hi.length - 1)}"'); + print('Characters.skipLast: "${Characters(hi).skipLast(1)}"\n'); + + // Replace characters. + Characters newHi = + Characters(hi).replaceAll(Characters('🇩🇰'), Characters('🇺🇸')); + print('Change flag: "$newHi"'); +} diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 603ed583..be2d3a75 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 0.3.0 +version: 0.3.1 description: String replacement with operations that are Unicode/grapheme cluster aware. author: Dart Team homepage: https://www.github.com/dart-lang/characters From 7a69a3986830a55cb1c39119f8f56bee5639a27c Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Wed, 13 Nov 2019 13:49:27 +0100 Subject: [PATCH 13/82] Add extension method for easy creation (dart-lang/characters#11) --- pkgs/characters/.travis.yml | 2 +- pkgs/characters/CHANGELOG.md | 11 +++++++++++ pkgs/characters/example/main.dart | 10 +++++++--- pkgs/characters/lib/characters.dart | 1 + pkgs/characters/lib/src/extensions.dart | 10 ++++++++++ pkgs/characters/pubspec.yaml | 5 ++--- 6 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 pkgs/characters/lib/src/extensions.dart diff --git a/pkgs/characters/.travis.yml b/pkgs/characters/.travis.yml index 27cdad66..8f0ecf66 100644 --- a/pkgs/characters/.travis.yml +++ b/pkgs/characters/.travis.yml @@ -1,7 +1,7 @@ language: dart dart: - dev -- 2.5.0 +- stable # Only building master means that we don't run two builds for each pull request. dart_task: - test: --platform vm,chrome diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 198373a6..2346cf1f 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## 0.4.0 + +* Added an extension method on `String` to allow easy access to the `Characters` + of the string: + + ```dart + print('The first character is: ' + myString.characters.first) + ``` + +* Updated Dart SDK dependency to Dart 2.6.0 + ## 0.3.1 * Added small example in `example/main.dart` diff --git a/pkgs/characters/example/main.dart b/pkgs/characters/example/main.dart index 65cda685..b01e3349 100644 --- a/pkgs/characters/example/main.dart +++ b/pkgs/characters/example/main.dart @@ -8,11 +8,15 @@ main() { // Length. print('String.length: ${hi.length}'); - print('Characters.length: ${Characters(hi).length}\n'); + print('Characters.length: ${hi.characters.length}\n'); + + // Last character. + print('The string ends with: ${hi.substring(hi.length - 1)}'); + print('The last character: ${hi.characters.last}\n'); // Skip last character. - print('String.substring: "${hi.substring(0, hi.length - 1)}"'); - print('Characters.skipLast: "${Characters(hi).skipLast(1)}"\n'); + print('Substring -1: "${hi.substring(0, hi.length - 1)}"'); + print('Skipping last character: "${hi.characters.skipLast(1)}"\n'); // Replace characters. Characters newHi = diff --git a/pkgs/characters/lib/characters.dart b/pkgs/characters/lib/characters.dart index 73dce479..d56d787f 100644 --- a/pkgs/characters/lib/characters.dart +++ b/pkgs/characters/lib/characters.dart @@ -6,3 +6,4 @@ library characters; export "src/characters.dart"; +export "src/extensions.dart"; diff --git a/pkgs/characters/lib/src/extensions.dart b/pkgs/characters/lib/src/extensions.dart new file mode 100644 index 00000000..b661dafc --- /dev/null +++ b/pkgs/characters/lib/src/extensions.dart @@ -0,0 +1,10 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'characters.dart'; + +extension StringCharacters on String { + /// The [Characters] of this string. + Characters get characters => Characters(this); +} diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index be2d3a75..f12c0324 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,11 +1,10 @@ name: characters -version: 0.3.1 +version: 0.4.0 description: String replacement with operations that are Unicode/grapheme cluster aware. -author: Dart Team homepage: https://www.github.com/dart-lang/characters environment: - sdk: ">=2.5.0 <3.0.0" + sdk: ">=2.6.0 <3.0.0" dev_dependencies: test: "^1.6.0" pedantic: From 4009fe00ab48b5eddb3674d060059a91a36b137c Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Fri, 15 Nov 2019 13:36:00 +0100 Subject: [PATCH 14/82] Add Pub badge (dart-lang/characters#12) --- pkgs/characters/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 94d3cc79..3687f67d 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,3 +1,4 @@ +[![pub package](https://img.shields.io/pub/v/characters.svg)](https://pub.dev/packages/characters) [![Build Status](https://travis-ci.org/dart-lang/characters.svg?branch=master)](https://travis-ci.org/dart-lang/characters) **NOTE**: This package is considered experimental, and breaking API changes are From d7437f2ef3e0420147beb81b52dcdc397efb704b Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Fri, 15 Nov 2019 13:37:58 +0100 Subject: [PATCH 15/82] Hide UTF-16 assumptions in the API. (dart-lang/characters#13) * Avoid the API depending on the underlying data being random-access UTF-16 code units. In this case, don't return `codeUnits` as a list of integers, but explicitly say `utf16CodeUnits` and return them as an iterable. That can be implemented as efficiently as possible on, say, a UTF-8 byte array. * Also use .characters in rest of example. --- pkgs/characters/CHANGELOG.md | 9 ++++++- pkgs/characters/example/main.dart | 2 +- pkgs/characters/lib/src/characters.dart | 2 +- pkgs/characters/lib/src/characters_impl.dart | 28 +------------------- pkgs/characters/pubspec.yaml | 2 +- 5 files changed, 12 insertions(+), 31 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 2346cf1f..1904b5e5 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 0.5.0 + +* Change [codeUnits] getter to [utf16CodeUnits] which returns an iterable. + This avoids leaking that the underlying string has efficient UTF-16 + code unit access in the API, and allows the same interface to be + just as efficiently implemented on top of UTF-8. + ## 0.4.0 * Added an extension method on `String` to allow easy access to the `Characters` @@ -22,4 +29,4 @@ ## 0.1.0 -* Initial release \ No newline at end of file +* Initial release diff --git a/pkgs/characters/example/main.dart b/pkgs/characters/example/main.dart index b01e3349..4e6316b8 100644 --- a/pkgs/characters/example/main.dart +++ b/pkgs/characters/example/main.dart @@ -20,6 +20,6 @@ main() { // Replace characters. Characters newHi = - Characters(hi).replaceAll(Characters('🇩🇰'), Characters('🇺🇸')); + hi.characters.replaceAll('🇩🇰'.characters, '🇺🇸'.characters); print('Change flag: "$newHi"'); } diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index eec3ca89..17a45fec 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -250,7 +250,7 @@ abstract class CharacterRange implements Iterator { Characters get source; /// The code units of the current character range. - List get codeUnits; + Iterable get utf16CodeUnits; /// The code points of the current character range. Runes get runes; diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index 85d615c3..e3dc6acc 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import "dart:collection" show ListBase; - import 'package:characters/src/grapheme_clusters/table.dart'; import "characters.dart"; @@ -488,7 +486,7 @@ class StringCharacterRange implements CharacterRange { } @override - List get codeUnits => _CodeUnits(_string, _start, _end); + Iterable get utf16CodeUnits => _string.codeUnits.getRange(_start, _end); @override Runes get runes => Runes(current); @@ -900,30 +898,6 @@ class StringCharacterRange implements CharacterRange { String get stringBefore => _string.substring(0, _start); } -class _CodeUnits extends ListBase { - final String _string; - final int _start; - final int _end; - - _CodeUnits(this._string, this._start, this._end); - - int get length => _end - _start; - - int operator [](int index) { - RangeError.checkValidIndex(index, this, "index", _end - _start); - return _string.codeUnitAt(_start + index); - } - - void operator []=(int index, int value) { - throw UnsupportedError("Cannot modify an unmodifiable list"); - } - - @override - set length(int newLength) { - throw UnsupportedError("Cannot modify an unmodifiable list"); - } -} - String _explodeReplace(String string, int start, int end, String internalReplacement, String outerReplacement) { if (start == end) { diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index f12c0324..5750ec93 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 0.4.0 +version: 0.5.0 description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters From 511c9bbaf22535dbe65c02239c8e4e391b227925 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Thu, 5 Dec 2019 13:33:27 +0000 Subject: [PATCH 16/82] Update README.md (dart-lang/characters#14) Update release status --- pkgs/characters/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 3687f67d..8cb756a2 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,8 +1,7 @@ [![pub package](https://img.shields.io/pub/v/characters.svg)](https://pub.dev/packages/characters) [![Build Status](https://travis-ci.org/dart-lang/characters.svg?branch=master)](https://travis-ci.org/dart-lang/characters) -**NOTE**: This package is considered experimental, and breaking API changes are -to be expected. +**NOTE**: This package is in technical preview, and breaking API changes are to be expected. `Characters` are strings viewed as sequences of *user-perceived character*s, also know as [Unicode (extended) grapheme clusters](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries). From 1e193b484bc8f4adcf0fe7d4a8a2bd9b02a59d9a Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Tue, 12 May 2020 08:57:17 +0200 Subject: [PATCH 17/82] Add split methods. (dart-lang/characters#16) --- pkgs/characters/CHANGELOG.md | 4 ++ pkgs/characters/analysis_options.yaml | 6 ++ pkgs/characters/example/main.dart | 2 +- pkgs/characters/lib/src/characters.dart | 73 ++++++++++++++++++++ pkgs/characters/lib/src/characters_impl.dart | 64 +++++++++++++++++ pkgs/characters/pubspec.yaml | 4 +- pkgs/characters/test/characters_test.dart | 49 +++++++++++++ 7 files changed, 199 insertions(+), 3 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 1904b5e5..6e104f9f 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.5.1 + +* Added `split` methods on `Characters` and `CharacterRange`. + ## 0.5.0 * Change [codeUnits] getter to [utf16CodeUnits] which returns an iterable. diff --git a/pkgs/characters/analysis_options.yaml b/pkgs/characters/analysis_options.yaml index 108d1058..3bad72be 100644 --- a/pkgs/characters/analysis_options.yaml +++ b/pkgs/characters/analysis_options.yaml @@ -1 +1,7 @@ include: package:pedantic/analysis_options.yaml +analyzer: + errors: + omit_local_variable_types: ignore + annotate_overrides: ignore + prefer_single_quotes: ignore + use_function_type_syntax_for_parameters: ignore diff --git a/pkgs/characters/example/main.dart b/pkgs/characters/example/main.dart index 4e6316b8..467a2f40 100644 --- a/pkgs/characters/example/main.dart +++ b/pkgs/characters/example/main.dart @@ -2,7 +2,7 @@ import 'package:characters/characters.dart'; // Small API examples. For full API docs see: // https://pub.dev/documentation/characters/latest/characters/characters-library.html -main() { +void main() { String hi = 'Hi 🇩🇰'; print('String is "$hi"\n'); diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index 17a45fec..676716b5 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -186,6 +186,40 @@ abstract class Characters implements Iterable { /// Returns the current characters if there is no occurrence of [pattern]. Characters replaceAll(Characters pattern, Characters replacement); + /// Splits this sequence of characters at each occurrence of [pattern]. + /// + /// Returns a lazy iterable of characters that were separated by [pattern]. + /// The iterable has *at most* [maxParts] elements if a positive [maxParts] + /// is supplied. + /// + /// Finds each occurrence of [pattern], which does not overlap with + /// a previously found occurrence, then the non-matched characters + /// before, after, and between the matches are provided in first-to-last + /// position order. + + /// If [pattern] is empty, the character sequence is split into separate + /// characters, and no leading or trailing empty ranges are provided + /// unless the range itself is empty, + /// in which case a single empty range is the only result range. + /// Otherwise a range starting or ending with [pattern] will cause + /// an empty character sequence to be emitted at the start or end. + /// + /// If [maxParts] is provided and greater than zero, + /// only the first `maxParts - 1` occurrences of [pattern] are found + /// and split at. + /// Any further occurrences will be included in the last part. + /// Example: + /// ```dart + /// var c = "abracadabra".characters; + /// var parts = c.split("a".characters, 4).toList(); + /// print(parts); // Prints is ["", "br", "c", "dabra"] + /// ``` + /// If there are fewer than `maxParts - 1` occurrences of [pattern], + /// then the characters are split at all occurrences. + /// If [maxParts] is zero or negative, it is ignored and the result + /// is split at all occurrences of [pattern]. + Iterable split(Characters pattern, [int maxParts = 0]); + /// Replaces the first occurrence of [pattern] with [replacement]. /// /// Returns a new [Characters] where the first occurence of the @@ -647,6 +681,45 @@ abstract class CharacterRange implements Iterator { /// in the current range. CharacterRange /*?*/ replaceAll(Characters pattern, Characters replacement); + /// Splits the current range of characters at each occurrence of [pattern]. + /// + /// Returns a lazy iterable of character ranges that were separated by + /// [pattern]. + /// Each provided character range object is new + /// and unrelated to this character range + /// The iterable has *at most* [maxParts] elements if a positive [maxParts] + /// is supplied. + /// + /// Finds each occurrence of [pattern] in the range, which does not overlap + /// with a previously found occurrence, then the non-matched characters + /// of the range before, after and between the matches are provided + /// in first-to-last position order. + /// + /// If [pattern] is empty, the range is split into separate characters, + /// and no leading or trailing empty ranges are provided unless the + /// range itself is empty, in which case a single empty range is the + /// only result range. + /// Otherwise a range starting or ending with [pattern] will cause + /// an empty range to be emitted at the start or end. + /// + /// If [maxParts] is provided and greater than zero, + /// only the first `maxParts - 1` occurrences of [pattern] are found + /// and split at. + /// Any further occurrences will be included in the last part. + /// + /// Example: + /// ```dart + /// var c = "abracadabra".characters.dropFirst().dropLast(); + /// // c is "bracadabr". + /// var parts = c.split("a".characters, 3).toList(); + /// print(parts); // [br, c, dabr] + /// ``` + /// If there are fewer than `maxParts - 1` occurrences of [pattern], + /// then the characters are split at all occurrences. + /// If [maxParts] is zero or negative, it is ignored and the result + /// is split at all occurrences of [pattern]. + Iterable split(Characters pattern, [int maxParts = 0]); + /// Replaces the first occurrence of [pattern] with [replacement]. /// /// Finds the first occurrence of [pattern] in the current range, diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index e3dc6acc..4f474c86 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -154,6 +154,37 @@ class StringCharacters extends Iterable implements Characters { Characters replaceFirst(Characters pattern, Characters replacement) => _rangeAll.replaceFirst(pattern, replacement)?.source ?? this; + @override + Iterable split(Characters pattern, [int maxParts = 0]) sync* { + if (maxParts == 1 || string.isEmpty) { + yield this; + return; + } + var patternString = pattern.string; + var start = 0; + if (patternString.isNotEmpty) { + do { + var match = _indexOf(string, patternString, start, string.length); + if (match < 0) break; + yield StringCharacters(string.substring(start, match)); + start = match + patternString.length; + maxParts--; + } while (maxParts != 1); + } else { + // Empty pattern. Split on internal boundaries only. + var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + do { + var match = breaks.nextBreak(); + if (match < 0) return; + yield StringCharacters(string.substring(start, match)); + start = match; + maxParts--; + } while (maxParts != 1); + if (start == string.length) return; + } + yield StringCharacters(string.substring(start)); + } + @override bool containsAll(Characters other) => _indexOf(string, other.string, 0, string.length) >= 0; @@ -896,6 +927,39 @@ class StringCharacterRange implements CharacterRange { @override String get stringBefore => _string.substring(0, _start); + + @override + Iterable split(Characters pattern, [int maxParts = 0]) sync* { + if (maxParts == 1 || _start == _end) { + yield this; + return; + } + var patternString = pattern.string; + var start = _start; + if (patternString.isNotEmpty) { + do { + var match = _indexOf(_string, patternString, start, _end); + if (match < 0) break; + yield StringCharacterRange._(_string, start, match); + start = match + patternString.length; + maxParts--; + } while (maxParts != 1); + yield StringCharacterRange._(_string, start, _end); + } else { + // Empty pattern. Split on internal boundaries only. + var breaks = Breaks(_string, _start, _end, stateSoTNoBreak); + do { + var match = breaks.nextBreak(); + if (match < 0) return; + yield StringCharacterRange._(_string, start, match); + start = match; + maxParts--; + } while (maxParts != 1); + if (start < _end) { + yield StringCharacterRange._(_string, start, _end); + } + } + } } String _explodeReplace(String string, int start, int end, diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 5750ec93..c3072ad1 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 0.5.0 +version: 0.5.1 description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters @@ -7,4 +7,4 @@ environment: sdk: ">=2.6.0 <3.0.0" dev_dependencies: test: "^1.6.0" - pedantic: + pedantic: ^1.9.0 diff --git a/pkgs/characters/test/characters_test.dart b/pkgs/characters/test/characters_test.dart index 8ef5ec21..f34e6ecf 100644 --- a/pkgs/characters/test/characters_test.dart +++ b/pkgs/characters/test/characters_test.dart @@ -504,6 +504,55 @@ void testParts( expect(cs11.currentCharacters, e); expect(cs11.source, gc("$a$c$e")); + var cs12 = gc("$a$b$a"); + expect(cs12.split(b), [a, a]); + expect(cs12.split(a), [gc(""), b, gc("")]); + expect(cs12.split(a, 2), [gc(""), gc("$b$a")]); + + expect(cs12.split(gc("")), [a, b, a]); + expect(cs12.split(gc(""), 2), [a, gc("$b$a")]); + + expect(gc("").split(gc("")), [gc("")]); + + var cs13 = gc("$b$a$b$a$b$a"); + expect(cs13.split(b), [gc(""), a, a, a]); + expect(cs13.split(b, 1), [cs13]); + expect(cs13.split(b, 2), [gc(""), gc("$a$b$a$b$a")]); + expect(cs13.split(b, 3), [gc(""), a, gc("$a$b$a")]); + expect(cs13.split(b, 4), [gc(""), a, a, a]); + expect(cs13.split(b, 5), [gc(""), a, a, a]); + expect(cs13.split(b, 9999), [gc(""), a, a, a]); + expect(cs13.split(b, 0), [gc(""), a, a, a]); + expect(cs13.split(b, -1), [gc(""), a, a, a]); + expect(cs13.split(b, -9999), [gc(""), a, a, a]); + + it = cs13.iterator..expandAll(); + expect(it.current, "$b$a$b$a$b$a"); + it.dropFirst(); + it.dropLast(); + expect(it.current, "$a$b$a$b"); + expect(it.split(a).map((range) => range.current), ["", "$b", "$b"]); + expect(it.split(a, 2).map((range) => range.current), ["", "$b$a$b"]); + // Each split is after an *a*. + bool first = true; + for (var range in it.split(a)) { + if (range.isEmpty) { + // First range is empty. + expect(first, true); + first = false; + continue; + } + // Later ranges are "b" that come after "a". + expect(range.current, "$b"); + range.moveBack(); + expect(range.current, "$a"); + } + + expect(it.split(gc("")).map((range) => range.current), + ["$a", "$b", "$a", "$b"]); + + expect(gc("").iterator.split(gc("")).map((range) => range.current), [""]); + expect(cs.startsWith(gc("")), true); expect(cs.startsWith(a), true); expect(cs.startsWith(a + b), true); From fb7fd4b99ccc0c9e764771fd7c4e1818ddea0f61 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Wed, 27 May 2020 12:16:44 +0200 Subject: [PATCH 18/82] Time for 1.0 (dart-lang/characters#18) * Update CHANGELOG.md * Update README.md * Update pubspec.yaml --- pkgs/characters/CHANGELOG.md | 3 ++- pkgs/characters/README.md | 2 -- pkgs/characters/pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 6e104f9f..b8a7dce6 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,7 +1,8 @@ # Changelog -## 0.5.1 +## 1.0.0 +* Core APIs deemed stable; package version set to 1.0.0. * Added `split` methods on `Characters` and `CharacterRange`. ## 0.5.0 diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 8cb756a2..cfaa9887 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,8 +1,6 @@ [![pub package](https://img.shields.io/pub/v/characters.svg)](https://pub.dev/packages/characters) [![Build Status](https://travis-ci.org/dart-lang/characters.svg?branch=master)](https://travis-ci.org/dart-lang/characters) -**NOTE**: This package is in technical preview, and breaking API changes are to be expected. - `Characters` are strings viewed as sequences of *user-perceived character*s, also know as [Unicode (extended) grapheme clusters](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries). diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index c3072ad1..8863486e 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 0.5.1 +version: 1.0.0 description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters From b0a50fd07fee0808137a12587f1d20f4515cf831 Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Tue, 9 Jun 2020 19:46:32 +0200 Subject: [PATCH 19/82] Update README.md (dart-lang/characters#19) --- pkgs/characters/README.md | 132 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 128 insertions(+), 4 deletions(-) diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index cfaa9887..edabc4a8 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,8 +1,132 @@ [![pub package](https://img.shields.io/pub/v/characters.svg)](https://pub.dev/packages/characters) [![Build Status](https://travis-ci.org/dart-lang/characters.svg?branch=master)](https://travis-ci.org/dart-lang/characters) -`Characters` are strings viewed as sequences of *user-perceived character*s, -also know as [Unicode (extended) grapheme clusters](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries). -The `Characters` class allows access to the individual characters of a string, -and a way to navigate back and forth between them using a `CharacterRange`. +[`Characters`][Characters] are strings viewed as +sequences of **user-perceived character**s, +also known as [Unicode (extended) grapheme clusters][Grapheme Clusters]. + +The [`Characters`][Characters] class allows access to +the individual characters of a string, +and a way to navigate back and forth between them +using a [`CharacterRange`][CharacterRange]. + +## Unicode characters and representations + +There is no such thing as plain text. + +Computers only know numbers, +so any "text" on a computer is represented by numbers, +which are again stored as bytes in memory. + +The meaning of those bytes are provided by layers of interpretation, +building up to the *glyph*s that the computer displays on the screen. + +| Abstraction | Dart Type | Usage | Example | +| --------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| Bytes | [`ByteBuffer`][ByteBuffer],
[`Uint8List`][Uint8List] | Physical layout: Memory or network communication. | `file.readAsBytesSync()` | +| [Code units][] | [`Uint8List`][Uint8List] (UTF‑8)
[`Uint16List`][Uint16List], [`String`][String] (UTF‑16) | Standard formats for
encoding code points in memory.
Stored in memory using one (UTF‑8) or more (UTF‑16) bytes. One or more code units encode a code point. | `string.codeUnits`
`string.codeUnitAt(index)`
`utf8.encode(string)` | +| [Code points][] | [`Runes`][Runes] | The Unicode unit of meaning. | `string.runes` | +| [Grapheme Clusters][] | [`Characters`][Characters] | Human perceived character. One or more code points. | `string.characters` | +| [Glyphs][] | | Visual rendering of grapheme clusters. | `print(string)` | + +A Dart `String` is a sequence of UTF-16 code units, +just like strings in JavaScript and Java. +The runtime system decides on the underlying physical representation. + +That makes plain strings inadequate +when needing to manipulate the text that a user is viewing, or entering, +because string operations are not working at the grapheme cluster level. + +For example, to abbreviate a text to, say, the 15 first characters or glyphs, +an string like "A 🇬🇧 text in English" +should abbreviate to "A 🇬🇧 text in Eng… when counting characters, +but will become "A 🇬🇧 text in …" +if counting code units using [`String`][String] operations. + +Whenever you need to manipulate strings at the character level, +you should be using the [`Characters`][Characters] type, +not the methods of the [`String`][String] class. + +## The Characters class + +The [`Characters`][Characters] class exposes a string +as a sequence of grapheme clusters. +All operations on [`Characters`][Characters] operate +on entire grapheme clusters, +so it removes the risk of splitting combined characters or emojis +that are inherent in the code-unit based [`String`][String] operations. + +You can get a [`Characters`][Characters] object for a string using either +the constructor [`Characters(string)`][Characters constructor] +or the extension getter `string.characters`. + +At its core, the class is an [`Iterable`][Iterable] +where the element strings are single grapheme clusters. +This allows sequential access to the individual grapheme clusters +of the original string. + +On top of that, there are operations mirroring the operations +of [`String`][String] that are not index, code-unit or code-point based, +like [`startsWith`][Characters.startsWith] +or [`replaceAll`][Characters.replaceAll]. +There are some differences between these and the [`String`][String] operations. +For example the replace methods only accept characters as pattern. +Regular expressions are not grapheme cluster aware, +so they cannot be used safely on a sequence of characters. + +Grapheme clusters have varying length in the underlying representation, +so operations on a [`Characters`][Characters] sequence cannot be index based. +Instead the [`CharacterRange`][CharacterRange] *iterator* +provided by [`Characters.iterator`][Characters.iterator] +has been greatly enhanced. +It can move both forwards and backwards, +and it can span a *range* of grapheme cluster. +Most operations that can be performed on a full [`Characters`][Characters] +can also be performed on the grapheme clusters +in the range of a [`CharacterRange`][CharacterRange]. +The range can be contracted, expanded or moved in various ways, +not restricted to using [`moveNext`][CharacterRange.moveNext], +to move to the next grapheme cluster. + +Example: + +```dart +// Using String indices. +String firstTagString(String source) { + var start = string.indexOf("<") + 1; + if (start > 0) { + var end = string.indexOf(">", start); + if (end >= 0) { + return string.substring(start, end); + } + } + return null; +} + +// Using CharacterRange operations. +Characters firstTagCharacters(Characters source) => + var range = source.findFirst("<".characters); + if (range != null && range.moveUntil(">".characters)) { + return range.currentCharacters; + } + return null; +} +``` + +[ByteBuffer]: https://api.dart.dev/stable/2.0.0/dart-typed_data/ByteBuffer-class.html "ByteBuffer class" +[CharacterRange.moveNext]: https://pub.dev/documentation/characters/latest/characters/CharacterRange/moveNext.html "CharacterRange.moveNext" +[CharacterRange]: https://pub.dev/documentation/characters/latest/characters/CharacterRange-class.html "CharacterRange class" +[Characters constructor]: https://pub.dev/documentation/characters/latest/characters/Characters/Characters.html "Characters constructor" +[Characters.iterator]: https://pub.dev/documentation/characters/latest/characters/Characters/iterator.html "CharactersRange get iterator" +[Characters.replaceAll]: https://pub.dev/documentation/characters/latest/characters/Characters/replaceAll.html "Characters.replaceAlle" +[Characters.startsWith]: https://pub.dev/documentation/characters/latest/characters/Characters/startsWith.html "Characters.startsWith" +[Characters]: https://pub.dev/documentation/characters/latest/characters/Characters-class.html "Characters class" +[Code Points]: https://unicode.org/glossary/#code_point "Unicode Code Point" +[Code Units]: https://unicode.org/glossary/#code_unit "Unicode Code Units" +[Grapheme Clusters]: https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries "Unicode (Extended) Grapheme Cluster" +[Iterable]: https://api.dart.dev/stable/2.0.0/dart-core/Iterable-class.html "Iterable class" +[Runes]: https://api.dart.dev/stable/2.0.0/dart-core/Runes-class.html "Runes class" +[String]: https://api.dart.dev/stable/2.0.0/dart-core/String-class.html "String class" +[Uint16List]: https://api.dart.dev/stable/2.0.0/dart-typed_data/Uint16List-class.html "Uint16List class" +[Uint8List]: https://api.dart.dev/stable/2.0.0/dart-typed_data/Uint8List-class.html "Uint8List class" From 1f8d85e94ab23317cb5e6c9e053012ade15ba3c3 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Fri, 19 Jun 2020 00:16:09 -0700 Subject: [PATCH 20/82] Remove vscode config (dart-lang/characters#26) Closes dart-lang/characters#25 --- pkgs/characters/.vscode/launch.json | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 pkgs/characters/.vscode/launch.json diff --git a/pkgs/characters/.vscode/launch.json b/pkgs/characters/.vscode/launch.json deleted file mode 100644 index c078e2bc..00000000 --- a/pkgs/characters/.vscode/launch.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Dart", - "program": "bin/main.dart", - "request": "launch", - "type": "dart" - } - ] -} \ No newline at end of file From 4ccafc0be32ec5a1444f69ec978f461e437942de Mon Sep 17 00:00:00 2001 From: Jacob MacDonald Date: Wed, 24 Jun 2020 11:02:07 -0700 Subject: [PATCH 21/82] merge null_safety branch into master (dart-lang/characters#28) * Migrate package to Null Safety. - Update CHANGELOG.md. - Add unsound entry point for test, so it can be run. - Update SDK dependency to 2.9.0-1 - Updates travis config to run nnbd tests/analysis - Adds dependency overrides so tests can be ran in null safety mode - Updates package version to expected pre-release version - Updates sdk constraints to restrict to dev sdks with the allow list Co-authored-by @lrhn. --- pkgs/characters/.travis.yml | 38 +- pkgs/characters/CHANGELOG.md | 4 + pkgs/characters/analysis_options.yaml | 2 + pkgs/characters/lib/src/characters.dart | 23 +- pkgs/characters/lib/src/characters_impl.dart | 19 +- pkgs/characters/pubspec.yaml | 90 ++- pkgs/characters/test/characters_test.dart | 681 +----------------- .../test/sound_tests/characters_test.dart | 668 +++++++++++++++++ pkgs/characters/test/src/unicode_tests.dart | 2 +- 9 files changed, 828 insertions(+), 699 deletions(-) create mode 100644 pkgs/characters/test/sound_tests/characters_test.dart diff --git a/pkgs/characters/.travis.yml b/pkgs/characters/.travis.yml index 8f0ecf66..afa42c9f 100644 --- a/pkgs/characters/.travis.yml +++ b/pkgs/characters/.travis.yml @@ -1,14 +1,38 @@ language: dart dart: - dev -- stable -# Only building master means that we don't run two builds for each pull request. -dart_task: -- test: --platform vm,chrome -- dartanalyzer -- dartfmt + +jobs: + include: + - stage: analyze_and_format + name: "Analyze lib/ (no experiment flag)" + dart: dev + os: linux + script: dartanalyzer --fatal-warnings --fatal-infos lib/ + - stage: analyze_and_format + name: "Analyze (with experiment flag)" + dart: dev + os: linux + script: dartanalyzer --enable-experiment=non-nullable --fatal-warnings --fatal-infos . + - stage: analyze_and_format + name: "Format" + dart: dev + os: linux + script: dartfmt -n --set-exit-if-changed . + - stage: test + name: "Vm Tests" + dart: dev + os: linux + script: pub run --enable-experiment=non-nullable test -p vm + - stage: test + name: "Web Tests" + dart: dev + os: linux + script: pub run --enable-experiment=non-nullable test -p chrome + branches: - only: [master] + only: [master, null_safety] + cache: directories: - $HOME/.pub-cache diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index b8a7dce6..458b8c84 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.1.0-nullsafety + +* Make package null safe. + ## 1.0.0 * Core APIs deemed stable; package version set to 1.0.0. diff --git a/pkgs/characters/analysis_options.yaml b/pkgs/characters/analysis_options.yaml index 3bad72be..d34d1f0d 100644 --- a/pkgs/characters/analysis_options.yaml +++ b/pkgs/characters/analysis_options.yaml @@ -5,3 +5,5 @@ analyzer: annotate_overrides: ignore prefer_single_quotes: ignore use_function_type_syntax_for_parameters: ignore + enable-experiment: + - non-nullable diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index 676716b5..70b40ebe 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -47,14 +47,14 @@ abstract class Characters implements Iterable { /// as well as controlling the iteration in more detail. CharacterRange get iteratorAtEnd; - /// Whether [Character] is an element of this sequence of - /// characters. + /// Whether [other] is an element of this sequence of + /// others. /// - /// Returns false if [Character] is not a string containing + /// Returns false if [other] is not a string containing /// a single character, /// because then it is not a single element of this [Iterable] /// of characters. - bool contains(Object Character); + bool contains(Object? other); /// Whether this sequence of characters contains [other] /// as a subsequence. @@ -79,13 +79,14 @@ abstract class Characters implements Iterable { /// Returns a [CharacterRange] containing the first occurrence of /// [characters] in this string. /// Returns `null` if there is no such occurrence. - CharacterRange /*?*/ findFirst(Characters characters); + CharacterRange? findFirst(Characters characters); /// Finds the last occurrence of [characters]. /// /// Returns a [CharacterRange] containing the last occurrence of - /// [characters]. Returns `null` if there is no such occurrence, - CharacterRange /*?*/ findLast(Characters characters); + /// [characters]. + /// Returns `null` if there is no such occurrence, + CharacterRange? findLast(Characters characters); /// Eagerly selects a subset of the characters. /// @@ -132,7 +133,7 @@ abstract class Characters implements Iterable { /// of characters. Characters skipWhile(bool Function(String) test); - /// Eagerly selects a leading sequnce of characters. + /// Eagerly selects a leading sequence of characters. /// /// Checks each character, from first to last, against [test], /// until one is found whwere [test] returns `false`. @@ -143,7 +144,7 @@ abstract class Characters implements Iterable { /// is returned. Characters takeWhile(bool Function(String) test); - /// Eagerly selects a leading sequnce of characters. + /// Eagerly selects a leading sequence of characters. /// /// Checks each character, from last to first, against [test], /// until one is found whwere [test] returns `false`. @@ -679,7 +680,7 @@ abstract class CharacterRange implements Iterator { /// /// Returns `null` if there are no occurrences of [pattern] /// in the current range. - CharacterRange /*?*/ replaceAll(Characters pattern, Characters replacement); + CharacterRange? replaceAll(Characters pattern, Characters replacement); /// Splits the current range of characters at each occurrence of [pattern]. /// @@ -737,7 +738,7 @@ abstract class CharacterRange implements Iterator { /// /// Returns `null` if there are no occurrences of [pattern] /// in the current range. - CharacterRange /*?*/ replaceFirst(Characters pattern, Characters replacement); + CharacterRange? replaceFirst(Characters pattern, Characters replacement); /// Whether the current range starts with [characters]. /// diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index 4f474c86..dde34d5c 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -69,7 +69,7 @@ class StringCharacters extends Iterable implements Characters { @override Iterable whereType() { - Iterable self = this; + Iterable self = this; if (self is Iterable) { return self.map((x) => x); } @@ -83,7 +83,7 @@ class StringCharacters extends Iterable implements Characters { } @override - String lastWhere(bool test(String element), {String orElse()}) { + String lastWhere(bool test(String element), {String orElse()?}) { int cursor = string.length; var brk = BackBreaks(string, cursor, 0, stateEoTNoBreak); int next = 0; @@ -114,7 +114,7 @@ class StringCharacters extends Iterable implements Characters { } @override - bool contains(Object other) { + bool contains(Object? other) { if (other is String) { if (other.isEmpty) return false; int next = Breaks(other, 0, other.length, stateSoTNoBreak).nextBreak(); @@ -375,14 +375,14 @@ class StringCharacters extends Iterable implements Characters { String toString() => string; @override - CharacterRange findFirst(Characters characters) { + CharacterRange? findFirst(Characters characters) { var range = _rangeAll; if (range.collapseToFirst(characters)) return range; return null; } @override - CharacterRange findLast(Characters characters) { + CharacterRange? findLast(Characters characters) { var range = _rangeAll; if (range.collapseToLast(characters)) return range; return null; @@ -408,7 +408,7 @@ class StringCharacterRange implements CharacterRange { /// The [current] value is created lazily and cached to avoid repeated /// or unnecessary string allocation. - String _currentCache; + String? _currentCache; StringCharacterRange(String string) : this._(string, 0, 0); StringCharacterRange._(this._string, this._start, this._end); @@ -778,8 +778,7 @@ class StringCharacterRange implements CharacterRange { } @override - CharacterRange /*?*/ replaceFirst( - Characters pattern, Characters replacement) { + CharacterRange? replaceFirst(Characters pattern, Characters replacement) { String patternString = pattern.string; String replacementString = replacement.string; String replaced; @@ -799,7 +798,7 @@ class StringCharacterRange implements CharacterRange { } @override - CharacterRange /*?*/ replaceAll(Characters pattern, Characters replacement) { + CharacterRange? replaceAll(Characters pattern, Characters replacement) { var patternString = pattern.string; var replacementString = replacement.string; if (patternString.isEmpty) { @@ -811,7 +810,7 @@ class StringCharacterRange implements CharacterRange { if (_start == _end) return null; int start = 0; int cursor = _start; - StringBuffer buffer; + StringBuffer? buffer; while ((cursor = _indexOf(_string, patternString, cursor, _end)) >= 0) { (buffer ??= StringBuffer()) ..write(_string.substring(start, cursor)) diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 8863486e..c0b1dc46 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,10 +1,96 @@ name: characters -version: 1.0.0 +version: 1.1.0-nullsafety description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters environment: - sdk: ">=2.6.0 <3.0.0" + # This must remain a tight constraint (only allow dev versions) until nnbd is + # stable. + sdk: '>=2.9.0-18.0 <2.9.0' + dev_dependencies: test: "^1.6.0" pedantic: ^1.9.0 + +dependency_overrides: + async: + git: + url: git://github.com/dart-lang/async.git + ref: null_safety + boolean_selector: + git: + url: git://github.com/dart-lang/boolean_selector.git + ref: null_safety + charcode: + git: + url: git://github.com/dart-lang/charcode.git + ref: null_safety + collection: + git: git://github.com/dart-lang/collection.git + js: + git: + url: git://github.com/dart-lang/sdk.git + path: pkg/js + matcher: + git: + url: git://github.com/dart-lang/matcher.git + ref: null_safety + meta: + git: + url: git://github.com/dart-lang/sdk.git + path: pkg/meta + path: + git: + url: git://github.com/dart-lang/path.git + ref: null_safety + pedantic: + git: + url: git://github.com/dart-lang/pedantic.git + ref: null_safety + pool: + git: + url: git://github.com/dart-lang/pool.git + ref: null_safety + source_maps: + git: + url: git://github.com/dart-lang/source_maps.git + ref: null_safety + source_map_stack_trace: + git: + url: git://github.com/dart-lang/source_map_stack_trace.git + ref: null_safety + source_span: + git: + url: git://github.com/dart-lang/source_span.git + ref: null_safety + stack_trace: + git: + url: git://github.com/dart-lang/stack_trace.git + ref: null_safety + stream_channel: + git: + url: git://github.com/dart-lang/stream_channel.git + ref: null_safety + string_scanner: + git: + url: git://github.com/dart-lang/string_scanner.git + ref: null_safety + term_glyph: + git: + url: git://github.com/dart-lang/term_glyph.git + ref: null_safety + test_api: + git: + url: git://github.com/dart-lang/test.git + ref: null_safety + path: pkgs/test_api + test_core: + git: + url: git://github.com/dart-lang/test.git + ref: null_safety + path: pkgs/test_core + test: + git: + url: git://github.com/dart-lang/test.git + ref: null_safety + path: pkgs/test diff --git a/pkgs/characters/test/characters_test.dart b/pkgs/characters/test/characters_test.dart index f34e6ecf..d7f057b1 100644 --- a/pkgs/characters/test/characters_test.dart +++ b/pkgs/characters/test/characters_test.dart @@ -1,668 +1,13 @@ -// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import "dart:math"; - -import "package:test/test.dart"; - -import "package:characters/characters.dart"; - -import "src/unicode_tests.dart"; -import "src/unicode_grapheme_tests.dart"; -import "src/various_tests.dart"; - -Random random; - -void main([List args]) { - // Ensure random seed is part of every test failure message, - // and that it can be reapplied for testing. - var seed = (args != null && args.isNotEmpty) - ? int.parse(args[0]) - : Random().nextInt(0x3FFFFFFF); - random = Random(seed); - group("[Random Seed: $seed]", tests); - group("characters", () { - test("operations", () { - var flag = "\u{1F1E9}\u{1F1F0}"; // Regional Indicators "DK". - var string = "Hi $flag!"; - expect(string.length, 8); - var cs = gc(string); - expect(cs.length, 5); - expect(cs.toList(), ["H", "i", " ", flag, "!"]); - expect(cs.skip(2).toString(), " $flag!"); - expect(cs.skipLast(2).toString(), "Hi "); - expect(cs.take(2).toString(), "Hi"); - expect(cs.takeLast(2).toString(), "$flag!"); - - expect(cs.contains("\u{1F1E9}"), false); - expect(cs.contains(flag), true); - expect(cs.contains("$flag!"), false); - expect(cs.containsAll(gc("$flag!")), true); - - expect(cs.takeWhile((x) => x != " ").toString(), "Hi"); - expect(cs.takeLastWhile((x) => x != " ").toString(), "$flag!"); - expect(cs.skipWhile((x) => x != " ").toString(), " $flag!"); - expect(cs.skipLastWhile((x) => x != " ").toString(), "Hi "); - - expect(cs.findFirst(gc("")).moveBack(), false); - expect(cs.findFirst(gc(flag)).current, flag); - expect(cs.findLast(gc(flag)).current, flag); - expect(cs.iterator.moveNext(), true); - expect(cs.iterator.moveBack(), false); - expect((cs.iterator..moveNext()).current, "H"); - expect(cs.iteratorAtEnd.moveNext(), false); - expect(cs.iteratorAtEnd.moveBack(), true); - expect((cs.iteratorAtEnd..moveBack()).current, "!"); - }); - - testParts(gc("a"), gc("b"), gc("c"), gc("d"), gc("e")); - - // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. - var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. - var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. - var zwj = "\u200d"; // U+200D, ZWJ - var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram - - testParts(gc("$flag$white$zwj$rainbow"), gc("$flag$white"), gc("$rainbow"), - gc("$flag$zwj$rainbow"), gc("!")); - }); -} - -void tests() { - test("empty", () { - expectGC(gc(""), []); - }); - group("gc-ASCII", () { - for (var text in [ - "", - "A", - "123456abcdefab", - ]) { - test('"$text"', () { - expectGC(gc(text), charsOf(text)); - }); - } - test("CR+NL", () { - expectGC(gc("a\r\nb"), ["a", "\r\n", "b"]); - expectGC(gc("a\n\rb"), ["a", "\n", "\r", "b"]); - }); - }); - group("Non-ASCII single-code point", () { - for (var text in [ - "à la mode", - "rødgrød-æble-ål", - ]) { - test('"$text"', () { - expectGC(gc(text), charsOf(text)); - }); - } - }); - group("Combining marks", () { - var text = "a\u0300 la mode"; - test('"$text"', () { - expectGC(gc(text), ["a\u0300", " ", "l", "a", " ", "m", "o", "d", "e"]); - }); - var text2 = "æble-a\u030Al"; - test('"$text2"', () { - expectGC(gc(text2), ["æ", "b", "l", "e", "-", "a\u030A", "l"]); - }); - }); - - group("Regional Indicators", () { - test('"🇦🇩🇰🇾🇪🇸"', () { - // Andorra, Cayman Islands, Spain. - expectGC(gc("🇦🇩🇰🇾🇪🇸"), ["🇦🇩", "🇰🇾", "🇪🇸"]); - }); - test('"X🇦🇩🇰🇾🇪🇸"', () { - // Other, Andorra, Cayman Islands, Spain. - expectGC(gc("X🇦🇩🇰🇾🇪🇸"), ["X", "🇦🇩", "🇰🇾", "🇪🇸"]); - }); - test('"🇩🇰🇾🇪🇸"', () { - // Denmark, Yemen, unmatched S. - expectGC(gc("🇩🇰🇾🇪🇸"), ["🇩🇰", "🇾🇪", "🇸"]); - }); - test('"X🇩🇰🇾🇪🇸"', () { - // Other, Denmark, Yemen, unmatched S. - expectGC(gc("X🇩🇰🇾🇪🇸"), ["X", "🇩🇰", "🇾🇪", "🇸"]); - }); - }); - - group("Hangul", () { - // Individual characters found on Wikipedia. Not expected to make sense. - test('"읍쌍된밟"', () { - expectGC(gc("읍쌍된밟"), ["읍", "쌍", "된", "밟"]); - }); - }); - - group("Unicode test", () { - for (var gcs in splitTests) { - test("[${testDescription(gcs)}]", () { - expectGC(gc(gcs.join()), gcs); - }); - } - }); - - group("Emoji test", () { - for (var gcs in emojis) { - test("[${testDescription(gcs)}]", () { - expectGC(gc(gcs.join()), gcs); - }); - } - }); - - group("Zalgo test", () { - for (var gcs in zalgo) { - test("[${testDescription(gcs)}]", () { - expectGC(gc(gcs.join()), gcs); - }); - } - }); -} - -// Converts text with no multi-code-point grapheme clusters into -// list of grapheme clusters. -List charsOf(String text) => - text.runes.map((r) => String.fromCharCode(r)).toList(); - -void expectGC(Characters actual, List expected) { - var text = expected.join(); - - // Iterable operations. - expect(actual.string, text); - expect(actual.toString(), text); - expect(actual.toList(), expected); - expect(actual.length, expected.length); - if (expected.isNotEmpty) { - expect(actual.first, expected.first); - expect(actual.last, expected.last); - } else { - expect(() => actual.first, throwsStateError); - expect(() => actual.last, throwsStateError); - } - if (expected.length == 1) { - expect(actual.single, expected.single); - } else { - expect(() => actual.single, throwsStateError); - } - expect(actual.isEmpty, expected.isEmpty); - expect(actual.isNotEmpty, expected.isNotEmpty); - expect(actual.contains(""), false); - for (var char in expected) { - expect(actual.contains(char), true); - } - for (int i = 1; i < expected.length; i++) { - expect(actual.contains(expected[i - 1] + expected[i]), false); - } - expect(actual.skip(1).toList(), expected.skip(1).toList()); - expect(actual.take(1).toList(), expected.take(1).toList()); - expect(actual.skip(1).toString(), expected.skip(1).join()); - expect(actual.take(1).toString(), expected.take(1).join()); - - if (expected.isNotEmpty) { - expect(actual.skipLast(1).toList(), - expected.take(expected.length - 1).toList()); - expect(actual.takeLast(1).toList(), - expected.skip(expected.length - 1).toList()); - expect(actual.skipLast(1).toString(), - expected.take(expected.length - 1).join()); - expect(actual.takeLast(1).toString(), - expected.skip(expected.length - 1).join()); - } - bool isEven(String s) => s.length.isEven; - - expect( - actual.skipWhile(isEven).toList(), expected.skipWhile(isEven).toList()); - expect( - actual.takeWhile(isEven).toList(), expected.takeWhile(isEven).toList()); - expect( - actual.skipWhile(isEven).toString(), expected.skipWhile(isEven).join()); - expect( - actual.takeWhile(isEven).toString(), expected.takeWhile(isEven).join()); - - expect(actual.skipLastWhile(isEven).toString(), - expected.toList().reversed.skipWhile(isEven).toList().reversed.join()); - expect(actual.takeLastWhile(isEven).toString(), - expected.toList().reversed.takeWhile(isEven).toList().reversed.join()); - - expect(actual.where(isEven).toString(), expected.where(isEven).join()); - - expect((actual + actual).toString(), actual.string + actual.string); - - // Iteration. - var it = actual.iterator; - expect(it.isEmpty, true); - for (var i = 0; i < expected.length; i++) { - expect(it.moveNext(), true); - expect(it.current, expected[i]); - - expect(actual.elementAt(i), expected[i]); - expect(actual.skip(i).first, expected[i]); - } - expect(it.moveNext(), false); - for (var i = expected.length - 1; i >= 0; i--) { - expect(it.moveBack(), true); - expect(it.current, expected[i]); - } - expect(it.moveBack(), false); - expect(it.isEmpty, true); - - // GraphemeClusters operations. - expect(actual.toUpperCase().string, text.toUpperCase()); - expect(actual.toLowerCase().string, text.toLowerCase()); - - expect(actual.string, text); - - expect(actual.containsAll(gc("")), true); - expect(actual.containsAll(actual), true); - if (expected.isNotEmpty) { - int steps = min(5, expected.length); - for (int s = 0; s <= steps; s++) { - int i = expected.length * s ~/ steps; - expect(actual.startsWith(gc(expected.sublist(0, i).join())), true); - expect(actual.endsWith(gc(expected.sublist(i).join())), true); - for (int t = s + 1; t <= steps; t++) { - int j = expected.length * t ~/ steps; - var slice = expected.sublist(i, j).join(); - var gcs = gc(slice); - expect(actual.containsAll(gcs), true); - } - } - } - - { - // Random walk back and forth. - var it = actual.iterator; - int pos = -1; - if (random.nextBool()) { - pos = expected.length; - it = actual.iteratorAtEnd; - } - int steps = 5 + random.nextInt(expected.length * 2 + 1); - bool lastMove = false; - while (true) { - bool back = false; - if (pos < 0) { - expect(lastMove, false); - expect(it.isEmpty, true); - } else if (pos >= expected.length) { - expect(lastMove, false); - expect(it.isEmpty, true); - back = true; - } else { - expect(lastMove, true); - expect(it.current, expected[pos]); - back = random.nextBool(); - } - if (--steps < 0) break; - if (back) { - lastMove = it.moveBack(); - pos -= 1; - } else { - lastMove = it.moveNext(); - pos += 1; - } - } - } -} - -Characters gc(String string) => Characters(string); - -void testParts( - Characters a, Characters b, Characters c, Characters d, Characters e) { - var cs = gc("$a$b$c$d$e"); - test("$cs", () { - var it = cs.iterator; - expect(it.isEmpty, true); - expect(it.isNotEmpty, false); - expect(it.current, ""); - - // moveNext(). - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$a"); - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$b"); - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$c"); - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$d"); - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$e"); - expect(it.moveNext(), false); - expect(it.isEmpty, true); - expect(it.current, ""); - - // moveBack(). - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$e"); - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$d"); - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$c"); - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$b"); - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$a"); - expect(it.moveBack(), false); - expect(it.isEmpty, true); - expect(it.current, ""); - - // moveNext(int). - expect(it.moveTo(c), true); - expect(it.current, "$c"); - expect(it.moveTo(b), false); - expect(it.moveTo(c), false); - expect(it.current, "$c"); - expect(it.moveTo(d), true); - expect(it.current, "$d"); - - // moveBack(c). - expect(it.moveBackTo(c), true); - expect(it.current, "$c"); - expect(it.moveBackTo(d), false); - expect(it.moveBackTo(c), false); - expect(it.moveBackTo(a), true); - expect(it.current, "$a"); - - // moveNext(n) - expect(it.moveBack(), false); - - expect(it.moveNext(2), true); - expect(it.current, "$a$b"); - expect(it.moveNext(4), false); - expect(it.current, "$c$d$e"); - expect(it.moveNext(0), true); - expect(it.current, ""); - expect(it.moveNext(1), false); - expect(it.current, ""); - - // moveBack(n). - expect(it.moveBack(2), true); - expect(it.current, "$d$e"); - expect(it.moveBack(1), true); - expect(it.current, "$c"); - expect(it.moveBack(3), false); - expect(it.current, "$a$b"); - expect(it.moveBack(), false); - - // moveFirst. - it.expandAll(); - expect(it.current, "$a$b$c$d$e"); - expect(it.collapseToFirst(b), true); - expect(it.current, "$b"); - it.expandAll(); - expect(it.current, "$b$c$d$e"); - expect(it.collapseToFirst(a), false); - expect(it.current, "$b$c$d$e"); - - // moveBackTo - it.expandBackAll(); - expect(it.current, "$a$b$c$d$e"); - expect(it.collapseToLast(c), true); - expect(it.current, "$c"); - - // includeNext/includePrevious - expect(it.expandTo(e), true); - expect(it.current, "$c$d$e"); - expect(it.expandTo(e), false); - expect(it.expandBackTo(b), true); - expect(it.current, "$b$c$d$e"); - expect(it.expandBackTo(b), false); - expect(it.current, "$b$c$d$e"); - expect(it.collapseToFirst(c), true); - expect(it.current, "$c"); - - // includeUntilNext/expandBackUntil - expect(it.expandBackUntil(a), true); - expect(it.current, "$b$c"); - expect(it.expandBackUntil(a), true); - expect(it.current, "$b$c"); - expect(it.expandUntil(e), true); - expect(it.current, "$b$c$d"); - expect(it.expandUntil(e), true); - expect(it.current, "$b$c$d"); - - // dropFirst/dropLast - expect(it.dropFirst(), true); - expect(it.current, "$c$d"); - expect(it.dropLast(), true); - expect(it.current, "$c"); - it.expandBackAll(); - it.expandAll(); - expect(it.current, "$a$b$c$d$e"); - expect(it.dropTo(b), true); - expect(it.current, "$c$d$e"); - expect(it.dropBackTo(d), true); - expect(it.current, "$c"); - - it.expandBackAll(); - it.expandAll(); - expect(it.current, "$a$b$c$d$e"); - - expect(it.dropUntil(b), true); - expect(it.current, "$b$c$d$e"); - expect(it.dropBackUntil(d), true); - expect(it.current, "$b$c$d"); - - it.dropWhile((x) => x == b.string); - expect(it.current, "$c$d"); - it.expandBackAll(); - expect(it.current, "$a$b$c$d"); - it.dropBackWhile((x) => x != b.string); - expect(it.current, "$a$b"); - it.dropBackWhile((x) => false); - expect(it.current, "$a$b"); - - // include..While - it.expandWhile((x) => false); - expect(it.current, "$a$b"); - it.expandWhile((x) => x != e.string); - expect(it.current, "$a$b$c$d"); - expect(it.collapseToFirst(c), true); - expect(it.current, "$c"); - it.expandBackWhile((x) => false); - expect(it.current, "$c"); - it.expandBackWhile((x) => x != a.string); - expect(it.current, "$b$c"); - - var cs2 = cs.replaceAll(c, gc("")); - var cs3 = cs.replaceFirst(c, gc("")); - var cs4 = cs.findFirst(c).replaceRange(gc("")).source; - var cse = gc("$a$b$d$e"); - expect(cs2, cse); - expect(cs3, cse); - expect(cs4, cse); - var cs5 = cs4.replaceAll(a, c); - expect(cs5, gc("$c$b$d$e")); - var cs6 = cs5.replaceAll(gc(""), a); - expect(cs6, gc("$a$c$a$b$a$d$a$e$a")); - var cs7 = cs6.replaceFirst(b, a); - expect(cs7, gc("$a$c$a$a$a$d$a$e$a")); - var cs8 = cs7.replaceFirst(e, a); - expect(cs8, gc("$a$c$a$a$a$d$a$a$a")); - var cs9 = cs8.replaceAll(a + a, b); - expect(cs9, gc("$a$c$b$a$d$b$a")); - it = cs9.iterator; - it.moveTo(b + a); - expect("$b$a", it.current); - it.expandTo(b + a); - expect("$b$a$d$b$a", it.current); - var cs10 = it.replaceAll(b + a, e + e); - expect(cs10.currentCharacters, e + e + d + e + e); - expect(cs10.source, gc("$a$c$e$e$d$e$e")); - var cs11 = it.replaceRange(e); - expect(cs11.currentCharacters, e); - expect(cs11.source, gc("$a$c$e")); - - var cs12 = gc("$a$b$a"); - expect(cs12.split(b), [a, a]); - expect(cs12.split(a), [gc(""), b, gc("")]); - expect(cs12.split(a, 2), [gc(""), gc("$b$a")]); - - expect(cs12.split(gc("")), [a, b, a]); - expect(cs12.split(gc(""), 2), [a, gc("$b$a")]); - - expect(gc("").split(gc("")), [gc("")]); - - var cs13 = gc("$b$a$b$a$b$a"); - expect(cs13.split(b), [gc(""), a, a, a]); - expect(cs13.split(b, 1), [cs13]); - expect(cs13.split(b, 2), [gc(""), gc("$a$b$a$b$a")]); - expect(cs13.split(b, 3), [gc(""), a, gc("$a$b$a")]); - expect(cs13.split(b, 4), [gc(""), a, a, a]); - expect(cs13.split(b, 5), [gc(""), a, a, a]); - expect(cs13.split(b, 9999), [gc(""), a, a, a]); - expect(cs13.split(b, 0), [gc(""), a, a, a]); - expect(cs13.split(b, -1), [gc(""), a, a, a]); - expect(cs13.split(b, -9999), [gc(""), a, a, a]); - - it = cs13.iterator..expandAll(); - expect(it.current, "$b$a$b$a$b$a"); - it.dropFirst(); - it.dropLast(); - expect(it.current, "$a$b$a$b"); - expect(it.split(a).map((range) => range.current), ["", "$b", "$b"]); - expect(it.split(a, 2).map((range) => range.current), ["", "$b$a$b"]); - // Each split is after an *a*. - bool first = true; - for (var range in it.split(a)) { - if (range.isEmpty) { - // First range is empty. - expect(first, true); - first = false; - continue; - } - // Later ranges are "b" that come after "a". - expect(range.current, "$b"); - range.moveBack(); - expect(range.current, "$a"); - } - - expect(it.split(gc("")).map((range) => range.current), - ["$a", "$b", "$a", "$b"]); - - expect(gc("").iterator.split(gc("")).map((range) => range.current), [""]); - - expect(cs.startsWith(gc("")), true); - expect(cs.startsWith(a), true); - expect(cs.startsWith(a + b), true); - expect(cs.startsWith(gc("$a$b$c")), true); - expect(cs.startsWith(gc("$a$b$c$d")), true); - expect(cs.startsWith(gc("$a$b$c$d$e")), true); - expect(cs.startsWith(b), false); - expect(cs.startsWith(c), false); - expect(cs.startsWith(d), false); - expect(cs.startsWith(e), false); - - expect(cs.endsWith(gc("")), true); - expect(cs.endsWith(e), true); - expect(cs.endsWith(d + e), true); - expect(cs.endsWith(gc("$c$d$e")), true); - expect(cs.endsWith(gc("$b$c$d$e")), true); - expect(cs.endsWith(gc("$a$b$c$d$e")), true); - expect(cs.endsWith(d), false); - expect(cs.endsWith(c), false); - expect(cs.endsWith(b), false); - expect(cs.endsWith(a), false); - - it = cs.findFirst(b + c); - expect(it.startsWith(gc("")), true); - expect(it.startsWith(b), true); - expect(it.startsWith(b + c), true); - expect(it.startsWith(a + b + c), false); - expect(it.startsWith(b + c + d), false); - expect(it.startsWith(a), false); - - expect(it.endsWith(gc("")), true); - expect(it.endsWith(c), true); - expect(it.endsWith(b + c), true); - expect(it.endsWith(a + b + c), false); - expect(it.endsWith(b + c + d), false); - expect(it.endsWith(d), false); - - it.collapseToFirst(c); - expect(it.isPrecededBy(gc("")), true); - expect(it.isPrecededBy(b), true); - expect(it.isPrecededBy(a + b), true); - expect(it.isPrecededBy(a + b + c), false); - expect(it.isPrecededBy(a), false); - - expect(it.isFollowedBy(gc("")), true); - expect(it.isFollowedBy(d), true); - expect(it.isFollowedBy(d + e), true); - expect(it.isFollowedBy(c + d + e), false); - expect(it.isFollowedBy(e), false); - }); - test("replace methods", () { - // Unicode grapheme breaking character classes, - // represented by their first value. - - var pattern = gc("\t"); // A non-combining entry to be replaced. - var non = gc(""); - - var c = otr + cr + pattern + lf + pic + pattern + zwj + pic + otr; - var r = c.replaceAll(pattern, non); - expect(r, otr + cr + lf + pic + zwj + pic + otr); - var ci = c.iterator..moveNextAll(); - var ri = ci.replaceAll(pattern, non); - expect(ri.currentCharacters, otr + cr + lf + pic + zwj + pic + otr); - ci.dropFirst(); - ci.dropLast(); - expect(ci.currentCharacters, cr + pattern + lf + pic + pattern + zwj + pic); - expect(ci.currentCharacters.length, 7); - ri = ci.replaceAll(pattern, non); - expect(ri.currentCharacters, cr + lf + pic + zwj + pic); - expect(ri.currentCharacters.length, 2); - ci.dropFirst(); - ci.dropLast(5); - expect(ci.currentCharacters, pattern); - ri = ci.replaceAll(pattern, non); - expect(ri.currentCharacters, cr + lf); - ci.moveNext(2); - ci.moveNext(1); - expect(ci.currentCharacters, pattern); - ri = ci.replaceAll(pattern, non); - expect(ri.currentCharacters, pic + zwj + pic); - - c = otr + pic + ext + pattern + pic + ext + otr; - expect(c.length, 5); - ci = c.iterator..moveTo(pattern); - expect(ci.currentCharacters, pattern); - ri = ci.replaceAll(pattern, zwj); - expect(ri.currentCharacters, pic + ext + zwj + pic + ext); - - c = reg + pattern + reg + reg; - ci = c.iterator..moveTo(pattern); - ri = ci.replaceRange(non); - expect(ri.currentCharacters, reg + reg); - expect(ri.moveNext(), true); - expect(ri.currentCharacters, reg); - }); -} - -/// Sample characters from each breaking algorithm category. -final Characters ctl = gc("\x00"); // Control, NUL. -final Characters cr = gc("\r"); // Carriage Return, CR. -final Characters lf = gc("\n"); // Newline, NL. -final Characters otr = gc(" "); // Other, Space. -final Characters ext = gc("\u0300"); // Extend, Combining Grave Accent. -final Characters spc = gc("\u0903"); // Spacing Mark, Devanagari Sign Visarga. -final Characters pre = gc("\u0600"); // Prepend, Arabic Number Sign. -final Characters zwj = gc("\u200d"); // Zero-Width Joiner. -final Characters pic = gc("\u00a9"); // Extended Pictographic, Copyright. -final Characters reg = gc("\u{1f1e6}"); // Regional Identifier "a". -final Characters hanl = gc("\u1100"); // Hangul L, Choseong Kiyeok. -final Characters hanv = gc("\u1160"); // Hangul V, Jungseong Filler. -final Characters hant = gc("\u11a8"); // Hangul T, Jongseong Kiyeok. -final Characters hanlv = gc("\uac00"); // Hangul LV, Syllable Ga. -final Characters hanlvt = gc("\uac01"); // Hangul LVT, Syllable Gag. +// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Unsound entry point. Use until all dependencies are sound. +// Then move `characters_test.dart` back out from `sound_tests/`. + +// @dart=2.8 +import 'sound_tests/characters_test.dart' as sound; + +void main() { + sound.main(); +} diff --git a/pkgs/characters/test/sound_tests/characters_test.dart b/pkgs/characters/test/sound_tests/characters_test.dart new file mode 100644 index 00000000..5fe41fe4 --- /dev/null +++ b/pkgs/characters/test/sound_tests/characters_test.dart @@ -0,0 +1,668 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:math"; + +import "package:test/test.dart"; + +import "package:characters/characters.dart"; + +import "../src/unicode_tests.dart"; +import "../src/unicode_grapheme_tests.dart"; +import "../src/various_tests.dart"; + +late Random random; + +void main([List? args]) { + // Ensure random seed is part of every test failure message, + // and that it can be reapplied for testing. + var seed = (args != null && args.isNotEmpty) + ? int.parse(args[0]) + : Random().nextInt(0x3FFFFFFF); + random = Random(seed); + group("[Random Seed: $seed]", tests); + group("characters", () { + test("operations", () { + var flag = "\u{1F1E9}\u{1F1F0}"; // Regional Indicators "DK". + var string = "Hi $flag!"; + expect(string.length, 8); + var cs = gc(string); + expect(cs.length, 5); + expect(cs.toList(), ["H", "i", " ", flag, "!"]); + expect(cs.skip(2).toString(), " $flag!"); + expect(cs.skipLast(2).toString(), "Hi "); + expect(cs.take(2).toString(), "Hi"); + expect(cs.takeLast(2).toString(), "$flag!"); + + expect(cs.contains("\u{1F1E9}"), false); + expect(cs.contains(flag), true); + expect(cs.contains("$flag!"), false); + expect(cs.containsAll(gc("$flag!")), true); + + expect(cs.takeWhile((x) => x != " ").toString(), "Hi"); + expect(cs.takeLastWhile((x) => x != " ").toString(), "$flag!"); + expect(cs.skipWhile((x) => x != " ").toString(), " $flag!"); + expect(cs.skipLastWhile((x) => x != " ").toString(), "Hi "); + + expect(cs.findFirst(gc(""))!.moveBack(), false); + expect(cs.findFirst(gc(flag))!.current, flag); + expect(cs.findLast(gc(flag))!.current, flag); + expect(cs.iterator.moveNext(), true); + expect(cs.iterator.moveBack(), false); + expect((cs.iterator..moveNext()).current, "H"); + expect(cs.iteratorAtEnd.moveNext(), false); + expect(cs.iteratorAtEnd.moveBack(), true); + expect((cs.iteratorAtEnd..moveBack()).current, "!"); + }); + + testParts(gc("a"), gc("b"), gc("c"), gc("d"), gc("e")); + + // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. + var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. + var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. + var zwj = "\u200d"; // U+200D, ZWJ + var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram + + testParts(gc("$flag$white$zwj$rainbow"), gc("$flag$white"), gc("$rainbow"), + gc("$flag$zwj$rainbow"), gc("!")); + }); +} + +void tests() { + test("empty", () { + expectGC(gc(""), []); + }); + group("gc-ASCII", () { + for (var text in [ + "", + "A", + "123456abcdefab", + ]) { + test('"$text"', () { + expectGC(gc(text), charsOf(text)); + }); + } + test("CR+NL", () { + expectGC(gc("a\r\nb"), ["a", "\r\n", "b"]); + expectGC(gc("a\n\rb"), ["a", "\n", "\r", "b"]); + }); + }); + group("Non-ASCII single-code point", () { + for (var text in [ + "à la mode", + "rødgrød-æble-ål", + ]) { + test('"$text"', () { + expectGC(gc(text), charsOf(text)); + }); + } + }); + group("Combining marks", () { + var text = "a\u0300 la mode"; + test('"$text"', () { + expectGC(gc(text), ["a\u0300", " ", "l", "a", " ", "m", "o", "d", "e"]); + }); + var text2 = "æble-a\u030Al"; + test('"$text2"', () { + expectGC(gc(text2), ["æ", "b", "l", "e", "-", "a\u030A", "l"]); + }); + }); + + group("Regional Indicators", () { + test('"🇦🇩🇰🇾🇪🇸"', () { + // Andorra, Cayman Islands, Spain. + expectGC(gc("🇦🇩🇰🇾🇪🇸"), ["🇦🇩", "🇰🇾", "🇪🇸"]); + }); + test('"X🇦🇩🇰🇾🇪🇸"', () { + // Other, Andorra, Cayman Islands, Spain. + expectGC(gc("X🇦🇩🇰🇾🇪🇸"), ["X", "🇦🇩", "🇰🇾", "🇪🇸"]); + }); + test('"🇩🇰🇾🇪🇸"', () { + // Denmark, Yemen, unmatched S. + expectGC(gc("🇩🇰🇾🇪🇸"), ["🇩🇰", "🇾🇪", "🇸"]); + }); + test('"X🇩🇰🇾🇪🇸"', () { + // Other, Denmark, Yemen, unmatched S. + expectGC(gc("X🇩🇰🇾🇪🇸"), ["X", "🇩🇰", "🇾🇪", "🇸"]); + }); + }); + + group("Hangul", () { + // Individual characters found on Wikipedia. Not expected to make sense. + test('"읍쌍된밟"', () { + expectGC(gc("읍쌍된밟"), ["읍", "쌍", "된", "밟"]); + }); + }); + + group("Unicode test", () { + for (var gcs in splitTests) { + test("[${testDescription(gcs)}]", () { + expectGC(gc(gcs.join()), gcs); + }); + } + }); + + group("Emoji test", () { + for (var gcs in emojis) { + test("[${testDescription(gcs)}]", () { + expectGC(gc(gcs.join()), gcs); + }); + } + }); + + group("Zalgo test", () { + for (var gcs in zalgo) { + test("[${testDescription(gcs)}]", () { + expectGC(gc(gcs.join()), gcs); + }); + } + }); +} + +// Converts text with no multi-code-point grapheme clusters into +// list of grapheme clusters. +List charsOf(String text) => + text.runes.map((r) => String.fromCharCode(r)).toList(); + +void expectGC(Characters actual, List expected) { + var text = expected.join(); + + // Iterable operations. + expect(actual.string, text); + expect(actual.toString(), text); + expect(actual.toList(), expected); + expect(actual.length, expected.length); + if (expected.isNotEmpty) { + expect(actual.first, expected.first); + expect(actual.last, expected.last); + } else { + expect(() => actual.first, throwsStateError); + expect(() => actual.last, throwsStateError); + } + if (expected.length == 1) { + expect(actual.single, expected.single); + } else { + expect(() => actual.single, throwsStateError); + } + expect(actual.isEmpty, expected.isEmpty); + expect(actual.isNotEmpty, expected.isNotEmpty); + expect(actual.contains(""), false); + for (var char in expected) { + expect(actual.contains(char), true); + } + for (int i = 1; i < expected.length; i++) { + expect(actual.contains(expected[i - 1] + expected[i]), false); + } + expect(actual.skip(1).toList(), expected.skip(1).toList()); + expect(actual.take(1).toList(), expected.take(1).toList()); + expect(actual.skip(1).toString(), expected.skip(1).join()); + expect(actual.take(1).toString(), expected.take(1).join()); + + if (expected.isNotEmpty) { + expect(actual.skipLast(1).toList(), + expected.take(expected.length - 1).toList()); + expect(actual.takeLast(1).toList(), + expected.skip(expected.length - 1).toList()); + expect(actual.skipLast(1).toString(), + expected.take(expected.length - 1).join()); + expect(actual.takeLast(1).toString(), + expected.skip(expected.length - 1).join()); + } + bool isEven(String s) => s.length.isEven; + + expect( + actual.skipWhile(isEven).toList(), expected.skipWhile(isEven).toList()); + expect( + actual.takeWhile(isEven).toList(), expected.takeWhile(isEven).toList()); + expect( + actual.skipWhile(isEven).toString(), expected.skipWhile(isEven).join()); + expect( + actual.takeWhile(isEven).toString(), expected.takeWhile(isEven).join()); + + expect(actual.skipLastWhile(isEven).toString(), + expected.toList().reversed.skipWhile(isEven).toList().reversed.join()); + expect(actual.takeLastWhile(isEven).toString(), + expected.toList().reversed.takeWhile(isEven).toList().reversed.join()); + + expect(actual.where(isEven).toString(), expected.where(isEven).join()); + + expect((actual + actual).toString(), actual.string + actual.string); + + // Iteration. + var it = actual.iterator; + expect(it.isEmpty, true); + for (var i = 0; i < expected.length; i++) { + expect(it.moveNext(), true); + expect(it.current, expected[i]); + + expect(actual.elementAt(i), expected[i]); + expect(actual.skip(i).first, expected[i]); + } + expect(it.moveNext(), false); + for (var i = expected.length - 1; i >= 0; i--) { + expect(it.moveBack(), true); + expect(it.current, expected[i]); + } + expect(it.moveBack(), false); + expect(it.isEmpty, true); + + // GraphemeClusters operations. + expect(actual.toUpperCase().string, text.toUpperCase()); + expect(actual.toLowerCase().string, text.toLowerCase()); + + expect(actual.string, text); + + expect(actual.containsAll(gc("")), true); + expect(actual.containsAll(actual), true); + if (expected.isNotEmpty) { + int steps = min(5, expected.length); + for (int s = 0; s <= steps; s++) { + int i = expected.length * s ~/ steps; + expect(actual.startsWith(gc(expected.sublist(0, i).join())), true); + expect(actual.endsWith(gc(expected.sublist(i).join())), true); + for (int t = s + 1; t <= steps; t++) { + int j = expected.length * t ~/ steps; + var slice = expected.sublist(i, j).join(); + var gcs = gc(slice); + expect(actual.containsAll(gcs), true); + } + } + } + + { + // Random walk back and forth. + var it = actual.iterator; + int pos = -1; + if (random.nextBool()) { + pos = expected.length; + it = actual.iteratorAtEnd; + } + int steps = 5 + random.nextInt(expected.length * 2 + 1); + bool lastMove = false; + while (true) { + bool back = false; + if (pos < 0) { + expect(lastMove, false); + expect(it.isEmpty, true); + } else if (pos >= expected.length) { + expect(lastMove, false); + expect(it.isEmpty, true); + back = true; + } else { + expect(lastMove, true); + expect(it.current, expected[pos]); + back = random.nextBool(); + } + if (--steps < 0) break; + if (back) { + lastMove = it.moveBack(); + pos -= 1; + } else { + lastMove = it.moveNext(); + pos += 1; + } + } + } +} + +Characters gc(String string) => Characters(string); + +void testParts( + Characters a, Characters b, Characters c, Characters d, Characters e) { + var cs = gc("$a$b$c$d$e"); + test("$cs", () { + var it = cs.iterator; + expect(it.isEmpty, true); + expect(it.isNotEmpty, false); + expect(it.current, ""); + + // moveNext(). + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$a"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$b"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$c"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$d"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$e"); + expect(it.moveNext(), false); + expect(it.isEmpty, true); + expect(it.current, ""); + + // moveBack(). + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$e"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$d"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$c"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$b"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$a"); + expect(it.moveBack(), false); + expect(it.isEmpty, true); + expect(it.current, ""); + + // moveNext(int). + expect(it.moveTo(c), true); + expect(it.current, "$c"); + expect(it.moveTo(b), false); + expect(it.moveTo(c), false); + expect(it.current, "$c"); + expect(it.moveTo(d), true); + expect(it.current, "$d"); + + // moveBack(c). + expect(it.moveBackTo(c), true); + expect(it.current, "$c"); + expect(it.moveBackTo(d), false); + expect(it.moveBackTo(c), false); + expect(it.moveBackTo(a), true); + expect(it.current, "$a"); + + // moveNext(n) + expect(it.moveBack(), false); + + expect(it.moveNext(2), true); + expect(it.current, "$a$b"); + expect(it.moveNext(4), false); + expect(it.current, "$c$d$e"); + expect(it.moveNext(0), true); + expect(it.current, ""); + expect(it.moveNext(1), false); + expect(it.current, ""); + + // moveBack(n). + expect(it.moveBack(2), true); + expect(it.current, "$d$e"); + expect(it.moveBack(1), true); + expect(it.current, "$c"); + expect(it.moveBack(3), false); + expect(it.current, "$a$b"); + expect(it.moveBack(), false); + + // moveFirst. + it.expandAll(); + expect(it.current, "$a$b$c$d$e"); + expect(it.collapseToFirst(b), true); + expect(it.current, "$b"); + it.expandAll(); + expect(it.current, "$b$c$d$e"); + expect(it.collapseToFirst(a), false); + expect(it.current, "$b$c$d$e"); + + // moveBackTo + it.expandBackAll(); + expect(it.current, "$a$b$c$d$e"); + expect(it.collapseToLast(c), true); + expect(it.current, "$c"); + + // includeNext/includePrevious + expect(it.expandTo(e), true); + expect(it.current, "$c$d$e"); + expect(it.expandTo(e), false); + expect(it.expandBackTo(b), true); + expect(it.current, "$b$c$d$e"); + expect(it.expandBackTo(b), false); + expect(it.current, "$b$c$d$e"); + expect(it.collapseToFirst(c), true); + expect(it.current, "$c"); + + // includeUntilNext/expandBackUntil + expect(it.expandBackUntil(a), true); + expect(it.current, "$b$c"); + expect(it.expandBackUntil(a), true); + expect(it.current, "$b$c"); + expect(it.expandUntil(e), true); + expect(it.current, "$b$c$d"); + expect(it.expandUntil(e), true); + expect(it.current, "$b$c$d"); + + // dropFirst/dropLast + expect(it.dropFirst(), true); + expect(it.current, "$c$d"); + expect(it.dropLast(), true); + expect(it.current, "$c"); + it.expandBackAll(); + it.expandAll(); + expect(it.current, "$a$b$c$d$e"); + expect(it.dropTo(b), true); + expect(it.current, "$c$d$e"); + expect(it.dropBackTo(d), true); + expect(it.current, "$c"); + + it.expandBackAll(); + it.expandAll(); + expect(it.current, "$a$b$c$d$e"); + + expect(it.dropUntil(b), true); + expect(it.current, "$b$c$d$e"); + expect(it.dropBackUntil(d), true); + expect(it.current, "$b$c$d"); + + it.dropWhile((x) => x == b.string); + expect(it.current, "$c$d"); + it.expandBackAll(); + expect(it.current, "$a$b$c$d"); + it.dropBackWhile((x) => x != b.string); + expect(it.current, "$a$b"); + it.dropBackWhile((x) => false); + expect(it.current, "$a$b"); + + // include..While + it.expandWhile((x) => false); + expect(it.current, "$a$b"); + it.expandWhile((x) => x != e.string); + expect(it.current, "$a$b$c$d"); + expect(it.collapseToFirst(c), true); + expect(it.current, "$c"); + it.expandBackWhile((x) => false); + expect(it.current, "$c"); + it.expandBackWhile((x) => x != a.string); + expect(it.current, "$b$c"); + + var cs2 = cs.replaceAll(c, gc("")); + var cs3 = cs.replaceFirst(c, gc("")); + var cs4 = cs.findFirst(c)!.replaceRange(gc("")).source; + var cse = gc("$a$b$d$e"); + expect(cs2, cse); + expect(cs3, cse); + expect(cs4, cse); + var cs5 = cs4.replaceAll(a, c); + expect(cs5, gc("$c$b$d$e")); + var cs6 = cs5.replaceAll(gc(""), a); + expect(cs6, gc("$a$c$a$b$a$d$a$e$a")); + var cs7 = cs6.replaceFirst(b, a); + expect(cs7, gc("$a$c$a$a$a$d$a$e$a")); + var cs8 = cs7.replaceFirst(e, a); + expect(cs8, gc("$a$c$a$a$a$d$a$a$a")); + var cs9 = cs8.replaceAll(a + a, b); + expect(cs9, gc("$a$c$b$a$d$b$a")); + it = cs9.iterator; + it.moveTo(b + a); + expect("$b$a", it.current); + it.expandTo(b + a); + expect("$b$a$d$b$a", it.current); + var cs10 = it.replaceAll(b + a, e + e)!; + expect(cs10.currentCharacters, e + e + d + e + e); + expect(cs10.source, gc("$a$c$e$e$d$e$e")); + var cs11 = it.replaceRange(e); + expect(cs11.currentCharacters, e); + expect(cs11.source, gc("$a$c$e")); + + var cs12 = gc("$a$b$a"); + expect(cs12.split(b), [a, a]); + expect(cs12.split(a), [gc(""), b, gc("")]); + expect(cs12.split(a, 2), [gc(""), gc("$b$a")]); + + expect(cs12.split(gc("")), [a, b, a]); + expect(cs12.split(gc(""), 2), [a, gc("$b$a")]); + + expect(gc("").split(gc("")), [gc("")]); + + var cs13 = gc("$b$a$b$a$b$a"); + expect(cs13.split(b), [gc(""), a, a, a]); + expect(cs13.split(b, 1), [cs13]); + expect(cs13.split(b, 2), [gc(""), gc("$a$b$a$b$a")]); + expect(cs13.split(b, 3), [gc(""), a, gc("$a$b$a")]); + expect(cs13.split(b, 4), [gc(""), a, a, a]); + expect(cs13.split(b, 5), [gc(""), a, a, a]); + expect(cs13.split(b, 9999), [gc(""), a, a, a]); + expect(cs13.split(b, 0), [gc(""), a, a, a]); + expect(cs13.split(b, -1), [gc(""), a, a, a]); + expect(cs13.split(b, -9999), [gc(""), a, a, a]); + + it = cs13.iterator..expandAll(); + expect(it.current, "$b$a$b$a$b$a"); + it.dropFirst(); + it.dropLast(); + expect(it.current, "$a$b$a$b"); + expect(it.split(a).map((range) => range.current), ["", "$b", "$b"]); + expect(it.split(a, 2).map((range) => range.current), ["", "$b$a$b"]); + // Each split is after an *a*. + bool first = true; + for (var range in it.split(a)) { + if (range.isEmpty) { + // First range is empty. + expect(first, true); + first = false; + continue; + } + // Later ranges are "b" that come after "a". + expect(range.current, "$b"); + range.moveBack(); + expect(range.current, "$a"); + } + + expect(it.split(gc("")).map((range) => range.current), + ["$a", "$b", "$a", "$b"]); + + expect(gc("").iterator.split(gc("")).map((range) => range.current), [""]); + + expect(cs.startsWith(gc("")), true); + expect(cs.startsWith(a), true); + expect(cs.startsWith(a + b), true); + expect(cs.startsWith(gc("$a$b$c")), true); + expect(cs.startsWith(gc("$a$b$c$d")), true); + expect(cs.startsWith(gc("$a$b$c$d$e")), true); + expect(cs.startsWith(b), false); + expect(cs.startsWith(c), false); + expect(cs.startsWith(d), false); + expect(cs.startsWith(e), false); + + expect(cs.endsWith(gc("")), true); + expect(cs.endsWith(e), true); + expect(cs.endsWith(d + e), true); + expect(cs.endsWith(gc("$c$d$e")), true); + expect(cs.endsWith(gc("$b$c$d$e")), true); + expect(cs.endsWith(gc("$a$b$c$d$e")), true); + expect(cs.endsWith(d), false); + expect(cs.endsWith(c), false); + expect(cs.endsWith(b), false); + expect(cs.endsWith(a), false); + + it = cs.findFirst(b + c)!; + expect(it.startsWith(gc("")), true); + expect(it.startsWith(b), true); + expect(it.startsWith(b + c), true); + expect(it.startsWith(a + b + c), false); + expect(it.startsWith(b + c + d), false); + expect(it.startsWith(a), false); + + expect(it.endsWith(gc("")), true); + expect(it.endsWith(c), true); + expect(it.endsWith(b + c), true); + expect(it.endsWith(a + b + c), false); + expect(it.endsWith(b + c + d), false); + expect(it.endsWith(d), false); + + it.collapseToFirst(c); + expect(it.isPrecededBy(gc("")), true); + expect(it.isPrecededBy(b), true); + expect(it.isPrecededBy(a + b), true); + expect(it.isPrecededBy(a + b + c), false); + expect(it.isPrecededBy(a), false); + + expect(it.isFollowedBy(gc("")), true); + expect(it.isFollowedBy(d), true); + expect(it.isFollowedBy(d + e), true); + expect(it.isFollowedBy(c + d + e), false); + expect(it.isFollowedBy(e), false); + }); + test("replace methods", () { + // Unicode grapheme breaking character classes, + // represented by their first value. + + var pattern = gc("\t"); // A non-combining entry to be replaced. + var non = gc(""); + + var c = otr + cr + pattern + lf + pic + pattern + zwj + pic + otr; + var r = c.replaceAll(pattern, non); + expect(r, otr + cr + lf + pic + zwj + pic + otr); + var ci = c.iterator..moveNextAll(); + var ri = ci.replaceAll(pattern, non)!; + expect(ri.currentCharacters, otr + cr + lf + pic + zwj + pic + otr); + ci.dropFirst(); + ci.dropLast(); + expect(ci.currentCharacters, cr + pattern + lf + pic + pattern + zwj + pic); + expect(ci.currentCharacters.length, 7); + ri = ci.replaceAll(pattern, non)!; + expect(ri.currentCharacters, cr + lf + pic + zwj + pic); + expect(ri.currentCharacters.length, 2); + ci.dropFirst(); + ci.dropLast(5); + expect(ci.currentCharacters, pattern); + ri = ci.replaceAll(pattern, non)!; + expect(ri.currentCharacters, cr + lf); + ci.moveNext(2); + ci.moveNext(1); + expect(ci.currentCharacters, pattern); + ri = ci.replaceAll(pattern, non)!; + expect(ri.currentCharacters, pic + zwj + pic); + + c = otr + pic + ext + pattern + pic + ext + otr; + expect(c.length, 5); + ci = c.iterator..moveTo(pattern); + expect(ci.currentCharacters, pattern); + ri = ci.replaceAll(pattern, zwj)!; + expect(ri.currentCharacters, pic + ext + zwj + pic + ext); + + c = reg + pattern + reg + reg; + ci = c.iterator..moveTo(pattern); + ri = ci.replaceRange(non); + expect(ri.currentCharacters, reg + reg); + expect(ri.moveNext(), true); + expect(ri.currentCharacters, reg); + }); +} + +/// Sample characters from each breaking algorithm category. +final Characters ctl = gc("\x00"); // Control, NUL. +final Characters cr = gc("\r"); // Carriage Return, CR. +final Characters lf = gc("\n"); // Newline, NL. +final Characters otr = gc(" "); // Other, Space. +final Characters ext = gc("\u0300"); // Extend, Combining Grave Accent. +final Characters spc = gc("\u0903"); // Spacing Mark, Devanagari Sign Visarga. +final Characters pre = gc("\u0600"); // Prepend, Arabic Number Sign. +final Characters zwj = gc("\u200d"); // Zero-Width Joiner. +final Characters pic = gc("\u00a9"); // Extended Pictographic, Copyright. +final Characters reg = gc("\u{1f1e6}"); // Regional Identifier "a". +final Characters hanl = gc("\u1100"); // Hangul L, Choseong Kiyeok. +final Characters hanv = gc("\u1160"); // Hangul V, Jungseong Filler. +final Characters hant = gc("\u11a8"); // Hangul T, Jongseong Kiyeok. +final Characters hanlv = gc("\uac00"); // Hangul LV, Syllable Ga. +final Characters hanlvt = gc("\uac01"); // Hangul LVT, Syllable Gag. diff --git a/pkgs/characters/test/src/unicode_tests.dart b/pkgs/characters/test/src/unicode_tests.dart index 740c9664..23bc1ca7 100644 --- a/pkgs/characters/test/src/unicode_tests.dart +++ b/pkgs/characters/test/src/unicode_tests.dart @@ -16,7 +16,7 @@ String testDescription(List expected) { " ÷"; } -var categoryName = List(16) +var categoryName = List.filled(16, "") ..[categoryOther] = "Other" ..[categoryCR] = "CR" ..[categoryLF] = "LF" From c376b8b8ff36a318d713af85da278b2228b73cc9 Mon Sep 17 00:00:00 2001 From: Jacob MacDonald Date: Fri, 17 Jul 2020 09:22:09 -0700 Subject: [PATCH 22/82] allow the <=2.9.10 stable sdk and bump version (dart-lang/characters#29) --- pkgs/characters/CHANGELOG.md | 4 ++- pkgs/characters/pubspec.yaml | 68 ++++++++++-------------------------- 2 files changed, 22 insertions(+), 50 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 458b8c84..f71941be 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,4 +1,6 @@ -# Changelog +## 1.1.0-nullsafety.1 + +* Allow the <=2.9.10 stable sdks. ## 1.1.0-nullsafety diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index c0b1dc46..78e32ea7 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,12 +1,11 @@ name: characters -version: 1.1.0-nullsafety +version: 1.1.0-nullsafety.1 description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters environment: - # This must remain a tight constraint (only allow dev versions) until nnbd is - # stable. - sdk: '>=2.9.0-18.0 <2.9.0' + # This must remain a tight upper bound constraint until nnbd is stable + sdk: '>=2.9.0-18.0 <=2.9.10' dev_dependencies: test: "^1.6.0" @@ -14,17 +13,11 @@ dev_dependencies: dependency_overrides: async: - git: - url: git://github.com/dart-lang/async.git - ref: null_safety + git: git://github.com/dart-lang/async.git boolean_selector: - git: - url: git://github.com/dart-lang/boolean_selector.git - ref: null_safety + git: git://github.com/dart-lang/boolean_selector.git charcode: - git: - url: git://github.com/dart-lang/charcode.git - ref: null_safety + git: git://github.com/dart-lang/charcode.git collection: git: git://github.com/dart-lang/collection.git js: @@ -32,65 +25,42 @@ dependency_overrides: url: git://github.com/dart-lang/sdk.git path: pkg/js matcher: - git: - url: git://github.com/dart-lang/matcher.git - ref: null_safety + git: git://github.com/dart-lang/matcher.git meta: git: url: git://github.com/dart-lang/sdk.git path: pkg/meta path: - git: - url: git://github.com/dart-lang/path.git - ref: null_safety + git: git://github.com/dart-lang/path.git pedantic: - git: - url: git://github.com/dart-lang/pedantic.git - ref: null_safety + git: git://github.com/dart-lang/pedantic.git pool: - git: - url: git://github.com/dart-lang/pool.git - ref: null_safety + git: git://github.com/dart-lang/pool.git source_maps: - git: - url: git://github.com/dart-lang/source_maps.git - ref: null_safety + git: git://github.com/dart-lang/source_maps.git source_map_stack_trace: - git: - url: git://github.com/dart-lang/source_map_stack_trace.git - ref: null_safety + git: git://github.com/dart-lang/source_map_stack_trace.git source_span: - git: - url: git://github.com/dart-lang/source_span.git - ref: null_safety + git: git://github.com/dart-lang/source_span.git stack_trace: - git: - url: git://github.com/dart-lang/stack_trace.git - ref: null_safety + git: git://github.com/dart-lang/stack_trace.git stream_channel: - git: - url: git://github.com/dart-lang/stream_channel.git - ref: null_safety + git: git://github.com/dart-lang/stream_channel.git string_scanner: - git: - url: git://github.com/dart-lang/string_scanner.git - ref: null_safety + git: git://github.com/dart-lang/string_scanner.git term_glyph: - git: - url: git://github.com/dart-lang/term_glyph.git - ref: null_safety + git: git://github.com/dart-lang/term_glyph.git test_api: git: url: git://github.com/dart-lang/test.git - ref: null_safety path: pkgs/test_api test_core: git: url: git://github.com/dart-lang/test.git - ref: null_safety path: pkgs/test_core test: git: url: git://github.com/dart-lang/test.git - ref: null_safety path: pkgs/test + typed_data: + git: git://github.com/dart-lang/typed_data.git From b52ae7881335c04c6f02115bd048c90aec498666 Mon Sep 17 00:00:00 2001 From: Jacob MacDonald Date: Tue, 21 Jul 2020 14:36:50 -0700 Subject: [PATCH 23/82] update to the 2.10 dev sdk (dart-lang/characters#31) * update to the 2.10 dev sdk * fix sdk version in travis.yml * depend on 2-10 version of js/meta --- pkgs/characters/.travis.yml | 14 +++++++------- pkgs/characters/CHANGELOG.md | 5 +++++ pkgs/characters/pubspec.yaml | 8 +++++--- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/pkgs/characters/.travis.yml b/pkgs/characters/.travis.yml index afa42c9f..d95fa82e 100644 --- a/pkgs/characters/.travis.yml +++ b/pkgs/characters/.travis.yml @@ -1,37 +1,37 @@ language: dart dart: -- dev +- preview/raw/2.10.0-0.2-dev jobs: include: - stage: analyze_and_format name: "Analyze lib/ (no experiment flag)" - dart: dev + dart: preview/raw/2.10.0-0.2-dev os: linux script: dartanalyzer --fatal-warnings --fatal-infos lib/ - stage: analyze_and_format name: "Analyze (with experiment flag)" - dart: dev + dart: preview/raw/2.10.0-0.2-dev os: linux script: dartanalyzer --enable-experiment=non-nullable --fatal-warnings --fatal-infos . - stage: analyze_and_format name: "Format" - dart: dev + dart: preview/raw/2.10.0-0.2-dev os: linux script: dartfmt -n --set-exit-if-changed . - stage: test name: "Vm Tests" - dart: dev + dart: preview/raw/2.10.0-0.2-dev os: linux script: pub run --enable-experiment=non-nullable test -p vm - stage: test name: "Web Tests" - dart: dev + dart: preview/raw/2.10.0-0.2-dev os: linux script: pub run --enable-experiment=non-nullable test -p chrome branches: - only: [master, null_safety] + only: [master] cache: directories: diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index f71941be..989359e4 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.1.0-nullsafety.2 + +* Update for the 2.10 dev sdk. + + ## 1.1.0-nullsafety.1 * Allow the <=2.9.10 stable sdks. diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 78e32ea7..b560a25f 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,11 +1,11 @@ name: characters -version: 1.1.0-nullsafety.1 +version: 1.1.0-nullsafety.2 description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters environment: - # This must remain a tight upper bound constraint until nnbd is stable - sdk: '>=2.9.0-18.0 <=2.9.10' + # This must remain a tight constraint until nnbd is stable + sdk: '>=2.10.0-0 <2.10.0' dev_dependencies: test: "^1.6.0" @@ -24,12 +24,14 @@ dependency_overrides: git: url: git://github.com/dart-lang/sdk.git path: pkg/js + ref: 2-10-pkgs matcher: git: git://github.com/dart-lang/matcher.git meta: git: url: git://github.com/dart-lang/sdk.git path: pkg/meta + ref: 2-10-pkgs path: git: git://github.com/dart-lang/path.git pedantic: From 3e203677204bfeadb4b79ceeff7d438e8a5b4ff2 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Thu, 23 Jul 2020 07:27:47 -0700 Subject: [PATCH 24/82] CI: Test on dev branch (dart-lang/characters#32) --- pkgs/characters/.travis.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pkgs/characters/.travis.yml b/pkgs/characters/.travis.yml index d95fa82e..cb4fbf92 100644 --- a/pkgs/characters/.travis.yml +++ b/pkgs/characters/.travis.yml @@ -1,32 +1,28 @@ language: dart + dart: -- preview/raw/2.10.0-0.2-dev +- dev jobs: include: - stage: analyze_and_format name: "Analyze lib/ (no experiment flag)" - dart: preview/raw/2.10.0-0.2-dev os: linux script: dartanalyzer --fatal-warnings --fatal-infos lib/ - stage: analyze_and_format name: "Analyze (with experiment flag)" - dart: preview/raw/2.10.0-0.2-dev os: linux script: dartanalyzer --enable-experiment=non-nullable --fatal-warnings --fatal-infos . - stage: analyze_and_format name: "Format" - dart: preview/raw/2.10.0-0.2-dev os: linux script: dartfmt -n --set-exit-if-changed . - stage: test name: "Vm Tests" - dart: preview/raw/2.10.0-0.2-dev os: linux script: pub run --enable-experiment=non-nullable test -p vm - stage: test name: "Web Tests" - dart: preview/raw/2.10.0-0.2-dev os: linux script: pub run --enable-experiment=non-nullable test -p chrome From 6cfa784f44d0abd7c3842fdaca11dff55a79e909 Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Sat, 29 Aug 2020 10:09:42 +0200 Subject: [PATCH 25/82] Update README.md --- pkgs/characters/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index edabc4a8..e14e3495 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -124,6 +124,7 @@ Characters firstTagCharacters(Characters source) => [Characters]: https://pub.dev/documentation/characters/latest/characters/Characters-class.html "Characters class" [Code Points]: https://unicode.org/glossary/#code_point "Unicode Code Point" [Code Units]: https://unicode.org/glossary/#code_unit "Unicode Code Units" +[Glyph]: http://unicode.org/glossary/#glyph "Unicode Glyph" [Grapheme Clusters]: https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries "Unicode (Extended) Grapheme Cluster" [Iterable]: https://api.dart.dev/stable/2.0.0/dart-core/Iterable-class.html "Iterable class" [Runes]: https://api.dart.dev/stable/2.0.0/dart-core/Runes-class.html "Runes class" From 047dd05380cf981cf57f5ddd771cb60440f5cddf Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Sat, 29 Aug 2020 10:10:08 +0200 Subject: [PATCH 26/82] Update README.md --- pkgs/characters/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index e14e3495..7d75d405 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -124,7 +124,7 @@ Characters firstTagCharacters(Characters source) => [Characters]: https://pub.dev/documentation/characters/latest/characters/Characters-class.html "Characters class" [Code Points]: https://unicode.org/glossary/#code_point "Unicode Code Point" [Code Units]: https://unicode.org/glossary/#code_unit "Unicode Code Units" -[Glyph]: http://unicode.org/glossary/#glyph "Unicode Glyph" +[Glyphs]: http://unicode.org/glossary/#glyph "Unicode Glyphs" [Grapheme Clusters]: https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries "Unicode (Extended) Grapheme Cluster" [Iterable]: https://api.dart.dev/stable/2.0.0/dart-core/Iterable-class.html "Iterable class" [Runes]: https://api.dart.dev/stable/2.0.0/dart-core/Runes-class.html "Runes class" From 33bed6a926d8fd440958ed256b7c1b9845955123 Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Tue, 22 Sep 2020 11:16:08 +0200 Subject: [PATCH 27/82] Add some extra functionality. (dart-lang/characters#34) Add some extra functionality Also do some clean-up. Fixes dart-lang/characters#21, dart-lang/characters#22 and dart-lang/characters#24: * https://github.com/dart-lang/characters/issues/24 * https://github.com/dart-lang/characters/issues/22 * https://github.com/dart-lang/characters/issues/21 --- pkgs/characters/CHANGELOG.md | 9 +- pkgs/characters/analysis_options.yaml | 4 +- pkgs/characters/benchmark/benchmark.dart | 14 +- pkgs/characters/example/main.dart | 5 +- pkgs/characters/lib/src/characters.dart | 71 +++++ pkgs/characters/lib/src/characters_impl.dart | 301 ++++++++++-------- .../lib/src/grapheme_clusters/breaks.dart | 78 ++--- .../lib/src/grapheme_clusters/table.dart | 16 +- pkgs/characters/pubspec.yaml | 4 +- .../test/sound_tests/characters_test.dart | 95 +++++- 10 files changed, 398 insertions(+), 199 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 989359e4..31cad3af 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,8 +1,15 @@ +## 1.1.0-nullsafety.3 + +* Added `stringBeforeLength` and `stringAfterLength` to `CharacterRange`. +* Added `CharacterRange.at` constructor. +* Added `getRange(start, end)` and `characterAt(pos)` to `Characters` + as alternative to `.take(end).skip(start)` and `getRange(pos, pos + 1)`. +* Change some positional parameter names from `other` to `characters`. + ## 1.1.0-nullsafety.2 * Update for the 2.10 dev sdk. - ## 1.1.0-nullsafety.1 * Allow the <=2.9.10 stable sdks. diff --git a/pkgs/characters/analysis_options.yaml b/pkgs/characters/analysis_options.yaml index d34d1f0d..dd48aa55 100644 --- a/pkgs/characters/analysis_options.yaml +++ b/pkgs/characters/analysis_options.yaml @@ -1,8 +1,6 @@ -include: package:pedantic/analysis_options.yaml +include: package:pedantic/analysis_options.1.9.0.yaml analyzer: errors: - omit_local_variable_types: ignore - annotate_overrides: ignore prefer_single_quotes: ignore use_function_type_syntax_for_parameters: ignore enable-experiment: diff --git a/pkgs/characters/benchmark/benchmark.dart b/pkgs/characters/benchmark/benchmark.dart index c6ab05e8..7862564e 100644 --- a/pkgs/characters/benchmark/benchmark.dart +++ b/pkgs/characters/benchmark/benchmark.dart @@ -9,8 +9,8 @@ import "package:characters/characters.dart"; import "../test/src/text_samples.dart"; double bench(int Function() action, int ms) { - int elapsed = 0; - int count = 0; + var elapsed = 0; + var count = 0; var stopwatch = Stopwatch()..start(); do { count += action(); @@ -20,7 +20,7 @@ double bench(int Function() action, int ms) { } int iterateIndicesOnly() { - int graphemeClusters = 0; + var graphemeClusters = 0; var char = Characters(hangul).iterator; while (char.moveNext()) { graphemeClusters++; @@ -33,7 +33,7 @@ int iterateIndicesOnly() { } int iterateStrings() { - int codeUnits = 0; + var codeUnits = 0; var char = Characters(hangul).iterator; while (char.moveNext()) { codeUnits += char.current.length; @@ -58,7 +58,7 @@ int reverseStrings() { } int replaceStrings() { - int count = 0; + var count = 0; { const language = "한글"; assert(language.length == 6); @@ -85,7 +85,7 @@ String reverse(String input) { } void main(List args) { - int count = 1; + var count = 1; if (args.isNotEmpty) count = int.tryParse(args[0]) ?? 1; // Warmup. @@ -94,7 +94,7 @@ void main(List args) { bench(reverseStrings, 250); bench(replaceStrings, 250); - for (int i = 0; i < count; i++) { + for (var i = 0; i < count; i++) { var performance = bench(iterateIndicesOnly, 2000); print("Index Iteration: $performance gc/ms"); performance = bench(iterateStrings, 2000); diff --git a/pkgs/characters/example/main.dart b/pkgs/characters/example/main.dart index 467a2f40..46ba94bd 100644 --- a/pkgs/characters/example/main.dart +++ b/pkgs/characters/example/main.dart @@ -3,7 +3,7 @@ import 'package:characters/characters.dart'; // Small API examples. For full API docs see: // https://pub.dev/documentation/characters/latest/characters/characters-library.html void main() { - String hi = 'Hi 🇩🇰'; + var hi = 'Hi 🇩🇰'; print('String is "$hi"\n'); // Length. @@ -19,7 +19,6 @@ void main() { print('Skipping last character: "${hi.characters.skipLast(1)}"\n'); // Replace characters. - Characters newHi = - hi.characters.replaceAll('🇩🇰'.characters, '🇺🇸'.characters); + var newHi = hi.characters.replaceAll('🇩🇰'.characters, '🇺🇸'.characters); print('Change flag: "$newHi"'); } diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index 70b40ebe..365beac7 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -35,6 +35,7 @@ abstract class Characters implements Iterable { /// Allows iterating the characters of [string] as a plain iterator, /// using [CharacterRange.moveNext], /// as well as controlling the iteration in more detail. + @override CharacterRange get iterator; /// Iterator over the characters of this string. @@ -54,6 +55,7 @@ abstract class Characters implements Iterable { /// a single character, /// because then it is not a single element of this [Iterable] /// of characters. + @override bool contains(Object? other); /// Whether this sequence of characters contains [other] @@ -92,6 +94,7 @@ abstract class Characters implements Iterable { /// /// Tests each character against [test], and returns the /// characters of the concatenation of those character strings. + @override Characters where(bool Function(String) test); /// Eagerly selects all but the first [count] characters. @@ -99,6 +102,7 @@ abstract class Characters implements Iterable { /// If [count] is greater than [length], the count of character /// available, then the empty sequence of characters /// is returned. + @override Characters skip(int count); /// Eagerly selects the first [count] characters. @@ -106,8 +110,41 @@ abstract class Characters implements Iterable { /// If [count] is greater than [length], the count of character /// available, then the entire sequence of characters /// is returned. + @override Characters take(int count); + /// Eagerly selects the range of characters from [start] to [end]. + /// + /// The [start] value must be non-negative, + /// and [end], if supplied, must be greater than or equal to [start]. + /// + /// A `characters.getRange(start, end)` is equivalent to + /// ```dart + /// (end != null ? characters.take(end) : characters).skip(start) + /// ``` + /// if [end] is omitted, the call is equivalent to `characters.skip(start)`. + /// + /// If [start] is greater than or equal to [length] + /// the returned characters is empty. + /// Otherwise, if [end] is greater than [length], or omitted, + /// [end] is equivalent to [length]. + Characters getRange(int start, [int? end]); + + /// Returns the single-character sequence of the [position]th character. + /// + /// The [position] must be non-negative and less than [length]. + /// + /// This operation must iterate characters up to [position] to find + /// the result, just like [elementAt]. + /// It is not an efficient way to iterate over the individual characters + /// of a `Characters`. + /// + /// An call to `chars.characterAt(n)` + /// is equivalent to `chars.elementAt(n).characters`, + /// or to `chars.getRange(n, n + 1)` + /// (except that [getRange] allows `n` to be larger than [length]). + Characters characterAt(int position); + /// Eagerly selects all but the last [count] characters. /// /// If [count] is greater than [length], the count of character @@ -131,6 +168,7 @@ abstract class Characters implements Iterable { /// /// If no characters test `false`, the result is an empty sequence /// of characters. + @override Characters skipWhile(bool Function(String) test); /// Eagerly selects a leading sequence of characters. @@ -142,6 +180,7 @@ abstract class Characters implements Iterable { /// /// If no characters test `false`, the entire sequence of character /// is returned. + @override Characters takeWhile(bool Function(String) test); /// Eagerly selects a leading sequence of characters. @@ -236,12 +275,15 @@ abstract class Characters implements Iterable { Characters toUpperCase(); /// The hash code of [string]. + @override int get hashCode; /// Whether [other] to another [Characters] with the same [string]. + @override bool operator ==(Object other); /// The [string] content of these characters. + @override String toString(); } @@ -281,6 +323,28 @@ abstract class CharacterRange implements Iterator { /// of [string]. factory CharacterRange(String string) = StringCharacterRange; + /// Creates a new character iterator on [string]. + /// + /// The iterator starts with a current range containing the + /// substring from [startIndex] to [endIndex] of [string]. + /// If [startIndex] is not a character boundary, + /// the range starts at the beginning of the character + /// that [startIndex] is pointing into. + /// If [endIndex] is not a character boundary, + /// the range end at then end of the character + /// that [endIndex] is pointing into. + /// If [endIndex] is not provided, + /// it defaults to the same index as [startIndex]. + /// + /// So, if no [endIndex] is provided, + /// and [startIndex] is at a character boundary, + /// the resulting iterator's current range is empty. + /// Otherwise, the range will contain the characters + /// of the substring from [startIndex] to [endIndex], + /// extended so that it contains entire characters of the original [string]. + factory CharacterRange.at(String string, int startIndex, [int? endIndex]) = + StringCharacterRange.at; + /// The character sequence that this range is a sub-sequence of. Characters get source; @@ -302,9 +366,15 @@ abstract class CharacterRange implements Iterator { /// The string of the characters before the current range. String get stringBefore; + /// The length, in code units, of [stringBefore]. + int get stringBeforeLength; + /// The string of the characters after the current range. String get stringAfter; + /// The length, in code units, of [stringAfter]. + int get stringAfterLength; + /// Creates a copy of this [CharacterRange]. /// /// The copy is in the exact same state as this iterator. @@ -336,6 +406,7 @@ abstract class CharacterRange implements Iterator { /// /// Returns `true` if there were [count] following characters /// and `false` if not. + @override bool moveNext([int count = 1]); /// Moves the range to be everything after the current range. diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index dde34d5c..c5fddee2 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -15,6 +15,7 @@ class StringCharacters extends Iterable implements Characters { // Try to avoid allocating more empty grapheme clusters. static const StringCharacters _empty = StringCharacters(""); + @override final String string; const StringCharacters(this.string); @@ -44,7 +45,7 @@ class StringCharacters extends Iterable implements Characters { @override String get single { if (string.isEmpty) throw StateError("No element"); - int firstEnd = + var firstEnd = Breaks(string, 0, string.length, stateSoTNoBreak).nextBreak(); if (firstEnd == string.length) return string; throw StateError("Too many elements"); @@ -60,7 +61,7 @@ class StringCharacters extends Iterable implements Characters { int get length { if (string.isEmpty) return 0; var brk = Breaks(string, 0, string.length, stateSoTNoBreak); - int length = 0; + var length = 0; while (brk.nextBreak() >= 0) { length++; } @@ -83,27 +84,28 @@ class StringCharacters extends Iterable implements Characters { } @override - String lastWhere(bool test(String element), {String orElse()?}) { - int cursor = string.length; + String lastWhere(bool Function(String element) test, + {String Function()? orElse}) { + var cursor = string.length; var brk = BackBreaks(string, cursor, 0, stateEoTNoBreak); - int next = 0; + var next = 0; while ((next = brk.nextBreak()) >= 0) { - String current = string.substring(next, cursor); + var current = string.substring(next, cursor); if (test(current)) return current; cursor = next; } if (orElse != null) return orElse(); - throw StateError("no element"); + throw StateError("No element"); } @override String elementAt(int index) { RangeError.checkNotNegative(index, "index"); - int count = 0; + var count = 0; if (string.isNotEmpty) { var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); - int start = 0; - int end = 0; + var start = 0; + var end = 0; while ((end = breaks.nextBreak()) >= 0) { if (count == index) return string.substring(start, end); count++; @@ -117,7 +119,7 @@ class StringCharacters extends Iterable implements Characters { bool contains(Object? other) { if (other is String) { if (other.isEmpty) return false; - int next = Breaks(other, 0, other.length, stateSoTNoBreak).nextBreak(); + var next = Breaks(other, 0, other.length, stateSoTNoBreak).nextBreak(); if (next != other.length) return false; // [other] is single grapheme cluster. return _indexOf(string, other, 0, string.length) >= 0; @@ -126,21 +128,21 @@ class StringCharacters extends Iterable implements Characters { } @override - bool startsWith(Characters other) { - int length = string.length; - String otherString = other.string; + bool startsWith(Characters characters) { + var length = string.length; + var otherString = characters.string; if (otherString.isEmpty) return true; return string.startsWith(otherString) && isGraphemeClusterBoundary(string, 0, length, otherString.length); } @override - bool endsWith(Characters other) { - int length = string.length; - String otherString = other.string; + bool endsWith(Characters characters) { + var length = string.length; + var otherString = characters.string; if (otherString.isEmpty) return true; - int otherLength = otherString.length; - int start = string.length - otherLength; + var otherLength = otherString.length; + var start = string.length - otherLength; return start >= 0 && string.startsWith(otherString, start) && isGraphemeClusterBoundary(string, 0, length, start); @@ -186,60 +188,90 @@ class StringCharacters extends Iterable implements Characters { } @override - bool containsAll(Characters other) => - _indexOf(string, other.string, 0, string.length) >= 0; + bool containsAll(Characters characters) => + _indexOf(string, characters.string, 0, string.length) >= 0; + + /// Returns the break position of the [count]'th break. + /// + /// Starts from the index [cursor] in [string]. + /// Use [breaks], which is assumed to be at [cursor], + /// if available. + /// + /// Returns `string.length` if there are less than [count] + /// characters left. + int _skipIndices(int count, int cursor, Breaks? breaks) { + if (count == 0 || cursor == string.length) return cursor; + breaks ??= Breaks(string, cursor, string.length, stateSoTNoBreak); + do { + var nextBreak = breaks.nextBreak(); + if (nextBreak < 0) break; + cursor = nextBreak; + } while (--count > 0); + return cursor; + } @override Characters skip(int count) { RangeError.checkNotNegative(count, "count"); - if (count == 0) return this; - if (string.isNotEmpty) { - int stringLength = string.length; - var breaks = Breaks(string, 0, stringLength, stateSoTNoBreak); - int startIndex = 0; - while (count > 0) { - int index = breaks.nextBreak(); - if (index >= 0) { - count--; - startIndex = index; - } else { - return _empty; - } - } - if (startIndex == stringLength) return _empty; - return StringCharacters(string.substring(startIndex)); - } - return this; + return _skip(count); + } + + Characters _skip(int count) { + var start = _skipIndices(count, 0, null); + if (start == string.length) return _empty; + return StringCharacters(string.substring(start)); } @override Characters take(int count) { RangeError.checkNotNegative(count, "count"); - if (count == 0) return _empty; - if (string.isNotEmpty) { - var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); - int endIndex = 0; - while (count > 0) { - int index = breaks.nextBreak(); - if (index >= 0) { - endIndex = index; - count--; - } else { - return this; - } - } - return StringCharacters(string.substring(0, endIndex)); + return _take(count); + } + + Characters _take(int count) { + var end = _skipIndices(count, 0, null); + if (end == string.length) return this; + return StringCharacters(string.substring(0, end)); + } + + @override + Characters getRange(int start, [int? end]) { + RangeError.checkNotNegative(start, "start"); + if (end == null) return _skip(start); + if (end < start) throw RangeError.range(end, start, null, "end"); + if (end == start) return _empty; + if (start == 0) return _take(end); + if (string.isEmpty) return this; + var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + var startIndex = _skipIndices(start, 0, breaks); + if (startIndex == string.length) return _empty; + var endIndex = _skipIndices(end - start, start, breaks); + return StringCharacters(string.substring(startIndex, endIndex)); + } + + @override + Characters characterAt(int position) { + var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); + var start = 0; + + while (position > 0) { + position--; + start = breaks.nextBreak(); + if (start < 0) throw StateError("No element"); } - return this; + var end = breaks.nextBreak(); + if (end < 0) throw StateError("No element"); + if (start == 0 && end == string.length) return this; + return StringCharacters(string.substring(start, end)); } @override Characters skipWhile(bool Function(String) test) { if (string.isNotEmpty) { - int stringLength = string.length; + var stringLength = string.length; var breaks = Breaks(string, 0, stringLength, stateSoTNoBreak); - int index = 0; - int startIndex = 0; + var index = 0; + var startIndex = 0; while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(startIndex, index))) { if (startIndex == 0) return this; @@ -256,8 +288,8 @@ class StringCharacters extends Iterable implements Characters { Characters takeWhile(bool Function(String) test) { if (string.isNotEmpty) { var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); - int index = 0; - int endIndex = 0; + var index = 0; + var endIndex = 0; while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(endIndex, index))) { if (endIndex == 0) return _empty; @@ -277,8 +309,8 @@ class StringCharacters extends Iterable implements Characters { } @override - Characters operator +(Characters other) => - StringCharacters(string + other.string); + Characters operator +(Characters characters) => + StringCharacters(string + characters.string); @override Characters skipLast(int count) { @@ -286,9 +318,9 @@ class StringCharacters extends Iterable implements Characters { if (count == 0) return this; if (string.isNotEmpty) { var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); - int endIndex = string.length; + var endIndex = string.length; while (count > 0) { - int index = breaks.nextBreak(); + var index = breaks.nextBreak(); if (index >= 0) { endIndex = index; count--; @@ -305,8 +337,8 @@ class StringCharacters extends Iterable implements Characters { Characters skipLastWhile(bool Function(String) test) { if (string.isNotEmpty) { var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); - int index = 0; - int end = string.length; + var index = 0; + var end = string.length; while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(index, end))) { if (end == string.length) return this; @@ -324,9 +356,9 @@ class StringCharacters extends Iterable implements Characters { if (count == 0) return _empty; if (string.isNotEmpty) { var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); - int startIndex = string.length; + var startIndex = string.length; while (count > 0) { - int index = breaks.nextBreak(); + var index = breaks.nextBreak(); if (index >= 0) { startIndex = index; count--; @@ -345,8 +377,8 @@ class StringCharacters extends Iterable implements Characters { Characters takeLastWhile(bool Function(String) test) { if (string.isNotEmpty) { var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); - int index = 0; - int start = string.length; + var index = 0; + var start = string.length; while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(index, start))) { if (start == string.length) return _empty; @@ -411,6 +443,14 @@ class StringCharacterRange implements CharacterRange { String? _currentCache; StringCharacterRange(String string) : this._(string, 0, 0); + + factory StringCharacterRange.at(String string, int startIndex, + [int? endIndex]) { + RangeError.checkValidRange( + startIndex, endIndex, string.length, "startIndex", "endIndex"); + return _expandRange(string, startIndex, endIndex ?? startIndex); + } + StringCharacterRange._(this._string, this._start, this._end); /// Changes the current range. @@ -447,15 +487,15 @@ class StringCharacterRange implements CharacterRange { bool _advanceEnd(int count, int newStart) { if (count > 0) { var state = stateSoTNoBreak; - int index = _end; + var index = _end; while (index < _string.length) { - int char = _string.codeUnitAt(index); - int category = categoryControl; - int nextIndex = index + 1; + var char = _string.codeUnitAt(index); + var category = categoryControl; + var nextIndex = index + 1; if (char & 0xFC00 != 0xD800) { category = low(char); } else if (nextIndex < _string.length) { - int nextChar = _string.codeUnitAt(nextIndex); + var nextChar = _string.codeUnitAt(nextIndex); if (nextChar & 0xFC00 == 0xDC00) { nextIndex += 1; category = high(char, nextChar); @@ -479,7 +519,7 @@ class StringCharacterRange implements CharacterRange { } bool _moveNextPattern(String patternString, int start, int end) { - int offset = _indexOf(_string, patternString, start, end); + var offset = _indexOf(_string, patternString, start, end); if (offset >= 0) { _move(offset, offset + patternString.length); return true; @@ -493,9 +533,9 @@ class StringCharacterRange implements CharacterRange { bool _retractStart(int count, int newEnd) { RangeError.checkNotNegative(count, "count"); var breaks = _backBreaksFromStart(); - int start = _start; + var start = _start; while (count > 0) { - int nextBreak = breaks.nextBreak(); + var nextBreak = breaks.nextBreak(); if (nextBreak >= 0) { start = nextBreak; } else { @@ -508,7 +548,7 @@ class StringCharacterRange implements CharacterRange { } bool _movePreviousPattern(String patternString, int start, int end) { - int offset = _lastIndexOf(_string, patternString, start, end); + var offset = _lastIndexOf(_string, patternString, start, end); if (offset >= 0) { _move(offset, offset + patternString.length); return true; @@ -543,7 +583,7 @@ class StringCharacterRange implements CharacterRange { if (_start == _end) return count == 0; var breaks = Breaks(_string, _start, _end, stateSoTNoBreak); while (count > 0) { - int nextBreak = breaks.nextBreak(); + var nextBreak = breaks.nextBreak(); if (nextBreak >= 0) { _start = nextBreak; _currentCache = null; @@ -584,8 +624,8 @@ class StringCharacterRange implements CharacterRange { void dropWhile(bool Function(String) test) { if (_start == _end) return; var breaks = Breaks(_string, _start, _end, stateSoTNoBreak); - int cursor = _start; - int next = 0; + var cursor = _start; + var next = 0; while ((next = breaks.nextBreak()) >= 0) { if (!test(_string.substring(cursor, next))) { break; @@ -600,7 +640,7 @@ class StringCharacterRange implements CharacterRange { RangeError.checkNotNegative(count, "count"); var breaks = BackBreaks(_string, _end, _start, stateEoTNoBreak); while (count > 0) { - int nextBreak = breaks.nextBreak(); + var nextBreak = breaks.nextBreak(); if (nextBreak >= 0) { _end = nextBreak; _currentCache = null; @@ -641,8 +681,8 @@ class StringCharacterRange implements CharacterRange { void dropBackWhile(bool Function(String) test) { if (_start == _end) return; var breaks = BackBreaks(_string, _end, _start, stateEoTNoBreak); - int cursor = _end; - int next = 0; + var cursor = _end; + var next = 0; while ((next = breaks.nextBreak()) >= 0) { if (!test(_string.substring(next, cursor))) { break; @@ -657,8 +697,8 @@ class StringCharacterRange implements CharacterRange { @override bool expandTo(Characters target) { - String targetString = target.string; - int index = _indexOf(_string, targetString, _end, _string.length); + var targetString = target.string; + var index = _indexOf(_string, targetString, _end, _string.length); if (index >= 0) { _move(_start, index + targetString.length); return true; @@ -669,8 +709,8 @@ class StringCharacterRange implements CharacterRange { @override void expandWhile(bool Function(String character) test) { var breaks = _breaksFromEnd(); - int cursor = _end; - int next = 0; + var cursor = _end; + var next = 0; while ((next = breaks.nextBreak()) >= 0) { if (!test(_string.substring(cursor, next))) { break; @@ -691,7 +731,7 @@ class StringCharacterRange implements CharacterRange { @override bool expandBackTo(Characters target) { var targetString = target.string; - int index = _lastIndexOf(_string, targetString, 0, _start); + var index = _lastIndexOf(_string, targetString, 0, _start); if (index >= 0) { _move(index, _end); return true; @@ -702,8 +742,8 @@ class StringCharacterRange implements CharacterRange { @override void expandBackWhile(bool Function(String character) test) { var breaks = _backBreaksFromStart(); - int cursor = _start; - int next = 0; + var cursor = _start; + var next = 0; while ((next = breaks.nextBreak()) >= 0) { if (!test(_string.substring(next, cursor))) { _move(cursor, _end); @@ -768,7 +808,7 @@ class StringCharacterRange implements CharacterRange { } bool _advanceEndUntil(String targetString, int newStart) { - int index = _indexOf(_string, targetString, _end, _string.length); + var index = _indexOf(_string, targetString, _end, _string.length); if (index >= 0) { _move(newStart, index); return true; @@ -779,13 +819,13 @@ class StringCharacterRange implements CharacterRange { @override CharacterRange? replaceFirst(Characters pattern, Characters replacement) { - String patternString = pattern.string; - String replacementString = replacement.string; + var patternString = pattern.string; + var replacementString = replacement.string; String replaced; if (patternString.isEmpty) { replaced = _string.replaceRange(_start, _start, replacementString); } else { - int index = _indexOf(_string, patternString, _start, _end); + var index = _indexOf(_string, patternString, _start, _end); if (index >= 0) { replaced = _string.replaceRange( index, index + patternString.length, replacementString); @@ -793,7 +833,7 @@ class StringCharacterRange implements CharacterRange { return null; } } - int newEnd = replaced.length - _string.length + _end; + var newEnd = replaced.length - _string.length + _end; return _expandRange(replaced, _start, newEnd); } @@ -804,12 +844,12 @@ class StringCharacterRange implements CharacterRange { if (patternString.isEmpty) { var replaced = _explodeReplace( _string, _start, _end, replacementString, replacementString); - int newEnd = replaced.length - (_string.length - _end); + var newEnd = replaced.length - (_string.length - _end); return _expandRange(replaced, _start, newEnd); } if (_start == _end) return null; - int start = 0; - int cursor = _start; + var start = 0; + var cursor = _start; StringBuffer? buffer; while ((cursor = _indexOf(_string, patternString, cursor, _end)) >= 0) { (buffer ??= StringBuffer()) @@ -820,23 +860,28 @@ class StringCharacterRange implements CharacterRange { } if (buffer == null) return null; buffer.write(_string.substring(start)); - String replaced = buffer.toString(); - int newEnd = replaced.length - (_string.length - _end); + var replaced = buffer.toString(); + var newEnd = replaced.length - (_string.length - _end); return _expandRange(replaced, _start, newEnd); } @override CharacterRange replaceRange(Characters replacement) { - String replacementString = replacement.string; - String resultString = _string.replaceRange(_start, _end, replacementString); + var replacementString = replacement.string; + var resultString = _string.replaceRange(_start, _end, replacementString); return _expandRange( resultString, _start, _start + replacementString.length); } - // Expands a range if its start or end are not grapheme cluster boundaries. - StringCharacterRange _expandRange(String string, int start, int end) { + /// Expands a range if its start or end are not grapheme cluster boundaries. + /// + /// Low-level function which does not validate its input. Assume that + /// 0 <= [start] <= [end] <= `string.length`. + static StringCharacterRange _expandRange(String string, int start, int end) { start = previousBreak(string, 0, string.length, start); - end = nextBreak(string, 0, string.length, end); + if (end != start) { + end = nextBreak(string, 0, string.length, end); + } return StringCharacterRange._(string, start, end); } @@ -864,16 +909,16 @@ class StringCharacterRange implements CharacterRange { } bool _endsWith(int start, int end, String string) { - int length = string.length; - int stringStart = end - length; + var length = string.length; + var stringStart = end - length; return stringStart >= start && _string.startsWith(string, stringStart) && isGraphemeClusterBoundary(_string, start, end, stringStart); } bool _startsWith(int start, int end, String string) { - int length = string.length; - int stringEnd = start + length; + var length = string.length; + var stringEnd = start + length; return stringEnd <= end && _string.startsWith(string, start) && isGraphemeClusterBoundary(_string, start, end, stringEnd); @@ -882,7 +927,7 @@ class StringCharacterRange implements CharacterRange { @override bool moveBackTo(Characters target) { var targetString = target.string; - int index = _lastIndexOf(_string, targetString, 0, _start); + var index = _lastIndexOf(_string, targetString, 0, _start); if (index >= 0) { _move(index, index + targetString.length); return true; @@ -893,7 +938,7 @@ class StringCharacterRange implements CharacterRange { @override bool moveTo(Characters target) { var targetString = target.string; - int index = _indexOf(_string, targetString, _end, _string.length); + var index = _indexOf(_string, targetString, _end, _string.length); if (index >= 0) { _move(index, index + targetString.length); return true; @@ -924,9 +969,15 @@ class StringCharacterRange implements CharacterRange { @override String get stringAfter => _string.substring(_end); + @override + int get stringAfterLength => _string.length - _end; + @override String get stringBefore => _string.substring(0, _start); + @override + int get stringBeforeLength => _start; + @override Iterable split(Characters pattern, [int maxParts = 0]) sync* { if (maxParts == 1 || _start == _end) { @@ -968,8 +1019,8 @@ String _explodeReplace(String string, int start, int end, } var buffer = StringBuffer(string.substring(0, start)); var breaks = Breaks(string, start, end, stateSoTNoBreak); - int index = 0; - String replacement = outerReplacement; + var index = 0; + var replacement = outerReplacement; while ((index = breaks.nextBreak()) >= 0) { buffer..write(replacement)..write(string.substring(start, index)); start = index; @@ -984,16 +1035,16 @@ String _explodeReplace(String string, int start, int end, /// Both [start] and [end] are grapheme cluster boundaries in the /// [source] string. int _indexOf(String source, String pattern, int start, int end) { - int patternLength = pattern.length; + var patternLength = pattern.length; if (patternLength == 0) return start; // Any start position after realEnd won't fit the pattern before end. - int realEnd = end - patternLength; + var realEnd = end - patternLength; if (realEnd < start) return -1; // Use indexOf if what we can overshoot is // less than twice as much as what we have left to search. - int rest = source.length - realEnd; + var rest = source.length - realEnd; if (rest <= (realEnd - start) * 2) { - int index = 0; + var index = 0; while (start < realEnd && (index = source.indexOf(pattern, start)) >= 0) { if (index > realEnd) return -1; if (isGraphemeClusterBoundary(source, start, end, index) && @@ -1010,9 +1061,9 @@ int _indexOf(String source, String pattern, int start, int end) { int _gcIndexOf(String source, String pattern, int start, int end) { var breaks = Breaks(source, start, end, stateSoT); - int index = 0; + var index = 0; while ((index = breaks.nextBreak()) >= 0) { - int endIndex = index + pattern.length; + var endIndex = index + pattern.length; if (endIndex > end) break; if (source.startsWith(pattern, index) && isGraphemeClusterBoundary(source, start, end, endIndex)) { @@ -1026,15 +1077,15 @@ int _gcIndexOf(String source, String pattern, int start, int end) { /// Both [start] and [end] are grapheme cluster boundaries in the /// [source] string. int _lastIndexOf(String source, String pattern, int start, int end) { - int patternLength = pattern.length; + var patternLength = pattern.length; if (patternLength == 0) return end; // Start of pattern must be in range [start .. end - patternLength]. - int realEnd = end - patternLength; + var realEnd = end - patternLength; if (realEnd < start) return -1; // If the range from 0 to start is no more than double the range from // start to end, use lastIndexOf. if (realEnd * 2 > start) { - int index = 0; + var index = 0; while (realEnd >= start && (index = source.lastIndexOf(pattern, realEnd)) >= 0) { if (index < start) return -1; @@ -1052,9 +1103,9 @@ int _lastIndexOf(String source, String pattern, int start, int end) { int _gcLastIndexOf(String source, String pattern, int start, int end) { var breaks = BackBreaks(source, end, start, stateEoT); - int index = 0; + var index = 0; while ((index = breaks.nextBreak()) >= 0) { - int startIndex = index - pattern.length; + var startIndex = index - pattern.length; if (startIndex < start) break; if (source.startsWith(pattern, startIndex) && isGraphemeClusterBoundary(source, start, end, startIndex)) { diff --git a/pkgs/characters/lib/src/grapheme_clusters/breaks.dart b/pkgs/characters/lib/src/grapheme_clusters/breaks.dart index 08d1d841..71ed02ea 100644 --- a/pkgs/characters/lib/src/grapheme_clusters/breaks.dart +++ b/pkgs/characters/lib/src/grapheme_clusters/breaks.dart @@ -45,8 +45,8 @@ class Breaks { /// which means that [cursor] has reached [end]. int nextBreak() { while (cursor < end) { - int breakAt = cursor; - int char = base.codeUnitAt(cursor++); + var breakAt = cursor; + var char = base.codeUnitAt(cursor++); if (char & 0xFC00 != 0xD800) { state = move(state, low(char)); if (state & stateNoBreak == 0) { @@ -55,9 +55,9 @@ class Breaks { continue; } // The category of an unpaired lead surrogate is Control. - int category = categoryControl; + var category = categoryControl; if (cursor < end) { - int nextChar = base.codeUnitAt(cursor); + var nextChar = base.codeUnitAt(cursor); if (nextChar & 0xFC00 == 0xDC00) { category = high(char, nextChar); cursor++; @@ -112,8 +112,8 @@ class BackBreaks { /// which means that [cursor] has reached [start]. int nextBreak() { while (cursor > start) { - int breakAt = cursor; - int char = base.codeUnitAt(--cursor); + var breakAt = cursor; + var char = base.codeUnitAt(--cursor); if (char & 0xFC00 != 0xDC00) { state = moveBack(state, low(char)); if (state >= stateLookaheadMin) state = _lookAhead(state); @@ -123,9 +123,9 @@ class BackBreaks { continue; } // The category of an unpaired tail surrogate is Control. - int category = categoryControl; + var category = categoryControl; if (cursor >= start) { - int prevChar = base.codeUnitAt(cursor - 1); + var prevChar = base.codeUnitAt(cursor - 1); if (prevChar & 0xFC00 == 0xD800) { category = high(prevChar, char); cursor -= 1; @@ -158,7 +158,7 @@ int lookAhead(String base, int start, int cursor, int state) { return lookAheadRegional(base, start, cursor); } if (state == stateZWJPictographicLookahead) { - int prevPic = lookAheadPictorgraphicExtend(base, start, cursor); + var prevPic = lookAheadPictorgraphicExtend(base, start, cursor); if (prevPic >= 0) return stateZWJPictographic | stateNoBreak; return stateExtend; // State for break before seeing ZWJ. } @@ -179,14 +179,14 @@ int lookAheadRegional(String base, int start, int cursor) { // Has just seen second regional indicator. // Figure out if there are an odd or even number of preceding RIs. // ALL REGIONAL INDICATORS ARE NON-BMP CHARACTERS. - int count = 0; - int index = cursor; + var count = 0; + var index = cursor; while (index - 2 >= start) { - int tail = base.codeUnitAt(index - 1); + var tail = base.codeUnitAt(index - 1); if (tail & 0xFC00 != 0xDC00) break; - int lead = base.codeUnitAt(index - 2); + var lead = base.codeUnitAt(index - 2); if (lead & 0xFC00 != 0xD800) break; - int category = high(lead, tail); + var category = high(lead, tail); if (category != categoryRegionalIndicator) break; index -= 2; count ^= 1; @@ -208,11 +208,11 @@ int lookAheadRegional(String base, int start, int cursor) { int lookAheadPictorgraphicExtend(String base, int start, int cursor) { // Has just seen ZWJ+Pictographic. Check if preceeding is Pic Ext*. // (If so, just move cursor back to the Pic). - int index = cursor; + var index = cursor; while (index > start) { - int char = base.codeUnitAt(--index); - int prevChar = 0; - int category = categoryControl; + var char = base.codeUnitAt(--index); + var prevChar = 0; + var category = categoryControl; if (char & 0xFC00 != 0xDC00) { category = low(char); } else if (index > start && @@ -247,16 +247,16 @@ bool isGraphemeClusterBoundary(String text, int start, int end, int index) { // surrogates. if (start < index && index < end) { // Something on both sides of index. - int char = text.codeUnitAt(index); - int prevChar = text.codeUnitAt(index - 1); - int catAfter = categoryControl; + var char = text.codeUnitAt(index); + var prevChar = text.codeUnitAt(index - 1); + var catAfter = categoryControl; if (char & 0xF800 != 0xD800) { catAfter = low(char); } else if (char & 0xFC00 == 0xD800) { // Lead surrogate. Combine with following tail surrogate, // otherwise it's a control and always a boundary. if (index + 1 >= end) return true; - int nextChar = text.codeUnitAt(index + 1); + var nextChar = text.codeUnitAt(index + 1); if (nextChar & 0xFC00 != 0xDC00) return true; catAfter = high(char, nextChar); } else { @@ -264,7 +264,7 @@ bool isGraphemeClusterBoundary(String text, int start, int end, int index) { // before or is always a bundary. return prevChar & 0xFC00 != 0xD800; } - int catBefore = categoryControl; + var catBefore = categoryControl; if (prevChar & 0xFC00 != 0xDC00) { catBefore = low(prevChar); index -= 1; @@ -272,7 +272,7 @@ bool isGraphemeClusterBoundary(String text, int start, int end, int index) { // If no prior lead surrogate, it's a control and always a boundary. index -= 2; if (start <= index) { - int prevPrevChar = text.codeUnitAt(index); + var prevPrevChar = text.codeUnitAt(index); if (prevPrevChar & 0xFC00 != 0xD800) { return true; } @@ -303,21 +303,21 @@ int previousBreak(String text, int start, int end, int index) { assert(index <= end); assert(end <= text.length); if (index == start || index == end) return index; - int indexBefore = index; - int nextChar = text.codeUnitAt(index); - int category = categoryControl; + var indexBefore = index; + var nextChar = text.codeUnitAt(index); + var category = categoryControl; if (nextChar & 0xF800 != 0xD800) { category = low(nextChar); } else if (nextChar & 0xFC00 == 0xD800) { - int indexAfter = index + 1; + var indexAfter = index + 1; if (indexAfter < end) { - int secondChar = text.codeUnitAt(indexAfter); + var secondChar = text.codeUnitAt(indexAfter); if (secondChar & 0xFC00 == 0xDC00) { category = high(nextChar, secondChar); } } } else { - int prevChar = text.codeUnitAt(index - 1); + var prevChar = text.codeUnitAt(index - 1); if (prevChar & 0xFC00 == 0xD800) { category = high(prevChar, nextChar); indexBefore -= 1; @@ -337,21 +337,21 @@ int nextBreak(String text, int start, int end, int index) { assert(index <= end); assert(end <= text.length); if (index == start || index == end) return index; - int indexBefore = index - 1; - int prevChar = text.codeUnitAt(indexBefore); - int prevCategory = categoryControl; + var indexBefore = index - 1; + var prevChar = text.codeUnitAt(indexBefore); + var prevCategory = categoryControl; if (prevChar & 0xF800 != 0xD800) { prevCategory = low(prevChar); } else if (prevChar & 0xFC00 == 0xD800) { - int nextChar = text.codeUnitAt(index); + var nextChar = text.codeUnitAt(index); if (nextChar & 0xFC00 == 0xDC00) { index += 1; if (index == end) return end; prevCategory = high(prevChar, nextChar); } } else if (indexBefore > start) { - int secondCharIndex = indexBefore - 1; - int secondChar = text.codeUnitAt(secondCharIndex); + var secondCharIndex = indexBefore - 1; + var secondChar = text.codeUnitAt(secondCharIndex); if (secondChar & 0xFC00 == 0xD800) { indexBefore = secondCharIndex; prevCategory = high(secondChar, prevChar); @@ -361,14 +361,14 @@ int nextBreak(String text, int start, int end, int index) { // the previous character are the [^RI] (RI RI)* RI x RI and // Pic Ext* ZWJ x Pic breaks. In all other cases, all the necessary // information is in the last seen category. - int state = stateOther; + var state = stateOther; if (prevCategory == categoryRegionalIndicator) { - int prevState = lookAheadRegional(text, start, indexBefore); + var prevState = lookAheadRegional(text, start, indexBefore); if (prevState != stateRegionalOdd) { state = stateRegionalSingle; } } else if (prevCategory == categoryZWJ || prevCategory == categoryExtend) { - int prevPic = lookAheadPictorgraphicExtend(text, start, indexBefore); + var prevPic = lookAheadPictorgraphicExtend(text, start, indexBefore); if (prevPic >= 0) { state = prevCategory == categoryZWJ ? statePictographicZWJ diff --git a/pkgs/characters/lib/src/grapheme_clusters/table.dart b/pkgs/characters/lib/src/grapheme_clusters/table.dart index b42a66c0..c9d38210 100644 --- a/pkgs/characters/lib/src/grapheme_clusters/table.dart +++ b/pkgs/characters/lib/src/grapheme_clusters/table.dart @@ -317,18 +317,18 @@ const String _start = '\u0e3b\u1cdb\u05d0\u102b\u102b\u102b\u102b\u102b\u102b' '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b'; int low(int codeUnit) { - int chunkStart = _start.codeUnitAt(codeUnit >> 6); - int index = chunkStart + (codeUnit & 63); - int bit = index & 1; - int pair = _data.codeUnitAt(index >> 1); + var chunkStart = _start.codeUnitAt(codeUnit >> 6); + var index = chunkStart + (codeUnit & 63); + var bit = index & 1; + var pair = _data.codeUnitAt(index >> 1); return (pair >> 4) & -bit | (pair & 0xF) & (bit - 1); } int high(int lead, int tail) { - int chunkStart = _start.codeUnitAt(1024 + (0x3ff & lead)); - int index = chunkStart + (0x3ff & tail); - int bit = index & 1; - int pair = _data.codeUnitAt(index >> 1); + var chunkStart = _start.codeUnitAt(1024 + (0x3ff & lead)); + var index = chunkStart + (0x3ff & tail); + var bit = index & 1; + var pair = _data.codeUnitAt(index >> 1); return (pair >> 4) & -bit | (pair & 0xF) & (bit - 1); } diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index b560a25f..e4fbb250 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,11 +1,11 @@ name: characters -version: 1.1.0-nullsafety.2 +version: 1.1.0-nullsafety.3 description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters environment: # This must remain a tight constraint until nnbd is stable - sdk: '>=2.10.0-0 <2.10.0' + sdk: '>=2.10.0-110 <2.10.0' dev_dependencies: test: "^1.6.0" diff --git a/pkgs/characters/test/sound_tests/characters_test.dart b/pkgs/characters/test/sound_tests/characters_test.dart index 5fe41fe4..2834a46d 100644 --- a/pkgs/characters/test/sound_tests/characters_test.dart +++ b/pkgs/characters/test/sound_tests/characters_test.dart @@ -34,6 +34,9 @@ void main([List? args]) { expect(cs.skipLast(2).toString(), "Hi "); expect(cs.take(2).toString(), "Hi"); expect(cs.takeLast(2).toString(), "$flag!"); + expect(cs.getRange(1, 4).toString(), "i $flag"); + expect(cs.characterAt(1).toString(), "i"); + expect(cs.characterAt(3).toString(), flag); expect(cs.contains("\u{1F1E9}"), false); expect(cs.contains(flag), true); @@ -67,6 +70,73 @@ void main([List? args]) { testParts(gc("$flag$white$zwj$rainbow"), gc("$flag$white"), gc("$rainbow"), gc("$flag$zwj$rainbow"), gc("!")); }); + + group("CharacterRange", () { + test("new", () { + var range = CharacterRange("abc"); + expect(range.isEmpty, true); + expect(range.moveNext(), true); + expect(range.current, "a"); + }); + group("new.at", () { + test("simple", () { + var range = CharacterRange.at("abc", 0); + expect(range.isEmpty, true); + expect(range.moveNext(), true); + expect(range.current, "a"); + + range = CharacterRange.at("abc", 1); + expect(range.isEmpty, true); + expect(range.moveNext(), true); + expect(range.current, "b"); + + range = CharacterRange.at("abc", 1, 2); + expect(range.isEmpty, false); + expect(range.current, "b"); + expect(range.moveNext(), true); + + range = CharacterRange.at("abc", 0, 3); + expect(range.isEmpty, false); + expect(range.current, "abc"); + expect(range.moveNext(), false); + }); + test("complicated", () { + // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. + var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. + var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. + var zwj = "\u200d"; // U+200D, ZWJ + var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram + + var rbflag = "$flag$white$zwj$rainbow"; + var string = "-$rbflag-"; + var range = CharacterRange.at(string, 1); + expect(range.isEmpty, true); + expect(range.moveNext(), true); + expect(range.current, rbflag); + + range = range = CharacterRange.at(string, 2); + expect(range.isEmpty, false); + expect(range.current, rbflag); + + range = range = CharacterRange.at(string, 0, 2); + expect(range.isEmpty, false); + expect(range.current, "-$rbflag"); + + range = range = CharacterRange.at(string, 0, 2); + expect(range.isEmpty, false); + expect(range.current, "-$rbflag"); + + range = range = CharacterRange.at(string, 2, "-$rbflag".length - 1); + expect(range.isEmpty, false); + expect(range.current, rbflag); + expect(range.stringBeforeLength, 1); + + range = range = CharacterRange.at(string, 0, string.length); + expect(range.isEmpty, false); + expect(range.current, string); + }); + }); + }); } void tests() { @@ -191,13 +261,14 @@ void expectGC(Characters actual, List expected) { for (var char in expected) { expect(actual.contains(char), true); } - for (int i = 1; i < expected.length; i++) { + for (var i = 1; i < expected.length; i++) { expect(actual.contains(expected[i - 1] + expected[i]), false); } expect(actual.skip(1).toList(), expected.skip(1).toList()); expect(actual.take(1).toList(), expected.take(1).toList()); expect(actual.skip(1).toString(), expected.skip(1).join()); expect(actual.take(1).toString(), expected.take(1).join()); + expect(actual.getRange(1, 2).toString(), expected.take(2).skip(1).join()); if (expected.isNotEmpty) { expect(actual.skipLast(1).toList(), @@ -238,6 +309,8 @@ void expectGC(Characters actual, List expected) { expect(actual.elementAt(i), expected[i]); expect(actual.skip(i).first, expected[i]); + expect(actual.characterAt(i).toString(), expected[i]); + expect(actual.getRange(i, i + 1).toString(), expected[i]); } expect(it.moveNext(), false); for (var i = expected.length - 1; i >= 0; i--) { @@ -256,13 +329,13 @@ void expectGC(Characters actual, List expected) { expect(actual.containsAll(gc("")), true); expect(actual.containsAll(actual), true); if (expected.isNotEmpty) { - int steps = min(5, expected.length); - for (int s = 0; s <= steps; s++) { - int i = expected.length * s ~/ steps; + var steps = min(5, expected.length); + for (var s = 0; s <= steps; s++) { + var i = expected.length * s ~/ steps; expect(actual.startsWith(gc(expected.sublist(0, i).join())), true); expect(actual.endsWith(gc(expected.sublist(i).join())), true); - for (int t = s + 1; t <= steps; t++) { - int j = expected.length * t ~/ steps; + for (var t = s + 1; t <= steps; t++) { + var j = expected.length * t ~/ steps; var slice = expected.sublist(i, j).join(); var gcs = gc(slice); expect(actual.containsAll(gcs), true); @@ -273,15 +346,15 @@ void expectGC(Characters actual, List expected) { { // Random walk back and forth. var it = actual.iterator; - int pos = -1; + var pos = -1; if (random.nextBool()) { pos = expected.length; it = actual.iteratorAtEnd; } - int steps = 5 + random.nextInt(expected.length * 2 + 1); - bool lastMove = false; + var steps = 5 + random.nextInt(expected.length * 2 + 1); + var lastMove = false; while (true) { - bool back = false; + var back = false; if (pos < 0) { expect(lastMove, false); expect(it.isEmpty, true); @@ -534,7 +607,7 @@ void testParts( expect(it.split(a).map((range) => range.current), ["", "$b", "$b"]); expect(it.split(a, 2).map((range) => range.current), ["", "$b$a$b"]); // Each split is after an *a*. - bool first = true; + var first = true; for (var range in it.split(a)) { if (range.isEmpty) { // First range is empty. From aece3c8a0f89e4c64ee614920ca0158ae36ff17c Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Tue, 22 Sep 2020 08:21:33 -0700 Subject: [PATCH 28/82] Prepare for the 2.11 dev SDKs (dart-lang/characters#35) Bump the upper bound to allow 2.10 stable and 2.11.0 dev SDK versions. --- pkgs/characters/CHANGELOG.md | 1 + pkgs/characters/pubspec.yaml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 31cad3af..695c3177 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -5,6 +5,7 @@ * Added `getRange(start, end)` and `characterAt(pos)` to `Characters` as alternative to `.take(end).skip(start)` and `getRange(pos, pos + 1)`. * Change some positional parameter names from `other` to `characters`. +* Allow the 2.10 stable SDK. ## 1.1.0-nullsafety.2 diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index e4fbb250..f5cd6dac 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -5,10 +5,10 @@ homepage: https://www.github.com/dart-lang/characters environment: # This must remain a tight constraint until nnbd is stable - sdk: '>=2.10.0-110 <2.10.0' + sdk: '>=2.10.0-110 <2.11.0' dev_dependencies: - test: "^1.6.0" + test: ^1.6.0 pedantic: ^1.9.0 dependency_overrides: From 72151b67f66c5362e0d8261fa24df8c59da192dd Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Thu, 22 Oct 2020 08:46:20 -0700 Subject: [PATCH 29/82] Allow the 2.12 dev SDKs (dart-lang/characters#36) Also bump deps to the `-nullsafety` versions and remove the dependency overrides. --- pkgs/characters/CHANGELOG.md | 4 +++ pkgs/characters/pubspec.yaml | 64 +++--------------------------------- 2 files changed, 8 insertions(+), 60 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 695c3177..98613bea 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.0-nullsafety.4 + +* Allow the 2.12 dev SDKs. + ## 1.1.0-nullsafety.3 * Added `stringBeforeLength` and `stringAfterLength` to `CharacterRange`. diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index f5cd6dac..da507f04 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,68 +1,12 @@ name: characters -version: 1.1.0-nullsafety.3 +version: 1.1.0-nullsafety.4 description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters environment: # This must remain a tight constraint until nnbd is stable - sdk: '>=2.10.0-110 <2.11.0' + sdk: '>=2.10.0-110 <2.12.0' dev_dependencies: - test: ^1.6.0 - pedantic: ^1.9.0 - -dependency_overrides: - async: - git: git://github.com/dart-lang/async.git - boolean_selector: - git: git://github.com/dart-lang/boolean_selector.git - charcode: - git: git://github.com/dart-lang/charcode.git - collection: - git: git://github.com/dart-lang/collection.git - js: - git: - url: git://github.com/dart-lang/sdk.git - path: pkg/js - ref: 2-10-pkgs - matcher: - git: git://github.com/dart-lang/matcher.git - meta: - git: - url: git://github.com/dart-lang/sdk.git - path: pkg/meta - ref: 2-10-pkgs - path: - git: git://github.com/dart-lang/path.git - pedantic: - git: git://github.com/dart-lang/pedantic.git - pool: - git: git://github.com/dart-lang/pool.git - source_maps: - git: git://github.com/dart-lang/source_maps.git - source_map_stack_trace: - git: git://github.com/dart-lang/source_map_stack_trace.git - source_span: - git: git://github.com/dart-lang/source_span.git - stack_trace: - git: git://github.com/dart-lang/stack_trace.git - stream_channel: - git: git://github.com/dart-lang/stream_channel.git - string_scanner: - git: git://github.com/dart-lang/string_scanner.git - term_glyph: - git: git://github.com/dart-lang/term_glyph.git - test_api: - git: - url: git://github.com/dart-lang/test.git - path: pkgs/test_api - test_core: - git: - url: git://github.com/dart-lang/test.git - path: pkgs/test_core - test: - git: - url: git://github.com/dart-lang/test.git - path: pkgs/test - typed_data: - git: git://github.com/dart-lang/typed_data.git + test: ^1.16.0-nullsafety + pedantic: ^1.10.0-nullsafety From 613d61cdd873e0a64fc81fa383b3b2e57eb35d90 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Tue, 3 Nov 2020 11:12:22 -0800 Subject: [PATCH 30/82] Bump SDK constraints for pub (dart-lang/characters#37) Use a 2.12.0 lower bound since pub does not understand allowed experiments for earlier versions. Use a 3.0.0 upper bound to avoid a warning in pub and to give some flexibility in publishing for stable. --- pkgs/characters/CHANGELOG.md | 5 +++++ pkgs/characters/pubspec.yaml | 5 ++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 98613bea..8a9af55a 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.1.0-nullsafety.5 + +* Update sdk constraints to `>=2.12.0-0 <3.0.0` based on beta release + guidelines. + ## 1.1.0-nullsafety.4 * Allow the 2.12 dev SDKs. diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index da507f04..e568323b 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,11 +1,10 @@ name: characters -version: 1.1.0-nullsafety.4 +version: 1.1.0-nullsafety.5 description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters environment: - # This must remain a tight constraint until nnbd is stable - sdk: '>=2.10.0-110 <2.12.0' + sdk: ">=2.12.0-0 <3.0.0" dev_dependencies: test: ^1.16.0-nullsafety From c70e1e0286894ff5f2980a3c5cb19ea686149d1f Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Fri, 4 Dec 2020 12:55:24 +0100 Subject: [PATCH 31/82] Move tests back to top-level test dir (dart-lang/characters#42) * Move tests * Update paths --- pkgs/characters/test/characters_test.dart | 754 +++++++++++++++++- .../test/sound_tests/characters_test.dart | 741 ----------------- 2 files changed, 741 insertions(+), 754 deletions(-) delete mode 100644 pkgs/characters/test/sound_tests/characters_test.dart diff --git a/pkgs/characters/test/characters_test.dart b/pkgs/characters/test/characters_test.dart index d7f057b1..03c9adfc 100644 --- a/pkgs/characters/test/characters_test.dart +++ b/pkgs/characters/test/characters_test.dart @@ -1,13 +1,741 @@ -// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -// Unsound entry point. Use until all dependencies are sound. -// Then move `characters_test.dart` back out from `sound_tests/`. - -// @dart=2.8 -import 'sound_tests/characters_test.dart' as sound; - -void main() { - sound.main(); -} +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:math"; + +import "package:test/test.dart"; + +import "package:characters/characters.dart"; + +import "src/unicode_tests.dart"; +import "src/unicode_grapheme_tests.dart"; +import "src/various_tests.dart"; + +late Random random; + +void main([List? args]) { + // Ensure random seed is part of every test failure message, + // and that it can be reapplied for testing. + var seed = (args != null && args.isNotEmpty) + ? int.parse(args[0]) + : Random().nextInt(0x3FFFFFFF); + random = Random(seed); + group("[Random Seed: $seed]", tests); + group("characters", () { + test("operations", () { + var flag = "\u{1F1E9}\u{1F1F0}"; // Regional Indicators "DK". + var string = "Hi $flag!"; + expect(string.length, 8); + var cs = gc(string); + expect(cs.length, 5); + expect(cs.toList(), ["H", "i", " ", flag, "!"]); + expect(cs.skip(2).toString(), " $flag!"); + expect(cs.skipLast(2).toString(), "Hi "); + expect(cs.take(2).toString(), "Hi"); + expect(cs.takeLast(2).toString(), "$flag!"); + expect(cs.getRange(1, 4).toString(), "i $flag"); + expect(cs.characterAt(1).toString(), "i"); + expect(cs.characterAt(3).toString(), flag); + + expect(cs.contains("\u{1F1E9}"), false); + expect(cs.contains(flag), true); + expect(cs.contains("$flag!"), false); + expect(cs.containsAll(gc("$flag!")), true); + + expect(cs.takeWhile((x) => x != " ").toString(), "Hi"); + expect(cs.takeLastWhile((x) => x != " ").toString(), "$flag!"); + expect(cs.skipWhile((x) => x != " ").toString(), " $flag!"); + expect(cs.skipLastWhile((x) => x != " ").toString(), "Hi "); + + expect(cs.findFirst(gc(""))!.moveBack(), false); + expect(cs.findFirst(gc(flag))!.current, flag); + expect(cs.findLast(gc(flag))!.current, flag); + expect(cs.iterator.moveNext(), true); + expect(cs.iterator.moveBack(), false); + expect((cs.iterator..moveNext()).current, "H"); + expect(cs.iteratorAtEnd.moveNext(), false); + expect(cs.iteratorAtEnd.moveBack(), true); + expect((cs.iteratorAtEnd..moveBack()).current, "!"); + }); + + testParts(gc("a"), gc("b"), gc("c"), gc("d"), gc("e")); + + // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. + var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. + var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. + var zwj = "\u200d"; // U+200D, ZWJ + var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram + + testParts(gc("$flag$white$zwj$rainbow"), gc("$flag$white"), gc("$rainbow"), + gc("$flag$zwj$rainbow"), gc("!")); + }); + + group("CharacterRange", () { + test("new", () { + var range = CharacterRange("abc"); + expect(range.isEmpty, true); + expect(range.moveNext(), true); + expect(range.current, "a"); + }); + group("new.at", () { + test("simple", () { + var range = CharacterRange.at("abc", 0); + expect(range.isEmpty, true); + expect(range.moveNext(), true); + expect(range.current, "a"); + + range = CharacterRange.at("abc", 1); + expect(range.isEmpty, true); + expect(range.moveNext(), true); + expect(range.current, "b"); + + range = CharacterRange.at("abc", 1, 2); + expect(range.isEmpty, false); + expect(range.current, "b"); + expect(range.moveNext(), true); + + range = CharacterRange.at("abc", 0, 3); + expect(range.isEmpty, false); + expect(range.current, "abc"); + expect(range.moveNext(), false); + }); + test("complicated", () { + // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. + var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. + var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. + var zwj = "\u200d"; // U+200D, ZWJ + var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram + + var rbflag = "$flag$white$zwj$rainbow"; + var string = "-$rbflag-"; + var range = CharacterRange.at(string, 1); + expect(range.isEmpty, true); + expect(range.moveNext(), true); + expect(range.current, rbflag); + + range = range = CharacterRange.at(string, 2); + expect(range.isEmpty, false); + expect(range.current, rbflag); + + range = range = CharacterRange.at(string, 0, 2); + expect(range.isEmpty, false); + expect(range.current, "-$rbflag"); + + range = range = CharacterRange.at(string, 0, 2); + expect(range.isEmpty, false); + expect(range.current, "-$rbflag"); + + range = range = CharacterRange.at(string, 2, "-$rbflag".length - 1); + expect(range.isEmpty, false); + expect(range.current, rbflag); + expect(range.stringBeforeLength, 1); + + range = range = CharacterRange.at(string, 0, string.length); + expect(range.isEmpty, false); + expect(range.current, string); + }); + }); + }); +} + +void tests() { + test("empty", () { + expectGC(gc(""), []); + }); + group("gc-ASCII", () { + for (var text in [ + "", + "A", + "123456abcdefab", + ]) { + test('"$text"', () { + expectGC(gc(text), charsOf(text)); + }); + } + test("CR+NL", () { + expectGC(gc("a\r\nb"), ["a", "\r\n", "b"]); + expectGC(gc("a\n\rb"), ["a", "\n", "\r", "b"]); + }); + }); + group("Non-ASCII single-code point", () { + for (var text in [ + "à la mode", + "rødgrød-æble-ål", + ]) { + test('"$text"', () { + expectGC(gc(text), charsOf(text)); + }); + } + }); + group("Combining marks", () { + var text = "a\u0300 la mode"; + test('"$text"', () { + expectGC(gc(text), ["a\u0300", " ", "l", "a", " ", "m", "o", "d", "e"]); + }); + var text2 = "æble-a\u030Al"; + test('"$text2"', () { + expectGC(gc(text2), ["æ", "b", "l", "e", "-", "a\u030A", "l"]); + }); + }); + + group("Regional Indicators", () { + test('"🇦🇩🇰🇾🇪🇸"', () { + // Andorra, Cayman Islands, Spain. + expectGC(gc("🇦🇩🇰🇾🇪🇸"), ["🇦🇩", "🇰🇾", "🇪🇸"]); + }); + test('"X🇦🇩🇰🇾🇪🇸"', () { + // Other, Andorra, Cayman Islands, Spain. + expectGC(gc("X🇦🇩🇰🇾🇪🇸"), ["X", "🇦🇩", "🇰🇾", "🇪🇸"]); + }); + test('"🇩🇰🇾🇪🇸"', () { + // Denmark, Yemen, unmatched S. + expectGC(gc("🇩🇰🇾🇪🇸"), ["🇩🇰", "🇾🇪", "🇸"]); + }); + test('"X🇩🇰🇾🇪🇸"', () { + // Other, Denmark, Yemen, unmatched S. + expectGC(gc("X🇩🇰🇾🇪🇸"), ["X", "🇩🇰", "🇾🇪", "🇸"]); + }); + }); + + group("Hangul", () { + // Individual characters found on Wikipedia. Not expected to make sense. + test('"읍쌍된밟"', () { + expectGC(gc("읍쌍된밟"), ["읍", "쌍", "된", "밟"]); + }); + }); + + group("Unicode test", () { + for (var gcs in splitTests) { + test("[${testDescription(gcs)}]", () { + expectGC(gc(gcs.join()), gcs); + }); + } + }); + + group("Emoji test", () { + for (var gcs in emojis) { + test("[${testDescription(gcs)}]", () { + expectGC(gc(gcs.join()), gcs); + }); + } + }); + + group("Zalgo test", () { + for (var gcs in zalgo) { + test("[${testDescription(gcs)}]", () { + expectGC(gc(gcs.join()), gcs); + }); + } + }); +} + +// Converts text with no multi-code-point grapheme clusters into +// list of grapheme clusters. +List charsOf(String text) => + text.runes.map((r) => String.fromCharCode(r)).toList(); + +void expectGC(Characters actual, List expected) { + var text = expected.join(); + + // Iterable operations. + expect(actual.string, text); + expect(actual.toString(), text); + expect(actual.toList(), expected); + expect(actual.length, expected.length); + if (expected.isNotEmpty) { + expect(actual.first, expected.first); + expect(actual.last, expected.last); + } else { + expect(() => actual.first, throwsStateError); + expect(() => actual.last, throwsStateError); + } + if (expected.length == 1) { + expect(actual.single, expected.single); + } else { + expect(() => actual.single, throwsStateError); + } + expect(actual.isEmpty, expected.isEmpty); + expect(actual.isNotEmpty, expected.isNotEmpty); + expect(actual.contains(""), false); + for (var char in expected) { + expect(actual.contains(char), true); + } + for (var i = 1; i < expected.length; i++) { + expect(actual.contains(expected[i - 1] + expected[i]), false); + } + expect(actual.skip(1).toList(), expected.skip(1).toList()); + expect(actual.take(1).toList(), expected.take(1).toList()); + expect(actual.skip(1).toString(), expected.skip(1).join()); + expect(actual.take(1).toString(), expected.take(1).join()); + expect(actual.getRange(1, 2).toString(), expected.take(2).skip(1).join()); + + if (expected.isNotEmpty) { + expect(actual.skipLast(1).toList(), + expected.take(expected.length - 1).toList()); + expect(actual.takeLast(1).toList(), + expected.skip(expected.length - 1).toList()); + expect(actual.skipLast(1).toString(), + expected.take(expected.length - 1).join()); + expect(actual.takeLast(1).toString(), + expected.skip(expected.length - 1).join()); + } + bool isEven(String s) => s.length.isEven; + + expect( + actual.skipWhile(isEven).toList(), expected.skipWhile(isEven).toList()); + expect( + actual.takeWhile(isEven).toList(), expected.takeWhile(isEven).toList()); + expect( + actual.skipWhile(isEven).toString(), expected.skipWhile(isEven).join()); + expect( + actual.takeWhile(isEven).toString(), expected.takeWhile(isEven).join()); + + expect(actual.skipLastWhile(isEven).toString(), + expected.toList().reversed.skipWhile(isEven).toList().reversed.join()); + expect(actual.takeLastWhile(isEven).toString(), + expected.toList().reversed.takeWhile(isEven).toList().reversed.join()); + + expect(actual.where(isEven).toString(), expected.where(isEven).join()); + + expect((actual + actual).toString(), actual.string + actual.string); + + // Iteration. + var it = actual.iterator; + expect(it.isEmpty, true); + for (var i = 0; i < expected.length; i++) { + expect(it.moveNext(), true); + expect(it.current, expected[i]); + + expect(actual.elementAt(i), expected[i]); + expect(actual.skip(i).first, expected[i]); + expect(actual.characterAt(i).toString(), expected[i]); + expect(actual.getRange(i, i + 1).toString(), expected[i]); + } + expect(it.moveNext(), false); + for (var i = expected.length - 1; i >= 0; i--) { + expect(it.moveBack(), true); + expect(it.current, expected[i]); + } + expect(it.moveBack(), false); + expect(it.isEmpty, true); + + // GraphemeClusters operations. + expect(actual.toUpperCase().string, text.toUpperCase()); + expect(actual.toLowerCase().string, text.toLowerCase()); + + expect(actual.string, text); + + expect(actual.containsAll(gc("")), true); + expect(actual.containsAll(actual), true); + if (expected.isNotEmpty) { + var steps = min(5, expected.length); + for (var s = 0; s <= steps; s++) { + var i = expected.length * s ~/ steps; + expect(actual.startsWith(gc(expected.sublist(0, i).join())), true); + expect(actual.endsWith(gc(expected.sublist(i).join())), true); + for (var t = s + 1; t <= steps; t++) { + var j = expected.length * t ~/ steps; + var slice = expected.sublist(i, j).join(); + var gcs = gc(slice); + expect(actual.containsAll(gcs), true); + } + } + } + + { + // Random walk back and forth. + var it = actual.iterator; + var pos = -1; + if (random.nextBool()) { + pos = expected.length; + it = actual.iteratorAtEnd; + } + var steps = 5 + random.nextInt(expected.length * 2 + 1); + var lastMove = false; + while (true) { + var back = false; + if (pos < 0) { + expect(lastMove, false); + expect(it.isEmpty, true); + } else if (pos >= expected.length) { + expect(lastMove, false); + expect(it.isEmpty, true); + back = true; + } else { + expect(lastMove, true); + expect(it.current, expected[pos]); + back = random.nextBool(); + } + if (--steps < 0) break; + if (back) { + lastMove = it.moveBack(); + pos -= 1; + } else { + lastMove = it.moveNext(); + pos += 1; + } + } + } +} + +Characters gc(String string) => Characters(string); + +void testParts( + Characters a, Characters b, Characters c, Characters d, Characters e) { + var cs = gc("$a$b$c$d$e"); + test("$cs", () { + var it = cs.iterator; + expect(it.isEmpty, true); + expect(it.isNotEmpty, false); + expect(it.current, ""); + + // moveNext(). + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$a"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$b"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$c"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$d"); + expect(it.moveNext(), true); + expect(it.isEmpty, false); + expect(it.current, "$e"); + expect(it.moveNext(), false); + expect(it.isEmpty, true); + expect(it.current, ""); + + // moveBack(). + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$e"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$d"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$c"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$b"); + expect(it.moveBack(), true); + expect(it.isEmpty, false); + expect(it.current, "$a"); + expect(it.moveBack(), false); + expect(it.isEmpty, true); + expect(it.current, ""); + + // moveNext(int). + expect(it.moveTo(c), true); + expect(it.current, "$c"); + expect(it.moveTo(b), false); + expect(it.moveTo(c), false); + expect(it.current, "$c"); + expect(it.moveTo(d), true); + expect(it.current, "$d"); + + // moveBack(c). + expect(it.moveBackTo(c), true); + expect(it.current, "$c"); + expect(it.moveBackTo(d), false); + expect(it.moveBackTo(c), false); + expect(it.moveBackTo(a), true); + expect(it.current, "$a"); + + // moveNext(n) + expect(it.moveBack(), false); + + expect(it.moveNext(2), true); + expect(it.current, "$a$b"); + expect(it.moveNext(4), false); + expect(it.current, "$c$d$e"); + expect(it.moveNext(0), true); + expect(it.current, ""); + expect(it.moveNext(1), false); + expect(it.current, ""); + + // moveBack(n). + expect(it.moveBack(2), true); + expect(it.current, "$d$e"); + expect(it.moveBack(1), true); + expect(it.current, "$c"); + expect(it.moveBack(3), false); + expect(it.current, "$a$b"); + expect(it.moveBack(), false); + + // moveFirst. + it.expandAll(); + expect(it.current, "$a$b$c$d$e"); + expect(it.collapseToFirst(b), true); + expect(it.current, "$b"); + it.expandAll(); + expect(it.current, "$b$c$d$e"); + expect(it.collapseToFirst(a), false); + expect(it.current, "$b$c$d$e"); + + // moveBackTo + it.expandBackAll(); + expect(it.current, "$a$b$c$d$e"); + expect(it.collapseToLast(c), true); + expect(it.current, "$c"); + + // includeNext/includePrevious + expect(it.expandTo(e), true); + expect(it.current, "$c$d$e"); + expect(it.expandTo(e), false); + expect(it.expandBackTo(b), true); + expect(it.current, "$b$c$d$e"); + expect(it.expandBackTo(b), false); + expect(it.current, "$b$c$d$e"); + expect(it.collapseToFirst(c), true); + expect(it.current, "$c"); + + // includeUntilNext/expandBackUntil + expect(it.expandBackUntil(a), true); + expect(it.current, "$b$c"); + expect(it.expandBackUntil(a), true); + expect(it.current, "$b$c"); + expect(it.expandUntil(e), true); + expect(it.current, "$b$c$d"); + expect(it.expandUntil(e), true); + expect(it.current, "$b$c$d"); + + // dropFirst/dropLast + expect(it.dropFirst(), true); + expect(it.current, "$c$d"); + expect(it.dropLast(), true); + expect(it.current, "$c"); + it.expandBackAll(); + it.expandAll(); + expect(it.current, "$a$b$c$d$e"); + expect(it.dropTo(b), true); + expect(it.current, "$c$d$e"); + expect(it.dropBackTo(d), true); + expect(it.current, "$c"); + + it.expandBackAll(); + it.expandAll(); + expect(it.current, "$a$b$c$d$e"); + + expect(it.dropUntil(b), true); + expect(it.current, "$b$c$d$e"); + expect(it.dropBackUntil(d), true); + expect(it.current, "$b$c$d"); + + it.dropWhile((x) => x == b.string); + expect(it.current, "$c$d"); + it.expandBackAll(); + expect(it.current, "$a$b$c$d"); + it.dropBackWhile((x) => x != b.string); + expect(it.current, "$a$b"); + it.dropBackWhile((x) => false); + expect(it.current, "$a$b"); + + // include..While + it.expandWhile((x) => false); + expect(it.current, "$a$b"); + it.expandWhile((x) => x != e.string); + expect(it.current, "$a$b$c$d"); + expect(it.collapseToFirst(c), true); + expect(it.current, "$c"); + it.expandBackWhile((x) => false); + expect(it.current, "$c"); + it.expandBackWhile((x) => x != a.string); + expect(it.current, "$b$c"); + + var cs2 = cs.replaceAll(c, gc("")); + var cs3 = cs.replaceFirst(c, gc("")); + var cs4 = cs.findFirst(c)!.replaceRange(gc("")).source; + var cse = gc("$a$b$d$e"); + expect(cs2, cse); + expect(cs3, cse); + expect(cs4, cse); + var cs5 = cs4.replaceAll(a, c); + expect(cs5, gc("$c$b$d$e")); + var cs6 = cs5.replaceAll(gc(""), a); + expect(cs6, gc("$a$c$a$b$a$d$a$e$a")); + var cs7 = cs6.replaceFirst(b, a); + expect(cs7, gc("$a$c$a$a$a$d$a$e$a")); + var cs8 = cs7.replaceFirst(e, a); + expect(cs8, gc("$a$c$a$a$a$d$a$a$a")); + var cs9 = cs8.replaceAll(a + a, b); + expect(cs9, gc("$a$c$b$a$d$b$a")); + it = cs9.iterator; + it.moveTo(b + a); + expect("$b$a", it.current); + it.expandTo(b + a); + expect("$b$a$d$b$a", it.current); + var cs10 = it.replaceAll(b + a, e + e)!; + expect(cs10.currentCharacters, e + e + d + e + e); + expect(cs10.source, gc("$a$c$e$e$d$e$e")); + var cs11 = it.replaceRange(e); + expect(cs11.currentCharacters, e); + expect(cs11.source, gc("$a$c$e")); + + var cs12 = gc("$a$b$a"); + expect(cs12.split(b), [a, a]); + expect(cs12.split(a), [gc(""), b, gc("")]); + expect(cs12.split(a, 2), [gc(""), gc("$b$a")]); + + expect(cs12.split(gc("")), [a, b, a]); + expect(cs12.split(gc(""), 2), [a, gc("$b$a")]); + + expect(gc("").split(gc("")), [gc("")]); + + var cs13 = gc("$b$a$b$a$b$a"); + expect(cs13.split(b), [gc(""), a, a, a]); + expect(cs13.split(b, 1), [cs13]); + expect(cs13.split(b, 2), [gc(""), gc("$a$b$a$b$a")]); + expect(cs13.split(b, 3), [gc(""), a, gc("$a$b$a")]); + expect(cs13.split(b, 4), [gc(""), a, a, a]); + expect(cs13.split(b, 5), [gc(""), a, a, a]); + expect(cs13.split(b, 9999), [gc(""), a, a, a]); + expect(cs13.split(b, 0), [gc(""), a, a, a]); + expect(cs13.split(b, -1), [gc(""), a, a, a]); + expect(cs13.split(b, -9999), [gc(""), a, a, a]); + + it = cs13.iterator..expandAll(); + expect(it.current, "$b$a$b$a$b$a"); + it.dropFirst(); + it.dropLast(); + expect(it.current, "$a$b$a$b"); + expect(it.split(a).map((range) => range.current), ["", "$b", "$b"]); + expect(it.split(a, 2).map((range) => range.current), ["", "$b$a$b"]); + // Each split is after an *a*. + var first = true; + for (var range in it.split(a)) { + if (range.isEmpty) { + // First range is empty. + expect(first, true); + first = false; + continue; + } + // Later ranges are "b" that come after "a". + expect(range.current, "$b"); + range.moveBack(); + expect(range.current, "$a"); + } + + expect(it.split(gc("")).map((range) => range.current), + ["$a", "$b", "$a", "$b"]); + + expect(gc("").iterator.split(gc("")).map((range) => range.current), [""]); + + expect(cs.startsWith(gc("")), true); + expect(cs.startsWith(a), true); + expect(cs.startsWith(a + b), true); + expect(cs.startsWith(gc("$a$b$c")), true); + expect(cs.startsWith(gc("$a$b$c$d")), true); + expect(cs.startsWith(gc("$a$b$c$d$e")), true); + expect(cs.startsWith(b), false); + expect(cs.startsWith(c), false); + expect(cs.startsWith(d), false); + expect(cs.startsWith(e), false); + + expect(cs.endsWith(gc("")), true); + expect(cs.endsWith(e), true); + expect(cs.endsWith(d + e), true); + expect(cs.endsWith(gc("$c$d$e")), true); + expect(cs.endsWith(gc("$b$c$d$e")), true); + expect(cs.endsWith(gc("$a$b$c$d$e")), true); + expect(cs.endsWith(d), false); + expect(cs.endsWith(c), false); + expect(cs.endsWith(b), false); + expect(cs.endsWith(a), false); + + it = cs.findFirst(b + c)!; + expect(it.startsWith(gc("")), true); + expect(it.startsWith(b), true); + expect(it.startsWith(b + c), true); + expect(it.startsWith(a + b + c), false); + expect(it.startsWith(b + c + d), false); + expect(it.startsWith(a), false); + + expect(it.endsWith(gc("")), true); + expect(it.endsWith(c), true); + expect(it.endsWith(b + c), true); + expect(it.endsWith(a + b + c), false); + expect(it.endsWith(b + c + d), false); + expect(it.endsWith(d), false); + + it.collapseToFirst(c); + expect(it.isPrecededBy(gc("")), true); + expect(it.isPrecededBy(b), true); + expect(it.isPrecededBy(a + b), true); + expect(it.isPrecededBy(a + b + c), false); + expect(it.isPrecededBy(a), false); + + expect(it.isFollowedBy(gc("")), true); + expect(it.isFollowedBy(d), true); + expect(it.isFollowedBy(d + e), true); + expect(it.isFollowedBy(c + d + e), false); + expect(it.isFollowedBy(e), false); + }); + test("replace methods", () { + // Unicode grapheme breaking character classes, + // represented by their first value. + + var pattern = gc("\t"); // A non-combining entry to be replaced. + var non = gc(""); + + var c = otr + cr + pattern + lf + pic + pattern + zwj + pic + otr; + var r = c.replaceAll(pattern, non); + expect(r, otr + cr + lf + pic + zwj + pic + otr); + var ci = c.iterator..moveNextAll(); + var ri = ci.replaceAll(pattern, non)!; + expect(ri.currentCharacters, otr + cr + lf + pic + zwj + pic + otr); + ci.dropFirst(); + ci.dropLast(); + expect(ci.currentCharacters, cr + pattern + lf + pic + pattern + zwj + pic); + expect(ci.currentCharacters.length, 7); + ri = ci.replaceAll(pattern, non)!; + expect(ri.currentCharacters, cr + lf + pic + zwj + pic); + expect(ri.currentCharacters.length, 2); + ci.dropFirst(); + ci.dropLast(5); + expect(ci.currentCharacters, pattern); + ri = ci.replaceAll(pattern, non)!; + expect(ri.currentCharacters, cr + lf); + ci.moveNext(2); + ci.moveNext(1); + expect(ci.currentCharacters, pattern); + ri = ci.replaceAll(pattern, non)!; + expect(ri.currentCharacters, pic + zwj + pic); + + c = otr + pic + ext + pattern + pic + ext + otr; + expect(c.length, 5); + ci = c.iterator..moveTo(pattern); + expect(ci.currentCharacters, pattern); + ri = ci.replaceAll(pattern, zwj)!; + expect(ri.currentCharacters, pic + ext + zwj + pic + ext); + + c = reg + pattern + reg + reg; + ci = c.iterator..moveTo(pattern); + ri = ci.replaceRange(non); + expect(ri.currentCharacters, reg + reg); + expect(ri.moveNext(), true); + expect(ri.currentCharacters, reg); + }); +} + +/// Sample characters from each breaking algorithm category. +final Characters ctl = gc("\x00"); // Control, NUL. +final Characters cr = gc("\r"); // Carriage Return, CR. +final Characters lf = gc("\n"); // Newline, NL. +final Characters otr = gc(" "); // Other, Space. +final Characters ext = gc("\u0300"); // Extend, Combining Grave Accent. +final Characters spc = gc("\u0903"); // Spacing Mark, Devanagari Sign Visarga. +final Characters pre = gc("\u0600"); // Prepend, Arabic Number Sign. +final Characters zwj = gc("\u200d"); // Zero-Width Joiner. +final Characters pic = gc("\u00a9"); // Extended Pictographic, Copyright. +final Characters reg = gc("\u{1f1e6}"); // Regional Identifier "a". +final Characters hanl = gc("\u1100"); // Hangul L, Choseong Kiyeok. +final Characters hanv = gc("\u1160"); // Hangul V, Jungseong Filler. +final Characters hant = gc("\u11a8"); // Hangul T, Jongseong Kiyeok. +final Characters hanlv = gc("\uac00"); // Hangul LV, Syllable Ga. +final Characters hanlvt = gc("\uac01"); // Hangul LVT, Syllable Gag. diff --git a/pkgs/characters/test/sound_tests/characters_test.dart b/pkgs/characters/test/sound_tests/characters_test.dart deleted file mode 100644 index 2834a46d..00000000 --- a/pkgs/characters/test/sound_tests/characters_test.dart +++ /dev/null @@ -1,741 +0,0 @@ -// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import "dart:math"; - -import "package:test/test.dart"; - -import "package:characters/characters.dart"; - -import "../src/unicode_tests.dart"; -import "../src/unicode_grapheme_tests.dart"; -import "../src/various_tests.dart"; - -late Random random; - -void main([List? args]) { - // Ensure random seed is part of every test failure message, - // and that it can be reapplied for testing. - var seed = (args != null && args.isNotEmpty) - ? int.parse(args[0]) - : Random().nextInt(0x3FFFFFFF); - random = Random(seed); - group("[Random Seed: $seed]", tests); - group("characters", () { - test("operations", () { - var flag = "\u{1F1E9}\u{1F1F0}"; // Regional Indicators "DK". - var string = "Hi $flag!"; - expect(string.length, 8); - var cs = gc(string); - expect(cs.length, 5); - expect(cs.toList(), ["H", "i", " ", flag, "!"]); - expect(cs.skip(2).toString(), " $flag!"); - expect(cs.skipLast(2).toString(), "Hi "); - expect(cs.take(2).toString(), "Hi"); - expect(cs.takeLast(2).toString(), "$flag!"); - expect(cs.getRange(1, 4).toString(), "i $flag"); - expect(cs.characterAt(1).toString(), "i"); - expect(cs.characterAt(3).toString(), flag); - - expect(cs.contains("\u{1F1E9}"), false); - expect(cs.contains(flag), true); - expect(cs.contains("$flag!"), false); - expect(cs.containsAll(gc("$flag!")), true); - - expect(cs.takeWhile((x) => x != " ").toString(), "Hi"); - expect(cs.takeLastWhile((x) => x != " ").toString(), "$flag!"); - expect(cs.skipWhile((x) => x != " ").toString(), " $flag!"); - expect(cs.skipLastWhile((x) => x != " ").toString(), "Hi "); - - expect(cs.findFirst(gc(""))!.moveBack(), false); - expect(cs.findFirst(gc(flag))!.current, flag); - expect(cs.findLast(gc(flag))!.current, flag); - expect(cs.iterator.moveNext(), true); - expect(cs.iterator.moveBack(), false); - expect((cs.iterator..moveNext()).current, "H"); - expect(cs.iteratorAtEnd.moveNext(), false); - expect(cs.iteratorAtEnd.moveBack(), true); - expect((cs.iteratorAtEnd..moveBack()).current, "!"); - }); - - testParts(gc("a"), gc("b"), gc("c"), gc("d"), gc("e")); - - // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. - var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. - var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. - var zwj = "\u200d"; // U+200D, ZWJ - var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram - - testParts(gc("$flag$white$zwj$rainbow"), gc("$flag$white"), gc("$rainbow"), - gc("$flag$zwj$rainbow"), gc("!")); - }); - - group("CharacterRange", () { - test("new", () { - var range = CharacterRange("abc"); - expect(range.isEmpty, true); - expect(range.moveNext(), true); - expect(range.current, "a"); - }); - group("new.at", () { - test("simple", () { - var range = CharacterRange.at("abc", 0); - expect(range.isEmpty, true); - expect(range.moveNext(), true); - expect(range.current, "a"); - - range = CharacterRange.at("abc", 1); - expect(range.isEmpty, true); - expect(range.moveNext(), true); - expect(range.current, "b"); - - range = CharacterRange.at("abc", 1, 2); - expect(range.isEmpty, false); - expect(range.current, "b"); - expect(range.moveNext(), true); - - range = CharacterRange.at("abc", 0, 3); - expect(range.isEmpty, false); - expect(range.current, "abc"); - expect(range.moveNext(), false); - }); - test("complicated", () { - // Composite pictogram example, from https://en.wikipedia.org/wiki/Zero-width_joiner. - var flag = "\u{1f3f3}"; // U+1F3F3, Flag, waving. Category Pictogram. - var white = "\ufe0f"; // U+FE0F, Variant selector 16. Category Extend. - var zwj = "\u200d"; // U+200D, ZWJ - var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram - - var rbflag = "$flag$white$zwj$rainbow"; - var string = "-$rbflag-"; - var range = CharacterRange.at(string, 1); - expect(range.isEmpty, true); - expect(range.moveNext(), true); - expect(range.current, rbflag); - - range = range = CharacterRange.at(string, 2); - expect(range.isEmpty, false); - expect(range.current, rbflag); - - range = range = CharacterRange.at(string, 0, 2); - expect(range.isEmpty, false); - expect(range.current, "-$rbflag"); - - range = range = CharacterRange.at(string, 0, 2); - expect(range.isEmpty, false); - expect(range.current, "-$rbflag"); - - range = range = CharacterRange.at(string, 2, "-$rbflag".length - 1); - expect(range.isEmpty, false); - expect(range.current, rbflag); - expect(range.stringBeforeLength, 1); - - range = range = CharacterRange.at(string, 0, string.length); - expect(range.isEmpty, false); - expect(range.current, string); - }); - }); - }); -} - -void tests() { - test("empty", () { - expectGC(gc(""), []); - }); - group("gc-ASCII", () { - for (var text in [ - "", - "A", - "123456abcdefab", - ]) { - test('"$text"', () { - expectGC(gc(text), charsOf(text)); - }); - } - test("CR+NL", () { - expectGC(gc("a\r\nb"), ["a", "\r\n", "b"]); - expectGC(gc("a\n\rb"), ["a", "\n", "\r", "b"]); - }); - }); - group("Non-ASCII single-code point", () { - for (var text in [ - "à la mode", - "rødgrød-æble-ål", - ]) { - test('"$text"', () { - expectGC(gc(text), charsOf(text)); - }); - } - }); - group("Combining marks", () { - var text = "a\u0300 la mode"; - test('"$text"', () { - expectGC(gc(text), ["a\u0300", " ", "l", "a", " ", "m", "o", "d", "e"]); - }); - var text2 = "æble-a\u030Al"; - test('"$text2"', () { - expectGC(gc(text2), ["æ", "b", "l", "e", "-", "a\u030A", "l"]); - }); - }); - - group("Regional Indicators", () { - test('"🇦🇩🇰🇾🇪🇸"', () { - // Andorra, Cayman Islands, Spain. - expectGC(gc("🇦🇩🇰🇾🇪🇸"), ["🇦🇩", "🇰🇾", "🇪🇸"]); - }); - test('"X🇦🇩🇰🇾🇪🇸"', () { - // Other, Andorra, Cayman Islands, Spain. - expectGC(gc("X🇦🇩🇰🇾🇪🇸"), ["X", "🇦🇩", "🇰🇾", "🇪🇸"]); - }); - test('"🇩🇰🇾🇪🇸"', () { - // Denmark, Yemen, unmatched S. - expectGC(gc("🇩🇰🇾🇪🇸"), ["🇩🇰", "🇾🇪", "🇸"]); - }); - test('"X🇩🇰🇾🇪🇸"', () { - // Other, Denmark, Yemen, unmatched S. - expectGC(gc("X🇩🇰🇾🇪🇸"), ["X", "🇩🇰", "🇾🇪", "🇸"]); - }); - }); - - group("Hangul", () { - // Individual characters found on Wikipedia. Not expected to make sense. - test('"읍쌍된밟"', () { - expectGC(gc("읍쌍된밟"), ["읍", "쌍", "된", "밟"]); - }); - }); - - group("Unicode test", () { - for (var gcs in splitTests) { - test("[${testDescription(gcs)}]", () { - expectGC(gc(gcs.join()), gcs); - }); - } - }); - - group("Emoji test", () { - for (var gcs in emojis) { - test("[${testDescription(gcs)}]", () { - expectGC(gc(gcs.join()), gcs); - }); - } - }); - - group("Zalgo test", () { - for (var gcs in zalgo) { - test("[${testDescription(gcs)}]", () { - expectGC(gc(gcs.join()), gcs); - }); - } - }); -} - -// Converts text with no multi-code-point grapheme clusters into -// list of grapheme clusters. -List charsOf(String text) => - text.runes.map((r) => String.fromCharCode(r)).toList(); - -void expectGC(Characters actual, List expected) { - var text = expected.join(); - - // Iterable operations. - expect(actual.string, text); - expect(actual.toString(), text); - expect(actual.toList(), expected); - expect(actual.length, expected.length); - if (expected.isNotEmpty) { - expect(actual.first, expected.first); - expect(actual.last, expected.last); - } else { - expect(() => actual.first, throwsStateError); - expect(() => actual.last, throwsStateError); - } - if (expected.length == 1) { - expect(actual.single, expected.single); - } else { - expect(() => actual.single, throwsStateError); - } - expect(actual.isEmpty, expected.isEmpty); - expect(actual.isNotEmpty, expected.isNotEmpty); - expect(actual.contains(""), false); - for (var char in expected) { - expect(actual.contains(char), true); - } - for (var i = 1; i < expected.length; i++) { - expect(actual.contains(expected[i - 1] + expected[i]), false); - } - expect(actual.skip(1).toList(), expected.skip(1).toList()); - expect(actual.take(1).toList(), expected.take(1).toList()); - expect(actual.skip(1).toString(), expected.skip(1).join()); - expect(actual.take(1).toString(), expected.take(1).join()); - expect(actual.getRange(1, 2).toString(), expected.take(2).skip(1).join()); - - if (expected.isNotEmpty) { - expect(actual.skipLast(1).toList(), - expected.take(expected.length - 1).toList()); - expect(actual.takeLast(1).toList(), - expected.skip(expected.length - 1).toList()); - expect(actual.skipLast(1).toString(), - expected.take(expected.length - 1).join()); - expect(actual.takeLast(1).toString(), - expected.skip(expected.length - 1).join()); - } - bool isEven(String s) => s.length.isEven; - - expect( - actual.skipWhile(isEven).toList(), expected.skipWhile(isEven).toList()); - expect( - actual.takeWhile(isEven).toList(), expected.takeWhile(isEven).toList()); - expect( - actual.skipWhile(isEven).toString(), expected.skipWhile(isEven).join()); - expect( - actual.takeWhile(isEven).toString(), expected.takeWhile(isEven).join()); - - expect(actual.skipLastWhile(isEven).toString(), - expected.toList().reversed.skipWhile(isEven).toList().reversed.join()); - expect(actual.takeLastWhile(isEven).toString(), - expected.toList().reversed.takeWhile(isEven).toList().reversed.join()); - - expect(actual.where(isEven).toString(), expected.where(isEven).join()); - - expect((actual + actual).toString(), actual.string + actual.string); - - // Iteration. - var it = actual.iterator; - expect(it.isEmpty, true); - for (var i = 0; i < expected.length; i++) { - expect(it.moveNext(), true); - expect(it.current, expected[i]); - - expect(actual.elementAt(i), expected[i]); - expect(actual.skip(i).first, expected[i]); - expect(actual.characterAt(i).toString(), expected[i]); - expect(actual.getRange(i, i + 1).toString(), expected[i]); - } - expect(it.moveNext(), false); - for (var i = expected.length - 1; i >= 0; i--) { - expect(it.moveBack(), true); - expect(it.current, expected[i]); - } - expect(it.moveBack(), false); - expect(it.isEmpty, true); - - // GraphemeClusters operations. - expect(actual.toUpperCase().string, text.toUpperCase()); - expect(actual.toLowerCase().string, text.toLowerCase()); - - expect(actual.string, text); - - expect(actual.containsAll(gc("")), true); - expect(actual.containsAll(actual), true); - if (expected.isNotEmpty) { - var steps = min(5, expected.length); - for (var s = 0; s <= steps; s++) { - var i = expected.length * s ~/ steps; - expect(actual.startsWith(gc(expected.sublist(0, i).join())), true); - expect(actual.endsWith(gc(expected.sublist(i).join())), true); - for (var t = s + 1; t <= steps; t++) { - var j = expected.length * t ~/ steps; - var slice = expected.sublist(i, j).join(); - var gcs = gc(slice); - expect(actual.containsAll(gcs), true); - } - } - } - - { - // Random walk back and forth. - var it = actual.iterator; - var pos = -1; - if (random.nextBool()) { - pos = expected.length; - it = actual.iteratorAtEnd; - } - var steps = 5 + random.nextInt(expected.length * 2 + 1); - var lastMove = false; - while (true) { - var back = false; - if (pos < 0) { - expect(lastMove, false); - expect(it.isEmpty, true); - } else if (pos >= expected.length) { - expect(lastMove, false); - expect(it.isEmpty, true); - back = true; - } else { - expect(lastMove, true); - expect(it.current, expected[pos]); - back = random.nextBool(); - } - if (--steps < 0) break; - if (back) { - lastMove = it.moveBack(); - pos -= 1; - } else { - lastMove = it.moveNext(); - pos += 1; - } - } - } -} - -Characters gc(String string) => Characters(string); - -void testParts( - Characters a, Characters b, Characters c, Characters d, Characters e) { - var cs = gc("$a$b$c$d$e"); - test("$cs", () { - var it = cs.iterator; - expect(it.isEmpty, true); - expect(it.isNotEmpty, false); - expect(it.current, ""); - - // moveNext(). - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$a"); - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$b"); - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$c"); - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$d"); - expect(it.moveNext(), true); - expect(it.isEmpty, false); - expect(it.current, "$e"); - expect(it.moveNext(), false); - expect(it.isEmpty, true); - expect(it.current, ""); - - // moveBack(). - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$e"); - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$d"); - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$c"); - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$b"); - expect(it.moveBack(), true); - expect(it.isEmpty, false); - expect(it.current, "$a"); - expect(it.moveBack(), false); - expect(it.isEmpty, true); - expect(it.current, ""); - - // moveNext(int). - expect(it.moveTo(c), true); - expect(it.current, "$c"); - expect(it.moveTo(b), false); - expect(it.moveTo(c), false); - expect(it.current, "$c"); - expect(it.moveTo(d), true); - expect(it.current, "$d"); - - // moveBack(c). - expect(it.moveBackTo(c), true); - expect(it.current, "$c"); - expect(it.moveBackTo(d), false); - expect(it.moveBackTo(c), false); - expect(it.moveBackTo(a), true); - expect(it.current, "$a"); - - // moveNext(n) - expect(it.moveBack(), false); - - expect(it.moveNext(2), true); - expect(it.current, "$a$b"); - expect(it.moveNext(4), false); - expect(it.current, "$c$d$e"); - expect(it.moveNext(0), true); - expect(it.current, ""); - expect(it.moveNext(1), false); - expect(it.current, ""); - - // moveBack(n). - expect(it.moveBack(2), true); - expect(it.current, "$d$e"); - expect(it.moveBack(1), true); - expect(it.current, "$c"); - expect(it.moveBack(3), false); - expect(it.current, "$a$b"); - expect(it.moveBack(), false); - - // moveFirst. - it.expandAll(); - expect(it.current, "$a$b$c$d$e"); - expect(it.collapseToFirst(b), true); - expect(it.current, "$b"); - it.expandAll(); - expect(it.current, "$b$c$d$e"); - expect(it.collapseToFirst(a), false); - expect(it.current, "$b$c$d$e"); - - // moveBackTo - it.expandBackAll(); - expect(it.current, "$a$b$c$d$e"); - expect(it.collapseToLast(c), true); - expect(it.current, "$c"); - - // includeNext/includePrevious - expect(it.expandTo(e), true); - expect(it.current, "$c$d$e"); - expect(it.expandTo(e), false); - expect(it.expandBackTo(b), true); - expect(it.current, "$b$c$d$e"); - expect(it.expandBackTo(b), false); - expect(it.current, "$b$c$d$e"); - expect(it.collapseToFirst(c), true); - expect(it.current, "$c"); - - // includeUntilNext/expandBackUntil - expect(it.expandBackUntil(a), true); - expect(it.current, "$b$c"); - expect(it.expandBackUntil(a), true); - expect(it.current, "$b$c"); - expect(it.expandUntil(e), true); - expect(it.current, "$b$c$d"); - expect(it.expandUntil(e), true); - expect(it.current, "$b$c$d"); - - // dropFirst/dropLast - expect(it.dropFirst(), true); - expect(it.current, "$c$d"); - expect(it.dropLast(), true); - expect(it.current, "$c"); - it.expandBackAll(); - it.expandAll(); - expect(it.current, "$a$b$c$d$e"); - expect(it.dropTo(b), true); - expect(it.current, "$c$d$e"); - expect(it.dropBackTo(d), true); - expect(it.current, "$c"); - - it.expandBackAll(); - it.expandAll(); - expect(it.current, "$a$b$c$d$e"); - - expect(it.dropUntil(b), true); - expect(it.current, "$b$c$d$e"); - expect(it.dropBackUntil(d), true); - expect(it.current, "$b$c$d"); - - it.dropWhile((x) => x == b.string); - expect(it.current, "$c$d"); - it.expandBackAll(); - expect(it.current, "$a$b$c$d"); - it.dropBackWhile((x) => x != b.string); - expect(it.current, "$a$b"); - it.dropBackWhile((x) => false); - expect(it.current, "$a$b"); - - // include..While - it.expandWhile((x) => false); - expect(it.current, "$a$b"); - it.expandWhile((x) => x != e.string); - expect(it.current, "$a$b$c$d"); - expect(it.collapseToFirst(c), true); - expect(it.current, "$c"); - it.expandBackWhile((x) => false); - expect(it.current, "$c"); - it.expandBackWhile((x) => x != a.string); - expect(it.current, "$b$c"); - - var cs2 = cs.replaceAll(c, gc("")); - var cs3 = cs.replaceFirst(c, gc("")); - var cs4 = cs.findFirst(c)!.replaceRange(gc("")).source; - var cse = gc("$a$b$d$e"); - expect(cs2, cse); - expect(cs3, cse); - expect(cs4, cse); - var cs5 = cs4.replaceAll(a, c); - expect(cs5, gc("$c$b$d$e")); - var cs6 = cs5.replaceAll(gc(""), a); - expect(cs6, gc("$a$c$a$b$a$d$a$e$a")); - var cs7 = cs6.replaceFirst(b, a); - expect(cs7, gc("$a$c$a$a$a$d$a$e$a")); - var cs8 = cs7.replaceFirst(e, a); - expect(cs8, gc("$a$c$a$a$a$d$a$a$a")); - var cs9 = cs8.replaceAll(a + a, b); - expect(cs9, gc("$a$c$b$a$d$b$a")); - it = cs9.iterator; - it.moveTo(b + a); - expect("$b$a", it.current); - it.expandTo(b + a); - expect("$b$a$d$b$a", it.current); - var cs10 = it.replaceAll(b + a, e + e)!; - expect(cs10.currentCharacters, e + e + d + e + e); - expect(cs10.source, gc("$a$c$e$e$d$e$e")); - var cs11 = it.replaceRange(e); - expect(cs11.currentCharacters, e); - expect(cs11.source, gc("$a$c$e")); - - var cs12 = gc("$a$b$a"); - expect(cs12.split(b), [a, a]); - expect(cs12.split(a), [gc(""), b, gc("")]); - expect(cs12.split(a, 2), [gc(""), gc("$b$a")]); - - expect(cs12.split(gc("")), [a, b, a]); - expect(cs12.split(gc(""), 2), [a, gc("$b$a")]); - - expect(gc("").split(gc("")), [gc("")]); - - var cs13 = gc("$b$a$b$a$b$a"); - expect(cs13.split(b), [gc(""), a, a, a]); - expect(cs13.split(b, 1), [cs13]); - expect(cs13.split(b, 2), [gc(""), gc("$a$b$a$b$a")]); - expect(cs13.split(b, 3), [gc(""), a, gc("$a$b$a")]); - expect(cs13.split(b, 4), [gc(""), a, a, a]); - expect(cs13.split(b, 5), [gc(""), a, a, a]); - expect(cs13.split(b, 9999), [gc(""), a, a, a]); - expect(cs13.split(b, 0), [gc(""), a, a, a]); - expect(cs13.split(b, -1), [gc(""), a, a, a]); - expect(cs13.split(b, -9999), [gc(""), a, a, a]); - - it = cs13.iterator..expandAll(); - expect(it.current, "$b$a$b$a$b$a"); - it.dropFirst(); - it.dropLast(); - expect(it.current, "$a$b$a$b"); - expect(it.split(a).map((range) => range.current), ["", "$b", "$b"]); - expect(it.split(a, 2).map((range) => range.current), ["", "$b$a$b"]); - // Each split is after an *a*. - var first = true; - for (var range in it.split(a)) { - if (range.isEmpty) { - // First range is empty. - expect(first, true); - first = false; - continue; - } - // Later ranges are "b" that come after "a". - expect(range.current, "$b"); - range.moveBack(); - expect(range.current, "$a"); - } - - expect(it.split(gc("")).map((range) => range.current), - ["$a", "$b", "$a", "$b"]); - - expect(gc("").iterator.split(gc("")).map((range) => range.current), [""]); - - expect(cs.startsWith(gc("")), true); - expect(cs.startsWith(a), true); - expect(cs.startsWith(a + b), true); - expect(cs.startsWith(gc("$a$b$c")), true); - expect(cs.startsWith(gc("$a$b$c$d")), true); - expect(cs.startsWith(gc("$a$b$c$d$e")), true); - expect(cs.startsWith(b), false); - expect(cs.startsWith(c), false); - expect(cs.startsWith(d), false); - expect(cs.startsWith(e), false); - - expect(cs.endsWith(gc("")), true); - expect(cs.endsWith(e), true); - expect(cs.endsWith(d + e), true); - expect(cs.endsWith(gc("$c$d$e")), true); - expect(cs.endsWith(gc("$b$c$d$e")), true); - expect(cs.endsWith(gc("$a$b$c$d$e")), true); - expect(cs.endsWith(d), false); - expect(cs.endsWith(c), false); - expect(cs.endsWith(b), false); - expect(cs.endsWith(a), false); - - it = cs.findFirst(b + c)!; - expect(it.startsWith(gc("")), true); - expect(it.startsWith(b), true); - expect(it.startsWith(b + c), true); - expect(it.startsWith(a + b + c), false); - expect(it.startsWith(b + c + d), false); - expect(it.startsWith(a), false); - - expect(it.endsWith(gc("")), true); - expect(it.endsWith(c), true); - expect(it.endsWith(b + c), true); - expect(it.endsWith(a + b + c), false); - expect(it.endsWith(b + c + d), false); - expect(it.endsWith(d), false); - - it.collapseToFirst(c); - expect(it.isPrecededBy(gc("")), true); - expect(it.isPrecededBy(b), true); - expect(it.isPrecededBy(a + b), true); - expect(it.isPrecededBy(a + b + c), false); - expect(it.isPrecededBy(a), false); - - expect(it.isFollowedBy(gc("")), true); - expect(it.isFollowedBy(d), true); - expect(it.isFollowedBy(d + e), true); - expect(it.isFollowedBy(c + d + e), false); - expect(it.isFollowedBy(e), false); - }); - test("replace methods", () { - // Unicode grapheme breaking character classes, - // represented by their first value. - - var pattern = gc("\t"); // A non-combining entry to be replaced. - var non = gc(""); - - var c = otr + cr + pattern + lf + pic + pattern + zwj + pic + otr; - var r = c.replaceAll(pattern, non); - expect(r, otr + cr + lf + pic + zwj + pic + otr); - var ci = c.iterator..moveNextAll(); - var ri = ci.replaceAll(pattern, non)!; - expect(ri.currentCharacters, otr + cr + lf + pic + zwj + pic + otr); - ci.dropFirst(); - ci.dropLast(); - expect(ci.currentCharacters, cr + pattern + lf + pic + pattern + zwj + pic); - expect(ci.currentCharacters.length, 7); - ri = ci.replaceAll(pattern, non)!; - expect(ri.currentCharacters, cr + lf + pic + zwj + pic); - expect(ri.currentCharacters.length, 2); - ci.dropFirst(); - ci.dropLast(5); - expect(ci.currentCharacters, pattern); - ri = ci.replaceAll(pattern, non)!; - expect(ri.currentCharacters, cr + lf); - ci.moveNext(2); - ci.moveNext(1); - expect(ci.currentCharacters, pattern); - ri = ci.replaceAll(pattern, non)!; - expect(ri.currentCharacters, pic + zwj + pic); - - c = otr + pic + ext + pattern + pic + ext + otr; - expect(c.length, 5); - ci = c.iterator..moveTo(pattern); - expect(ci.currentCharacters, pattern); - ri = ci.replaceAll(pattern, zwj)!; - expect(ri.currentCharacters, pic + ext + zwj + pic + ext); - - c = reg + pattern + reg + reg; - ci = c.iterator..moveTo(pattern); - ri = ci.replaceRange(non); - expect(ri.currentCharacters, reg + reg); - expect(ri.moveNext(), true); - expect(ri.currentCharacters, reg); - }); -} - -/// Sample characters from each breaking algorithm category. -final Characters ctl = gc("\x00"); // Control, NUL. -final Characters cr = gc("\r"); // Carriage Return, CR. -final Characters lf = gc("\n"); // Newline, NL. -final Characters otr = gc(" "); // Other, Space. -final Characters ext = gc("\u0300"); // Extend, Combining Grave Accent. -final Characters spc = gc("\u0903"); // Spacing Mark, Devanagari Sign Visarga. -final Characters pre = gc("\u0600"); // Prepend, Arabic Number Sign. -final Characters zwj = gc("\u200d"); // Zero-Width Joiner. -final Characters pic = gc("\u00a9"); // Extended Pictographic, Copyright. -final Characters reg = gc("\u{1f1e6}"); // Regional Identifier "a". -final Characters hanl = gc("\u1100"); // Hangul L, Choseong Kiyeok. -final Characters hanv = gc("\u1160"); // Hangul V, Jungseong Filler. -final Characters hant = gc("\u11a8"); // Hangul T, Jongseong Kiyeok. -final Characters hanlv = gc("\uac00"); // Hangul LV, Syllable Ga. -final Characters hanlvt = gc("\uac01"); // Hangul LVT, Syllable Gag. From 5c396476c4eb78f55b220e1585e938771a94298a Mon Sep 17 00:00:00 2001 From: Aneesh Rao <66567899+sidrao2006@users.noreply.github.com> Date: Fri, 4 Dec 2020 17:26:33 +0530 Subject: [PATCH 32/82] Fix grammatical error (dart-lang/characters#40) --- pkgs/characters/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 7d75d405..1adaeea0 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -39,7 +39,7 @@ when needing to manipulate the text that a user is viewing, or entering, because string operations are not working at the grapheme cluster level. For example, to abbreviate a text to, say, the 15 first characters or glyphs, -an string like "A 🇬🇧 text in English" +a string like "A 🇬🇧 text in English" should abbreviate to "A 🇬🇧 text in Eng… when counting characters, but will become "A 🇬🇧 text in …" if counting code units using [`String`][String] operations. From 1f7e954decf0ea35568e25e1f1458826ce3faab5 Mon Sep 17 00:00:00 2001 From: Alexander Thomas Date: Tue, 12 Jan 2021 18:10:15 +0100 Subject: [PATCH 33/82] Migrate to GitHub Actions (dart-lang/characters#44) * Migrate to GitHub Actions * Delete .travis.yml * Replace Travis badge * Analyze with `--fatal-infos` * Add branch:master filter to badge link --- .../.github/workflows/test-package.yml | 64 +++++++++++++++++++ pkgs/characters/.travis.yml | 34 ---------- pkgs/characters/README.md | 3 +- 3 files changed, 65 insertions(+), 36 deletions(-) create mode 100644 pkgs/characters/.github/workflows/test-package.yml delete mode 100644 pkgs/characters/.travis.yml diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml new file mode 100644 index 00000000..e55702c2 --- /dev/null +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -0,0 +1,64 @@ +name: Dart CI + +on: + # Run on PRs and pushes to the default branch. + push: + branches: [ master ] + pull_request: + branches: [ master ] + schedule: + - cron: "0 0 * * 0" + +env: + PUB_ENVIRONMENT: bot.github + +jobs: + # Check code formatting and static analysis on a single OS (linux) + # against Dart dev. + analyze: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sdk: [dev] + steps: + - uses: actions/checkout@v2 + - uses: dart-lang/setup-dart@v0.1 + with: + channel: ${{ matrix.sdk }} + - id: install + name: Install dependencies + run: dart pub get + - name: Check formatting + run: dart format --output=none --set-exit-if-changed . + if: always() && steps.install.outcome == 'success' + - name: Analyze code + run: dart analyze --fatal-infos + if: always() && steps.install.outcome == 'success' + + # Run tests on a matrix consisting of two dimensions: + # 1. OS: ubuntu-latest, (macos-latest, windows-latest) + # 2. release channel: dev + test: + needs: analyze + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + # Add macos-latest and/or windows-latest if relevant for this package. + os: [ubuntu-latest] + sdk: [dev] + steps: + - uses: actions/checkout@v2 + - uses: dart-lang/setup-dart@v0.1 + with: + channel: ${{ matrix.sdk }} + - id: install + name: Install dependencies + run: dart pub get + - name: Run VM tests + run: dart test --platform vm + if: always() && steps.install.outcome == 'success' + - name: Run Chrome tests + run: dart test --platform chrome + if: always() && steps.install.outcome == 'success' diff --git a/pkgs/characters/.travis.yml b/pkgs/characters/.travis.yml deleted file mode 100644 index cb4fbf92..00000000 --- a/pkgs/characters/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: dart - -dart: -- dev - -jobs: - include: - - stage: analyze_and_format - name: "Analyze lib/ (no experiment flag)" - os: linux - script: dartanalyzer --fatal-warnings --fatal-infos lib/ - - stage: analyze_and_format - name: "Analyze (with experiment flag)" - os: linux - script: dartanalyzer --enable-experiment=non-nullable --fatal-warnings --fatal-infos . - - stage: analyze_and_format - name: "Format" - os: linux - script: dartfmt -n --set-exit-if-changed . - - stage: test - name: "Vm Tests" - os: linux - script: pub run --enable-experiment=non-nullable test -p vm - - stage: test - name: "Web Tests" - os: linux - script: pub run --enable-experiment=non-nullable test -p chrome - -branches: - only: [master] - -cache: - directories: - - $HOME/.pub-cache diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 1adaeea0..9d37e219 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,6 +1,5 @@ [![pub package](https://img.shields.io/pub/v/characters.svg)](https://pub.dev/packages/characters) -[![Build Status](https://travis-ci.org/dart-lang/characters.svg?branch=master)](https://travis-ci.org/dart-lang/characters) - +[![Build Status](https://github.com/dart-lang/characters/workflows/Dart%20CI/badge.svg)](https://github.com/dart-lang/characters/actions?query=workflow%3A"Dart+CI"+branch%3Amaster) [`Characters`][Characters] are strings viewed as sequences of **user-perceived character**s, From 728d89025f6d07cdbcc83cdf69fb7d7812d276e1 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Tue, 2 Feb 2021 11:38:08 -0800 Subject: [PATCH 34/82] Prepare to publish for stable null safety (dart-lang/characters#45) --- pkgs/characters/CHANGELOG.md | 4 ++++ pkgs/characters/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 8a9af55a..c342d97e 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.0 + +* Stable release for null safety. + ## 1.1.0-nullsafety.5 * Update sdk constraints to `>=2.12.0-0 <3.0.0` based on beta release diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index e568323b..13a33c72 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 1.1.0-nullsafety.5 +version: 1.1.0 description: String replacement with operations that are Unicode/grapheme cluster aware. homepage: https://www.github.com/dart-lang/characters From f1e607622e1d4170122abe4700ae1bbd26d02b43 Mon Sep 17 00:00:00 2001 From: suragch Date: Fri, 12 Mar 2021 22:59:18 +0800 Subject: [PATCH 35/82] fixed typos (whwere -> where) (dart-lang/characters#46) --- pkgs/characters/lib/src/characters.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index 365beac7..bcc70bbf 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -162,7 +162,7 @@ abstract class Characters implements Iterable { /// Eagerly selects a trailing sequence of characters. /// /// Checks each character, from first to last, against [test], - /// until one is found whwere [test] returns `false`. + /// until one is found where [test] returns `false`. /// The characters starting with the first one /// where [test] returns `false`, are included in the result. /// @@ -174,7 +174,7 @@ abstract class Characters implements Iterable { /// Eagerly selects a leading sequence of characters. /// /// Checks each character, from first to last, against [test], - /// until one is found whwere [test] returns `false`. + /// until one is found where [test] returns `false`. /// The characters up to, but not including, the first one /// where [test] returns `false` are included in the result. /// @@ -186,7 +186,7 @@ abstract class Characters implements Iterable { /// Eagerly selects a leading sequence of characters. /// /// Checks each character, from last to first, against [test], - /// until one is found whwere [test] returns `false`. + /// until one is found where [test] returns `false`. /// The characters up to and including the one with the latest index /// where [test] returns `false` are included in the result. /// @@ -197,7 +197,7 @@ abstract class Characters implements Iterable { /// Eagerly selects a trailing sequence of characters. /// /// Checks each character, from last to first, against [test], - /// until one is found whwere [test] returns `false`. + /// until one is found where [test] returns `false`. /// The characters after the one with the latest index where /// [test] returns `false` are included in the result. /// From e574fcd9ccc356c25cb1732045007c90a9b44f97 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Mon, 15 Mar 2021 09:54:10 +0100 Subject: [PATCH 36/82] Cleanup test-package.yml (dart-lang/characters#47) --- .../.github/workflows/test-package.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index e55702c2..02921f3b 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -14,18 +14,18 @@ env: jobs: # Check code formatting and static analysis on a single OS (linux) - # against Dart dev. + # against dev, stable, and 2.12.0 (the package's lower bound). analyze: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - sdk: [dev] + sdk: [dev, stable, 2.12.0] steps: - uses: actions/checkout@v2 - - uses: dart-lang/setup-dart@v0.1 + - uses: dart-lang/setup-dart@v1.0 with: - channel: ${{ matrix.sdk }} + sdk: ${{ matrix.sdk }} - id: install name: Install dependencies run: dart pub get @@ -37,22 +37,21 @@ jobs: if: always() && steps.install.outcome == 'success' # Run tests on a matrix consisting of two dimensions: - # 1. OS: ubuntu-latest, (macos-latest, windows-latest) - # 2. release channel: dev + # 1. OS: ubuntu-latest + # 2. Release channel: dev, stable, and 2.12.0 (the package's lower bound) test: needs: analyze runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - # Add macos-latest and/or windows-latest if relevant for this package. os: [ubuntu-latest] - sdk: [dev] + sdk: [dev, stable, 2.12.0] steps: - uses: actions/checkout@v2 - - uses: dart-lang/setup-dart@v0.1 + - uses: dart-lang/setup-dart@v1.0 with: - channel: ${{ matrix.sdk }} + sdk: ${{ matrix.sdk }} - id: install name: Install dependencies run: dart pub get From 8680354203cf7b54953b82b7704f6c27d596fef8 Mon Sep 17 00:00:00 2001 From: Franklin Yow <58489007+franklinyow@users.noreply.github.com> Date: Mon, 5 Apr 2021 16:26:07 -0700 Subject: [PATCH 37/82] Update LICENSE (dart-lang/characters#49) Changes to comply with internal review --- pkgs/characters/LICENSE | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/LICENSE b/pkgs/characters/LICENSE index f75d7c23..76700076 100644 --- a/pkgs/characters/LICENSE +++ b/pkgs/characters/LICENSE @@ -1,4 +1,5 @@ -Copyright 2019, the Dart project authors. All rights reserved. +Copyright 2019, the Dart project authors. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -9,7 +10,7 @@ met: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. From 7dfb679ff0f3dfe8c649a2471ebeb527f8344af6 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Wed, 5 May 2021 16:52:47 -0700 Subject: [PATCH 38/82] Change pubspec homepage to repository (dart-lang/characters#50) Closes dart-lang/characters#38 We are gradually standardizing on specifying the `repository` key. Other cleanup: - Collapse the null safety prerelease changelogs. - Use a stable SDK constraint. - Use stable dependency constraints. --- pkgs/characters/CHANGELOG.md | 27 ++------------------------- pkgs/characters/pubspec.yaml | 10 +++++----- 2 files changed, 7 insertions(+), 30 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index c342d97e..6bf873e5 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,36 +1,13 @@ +## 1.1.1-dev + ## 1.1.0 * Stable release for null safety. - -## 1.1.0-nullsafety.5 - -* Update sdk constraints to `>=2.12.0-0 <3.0.0` based on beta release - guidelines. - -## 1.1.0-nullsafety.4 - -* Allow the 2.12 dev SDKs. - -## 1.1.0-nullsafety.3 - * Added `stringBeforeLength` and `stringAfterLength` to `CharacterRange`. * Added `CharacterRange.at` constructor. * Added `getRange(start, end)` and `characterAt(pos)` to `Characters` as alternative to `.take(end).skip(start)` and `getRange(pos, pos + 1)`. * Change some positional parameter names from `other` to `characters`. -* Allow the 2.10 stable SDK. - -## 1.1.0-nullsafety.2 - -* Update for the 2.10 dev sdk. - -## 1.1.0-nullsafety.1 - -* Allow the <=2.9.10 stable sdks. - -## 1.1.0-nullsafety - -* Make package null safe. ## 1.0.0 diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 13a33c72..c8706dca 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,11 +1,11 @@ name: characters -version: 1.1.0 +version: 1.1.1-dev description: String replacement with operations that are Unicode/grapheme cluster aware. -homepage: https://www.github.com/dart-lang/characters +repository: https://www.github.com/dart-lang/characters environment: - sdk: ">=2.12.0-0 <3.0.0" + sdk: ">=2.12.0 <3.0.0" dev_dependencies: - test: ^1.16.0-nullsafety - pedantic: ^1.10.0-nullsafety + test: ^1.16.0 + pedantic: ^1.10.0 From dc8565a907e38985278a7f54b5ef0ea2c44886e7 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Mon, 24 May 2021 10:43:44 -0700 Subject: [PATCH 39/82] Fix unneeded imports (dart-lang/characters#52) --- pkgs/characters/test/characters_test.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkgs/characters/test/characters_test.dart b/pkgs/characters/test/characters_test.dart index 03c9adfc..98aa2e2f 100644 --- a/pkgs/characters/test/characters_test.dart +++ b/pkgs/characters/test/characters_test.dart @@ -4,12 +4,10 @@ import "dart:math"; -import "package:test/test.dart"; - import "package:characters/characters.dart"; +import "package:test/test.dart"; import "src/unicode_tests.dart"; -import "src/unicode_grapheme_tests.dart"; import "src/various_tests.dart"; late Random random; From 0ad65dfe27cd07f27dc08a9d234ef0fa818440e2 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Tue, 25 May 2021 14:38:59 +0200 Subject: [PATCH 40/82] Switch to package:lints (dart-lang/characters#53) --- pkgs/characters/CHANGELOG.md | 2 ++ pkgs/characters/analysis_options.yaml | 8 +------- pkgs/characters/lib/src/characters_impl.dart | 15 ++++++++------- pkgs/characters/pubspec.yaml | 2 +- pkgs/characters/test/characters_test.dart | 2 +- 5 files changed, 13 insertions(+), 16 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 6bf873e5..0944a531 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,5 +1,7 @@ ## 1.1.1-dev +* Switched from using lints in package:pedantic to package:lints. + ## 1.1.0 * Stable release for null safety. diff --git a/pkgs/characters/analysis_options.yaml b/pkgs/characters/analysis_options.yaml index dd48aa55..572dd239 100644 --- a/pkgs/characters/analysis_options.yaml +++ b/pkgs/characters/analysis_options.yaml @@ -1,7 +1 @@ -include: package:pedantic/analysis_options.1.9.0.yaml -analyzer: - errors: - prefer_single_quotes: ignore - use_function_type_syntax_for_parameters: ignore - enable-experiment: - - non-nullable +include: package:lints/recommended.yaml diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index c5fddee2..0791ec08 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -116,13 +116,14 @@ class StringCharacters extends Iterable implements Characters { } @override - bool contains(Object? other) { - if (other is String) { - if (other.isEmpty) return false; - var next = Breaks(other, 0, other.length, stateSoTNoBreak).nextBreak(); - if (next != other.length) return false; - // [other] is single grapheme cluster. - return _indexOf(string, other, 0, string.length) >= 0; + bool contains(Object? element) { + if (element is String) { + if (element.isEmpty) return false; + var next = + Breaks(element, 0, element.length, stateSoTNoBreak).nextBreak(); + if (next != element.length) return false; + // [element] is single grapheme cluster. + return _indexOf(string, element, 0, string.length) >= 0; } return false; } diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index c8706dca..0e5a5cf7 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -8,4 +8,4 @@ environment: dev_dependencies: test: ^1.16.0 - pedantic: ^1.10.0 + lints: ^1.0.0 diff --git a/pkgs/characters/test/characters_test.dart b/pkgs/characters/test/characters_test.dart index 98aa2e2f..0b565bc6 100644 --- a/pkgs/characters/test/characters_test.dart +++ b/pkgs/characters/test/characters_test.dart @@ -65,7 +65,7 @@ void main([List? args]) { var zwj = "\u200d"; // U+200D, ZWJ var rainbow = "\u{1f308}"; // U+1F308, Rainbow. Category Pictogram - testParts(gc("$flag$white$zwj$rainbow"), gc("$flag$white"), gc("$rainbow"), + testParts(gc("$flag$white$zwj$rainbow"), gc("$flag$white"), gc(rainbow), gc("$flag$zwj$rainbow"), gc("!")); }); From 49ed146cf75aabb32c88cde9c602106723a097fe Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Tue, 1 Jun 2021 21:01:18 +0200 Subject: [PATCH 41/82] Add `empty` constant. (dart-lang/characters#54) Adds a reusable constant `empty` characters object for people to use, and makes the `Character` constructor return that for the empty string. --- pkgs/characters/CHANGELOG.md | 4 +-- pkgs/characters/lib/src/characters.dart | 8 ++++- pkgs/characters/lib/src/characters_impl.dart | 31 ++++++++++---------- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 0944a531..68aa55b9 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,6 +1,6 @@ -## 1.1.1-dev +## 1.2.0 -* Switched from using lints in package:pedantic to package:lints. +* Adds `Characters.empty` constant and makes `Characters("")` return it. ## 1.1.0 diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index bcc70bbf..b8b79491 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -20,9 +20,15 @@ import "characters_impl.dart"; /// but which also provides ways to select other ranges of characters /// in different ways. abstract class Characters implements Iterable { + /// An empty [Characters] containing no characters. + static const Characters empty = StringCharacters(""); + /// Creates a [Characters] allowing iteration of /// the characters of [string]. - factory Characters(String string) = StringCharacters; + /// + /// Returns [empty] if [string] is empty. + factory Characters(String string) => + string.isEmpty ? empty : StringCharacters(string); /// The string to iterate over. String get string; diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index 0791ec08..389400c0 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -12,9 +12,6 @@ import "grapheme_clusters/breaks.dart"; /// /// Backed by a single string. class StringCharacters extends Iterable implements Characters { - // Try to avoid allocating more empty grapheme clusters. - static const StringCharacters _empty = StringCharacters(""); - @override final String string; @@ -219,7 +216,7 @@ class StringCharacters extends Iterable implements Characters { Characters _skip(int count) { var start = _skipIndices(count, 0, null); - if (start == string.length) return _empty; + if (start == string.length) return Characters.empty; return StringCharacters(string.substring(start)); } @@ -240,12 +237,12 @@ class StringCharacters extends Iterable implements Characters { RangeError.checkNotNegative(start, "start"); if (end == null) return _skip(start); if (end < start) throw RangeError.range(end, start, null, "end"); - if (end == start) return _empty; + if (end == start) return Characters.empty; if (start == 0) return _take(end); if (string.isEmpty) return this; var breaks = Breaks(string, 0, string.length, stateSoTNoBreak); var startIndex = _skipIndices(start, 0, breaks); - if (startIndex == string.length) return _empty; + if (startIndex == string.length) return Characters.empty; var endIndex = _skipIndices(end - start, start, breaks); return StringCharacters(string.substring(startIndex, endIndex)); } @@ -276,13 +273,13 @@ class StringCharacters extends Iterable implements Characters { while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(startIndex, index))) { if (startIndex == 0) return this; - if (startIndex == stringLength) return _empty; + if (startIndex == stringLength) return Characters.empty; return StringCharacters(string.substring(startIndex)); } startIndex = index; } } - return _empty; + return Characters.empty; } @override @@ -293,7 +290,7 @@ class StringCharacters extends Iterable implements Characters { var endIndex = 0; while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(endIndex, index))) { - if (endIndex == 0) return _empty; + if (endIndex == 0) return Characters.empty; return StringCharacters(string.substring(0, endIndex)); } endIndex = index; @@ -305,7 +302,7 @@ class StringCharacters extends Iterable implements Characters { @override Characters where(bool Function(String) test) { var string = super.where(test).join(); - if (string.isEmpty) return _empty; + if (string.isEmpty) return Characters.empty; return StringCharacters(super.where(test).join()); } @@ -326,12 +323,12 @@ class StringCharacters extends Iterable implements Characters { endIndex = index; count--; } else { - return _empty; + return Characters.empty; } } if (endIndex > 0) return StringCharacters(string.substring(0, endIndex)); } - return _empty; + return Characters.empty; } @override @@ -343,18 +340,20 @@ class StringCharacters extends Iterable implements Characters { while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(index, end))) { if (end == string.length) return this; - return end == 0 ? _empty : StringCharacters(string.substring(0, end)); + return end == 0 + ? Characters.empty + : StringCharacters(string.substring(0, end)); } end = index; } } - return _empty; + return Characters.empty; } @override Characters takeLast(int count) { RangeError.checkNotNegative(count, "count"); - if (count == 0) return _empty; + if (count == 0) return Characters.empty; if (string.isNotEmpty) { var breaks = BackBreaks(string, string.length, 0, stateEoTNoBreak); var startIndex = string.length; @@ -382,7 +381,7 @@ class StringCharacters extends Iterable implements Characters { var start = string.length; while ((index = breaks.nextBreak()) >= 0) { if (!test(string.substring(index, start))) { - if (start == string.length) return _empty; + if (start == string.length) return Characters.empty; return StringCharacters(string.substring(start)); } start = index; From 03ce3c24bdf4d688323a0699ebe576e509db12c1 Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Mon, 14 Jun 2021 08:48:09 +0200 Subject: [PATCH 42/82] Change argument type of `contains`. (dart-lang/characters#51) * Change argument type of `contains`. Changes the argument type of `contains` to `String` (covariantly). This only affects the interface, the implementation still accepts `Object?` and can be safely cast to `Iterable`. Documents `contains` better. Co-authored-by: Nate Bosch --- pkgs/characters/CHANGELOG.md | 4 ++++ pkgs/characters/lib/src/characters.dart | 20 ++++++++++++-------- pkgs/characters/lib/src/characters_impl.dart | 20 ++++++++++---------- pkgs/characters/pubspec.yaml | 2 +- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 68aa55b9..194b5cc3 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,6 +1,10 @@ ## 1.2.0 * Adds `Characters.empty` constant and makes `Characters("")` return it. +* Changes the argument type of `Characters.contains` to (covariant) `String`. + The implementation still accepts `Object?`, so it can be cast to + `Iterable`, but you get warned if you try to call directly with a + non-`String`. ## 1.1.0 diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index b8b79491..a0206741 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -54,15 +54,19 @@ abstract class Characters implements Iterable { /// as well as controlling the iteration in more detail. CharacterRange get iteratorAtEnd; - /// Whether [other] is an element of this sequence of - /// others. - /// - /// Returns false if [other] is not a string containing - /// a single character, - /// because then it is not a single element of this [Iterable] - /// of characters. + /// Whether [singleCharacterString] occurs in this + /// sequence of characters. + /// + /// Returns true only if [singleCharacterString] is + /// a string containing a *single* character + /// and that character is one of the characters + /// in this character sequence, and false otherwise. + /// This behavior is inherited from `Iterable`, + /// which is why it is not [Character] based. + /// Use [containsAll] for a method which acts like + /// [String.contains] for characters. @override - bool contains(Object? other); + bool contains(covariant String singleCharacterString); /// Whether this sequence of characters contains [other] /// as a subsequence. diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index 389400c0..63140c86 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -113,16 +113,16 @@ class StringCharacters extends Iterable implements Characters { } @override - bool contains(Object? element) { - if (element is String) { - if (element.isEmpty) return false; - var next = - Breaks(element, 0, element.length, stateSoTNoBreak).nextBreak(); - if (next != element.length) return false; - // [element] is single grapheme cluster. - return _indexOf(string, element, 0, string.length) >= 0; - } - return false; + // ignore: avoid_renaming_method_parameters + bool contains(Object? singleCharacterString) { + if (singleCharacterString is! String) return false; + if (singleCharacterString.isEmpty) return false; + var next = Breaks(singleCharacterString, 0, singleCharacterString.length, + stateSoTNoBreak) + .nextBreak(); + if (next != singleCharacterString.length) return false; + // [singleCharacterString] is single grapheme cluster. + return _indexOf(string, singleCharacterString, 0, string.length) >= 0; } @override diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 0e5a5cf7..065c191b 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 1.1.1-dev +version: 1.2.0 description: String replacement with operations that are Unicode/grapheme cluster aware. repository: https://www.github.com/dart-lang/characters From 845463bdd7adb1784f375d6197b542c32b3d47b0 Mon Sep 17 00:00:00 2001 From: Harshvardhan Joshi Date: Mon, 14 Jun 2021 12:25:28 +0530 Subject: [PATCH 43/82] Fix method syntax in ReadMe example code (dart-lang/characters#55) The method was declared with an expression body but it ended with a `}` --- pkgs/characters/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 9d37e219..c0c12ad1 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -104,7 +104,7 @@ String firstTagString(String source) { } // Using CharacterRange operations. -Characters firstTagCharacters(Characters source) => +Characters firstTagCharacters(Characters source) { var range = source.findFirst("<".characters); if (range != null && range.moveUntil(">".characters)) { return range.currentCharacters; From 96731caeb82007a8bc2673a47c98e72c87f0bf35 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Mon, 12 Jul 2021 15:03:06 -0700 Subject: [PATCH 44/82] Dart format with latest SDK (dart-lang/characters#56) * Dart format with latest SDK * only check format on dev sdk --- pkgs/characters/.github/workflows/test-package.yml | 2 +- pkgs/characters/lib/src/characters_impl.dart | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 02921f3b..f9a4bb33 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -31,7 +31,7 @@ jobs: run: dart pub get - name: Check formatting run: dart format --output=none --set-exit-if-changed . - if: always() && steps.install.outcome == 'success' + if: matrix.sdk == 'dev' && steps.install.outcome == 'success' - name: Analyze code run: dart analyze --fatal-infos if: always() && steps.install.outcome == 'success' diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index 63140c86..a87aa687 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -1022,11 +1022,15 @@ String _explodeReplace(String string, int start, int end, var index = 0; var replacement = outerReplacement; while ((index = breaks.nextBreak()) >= 0) { - buffer..write(replacement)..write(string.substring(start, index)); + buffer + ..write(replacement) + ..write(string.substring(start, index)); start = index; replacement = internalReplacement; } - buffer..write(outerReplacement)..write(string.substring(end)); + buffer + ..write(outerReplacement) + ..write(string.substring(end)); return buffer.toString(); } From 1de1edd626430211772e11ca5a1ec0c2e020edaa Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Fri, 6 Aug 2021 11:24:00 +0200 Subject: [PATCH 45/82] Don't duplicate work in `where`. (dart-lang/characters#58) * Don't duplicate work in `where`. Fixes dart-lang/characters#57 --- pkgs/characters/CHANGELOG.md | 4 ++++ pkgs/characters/README.md | 2 +- pkgs/characters/lib/src/characters_impl.dart | 2 +- pkgs/characters/pubspec.yaml | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 194b5cc3..4aa15dc5 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.1 + +* Fix `Characters.where` which unnecessarily did the iteration and test twice. + ## 1.2.0 * Adds `Characters.empty` constant and makes `Characters("")` return it. diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index c0c12ad1..34340dbd 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -123,7 +123,7 @@ Characters firstTagCharacters(Characters source) { [Characters]: https://pub.dev/documentation/characters/latest/characters/Characters-class.html "Characters class" [Code Points]: https://unicode.org/glossary/#code_point "Unicode Code Point" [Code Units]: https://unicode.org/glossary/#code_unit "Unicode Code Units" -[Glyphs]: http://unicode.org/glossary/#glyph "Unicode Glyphs" +[Glyphs]: https://unicode.org/glossary/#glyph "Unicode Glyphs" [Grapheme Clusters]: https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries "Unicode (Extended) Grapheme Cluster" [Iterable]: https://api.dart.dev/stable/2.0.0/dart-core/Iterable-class.html "Iterable class" [Runes]: https://api.dart.dev/stable/2.0.0/dart-core/Runes-class.html "Runes class" diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index a87aa687..ebd8434d 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -303,7 +303,7 @@ class StringCharacters extends Iterable implements Characters { Characters where(bool Function(String) test) { var string = super.where(test).join(); if (string.isEmpty) return Characters.empty; - return StringCharacters(super.where(test).join()); + return StringCharacters(string); } @override diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 065c191b..90d1ca07 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 1.2.0 +version: 1.2.1 description: String replacement with operations that are Unicode/grapheme cluster aware. repository: https://www.github.com/dart-lang/characters From 95e5e93fc9a05c32ebca4d3701e6604dc0b73132 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Mon, 13 Sep 2021 14:45:10 +0200 Subject: [PATCH 46/82] Add copyright header (dart-lang/characters#60) --- pkgs/characters/example/main.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/characters/example/main.dart b/pkgs/characters/example/main.dart index 46ba94bd..b9d5bedd 100644 --- a/pkgs/characters/example/main.dart +++ b/pkgs/characters/example/main.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + import 'package:characters/characters.dart'; // Small API examples. For full API docs see: From b7693732b230e1e627c2c23e653ef2d0c5389c13 Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Mon, 13 Sep 2021 14:45:21 +0200 Subject: [PATCH 47/82] Make the version be 1.2.0. (dart-lang/characters#59) We haven't released 1.2.0 yet, so making it 1.2.1 is unnecessary. --- pkgs/characters/CHANGELOG.md | 5 +---- pkgs/characters/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 4aa15dc5..cb264be8 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,9 +1,6 @@ -## 1.2.1 - -* Fix `Characters.where` which unnecessarily did the iteration and test twice. - ## 1.2.0 +* Fix `Characters.where` which unnecessarily did the iteration and test twice. * Adds `Characters.empty` constant and makes `Characters("")` return it. * Changes the argument type of `Characters.contains` to (covariant) `String`. The implementation still accepts `Object?`, so it can be cast to diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 90d1ca07..065c191b 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 1.2.1 +version: 1.2.0 description: String replacement with operations that are Unicode/grapheme cluster aware. repository: https://www.github.com/dart-lang/characters From 8d7c19ce612025e0d57f95292a8efc77af251386 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Tue, 26 Apr 2022 08:23:48 -0700 Subject: [PATCH 48/82] Update pubspec.yaml (dart-lang/characters#64) - update the pubspec value for the repository field --- pkgs/characters/CHANGELOG.md | 4 ++++ pkgs/characters/pubspec.yaml | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index cb264be8..1e9e0a43 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.1-dev + +* Update the value of the pubspec `repository` field. + ## 1.2.0 * Fix `Characters.where` which unnecessarily did the iteration and test twice. diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 065c191b..977e4a75 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,11 +1,11 @@ name: characters -version: 1.2.0 +version: 1.2.1-dev description: String replacement with operations that are Unicode/grapheme cluster aware. -repository: https://www.github.com/dart-lang/characters +repository: https://github.com/dart-lang/characters environment: sdk: ">=2.12.0 <3.0.0" dev_dependencies: - test: ^1.16.0 lints: ^1.0.0 + test: ^1.16.0 From 5232969dbf29d0eebe448af05ebcc54d0e75ced6 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Wed, 4 May 2022 09:46:46 -0700 Subject: [PATCH 49/82] prep to publish 1.2.1 (dart-lang/characters#65) --- pkgs/characters/CHANGELOG.md | 2 +- pkgs/characters/README.md | 3 ++- pkgs/characters/pubspec.yaml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 1e9e0a43..a6dd1f4c 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.2.1-dev +## 1.2.1 * Update the value of the pubspec `repository` field. diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 34340dbd..e3bef5ca 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,5 +1,6 @@ -[![pub package](https://img.shields.io/pub/v/characters.svg)](https://pub.dev/packages/characters) [![Build Status](https://github.com/dart-lang/characters/workflows/Dart%20CI/badge.svg)](https://github.com/dart-lang/characters/actions?query=workflow%3A"Dart+CI"+branch%3Amaster) +[![pub package](https://img.shields.io/pub/v/characters.svg)](https://pub.dev/packages/characters) +[![package publisher](https://img.shields.io/pub/publisher/characters.svg)](https://pub.dev/packages/characters/publisher) [`Characters`][Characters] are strings viewed as sequences of **user-perceived character**s, diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 977e4a75..a1bb3335 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,5 +1,5 @@ name: characters -version: 1.2.1-dev +version: 1.2.1 description: String replacement with operations that are Unicode/grapheme cluster aware. repository: https://github.com/dart-lang/characters From f5023bd21f78fc97f5f342edeb69cce76cd4afdb Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 9 Nov 2022 15:30:32 -0800 Subject: [PATCH 50/82] blast_repo fixes (dart-lang/characters#68) Dependabot GitHub Action --- pkgs/characters/.github/dependabot.yml | 9 +++++++++ pkgs/characters/.github/workflows/test-package.yml | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 pkgs/characters/.github/dependabot.yml diff --git a/pkgs/characters/.github/dependabot.yml b/pkgs/characters/.github/dependabot.yml new file mode 100644 index 00000000..1603cdd9 --- /dev/null +++ b/pkgs/characters/.github/dependabot.yml @@ -0,0 +1,9 @@ +# Dependabot configuration file. +# See https://docs.github.com/en/code-security/dependabot/dependabot-version-updates +version: 2 + +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index f9a4bb33..b66fbd9c 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,8 +22,8 @@ jobs: matrix: sdk: [dev, stable, 2.12.0] steps: - - uses: actions/checkout@v2 - - uses: dart-lang/setup-dart@v1.0 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d with: sdk: ${{ matrix.sdk }} - id: install @@ -48,8 +48,8 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.12.0] steps: - - uses: actions/checkout@v2 - - uses: dart-lang/setup-dart@v1.0 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d with: sdk: ${{ matrix.sdk }} - id: install From 39fb9b9ce868ad2ade2617c45f475445cfffe0d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Jan 2023 09:27:39 -0800 Subject: [PATCH 51/82] Bump actions/checkout from 3.1.0 to 3.2.0 (dart-lang/characters#69) Bumps [actions/checkout](https://github.com/actions/checkout) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8...755da8c3cf115ac066823e79a1e1788f8940201b) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index b66fbd9c..5bcf6860 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.12.0] steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.12.0] steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d with: sdk: ${{ matrix.sdk }} From 78dde51c5a038ca45cfb95ca720a1dfd76f0befd Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Mon, 30 Jan 2023 12:37:29 +0100 Subject: [PATCH 52/82] Update tables to Unicode 15.0. (dart-lang/characters#71) * Update tables to Unicode 15.0. --- pkgs/characters/CHANGELOG.md | 4 + pkgs/characters/benchmark/benchmark.dart | 35 +- .../lib/src/grapheme_clusters/table.dart | 656 +- pkgs/characters/pubspec.yaml | 4 +- .../test/src/unicode_grapheme_tests.dart | 4117 +++++--- .../GraphemeBreakProperty.txt | 2904 +++--- .../Unicode_Consortium/GraphemeBreakTest.txt | 1260 +-- .../Unicode_Consortium/UNICODE_LICENSE.txt | 17 +- .../Unicode_Consortium/emoji_data.txt | 2089 ++-- .../Unicode_Consortium/emoji_test.txt | 8817 ++++++++++------- 10 files changed, 11562 insertions(+), 8341 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index a6dd1f4c..c42f1bcb 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.0 + +* Updated to use Unicode 15.0.0. + ## 1.2.1 * Update the value of the pubspec `repository` field. diff --git a/pkgs/characters/benchmark/benchmark.dart b/pkgs/characters/benchmark/benchmark.dart index 7862564e..3d5dc29d 100644 --- a/pkgs/characters/benchmark/benchmark.dart +++ b/pkgs/characters/benchmark/benchmark.dart @@ -94,14 +94,41 @@ void main(List args) { bench(reverseStrings, 250); bench(replaceStrings, 250); + double bestIterateIndices = 0; + double bestIterateStrings = 0; + double bestReverseStrings = 0; + double bestReplaceStrings = 0; + + String toDigits(double d) { + const n = 5; + var s = d.round().toString(); + if (s.length >= n) return s; + return d.toStringAsFixed(n - s.length); + } + for (var i = 0; i < count; i++) { var performance = bench(iterateIndicesOnly, 2000); - print("Index Iteration: $performance gc/ms"); + print("Index Iteration: ${toDigits(performance)} gc/ms"); + if (performance > bestIterateIndices) bestIterateIndices = performance; + performance = bench(iterateStrings, 2000); - print("String Iteration: $performance cu/ms"); + print("String Iteration: ${toDigits(performance)} cu/ms"); + if (performance > bestIterateStrings) bestIterateStrings = performance; + performance = bench(reverseStrings, 2000); - print("String Reversing: $performance cu/ms"); + print("String Reversing: ${toDigits(performance)} cu/ms"); + if (performance > bestReverseStrings) bestReverseStrings = performance; + performance = bench(replaceStrings, 2000); - print("String Replacing: $performance changes/ms"); + print("String Replacing: ${toDigits(performance)} changes/ms"); + if (performance > bestReplaceStrings) bestReplaceStrings = performance; + } + + if (count > 1) { + print("Best: "); + print("Index Iteration: ${toDigits(bestIterateIndices)} gc/ms"); + print("String Iteration: ${toDigits(bestIterateStrings)} cu/ms"); + print("String Reversing: ${toDigits(bestReverseStrings)} cu/ms"); + print("String Replacing: ${toDigits(bestReplaceStrings)} changes/ms"); } } diff --git a/pkgs/characters/lib/src/grapheme_clusters/table.dart b/pkgs/characters/lib/src/grapheme_clusters/table.dart index c9d38210..fccec47d 100644 --- a/pkgs/characters/lib/src/grapheme_clusters/table.dart +++ b/pkgs/characters/lib/src/grapheme_clusters/table.dart @@ -3,319 +3,384 @@ // BSD-style license that can be found in the LICENSE file. // Generated code. Do not edit. -// Generated from https://www.unicode.org/Public/12.0.0/ucd/auxiliary/GraphemeBreakProperty.txt -// and https://unicode.org/Public/emoji/12.0/emoji-data.txt. +// Generated from [https://unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakProperty.txt](../../third_party/Unicode_Consortium/GraphemeBreakProperty.txt) +// and [https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt](../../third_party/Unicode_Consortium/emoji_data.txt). // Licensed under the Unicode Inc. License Agreement -// (../../../third_party/Unicode_Consortium/UNICODE_LICENSE.txt, -// http://www.unicode.org/copyright.html#License) +// (https://www.unicode.org/license.txt, ../../third_party/third_party/Unicode_Consortium/UNICODE_LICENSE.txt) -const String _data = '""""""""""""""""DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' - 'DDDDDDD""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""DDD' - 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' - 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"""""""""""""""""""""""""""""""' - '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' - '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' - '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' - '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' - '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' - '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' - '"""""""""""""""""""""""""""""""""""""3333s3#7333333339433333333333333CDDDD' - 'DDDDDDDDDDDDDDDDDDC433DDDDD4DDDDDDDDDDDDDDDDDD3CU3333333333333333333333333' - '3334T5333333333333333333333333333CCD3D33CD533333333333333333333333TEDTET53' - 'U5UE3333C33333333333333333333333333333CETUTDT5333333333333333333333333SUUU' - 'UUEUDDDDD43333433333333333333333333ET533E3333SDD3U3U4333343333C43333333333' - '33CSD33343333333433333333333333333SUUUEDDDTE4333SDDSUSU\x94333343333C43333' - '333333333333s333333333337333333333333wwwww73sw33sww7swwwwwss33373733s33333' - 'w33333£ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªº»»»»»»»»»»»»»»»»»»»ËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ' - 'ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌìîÞîîîîîîîîîîîîîÞîîîîîîîîîîîîîÞîîîîîîîîîîîîî>33333³»»»»»»»' - ';3ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ334343C33333333333SET333333333333333EDTETD43333' - '3333CD33333333333333CD33333CDD4333333333333333333333333CDTDDDCTE43C4CD3C33' - '3333333333333D3C33333\x99\x99\x9933333DDDDD42333333333333333333CDDD4333333' - '333333333333333333DDDD433334333C53333333333333333333333C33TEDCSUUU43333333' - '3S533333333333333333333333333333CD4DDDDD3D5333333333333333333333333333CSEU' - 'CUSE4333D33333C43333333333333CDDD9DDD3DCD433333333CDCDDDDDDEDDD33433C3E433' - '#""""\x82" """"""""2333333333333333CDUUDU53SEUUUD43SDD3U3U4333C43333C43333' - '333333333SE43CD33333333DD33333CDDDDDDDDDD3333333343333333B!233333333333#""' - '"333333s3CD533333333333333333333333333CESEU3333333333333333333DDDD433333CD' - '2333333333333333333333333""""233333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333CDD33333333333333333333333333333CDDD333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333SUDDDDUDT43333333333343333333333333333333333333333333333333333T' - 'EDDTTEETD33333333333333333333333333333333333333333333333333333333333333333' - '3333333333333333333333333333333333333333333333333333CUDD3UUDE4333333333333' - '3D33333333333333333333333333333333333333333UEDDDTEE43333333333333333333333' - '333333333333333333333333333333CEUDDDE3333333333333333333333333333333333333' - '3333333333333CDUDDEDD33333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333D#"233333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' +const String _data = 'E533333333333333333333333333DDDDDDD4333333333333333333334' + 'C43333CD53333333333333333333333UEDTE4\x933343333\x933333333333333333333333' + '333D433333333333333333CDDEDDD43333333S5333333333333333333333C333333D533333' + '333333333333333333SUDDDDT5\x9933CD4E333333333333333333333333UEDDDDE4333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' - '333333333333333333333333333333333333333333CSUUUUUUUUUUUUUUUUUUUUUUUUUUU333' - 'CD4333333333333333333333333333333333333333333333333333333""""""33EDDCTSE33' - '33333333D33333333333DDDDDDD\x94DDDDDDDDDDDDDDDDDDDDDDDDDDDDDCDDDDDDDD3DDD4' - 'DCDD3333333333333333333333333333333333333333333333333333333333333333333333' - '333333333333333333333333333333333333333333333333333333333333CDDD3333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '333333333333333333333333333333333333333333333333333333333333CD433333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '3333333333333333333333333333333333333CDDDDD3333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333s73333s33333333333' - '""""""""3333333373s333333333333333333333333333333CTDDDTU5D4DD333C433333D33' - '333333333333DU433333333333333333333DDDUDUD3333S333333333333333333433333333' - '3333s733333s33333333333CD4DDDD4D4DD4333333333sww73333333w3333333333sw3333s' - '33333337333333sw333333333s733333333333333333UTEUS433333333C433333333333333' - 'C433333333333334443SUE4333333333333CDDDDDDDD4333333DDDDDT533333£ªªªªªªªªªª' - 'ªªªª3SDDDDUUT5DDD43333C43333333333333333C33333333333EEDDDCC3DDDDUUUDDDDD3T' - '5333333333333333333333333333CSDDD433E533333333333333333333333333DDDDDDD433' - '3333333333333333333333333CD53333333333333333333333UEDTE4\x933333333\x93333' - '3333333333333333333333D433333333333333333CDDEDDD43333333S53333333333333333' - '33333C333333D533333333333333333333333SUDDDDT5\x9933CD433333333333333333333' - '333333333333333333333333333UEDUTD33343333333333333333333333333333333333333' - '333333333333333333333333333333333333333333CUEDDD43333333333DU3333333333333' - '33333333333333C4TTU5S5SU3333C33333U3DDD43DD4333333333333333333333333333333' - '333333333333333333333333333333333333333DDDDDDD533333333333333333333333DDDT' - 'TU43333333333333333333333333333DDD733333s373ss33w7733333ww733333333333ss33' - '333333333333333333333333333ww3333333333333333333333333333wwww33333www33333' - '333333333333333wwww333333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'w333333wwwwwwwwwwwwwwwwwwwwwww7wwwwwswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + '333333333333333333333333333333333333333333TUUS5CT\x94\x95E3333333333333333' + '333333333333333333333333333333333333333333333333333333SUDD3DUU435333333333' + '33333333C3333333333333w733337333333s3333333w7333333333w3333333333333333333' + '3CDDTETE43333ED4S5SE3333C33333D33333333333334E433C3333333C3333333333333333' + '3333333333333CETUTDT533333CDDDDDDDDDD3333333343333333D\x244333333333333333' + '33333333SUDTEE433C34333333333333333333333333333333333333333333333333333333' + '333333333333333333333333TUDDDD3333333333CT5333333333333333333333333333DCEU' + 'U3U3U5333343333S5CDDD3CDD3333333333333333333333333333333333333333333333333' + '33333333333333333333s73333s33333333333""""""""333333339433333333333333CDDD' + 'DDDDDDDDDDDDD3333333CDDDDDDDDDDD\x94DDDDDDDDDDDDDDDDDDDDDDDD33333333DDDDDD' + 'DD3333333373s333333333333333333333333333333CDTDDDCTE43C4CD3C33333333333333' + '3D3C33333îîíîîîîîîîîîîîîîíîîîîîîîîîîîîîíîîîîîîîîîîîîî333333»»»»»»»»33ÌÌÌÌÌ' + 'ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ<3sww73333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww7333swwwwww' 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwwwwwwwwwwwwww7333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwww733333333333333333333333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww733333333333333333333333333333333333333333' - '3333333333333333swwwww7333333333333333333333333333333333333333333wwwwwwwww' - 'wwwwwwwwwwww7wwwwwwswwwwwwwwwwwwwwwwwwwww73333swwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwwwwwwwwwww7333333w7333333333333333733333333333333333333333' - '333333sww733333s7333333s3wwwww333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwgffffff' - 'ffffff6wwwwwww73333s33333333337swwwwsw73333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww7333333w7333333333333333733' + '333333333333333333333333333sww733333s7333333s3wwwww333333333wwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwgffffffffffffvww7wwwwwwswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'www733333333333333333333333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwww733333333333333333333333333333333333333333333333333333333' + '3swwwww7333333333333333333333333333333333333333333wwwwwwwwwwwwwwwwwwwww7sw' + 'wwwwss33373733s33333w33333CT333333333333333EDTETD433333333#\x14"3333333333' + '33"""233333373ED4U5UE9333C33333D33333333333333www3333333s73333333333EEDDDC' + 'C3DDDDUUUDDDDD3T5333333333333333333333333333CCU333333333333333333333333333' + '3334EDDD33SDD4D5U4333333333C43333333333CDDD9DDD3DCD433333333C4333333333333' + '33C433333333333334443SEUCUSE4333D33333C43333333533333CU3333333333333333333' + '3333333334EDDDD3CDDDDDDDDDDDDDDDDDDDDDDDDDDD33DDDDDDDDDDDDDDDDDDDDDDDDD333' + '34333333C33333333333DD4DDDDDDD43333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333CSUUUUUUUUUUUUUUUUUUUUUU' + 'UUUUU333CD43333333333333333333333333333333333333333433333U3333333333333333' + '333333333UUUUUUTEDDDDD3333C3333333333333333373333333333s333333333333swwwww' + '33w733wwwwwww73333s33333333337swwwwsw73333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' - 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDDDDDDDDDDDDDDDDDDDDDDDD33333333DDDD' - 'DDDD33333333DDDDDDDDDDDDDDDD43333333DC44333333333333333333333333333SUDDDDT' - 'D3333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333UED4CTUE3S33333333' - '333333DDDDD33333333333333333333DDD\x95DD333343333DDDUD43333333333333333333' - '\x93\x99\x99IDDDDDDE433333333333333333333333333333333333333333333333333333' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDD4D33CDDDDDCDDDDDDDDDDDDDDDDD43EDDDT' + 'UEUCDDD33333D33333333333333DDCDDDDCDCDD333333333DT33333333333333D533333333' + '3333333333333333333CSUE4333333333333CDDDDDDDD4333333DT33333333333333333333' + '333CUDDUDU3SUSU43333433333333333333333333ET533E3333SDD3U3U4333D43333C43333' + '333333333s733333s33333333333CTE333333333333333333UUUUDDDDUD3333"""""(\x02"' + '""""""""3333333333333333333DDDD333333333333333333333333CDDDD3333C3333T3333' + '33333333333333333334343C33333333333SET334333333333DDDDDDDDDDDDDDDDDDDDDD4D' + 'DDDDDDD4CDDDC4DD43333333333333333333333333333333333333333333333333C3333333' + '3333333333333333333333333333333333333333333333333333333333333333333333333D' + 'DD433333333333333333333333333333333333333333333333333333333333333333333333' + '333333333333333333333333333334333333333333333333333333333333DD333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333333333333333DD4333333333333333333333' + '33333333DDD433333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333333333333333333DDDDDDD533333333333333333333333DDDTT' + 'U5D4DD333C433333D333333333333333333333DDD733333s373ss33w7733333ww733333333' + '333ss33333333333333333333333333333ww3333333333333333333333333333wwww33333w' + 'ww33333333333333333333wwww333333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwww333333wwwwwwwwwwwwwwwwwwwwwww7wwwwwswwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww' + 'wwwwwwwwwwwwwwwwwwwwwww733333333333333333333333333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' - '333333333333333333333333333333333333333333333333333333CDDDDDDDDDDDDDDDDDDD' - 'DDDDDDDD33DDDDDDDDDDDDDDDDDDDDDDDDD33334333333C33333333333DD4DDDDDDD433333' - '33333333333333333333333333333333333333333333333333333333333333333333333333' + '333C4""3333333333333333333333333333333333333333333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' - '3333333333333333333333333TD43EDD""""DDDD3DDD433333333333333CD4333333333333' - '3333333333333333333333333333333333333333333333333333333333333CD33333333333' + '333333333333333333333333333333333DD333333333333333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' + '33333333333333333333333DDD433333333333333333333333333333333333333333333333' + '3333333DDD4333333333333333333333333333333333333333333333333333333333333333' + '333333333333333333333333333UEDDDTEE433333333333333333333333333333333333333' + '33333333333333CEUDDDE33333333333333333333333333333333333333333333333333CD3' + 'DDEDD333333333333333333333333333333333333333333333333333333333333333333333' + '3333333333333333333333333333333333333EDDDCDDT43333333333333333333333333333' + '333333333333CDDDDDDDDDD4EDDDETD3333333333333333333333333333333333333333333' + '333333333333333333DDD3CC4DDD\x94433333333333333333333333333333333SUUC4UT43' + '33333333333333333333333333333333333333333333333333#"""""""B333DDDDDDD43333' '33333333333333333333333333333333333333333333333333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' - '333333333333333333333C3333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333334333333333333' - '33333333333333333333333333333333333333333333333333333333333333DD4333333333' - '333333333333333333333333333333333333333333333333333333333EDDDCDDT433333333' - '33333333333333333333333333333333CDDDDDDDDDD4EDDDETD33333333333333333333333' - '33333333333333333333333333333333333333DDD3CC4DDD\x944333333333333333333333' - '33333333333SUUC4UT43333333333333333333333333333333333333333333333333333333' + '333333333333333333333333333333333333333333333333333333333333CED3SDD\x24"""' + 'BDDD4CDDD333333333333333DD33333333333333333333333333333333333333333DEDDDUE' + '333333333333333333333333333CCD3D33CD533333333333333333333333333CESEU333333' + '3333333333333DDDD433333CU33333333333333333333333333334DC443333333333333333' + '33333333333CD4DDDDD33333333333333333333DDD\x95DD333343333DDDUD433333333333' + '33333333\x93\x99\x99IDDDDDDE4333333333333333333333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333DU3333333333333333333333333333' + '33333333333333333333333333333333333333333333333333333333333CDDDDDDDDDDDDDD' + 'DDDDDDDD4CDDDDDDDDDDD33333333333333333333333333333333333333333333333333333' + '333333333333333333333333333333333333333CD333333333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' - '333333333333333333333333333333CDDD3333333333333333333333333333333333333333' - '33333333333333CDDD33333333333333333333333333333333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' + '34333333333333333333333333333333333333333333333333333333333333333333333333' + '33DD4333333333333333333333333333333333333333333333333333333333333333333"""' + '"""33D4D33CD43333333333333333333CD3343333333333333333333333333333333333333' + '333333333333333333333333333333333333333333333D3333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333333333333333333333333333333333333333333333CDC433' - 'DD33333333333333333333D43C333333333333333333333333333333333333333333333333' - '3333333333333333333333333333333333C433333333333333333333333333333333333333' + '33333333333333333333333333333333333333CT53333DY333333333333333333333333UDD' + '43UT4333333333333333333333333333333333333333333333333333333333333333333333' + '3333333333333333333333333D3333333333333333333333333333333333333333D4333333' + '3333333333333333333333333333CDDDDD333333333333333333333333CD43333333333333' + '33333333333333333333333333333333333333333333333SUDDDDUDT433333333333433333' + '33333333333333333333333333333333333TEDDTTEETD33333333333333333333333333333' '33333333333333333333333333333333333333333333333333333333333333333333333333' - '33333333333333333333333333334EDDDD3\x03'; -const String _start = '\u0e3b\u1cdb\u05d0\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b \u389c\u102b\u102b\u102b\u102b\u489c\u102b\u102b\u102b' - '\u0620\u392b\u0c26\u0efa\u102b\u0dcb\u0601\u3e7e\u228f\u0c77\u24d3\u40b2' - '\u102b\u1d51\u0f6f\u2681\u0698\u0851\u0d63\u0be6\u0d63\u1d2a\u06d5\u0e9b' - '\u0771\u075c\u2b98\u23fe\u2707\u0da1\u2a52\u08eb\u0d13\u0ce3\u2712\u0c62' - '\u4d9d\u0b97\u25cb\u2b21\u0659\u42c5\u0baa\u0ec5\u088d\u102b\u09b9\u09d9' - '\u09f9\u0a21\u102b\u102b\u102b\u102b\u102b\u40ae\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u0b5f\u25b1' - '\u23c1\u07f5\u0fe2\u102b\u269e\u102b\u0e5b\u102b\u102b\u102b\u2427\u26c9' - '\u275a\u102b\u2b5c\u0fad\u0b31\u0789\u08ab\u102b\u102b\u0dfb\u102b\u102b' - '\u102b\u1d74\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u0f2f\u2372' - '\u102b\u38ec\u090f\u102b\u2501\u102b\u102b\u102b\u102b\u102b\u24a9\u102b' - '\u35c8\u0939\u102b\u102b\u102b\u23b5\u102b\u102b\u2345\u2c27\u3457\u2d9d' - '\u3491\u2d9d\u0979\u2be5\u252c\u102b\u102b\u102b\u102b\u102b\u233b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u2566\u23a2\u102b\u102b\u102b\u102b' - '\u102b\u409c\u102b\u428c\u102b\u3db9\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u2bac\u102b\u16c9\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u2c0e\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u0d24\u4c95\u4c83\u102b\u102b' - '\u102b\u102b\u0b0c\u102b\u07bb\u2609\u0c43\u2641\u071f\u2483\u2443\u0cb1' - '\u06e1\u0811\u102b\u102b\u102b\u2583\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71' - '\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61' - '\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d' - '\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79' - '\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69' - '\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75' - '\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65' - '\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71' - '\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61' - '\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d' - '\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79' - '\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69' - '\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75' - '\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65' - '\u0a6d\u0a75\u0a61\u0a69\u0a71\u0a79\u0a65\u0a6d\u0a75\u0a61\u0a69\u0a71' - '\u0a95\u0ace\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0' - '\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0' - '\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u01f0\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u42ad\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u38bc\u102b' - '\u102b\u1cdb\u102b\u102b\u4c95\u1cea\u40ce\u102b\u49ce\u1f6f\u2752\u1506' - '\u393f\u449f\u102b\u102b\u102b\u102b\u102b\u0ff2\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u113b\u191a\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u1869\u102b\u102b\u102b\u102b\u3e89\u102b' - '\u3bd9\u102b\u1da7\u102b\u47cf\u102b\u34a1\u305d\u2c56\u2d9d\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\x00\u01f0' - '\u01f0\u01f0\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b' - '\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b\u102b'; + '33333333333333CUDD3UUDE43333333333333D3333333333333333343333333333SE43CD33' + '333333DD33333C33TEDCSUUU433333333S533333CDDDDDU333333ªªªªªªªªªªªªªª:3\x99' + '\x99\x9933333DDDDD4233333333333333333UTEUS433333333CDCDDDDDDEDDD33433C3E43' + '3#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '"""""""""""""""""""""""""""""""""""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' + 'DDDDDDDDD\x24"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' + '""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD' + 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\x24"""""""""""""""2333373' + 'r33333333\x93933CDDD4333333333333333CDUUDU53SEUUUD43£ªªªªªªªªªªªªªªªªªªªªª' + 'ªªªªªªªªªªº»»»»»»»»»»»»»»»»»»»ËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ\f'; +const String _start = '\u1ac4\u2bb8\u411f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u3f4f\u0814\u32b6\u32b6\u32b6\u32b6\u1f81\u32b6\u32b6' + '\u32b6\u1bbb\u2f6f\u3cc2\u051e\u32b6\u11d3\u079b\u2c12\u3967\u1b18\u18aa' + '\u392b\u414f\u07f1\u2eb5\u1880\u1123\u047a\u1909\u08c6\u1909\u11af\u2f32' + '\u1a19\u04d1\u19c3\u2e6b\u209a\u1298\u1259\u0667\u108e\u1160\u3c49\u116f' + '\u1b03\u12a3\u1f7c\u121b\u2023\u1840\u34b0\u088a\u3c13\u04b6\u32b6\u41af' + '\u41cf\u41ef\u4217\u32b6\u32b6\u32b6\u32b6\u32b6\u3927\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u18d8' + '\u1201\u2e2e\u15be\u0553\u32b6\u3be9\u32b6\u416f\u32b6\u32b6\u32b6\u1a68' + '\u10e5\u2a59\u2c0e\u205e\u2ef3\u1019\u04e9\u1a84\u32b6\u32b6\u3d0f\u32b6' + '\u32b6\u32b6\u3f4f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u104e' + '\u076a\u32b6\u07bb\u15dc\u32b6\u10ba\u32b6\u32b6\u32b6\u32b6\u32b6\u1a3f' + '\u32b6\u0cf2\u1606\u32b6\u32b6\u32b6\u0877\u32b6\u32b6\u073d\u2139\u0dcb' + '\u0bcb\u09b3\u0bcb\u0fd9\u20f7\u03e3\u32b6\u32b6\u32b6\u32b6\u32b6\u0733' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u041d\u0864\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u3915\u32b6\u3477\u32b6\u3193\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u20be\u32b6\u36b1\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u2120\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2f80\u36ac\u369a\u32b6' + '\u32b6\u32b6\u32b6\u1b8c\u32b6\u1584\u1947\u1ae4\u3c82\u1986\u03b8\u043a' + '\u1b52\u2e77\u19d9\u32b6\u32b6\u32b6\u3cdf\u090a\u0912\u091a\u0906\u090e' + '\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a' + '\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a' + '\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916' + '\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906' + '\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912' + '\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e' + '\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e' + '\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a' + '\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a' + '\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916' + '\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906' + '\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912' + '\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e' + '\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e' + '\u0916\u093a\u0973\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f' + '\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f' + '\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u3498' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u0834' + '\u32b6\u32b6\u2bb8\u32b6\u32b6\u36ac\u35a6\u32b9\u33d6\u32b6\u32b6\u32b6' + '\u35e5\u24ee\u3847\x00\u0567\u3a12\u2826\u01d4\u2fb3\u29f7\u36f2\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2bc7\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u1e54\u32b6\u1394\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u2412\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u30b3\u2c62\u3271\u32b6\u32b6\u32b6\u12e3\u32b6\u32b6\u1bf2' + '\u1d44\u2526\u32b6\u2656\u32b6\u32b6\u32b6\u0bcb\u1645\u0a85\u0ddf\u2168' + '\u22af\u09c3\u09c5\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u3f2f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6' + '\u32b6\u32b6\u32b6'; int low(int codeUnit) { var chunkStart = _start.codeUnitAt(codeUnit >> 6); var index = chunkStart + (codeUnit & 63); @@ -325,8 +390,9 @@ int low(int codeUnit) { } int high(int lead, int tail) { - var chunkStart = _start.codeUnitAt(1024 + (0x3ff & lead)); - var index = chunkStart + (0x3ff & tail); + var offset = ((0x3ff & lead) << 10) | (0x3ff & tail); + var chunkStart = _start.codeUnitAt(1024 + (offset >> 9)); + var index = chunkStart + (offset & 511); var bit = index & 1; var pair = _data.codeUnitAt(index >> 1); return (pair >> 4) & -bit | (pair & 0xF) & (bit - 1); diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index a1bb3335..e0394167 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,10 +1,10 @@ name: characters -version: 1.2.1 +version: 1.3.0 description: String replacement with operations that are Unicode/grapheme cluster aware. repository: https://github.com/dart-lang/characters environment: - sdk: ">=2.12.0 <3.0.0" + sdk: ">=2.12.0 <4.0.0" dev_dependencies: lints: ^1.0.0 diff --git a/pkgs/characters/test/src/unicode_grapheme_tests.dart b/pkgs/characters/test/src/unicode_grapheme_tests.dart index a07812bd..405544a9 100644 --- a/pkgs/characters/test/src/unicode_grapheme_tests.dart +++ b/pkgs/characters/test/src/unicode_grapheme_tests.dart @@ -3,10 +3,10 @@ // BSD-style license that can be found in the LICENSE file. // Generated code. Do not edit. -// Generated from http://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt -// and https://www.unicode.org/Public/emoji/11.0/emoji-test.txt. +// Generated from [https://unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakTest.txt](../../third_party/Unicode_Consortium/GraphemeBreakTest.txt) +// and [https://www.unicode.org/Public/emoji/15.0/emoji-test.txt](../../third_party/Unicode_Consortium/emoji_test.txt). // Licensed under the Unicode Inc. License Agreement -// (../../third_party/Unicode_Consortium/UNICODE_LICENSE.txt, http://www.unicode.org/copyright.html#License) +// (https://www.unicode.org/license.txt, ../../third_party/third_party/Unicode_Consortium/UNICODE_LICENSE.txt) // Grapheme cluster tests. const List> splitTests = [ @@ -44,8 +44,6 @@ const List> splitTests = [ [' \u0308\u200d'], [' ', '\u0378'], [' \u0308', '\u0378'], - [' ', '\ud800'], - [' \u0308', '\ud800'], ['\r', ' '], ['\r', '\u0308', ' '], ['\r', '\r'], @@ -80,8 +78,6 @@ const List> splitTests = [ ['\r', '\u0308\u200d'], ['\r', '\u0378'], ['\r', '\u0308', '\u0378'], - ['\r', '\ud800'], - ['\r', '\u0308', '\ud800'], ['\n', ' '], ['\n', '\u0308', ' '], ['\n', '\r'], @@ -116,8 +112,6 @@ const List> splitTests = [ ['\n', '\u0308\u200d'], ['\n', '\u0378'], ['\n', '\u0308', '\u0378'], - ['\n', '\ud800'], - ['\n', '\u0308', '\ud800'], ['\x01', ' '], ['\x01', '\u0308', ' '], ['\x01', '\r'], @@ -152,8 +146,6 @@ const List> splitTests = [ ['\x01', '\u0308\u200d'], ['\x01', '\u0378'], ['\x01', '\u0308', '\u0378'], - ['\x01', '\ud800'], - ['\x01', '\u0308', '\ud800'], ['\u034f', ' '], ['\u034f\u0308', ' '], ['\u034f', '\r'], @@ -188,8 +180,6 @@ const List> splitTests = [ ['\u034f\u0308\u200d'], ['\u034f', '\u0378'], ['\u034f\u0308', '\u0378'], - ['\u034f', '\ud800'], - ['\u034f\u0308', '\ud800'], ['\u{1f1e6}', ' '], ['\u{1f1e6}\u0308', ' '], ['\u{1f1e6}', '\r'], @@ -224,8 +214,6 @@ const List> splitTests = [ ['\u{1f1e6}\u0308\u200d'], ['\u{1f1e6}', '\u0378'], ['\u{1f1e6}\u0308', '\u0378'], - ['\u{1f1e6}', '\ud800'], - ['\u{1f1e6}\u0308', '\ud800'], ['\u0600 '], ['\u0600\u0308', ' '], ['\u0600', '\r'], @@ -260,8 +248,6 @@ const List> splitTests = [ ['\u0600\u0308\u200d'], ['\u0600\u0378'], ['\u0600\u0308', '\u0378'], - ['\u0600', '\ud800'], - ['\u0600\u0308', '\ud800'], ['\u0903', ' '], ['\u0903\u0308', ' '], ['\u0903', '\r'], @@ -296,8 +282,6 @@ const List> splitTests = [ ['\u0903\u0308\u200d'], ['\u0903', '\u0378'], ['\u0903\u0308', '\u0378'], - ['\u0903', '\ud800'], - ['\u0903\u0308', '\ud800'], ['\u1100', ' '], ['\u1100\u0308', ' '], ['\u1100', '\r'], @@ -332,8 +316,6 @@ const List> splitTests = [ ['\u1100\u0308\u200d'], ['\u1100', '\u0378'], ['\u1100\u0308', '\u0378'], - ['\u1100', '\ud800'], - ['\u1100\u0308', '\ud800'], ['\u1160', ' '], ['\u1160\u0308', ' '], ['\u1160', '\r'], @@ -368,8 +350,6 @@ const List> splitTests = [ ['\u1160\u0308\u200d'], ['\u1160', '\u0378'], ['\u1160\u0308', '\u0378'], - ['\u1160', '\ud800'], - ['\u1160\u0308', '\ud800'], ['\u11a8', ' '], ['\u11a8\u0308', ' '], ['\u11a8', '\r'], @@ -404,8 +384,6 @@ const List> splitTests = [ ['\u11a8\u0308\u200d'], ['\u11a8', '\u0378'], ['\u11a8\u0308', '\u0378'], - ['\u11a8', '\ud800'], - ['\u11a8\u0308', '\ud800'], ['\uac00', ' '], ['\uac00\u0308', ' '], ['\uac00', '\r'], @@ -440,8 +418,6 @@ const List> splitTests = [ ['\uac00\u0308\u200d'], ['\uac00', '\u0378'], ['\uac00\u0308', '\u0378'], - ['\uac00', '\ud800'], - ['\uac00\u0308', '\ud800'], ['\uac01', ' '], ['\uac01\u0308', ' '], ['\uac01', '\r'], @@ -476,8 +452,6 @@ const List> splitTests = [ ['\uac01\u0308\u200d'], ['\uac01', '\u0378'], ['\uac01\u0308', '\u0378'], - ['\uac01', '\ud800'], - ['\uac01\u0308', '\ud800'], ['\u231a', ' '], ['\u231a\u0308', ' '], ['\u231a', '\r'], @@ -512,8 +486,6 @@ const List> splitTests = [ ['\u231a\u0308\u200d'], ['\u231a', '\u0378'], ['\u231a\u0308', '\u0378'], - ['\u231a', '\ud800'], - ['\u231a\u0308', '\ud800'], ['\u0300', ' '], ['\u0300\u0308', ' '], ['\u0300', '\r'], @@ -548,8 +520,6 @@ const List> splitTests = [ ['\u0300\u0308\u200d'], ['\u0300', '\u0378'], ['\u0300\u0308', '\u0378'], - ['\u0300', '\ud800'], - ['\u0300\u0308', '\ud800'], ['\u200d', ' '], ['\u200d\u0308', ' '], ['\u200d', '\r'], @@ -584,8 +554,6 @@ const List> splitTests = [ ['\u200d\u0308\u200d'], ['\u200d', '\u0378'], ['\u200d\u0308', '\u0378'], - ['\u200d', '\ud800'], - ['\u200d\u0308', '\ud800'], ['\u0378', ' '], ['\u0378\u0308', ' '], ['\u0378', '\r'], @@ -620,44 +588,6 @@ const List> splitTests = [ ['\u0378\u0308\u200d'], ['\u0378', '\u0378'], ['\u0378\u0308', '\u0378'], - ['\u0378', '\ud800'], - ['\u0378\u0308', '\ud800'], - ['\ud800', ' '], - ['\ud800', '\u0308', ' '], - ['\ud800', '\r'], - ['\ud800', '\u0308', '\r'], - ['\ud800', '\n'], - ['\ud800', '\u0308', '\n'], - ['\ud800', '\x01'], - ['\ud800', '\u0308', '\x01'], - ['\ud800', '\u034f'], - ['\ud800', '\u0308\u034f'], - ['\ud800', '\u{1f1e6}'], - ['\ud800', '\u0308', '\u{1f1e6}'], - ['\ud800', '\u0600'], - ['\ud800', '\u0308', '\u0600'], - ['\ud800', '\u0903'], - ['\ud800', '\u0308\u0903'], - ['\ud800', '\u1100'], - ['\ud800', '\u0308', '\u1100'], - ['\ud800', '\u1160'], - ['\ud800', '\u0308', '\u1160'], - ['\ud800', '\u11a8'], - ['\ud800', '\u0308', '\u11a8'], - ['\ud800', '\uac00'], - ['\ud800', '\u0308', '\uac00'], - ['\ud800', '\uac01'], - ['\ud800', '\u0308', '\uac01'], - ['\ud800', '\u231a'], - ['\ud800', '\u0308', '\u231a'], - ['\ud800', '\u0300'], - ['\ud800', '\u0308\u0300'], - ['\ud800', '\u200d'], - ['\ud800', '\u0308\u200d'], - ['\ud800', '\u0378'], - ['\ud800', '\u0308', '\u0378'], - ['\ud800', '\ud800'], - ['\ud800', '\u0308', '\ud800'], ['\r\n', 'a', '\n', '\u0308'], ['a\u0308'], [' \u200d', '\u0646'], @@ -686,109 +616,124 @@ const List> splitTests = [ // Emoji tests. const List> emojis = [ ['\u{1f600}'], - ['\u{1f601}'], - ['\u{1f602}'], - ['\u{1f923}'], ['\u{1f603}'], ['\u{1f604}'], - ['\u{1f605}'], + ['\u{1f601}'], ['\u{1f606}'], + ['\u{1f605}'], + ['\u{1f923}'], + ['\u{1f602}'], + ['\u{1f642}'], + ['\u{1f643}'], + ['\u{1fae0}'], ['\u{1f609}'], ['\u{1f60a}'], - ['\u{1f60b}'], - ['\u{1f60e}'], + ['\u{1f607}'], + ['\u{1f970}'], ['\u{1f60d}'], + ['\u{1f929}'], ['\u{1f618}'], - ['\u{1f970}'], ['\u{1f617}'], - ['\u{1f619}'], - ['\u{1f61a}'], ['\u263a\ufe0f'], ['\u263a'], - ['\u{1f642}'], + ['\u{1f61a}'], + ['\u{1f619}'], + ['\u{1f972}'], + ['\u{1f60b}'], + ['\u{1f61b}'], + ['\u{1f61c}'], + ['\u{1f92a}'], + ['\u{1f61d}'], + ['\u{1f911}'], ['\u{1f917}'], - ['\u{1f929}'], + ['\u{1f92d}'], + ['\u{1fae2}'], + ['\u{1fae3}'], + ['\u{1f92b}'], ['\u{1f914}'], + ['\u{1fae1}'], + ['\u{1f910}'], ['\u{1f928}'], ['\u{1f610}'], ['\u{1f611}'], ['\u{1f636}'], - ['\u{1f644}'], + ['\u{1fae5}'], + ['\u{1f636}\u200d\u{1f32b}\ufe0f'], + ['\u{1f636}\u200d\u{1f32b}'], ['\u{1f60f}'], - ['\u{1f623}'], - ['\u{1f625}'], - ['\u{1f62e}'], - ['\u{1f910}'], - ['\u{1f62f}'], - ['\u{1f62a}'], - ['\u{1f62b}'], - ['\u{1f634}'], - ['\u{1f60c}'], - ['\u{1f61b}'], - ['\u{1f61c}'], - ['\u{1f61d}'], - ['\u{1f924}'], ['\u{1f612}'], - ['\u{1f613}'], + ['\u{1f644}'], + ['\u{1f62c}'], + ['\u{1f62e}\u200d\u{1f4a8}'], + ['\u{1f925}'], + ['\u{1fae8}'], + ['\u{1f60c}'], ['\u{1f614}'], + ['\u{1f62a}'], + ['\u{1f924}'], + ['\u{1f634}'], + ['\u{1f637}'], + ['\u{1f912}'], + ['\u{1f915}'], + ['\u{1f922}'], + ['\u{1f92e}'], + ['\u{1f927}'], + ['\u{1f975}'], + ['\u{1f976}'], + ['\u{1f974}'], + ['\u{1f635}'], + ['\u{1f635}\u200d\u{1f4ab}'], + ['\u{1f92f}'], + ['\u{1f920}'], + ['\u{1f973}'], + ['\u{1f978}'], + ['\u{1f60e}'], + ['\u{1f913}'], + ['\u{1f9d0}'], ['\u{1f615}'], - ['\u{1f643}'], - ['\u{1f911}'], - ['\u{1f632}'], + ['\u{1fae4}'], + ['\u{1f61f}'], + ['\u{1f641}'], ['\u2639\ufe0f'], ['\u2639'], - ['\u{1f641}'], - ['\u{1f616}'], - ['\u{1f61e}'], - ['\u{1f61f}'], - ['\u{1f624}'], - ['\u{1f622}'], - ['\u{1f62d}'], + ['\u{1f62e}'], + ['\u{1f62f}'], + ['\u{1f632}'], + ['\u{1f633}'], + ['\u{1f97a}'], + ['\u{1f979}'], ['\u{1f626}'], ['\u{1f627}'], ['\u{1f628}'], - ['\u{1f629}'], - ['\u{1f92f}'], - ['\u{1f62c}'], ['\u{1f630}'], + ['\u{1f625}'], + ['\u{1f622}'], + ['\u{1f62d}'], ['\u{1f631}'], - ['\u{1f975}'], - ['\u{1f976}'], - ['\u{1f633}'], - ['\u{1f92a}'], - ['\u{1f635}'], + ['\u{1f616}'], + ['\u{1f623}'], + ['\u{1f61e}'], + ['\u{1f613}'], + ['\u{1f629}'], + ['\u{1f62b}'], + ['\u{1f971}'], + ['\u{1f624}'], ['\u{1f621}'], ['\u{1f620}'], ['\u{1f92c}'], - ['\u{1f637}'], - ['\u{1f912}'], - ['\u{1f915}'], - ['\u{1f922}'], - ['\u{1f92e}'], - ['\u{1f927}'], - ['\u{1f607}'], - ['\u{1f920}'], - ['\u{1f973}'], - ['\u{1f974}'], - ['\u{1f97a}'], - ['\u{1f925}'], - ['\u{1f92b}'], - ['\u{1f92d}'], - ['\u{1f9d0}'], - ['\u{1f913}'], ['\u{1f608}'], ['\u{1f47f}'], - ['\u{1f921}'], - ['\u{1f479}'], - ['\u{1f47a}'], ['\u{1f480}'], ['\u2620\ufe0f'], ['\u2620'], + ['\u{1f4a9}'], + ['\u{1f921}'], + ['\u{1f479}'], + ['\u{1f47a}'], ['\u{1f47b}'], ['\u{1f47d}'], ['\u{1f47e}'], ['\u{1f916}'], - ['\u{1f4a9}'], ['\u{1f63a}'], ['\u{1f638}'], ['\u{1f639}'], @@ -801,824 +746,578 @@ const List> emojis = [ ['\u{1f648}'], ['\u{1f649}'], ['\u{1f64a}'], - ['\u{1f3fb}'], - ['\u{1f3fc}'], - ['\u{1f3fd}'], - ['\u{1f3fe}'], - ['\u{1f3ff}'], - ['\u{1f476}'], - ['\u{1f476}\u{1f3fb}'], - ['\u{1f476}\u{1f3fc}'], - ['\u{1f476}\u{1f3fd}'], - ['\u{1f476}\u{1f3fe}'], - ['\u{1f476}\u{1f3ff}'], - ['\u{1f9d2}'], - ['\u{1f9d2}\u{1f3fb}'], - ['\u{1f9d2}\u{1f3fc}'], - ['\u{1f9d2}\u{1f3fd}'], - ['\u{1f9d2}\u{1f3fe}'], - ['\u{1f9d2}\u{1f3ff}'], - ['\u{1f466}'], - ['\u{1f466}\u{1f3fb}'], - ['\u{1f466}\u{1f3fc}'], - ['\u{1f466}\u{1f3fd}'], - ['\u{1f466}\u{1f3fe}'], - ['\u{1f466}\u{1f3ff}'], - ['\u{1f467}'], - ['\u{1f467}\u{1f3fb}'], - ['\u{1f467}\u{1f3fc}'], - ['\u{1f467}\u{1f3fd}'], - ['\u{1f467}\u{1f3fe}'], - ['\u{1f467}\u{1f3ff}'], - ['\u{1f9d1}'], - ['\u{1f9d1}\u{1f3fb}'], - ['\u{1f9d1}\u{1f3fc}'], - ['\u{1f9d1}\u{1f3fd}'], - ['\u{1f9d1}\u{1f3fe}'], - ['\u{1f9d1}\u{1f3ff}'], - ['\u{1f468}'], - ['\u{1f468}\u{1f3fb}'], - ['\u{1f468}\u{1f3fc}'], - ['\u{1f468}\u{1f3fd}'], - ['\u{1f468}\u{1f3fe}'], - ['\u{1f468}\u{1f3ff}'], - ['\u{1f469}'], - ['\u{1f469}\u{1f3fb}'], - ['\u{1f469}\u{1f3fc}'], - ['\u{1f469}\u{1f3fd}'], - ['\u{1f469}\u{1f3fe}'], - ['\u{1f469}\u{1f3ff}'], - ['\u{1f9d3}'], - ['\u{1f9d3}\u{1f3fb}'], - ['\u{1f9d3}\u{1f3fc}'], - ['\u{1f9d3}\u{1f3fd}'], - ['\u{1f9d3}\u{1f3fe}'], - ['\u{1f9d3}\u{1f3ff}'], - ['\u{1f474}'], - ['\u{1f474}\u{1f3fb}'], - ['\u{1f474}\u{1f3fc}'], - ['\u{1f474}\u{1f3fd}'], - ['\u{1f474}\u{1f3fe}'], - ['\u{1f474}\u{1f3ff}'], - ['\u{1f475}'], - ['\u{1f475}\u{1f3fb}'], - ['\u{1f475}\u{1f3fc}'], - ['\u{1f475}\u{1f3fd}'], - ['\u{1f475}\u{1f3fe}'], - ['\u{1f475}\u{1f3ff}'], - ['\u{1f468}\u200d\u2695\ufe0f'], - ['\u{1f468}\u200d\u2695'], - ['\u{1f468}\u{1f3fb}\u200d\u2695\ufe0f'], - ['\u{1f468}\u{1f3fb}\u200d\u2695'], - ['\u{1f468}\u{1f3fc}\u200d\u2695\ufe0f'], - ['\u{1f468}\u{1f3fc}\u200d\u2695'], - ['\u{1f468}\u{1f3fd}\u200d\u2695\ufe0f'], - ['\u{1f468}\u{1f3fd}\u200d\u2695'], - ['\u{1f468}\u{1f3fe}\u200d\u2695\ufe0f'], - ['\u{1f468}\u{1f3fe}\u200d\u2695'], - ['\u{1f468}\u{1f3ff}\u200d\u2695\ufe0f'], - ['\u{1f468}\u{1f3ff}\u200d\u2695'], - ['\u{1f469}\u200d\u2695\ufe0f'], - ['\u{1f469}\u200d\u2695'], - ['\u{1f469}\u{1f3fb}\u200d\u2695\ufe0f'], - ['\u{1f469}\u{1f3fb}\u200d\u2695'], - ['\u{1f469}\u{1f3fc}\u200d\u2695\ufe0f'], - ['\u{1f469}\u{1f3fc}\u200d\u2695'], - ['\u{1f469}\u{1f3fd}\u200d\u2695\ufe0f'], - ['\u{1f469}\u{1f3fd}\u200d\u2695'], - ['\u{1f469}\u{1f3fe}\u200d\u2695\ufe0f'], - ['\u{1f469}\u{1f3fe}\u200d\u2695'], - ['\u{1f469}\u{1f3ff}\u200d\u2695\ufe0f'], - ['\u{1f469}\u{1f3ff}\u200d\u2695'], - ['\u{1f468}\u200d\u{1f393}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f393}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f393}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f393}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f393}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f393}'], - ['\u{1f469}\u200d\u{1f393}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f393}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f393}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f393}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f393}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f393}'], - ['\u{1f468}\u200d\u{1f3eb}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f3eb}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f3eb}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f3eb}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f3eb}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f3eb}'], - ['\u{1f469}\u200d\u{1f3eb}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f3eb}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f3eb}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f3eb}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f3eb}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f3eb}'], - ['\u{1f468}\u200d\u2696\ufe0f'], - ['\u{1f468}\u200d\u2696'], - ['\u{1f468}\u{1f3fb}\u200d\u2696\ufe0f'], - ['\u{1f468}\u{1f3fb}\u200d\u2696'], - ['\u{1f468}\u{1f3fc}\u200d\u2696\ufe0f'], - ['\u{1f468}\u{1f3fc}\u200d\u2696'], - ['\u{1f468}\u{1f3fd}\u200d\u2696\ufe0f'], - ['\u{1f468}\u{1f3fd}\u200d\u2696'], - ['\u{1f468}\u{1f3fe}\u200d\u2696\ufe0f'], - ['\u{1f468}\u{1f3fe}\u200d\u2696'], - ['\u{1f468}\u{1f3ff}\u200d\u2696\ufe0f'], - ['\u{1f468}\u{1f3ff}\u200d\u2696'], - ['\u{1f469}\u200d\u2696\ufe0f'], - ['\u{1f469}\u200d\u2696'], - ['\u{1f469}\u{1f3fb}\u200d\u2696\ufe0f'], - ['\u{1f469}\u{1f3fb}\u200d\u2696'], - ['\u{1f469}\u{1f3fc}\u200d\u2696\ufe0f'], - ['\u{1f469}\u{1f3fc}\u200d\u2696'], - ['\u{1f469}\u{1f3fd}\u200d\u2696\ufe0f'], - ['\u{1f469}\u{1f3fd}\u200d\u2696'], - ['\u{1f469}\u{1f3fe}\u200d\u2696\ufe0f'], - ['\u{1f469}\u{1f3fe}\u200d\u2696'], - ['\u{1f469}\u{1f3ff}\u200d\u2696\ufe0f'], - ['\u{1f469}\u{1f3ff}\u200d\u2696'], - ['\u{1f468}\u200d\u{1f33e}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f33e}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f33e}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f33e}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f33e}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f33e}'], - ['\u{1f469}\u200d\u{1f33e}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f33e}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f33e}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f33e}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f33e}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f33e}'], - ['\u{1f468}\u200d\u{1f373}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f373}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f373}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f373}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f373}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f373}'], - ['\u{1f469}\u200d\u{1f373}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f373}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f373}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f373}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f373}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f373}'], - ['\u{1f468}\u200d\u{1f527}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f527}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f527}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f527}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f527}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f527}'], - ['\u{1f469}\u200d\u{1f527}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f527}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f527}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f527}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f527}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f527}'], - ['\u{1f468}\u200d\u{1f3ed}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f3ed}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f3ed}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f3ed}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f3ed}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f3ed}'], - ['\u{1f469}\u200d\u{1f3ed}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f3ed}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f3ed}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f3ed}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f3ed}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f3ed}'], - ['\u{1f468}\u200d\u{1f4bc}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f4bc}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f4bc}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f4bc}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f4bc}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f4bc}'], - ['\u{1f469}\u200d\u{1f4bc}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f4bc}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f4bc}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f4bc}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f4bc}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f4bc}'], - ['\u{1f468}\u200d\u{1f52c}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f52c}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f52c}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f52c}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f52c}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f52c}'], - ['\u{1f469}\u200d\u{1f52c}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f52c}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f52c}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f52c}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f52c}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f52c}'], - ['\u{1f468}\u200d\u{1f4bb}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f4bb}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f4bb}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f4bb}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f4bb}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f4bb}'], - ['\u{1f469}\u200d\u{1f4bb}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f4bb}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f4bb}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f4bb}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f4bb}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f4bb}'], - ['\u{1f468}\u200d\u{1f3a4}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f3a4}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f3a4}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f3a4}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f3a4}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f3a4}'], - ['\u{1f469}\u200d\u{1f3a4}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f3a4}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f3a4}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f3a4}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f3a4}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f3a4}'], - ['\u{1f468}\u200d\u{1f3a8}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f3a8}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f3a8}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f3a8}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f3a8}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f3a8}'], - ['\u{1f469}\u200d\u{1f3a8}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f3a8}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f3a8}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f3a8}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f3a8}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f3a8}'], - ['\u{1f468}\u200d\u2708\ufe0f'], - ['\u{1f468}\u200d\u2708'], - ['\u{1f468}\u{1f3fb}\u200d\u2708\ufe0f'], - ['\u{1f468}\u{1f3fb}\u200d\u2708'], - ['\u{1f468}\u{1f3fc}\u200d\u2708\ufe0f'], - ['\u{1f468}\u{1f3fc}\u200d\u2708'], - ['\u{1f468}\u{1f3fd}\u200d\u2708\ufe0f'], - ['\u{1f468}\u{1f3fd}\u200d\u2708'], - ['\u{1f468}\u{1f3fe}\u200d\u2708\ufe0f'], - ['\u{1f468}\u{1f3fe}\u200d\u2708'], - ['\u{1f468}\u{1f3ff}\u200d\u2708\ufe0f'], - ['\u{1f468}\u{1f3ff}\u200d\u2708'], - ['\u{1f469}\u200d\u2708\ufe0f'], - ['\u{1f469}\u200d\u2708'], - ['\u{1f469}\u{1f3fb}\u200d\u2708\ufe0f'], - ['\u{1f469}\u{1f3fb}\u200d\u2708'], - ['\u{1f469}\u{1f3fc}\u200d\u2708\ufe0f'], - ['\u{1f469}\u{1f3fc}\u200d\u2708'], - ['\u{1f469}\u{1f3fd}\u200d\u2708\ufe0f'], - ['\u{1f469}\u{1f3fd}\u200d\u2708'], - ['\u{1f469}\u{1f3fe}\u200d\u2708\ufe0f'], - ['\u{1f469}\u{1f3fe}\u200d\u2708'], - ['\u{1f469}\u{1f3ff}\u200d\u2708\ufe0f'], - ['\u{1f469}\u{1f3ff}\u200d\u2708'], - ['\u{1f468}\u200d\u{1f680}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f680}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f680}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f680}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f680}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f680}'], - ['\u{1f469}\u200d\u{1f680}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f680}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f680}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f680}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f680}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f680}'], - ['\u{1f468}\u200d\u{1f692}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f692}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f692}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f692}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f692}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f692}'], - ['\u{1f469}\u200d\u{1f692}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f692}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f692}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f692}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f692}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f692}'], - ['\u{1f46e}'], - ['\u{1f46e}\u{1f3fb}'], - ['\u{1f46e}\u{1f3fc}'], - ['\u{1f46e}\u{1f3fd}'], - ['\u{1f46e}\u{1f3fe}'], - ['\u{1f46e}\u{1f3ff}'], - ['\u{1f46e}\u200d\u2642\ufe0f'], - ['\u{1f46e}\u200d\u2642'], - ['\u{1f46e}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f46e}\u{1f3fb}\u200d\u2642'], - ['\u{1f46e}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f46e}\u{1f3fc}\u200d\u2642'], - ['\u{1f46e}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f46e}\u{1f3fd}\u200d\u2642'], - ['\u{1f46e}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f46e}\u{1f3fe}\u200d\u2642'], - ['\u{1f46e}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f46e}\u{1f3ff}\u200d\u2642'], - ['\u{1f46e}\u200d\u2640\ufe0f'], - ['\u{1f46e}\u200d\u2640'], - ['\u{1f46e}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f46e}\u{1f3fb}\u200d\u2640'], - ['\u{1f46e}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f46e}\u{1f3fc}\u200d\u2640'], - ['\u{1f46e}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f46e}\u{1f3fd}\u200d\u2640'], - ['\u{1f46e}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f46e}\u{1f3fe}\u200d\u2640'], - ['\u{1f46e}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f46e}\u{1f3ff}\u200d\u2640'], - ['\u{1f575}\ufe0f'], - ['\u{1f575}'], - ['\u{1f575}\u{1f3fb}'], - ['\u{1f575}\u{1f3fc}'], - ['\u{1f575}\u{1f3fd}'], - ['\u{1f575}\u{1f3fe}'], - ['\u{1f575}\u{1f3ff}'], - ['\u{1f575}\ufe0f\u200d\u2642\ufe0f'], - ['\u{1f575}\u200d\u2642\ufe0f'], - ['\u{1f575}\ufe0f\u200d\u2642'], - ['\u{1f575}\u200d\u2642'], - ['\u{1f575}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f575}\u{1f3fb}\u200d\u2642'], - ['\u{1f575}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f575}\u{1f3fc}\u200d\u2642'], - ['\u{1f575}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f575}\u{1f3fd}\u200d\u2642'], - ['\u{1f575}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f575}\u{1f3fe}\u200d\u2642'], - ['\u{1f575}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f575}\u{1f3ff}\u200d\u2642'], - ['\u{1f575}\ufe0f\u200d\u2640\ufe0f'], - ['\u{1f575}\u200d\u2640\ufe0f'], - ['\u{1f575}\ufe0f\u200d\u2640'], - ['\u{1f575}\u200d\u2640'], - ['\u{1f575}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f575}\u{1f3fb}\u200d\u2640'], - ['\u{1f575}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f575}\u{1f3fc}\u200d\u2640'], - ['\u{1f575}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f575}\u{1f3fd}\u200d\u2640'], - ['\u{1f575}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f575}\u{1f3fe}\u200d\u2640'], - ['\u{1f575}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f575}\u{1f3ff}\u200d\u2640'], - ['\u{1f482}'], - ['\u{1f482}\u{1f3fb}'], - ['\u{1f482}\u{1f3fc}'], - ['\u{1f482}\u{1f3fd}'], - ['\u{1f482}\u{1f3fe}'], - ['\u{1f482}\u{1f3ff}'], - ['\u{1f482}\u200d\u2642\ufe0f'], - ['\u{1f482}\u200d\u2642'], - ['\u{1f482}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f482}\u{1f3fb}\u200d\u2642'], - ['\u{1f482}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f482}\u{1f3fc}\u200d\u2642'], - ['\u{1f482}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f482}\u{1f3fd}\u200d\u2642'], - ['\u{1f482}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f482}\u{1f3fe}\u200d\u2642'], - ['\u{1f482}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f482}\u{1f3ff}\u200d\u2642'], - ['\u{1f482}\u200d\u2640\ufe0f'], - ['\u{1f482}\u200d\u2640'], - ['\u{1f482}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f482}\u{1f3fb}\u200d\u2640'], - ['\u{1f482}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f482}\u{1f3fc}\u200d\u2640'], - ['\u{1f482}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f482}\u{1f3fd}\u200d\u2640'], - ['\u{1f482}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f482}\u{1f3fe}\u200d\u2640'], - ['\u{1f482}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f482}\u{1f3ff}\u200d\u2640'], - ['\u{1f477}'], - ['\u{1f477}\u{1f3fb}'], - ['\u{1f477}\u{1f3fc}'], - ['\u{1f477}\u{1f3fd}'], - ['\u{1f477}\u{1f3fe}'], - ['\u{1f477}\u{1f3ff}'], - ['\u{1f477}\u200d\u2642\ufe0f'], - ['\u{1f477}\u200d\u2642'], - ['\u{1f477}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f477}\u{1f3fb}\u200d\u2642'], - ['\u{1f477}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f477}\u{1f3fc}\u200d\u2642'], - ['\u{1f477}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f477}\u{1f3fd}\u200d\u2642'], - ['\u{1f477}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f477}\u{1f3fe}\u200d\u2642'], - ['\u{1f477}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f477}\u{1f3ff}\u200d\u2642'], - ['\u{1f477}\u200d\u2640\ufe0f'], - ['\u{1f477}\u200d\u2640'], - ['\u{1f477}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f477}\u{1f3fb}\u200d\u2640'], - ['\u{1f477}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f477}\u{1f3fc}\u200d\u2640'], - ['\u{1f477}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f477}\u{1f3fd}\u200d\u2640'], - ['\u{1f477}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f477}\u{1f3fe}\u200d\u2640'], - ['\u{1f477}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f477}\u{1f3ff}\u200d\u2640'], - ['\u{1f934}'], - ['\u{1f934}\u{1f3fb}'], - ['\u{1f934}\u{1f3fc}'], - ['\u{1f934}\u{1f3fd}'], - ['\u{1f934}\u{1f3fe}'], - ['\u{1f934}\u{1f3ff}'], - ['\u{1f478}'], - ['\u{1f478}\u{1f3fb}'], - ['\u{1f478}\u{1f3fc}'], - ['\u{1f478}\u{1f3fd}'], - ['\u{1f478}\u{1f3fe}'], - ['\u{1f478}\u{1f3ff}'], - ['\u{1f473}'], - ['\u{1f473}\u{1f3fb}'], - ['\u{1f473}\u{1f3fc}'], - ['\u{1f473}\u{1f3fd}'], - ['\u{1f473}\u{1f3fe}'], - ['\u{1f473}\u{1f3ff}'], - ['\u{1f473}\u200d\u2642\ufe0f'], - ['\u{1f473}\u200d\u2642'], - ['\u{1f473}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f473}\u{1f3fb}\u200d\u2642'], - ['\u{1f473}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f473}\u{1f3fc}\u200d\u2642'], - ['\u{1f473}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f473}\u{1f3fd}\u200d\u2642'], - ['\u{1f473}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f473}\u{1f3fe}\u200d\u2642'], - ['\u{1f473}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f473}\u{1f3ff}\u200d\u2642'], - ['\u{1f473}\u200d\u2640\ufe0f'], - ['\u{1f473}\u200d\u2640'], - ['\u{1f473}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f473}\u{1f3fb}\u200d\u2640'], - ['\u{1f473}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f473}\u{1f3fc}\u200d\u2640'], - ['\u{1f473}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f473}\u{1f3fd}\u200d\u2640'], - ['\u{1f473}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f473}\u{1f3fe}\u200d\u2640'], - ['\u{1f473}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f473}\u{1f3ff}\u200d\u2640'], - ['\u{1f472}'], - ['\u{1f472}\u{1f3fb}'], - ['\u{1f472}\u{1f3fc}'], - ['\u{1f472}\u{1f3fd}'], - ['\u{1f472}\u{1f3fe}'], - ['\u{1f472}\u{1f3ff}'], - ['\u{1f9d5}'], - ['\u{1f9d5}\u{1f3fb}'], - ['\u{1f9d5}\u{1f3fc}'], - ['\u{1f9d5}\u{1f3fd}'], - ['\u{1f9d5}\u{1f3fe}'], - ['\u{1f9d5}\u{1f3ff}'], - ['\u{1f9d4}'], - ['\u{1f9d4}\u{1f3fb}'], - ['\u{1f9d4}\u{1f3fc}'], - ['\u{1f9d4}\u{1f3fd}'], - ['\u{1f9d4}\u{1f3fe}'], - ['\u{1f9d4}\u{1f3ff}'], - ['\u{1f471}'], - ['\u{1f471}\u{1f3fb}'], - ['\u{1f471}\u{1f3fc}'], - ['\u{1f471}\u{1f3fd}'], - ['\u{1f471}\u{1f3fe}'], - ['\u{1f471}\u{1f3ff}'], - ['\u{1f471}\u200d\u2642\ufe0f'], - ['\u{1f471}\u200d\u2642'], - ['\u{1f471}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f471}\u{1f3fb}\u200d\u2642'], - ['\u{1f471}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f471}\u{1f3fc}\u200d\u2642'], - ['\u{1f471}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f471}\u{1f3fd}\u200d\u2642'], - ['\u{1f471}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f471}\u{1f3fe}\u200d\u2642'], - ['\u{1f471}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f471}\u{1f3ff}\u200d\u2642'], - ['\u{1f471}\u200d\u2640\ufe0f'], - ['\u{1f471}\u200d\u2640'], - ['\u{1f471}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f471}\u{1f3fb}\u200d\u2640'], - ['\u{1f471}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f471}\u{1f3fc}\u200d\u2640'], - ['\u{1f471}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f471}\u{1f3fd}\u200d\u2640'], - ['\u{1f471}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f471}\u{1f3fe}\u200d\u2640'], - ['\u{1f471}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f471}\u{1f3ff}\u200d\u2640'], - ['\u{1f468}\u200d\u{1f9b0}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f9b0}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f9b0}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f9b0}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f9b0}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f9b0}'], - ['\u{1f469}\u200d\u{1f9b0}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f9b0}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f9b0}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f9b0}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f9b0}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f9b0}'], - ['\u{1f468}\u200d\u{1f9b1}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f9b1}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f9b1}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f9b1}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f9b1}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f9b1}'], - ['\u{1f469}\u200d\u{1f9b1}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f9b1}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f9b1}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f9b1}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f9b1}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f9b1}'], - ['\u{1f468}\u200d\u{1f9b2}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f9b2}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f9b2}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f9b2}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f9b2}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f9b2}'], - ['\u{1f469}\u200d\u{1f9b2}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f9b2}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f9b2}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f9b2}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f9b2}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f9b2}'], - ['\u{1f468}\u200d\u{1f9b3}'], - ['\u{1f468}\u{1f3fb}\u200d\u{1f9b3}'], - ['\u{1f468}\u{1f3fc}\u200d\u{1f9b3}'], - ['\u{1f468}\u{1f3fd}\u200d\u{1f9b3}'], - ['\u{1f468}\u{1f3fe}\u200d\u{1f9b3}'], - ['\u{1f468}\u{1f3ff}\u200d\u{1f9b3}'], - ['\u{1f469}\u200d\u{1f9b3}'], - ['\u{1f469}\u{1f3fb}\u200d\u{1f9b3}'], - ['\u{1f469}\u{1f3fc}\u200d\u{1f9b3}'], - ['\u{1f469}\u{1f3fd}\u200d\u{1f9b3}'], - ['\u{1f469}\u{1f3fe}\u200d\u{1f9b3}'], - ['\u{1f469}\u{1f3ff}\u200d\u{1f9b3}'], - ['\u{1f935}'], - ['\u{1f935}\u{1f3fb}'], - ['\u{1f935}\u{1f3fc}'], - ['\u{1f935}\u{1f3fd}'], - ['\u{1f935}\u{1f3fe}'], - ['\u{1f935}\u{1f3ff}'], - ['\u{1f470}'], - ['\u{1f470}\u{1f3fb}'], - ['\u{1f470}\u{1f3fc}'], - ['\u{1f470}\u{1f3fd}'], - ['\u{1f470}\u{1f3fe}'], - ['\u{1f470}\u{1f3ff}'], - ['\u{1f930}'], - ['\u{1f930}\u{1f3fb}'], - ['\u{1f930}\u{1f3fc}'], - ['\u{1f930}\u{1f3fd}'], - ['\u{1f930}\u{1f3fe}'], - ['\u{1f930}\u{1f3ff}'], - ['\u{1f931}'], - ['\u{1f931}\u{1f3fb}'], - ['\u{1f931}\u{1f3fc}'], - ['\u{1f931}\u{1f3fd}'], - ['\u{1f931}\u{1f3fe}'], - ['\u{1f931}\u{1f3ff}'], - ['\u{1f47c}'], - ['\u{1f47c}\u{1f3fb}'], - ['\u{1f47c}\u{1f3fc}'], - ['\u{1f47c}\u{1f3fd}'], - ['\u{1f47c}\u{1f3fe}'], - ['\u{1f47c}\u{1f3ff}'], - ['\u{1f385}'], - ['\u{1f385}\u{1f3fb}'], - ['\u{1f385}\u{1f3fc}'], - ['\u{1f385}\u{1f3fd}'], - ['\u{1f385}\u{1f3fe}'], - ['\u{1f385}\u{1f3ff}'], - ['\u{1f936}'], - ['\u{1f936}\u{1f3fb}'], - ['\u{1f936}\u{1f3fc}'], - ['\u{1f936}\u{1f3fd}'], - ['\u{1f936}\u{1f3fe}'], - ['\u{1f936}\u{1f3ff}'], - ['\u{1f9b8}'], - ['\u{1f9b8}\u{1f3fb}'], - ['\u{1f9b8}\u{1f3fc}'], - ['\u{1f9b8}\u{1f3fd}'], - ['\u{1f9b8}\u{1f3fe}'], - ['\u{1f9b8}\u{1f3ff}'], - ['\u{1f9b8}\u200d\u2640\ufe0f'], - ['\u{1f9b8}\u200d\u2640'], - ['\u{1f9b8}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9b8}\u{1f3fb}\u200d\u2640'], - ['\u{1f9b8}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9b8}\u{1f3fc}\u200d\u2640'], - ['\u{1f9b8}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9b8}\u{1f3fd}\u200d\u2640'], - ['\u{1f9b8}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9b8}\u{1f3fe}\u200d\u2640'], - ['\u{1f9b8}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9b8}\u{1f3ff}\u200d\u2640'], - ['\u{1f9b8}\u200d\u2642\ufe0f'], - ['\u{1f9b8}\u200d\u2642'], - ['\u{1f9b8}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f9b8}\u{1f3fb}\u200d\u2642'], - ['\u{1f9b8}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f9b8}\u{1f3fc}\u200d\u2642'], - ['\u{1f9b8}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f9b8}\u{1f3fd}\u200d\u2642'], - ['\u{1f9b8}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f9b8}\u{1f3fe}\u200d\u2642'], - ['\u{1f9b8}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f9b8}\u{1f3ff}\u200d\u2642'], - ['\u{1f9b9}'], - ['\u{1f9b9}\u{1f3fb}'], - ['\u{1f9b9}\u{1f3fc}'], - ['\u{1f9b9}\u{1f3fd}'], - ['\u{1f9b9}\u{1f3fe}'], - ['\u{1f9b9}\u{1f3ff}'], - ['\u{1f9b9}\u200d\u2640\ufe0f'], - ['\u{1f9b9}\u200d\u2640'], - ['\u{1f9b9}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9b9}\u{1f3fb}\u200d\u2640'], - ['\u{1f9b9}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9b9}\u{1f3fc}\u200d\u2640'], - ['\u{1f9b9}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9b9}\u{1f3fd}\u200d\u2640'], - ['\u{1f9b9}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9b9}\u{1f3fe}\u200d\u2640'], - ['\u{1f9b9}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9b9}\u{1f3ff}\u200d\u2640'], - ['\u{1f9b9}\u200d\u2642\ufe0f'], - ['\u{1f9b9}\u200d\u2642'], - ['\u{1f9b9}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f9b9}\u{1f3fb}\u200d\u2642'], - ['\u{1f9b9}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f9b9}\u{1f3fc}\u200d\u2642'], - ['\u{1f9b9}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f9b9}\u{1f3fd}\u200d\u2642'], - ['\u{1f9b9}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f9b9}\u{1f3fe}\u200d\u2642'], - ['\u{1f9b9}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f9b9}\u{1f3ff}\u200d\u2642'], - ['\u{1f9d9}'], - ['\u{1f9d9}\u{1f3fb}'], - ['\u{1f9d9}\u{1f3fc}'], - ['\u{1f9d9}\u{1f3fd}'], - ['\u{1f9d9}\u{1f3fe}'], - ['\u{1f9d9}\u{1f3ff}'], - ['\u{1f9d9}\u200d\u2640\ufe0f'], - ['\u{1f9d9}\u200d\u2640'], - ['\u{1f9d9}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9d9}\u{1f3fb}\u200d\u2640'], - ['\u{1f9d9}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9d9}\u{1f3fc}\u200d\u2640'], - ['\u{1f9d9}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9d9}\u{1f3fd}\u200d\u2640'], - ['\u{1f9d9}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9d9}\u{1f3fe}\u200d\u2640'], - ['\u{1f9d9}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9d9}\u{1f3ff}\u200d\u2640'], - ['\u{1f9d9}\u200d\u2642\ufe0f'], - ['\u{1f9d9}\u200d\u2642'], - ['\u{1f9d9}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f9d9}\u{1f3fb}\u200d\u2642'], - ['\u{1f9d9}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f9d9}\u{1f3fc}\u200d\u2642'], - ['\u{1f9d9}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f9d9}\u{1f3fd}\u200d\u2642'], - ['\u{1f9d9}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f9d9}\u{1f3fe}\u200d\u2642'], - ['\u{1f9d9}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f9d9}\u{1f3ff}\u200d\u2642'], - ['\u{1f9da}'], - ['\u{1f9da}\u{1f3fb}'], - ['\u{1f9da}\u{1f3fc}'], - ['\u{1f9da}\u{1f3fd}'], - ['\u{1f9da}\u{1f3fe}'], - ['\u{1f9da}\u{1f3ff}'], - ['\u{1f9da}\u200d\u2640\ufe0f'], - ['\u{1f9da}\u200d\u2640'], - ['\u{1f9da}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9da}\u{1f3fb}\u200d\u2640'], - ['\u{1f9da}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9da}\u{1f3fc}\u200d\u2640'], - ['\u{1f9da}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9da}\u{1f3fd}\u200d\u2640'], - ['\u{1f9da}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9da}\u{1f3fe}\u200d\u2640'], - ['\u{1f9da}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9da}\u{1f3ff}\u200d\u2640'], - ['\u{1f9da}\u200d\u2642\ufe0f'], - ['\u{1f9da}\u200d\u2642'], - ['\u{1f9da}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f9da}\u{1f3fb}\u200d\u2642'], - ['\u{1f9da}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f9da}\u{1f3fc}\u200d\u2642'], - ['\u{1f9da}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f9da}\u{1f3fd}\u200d\u2642'], - ['\u{1f9da}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f9da}\u{1f3fe}\u200d\u2642'], - ['\u{1f9da}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f9da}\u{1f3ff}\u200d\u2642'], - ['\u{1f9db}'], - ['\u{1f9db}\u{1f3fb}'], - ['\u{1f9db}\u{1f3fc}'], - ['\u{1f9db}\u{1f3fd}'], - ['\u{1f9db}\u{1f3fe}'], - ['\u{1f9db}\u{1f3ff}'], - ['\u{1f9db}\u200d\u2640\ufe0f'], - ['\u{1f9db}\u200d\u2640'], - ['\u{1f9db}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9db}\u{1f3fb}\u200d\u2640'], - ['\u{1f9db}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9db}\u{1f3fc}\u200d\u2640'], - ['\u{1f9db}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9db}\u{1f3fd}\u200d\u2640'], - ['\u{1f9db}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9db}\u{1f3fe}\u200d\u2640'], - ['\u{1f9db}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9db}\u{1f3ff}\u200d\u2640'], - ['\u{1f9db}\u200d\u2642\ufe0f'], - ['\u{1f9db}\u200d\u2642'], - ['\u{1f9db}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f9db}\u{1f3fb}\u200d\u2642'], - ['\u{1f9db}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f9db}\u{1f3fc}\u200d\u2642'], - ['\u{1f9db}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f9db}\u{1f3fd}\u200d\u2642'], - ['\u{1f9db}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f9db}\u{1f3fe}\u200d\u2642'], - ['\u{1f9db}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f9db}\u{1f3ff}\u200d\u2642'], - ['\u{1f9dc}'], - ['\u{1f9dc}\u{1f3fb}'], - ['\u{1f9dc}\u{1f3fc}'], - ['\u{1f9dc}\u{1f3fd}'], - ['\u{1f9dc}\u{1f3fe}'], - ['\u{1f9dc}\u{1f3ff}'], - ['\u{1f9dc}\u200d\u2640\ufe0f'], - ['\u{1f9dc}\u200d\u2640'], - ['\u{1f9dc}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9dc}\u{1f3fb}\u200d\u2640'], - ['\u{1f9dc}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9dc}\u{1f3fc}\u200d\u2640'], - ['\u{1f9dc}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9dc}\u{1f3fd}\u200d\u2640'], - ['\u{1f9dc}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9dc}\u{1f3fe}\u200d\u2640'], - ['\u{1f9dc}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9dc}\u{1f3ff}\u200d\u2640'], - ['\u{1f9dc}\u200d\u2642\ufe0f'], - ['\u{1f9dc}\u200d\u2642'], - ['\u{1f9dc}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f9dc}\u{1f3fb}\u200d\u2642'], - ['\u{1f9dc}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f9dc}\u{1f3fc}\u200d\u2642'], - ['\u{1f9dc}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f9dc}\u{1f3fd}\u200d\u2642'], - ['\u{1f9dc}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f9dc}\u{1f3fe}\u200d\u2642'], - ['\u{1f9dc}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f9dc}\u{1f3ff}\u200d\u2642'], - ['\u{1f9dd}'], - ['\u{1f9dd}\u{1f3fb}'], - ['\u{1f9dd}\u{1f3fc}'], - ['\u{1f9dd}\u{1f3fd}'], - ['\u{1f9dd}\u{1f3fe}'], - ['\u{1f9dd}\u{1f3ff}'], - ['\u{1f9dd}\u200d\u2640\ufe0f'], - ['\u{1f9dd}\u200d\u2640'], - ['\u{1f9dd}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9dd}\u{1f3fb}\u200d\u2640'], - ['\u{1f9dd}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9dd}\u{1f3fc}\u200d\u2640'], - ['\u{1f9dd}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9dd}\u{1f3fd}\u200d\u2640'], - ['\u{1f9dd}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9dd}\u{1f3fe}\u200d\u2640'], - ['\u{1f9dd}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9dd}\u{1f3ff}\u200d\u2640'], - ['\u{1f9dd}\u200d\u2642\ufe0f'], - ['\u{1f9dd}\u200d\u2642'], - ['\u{1f9dd}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f9dd}\u{1f3fb}\u200d\u2642'], - ['\u{1f9dd}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f9dd}\u{1f3fc}\u200d\u2642'], - ['\u{1f9dd}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f9dd}\u{1f3fd}\u200d\u2642'], - ['\u{1f9dd}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f9dd}\u{1f3fe}\u200d\u2642'], - ['\u{1f9dd}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f9dd}\u{1f3ff}\u200d\u2642'], - ['\u{1f9de}'], - ['\u{1f9de}\u200d\u2640\ufe0f'], - ['\u{1f9de}\u200d\u2640'], - ['\u{1f9de}\u200d\u2642\ufe0f'], - ['\u{1f9de}\u200d\u2642'], - ['\u{1f9df}'], - ['\u{1f9df}\u200d\u2640\ufe0f'], - ['\u{1f9df}\u200d\u2640'], - ['\u{1f9df}\u200d\u2642\ufe0f'], - ['\u{1f9df}\u200d\u2642'], + ['\u{1f48c}'], + ['\u{1f498}'], + ['\u{1f49d}'], + ['\u{1f496}'], + ['\u{1f497}'], + ['\u{1f493}'], + ['\u{1f49e}'], + ['\u{1f495}'], + ['\u{1f49f}'], + ['\u2763\ufe0f'], + ['\u2763'], + ['\u{1f494}'], + ['\u2764\ufe0f\u200d\u{1f525}'], + ['\u2764\u200d\u{1f525}'], + ['\u2764\ufe0f\u200d\u{1fa79}'], + ['\u2764\u200d\u{1fa79}'], + ['\u2764\ufe0f'], + ['\u2764'], + ['\u{1fa77}'], + ['\u{1f9e1}'], + ['\u{1f49b}'], + ['\u{1f49a}'], + ['\u{1f499}'], + ['\u{1fa75}'], + ['\u{1f49c}'], + ['\u{1f90e}'], + ['\u{1f5a4}'], + ['\u{1fa76}'], + ['\u{1f90d}'], + ['\u{1f48b}'], + ['\u{1f4af}'], + ['\u{1f4a2}'], + ['\u{1f4a5}'], + ['\u{1f4ab}'], + ['\u{1f4a6}'], + ['\u{1f4a8}'], + ['\u{1f573}\ufe0f'], + ['\u{1f573}'], + ['\u{1f4ac}'], + ['\u{1f441}\ufe0f\u200d\u{1f5e8}\ufe0f'], + ['\u{1f441}\u200d\u{1f5e8}\ufe0f'], + ['\u{1f441}\ufe0f\u200d\u{1f5e8}'], + ['\u{1f441}\u200d\u{1f5e8}'], + ['\u{1f5e8}\ufe0f'], + ['\u{1f5e8}'], + ['\u{1f5ef}\ufe0f'], + ['\u{1f5ef}'], + ['\u{1f4ad}'], + ['\u{1f4a4}'], + ['\u{1f44b}'], + ['\u{1f44b}\u{1f3fb}'], + ['\u{1f44b}\u{1f3fc}'], + ['\u{1f44b}\u{1f3fd}'], + ['\u{1f44b}\u{1f3fe}'], + ['\u{1f44b}\u{1f3ff}'], + ['\u{1f91a}'], + ['\u{1f91a}\u{1f3fb}'], + ['\u{1f91a}\u{1f3fc}'], + ['\u{1f91a}\u{1f3fd}'], + ['\u{1f91a}\u{1f3fe}'], + ['\u{1f91a}\u{1f3ff}'], + ['\u{1f590}\ufe0f'], + ['\u{1f590}'], + ['\u{1f590}\u{1f3fb}'], + ['\u{1f590}\u{1f3fc}'], + ['\u{1f590}\u{1f3fd}'], + ['\u{1f590}\u{1f3fe}'], + ['\u{1f590}\u{1f3ff}'], + ['\u270b'], + ['\u270b\u{1f3fb}'], + ['\u270b\u{1f3fc}'], + ['\u270b\u{1f3fd}'], + ['\u270b\u{1f3fe}'], + ['\u270b\u{1f3ff}'], + ['\u{1f596}'], + ['\u{1f596}\u{1f3fb}'], + ['\u{1f596}\u{1f3fc}'], + ['\u{1f596}\u{1f3fd}'], + ['\u{1f596}\u{1f3fe}'], + ['\u{1f596}\u{1f3ff}'], + ['\u{1faf1}'], + ['\u{1faf1}\u{1f3fb}'], + ['\u{1faf1}\u{1f3fc}'], + ['\u{1faf1}\u{1f3fd}'], + ['\u{1faf1}\u{1f3fe}'], + ['\u{1faf1}\u{1f3ff}'], + ['\u{1faf2}'], + ['\u{1faf2}\u{1f3fb}'], + ['\u{1faf2}\u{1f3fc}'], + ['\u{1faf2}\u{1f3fd}'], + ['\u{1faf2}\u{1f3fe}'], + ['\u{1faf2}\u{1f3ff}'], + ['\u{1faf3}'], + ['\u{1faf3}\u{1f3fb}'], + ['\u{1faf3}\u{1f3fc}'], + ['\u{1faf3}\u{1f3fd}'], + ['\u{1faf3}\u{1f3fe}'], + ['\u{1faf3}\u{1f3ff}'], + ['\u{1faf4}'], + ['\u{1faf4}\u{1f3fb}'], + ['\u{1faf4}\u{1f3fc}'], + ['\u{1faf4}\u{1f3fd}'], + ['\u{1faf4}\u{1f3fe}'], + ['\u{1faf4}\u{1f3ff}'], + ['\u{1faf7}'], + ['\u{1faf7}\u{1f3fb}'], + ['\u{1faf7}\u{1f3fc}'], + ['\u{1faf7}\u{1f3fd}'], + ['\u{1faf7}\u{1f3fe}'], + ['\u{1faf7}\u{1f3ff}'], + ['\u{1faf8}'], + ['\u{1faf8}\u{1f3fb}'], + ['\u{1faf8}\u{1f3fc}'], + ['\u{1faf8}\u{1f3fd}'], + ['\u{1faf8}\u{1f3fe}'], + ['\u{1faf8}\u{1f3ff}'], + ['\u{1f44c}'], + ['\u{1f44c}\u{1f3fb}'], + ['\u{1f44c}\u{1f3fc}'], + ['\u{1f44c}\u{1f3fd}'], + ['\u{1f44c}\u{1f3fe}'], + ['\u{1f44c}\u{1f3ff}'], + ['\u{1f90c}'], + ['\u{1f90c}\u{1f3fb}'], + ['\u{1f90c}\u{1f3fc}'], + ['\u{1f90c}\u{1f3fd}'], + ['\u{1f90c}\u{1f3fe}'], + ['\u{1f90c}\u{1f3ff}'], + ['\u{1f90f}'], + ['\u{1f90f}\u{1f3fb}'], + ['\u{1f90f}\u{1f3fc}'], + ['\u{1f90f}\u{1f3fd}'], + ['\u{1f90f}\u{1f3fe}'], + ['\u{1f90f}\u{1f3ff}'], + ['\u270c\ufe0f'], + ['\u270c'], + ['\u270c\u{1f3fb}'], + ['\u270c\u{1f3fc}'], + ['\u270c\u{1f3fd}'], + ['\u270c\u{1f3fe}'], + ['\u270c\u{1f3ff}'], + ['\u{1f91e}'], + ['\u{1f91e}\u{1f3fb}'], + ['\u{1f91e}\u{1f3fc}'], + ['\u{1f91e}\u{1f3fd}'], + ['\u{1f91e}\u{1f3fe}'], + ['\u{1f91e}\u{1f3ff}'], + ['\u{1faf0}'], + ['\u{1faf0}\u{1f3fb}'], + ['\u{1faf0}\u{1f3fc}'], + ['\u{1faf0}\u{1f3fd}'], + ['\u{1faf0}\u{1f3fe}'], + ['\u{1faf0}\u{1f3ff}'], + ['\u{1f91f}'], + ['\u{1f91f}\u{1f3fb}'], + ['\u{1f91f}\u{1f3fc}'], + ['\u{1f91f}\u{1f3fd}'], + ['\u{1f91f}\u{1f3fe}'], + ['\u{1f91f}\u{1f3ff}'], + ['\u{1f918}'], + ['\u{1f918}\u{1f3fb}'], + ['\u{1f918}\u{1f3fc}'], + ['\u{1f918}\u{1f3fd}'], + ['\u{1f918}\u{1f3fe}'], + ['\u{1f918}\u{1f3ff}'], + ['\u{1f919}'], + ['\u{1f919}\u{1f3fb}'], + ['\u{1f919}\u{1f3fc}'], + ['\u{1f919}\u{1f3fd}'], + ['\u{1f919}\u{1f3fe}'], + ['\u{1f919}\u{1f3ff}'], + ['\u{1f448}'], + ['\u{1f448}\u{1f3fb}'], + ['\u{1f448}\u{1f3fc}'], + ['\u{1f448}\u{1f3fd}'], + ['\u{1f448}\u{1f3fe}'], + ['\u{1f448}\u{1f3ff}'], + ['\u{1f449}'], + ['\u{1f449}\u{1f3fb}'], + ['\u{1f449}\u{1f3fc}'], + ['\u{1f449}\u{1f3fd}'], + ['\u{1f449}\u{1f3fe}'], + ['\u{1f449}\u{1f3ff}'], + ['\u{1f446}'], + ['\u{1f446}\u{1f3fb}'], + ['\u{1f446}\u{1f3fc}'], + ['\u{1f446}\u{1f3fd}'], + ['\u{1f446}\u{1f3fe}'], + ['\u{1f446}\u{1f3ff}'], + ['\u{1f595}'], + ['\u{1f595}\u{1f3fb}'], + ['\u{1f595}\u{1f3fc}'], + ['\u{1f595}\u{1f3fd}'], + ['\u{1f595}\u{1f3fe}'], + ['\u{1f595}\u{1f3ff}'], + ['\u{1f447}'], + ['\u{1f447}\u{1f3fb}'], + ['\u{1f447}\u{1f3fc}'], + ['\u{1f447}\u{1f3fd}'], + ['\u{1f447}\u{1f3fe}'], + ['\u{1f447}\u{1f3ff}'], + ['\u261d\ufe0f'], + ['\u261d'], + ['\u261d\u{1f3fb}'], + ['\u261d\u{1f3fc}'], + ['\u261d\u{1f3fd}'], + ['\u261d\u{1f3fe}'], + ['\u261d\u{1f3ff}'], + ['\u{1faf5}'], + ['\u{1faf5}\u{1f3fb}'], + ['\u{1faf5}\u{1f3fc}'], + ['\u{1faf5}\u{1f3fd}'], + ['\u{1faf5}\u{1f3fe}'], + ['\u{1faf5}\u{1f3ff}'], + ['\u{1f44d}'], + ['\u{1f44d}\u{1f3fb}'], + ['\u{1f44d}\u{1f3fc}'], + ['\u{1f44d}\u{1f3fd}'], + ['\u{1f44d}\u{1f3fe}'], + ['\u{1f44d}\u{1f3ff}'], + ['\u{1f44e}'], + ['\u{1f44e}\u{1f3fb}'], + ['\u{1f44e}\u{1f3fc}'], + ['\u{1f44e}\u{1f3fd}'], + ['\u{1f44e}\u{1f3fe}'], + ['\u{1f44e}\u{1f3ff}'], + ['\u270a'], + ['\u270a\u{1f3fb}'], + ['\u270a\u{1f3fc}'], + ['\u270a\u{1f3fd}'], + ['\u270a\u{1f3fe}'], + ['\u270a\u{1f3ff}'], + ['\u{1f44a}'], + ['\u{1f44a}\u{1f3fb}'], + ['\u{1f44a}\u{1f3fc}'], + ['\u{1f44a}\u{1f3fd}'], + ['\u{1f44a}\u{1f3fe}'], + ['\u{1f44a}\u{1f3ff}'], + ['\u{1f91b}'], + ['\u{1f91b}\u{1f3fb}'], + ['\u{1f91b}\u{1f3fc}'], + ['\u{1f91b}\u{1f3fd}'], + ['\u{1f91b}\u{1f3fe}'], + ['\u{1f91b}\u{1f3ff}'], + ['\u{1f91c}'], + ['\u{1f91c}\u{1f3fb}'], + ['\u{1f91c}\u{1f3fc}'], + ['\u{1f91c}\u{1f3fd}'], + ['\u{1f91c}\u{1f3fe}'], + ['\u{1f91c}\u{1f3ff}'], + ['\u{1f44f}'], + ['\u{1f44f}\u{1f3fb}'], + ['\u{1f44f}\u{1f3fc}'], + ['\u{1f44f}\u{1f3fd}'], + ['\u{1f44f}\u{1f3fe}'], + ['\u{1f44f}\u{1f3ff}'], + ['\u{1f64c}'], + ['\u{1f64c}\u{1f3fb}'], + ['\u{1f64c}\u{1f3fc}'], + ['\u{1f64c}\u{1f3fd}'], + ['\u{1f64c}\u{1f3fe}'], + ['\u{1f64c}\u{1f3ff}'], + ['\u{1faf6}'], + ['\u{1faf6}\u{1f3fb}'], + ['\u{1faf6}\u{1f3fc}'], + ['\u{1faf6}\u{1f3fd}'], + ['\u{1faf6}\u{1f3fe}'], + ['\u{1faf6}\u{1f3ff}'], + ['\u{1f450}'], + ['\u{1f450}\u{1f3fb}'], + ['\u{1f450}\u{1f3fc}'], + ['\u{1f450}\u{1f3fd}'], + ['\u{1f450}\u{1f3fe}'], + ['\u{1f450}\u{1f3ff}'], + ['\u{1f932}'], + ['\u{1f932}\u{1f3fb}'], + ['\u{1f932}\u{1f3fc}'], + ['\u{1f932}\u{1f3fd}'], + ['\u{1f932}\u{1f3fe}'], + ['\u{1f932}\u{1f3ff}'], + ['\u{1f91d}'], + ['\u{1f91d}\u{1f3fb}'], + ['\u{1f91d}\u{1f3fc}'], + ['\u{1f91d}\u{1f3fd}'], + ['\u{1f91d}\u{1f3fe}'], + ['\u{1f91d}\u{1f3ff}'], + ['\u{1faf1}\u{1f3fb}\u200d\u{1faf2}\u{1f3fc}'], + ['\u{1faf1}\u{1f3fb}\u200d\u{1faf2}\u{1f3fd}'], + ['\u{1faf1}\u{1f3fb}\u200d\u{1faf2}\u{1f3fe}'], + ['\u{1faf1}\u{1f3fb}\u200d\u{1faf2}\u{1f3ff}'], + ['\u{1faf1}\u{1f3fc}\u200d\u{1faf2}\u{1f3fb}'], + ['\u{1faf1}\u{1f3fc}\u200d\u{1faf2}\u{1f3fd}'], + ['\u{1faf1}\u{1f3fc}\u200d\u{1faf2}\u{1f3fe}'], + ['\u{1faf1}\u{1f3fc}\u200d\u{1faf2}\u{1f3ff}'], + ['\u{1faf1}\u{1f3fd}\u200d\u{1faf2}\u{1f3fb}'], + ['\u{1faf1}\u{1f3fd}\u200d\u{1faf2}\u{1f3fc}'], + ['\u{1faf1}\u{1f3fd}\u200d\u{1faf2}\u{1f3fe}'], + ['\u{1faf1}\u{1f3fd}\u200d\u{1faf2}\u{1f3ff}'], + ['\u{1faf1}\u{1f3fe}\u200d\u{1faf2}\u{1f3fb}'], + ['\u{1faf1}\u{1f3fe}\u200d\u{1faf2}\u{1f3fc}'], + ['\u{1faf1}\u{1f3fe}\u200d\u{1faf2}\u{1f3fd}'], + ['\u{1faf1}\u{1f3fe}\u200d\u{1faf2}\u{1f3ff}'], + ['\u{1faf1}\u{1f3ff}\u200d\u{1faf2}\u{1f3fb}'], + ['\u{1faf1}\u{1f3ff}\u200d\u{1faf2}\u{1f3fc}'], + ['\u{1faf1}\u{1f3ff}\u200d\u{1faf2}\u{1f3fd}'], + ['\u{1faf1}\u{1f3ff}\u200d\u{1faf2}\u{1f3fe}'], + ['\u{1f64f}'], + ['\u{1f64f}\u{1f3fb}'], + ['\u{1f64f}\u{1f3fc}'], + ['\u{1f64f}\u{1f3fd}'], + ['\u{1f64f}\u{1f3fe}'], + ['\u{1f64f}\u{1f3ff}'], + ['\u270d\ufe0f'], + ['\u270d'], + ['\u270d\u{1f3fb}'], + ['\u270d\u{1f3fc}'], + ['\u270d\u{1f3fd}'], + ['\u270d\u{1f3fe}'], + ['\u270d\u{1f3ff}'], + ['\u{1f485}'], + ['\u{1f485}\u{1f3fb}'], + ['\u{1f485}\u{1f3fc}'], + ['\u{1f485}\u{1f3fd}'], + ['\u{1f485}\u{1f3fe}'], + ['\u{1f485}\u{1f3ff}'], + ['\u{1f933}'], + ['\u{1f933}\u{1f3fb}'], + ['\u{1f933}\u{1f3fc}'], + ['\u{1f933}\u{1f3fd}'], + ['\u{1f933}\u{1f3fe}'], + ['\u{1f933}\u{1f3ff}'], + ['\u{1f4aa}'], + ['\u{1f4aa}\u{1f3fb}'], + ['\u{1f4aa}\u{1f3fc}'], + ['\u{1f4aa}\u{1f3fd}'], + ['\u{1f4aa}\u{1f3fe}'], + ['\u{1f4aa}\u{1f3ff}'], + ['\u{1f9be}'], + ['\u{1f9bf}'], + ['\u{1f9b5}'], + ['\u{1f9b5}\u{1f3fb}'], + ['\u{1f9b5}\u{1f3fc}'], + ['\u{1f9b5}\u{1f3fd}'], + ['\u{1f9b5}\u{1f3fe}'], + ['\u{1f9b5}\u{1f3ff}'], + ['\u{1f9b6}'], + ['\u{1f9b6}\u{1f3fb}'], + ['\u{1f9b6}\u{1f3fc}'], + ['\u{1f9b6}\u{1f3fd}'], + ['\u{1f9b6}\u{1f3fe}'], + ['\u{1f9b6}\u{1f3ff}'], + ['\u{1f442}'], + ['\u{1f442}\u{1f3fb}'], + ['\u{1f442}\u{1f3fc}'], + ['\u{1f442}\u{1f3fd}'], + ['\u{1f442}\u{1f3fe}'], + ['\u{1f442}\u{1f3ff}'], + ['\u{1f9bb}'], + ['\u{1f9bb}\u{1f3fb}'], + ['\u{1f9bb}\u{1f3fc}'], + ['\u{1f9bb}\u{1f3fd}'], + ['\u{1f9bb}\u{1f3fe}'], + ['\u{1f9bb}\u{1f3ff}'], + ['\u{1f443}'], + ['\u{1f443}\u{1f3fb}'], + ['\u{1f443}\u{1f3fc}'], + ['\u{1f443}\u{1f3fd}'], + ['\u{1f443}\u{1f3fe}'], + ['\u{1f443}\u{1f3ff}'], + ['\u{1f9e0}'], + ['\u{1fac0}'], + ['\u{1fac1}'], + ['\u{1f9b7}'], + ['\u{1f9b4}'], + ['\u{1f440}'], + ['\u{1f441}\ufe0f'], + ['\u{1f441}'], + ['\u{1f445}'], + ['\u{1f444}'], + ['\u{1fae6}'], + ['\u{1f476}'], + ['\u{1f476}\u{1f3fb}'], + ['\u{1f476}\u{1f3fc}'], + ['\u{1f476}\u{1f3fd}'], + ['\u{1f476}\u{1f3fe}'], + ['\u{1f476}\u{1f3ff}'], + ['\u{1f9d2}'], + ['\u{1f9d2}\u{1f3fb}'], + ['\u{1f9d2}\u{1f3fc}'], + ['\u{1f9d2}\u{1f3fd}'], + ['\u{1f9d2}\u{1f3fe}'], + ['\u{1f9d2}\u{1f3ff}'], + ['\u{1f466}'], + ['\u{1f466}\u{1f3fb}'], + ['\u{1f466}\u{1f3fc}'], + ['\u{1f466}\u{1f3fd}'], + ['\u{1f466}\u{1f3fe}'], + ['\u{1f466}\u{1f3ff}'], + ['\u{1f467}'], + ['\u{1f467}\u{1f3fb}'], + ['\u{1f467}\u{1f3fc}'], + ['\u{1f467}\u{1f3fd}'], + ['\u{1f467}\u{1f3fe}'], + ['\u{1f467}\u{1f3ff}'], + ['\u{1f9d1}'], + ['\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3ff}'], + ['\u{1f471}'], + ['\u{1f471}\u{1f3fb}'], + ['\u{1f471}\u{1f3fc}'], + ['\u{1f471}\u{1f3fd}'], + ['\u{1f471}\u{1f3fe}'], + ['\u{1f471}\u{1f3ff}'], + ['\u{1f468}'], + ['\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3ff}'], + ['\u{1f9d4}'], + ['\u{1f9d4}\u{1f3fb}'], + ['\u{1f9d4}\u{1f3fc}'], + ['\u{1f9d4}\u{1f3fd}'], + ['\u{1f9d4}\u{1f3fe}'], + ['\u{1f9d4}\u{1f3ff}'], + ['\u{1f9d4}\u200d\u2642\ufe0f'], + ['\u{1f9d4}\u200d\u2642'], + ['\u{1f9d4}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9d4}\u{1f3fb}\u200d\u2642'], + ['\u{1f9d4}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9d4}\u{1f3fc}\u200d\u2642'], + ['\u{1f9d4}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9d4}\u{1f3fd}\u200d\u2642'], + ['\u{1f9d4}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9d4}\u{1f3fe}\u200d\u2642'], + ['\u{1f9d4}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9d4}\u{1f3ff}\u200d\u2642'], + ['\u{1f9d4}\u200d\u2640\ufe0f'], + ['\u{1f9d4}\u200d\u2640'], + ['\u{1f9d4}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9d4}\u{1f3fb}\u200d\u2640'], + ['\u{1f9d4}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9d4}\u{1f3fc}\u200d\u2640'], + ['\u{1f9d4}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9d4}\u{1f3fd}\u200d\u2640'], + ['\u{1f9d4}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9d4}\u{1f3fe}\u200d\u2640'], + ['\u{1f9d4}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9d4}\u{1f3ff}\u200d\u2640'], + ['\u{1f468}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9b0}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9b0}'], + ['\u{1f468}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9b1}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9b1}'], + ['\u{1f468}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9b3}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9b3}'], + ['\u{1f468}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9b2}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9b2}'], + ['\u{1f469}'], + ['\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9b0}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9b0}'], + ['\u{1f9d1}\u200d\u{1f9b0}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f9b0}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f9b0}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f9b0}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f9b0}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f9b0}'], + ['\u{1f469}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9b1}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9b1}'], + ['\u{1f9d1}\u200d\u{1f9b1}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f9b1}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f9b1}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f9b1}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f9b1}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f9b1}'], + ['\u{1f469}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9b3}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9b3}'], + ['\u{1f9d1}\u200d\u{1f9b3}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f9b3}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f9b3}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f9b3}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f9b3}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f9b3}'], + ['\u{1f469}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9b2}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9b2}'], + ['\u{1f9d1}\u200d\u{1f9b2}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f9b2}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f9b2}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f9b2}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f9b2}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f9b2}'], + ['\u{1f471}\u200d\u2640\ufe0f'], + ['\u{1f471}\u200d\u2640'], + ['\u{1f471}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3fb}\u200d\u2640'], + ['\u{1f471}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3fc}\u200d\u2640'], + ['\u{1f471}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3fd}\u200d\u2640'], + ['\u{1f471}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3fe}\u200d\u2640'], + ['\u{1f471}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f471}\u{1f3ff}\u200d\u2640'], + ['\u{1f471}\u200d\u2642\ufe0f'], + ['\u{1f471}\u200d\u2642'], + ['\u{1f471}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3fb}\u200d\u2642'], + ['\u{1f471}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3fc}\u200d\u2642'], + ['\u{1f471}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3fd}\u200d\u2642'], + ['\u{1f471}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3fe}\u200d\u2642'], + ['\u{1f471}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f471}\u{1f3ff}\u200d\u2642'], + ['\u{1f9d3}'], + ['\u{1f9d3}\u{1f3fb}'], + ['\u{1f9d3}\u{1f3fc}'], + ['\u{1f9d3}\u{1f3fd}'], + ['\u{1f9d3}\u{1f3fe}'], + ['\u{1f9d3}\u{1f3ff}'], + ['\u{1f474}'], + ['\u{1f474}\u{1f3fb}'], + ['\u{1f474}\u{1f3fc}'], + ['\u{1f474}\u{1f3fd}'], + ['\u{1f474}\u{1f3fe}'], + ['\u{1f474}\u{1f3ff}'], + ['\u{1f475}'], + ['\u{1f475}\u{1f3fb}'], + ['\u{1f475}\u{1f3fc}'], + ['\u{1f475}\u{1f3fd}'], + ['\u{1f475}\u{1f3fe}'], + ['\u{1f475}\u{1f3ff}'], ['\u{1f64d}'], ['\u{1f64d}\u{1f3fb}'], ['\u{1f64d}\u{1f3fc}'], @@ -1799,6 +1498,36 @@ const List> emojis = [ ['\u{1f64b}\u{1f3fe}\u200d\u2640'], ['\u{1f64b}\u{1f3ff}\u200d\u2640\ufe0f'], ['\u{1f64b}\u{1f3ff}\u200d\u2640'], + ['\u{1f9cf}'], + ['\u{1f9cf}\u{1f3fb}'], + ['\u{1f9cf}\u{1f3fc}'], + ['\u{1f9cf}\u{1f3fd}'], + ['\u{1f9cf}\u{1f3fe}'], + ['\u{1f9cf}\u{1f3ff}'], + ['\u{1f9cf}\u200d\u2642\ufe0f'], + ['\u{1f9cf}\u200d\u2642'], + ['\u{1f9cf}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9cf}\u{1f3fb}\u200d\u2642'], + ['\u{1f9cf}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9cf}\u{1f3fc}\u200d\u2642'], + ['\u{1f9cf}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9cf}\u{1f3fd}\u200d\u2642'], + ['\u{1f9cf}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9cf}\u{1f3fe}\u200d\u2642'], + ['\u{1f9cf}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9cf}\u{1f3ff}\u200d\u2642'], + ['\u{1f9cf}\u200d\u2640\ufe0f'], + ['\u{1f9cf}\u200d\u2640'], + ['\u{1f9cf}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9cf}\u{1f3fb}\u200d\u2640'], + ['\u{1f9cf}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9cf}\u{1f3fc}\u200d\u2640'], + ['\u{1f9cf}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9cf}\u{1f3fd}\u200d\u2640'], + ['\u{1f9cf}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9cf}\u{1f3fe}\u200d\u2640'], + ['\u{1f9cf}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9cf}\u{1f3ff}\u200d\u2640'], ['\u{1f647}'], ['\u{1f647}\u{1f3fb}'], ['\u{1f647}\u{1f3fc}'], @@ -1889,6 +1618,886 @@ const List> emojis = [ ['\u{1f937}\u{1f3fe}\u200d\u2640'], ['\u{1f937}\u{1f3ff}\u200d\u2640\ufe0f'], ['\u{1f937}\u{1f3ff}\u200d\u2640'], + ['\u{1f9d1}\u200d\u2695\ufe0f'], + ['\u{1f9d1}\u200d\u2695'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2695\ufe0f'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2695'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2695\ufe0f'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2695'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2695\ufe0f'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2695'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2695\ufe0f'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2695'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2695\ufe0f'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2695'], + ['\u{1f468}\u200d\u2695\ufe0f'], + ['\u{1f468}\u200d\u2695'], + ['\u{1f468}\u{1f3fb}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3fb}\u200d\u2695'], + ['\u{1f468}\u{1f3fc}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3fc}\u200d\u2695'], + ['\u{1f468}\u{1f3fd}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3fd}\u200d\u2695'], + ['\u{1f468}\u{1f3fe}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3fe}\u200d\u2695'], + ['\u{1f468}\u{1f3ff}\u200d\u2695\ufe0f'], + ['\u{1f468}\u{1f3ff}\u200d\u2695'], + ['\u{1f469}\u200d\u2695\ufe0f'], + ['\u{1f469}\u200d\u2695'], + ['\u{1f469}\u{1f3fb}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3fb}\u200d\u2695'], + ['\u{1f469}\u{1f3fc}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3fc}\u200d\u2695'], + ['\u{1f469}\u{1f3fd}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3fd}\u200d\u2695'], + ['\u{1f469}\u{1f3fe}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3fe}\u200d\u2695'], + ['\u{1f469}\u{1f3ff}\u200d\u2695\ufe0f'], + ['\u{1f469}\u{1f3ff}\u200d\u2695'], + ['\u{1f9d1}\u200d\u{1f393}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f393}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f393}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f393}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f393}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f393}'], + ['\u{1f468}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f393}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f393}'], + ['\u{1f469}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f393}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f393}'], + ['\u{1f9d1}\u200d\u{1f3eb}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f3eb}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f3eb}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f3eb}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f3eb}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f3eb}'], + ['\u{1f468}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f3eb}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f3eb}'], + ['\u{1f469}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f3eb}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f3eb}'], + ['\u{1f9d1}\u200d\u2696\ufe0f'], + ['\u{1f9d1}\u200d\u2696'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2696\ufe0f'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2696'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2696\ufe0f'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2696'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2696\ufe0f'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2696'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2696\ufe0f'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2696'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2696\ufe0f'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2696'], + ['\u{1f468}\u200d\u2696\ufe0f'], + ['\u{1f468}\u200d\u2696'], + ['\u{1f468}\u{1f3fb}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3fb}\u200d\u2696'], + ['\u{1f468}\u{1f3fc}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3fc}\u200d\u2696'], + ['\u{1f468}\u{1f3fd}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3fd}\u200d\u2696'], + ['\u{1f468}\u{1f3fe}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3fe}\u200d\u2696'], + ['\u{1f468}\u{1f3ff}\u200d\u2696\ufe0f'], + ['\u{1f468}\u{1f3ff}\u200d\u2696'], + ['\u{1f469}\u200d\u2696\ufe0f'], + ['\u{1f469}\u200d\u2696'], + ['\u{1f469}\u{1f3fb}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3fb}\u200d\u2696'], + ['\u{1f469}\u{1f3fc}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3fc}\u200d\u2696'], + ['\u{1f469}\u{1f3fd}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3fd}\u200d\u2696'], + ['\u{1f469}\u{1f3fe}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3fe}\u200d\u2696'], + ['\u{1f469}\u{1f3ff}\u200d\u2696\ufe0f'], + ['\u{1f469}\u{1f3ff}\u200d\u2696'], + ['\u{1f9d1}\u200d\u{1f33e}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f33e}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f33e}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f33e}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f33e}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f33e}'], + ['\u{1f468}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f33e}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f33e}'], + ['\u{1f469}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f33e}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f33e}'], + ['\u{1f9d1}\u200d\u{1f373}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f373}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f373}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f373}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f373}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f373}'], + ['\u{1f468}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f373}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f373}'], + ['\u{1f469}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f373}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f373}'], + ['\u{1f9d1}\u200d\u{1f527}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f527}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f527}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f527}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f527}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f527}'], + ['\u{1f468}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f527}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f527}'], + ['\u{1f469}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f527}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f527}'], + ['\u{1f9d1}\u200d\u{1f3ed}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f3ed}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f3ed}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f3ed}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f3ed}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f3ed}'], + ['\u{1f468}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f3ed}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f3ed}'], + ['\u{1f469}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f3ed}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f3ed}'], + ['\u{1f9d1}\u200d\u{1f4bc}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f4bc}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f4bc}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f4bc}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f4bc}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f4bc}'], + ['\u{1f468}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f4bc}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f4bc}'], + ['\u{1f469}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f4bc}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f4bc}'], + ['\u{1f9d1}\u200d\u{1f52c}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f52c}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f52c}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f52c}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f52c}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f52c}'], + ['\u{1f468}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f52c}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f52c}'], + ['\u{1f469}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f52c}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f52c}'], + ['\u{1f9d1}\u200d\u{1f4bb}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f4bb}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f4bb}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f4bb}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f4bb}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f4bb}'], + ['\u{1f468}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f4bb}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f4bb}'], + ['\u{1f469}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f4bb}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f4bb}'], + ['\u{1f9d1}\u200d\u{1f3a4}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f3a4}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f3a4}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f3a4}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f3a4}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f3a4}'], + ['\u{1f468}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f3a4}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f3a4}'], + ['\u{1f469}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f3a4}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f3a4}'], + ['\u{1f9d1}\u200d\u{1f3a8}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f3a8}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f3a8}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f3a8}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f3a8}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f3a8}'], + ['\u{1f468}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f3a8}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f3a8}'], + ['\u{1f469}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f3a8}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f3a8}'], + ['\u{1f9d1}\u200d\u2708\ufe0f'], + ['\u{1f9d1}\u200d\u2708'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2708\ufe0f'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2708'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2708\ufe0f'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2708'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2708\ufe0f'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2708'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2708\ufe0f'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2708'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2708\ufe0f'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2708'], + ['\u{1f468}\u200d\u2708\ufe0f'], + ['\u{1f468}\u200d\u2708'], + ['\u{1f468}\u{1f3fb}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3fb}\u200d\u2708'], + ['\u{1f468}\u{1f3fc}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3fc}\u200d\u2708'], + ['\u{1f468}\u{1f3fd}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3fd}\u200d\u2708'], + ['\u{1f468}\u{1f3fe}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3fe}\u200d\u2708'], + ['\u{1f468}\u{1f3ff}\u200d\u2708\ufe0f'], + ['\u{1f468}\u{1f3ff}\u200d\u2708'], + ['\u{1f469}\u200d\u2708\ufe0f'], + ['\u{1f469}\u200d\u2708'], + ['\u{1f469}\u{1f3fb}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3fb}\u200d\u2708'], + ['\u{1f469}\u{1f3fc}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3fc}\u200d\u2708'], + ['\u{1f469}\u{1f3fd}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3fd}\u200d\u2708'], + ['\u{1f469}\u{1f3fe}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3fe}\u200d\u2708'], + ['\u{1f469}\u{1f3ff}\u200d\u2708\ufe0f'], + ['\u{1f469}\u{1f3ff}\u200d\u2708'], + ['\u{1f9d1}\u200d\u{1f680}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f680}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f680}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f680}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f680}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f680}'], + ['\u{1f468}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f680}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f680}'], + ['\u{1f469}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f680}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f680}'], + ['\u{1f9d1}\u200d\u{1f692}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f692}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f692}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f692}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f692}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f692}'], + ['\u{1f468}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f692}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f692}'], + ['\u{1f469}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f692}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f692}'], + ['\u{1f46e}'], + ['\u{1f46e}\u{1f3fb}'], + ['\u{1f46e}\u{1f3fc}'], + ['\u{1f46e}\u{1f3fd}'], + ['\u{1f46e}\u{1f3fe}'], + ['\u{1f46e}\u{1f3ff}'], + ['\u{1f46e}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u200d\u2642'], + ['\u{1f46e}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3fb}\u200d\u2642'], + ['\u{1f46e}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3fc}\u200d\u2642'], + ['\u{1f46e}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3fd}\u200d\u2642'], + ['\u{1f46e}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3fe}\u200d\u2642'], + ['\u{1f46e}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f46e}\u{1f3ff}\u200d\u2642'], + ['\u{1f46e}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u200d\u2640'], + ['\u{1f46e}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3fb}\u200d\u2640'], + ['\u{1f46e}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3fc}\u200d\u2640'], + ['\u{1f46e}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3fd}\u200d\u2640'], + ['\u{1f46e}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3fe}\u200d\u2640'], + ['\u{1f46e}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f46e}\u{1f3ff}\u200d\u2640'], + ['\u{1f575}\ufe0f'], + ['\u{1f575}'], + ['\u{1f575}\u{1f3fb}'], + ['\u{1f575}\u{1f3fc}'], + ['\u{1f575}\u{1f3fd}'], + ['\u{1f575}\u{1f3fe}'], + ['\u{1f575}\u{1f3ff}'], + ['\u{1f575}\ufe0f\u200d\u2642\ufe0f'], + ['\u{1f575}\u200d\u2642\ufe0f'], + ['\u{1f575}\ufe0f\u200d\u2642'], + ['\u{1f575}\u200d\u2642'], + ['\u{1f575}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3fb}\u200d\u2642'], + ['\u{1f575}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3fc}\u200d\u2642'], + ['\u{1f575}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3fd}\u200d\u2642'], + ['\u{1f575}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3fe}\u200d\u2642'], + ['\u{1f575}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f575}\u{1f3ff}\u200d\u2642'], + ['\u{1f575}\ufe0f\u200d\u2640\ufe0f'], + ['\u{1f575}\u200d\u2640\ufe0f'], + ['\u{1f575}\ufe0f\u200d\u2640'], + ['\u{1f575}\u200d\u2640'], + ['\u{1f575}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3fb}\u200d\u2640'], + ['\u{1f575}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3fc}\u200d\u2640'], + ['\u{1f575}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3fd}\u200d\u2640'], + ['\u{1f575}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3fe}\u200d\u2640'], + ['\u{1f575}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f575}\u{1f3ff}\u200d\u2640'], + ['\u{1f482}'], + ['\u{1f482}\u{1f3fb}'], + ['\u{1f482}\u{1f3fc}'], + ['\u{1f482}\u{1f3fd}'], + ['\u{1f482}\u{1f3fe}'], + ['\u{1f482}\u{1f3ff}'], + ['\u{1f482}\u200d\u2642\ufe0f'], + ['\u{1f482}\u200d\u2642'], + ['\u{1f482}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3fb}\u200d\u2642'], + ['\u{1f482}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3fc}\u200d\u2642'], + ['\u{1f482}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3fd}\u200d\u2642'], + ['\u{1f482}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3fe}\u200d\u2642'], + ['\u{1f482}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f482}\u{1f3ff}\u200d\u2642'], + ['\u{1f482}\u200d\u2640\ufe0f'], + ['\u{1f482}\u200d\u2640'], + ['\u{1f482}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3fb}\u200d\u2640'], + ['\u{1f482}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3fc}\u200d\u2640'], + ['\u{1f482}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3fd}\u200d\u2640'], + ['\u{1f482}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3fe}\u200d\u2640'], + ['\u{1f482}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f482}\u{1f3ff}\u200d\u2640'], + ['\u{1f977}'], + ['\u{1f977}\u{1f3fb}'], + ['\u{1f977}\u{1f3fc}'], + ['\u{1f977}\u{1f3fd}'], + ['\u{1f977}\u{1f3fe}'], + ['\u{1f977}\u{1f3ff}'], + ['\u{1f477}'], + ['\u{1f477}\u{1f3fb}'], + ['\u{1f477}\u{1f3fc}'], + ['\u{1f477}\u{1f3fd}'], + ['\u{1f477}\u{1f3fe}'], + ['\u{1f477}\u{1f3ff}'], + ['\u{1f477}\u200d\u2642\ufe0f'], + ['\u{1f477}\u200d\u2642'], + ['\u{1f477}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3fb}\u200d\u2642'], + ['\u{1f477}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3fc}\u200d\u2642'], + ['\u{1f477}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3fd}\u200d\u2642'], + ['\u{1f477}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3fe}\u200d\u2642'], + ['\u{1f477}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f477}\u{1f3ff}\u200d\u2642'], + ['\u{1f477}\u200d\u2640\ufe0f'], + ['\u{1f477}\u200d\u2640'], + ['\u{1f477}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3fb}\u200d\u2640'], + ['\u{1f477}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3fc}\u200d\u2640'], + ['\u{1f477}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3fd}\u200d\u2640'], + ['\u{1f477}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3fe}\u200d\u2640'], + ['\u{1f477}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f477}\u{1f3ff}\u200d\u2640'], + ['\u{1fac5}'], + ['\u{1fac5}\u{1f3fb}'], + ['\u{1fac5}\u{1f3fc}'], + ['\u{1fac5}\u{1f3fd}'], + ['\u{1fac5}\u{1f3fe}'], + ['\u{1fac5}\u{1f3ff}'], + ['\u{1f934}'], + ['\u{1f934}\u{1f3fb}'], + ['\u{1f934}\u{1f3fc}'], + ['\u{1f934}\u{1f3fd}'], + ['\u{1f934}\u{1f3fe}'], + ['\u{1f934}\u{1f3ff}'], + ['\u{1f478}'], + ['\u{1f478}\u{1f3fb}'], + ['\u{1f478}\u{1f3fc}'], + ['\u{1f478}\u{1f3fd}'], + ['\u{1f478}\u{1f3fe}'], + ['\u{1f478}\u{1f3ff}'], + ['\u{1f473}'], + ['\u{1f473}\u{1f3fb}'], + ['\u{1f473}\u{1f3fc}'], + ['\u{1f473}\u{1f3fd}'], + ['\u{1f473}\u{1f3fe}'], + ['\u{1f473}\u{1f3ff}'], + ['\u{1f473}\u200d\u2642\ufe0f'], + ['\u{1f473}\u200d\u2642'], + ['\u{1f473}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3fb}\u200d\u2642'], + ['\u{1f473}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3fc}\u200d\u2642'], + ['\u{1f473}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3fd}\u200d\u2642'], + ['\u{1f473}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3fe}\u200d\u2642'], + ['\u{1f473}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f473}\u{1f3ff}\u200d\u2642'], + ['\u{1f473}\u200d\u2640\ufe0f'], + ['\u{1f473}\u200d\u2640'], + ['\u{1f473}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3fb}\u200d\u2640'], + ['\u{1f473}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3fc}\u200d\u2640'], + ['\u{1f473}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3fd}\u200d\u2640'], + ['\u{1f473}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3fe}\u200d\u2640'], + ['\u{1f473}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f473}\u{1f3ff}\u200d\u2640'], + ['\u{1f472}'], + ['\u{1f472}\u{1f3fb}'], + ['\u{1f472}\u{1f3fc}'], + ['\u{1f472}\u{1f3fd}'], + ['\u{1f472}\u{1f3fe}'], + ['\u{1f472}\u{1f3ff}'], + ['\u{1f9d5}'], + ['\u{1f9d5}\u{1f3fb}'], + ['\u{1f9d5}\u{1f3fc}'], + ['\u{1f9d5}\u{1f3fd}'], + ['\u{1f9d5}\u{1f3fe}'], + ['\u{1f9d5}\u{1f3ff}'], + ['\u{1f935}'], + ['\u{1f935}\u{1f3fb}'], + ['\u{1f935}\u{1f3fc}'], + ['\u{1f935}\u{1f3fd}'], + ['\u{1f935}\u{1f3fe}'], + ['\u{1f935}\u{1f3ff}'], + ['\u{1f935}\u200d\u2642\ufe0f'], + ['\u{1f935}\u200d\u2642'], + ['\u{1f935}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f935}\u{1f3fb}\u200d\u2642'], + ['\u{1f935}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f935}\u{1f3fc}\u200d\u2642'], + ['\u{1f935}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f935}\u{1f3fd}\u200d\u2642'], + ['\u{1f935}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f935}\u{1f3fe}\u200d\u2642'], + ['\u{1f935}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f935}\u{1f3ff}\u200d\u2642'], + ['\u{1f935}\u200d\u2640\ufe0f'], + ['\u{1f935}\u200d\u2640'], + ['\u{1f935}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f935}\u{1f3fb}\u200d\u2640'], + ['\u{1f935}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f935}\u{1f3fc}\u200d\u2640'], + ['\u{1f935}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f935}\u{1f3fd}\u200d\u2640'], + ['\u{1f935}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f935}\u{1f3fe}\u200d\u2640'], + ['\u{1f935}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f935}\u{1f3ff}\u200d\u2640'], + ['\u{1f470}'], + ['\u{1f470}\u{1f3fb}'], + ['\u{1f470}\u{1f3fc}'], + ['\u{1f470}\u{1f3fd}'], + ['\u{1f470}\u{1f3fe}'], + ['\u{1f470}\u{1f3ff}'], + ['\u{1f470}\u200d\u2642\ufe0f'], + ['\u{1f470}\u200d\u2642'], + ['\u{1f470}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f470}\u{1f3fb}\u200d\u2642'], + ['\u{1f470}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f470}\u{1f3fc}\u200d\u2642'], + ['\u{1f470}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f470}\u{1f3fd}\u200d\u2642'], + ['\u{1f470}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f470}\u{1f3fe}\u200d\u2642'], + ['\u{1f470}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f470}\u{1f3ff}\u200d\u2642'], + ['\u{1f470}\u200d\u2640\ufe0f'], + ['\u{1f470}\u200d\u2640'], + ['\u{1f470}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f470}\u{1f3fb}\u200d\u2640'], + ['\u{1f470}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f470}\u{1f3fc}\u200d\u2640'], + ['\u{1f470}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f470}\u{1f3fd}\u200d\u2640'], + ['\u{1f470}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f470}\u{1f3fe}\u200d\u2640'], + ['\u{1f470}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f470}\u{1f3ff}\u200d\u2640'], + ['\u{1f930}'], + ['\u{1f930}\u{1f3fb}'], + ['\u{1f930}\u{1f3fc}'], + ['\u{1f930}\u{1f3fd}'], + ['\u{1f930}\u{1f3fe}'], + ['\u{1f930}\u{1f3ff}'], + ['\u{1fac3}'], + ['\u{1fac3}\u{1f3fb}'], + ['\u{1fac3}\u{1f3fc}'], + ['\u{1fac3}\u{1f3fd}'], + ['\u{1fac3}\u{1f3fe}'], + ['\u{1fac3}\u{1f3ff}'], + ['\u{1fac4}'], + ['\u{1fac4}\u{1f3fb}'], + ['\u{1fac4}\u{1f3fc}'], + ['\u{1fac4}\u{1f3fd}'], + ['\u{1fac4}\u{1f3fe}'], + ['\u{1fac4}\u{1f3ff}'], + ['\u{1f931}'], + ['\u{1f931}\u{1f3fb}'], + ['\u{1f931}\u{1f3fc}'], + ['\u{1f931}\u{1f3fd}'], + ['\u{1f931}\u{1f3fe}'], + ['\u{1f931}\u{1f3ff}'], + ['\u{1f469}\u200d\u{1f37c}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f37c}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f37c}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f37c}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f37c}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f37c}'], + ['\u{1f468}\u200d\u{1f37c}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f37c}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f37c}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f37c}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f37c}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f37c}'], + ['\u{1f9d1}\u200d\u{1f37c}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f37c}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f37c}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f37c}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f37c}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f37c}'], + ['\u{1f47c}'], + ['\u{1f47c}\u{1f3fb}'], + ['\u{1f47c}\u{1f3fc}'], + ['\u{1f47c}\u{1f3fd}'], + ['\u{1f47c}\u{1f3fe}'], + ['\u{1f47c}\u{1f3ff}'], + ['\u{1f385}'], + ['\u{1f385}\u{1f3fb}'], + ['\u{1f385}\u{1f3fc}'], + ['\u{1f385}\u{1f3fd}'], + ['\u{1f385}\u{1f3fe}'], + ['\u{1f385}\u{1f3ff}'], + ['\u{1f936}'], + ['\u{1f936}\u{1f3fb}'], + ['\u{1f936}\u{1f3fc}'], + ['\u{1f936}\u{1f3fd}'], + ['\u{1f936}\u{1f3fe}'], + ['\u{1f936}\u{1f3ff}'], + ['\u{1f9d1}\u200d\u{1f384}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f384}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f384}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f384}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f384}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f384}'], + ['\u{1f9b8}'], + ['\u{1f9b8}\u{1f3fb}'], + ['\u{1f9b8}\u{1f3fc}'], + ['\u{1f9b8}\u{1f3fd}'], + ['\u{1f9b8}\u{1f3fe}'], + ['\u{1f9b8}\u{1f3ff}'], + ['\u{1f9b8}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u200d\u2642'], + ['\u{1f9b8}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3fb}\u200d\u2642'], + ['\u{1f9b8}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3fc}\u200d\u2642'], + ['\u{1f9b8}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3fd}\u200d\u2642'], + ['\u{1f9b8}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3fe}\u200d\u2642'], + ['\u{1f9b8}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9b8}\u{1f3ff}\u200d\u2642'], + ['\u{1f9b8}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u200d\u2640'], + ['\u{1f9b8}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3fb}\u200d\u2640'], + ['\u{1f9b8}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3fc}\u200d\u2640'], + ['\u{1f9b8}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3fd}\u200d\u2640'], + ['\u{1f9b8}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3fe}\u200d\u2640'], + ['\u{1f9b8}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9b8}\u{1f3ff}\u200d\u2640'], + ['\u{1f9b9}'], + ['\u{1f9b9}\u{1f3fb}'], + ['\u{1f9b9}\u{1f3fc}'], + ['\u{1f9b9}\u{1f3fd}'], + ['\u{1f9b9}\u{1f3fe}'], + ['\u{1f9b9}\u{1f3ff}'], + ['\u{1f9b9}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u200d\u2642'], + ['\u{1f9b9}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3fb}\u200d\u2642'], + ['\u{1f9b9}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3fc}\u200d\u2642'], + ['\u{1f9b9}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3fd}\u200d\u2642'], + ['\u{1f9b9}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3fe}\u200d\u2642'], + ['\u{1f9b9}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9b9}\u{1f3ff}\u200d\u2642'], + ['\u{1f9b9}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u200d\u2640'], + ['\u{1f9b9}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3fb}\u200d\u2640'], + ['\u{1f9b9}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3fc}\u200d\u2640'], + ['\u{1f9b9}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3fd}\u200d\u2640'], + ['\u{1f9b9}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3fe}\u200d\u2640'], + ['\u{1f9b9}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9b9}\u{1f3ff}\u200d\u2640'], + ['\u{1f9d9}'], + ['\u{1f9d9}\u{1f3fb}'], + ['\u{1f9d9}\u{1f3fc}'], + ['\u{1f9d9}\u{1f3fd}'], + ['\u{1f9d9}\u{1f3fe}'], + ['\u{1f9d9}\u{1f3ff}'], + ['\u{1f9d9}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u200d\u2642'], + ['\u{1f9d9}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3fb}\u200d\u2642'], + ['\u{1f9d9}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3fc}\u200d\u2642'], + ['\u{1f9d9}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3fd}\u200d\u2642'], + ['\u{1f9d9}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3fe}\u200d\u2642'], + ['\u{1f9d9}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9d9}\u{1f3ff}\u200d\u2642'], + ['\u{1f9d9}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u200d\u2640'], + ['\u{1f9d9}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3fb}\u200d\u2640'], + ['\u{1f9d9}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3fc}\u200d\u2640'], + ['\u{1f9d9}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3fd}\u200d\u2640'], + ['\u{1f9d9}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3fe}\u200d\u2640'], + ['\u{1f9d9}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9d9}\u{1f3ff}\u200d\u2640'], + ['\u{1f9da}'], + ['\u{1f9da}\u{1f3fb}'], + ['\u{1f9da}\u{1f3fc}'], + ['\u{1f9da}\u{1f3fd}'], + ['\u{1f9da}\u{1f3fe}'], + ['\u{1f9da}\u{1f3ff}'], + ['\u{1f9da}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u200d\u2642'], + ['\u{1f9da}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3fb}\u200d\u2642'], + ['\u{1f9da}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3fc}\u200d\u2642'], + ['\u{1f9da}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3fd}\u200d\u2642'], + ['\u{1f9da}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3fe}\u200d\u2642'], + ['\u{1f9da}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9da}\u{1f3ff}\u200d\u2642'], + ['\u{1f9da}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u200d\u2640'], + ['\u{1f9da}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3fb}\u200d\u2640'], + ['\u{1f9da}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3fc}\u200d\u2640'], + ['\u{1f9da}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3fd}\u200d\u2640'], + ['\u{1f9da}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3fe}\u200d\u2640'], + ['\u{1f9da}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9da}\u{1f3ff}\u200d\u2640'], + ['\u{1f9db}'], + ['\u{1f9db}\u{1f3fb}'], + ['\u{1f9db}\u{1f3fc}'], + ['\u{1f9db}\u{1f3fd}'], + ['\u{1f9db}\u{1f3fe}'], + ['\u{1f9db}\u{1f3ff}'], + ['\u{1f9db}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u200d\u2642'], + ['\u{1f9db}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3fb}\u200d\u2642'], + ['\u{1f9db}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3fc}\u200d\u2642'], + ['\u{1f9db}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3fd}\u200d\u2642'], + ['\u{1f9db}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3fe}\u200d\u2642'], + ['\u{1f9db}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9db}\u{1f3ff}\u200d\u2642'], + ['\u{1f9db}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u200d\u2640'], + ['\u{1f9db}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3fb}\u200d\u2640'], + ['\u{1f9db}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3fc}\u200d\u2640'], + ['\u{1f9db}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3fd}\u200d\u2640'], + ['\u{1f9db}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3fe}\u200d\u2640'], + ['\u{1f9db}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9db}\u{1f3ff}\u200d\u2640'], + ['\u{1f9dc}'], + ['\u{1f9dc}\u{1f3fb}'], + ['\u{1f9dc}\u{1f3fc}'], + ['\u{1f9dc}\u{1f3fd}'], + ['\u{1f9dc}\u{1f3fe}'], + ['\u{1f9dc}\u{1f3ff}'], + ['\u{1f9dc}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u200d\u2642'], + ['\u{1f9dc}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3fb}\u200d\u2642'], + ['\u{1f9dc}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3fc}\u200d\u2642'], + ['\u{1f9dc}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3fd}\u200d\u2642'], + ['\u{1f9dc}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3fe}\u200d\u2642'], + ['\u{1f9dc}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9dc}\u{1f3ff}\u200d\u2642'], + ['\u{1f9dc}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u200d\u2640'], + ['\u{1f9dc}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3fb}\u200d\u2640'], + ['\u{1f9dc}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3fc}\u200d\u2640'], + ['\u{1f9dc}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3fd}\u200d\u2640'], + ['\u{1f9dc}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3fe}\u200d\u2640'], + ['\u{1f9dc}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9dc}\u{1f3ff}\u200d\u2640'], + ['\u{1f9dd}'], + ['\u{1f9dd}\u{1f3fb}'], + ['\u{1f9dd}\u{1f3fc}'], + ['\u{1f9dd}\u{1f3fd}'], + ['\u{1f9dd}\u{1f3fe}'], + ['\u{1f9dd}\u{1f3ff}'], + ['\u{1f9dd}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u200d\u2642'], + ['\u{1f9dd}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3fb}\u200d\u2642'], + ['\u{1f9dd}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3fc}\u200d\u2642'], + ['\u{1f9dd}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3fd}\u200d\u2642'], + ['\u{1f9dd}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3fe}\u200d\u2642'], + ['\u{1f9dd}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9dd}\u{1f3ff}\u200d\u2642'], + ['\u{1f9dd}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u200d\u2640'], + ['\u{1f9dd}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3fb}\u200d\u2640'], + ['\u{1f9dd}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3fc}\u200d\u2640'], + ['\u{1f9dd}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3fd}\u200d\u2640'], + ['\u{1f9dd}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3fe}\u200d\u2640'], + ['\u{1f9dd}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9dd}\u{1f3ff}\u200d\u2640'], + ['\u{1f9de}'], + ['\u{1f9de}\u200d\u2642\ufe0f'], + ['\u{1f9de}\u200d\u2642'], + ['\u{1f9de}\u200d\u2640\ufe0f'], + ['\u{1f9de}\u200d\u2640'], + ['\u{1f9df}'], + ['\u{1f9df}\u200d\u2642\ufe0f'], + ['\u{1f9df}\u200d\u2642'], + ['\u{1f9df}\u200d\u2640\ufe0f'], + ['\u{1f9df}\u200d\u2640'], + ['\u{1f9cc}'], ['\u{1f486}'], ['\u{1f486}\u{1f3fb}'], ['\u{1f486}\u{1f3fc}'], @@ -1979,6 +2588,120 @@ const List> emojis = [ ['\u{1f6b6}\u{1f3fe}\u200d\u2640'], ['\u{1f6b6}\u{1f3ff}\u200d\u2640\ufe0f'], ['\u{1f6b6}\u{1f3ff}\u200d\u2640'], + ['\u{1f9cd}'], + ['\u{1f9cd}\u{1f3fb}'], + ['\u{1f9cd}\u{1f3fc}'], + ['\u{1f9cd}\u{1f3fd}'], + ['\u{1f9cd}\u{1f3fe}'], + ['\u{1f9cd}\u{1f3ff}'], + ['\u{1f9cd}\u200d\u2642\ufe0f'], + ['\u{1f9cd}\u200d\u2642'], + ['\u{1f9cd}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9cd}\u{1f3fb}\u200d\u2642'], + ['\u{1f9cd}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9cd}\u{1f3fc}\u200d\u2642'], + ['\u{1f9cd}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9cd}\u{1f3fd}\u200d\u2642'], + ['\u{1f9cd}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9cd}\u{1f3fe}\u200d\u2642'], + ['\u{1f9cd}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9cd}\u{1f3ff}\u200d\u2642'], + ['\u{1f9cd}\u200d\u2640\ufe0f'], + ['\u{1f9cd}\u200d\u2640'], + ['\u{1f9cd}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9cd}\u{1f3fb}\u200d\u2640'], + ['\u{1f9cd}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9cd}\u{1f3fc}\u200d\u2640'], + ['\u{1f9cd}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9cd}\u{1f3fd}\u200d\u2640'], + ['\u{1f9cd}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9cd}\u{1f3fe}\u200d\u2640'], + ['\u{1f9cd}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9cd}\u{1f3ff}\u200d\u2640'], + ['\u{1f9ce}'], + ['\u{1f9ce}\u{1f3fb}'], + ['\u{1f9ce}\u{1f3fc}'], + ['\u{1f9ce}\u{1f3fd}'], + ['\u{1f9ce}\u{1f3fe}'], + ['\u{1f9ce}\u{1f3ff}'], + ['\u{1f9ce}\u200d\u2642\ufe0f'], + ['\u{1f9ce}\u200d\u2642'], + ['\u{1f9ce}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9ce}\u{1f3fb}\u200d\u2642'], + ['\u{1f9ce}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9ce}\u{1f3fc}\u200d\u2642'], + ['\u{1f9ce}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9ce}\u{1f3fd}\u200d\u2642'], + ['\u{1f9ce}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9ce}\u{1f3fe}\u200d\u2642'], + ['\u{1f9ce}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9ce}\u{1f3ff}\u200d\u2642'], + ['\u{1f9ce}\u200d\u2640\ufe0f'], + ['\u{1f9ce}\u200d\u2640'], + ['\u{1f9ce}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9ce}\u{1f3fb}\u200d\u2640'], + ['\u{1f9ce}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9ce}\u{1f3fc}\u200d\u2640'], + ['\u{1f9ce}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9ce}\u{1f3fd}\u200d\u2640'], + ['\u{1f9ce}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9ce}\u{1f3fe}\u200d\u2640'], + ['\u{1f9ce}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9ce}\u{1f3ff}\u200d\u2640'], + ['\u{1f9d1}\u200d\u{1f9af}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f9af}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f9af}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f9af}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f9af}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f9af}'], + ['\u{1f468}\u200d\u{1f9af}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9af}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9af}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9af}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9af}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9af}'], + ['\u{1f469}\u200d\u{1f9af}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9af}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9af}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9af}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9af}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9af}'], + ['\u{1f9d1}\u200d\u{1f9bc}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f9bc}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f9bc}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f9bc}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f9bc}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f9bc}'], + ['\u{1f468}\u200d\u{1f9bc}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9bc}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9bc}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9bc}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9bc}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9bc}'], + ['\u{1f469}\u200d\u{1f9bc}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9bc}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9bc}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9bc}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9bc}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9bc}'], + ['\u{1f9d1}\u200d\u{1f9bd}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f9bd}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f9bd}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f9bd}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f9bd}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f9bd}'], + ['\u{1f468}\u200d\u{1f9bd}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f9bd}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f9bd}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f9bd}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f9bd}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f9bd}'], + ['\u{1f469}\u200d\u{1f9bd}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f9bd}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f9bd}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f9bd}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f9bd}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f9bd}'], ['\u{1f3c3}'], ['\u{1f3c3}\u{1f3fb}'], ['\u{1f3c3}\u{1f3fc}'], @@ -2021,6 +2744,13 @@ const List> emojis = [ ['\u{1f57a}\u{1f3fd}'], ['\u{1f57a}\u{1f3fe}'], ['\u{1f57a}\u{1f3ff}'], + ['\u{1f574}\ufe0f'], + ['\u{1f574}'], + ['\u{1f574}\u{1f3fb}'], + ['\u{1f574}\u{1f3fc}'], + ['\u{1f574}\u{1f3fd}'], + ['\u{1f574}\u{1f3fe}'], + ['\u{1f574}\u{1f3ff}'], ['\u{1f46f}'], ['\u{1f46f}\u200d\u2642\ufe0f'], ['\u{1f46f}\u200d\u2642'], @@ -2032,18 +2762,6 @@ const List> emojis = [ ['\u{1f9d6}\u{1f3fd}'], ['\u{1f9d6}\u{1f3fe}'], ['\u{1f9d6}\u{1f3ff}'], - ['\u{1f9d6}\u200d\u2640\ufe0f'], - ['\u{1f9d6}\u200d\u2640'], - ['\u{1f9d6}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9d6}\u{1f3fb}\u200d\u2640'], - ['\u{1f9d6}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9d6}\u{1f3fc}\u200d\u2640'], - ['\u{1f9d6}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9d6}\u{1f3fd}\u200d\u2640'], - ['\u{1f9d6}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9d6}\u{1f3fe}\u200d\u2640'], - ['\u{1f9d6}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9d6}\u{1f3ff}\u200d\u2640'], ['\u{1f9d6}\u200d\u2642\ufe0f'], ['\u{1f9d6}\u200d\u2642'], ['\u{1f9d6}\u{1f3fb}\u200d\u2642\ufe0f'], @@ -2056,24 +2774,24 @@ const List> emojis = [ ['\u{1f9d6}\u{1f3fe}\u200d\u2642'], ['\u{1f9d6}\u{1f3ff}\u200d\u2642\ufe0f'], ['\u{1f9d6}\u{1f3ff}\u200d\u2642'], + ['\u{1f9d6}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u200d\u2640'], + ['\u{1f9d6}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3fb}\u200d\u2640'], + ['\u{1f9d6}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3fc}\u200d\u2640'], + ['\u{1f9d6}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3fd}\u200d\u2640'], + ['\u{1f9d6}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3fe}\u200d\u2640'], + ['\u{1f9d6}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9d6}\u{1f3ff}\u200d\u2640'], ['\u{1f9d7}'], ['\u{1f9d7}\u{1f3fb}'], ['\u{1f9d7}\u{1f3fc}'], ['\u{1f9d7}\u{1f3fd}'], ['\u{1f9d7}\u{1f3fe}'], ['\u{1f9d7}\u{1f3ff}'], - ['\u{1f9d7}\u200d\u2640\ufe0f'], - ['\u{1f9d7}\u200d\u2640'], - ['\u{1f9d7}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9d7}\u{1f3fb}\u200d\u2640'], - ['\u{1f9d7}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9d7}\u{1f3fc}\u200d\u2640'], - ['\u{1f9d7}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9d7}\u{1f3fd}\u200d\u2640'], - ['\u{1f9d7}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9d7}\u{1f3fe}\u200d\u2640'], - ['\u{1f9d7}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9d7}\u{1f3ff}\u200d\u2640'], ['\u{1f9d7}\u200d\u2642\ufe0f'], ['\u{1f9d7}\u200d\u2642'], ['\u{1f9d7}\u{1f3fb}\u200d\u2642\ufe0f'], @@ -2086,59 +2804,18 @@ const List> emojis = [ ['\u{1f9d7}\u{1f3fe}\u200d\u2642'], ['\u{1f9d7}\u{1f3ff}\u200d\u2642\ufe0f'], ['\u{1f9d7}\u{1f3ff}\u200d\u2642'], - ['\u{1f9d8}'], - ['\u{1f9d8}\u{1f3fb}'], - ['\u{1f9d8}\u{1f3fc}'], - ['\u{1f9d8}\u{1f3fd}'], - ['\u{1f9d8}\u{1f3fe}'], - ['\u{1f9d8}\u{1f3ff}'], - ['\u{1f9d8}\u200d\u2640\ufe0f'], - ['\u{1f9d8}\u200d\u2640'], - ['\u{1f9d8}\u{1f3fb}\u200d\u2640\ufe0f'], - ['\u{1f9d8}\u{1f3fb}\u200d\u2640'], - ['\u{1f9d8}\u{1f3fc}\u200d\u2640\ufe0f'], - ['\u{1f9d8}\u{1f3fc}\u200d\u2640'], - ['\u{1f9d8}\u{1f3fd}\u200d\u2640\ufe0f'], - ['\u{1f9d8}\u{1f3fd}\u200d\u2640'], - ['\u{1f9d8}\u{1f3fe}\u200d\u2640\ufe0f'], - ['\u{1f9d8}\u{1f3fe}\u200d\u2640'], - ['\u{1f9d8}\u{1f3ff}\u200d\u2640\ufe0f'], - ['\u{1f9d8}\u{1f3ff}\u200d\u2640'], - ['\u{1f9d8}\u200d\u2642\ufe0f'], - ['\u{1f9d8}\u200d\u2642'], - ['\u{1f9d8}\u{1f3fb}\u200d\u2642\ufe0f'], - ['\u{1f9d8}\u{1f3fb}\u200d\u2642'], - ['\u{1f9d8}\u{1f3fc}\u200d\u2642\ufe0f'], - ['\u{1f9d8}\u{1f3fc}\u200d\u2642'], - ['\u{1f9d8}\u{1f3fd}\u200d\u2642\ufe0f'], - ['\u{1f9d8}\u{1f3fd}\u200d\u2642'], - ['\u{1f9d8}\u{1f3fe}\u200d\u2642\ufe0f'], - ['\u{1f9d8}\u{1f3fe}\u200d\u2642'], - ['\u{1f9d8}\u{1f3ff}\u200d\u2642\ufe0f'], - ['\u{1f9d8}\u{1f3ff}\u200d\u2642'], - ['\u{1f6c0}'], - ['\u{1f6c0}\u{1f3fb}'], - ['\u{1f6c0}\u{1f3fc}'], - ['\u{1f6c0}\u{1f3fd}'], - ['\u{1f6c0}\u{1f3fe}'], - ['\u{1f6c0}\u{1f3ff}'], - ['\u{1f6cc}'], - ['\u{1f6cc}\u{1f3fb}'], - ['\u{1f6cc}\u{1f3fc}'], - ['\u{1f6cc}\u{1f3fd}'], - ['\u{1f6cc}\u{1f3fe}'], - ['\u{1f6cc}\u{1f3ff}'], - ['\u{1f574}\ufe0f'], - ['\u{1f574}'], - ['\u{1f574}\u{1f3fb}'], - ['\u{1f574}\u{1f3fc}'], - ['\u{1f574}\u{1f3fd}'], - ['\u{1f574}\u{1f3fe}'], - ['\u{1f574}\u{1f3ff}'], - ['\u{1f5e3}\ufe0f'], - ['\u{1f5e3}'], - ['\u{1f464}'], - ['\u{1f465}'], + ['\u{1f9d7}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u200d\u2640'], + ['\u{1f9d7}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3fb}\u200d\u2640'], + ['\u{1f9d7}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3fc}\u200d\u2640'], + ['\u{1f9d7}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3fd}\u200d\u2640'], + ['\u{1f9d7}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3fe}\u200d\u2640'], + ['\u{1f9d7}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9d7}\u{1f3ff}\u200d\u2640'], ['\u{1f93a}'], ['\u{1f3c7}'], ['\u{1f3c7}\u{1f3fb}'], @@ -2409,10 +3086,6 @@ const List> emojis = [ ['\u{1f6b5}\u{1f3fe}\u200d\u2640'], ['\u{1f6b5}\u{1f3ff}\u200d\u2640\ufe0f'], ['\u{1f6b5}\u{1f3ff}\u200d\u2640'], - ['\u{1f3ce}\ufe0f'], - ['\u{1f3ce}'], - ['\u{1f3cd}\ufe0f'], - ['\u{1f3cd}'], ['\u{1f938}'], ['\u{1f938}\u{1f3fb}'], ['\u{1f938}\u{1f3fc}'], @@ -2538,383 +3211,814 @@ const List> emojis = [ ['\u{1f939}\u{1f3fe}\u200d\u2640'], ['\u{1f939}\u{1f3ff}\u200d\u2640\ufe0f'], ['\u{1f939}\u{1f3ff}\u200d\u2640'], + ['\u{1f9d8}'], + ['\u{1f9d8}\u{1f3fb}'], + ['\u{1f9d8}\u{1f3fc}'], + ['\u{1f9d8}\u{1f3fd}'], + ['\u{1f9d8}\u{1f3fe}'], + ['\u{1f9d8}\u{1f3ff}'], + ['\u{1f9d8}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u200d\u2642'], + ['\u{1f9d8}\u{1f3fb}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3fb}\u200d\u2642'], + ['\u{1f9d8}\u{1f3fc}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3fc}\u200d\u2642'], + ['\u{1f9d8}\u{1f3fd}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3fd}\u200d\u2642'], + ['\u{1f9d8}\u{1f3fe}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3fe}\u200d\u2642'], + ['\u{1f9d8}\u{1f3ff}\u200d\u2642\ufe0f'], + ['\u{1f9d8}\u{1f3ff}\u200d\u2642'], + ['\u{1f9d8}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u200d\u2640'], + ['\u{1f9d8}\u{1f3fb}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3fb}\u200d\u2640'], + ['\u{1f9d8}\u{1f3fc}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3fc}\u200d\u2640'], + ['\u{1f9d8}\u{1f3fd}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3fd}\u200d\u2640'], + ['\u{1f9d8}\u{1f3fe}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3fe}\u200d\u2640'], + ['\u{1f9d8}\u{1f3ff}\u200d\u2640\ufe0f'], + ['\u{1f9d8}\u{1f3ff}\u200d\u2640'], + ['\u{1f6c0}'], + ['\u{1f6c0}\u{1f3fb}'], + ['\u{1f6c0}\u{1f3fc}'], + ['\u{1f6c0}\u{1f3fd}'], + ['\u{1f6c0}\u{1f3fe}'], + ['\u{1f6c0}\u{1f3ff}'], + ['\u{1f6cc}'], + ['\u{1f6cc}\u{1f3fb}'], + ['\u{1f6cc}\u{1f3fc}'], + ['\u{1f6cc}\u{1f3fd}'], + ['\u{1f6cc}\u{1f3fe}'], + ['\u{1f6cc}\u{1f3ff}'], + ['\u{1f9d1}\u200d\u{1f91d}\u200d\u{1f9d1}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f46d}'], + ['\u{1f46d}\u{1f3fb}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f46d}\u{1f3fc}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f46d}\u{1f3fd}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f46d}\u{1f3fe}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f46d}\u{1f3ff}'], ['\u{1f46b}'], + ['\u{1f46b}\u{1f3fb}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f46b}\u{1f3fc}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f46b}\u{1f3fd}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f46b}\u{1f3fe}'], + ['\u{1f469}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f46b}\u{1f3ff}'], ['\u{1f46c}'], - ['\u{1f46d}'], + ['\u{1f46c}\u{1f3fb}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fb}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f46c}\u{1f3fc}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fc}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f46c}\u{1f3fd}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fd}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f46c}\u{1f3fe}'], + ['\u{1f468}\u{1f3fe}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3ff}\u200d\u{1f91d}\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f46c}\u{1f3ff}'], ['\u{1f48f}'], + ['\u{1f48f}\u{1f3fb}'], + ['\u{1f48f}\u{1f3fc}'], + ['\u{1f48f}\u{1f3fd}'], + ['\u{1f48f}\u{1f3fe}'], + ['\u{1f48f}\u{1f3ff}'], + [ + '\u{1f9d1}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fc}' + ], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fc}'], + [ + '\u{1f9d1}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fd}' + ], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fd}'], + [ + '\u{1f9d1}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fe}' + ], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fe}'], + [ + '\u{1f9d1}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3ff}' + ], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3ff}'], + [ + '\u{1f9d1}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fb}' + ], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fb}'], + [ + '\u{1f9d1}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fd}' + ], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fd}'], + [ + '\u{1f9d1}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fe}' + ], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fe}'], + [ + '\u{1f9d1}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3ff}' + ], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3ff}'], + [ + '\u{1f9d1}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fb}' + ], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fb}'], + [ + '\u{1f9d1}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fc}' + ], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fc}'], + [ + '\u{1f9d1}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fe}' + ], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fe}'], + [ + '\u{1f9d1}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3ff}' + ], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3ff}'], + [ + '\u{1f9d1}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fb}' + ], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fb}'], + [ + '\u{1f9d1}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fc}' + ], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fc}'], + [ + '\u{1f9d1}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fd}' + ], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fd}'], + [ + '\u{1f9d1}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3ff}' + ], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3ff}'], + [ + '\u{1f9d1}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fb}' + ], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fb}'], + [ + '\u{1f9d1}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fc}' + ], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fc}'], + [ + '\u{1f9d1}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fd}' + ], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fd}'], + [ + '\u{1f9d1}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fe}' + ], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f9d1}\u{1f3fe}'], ['\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}'], ['\u{1f469}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], ['\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}'], ['\u{1f468}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}'], + [ + '\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], + [ + '\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], + [ + '\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], + [ + '\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], + [ + '\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}' + ], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fb}'], + [ + '\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}' + ], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fc}'], + [ + '\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}' + ], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fd}'], + [ + '\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}' + ], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3fe}'], + [ + '\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}' + ], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f468}\u{1f3ff}'], ['\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}'], ['\u{1f469}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fb}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fc}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fd}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3fe}'], + [ + '\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}' + ], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f48b}\u200d\u{1f469}\u{1f3ff}'], ['\u{1f491}'], + ['\u{1f491}\u{1f3fb}'], + ['\u{1f491}\u{1f3fc}'], + ['\u{1f491}\u{1f3fd}'], + ['\u{1f491}\u{1f3fe}'], + ['\u{1f491}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fb}\u200d\u2764\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fc}\u200d\u2764\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fd}\u200d\u2764\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3fe}\u200d\u2764\u200d\u{1f9d1}\u{1f3ff}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\u200d\u{1f9d1}\u{1f3fb}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\u200d\u{1f9d1}\u{1f3fc}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\u200d\u{1f9d1}\u{1f3fd}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f9d1}\u{1f3fe}'], + ['\u{1f9d1}\u{1f3ff}\u200d\u2764\u200d\u{1f9d1}\u{1f3fe}'], ['\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f468}'], ['\u{1f469}\u200d\u2764\u200d\u{1f468}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], ['\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}'], ['\u{1f468}\u200d\u2764\u200d\u{1f468}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fb}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fc}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fd}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3fe}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3fb}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3fc}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3fd}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3fe}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f468}\u{1f3ff}'], + ['\u{1f468}\u{1f3ff}\u200d\u2764\u200d\u{1f468}\u{1f3ff}'], ['\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}'], - ['\u{1f469}\u200d\u2764\u200d\u{1f469}'], - ['\u{1f46a}'], - ['\u{1f468}\u200d\u{1f469}\u200d\u{1f466}'], - ['\u{1f468}\u200d\u{1f469}\u200d\u{1f467}'], - ['\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}'], - ['\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}'], - ['\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}'], - ['\u{1f468}\u200d\u{1f468}\u200d\u{1f466}'], - ['\u{1f468}\u200d\u{1f468}\u200d\u{1f467}'], - ['\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}'], - ['\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}'], - ['\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}'], - ['\u{1f469}\u200d\u{1f469}\u200d\u{1f466}'], - ['\u{1f469}\u200d\u{1f469}\u200d\u{1f467}'], - ['\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}'], - ['\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}'], - ['\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}'], - ['\u{1f468}\u200d\u{1f466}'], - ['\u{1f468}\u200d\u{1f466}\u200d\u{1f466}'], - ['\u{1f468}\u200d\u{1f467}'], - ['\u{1f468}\u200d\u{1f467}\u200d\u{1f466}'], - ['\u{1f468}\u200d\u{1f467}\u200d\u{1f467}'], - ['\u{1f469}\u200d\u{1f466}'], - ['\u{1f469}\u200d\u{1f466}\u200d\u{1f466}'], - ['\u{1f469}\u200d\u{1f467}'], - ['\u{1f469}\u200d\u{1f467}\u200d\u{1f466}'], - ['\u{1f469}\u200d\u{1f467}\u200d\u{1f467}'], - ['\u{1f933}'], - ['\u{1f933}\u{1f3fb}'], - ['\u{1f933}\u{1f3fc}'], - ['\u{1f933}\u{1f3fd}'], - ['\u{1f933}\u{1f3fe}'], - ['\u{1f933}\u{1f3ff}'], - ['\u{1f4aa}'], - ['\u{1f4aa}\u{1f3fb}'], - ['\u{1f4aa}\u{1f3fc}'], - ['\u{1f4aa}\u{1f3fd}'], - ['\u{1f4aa}\u{1f3fe}'], - ['\u{1f4aa}\u{1f3ff}'], - ['\u{1f9b5}'], - ['\u{1f9b5}\u{1f3fb}'], - ['\u{1f9b5}\u{1f3fc}'], - ['\u{1f9b5}\u{1f3fd}'], - ['\u{1f9b5}\u{1f3fe}'], - ['\u{1f9b5}\u{1f3ff}'], - ['\u{1f9b6}'], - ['\u{1f9b6}\u{1f3fb}'], - ['\u{1f9b6}\u{1f3fc}'], - ['\u{1f9b6}\u{1f3fd}'], - ['\u{1f9b6}\u{1f3fe}'], - ['\u{1f9b6}\u{1f3ff}'], - ['\u{1f448}'], - ['\u{1f448}\u{1f3fb}'], - ['\u{1f448}\u{1f3fc}'], - ['\u{1f448}\u{1f3fd}'], - ['\u{1f448}\u{1f3fe}'], - ['\u{1f448}\u{1f3ff}'], - ['\u{1f449}'], - ['\u{1f449}\u{1f3fb}'], - ['\u{1f449}\u{1f3fc}'], - ['\u{1f449}\u{1f3fd}'], - ['\u{1f449}\u{1f3fe}'], - ['\u{1f449}\u{1f3ff}'], - ['\u261d\ufe0f'], - ['\u261d'], - ['\u261d\u{1f3fb}'], - ['\u261d\u{1f3fc}'], - ['\u261d\u{1f3fd}'], - ['\u261d\u{1f3fe}'], - ['\u261d\u{1f3ff}'], - ['\u{1f446}'], - ['\u{1f446}\u{1f3fb}'], - ['\u{1f446}\u{1f3fc}'], - ['\u{1f446}\u{1f3fd}'], - ['\u{1f446}\u{1f3fe}'], - ['\u{1f446}\u{1f3ff}'], - ['\u{1f595}'], - ['\u{1f595}\u{1f3fb}'], - ['\u{1f595}\u{1f3fc}'], - ['\u{1f595}\u{1f3fd}'], - ['\u{1f595}\u{1f3fe}'], - ['\u{1f595}\u{1f3ff}'], - ['\u{1f447}'], - ['\u{1f447}\u{1f3fb}'], - ['\u{1f447}\u{1f3fc}'], - ['\u{1f447}\u{1f3fd}'], - ['\u{1f447}\u{1f3fe}'], - ['\u{1f447}\u{1f3ff}'], - ['\u270c\ufe0f'], - ['\u270c'], - ['\u270c\u{1f3fb}'], - ['\u270c\u{1f3fc}'], - ['\u270c\u{1f3fd}'], - ['\u270c\u{1f3fe}'], - ['\u270c\u{1f3ff}'], - ['\u{1f91e}'], - ['\u{1f91e}\u{1f3fb}'], - ['\u{1f91e}\u{1f3fc}'], - ['\u{1f91e}\u{1f3fd}'], - ['\u{1f91e}\u{1f3fe}'], - ['\u{1f91e}\u{1f3ff}'], - ['\u{1f596}'], - ['\u{1f596}\u{1f3fb}'], - ['\u{1f596}\u{1f3fc}'], - ['\u{1f596}\u{1f3fd}'], - ['\u{1f596}\u{1f3fe}'], - ['\u{1f596}\u{1f3ff}'], - ['\u{1f918}'], - ['\u{1f918}\u{1f3fb}'], - ['\u{1f918}\u{1f3fc}'], - ['\u{1f918}\u{1f3fd}'], - ['\u{1f918}\u{1f3fe}'], - ['\u{1f918}\u{1f3ff}'], - ['\u{1f919}'], - ['\u{1f919}\u{1f3fb}'], - ['\u{1f919}\u{1f3fc}'], - ['\u{1f919}\u{1f3fd}'], - ['\u{1f919}\u{1f3fe}'], - ['\u{1f919}\u{1f3ff}'], - ['\u{1f590}\ufe0f'], - ['\u{1f590}'], - ['\u{1f590}\u{1f3fb}'], - ['\u{1f590}\u{1f3fc}'], - ['\u{1f590}\u{1f3fd}'], - ['\u{1f590}\u{1f3fe}'], - ['\u{1f590}\u{1f3ff}'], - ['\u270b'], - ['\u270b\u{1f3fb}'], - ['\u270b\u{1f3fc}'], - ['\u270b\u{1f3fd}'], - ['\u270b\u{1f3fe}'], - ['\u270b\u{1f3ff}'], - ['\u{1f44c}'], - ['\u{1f44c}\u{1f3fb}'], - ['\u{1f44c}\u{1f3fc}'], - ['\u{1f44c}\u{1f3fd}'], - ['\u{1f44c}\u{1f3fe}'], - ['\u{1f44c}\u{1f3ff}'], - ['\u{1f44d}'], - ['\u{1f44d}\u{1f3fb}'], - ['\u{1f44d}\u{1f3fc}'], - ['\u{1f44d}\u{1f3fd}'], - ['\u{1f44d}\u{1f3fe}'], - ['\u{1f44d}\u{1f3ff}'], - ['\u{1f44e}'], - ['\u{1f44e}\u{1f3fb}'], - ['\u{1f44e}\u{1f3fc}'], - ['\u{1f44e}\u{1f3fd}'], - ['\u{1f44e}\u{1f3fe}'], - ['\u{1f44e}\u{1f3ff}'], - ['\u270a'], - ['\u270a\u{1f3fb}'], - ['\u270a\u{1f3fc}'], - ['\u270a\u{1f3fd}'], - ['\u270a\u{1f3fe}'], - ['\u270a\u{1f3ff}'], - ['\u{1f44a}'], - ['\u{1f44a}\u{1f3fb}'], - ['\u{1f44a}\u{1f3fc}'], - ['\u{1f44a}\u{1f3fd}'], - ['\u{1f44a}\u{1f3fe}'], - ['\u{1f44a}\u{1f3ff}'], - ['\u{1f91b}'], - ['\u{1f91b}\u{1f3fb}'], - ['\u{1f91b}\u{1f3fc}'], - ['\u{1f91b}\u{1f3fd}'], - ['\u{1f91b}\u{1f3fe}'], - ['\u{1f91b}\u{1f3ff}'], - ['\u{1f91c}'], - ['\u{1f91c}\u{1f3fb}'], - ['\u{1f91c}\u{1f3fc}'], - ['\u{1f91c}\u{1f3fd}'], - ['\u{1f91c}\u{1f3fe}'], - ['\u{1f91c}\u{1f3ff}'], - ['\u{1f91a}'], - ['\u{1f91a}\u{1f3fb}'], - ['\u{1f91a}\u{1f3fc}'], - ['\u{1f91a}\u{1f3fd}'], - ['\u{1f91a}\u{1f3fe}'], - ['\u{1f91a}\u{1f3ff}'], - ['\u{1f44b}'], - ['\u{1f44b}\u{1f3fb}'], - ['\u{1f44b}\u{1f3fc}'], - ['\u{1f44b}\u{1f3fd}'], - ['\u{1f44b}\u{1f3fe}'], - ['\u{1f44b}\u{1f3ff}'], - ['\u{1f91f}'], - ['\u{1f91f}\u{1f3fb}'], - ['\u{1f91f}\u{1f3fc}'], - ['\u{1f91f}\u{1f3fd}'], - ['\u{1f91f}\u{1f3fe}'], - ['\u{1f91f}\u{1f3ff}'], - ['\u270d\ufe0f'], - ['\u270d'], - ['\u270d\u{1f3fb}'], - ['\u270d\u{1f3fc}'], - ['\u270d\u{1f3fd}'], - ['\u270d\u{1f3fe}'], - ['\u270d\u{1f3ff}'], - ['\u{1f44f}'], - ['\u{1f44f}\u{1f3fb}'], - ['\u{1f44f}\u{1f3fc}'], - ['\u{1f44f}\u{1f3fd}'], - ['\u{1f44f}\u{1f3fe}'], - ['\u{1f44f}\u{1f3ff}'], - ['\u{1f450}'], - ['\u{1f450}\u{1f3fb}'], - ['\u{1f450}\u{1f3fc}'], - ['\u{1f450}\u{1f3fd}'], - ['\u{1f450}\u{1f3fe}'], - ['\u{1f450}\u{1f3ff}'], - ['\u{1f64c}'], - ['\u{1f64c}\u{1f3fb}'], - ['\u{1f64c}\u{1f3fc}'], - ['\u{1f64c}\u{1f3fd}'], - ['\u{1f64c}\u{1f3fe}'], - ['\u{1f64c}\u{1f3ff}'], - ['\u{1f932}'], - ['\u{1f932}\u{1f3fb}'], - ['\u{1f932}\u{1f3fc}'], - ['\u{1f932}\u{1f3fd}'], - ['\u{1f932}\u{1f3fe}'], - ['\u{1f932}\u{1f3ff}'], - ['\u{1f64f}'], - ['\u{1f64f}\u{1f3fb}'], - ['\u{1f64f}\u{1f3fc}'], - ['\u{1f64f}\u{1f3fd}'], - ['\u{1f64f}\u{1f3fe}'], - ['\u{1f64f}\u{1f3ff}'], - ['\u{1f91d}'], - ['\u{1f485}'], - ['\u{1f485}\u{1f3fb}'], - ['\u{1f485}\u{1f3fc}'], - ['\u{1f485}\u{1f3fd}'], - ['\u{1f485}\u{1f3fe}'], - ['\u{1f485}\u{1f3ff}'], - ['\u{1f442}'], - ['\u{1f442}\u{1f3fb}'], - ['\u{1f442}\u{1f3fc}'], - ['\u{1f442}\u{1f3fd}'], - ['\u{1f442}\u{1f3fe}'], - ['\u{1f442}\u{1f3ff}'], - ['\u{1f443}'], - ['\u{1f443}\u{1f3fb}'], - ['\u{1f443}\u{1f3fc}'], - ['\u{1f443}\u{1f3fd}'], - ['\u{1f443}\u{1f3fe}'], - ['\u{1f443}\u{1f3ff}'], + ['\u{1f469}\u200d\u2764\u200d\u{1f469}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fb}\u200d\u2764\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fc}\u200d\u2764\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fd}\u200d\u2764\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3fe}\u200d\u2764\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f469}\u{1f3fb}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f469}\u{1f3fc}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f469}\u{1f3fd}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f469}\u{1f3fe}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\ufe0f\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f469}\u{1f3ff}\u200d\u2764\u200d\u{1f469}\u{1f3ff}'], + ['\u{1f46a}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f467}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f467}'], + ['\u{1f468}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f468}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f469}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f466}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f467}'], + ['\u{1f469}\u200d\u{1f467}\u200d\u{1f466}'], + ['\u{1f469}\u200d\u{1f467}\u200d\u{1f467}'], + ['\u{1f5e3}\ufe0f'], + ['\u{1f5e3}'], + ['\u{1f464}'], + ['\u{1f465}'], + ['\u{1fac2}'], + ['\u{1f463}'], + ['\u{1f3fb}'], + ['\u{1f3fc}'], + ['\u{1f3fd}'], + ['\u{1f3fe}'], + ['\u{1f3ff}'], ['\u{1f9b0}'], ['\u{1f9b1}'], - ['\u{1f9b2}'], ['\u{1f9b3}'], - ['\u{1f463}'], - ['\u{1f440}'], - ['\u{1f441}\ufe0f'], - ['\u{1f441}'], - ['\u{1f441}\ufe0f\u200d\u{1f5e8}\ufe0f'], - ['\u{1f441}\u200d\u{1f5e8}\ufe0f'], - ['\u{1f441}\ufe0f\u200d\u{1f5e8}'], - ['\u{1f441}\u200d\u{1f5e8}'], - ['\u{1f9e0}'], - ['\u{1f9b4}'], - ['\u{1f9b7}'], - ['\u{1f445}'], - ['\u{1f444}'], - ['\u{1f48b}'], - ['\u{1f498}'], - ['\u2764\ufe0f'], - ['\u2764'], - ['\u{1f493}'], - ['\u{1f494}'], - ['\u{1f495}'], - ['\u{1f496}'], - ['\u{1f497}'], - ['\u{1f499}'], - ['\u{1f49a}'], - ['\u{1f49b}'], - ['\u{1f9e1}'], - ['\u{1f49c}'], - ['\u{1f5a4}'], - ['\u{1f49d}'], - ['\u{1f49e}'], - ['\u{1f49f}'], - ['\u2763\ufe0f'], - ['\u2763'], - ['\u{1f48c}'], - ['\u{1f4a4}'], - ['\u{1f4a2}'], - ['\u{1f4a3}'], - ['\u{1f4a5}'], - ['\u{1f4a6}'], - ['\u{1f4a8}'], - ['\u{1f4ab}'], - ['\u{1f4ac}'], - ['\u{1f5e8}\ufe0f'], - ['\u{1f5e8}'], - ['\u{1f5ef}\ufe0f'], - ['\u{1f5ef}'], - ['\u{1f4ad}'], - ['\u{1f573}\ufe0f'], - ['\u{1f573}'], - ['\u{1f453}'], - ['\u{1f576}\ufe0f'], - ['\u{1f576}'], - ['\u{1f97d}'], - ['\u{1f97c}'], - ['\u{1f454}'], - ['\u{1f455}'], - ['\u{1f456}'], - ['\u{1f9e3}'], - ['\u{1f9e4}'], - ['\u{1f9e5}'], - ['\u{1f9e6}'], - ['\u{1f457}'], - ['\u{1f458}'], - ['\u{1f459}'], - ['\u{1f45a}'], - ['\u{1f45b}'], - ['\u{1f45c}'], - ['\u{1f45d}'], - ['\u{1f6cd}\ufe0f'], - ['\u{1f6cd}'], - ['\u{1f392}'], - ['\u{1f45e}'], - ['\u{1f45f}'], - ['\u{1f97e}'], - ['\u{1f97f}'], - ['\u{1f460}'], - ['\u{1f461}'], - ['\u{1f462}'], - ['\u{1f451}'], - ['\u{1f452}'], - ['\u{1f3a9}'], - ['\u{1f393}'], - ['\u{1f9e2}'], - ['\u26d1\ufe0f'], - ['\u26d1'], - ['\u{1f4ff}'], - ['\u{1f484}'], - ['\u{1f48d}'], - ['\u{1f48e}'], + ['\u{1f9b2}'], ['\u{1f435}'], ['\u{1f412}'], ['\u{1f98d}'], + ['\u{1f9a7}'], ['\u{1f436}'], ['\u{1f415}'], + ['\u{1f9ae}'], + ['\u{1f415}\u200d\u{1f9ba}'], ['\u{1f429}'], ['\u{1f43a}'], ['\u{1f98a}'], ['\u{1f99d}'], ['\u{1f431}'], ['\u{1f408}'], + ['\u{1f408}\u200d\u2b1b'], ['\u{1f981}'], ['\u{1f42f}'], ['\u{1f405}'], ['\u{1f406}'], ['\u{1f434}'], + ['\u{1face}'], + ['\u{1facf}'], ['\u{1f40e}'], ['\u{1f984}'], ['\u{1f993}'], ['\u{1f98c}'], + ['\u{1f9ac}'], ['\u{1f42e}'], ['\u{1f402}'], ['\u{1f403}'], @@ -2931,6 +4035,7 @@ const List> emojis = [ ['\u{1f999}'], ['\u{1f992}'], ['\u{1f418}'], + ['\u{1f9a3}'], ['\u{1f98f}'], ['\u{1f99b}'], ['\u{1f42d}'], @@ -2941,11 +4046,17 @@ const List> emojis = [ ['\u{1f407}'], ['\u{1f43f}\ufe0f'], ['\u{1f43f}'], + ['\u{1f9ab}'], ['\u{1f994}'], ['\u{1f987}'], ['\u{1f43b}'], + ['\u{1f43b}\u200d\u2744\ufe0f'], + ['\u{1f43b}\u200d\u2744'], ['\u{1f428}'], ['\u{1f43c}'], + ['\u{1f9a5}'], + ['\u{1f9a6}'], + ['\u{1f9a8}'], ['\u{1f998}'], ['\u{1f9a1}'], ['\u{1f43e}'], @@ -2963,8 +4074,14 @@ const List> emojis = [ ['\u{1f986}'], ['\u{1f9a2}'], ['\u{1f989}'], + ['\u{1f9a4}'], + ['\u{1fab6}'], + ['\u{1f9a9}'], ['\u{1f99a}'], ['\u{1f99c}'], + ['\u{1fabd}'], + ['\u{1f426}\u200d\u2b1b'], + ['\u{1fabf}'], ['\u{1f438}'], ['\u{1f40a}'], ['\u{1f422}'], @@ -2977,33 +4094,37 @@ const List> emojis = [ ['\u{1f433}'], ['\u{1f40b}'], ['\u{1f42c}'], + ['\u{1f9ad}'], ['\u{1f41f}'], ['\u{1f420}'], ['\u{1f421}'], ['\u{1f988}'], ['\u{1f419}'], ['\u{1f41a}'], - ['\u{1f980}'], - ['\u{1f99e}'], - ['\u{1f990}'], - ['\u{1f991}'], + ['\u{1fab8}'], + ['\u{1fabc}'], ['\u{1f40c}'], ['\u{1f98b}'], ['\u{1f41b}'], ['\u{1f41c}'], ['\u{1f41d}'], + ['\u{1fab2}'], ['\u{1f41e}'], ['\u{1f997}'], + ['\u{1fab3}'], ['\u{1f577}\ufe0f'], ['\u{1f577}'], ['\u{1f578}\ufe0f'], ['\u{1f578}'], ['\u{1f982}'], ['\u{1f99f}'], + ['\u{1fab0}'], + ['\u{1fab1}'], ['\u{1f9a0}'], ['\u{1f490}'], ['\u{1f338}'], ['\u{1f4ae}'], + ['\u{1fab7}'], ['\u{1f3f5}\ufe0f'], ['\u{1f3f5}'], ['\u{1f339}'], @@ -3012,7 +4133,9 @@ const List> emojis = [ ['\u{1f33b}'], ['\u{1f33c}'], ['\u{1f337}'], + ['\u{1fabb}'], ['\u{1f331}'], + ['\u{1fab4}'], ['\u{1f332}'], ['\u{1f333}'], ['\u{1f334}'], @@ -3025,6 +4148,9 @@ const List> emojis = [ ['\u{1f341}'], ['\u{1f342}'], ['\u{1f343}'], + ['\u{1fab9}'], + ['\u{1faba}'], + ['\u{1f344}'], ['\u{1f347}'], ['\u{1f348}'], ['\u{1f349}'], @@ -3039,8 +4165,10 @@ const List> emojis = [ ['\u{1f351}'], ['\u{1f352}'], ['\u{1f353}'], + ['\u{1fad0}'], ['\u{1f95d}'], ['\u{1f345}'], + ['\u{1fad2}'], ['\u{1f965}'], ['\u{1f951}'], ['\u{1f346}'], @@ -3049,18 +4177,25 @@ const List> emojis = [ ['\u{1f33d}'], ['\u{1f336}\ufe0f'], ['\u{1f336}'], + ['\u{1fad1}'], ['\u{1f952}'], ['\u{1f96c}'], ['\u{1f966}'], - ['\u{1f344}'], + ['\u{1f9c4}'], + ['\u{1f9c5}'], ['\u{1f95c}'], + ['\u{1fad8}'], ['\u{1f330}'], + ['\u{1fada}'], + ['\u{1fadb}'], ['\u{1f35e}'], ['\u{1f950}'], ['\u{1f956}'], + ['\u{1fad3}'], ['\u{1f968}'], ['\u{1f96f}'], ['\u{1f95e}'], + ['\u{1f9c7}'], ['\u{1f9c0}'], ['\u{1f356}'], ['\u{1f357}'], @@ -3073,14 +4208,18 @@ const List> emojis = [ ['\u{1f96a}'], ['\u{1f32e}'], ['\u{1f32f}'], + ['\u{1fad4}'], ['\u{1f959}'], + ['\u{1f9c6}'], ['\u{1f95a}'], ['\u{1f373}'], ['\u{1f958}'], ['\u{1f372}'], + ['\u{1fad5}'], ['\u{1f963}'], ['\u{1f957}'], ['\u{1f37f}'], + ['\u{1f9c8}'], ['\u{1f9c2}'], ['\u{1f96b}'], ['\u{1f371}'], @@ -3100,6 +4239,11 @@ const List> emojis = [ ['\u{1f95f}'], ['\u{1f960}'], ['\u{1f961}'], + ['\u{1f980}'], + ['\u{1f99e}'], + ['\u{1f990}'], + ['\u{1f991}'], + ['\u{1f9aa}'], ['\u{1f366}'], ['\u{1f367}'], ['\u{1f368}'], @@ -3117,6 +4261,7 @@ const List> emojis = [ ['\u{1f37c}'], ['\u{1f95b}'], ['\u2615'], + ['\u{1fad6}'], ['\u{1f375}'], ['\u{1f376}'], ['\u{1f37e}'], @@ -3127,13 +4272,19 @@ const List> emojis = [ ['\u{1f37b}'], ['\u{1f942}'], ['\u{1f943}'], + ['\u{1fad7}'], ['\u{1f964}'], + ['\u{1f9cb}'], + ['\u{1f9c3}'], + ['\u{1f9c9}'], + ['\u{1f9ca}'], ['\u{1f962}'], ['\u{1f37d}\ufe0f'], ['\u{1f37d}'], ['\u{1f374}'], ['\u{1f944}'], ['\u{1f52a}'], + ['\u{1fad9}'], ['\u{1f3fa}'], ['\u{1f30d}'], ['\u{1f30e}'], @@ -3166,6 +4317,9 @@ const List> emojis = [ ['\u{1f3d7}\ufe0f'], ['\u{1f3d7}'], ['\u{1f9f1}'], + ['\u{1faa8}'], + ['\u{1fab5}'], + ['\u{1f6d6}'], ['\u{1f3d8}\ufe0f'], ['\u{1f3d8}'], ['\u{1f3da}\ufe0f'], @@ -3190,6 +4344,7 @@ const List> emojis = [ ['\u{1f5fd}'], ['\u26ea'], ['\u{1f54c}'], + ['\u{1f6d5}'], ['\u{1f54d}'], ['\u26e9\ufe0f'], ['\u26e9'], @@ -3207,8 +4362,8 @@ const List> emojis = [ ['\u{1f309}'], ['\u2668\ufe0f'], ['\u2668'], - ['\u{1f30c}'], ['\u{1f3a0}'], + ['\u{1f6dd}'], ['\u{1f3a1}'], ['\u{1f3a2}'], ['\u{1f488}'], @@ -3238,13 +4393,22 @@ const List> emojis = [ ['\u{1f697}'], ['\u{1f698}'], ['\u{1f699}'], + ['\u{1f6fb}'], ['\u{1f69a}'], ['\u{1f69b}'], ['\u{1f69c}'], + ['\u{1f3ce}\ufe0f'], + ['\u{1f3ce}'], + ['\u{1f3cd}\ufe0f'], + ['\u{1f3cd}'], + ['\u{1f6f5}'], + ['\u{1f9bd}'], + ['\u{1f9bc}'], + ['\u{1f6fa}'], ['\u{1f6b2}'], ['\u{1f6f4}'], ['\u{1f6f9}'], - ['\u{1f6f5}'], + ['\u{1f6fc}'], ['\u{1f68f}'], ['\u{1f6e3}\ufe0f'], ['\u{1f6e3}'], @@ -3253,12 +4417,14 @@ const List> emojis = [ ['\u{1f6e2}\ufe0f'], ['\u{1f6e2}'], ['\u26fd'], + ['\u{1f6de}'], ['\u{1f6a8}'], ['\u{1f6a5}'], ['\u{1f6a6}'], ['\u{1f6d1}'], ['\u{1f6a7}'], ['\u2693'], + ['\u{1f6df}'], ['\u26f5'], ['\u{1f6f6}'], ['\u{1f6a4}'], @@ -3275,6 +4441,7 @@ const List> emojis = [ ['\u{1f6e9}'], ['\u{1f6eb}'], ['\u{1f6ec}'], + ['\u{1fa82}'], ['\u{1f4ba}'], ['\u{1f681}'], ['\u{1f69f}'], @@ -3339,9 +4506,11 @@ const List> emojis = [ ['\u2600'], ['\u{1f31d}'], ['\u{1f31e}'], + ['\u{1fa90}'], ['\u2b50'], ['\u{1f31f}'], ['\u{1f320}'], + ['\u{1f30c}'], ['\u2601\ufe0f'], ['\u2601'], ['\u26c5'], @@ -3437,14 +4606,18 @@ const List> emojis = [ ['\u26f8\ufe0f'], ['\u26f8'], ['\u{1f3a3}'], + ['\u{1f93f}'], ['\u{1f3bd}'], ['\u{1f3bf}'], ['\u{1f6f7}'], ['\u{1f94c}'], ['\u{1f3af}'], + ['\u{1fa80}'], + ['\u{1fa81}'], + ['\u{1f52b}'], ['\u{1f3b1}'], ['\u{1f52e}'], - ['\u{1f9ff}'], + ['\u{1fa84}'], ['\u{1f3ae}'], ['\u{1f579}\ufe0f'], ['\u{1f579}'], @@ -3452,6 +4625,9 @@ const List> emojis = [ ['\u{1f3b2}'], ['\u{1f9e9}'], ['\u{1f9f8}'], + ['\u{1fa85}'], + ['\u{1faa9}'], + ['\u{1fa86}'], ['\u2660\ufe0f'], ['\u2660'], ['\u2665\ufe0f'], @@ -3470,7 +4646,59 @@ const List> emojis = [ ['\u{1f5bc}'], ['\u{1f3a8}'], ['\u{1f9f5}'], + ['\u{1faa1}'], ['\u{1f9f6}'], + ['\u{1faa2}'], + ['\u{1f453}'], + ['\u{1f576}\ufe0f'], + ['\u{1f576}'], + ['\u{1f97d}'], + ['\u{1f97c}'], + ['\u{1f9ba}'], + ['\u{1f454}'], + ['\u{1f455}'], + ['\u{1f456}'], + ['\u{1f9e3}'], + ['\u{1f9e4}'], + ['\u{1f9e5}'], + ['\u{1f9e6}'], + ['\u{1f457}'], + ['\u{1f458}'], + ['\u{1f97b}'], + ['\u{1fa71}'], + ['\u{1fa72}'], + ['\u{1fa73}'], + ['\u{1f459}'], + ['\u{1f45a}'], + ['\u{1faad}'], + ['\u{1f45b}'], + ['\u{1f45c}'], + ['\u{1f45d}'], + ['\u{1f6cd}\ufe0f'], + ['\u{1f6cd}'], + ['\u{1f392}'], + ['\u{1fa74}'], + ['\u{1f45e}'], + ['\u{1f45f}'], + ['\u{1f97e}'], + ['\u{1f97f}'], + ['\u{1f460}'], + ['\u{1f461}'], + ['\u{1fa70}'], + ['\u{1f462}'], + ['\u{1faae}'], + ['\u{1f451}'], + ['\u{1f452}'], + ['\u{1f3a9}'], + ['\u{1f393}'], + ['\u{1f9e2}'], + ['\u{1fa96}'], + ['\u26d1\ufe0f'], + ['\u26d1'], + ['\u{1f4ff}'], + ['\u{1f484}'], + ['\u{1f48d}'], + ['\u{1f48e}'], ['\u{1f507}'], ['\u{1f508}'], ['\u{1f509}'], @@ -3493,11 +4721,16 @@ const List> emojis = [ ['\u{1f3a7}'], ['\u{1f4fb}'], ['\u{1f3b7}'], + ['\u{1fa97}'], ['\u{1f3b8}'], ['\u{1f3b9}'], ['\u{1f3ba}'], ['\u{1f3bb}'], + ['\u{1fa95}'], ['\u{1f941}'], + ['\u{1fa98}'], + ['\u{1fa87}'], + ['\u{1fa88}'], ['\u{1f4f1}'], ['\u{1f4f2}'], ['\u260e\ufe0f'], @@ -3506,6 +4739,7 @@ const List> emojis = [ ['\u{1f4df}'], ['\u{1f4e0}'], ['\u{1f50b}'], + ['\u{1faab}'], ['\u{1f50c}'], ['\u{1f4bb}'], ['\u{1f5a5}\ufe0f'], @@ -3541,6 +4775,7 @@ const List> emojis = [ ['\u{1f4a1}'], ['\u{1f526}'], ['\u{1f3ee}'], + ['\u{1fa94}'], ['\u{1f4d4}'], ['\u{1f4d5}'], ['\u{1f4d6}'], @@ -3561,6 +4796,7 @@ const List> emojis = [ ['\u{1f3f7}\ufe0f'], ['\u{1f3f7}'], ['\u{1f4b0}'], + ['\u{1fa99}'], ['\u{1f4b4}'], ['\u{1f4b5}'], ['\u{1f4b6}'], @@ -3569,8 +4805,6 @@ const List> emojis = [ ['\u{1f4b3}'], ['\u{1f9fe}'], ['\u{1f4b9}'], - ['\u{1f4b1}'], - ['\u{1f4b2}'], ['\u2709\ufe0f'], ['\u2709'], ['\u{1f4e7}'], @@ -3638,6 +4872,7 @@ const List> emojis = [ ['\u{1f5dd}\ufe0f'], ['\u{1f5dd}'], ['\u{1f528}'], + ['\u{1fa93}'], ['\u26cf\ufe0f'], ['\u26cf'], ['\u2692\ufe0f'], @@ -3648,11 +4883,14 @@ const List> emojis = [ ['\u{1f5e1}'], ['\u2694\ufe0f'], ['\u2694'], - ['\u{1f52b}'], + ['\u{1f4a3}'], + ['\u{1fa83}'], ['\u{1f3f9}'], ['\u{1f6e1}\ufe0f'], ['\u{1f6e1}'], + ['\u{1fa9a}'], ['\u{1f527}'], + ['\u{1fa9b}'], ['\u{1f529}'], ['\u2699\ufe0f'], ['\u2699'], @@ -3660,11 +4898,14 @@ const List> emojis = [ ['\u{1f5dc}'], ['\u2696\ufe0f'], ['\u2696'], + ['\u{1f9af}'], ['\u{1f517}'], ['\u26d3\ufe0f'], ['\u26d3'], + ['\u{1fa9d}'], ['\u{1f9f0}'], ['\u{1f9f2}'], + ['\u{1fa9c}'], ['\u2697\ufe0f'], ['\u2697'], ['\u{1f9ea}'], @@ -3674,30 +4915,50 @@ const List> emojis = [ ['\u{1f52d}'], ['\u{1f4e1}'], ['\u{1f489}'], + ['\u{1fa78}'], ['\u{1f48a}'], + ['\u{1fa79}'], + ['\u{1fa7c}'], + ['\u{1fa7a}'], + ['\u{1fa7b}'], ['\u{1f6aa}'], + ['\u{1f6d7}'], + ['\u{1fa9e}'], + ['\u{1fa9f}'], ['\u{1f6cf}\ufe0f'], ['\u{1f6cf}'], ['\u{1f6cb}\ufe0f'], ['\u{1f6cb}'], + ['\u{1fa91}'], ['\u{1f6bd}'], + ['\u{1faa0}'], ['\u{1f6bf}'], ['\u{1f6c1}'], + ['\u{1faa4}'], + ['\u{1fa92}'], ['\u{1f9f4}'], ['\u{1f9f7}'], ['\u{1f9f9}'], ['\u{1f9fa}'], ['\u{1f9fb}'], + ['\u{1faa3}'], ['\u{1f9fc}'], + ['\u{1fae7}'], + ['\u{1faa5}'], ['\u{1f9fd}'], ['\u{1f9ef}'], ['\u{1f6d2}'], ['\u{1f6ac}'], ['\u26b0\ufe0f'], ['\u26b0'], + ['\u{1faa6}'], ['\u26b1\ufe0f'], ['\u26b1'], + ['\u{1f9ff}'], + ['\u{1faac}'], ['\u{1f5ff}'], + ['\u{1faa7}'], + ['\u{1faaa}'], ['\u{1f3e7}'], ['\u{1f6ae}'], ['\u{1f6b0}'], @@ -3783,6 +5044,7 @@ const List> emojis = [ ['\u262e'], ['\u{1f54e}'], ['\u{1f52f}'], + ['\u{1faaf}'], ['\u2648'], ['\u2649'], ['\u264a'], @@ -3827,16 +5089,37 @@ const List> emojis = [ ['\u{1f505}'], ['\u{1f506}'], ['\u{1f4f6}'], + ['\u{1f6dc}'], ['\u{1f4f3}'], ['\u{1f4f4}'], ['\u2640\ufe0f'], ['\u2640'], ['\u2642\ufe0f'], ['\u2642'], - ['\u2695\ufe0f'], - ['\u2695'], + ['\u26a7\ufe0f'], + ['\u26a7'], + ['\u2716\ufe0f'], + ['\u2716'], + ['\u2795'], + ['\u2796'], + ['\u2797'], + ['\u{1f7f0}'], ['\u267e\ufe0f'], ['\u267e'], + ['\u203c\ufe0f'], + ['\u203c'], + ['\u2049\ufe0f'], + ['\u2049'], + ['\u2753'], + ['\u2754'], + ['\u2755'], + ['\u2757'], + ['\u3030\ufe0f'], + ['\u3030'], + ['\u{1f4b1}'], + ['\u{1f4b2}'], + ['\u2695\ufe0f'], + ['\u2695'], ['\u267b\ufe0f'], ['\u267b'], ['\u269c\ufe0f'], @@ -3850,13 +5133,8 @@ const List> emojis = [ ['\u2611'], ['\u2714\ufe0f'], ['\u2714'], - ['\u2716\ufe0f'], - ['\u2716'], ['\u274c'], ['\u274e'], - ['\u2795'], - ['\u2796'], - ['\u2797'], ['\u27b0'], ['\u27bf'], ['\u303d\ufe0f'], @@ -3867,16 +5145,6 @@ const List> emojis = [ ['\u2734'], ['\u2747\ufe0f'], ['\u2747'], - ['\u203c\ufe0f'], - ['\u203c'], - ['\u2049\ufe0f'], - ['\u2049'], - ['\u2753'], - ['\u2754'], - ['\u2755'], - ['\u2757'], - ['\u3030\ufe0f'], - ['\u3030'], ['©\ufe0f'], ['©'], ['®\ufe0f'], @@ -3908,7 +5176,6 @@ const List> emojis = [ ['9\ufe0f\u20e3'], ['9\u20e3'], ['\u{1f51f}'], - ['\u{1f4af}'], ['\u{1f520}'], ['\u{1f521}'], ['\u{1f522}'], @@ -3958,18 +5225,34 @@ const List> emojis = [ ['\u3299'], ['\u{1f23a}'], ['\u{1f235}'], + ['\u{1f534}'], + ['\u{1f7e0}'], + ['\u{1f7e1}'], + ['\u{1f7e2}'], + ['\u{1f535}'], + ['\u{1f7e3}'], + ['\u{1f7e4}'], + ['\u26ab'], + ['\u26aa'], + ['\u{1f7e5}'], + ['\u{1f7e7}'], + ['\u{1f7e8}'], + ['\u{1f7e9}'], + ['\u{1f7e6}'], + ['\u{1f7ea}'], + ['\u{1f7eb}'], + ['\u2b1b'], + ['\u2b1c'], + ['\u25fc\ufe0f'], + ['\u25fc'], + ['\u25fb\ufe0f'], + ['\u25fb'], + ['\u25fe'], + ['\u25fd'], ['\u25aa\ufe0f'], ['\u25aa'], ['\u25ab\ufe0f'], ['\u25ab'], - ['\u25fb\ufe0f'], - ['\u25fb'], - ['\u25fc\ufe0f'], - ['\u25fc'], - ['\u25fd'], - ['\u25fe'], - ['\u2b1b'], - ['\u2b1c'], ['\u{1f536}'], ['\u{1f537}'], ['\u{1f538}'], @@ -3978,12 +5261,8 @@ const List> emojis = [ ['\u{1f53b}'], ['\u{1f4a0}'], ['\u{1f518}'], - ['\u{1f532}'], ['\u{1f533}'], - ['\u26aa'], - ['\u26ab'], - ['\u{1f534}'], - ['\u{1f535}'], + ['\u{1f532}'], ['\u{1f3c1}'], ['\u{1f6a9}'], ['\u{1f38c}'], @@ -3992,6 +5271,10 @@ const List> emojis = [ ['\u{1f3f3}'], ['\u{1f3f3}\ufe0f\u200d\u{1f308}'], ['\u{1f3f3}\u200d\u{1f308}'], + ['\u{1f3f3}\ufe0f\u200d\u26a7\ufe0f'], + ['\u{1f3f3}\u200d\u26a7\ufe0f'], + ['\u{1f3f3}\ufe0f\u200d\u26a7'], + ['\u{1f3f3}\u200d\u26a7'], ['\u{1f3f4}\u200d\u2620\ufe0f'], ['\u{1f3f4}\u200d\u2620'], ['\u{1f1e6}\u{1f1e8}'], diff --git a/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakProperty.txt b/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakProperty.txt index d573421d..a12b5eef 100644 --- a/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakProperty.txt +++ b/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakProperty.txt @@ -1,1429 +1,1475 @@ -# GraphemeBreakProperty-12.0.0.txt -# Date: 2019-01-27, 20:10:37 GMT -# © 2019 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# -# Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ - -# ================================================ - -# Property: Grapheme_Cluster_Break - -# All code points not explicitly listed for Grapheme_Cluster_Break -# have the value Other (XX). - -# @missing: 0000..10FFFF; Other - -# ================================================ - -0600..0605 ; Prepend # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE -06DD ; Prepend # Cf ARABIC END OF AYAH -070F ; Prepend # Cf SYRIAC ABBREVIATION MARK -08E2 ; Prepend # Cf ARABIC DISPUTED END OF AYAH -0D4E ; Prepend # Lo MALAYALAM LETTER DOT REPH -110BD ; Prepend # Cf KAITHI NUMBER SIGN -110CD ; Prepend # Cf KAITHI NUMBER SIGN ABOVE -111C2..111C3 ; Prepend # Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA -11A3A ; Prepend # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA -11A84..11A89 ; Prepend # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA -11D46 ; Prepend # Lo MASARAM GONDI REPHA - -# Total code points: 22 - -# ================================================ - -000D ; CR # Cc - -# Total code points: 1 - -# ================================================ - -000A ; LF # Cc - -# Total code points: 1 - -# ================================================ - -0000..0009 ; Control # Cc [10] .. -000B..000C ; Control # Cc [2] .. -000E..001F ; Control # Cc [18] .. -007F..009F ; Control # Cc [33] .. -00AD ; Control # Cf SOFT HYPHEN -061C ; Control # Cf ARABIC LETTER MARK -180E ; Control # Cf MONGOLIAN VOWEL SEPARATOR -200B ; Control # Cf ZERO WIDTH SPACE -200E..200F ; Control # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK -2028 ; Control # Zl LINE SEPARATOR -2029 ; Control # Zp PARAGRAPH SEPARATOR -202A..202E ; Control # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE -2060..2064 ; Control # Cf [5] WORD JOINER..INVISIBLE PLUS -2065 ; Control # Cn -2066..206F ; Control # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES -FEFF ; Control # Cf ZERO WIDTH NO-BREAK SPACE -FFF0..FFF8 ; Control # Cn [9] .. -FFF9..FFFB ; Control # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR -13430..13438 ; Control # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT -1BCA0..1BCA3 ; Control # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP -1D173..1D17A ; Control # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE -E0000 ; Control # Cn -E0001 ; Control # Cf LANGUAGE TAG -E0002..E001F ; Control # Cn [30] .. -E0080..E00FF ; Control # Cn [128] .. -E01F0..E0FFF ; Control # Cn [3600] .. - -# Total code points: 3886 - -# ================================================ - -0300..036F ; Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X -0483..0487 ; Extend # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE -0488..0489 ; Extend # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN -0591..05BD ; Extend # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG -05BF ; Extend # Mn HEBREW POINT RAFE -05C1..05C2 ; Extend # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C4..05C5 ; Extend # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT -05C7 ; Extend # Mn HEBREW POINT QAMATS QATAN -0610..061A ; Extend # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA -064B..065F ; Extend # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW -0670 ; Extend # Mn ARABIC LETTER SUPERSCRIPT ALEF -06D6..06DC ; Extend # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN -06DF..06E4 ; Extend # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA -06E7..06E8 ; Extend # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON -06EA..06ED ; Extend # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM -0711 ; Extend # Mn SYRIAC LETTER SUPERSCRIPT ALAPH -0730..074A ; Extend # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH -07A6..07B0 ; Extend # Mn [11] THAANA ABAFILI..THAANA SUKUN -07EB..07F3 ; Extend # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE -07FD ; Extend # Mn NKO DANTAYALAN -0816..0819 ; Extend # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH -081B..0823 ; Extend # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A -0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U -0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA -0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3..08E1 ; Extend # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA -08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA -093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE -093C ; Extend # Mn DEVANAGARI SIGN NUKTA -0941..0948 ; Extend # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI -094D ; Extend # Mn DEVANAGARI SIGN VIRAMA -0951..0957 ; Extend # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE -0962..0963 ; Extend # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL -0981 ; Extend # Mn BENGALI SIGN CANDRABINDU -09BC ; Extend # Mn BENGALI SIGN NUKTA -09BE ; Extend # Mc BENGALI VOWEL SIGN AA -09C1..09C4 ; Extend # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR -09CD ; Extend # Mn BENGALI SIGN VIRAMA -09D7 ; Extend # Mc BENGALI AU LENGTH MARK -09E2..09E3 ; Extend # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL -09FE ; Extend # Mn BENGALI SANDHI MARK -0A01..0A02 ; Extend # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI -0A3C ; Extend # Mn GURMUKHI SIGN NUKTA -0A41..0A42 ; Extend # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU -0A47..0A48 ; Extend # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI -0A4B..0A4D ; Extend # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA -0A51 ; Extend # Mn GURMUKHI SIGN UDAAT -0A70..0A71 ; Extend # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK -0A75 ; Extend # Mn GURMUKHI SIGN YAKASH -0A81..0A82 ; Extend # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA -0ABC ; Extend # Mn GUJARATI SIGN NUKTA -0AC1..0AC5 ; Extend # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E -0AC7..0AC8 ; Extend # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI -0ACD ; Extend # Mn GUJARATI SIGN VIRAMA -0AE2..0AE3 ; Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL -0AFA..0AFF ; Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE -0B01 ; Extend # Mn ORIYA SIGN CANDRABINDU -0B3C ; Extend # Mn ORIYA SIGN NUKTA -0B3E ; Extend # Mc ORIYA VOWEL SIGN AA -0B3F ; Extend # Mn ORIYA VOWEL SIGN I -0B41..0B44 ; Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR -0B4D ; Extend # Mn ORIYA SIGN VIRAMA -0B56 ; Extend # Mn ORIYA AI LENGTH MARK -0B57 ; Extend # Mc ORIYA AU LENGTH MARK -0B62..0B63 ; Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL -0B82 ; Extend # Mn TAMIL SIGN ANUSVARA -0BBE ; Extend # Mc TAMIL VOWEL SIGN AA -0BC0 ; Extend # Mn TAMIL VOWEL SIGN II -0BCD ; Extend # Mn TAMIL SIGN VIRAMA -0BD7 ; Extend # Mc TAMIL AU LENGTH MARK -0C00 ; Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE -0C04 ; Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE -0C3E..0C40 ; Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II -0C46..0C48 ; Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI -0C4A..0C4D ; Extend # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA -0C55..0C56 ; Extend # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK -0C62..0C63 ; Extend # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL -0C81 ; Extend # Mn KANNADA SIGN CANDRABINDU -0CBC ; Extend # Mn KANNADA SIGN NUKTA -0CBF ; Extend # Mn KANNADA VOWEL SIGN I -0CC2 ; Extend # Mc KANNADA VOWEL SIGN UU -0CC6 ; Extend # Mn KANNADA VOWEL SIGN E -0CCC..0CCD ; Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA -0CD5..0CD6 ; Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CE2..0CE3 ; Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL -0D00..0D01 ; Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU -0D3B..0D3C ; Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA -0D3E ; Extend # Mc MALAYALAM VOWEL SIGN AA -0D41..0D44 ; Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR -0D4D ; Extend # Mn MALAYALAM SIGN VIRAMA -0D57 ; Extend # Mc MALAYALAM AU LENGTH MARK -0D62..0D63 ; Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL -0DCA ; Extend # Mn SINHALA SIGN AL-LAKUNA -0DCF ; Extend # Mc SINHALA VOWEL SIGN AELA-PILLA -0DD2..0DD4 ; Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA -0DD6 ; Extend # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA -0DDF ; Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA -0E31 ; Extend # Mn THAI CHARACTER MAI HAN-AKAT -0E34..0E3A ; Extend # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU -0E47..0E4E ; Extend # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN -0EB1 ; Extend # Mn LAO VOWEL SIGN MAI KAN -0EB4..0EBC ; Extend # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO -0EC8..0ECD ; Extend # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA -0F18..0F19 ; Extend # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS -0F35 ; Extend # Mn TIBETAN MARK NGAS BZUNG NYI ZLA -0F37 ; Extend # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS -0F39 ; Extend # Mn TIBETAN MARK TSA -PHRU -0F71..0F7E ; Extend # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO -0F80..0F84 ; Extend # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA -0F86..0F87 ; Extend # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS -0F8D..0F97 ; Extend # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA -0F99..0FBC ; Extend # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA -0FC6 ; Extend # Mn TIBETAN SYMBOL PADMA GDAN -102D..1030 ; Extend # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU -1032..1037 ; Extend # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW -1039..103A ; Extend # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT -103D..103E ; Extend # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA -1058..1059 ; Extend # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL -105E..1060 ; Extend # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA -1071..1074 ; Extend # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE -1082 ; Extend # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA -1085..1086 ; Extend # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y -108D ; Extend # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE -109D ; Extend # Mn MYANMAR VOWEL SIGN AITON AI -135D..135F ; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK -1712..1714 ; Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1732..1734 ; Extend # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD -1752..1753 ; Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U -1772..1773 ; Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U -17B4..17B5 ; Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA -17B7..17BD ; Extend # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA -17C6 ; Extend # Mn KHMER SIGN NIKAHIT -17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT -17DD ; Extend # Mn KHMER SIGN ATTHACAN -180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE -1885..1886 ; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA -18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA -1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U -1927..1928 ; Extend # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O -1932 ; Extend # Mn LIMBU SMALL LETTER ANUSVARA -1939..193B ; Extend # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I -1A17..1A18 ; Extend # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U -1A1B ; Extend # Mn BUGINESE VOWEL SIGN AE -1A56 ; Extend # Mn TAI THAM CONSONANT SIGN MEDIAL LA -1A58..1A5E ; Extend # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA -1A60 ; Extend # Mn TAI THAM SIGN SAKOT -1A62 ; Extend # Mn TAI THAM VOWEL SIGN MAI SAT -1A65..1A6C ; Extend # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW -1A73..1A7C ; Extend # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN -1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT -1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY -1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG -1B34 ; Extend # Mn BALINESE SIGN REREKAN -1B35 ; Extend # Mc BALINESE VOWEL SIGN TEDUNG -1B36..1B3A ; Extend # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA -1B3C ; Extend # Mn BALINESE VOWEL SIGN LA LENGA -1B42 ; Extend # Mn BALINESE VOWEL SIGN PEPET -1B6B..1B73 ; Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG -1B80..1B81 ; Extend # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR -1BA2..1BA5 ; Extend # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU -1BA8..1BA9 ; Extend # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG -1BAB..1BAD ; Extend # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA -1BE6 ; Extend # Mn BATAK SIGN TOMPI -1BE8..1BE9 ; Extend # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE -1BED ; Extend # Mn BATAK VOWEL SIGN KARO O -1BEF..1BF1 ; Extend # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H -1C2C..1C33 ; Extend # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T -1C36..1C37 ; Extend # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA -1CD0..1CD2 ; Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA -1CD4..1CE0 ; Extend # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA -1CE2..1CE8 ; Extend # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL -1CED ; Extend # Mn VEDIC SIGN TIRYAK -1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE -1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1DC0..1DF9 ; Extend # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; Extend # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW -200C ; Extend # Cf ZERO WIDTH NON-JOINER -20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE -20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH -20E1 ; Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE -20E2..20E4 ; Extend # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE -20E5..20F0 ; Extend # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE -2CEF..2CF1 ; Extend # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS -2D7F ; Extend # Mn TIFINAGH CONSONANT JOINER -2DE0..2DFF ; Extend # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS -302A..302D ; Extend # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK -302E..302F ; Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK -3099..309A ; Extend # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -A66F ; Extend # Mn COMBINING CYRILLIC VZMET -A670..A672 ; Extend # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN -A674..A67D ; Extend # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK -A69E..A69F ; Extend # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E -A6F0..A6F1 ; Extend # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS -A802 ; Extend # Mn SYLOTI NAGRI SIGN DVISVARA -A806 ; Extend # Mn SYLOTI NAGRI SIGN HASANTA -A80B ; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA -A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E -A8C4..A8C5 ; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU -A8E0..A8F1 ; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA -A8FF ; Extend # Mn DEVANAGARI VOWEL SIGN AY -A926..A92D ; Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU -A947..A951 ; Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R -A980..A982 ; Extend # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR -A9B3 ; Extend # Mn JAVANESE SIGN CECAK TELU -A9B6..A9B9 ; Extend # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT -A9BC..A9BD ; Extend # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET -A9E5 ; Extend # Mn MYANMAR SIGN SHAN SAW -AA29..AA2E ; Extend # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE -AA31..AA32 ; Extend # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE -AA35..AA36 ; Extend # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA -AA43 ; Extend # Mn CHAM CONSONANT SIGN FINAL NG -AA4C ; Extend # Mn CHAM CONSONANT SIGN FINAL M -AA7C ; Extend # Mn MYANMAR SIGN TAI LAING TONE-2 -AAB0 ; Extend # Mn TAI VIET MAI KANG -AAB2..AAB4 ; Extend # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U -AAB7..AAB8 ; Extend # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA -AABE..AABF ; Extend # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK -AAC1 ; Extend # Mn TAI VIET TONE MAI THO -AAEC..AAED ; Extend # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI -AAF6 ; Extend # Mn MEETEI MAYEK VIRAMA -ABE5 ; Extend # Mn MEETEI MAYEK VOWEL SIGN ANAP -ABE8 ; Extend # Mn MEETEI MAYEK VOWEL SIGN UNAP -ABED ; Extend # Mn MEETEI MAYEK APUN IYEK -FB1E ; Extend # Mn HEBREW POINT JUDEO-SPANISH VARIKA -FE00..FE0F ; Extend # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 -FE20..FE2F ; Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF -FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK -101FD ; Extend # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE -102E0 ; Extend # Mn COPTIC EPACT THOUSANDS MARK -10376..1037A ; Extend # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII -10A01..10A03 ; Extend # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R -10A05..10A06 ; Extend # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O -10A0C..10A0F ; Extend # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA -10A38..10A3A ; Extend # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW -10A3F ; Extend # Mn KHAROSHTHI VIRAMA -10AE5..10AE6 ; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW -10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI -10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW -11001 ; Extend # Mn BRAHMI SIGN ANUSVARA -11038..11046 ; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA -1107F..11081 ; Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA -110B3..110B6 ; Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI -110B9..110BA ; Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA -11100..11102 ; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA -11127..1112B ; Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU -1112D..11134 ; Extend # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA -11173 ; Extend # Mn MAHAJANI SIGN NUKTA -11180..11181 ; Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA -111B6..111BE ; Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O -111C9..111CC ; Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK -1122F..11231 ; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI -11234 ; Extend # Mn KHOJKI SIGN ANUSVARA -11236..11237 ; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA -1123E ; Extend # Mn KHOJKI SIGN SUKUN -112DF ; Extend # Mn KHUDAWADI SIGN ANUSVARA -112E3..112EA ; Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA -11300..11301 ; Extend # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU -1133B..1133C ; Extend # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA -1133E ; Extend # Mc GRANTHA VOWEL SIGN AA -11340 ; Extend # Mn GRANTHA VOWEL SIGN II -11357 ; Extend # Mc GRANTHA AU LENGTH MARK -11366..1136C ; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX -11370..11374 ; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA -11438..1143F ; Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI -11442..11444 ; Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA -11446 ; Extend # Mn NEWA SIGN NUKTA -1145E ; Extend # Mn NEWA SANDHI MARK -114B0 ; Extend # Mc TIRHUTA VOWEL SIGN AA -114B3..114B8 ; Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL -114BA ; Extend # Mn TIRHUTA VOWEL SIGN SHORT E -114BD ; Extend # Mc TIRHUTA VOWEL SIGN SHORT O -114BF..114C0 ; Extend # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA -114C2..114C3 ; Extend # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA -115AF ; Extend # Mc SIDDHAM VOWEL SIGN AA -115B2..115B5 ; Extend # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR -115BC..115BD ; Extend # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA -115BF..115C0 ; Extend # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA -115DC..115DD ; Extend # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU -11633..1163A ; Extend # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI -1163D ; Extend # Mn MODI SIGN ANUSVARA -1163F..11640 ; Extend # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA -116AB ; Extend # Mn TAKRI SIGN ANUSVARA -116AD ; Extend # Mn TAKRI VOWEL SIGN AA -116B0..116B5 ; Extend # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU -116B7 ; Extend # Mn TAKRI SIGN NUKTA -1171D..1171F ; Extend # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA -11722..11725 ; Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU -11727..1172B ; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER -1182F..11837 ; Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA -11839..1183A ; Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA -119D4..119D7 ; Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR -119DA..119DB ; Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI -119E0 ; Extend # Mn NANDINAGARI SIGN VIRAMA -11A01..11A0A ; Extend # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK -11A33..11A38 ; Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA -11A3B..11A3E ; Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA -11A47 ; Extend # Mn ZANABAZAR SQUARE SUBJOINER -11A51..11A56 ; Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE -11A59..11A5B ; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK -11A8A..11A96 ; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA -11A98..11A99 ; Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER -11C30..11C36 ; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L -11C38..11C3D ; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA -11C3F ; Extend # Mn BHAIKSUKI SIGN VIRAMA -11C92..11CA7 ; Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA -11CAA..11CB0 ; Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA -11CB2..11CB3 ; Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E -11CB5..11CB6 ; Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU -11D31..11D36 ; Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R -11D3A ; Extend # Mn MASARAM GONDI VOWEL SIGN E -11D3C..11D3D ; Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O -11D3F..11D45 ; Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA -11D47 ; Extend # Mn MASARAM GONDI RA-KARA -11D90..11D91 ; Extend # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI -11D95 ; Extend # Mn GUNJALA GONDI SIGN ANUSVARA -11D97 ; Extend # Mn GUNJALA GONDI VIRAMA -11EF3..11EF4 ; Extend # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U -16AF0..16AF4 ; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE -16B30..16B36 ; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM -16F4F ; Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR -16F8F..16F92 ; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW -1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK -1D165 ; Extend # Mc MUSICAL SYMBOL COMBINING STEM -1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 -1D16E..1D172 ; Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 -1D17B..1D182 ; Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE -1D185..1D18B ; Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE -1D1AA..1D1AD ; Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO -1D242..1D244 ; Extend # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME -1DA00..1DA36 ; Extend # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN -1DA3B..1DA6C ; Extend # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT -1DA75 ; Extend # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS -1DA84 ; Extend # Mn SIGNWRITING LOCATION HEAD NECK -1DA9B..1DA9F ; Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 -1DAA1..1DAAF ; Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 -1E000..1E006 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE -1E008..1E018 ; Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU -1E01B..1E021 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI -1E023..1E024 ; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS -1E026..1E02A ; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA -1E130..1E136 ; Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D -1E2EC..1E2EF ; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI -1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS -1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA -1F3FB..1F3FF ; Extend # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 -E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG -E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 - -# Total code points: 1970 - -# ================================================ - -1F1E6..1F1FF ; Regional_Indicator # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z - -# Total code points: 26 - -# ================================================ - -0903 ; SpacingMark # Mc DEVANAGARI SIGN VISARGA -093B ; SpacingMark # Mc DEVANAGARI VOWEL SIGN OOE -093E..0940 ; SpacingMark # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II -0949..094C ; SpacingMark # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU -094E..094F ; SpacingMark # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW -0982..0983 ; SpacingMark # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA -09BF..09C0 ; SpacingMark # Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II -09C7..09C8 ; SpacingMark # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI -09CB..09CC ; SpacingMark # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU -0A03 ; SpacingMark # Mc GURMUKHI SIGN VISARGA -0A3E..0A40 ; SpacingMark # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II -0A83 ; SpacingMark # Mc GUJARATI SIGN VISARGA -0ABE..0AC0 ; SpacingMark # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II -0AC9 ; SpacingMark # Mc GUJARATI VOWEL SIGN CANDRA O -0ACB..0ACC ; SpacingMark # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU -0B02..0B03 ; SpacingMark # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA -0B40 ; SpacingMark # Mc ORIYA VOWEL SIGN II -0B47..0B48 ; SpacingMark # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI -0B4B..0B4C ; SpacingMark # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU -0BBF ; SpacingMark # Mc TAMIL VOWEL SIGN I -0BC1..0BC2 ; SpacingMark # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU -0BC6..0BC8 ; SpacingMark # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI -0BCA..0BCC ; SpacingMark # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU -0C01..0C03 ; SpacingMark # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA -0C41..0C44 ; SpacingMark # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR -0C82..0C83 ; SpacingMark # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA -0CBE ; SpacingMark # Mc KANNADA VOWEL SIGN AA -0CC0..0CC1 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U -0CC3..0CC4 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR -0CC7..0CC8 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI -0CCA..0CCB ; SpacingMark # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO -0D02..0D03 ; SpacingMark # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA -0D3F..0D40 ; SpacingMark # Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II -0D46..0D48 ; SpacingMark # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI -0D4A..0D4C ; SpacingMark # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU -0D82..0D83 ; SpacingMark # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA -0DD0..0DD1 ; SpacingMark # Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA -0DD8..0DDE ; SpacingMark # Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA -0DF2..0DF3 ; SpacingMark # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA -0E33 ; SpacingMark # Lo THAI CHARACTER SARA AM -0EB3 ; SpacingMark # Lo LAO VOWEL SIGN AM -0F3E..0F3F ; SpacingMark # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES -0F7F ; SpacingMark # Mc TIBETAN SIGN RNAM BCAD -1031 ; SpacingMark # Mc MYANMAR VOWEL SIGN E -103B..103C ; SpacingMark # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA -1056..1057 ; SpacingMark # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR -1084 ; SpacingMark # Mc MYANMAR VOWEL SIGN SHAN E -17B6 ; SpacingMark # Mc KHMER VOWEL SIGN AA -17BE..17C5 ; SpacingMark # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU -17C7..17C8 ; SpacingMark # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU -1923..1926 ; SpacingMark # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU -1929..192B ; SpacingMark # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA -1930..1931 ; SpacingMark # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA -1933..1938 ; SpacingMark # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA -1A19..1A1A ; SpacingMark # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O -1A55 ; SpacingMark # Mc TAI THAM CONSONANT SIGN MEDIAL RA -1A57 ; SpacingMark # Mc TAI THAM CONSONANT SIGN LA TANG LAI -1A6D..1A72 ; SpacingMark # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI -1B04 ; SpacingMark # Mc BALINESE SIGN BISAH -1B3B ; SpacingMark # Mc BALINESE VOWEL SIGN RA REPA TEDUNG -1B3D..1B41 ; SpacingMark # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG -1B43..1B44 ; SpacingMark # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG -1B82 ; SpacingMark # Mc SUNDANESE SIGN PANGWISAD -1BA1 ; SpacingMark # Mc SUNDANESE CONSONANT SIGN PAMINGKAL -1BA6..1BA7 ; SpacingMark # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG -1BAA ; SpacingMark # Mc SUNDANESE SIGN PAMAAEH -1BE7 ; SpacingMark # Mc BATAK VOWEL SIGN E -1BEA..1BEC ; SpacingMark # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O -1BEE ; SpacingMark # Mc BATAK VOWEL SIGN U -1BF2..1BF3 ; SpacingMark # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN -1C24..1C2B ; SpacingMark # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU -1C34..1C35 ; SpacingMark # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG -1CE1 ; SpacingMark # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA -1CF7 ; SpacingMark # Mc VEDIC SIGN ATIKRAMA -A823..A824 ; SpacingMark # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I -A827 ; SpacingMark # Mc SYLOTI NAGRI VOWEL SIGN OO -A880..A881 ; SpacingMark # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA -A8B4..A8C3 ; SpacingMark # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU -A952..A953 ; SpacingMark # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA -A983 ; SpacingMark # Mc JAVANESE SIGN WIGNYAN -A9B4..A9B5 ; SpacingMark # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG -A9BA..A9BB ; SpacingMark # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE -A9BE..A9C0 ; SpacingMark # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON -AA2F..AA30 ; SpacingMark # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI -AA33..AA34 ; SpacingMark # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA -AA4D ; SpacingMark # Mc CHAM CONSONANT SIGN FINAL H -AAEB ; SpacingMark # Mc MEETEI MAYEK VOWEL SIGN II -AAEE..AAEF ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU -AAF5 ; SpacingMark # Mc MEETEI MAYEK VOWEL SIGN VISARGA -ABE3..ABE4 ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP -ABE6..ABE7 ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP -ABE9..ABEA ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG -ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK -11000 ; SpacingMark # Mc BRAHMI SIGN CANDRABINDU -11002 ; SpacingMark # Mc BRAHMI SIGN VISARGA -11082 ; SpacingMark # Mc KAITHI SIGN VISARGA -110B0..110B2 ; SpacingMark # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II -110B7..110B8 ; SpacingMark # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU -1112C ; SpacingMark # Mc CHAKMA VOWEL SIGN E -11145..11146 ; SpacingMark # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI -11182 ; SpacingMark # Mc SHARADA SIGN VISARGA -111B3..111B5 ; SpacingMark # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II -111BF..111C0 ; SpacingMark # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA -1122C..1122E ; SpacingMark # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II -11232..11233 ; SpacingMark # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU -11235 ; SpacingMark # Mc KHOJKI SIGN VIRAMA -112E0..112E2 ; SpacingMark # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II -11302..11303 ; SpacingMark # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA -1133F ; SpacingMark # Mc GRANTHA VOWEL SIGN I -11341..11344 ; SpacingMark # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR -11347..11348 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI -1134B..1134D ; SpacingMark # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA -11362..11363 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL -11435..11437 ; SpacingMark # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II -11440..11441 ; SpacingMark # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU -11445 ; SpacingMark # Mc NEWA SIGN VISARGA -114B1..114B2 ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II -114B9 ; SpacingMark # Mc TIRHUTA VOWEL SIGN E -114BB..114BC ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O -114BE ; SpacingMark # Mc TIRHUTA VOWEL SIGN AU -114C1 ; SpacingMark # Mc TIRHUTA SIGN VISARGA -115B0..115B1 ; SpacingMark # Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II -115B8..115BB ; SpacingMark # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU -115BE ; SpacingMark # Mc SIDDHAM SIGN VISARGA -11630..11632 ; SpacingMark # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II -1163B..1163C ; SpacingMark # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU -1163E ; SpacingMark # Mc MODI SIGN VISARGA -116AC ; SpacingMark # Mc TAKRI SIGN VISARGA -116AE..116AF ; SpacingMark # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II -116B6 ; SpacingMark # Mc TAKRI SIGN VIRAMA -11720..11721 ; SpacingMark # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA -11726 ; SpacingMark # Mc AHOM VOWEL SIGN E -1182C..1182E ; SpacingMark # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II -11838 ; SpacingMark # Mc DOGRA SIGN VISARGA -119D1..119D3 ; SpacingMark # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II -119DC..119DF ; SpacingMark # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA -119E4 ; SpacingMark # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E -11A39 ; SpacingMark # Mc ZANABAZAR SQUARE SIGN VISARGA -11A57..11A58 ; SpacingMark # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU -11A97 ; SpacingMark # Mc SOYOMBO SIGN VISARGA -11C2F ; SpacingMark # Mc BHAIKSUKI VOWEL SIGN AA -11C3E ; SpacingMark # Mc BHAIKSUKI SIGN VISARGA -11CA9 ; SpacingMark # Mc MARCHEN SUBJOINED LETTER YA -11CB1 ; SpacingMark # Mc MARCHEN VOWEL SIGN I -11CB4 ; SpacingMark # Mc MARCHEN VOWEL SIGN O -11D8A..11D8E ; SpacingMark # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU -11D93..11D94 ; SpacingMark # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU -11D96 ; SpacingMark # Mc GUNJALA GONDI SIGN VISARGA -11EF5..11EF6 ; SpacingMark # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O -16F51..16F87 ; SpacingMark # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI -1D166 ; SpacingMark # Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM -1D16D ; SpacingMark # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT - -# Total code points: 375 - -# ================================================ - -1100..115F ; L # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER -A960..A97C ; L # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH - -# Total code points: 125 - -# ================================================ - -1160..11A7 ; V # Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE -D7B0..D7C6 ; V # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E - -# Total code points: 95 - -# ================================================ - -11A8..11FF ; T # Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN -D7CB..D7FB ; T # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH - -# Total code points: 137 - -# ================================================ - -AC00 ; LV # Lo HANGUL SYLLABLE GA -AC1C ; LV # Lo HANGUL SYLLABLE GAE -AC38 ; LV # Lo HANGUL SYLLABLE GYA -AC54 ; LV # Lo HANGUL SYLLABLE GYAE -AC70 ; LV # Lo HANGUL SYLLABLE GEO -AC8C ; LV # Lo HANGUL SYLLABLE GE -ACA8 ; LV # Lo HANGUL SYLLABLE GYEO -ACC4 ; LV # Lo HANGUL SYLLABLE GYE -ACE0 ; LV # Lo HANGUL SYLLABLE GO -ACFC ; LV # Lo HANGUL SYLLABLE GWA -AD18 ; LV # Lo HANGUL SYLLABLE GWAE -AD34 ; LV # Lo HANGUL SYLLABLE GOE -AD50 ; LV # Lo HANGUL SYLLABLE GYO -AD6C ; LV # Lo HANGUL SYLLABLE GU -AD88 ; LV # Lo HANGUL SYLLABLE GWEO -ADA4 ; LV # Lo HANGUL SYLLABLE GWE -ADC0 ; LV # Lo HANGUL SYLLABLE GWI -ADDC ; LV # Lo HANGUL SYLLABLE GYU -ADF8 ; LV # Lo HANGUL SYLLABLE GEU -AE14 ; LV # Lo HANGUL SYLLABLE GYI -AE30 ; LV # Lo HANGUL SYLLABLE GI -AE4C ; LV # Lo HANGUL SYLLABLE GGA -AE68 ; LV # Lo HANGUL SYLLABLE GGAE -AE84 ; LV # Lo HANGUL SYLLABLE GGYA -AEA0 ; LV # Lo HANGUL SYLLABLE GGYAE -AEBC ; LV # Lo HANGUL SYLLABLE GGEO -AED8 ; LV # Lo HANGUL SYLLABLE GGE -AEF4 ; LV # Lo HANGUL SYLLABLE GGYEO -AF10 ; LV # Lo HANGUL SYLLABLE GGYE -AF2C ; LV # Lo HANGUL SYLLABLE GGO -AF48 ; LV # Lo HANGUL SYLLABLE GGWA -AF64 ; LV # Lo HANGUL SYLLABLE GGWAE -AF80 ; LV # Lo HANGUL SYLLABLE GGOE -AF9C ; LV # Lo HANGUL SYLLABLE GGYO -AFB8 ; LV # Lo HANGUL SYLLABLE GGU -AFD4 ; LV # Lo HANGUL SYLLABLE GGWEO -AFF0 ; LV # Lo HANGUL SYLLABLE GGWE -B00C ; LV # Lo HANGUL SYLLABLE GGWI -B028 ; LV # Lo HANGUL SYLLABLE GGYU -B044 ; LV # Lo HANGUL SYLLABLE GGEU -B060 ; LV # Lo HANGUL SYLLABLE GGYI -B07C ; LV # Lo HANGUL SYLLABLE GGI -B098 ; LV # Lo HANGUL SYLLABLE NA -B0B4 ; LV # Lo HANGUL SYLLABLE NAE -B0D0 ; LV # Lo HANGUL SYLLABLE NYA -B0EC ; LV # Lo HANGUL SYLLABLE NYAE -B108 ; LV # Lo HANGUL SYLLABLE NEO -B124 ; LV # Lo HANGUL SYLLABLE NE -B140 ; LV # Lo HANGUL SYLLABLE NYEO -B15C ; LV # Lo HANGUL SYLLABLE NYE -B178 ; LV # Lo HANGUL SYLLABLE NO -B194 ; LV # Lo HANGUL SYLLABLE NWA -B1B0 ; LV # Lo HANGUL SYLLABLE NWAE -B1CC ; LV # Lo HANGUL SYLLABLE NOE -B1E8 ; LV # Lo HANGUL SYLLABLE NYO -B204 ; LV # Lo HANGUL SYLLABLE NU -B220 ; LV # Lo HANGUL SYLLABLE NWEO -B23C ; LV # Lo HANGUL SYLLABLE NWE -B258 ; LV # Lo HANGUL SYLLABLE NWI -B274 ; LV # Lo HANGUL SYLLABLE NYU -B290 ; LV # Lo HANGUL SYLLABLE NEU -B2AC ; LV # Lo HANGUL SYLLABLE NYI -B2C8 ; LV # Lo HANGUL SYLLABLE NI -B2E4 ; LV # Lo HANGUL SYLLABLE DA -B300 ; LV # Lo HANGUL SYLLABLE DAE -B31C ; LV # Lo HANGUL SYLLABLE DYA -B338 ; LV # Lo HANGUL SYLLABLE DYAE -B354 ; LV # Lo HANGUL SYLLABLE DEO -B370 ; LV # Lo HANGUL SYLLABLE DE -B38C ; LV # Lo HANGUL SYLLABLE DYEO -B3A8 ; LV # Lo HANGUL SYLLABLE DYE -B3C4 ; LV # Lo HANGUL SYLLABLE DO -B3E0 ; LV # Lo HANGUL SYLLABLE DWA -B3FC ; LV # Lo HANGUL SYLLABLE DWAE -B418 ; LV # Lo HANGUL SYLLABLE DOE -B434 ; LV # Lo HANGUL SYLLABLE DYO -B450 ; LV # Lo HANGUL SYLLABLE DU -B46C ; LV # Lo HANGUL SYLLABLE DWEO -B488 ; LV # Lo HANGUL SYLLABLE DWE -B4A4 ; LV # Lo HANGUL SYLLABLE DWI -B4C0 ; LV # Lo HANGUL SYLLABLE DYU -B4DC ; LV # Lo HANGUL SYLLABLE DEU -B4F8 ; LV # Lo HANGUL SYLLABLE DYI -B514 ; LV # Lo HANGUL SYLLABLE DI -B530 ; LV # Lo HANGUL SYLLABLE DDA -B54C ; LV # Lo HANGUL SYLLABLE DDAE -B568 ; LV # Lo HANGUL SYLLABLE DDYA -B584 ; LV # Lo HANGUL SYLLABLE DDYAE -B5A0 ; LV # Lo HANGUL SYLLABLE DDEO -B5BC ; LV # Lo HANGUL SYLLABLE DDE -B5D8 ; LV # Lo HANGUL SYLLABLE DDYEO -B5F4 ; LV # Lo HANGUL SYLLABLE DDYE -B610 ; LV # Lo HANGUL SYLLABLE DDO -B62C ; LV # Lo HANGUL SYLLABLE DDWA -B648 ; LV # Lo HANGUL SYLLABLE DDWAE -B664 ; LV # Lo HANGUL SYLLABLE DDOE -B680 ; LV # Lo HANGUL SYLLABLE DDYO -B69C ; LV # Lo HANGUL SYLLABLE DDU -B6B8 ; LV # Lo HANGUL SYLLABLE DDWEO -B6D4 ; LV # Lo HANGUL SYLLABLE DDWE -B6F0 ; LV # Lo HANGUL SYLLABLE DDWI -B70C ; LV # Lo HANGUL SYLLABLE DDYU -B728 ; LV # Lo HANGUL SYLLABLE DDEU -B744 ; LV # Lo HANGUL SYLLABLE DDYI -B760 ; LV # Lo HANGUL SYLLABLE DDI -B77C ; LV # Lo HANGUL SYLLABLE RA -B798 ; LV # Lo HANGUL SYLLABLE RAE -B7B4 ; LV # Lo HANGUL SYLLABLE RYA -B7D0 ; LV # Lo HANGUL SYLLABLE RYAE -B7EC ; LV # Lo HANGUL SYLLABLE REO -B808 ; LV # Lo HANGUL SYLLABLE RE -B824 ; LV # Lo HANGUL SYLLABLE RYEO -B840 ; LV # Lo HANGUL SYLLABLE RYE -B85C ; LV # Lo HANGUL SYLLABLE RO -B878 ; LV # Lo HANGUL SYLLABLE RWA -B894 ; LV # Lo HANGUL SYLLABLE RWAE -B8B0 ; LV # Lo HANGUL SYLLABLE ROE -B8CC ; LV # Lo HANGUL SYLLABLE RYO -B8E8 ; LV # Lo HANGUL SYLLABLE RU -B904 ; LV # Lo HANGUL SYLLABLE RWEO -B920 ; LV # Lo HANGUL SYLLABLE RWE -B93C ; LV # Lo HANGUL SYLLABLE RWI -B958 ; LV # Lo HANGUL SYLLABLE RYU -B974 ; LV # Lo HANGUL SYLLABLE REU -B990 ; LV # Lo HANGUL SYLLABLE RYI -B9AC ; LV # Lo HANGUL SYLLABLE RI -B9C8 ; LV # Lo HANGUL SYLLABLE MA -B9E4 ; LV # Lo HANGUL SYLLABLE MAE -BA00 ; LV # Lo HANGUL SYLLABLE MYA -BA1C ; LV # Lo HANGUL SYLLABLE MYAE -BA38 ; LV # Lo HANGUL SYLLABLE MEO -BA54 ; LV # Lo HANGUL SYLLABLE ME -BA70 ; LV # Lo HANGUL SYLLABLE MYEO -BA8C ; LV # Lo HANGUL SYLLABLE MYE -BAA8 ; LV # Lo HANGUL SYLLABLE MO -BAC4 ; LV # Lo HANGUL SYLLABLE MWA -BAE0 ; LV # Lo HANGUL SYLLABLE MWAE -BAFC ; LV # Lo HANGUL SYLLABLE MOE -BB18 ; LV # Lo HANGUL SYLLABLE MYO -BB34 ; LV # Lo HANGUL SYLLABLE MU -BB50 ; LV # Lo HANGUL SYLLABLE MWEO -BB6C ; LV # Lo HANGUL SYLLABLE MWE -BB88 ; LV # Lo HANGUL SYLLABLE MWI -BBA4 ; LV # Lo HANGUL SYLLABLE MYU -BBC0 ; LV # Lo HANGUL SYLLABLE MEU -BBDC ; LV # Lo HANGUL SYLLABLE MYI -BBF8 ; LV # Lo HANGUL SYLLABLE MI -BC14 ; LV # Lo HANGUL SYLLABLE BA -BC30 ; LV # Lo HANGUL SYLLABLE BAE -BC4C ; LV # Lo HANGUL SYLLABLE BYA -BC68 ; LV # Lo HANGUL SYLLABLE BYAE -BC84 ; LV # Lo HANGUL SYLLABLE BEO -BCA0 ; LV # Lo HANGUL SYLLABLE BE -BCBC ; LV # Lo HANGUL SYLLABLE BYEO -BCD8 ; LV # Lo HANGUL SYLLABLE BYE -BCF4 ; LV # Lo HANGUL SYLLABLE BO -BD10 ; LV # Lo HANGUL SYLLABLE BWA -BD2C ; LV # Lo HANGUL SYLLABLE BWAE -BD48 ; LV # Lo HANGUL SYLLABLE BOE -BD64 ; LV # Lo HANGUL SYLLABLE BYO -BD80 ; LV # Lo HANGUL SYLLABLE BU -BD9C ; LV # Lo HANGUL SYLLABLE BWEO -BDB8 ; LV # Lo HANGUL SYLLABLE BWE -BDD4 ; LV # Lo HANGUL SYLLABLE BWI -BDF0 ; LV # Lo HANGUL SYLLABLE BYU -BE0C ; LV # Lo HANGUL SYLLABLE BEU -BE28 ; LV # Lo HANGUL SYLLABLE BYI -BE44 ; LV # Lo HANGUL SYLLABLE BI -BE60 ; LV # Lo HANGUL SYLLABLE BBA -BE7C ; LV # Lo HANGUL SYLLABLE BBAE -BE98 ; LV # Lo HANGUL SYLLABLE BBYA -BEB4 ; LV # Lo HANGUL SYLLABLE BBYAE -BED0 ; LV # Lo HANGUL SYLLABLE BBEO -BEEC ; LV # Lo HANGUL SYLLABLE BBE -BF08 ; LV # Lo HANGUL SYLLABLE BBYEO -BF24 ; LV # Lo HANGUL SYLLABLE BBYE -BF40 ; LV # Lo HANGUL SYLLABLE BBO -BF5C ; LV # Lo HANGUL SYLLABLE BBWA -BF78 ; LV # Lo HANGUL SYLLABLE BBWAE -BF94 ; LV # Lo HANGUL SYLLABLE BBOE -BFB0 ; LV # Lo HANGUL SYLLABLE BBYO -BFCC ; LV # Lo HANGUL SYLLABLE BBU -BFE8 ; LV # Lo HANGUL SYLLABLE BBWEO -C004 ; LV # Lo HANGUL SYLLABLE BBWE -C020 ; LV # Lo HANGUL SYLLABLE BBWI -C03C ; LV # Lo HANGUL SYLLABLE BBYU -C058 ; LV # Lo HANGUL SYLLABLE BBEU -C074 ; LV # Lo HANGUL SYLLABLE BBYI -C090 ; LV # Lo HANGUL SYLLABLE BBI -C0AC ; LV # Lo HANGUL SYLLABLE SA -C0C8 ; LV # Lo HANGUL SYLLABLE SAE -C0E4 ; LV # Lo HANGUL SYLLABLE SYA -C100 ; LV # Lo HANGUL SYLLABLE SYAE -C11C ; LV # Lo HANGUL SYLLABLE SEO -C138 ; LV # Lo HANGUL SYLLABLE SE -C154 ; LV # Lo HANGUL SYLLABLE SYEO -C170 ; LV # Lo HANGUL SYLLABLE SYE -C18C ; LV # Lo HANGUL SYLLABLE SO -C1A8 ; LV # Lo HANGUL SYLLABLE SWA -C1C4 ; LV # Lo HANGUL SYLLABLE SWAE -C1E0 ; LV # Lo HANGUL SYLLABLE SOE -C1FC ; LV # Lo HANGUL SYLLABLE SYO -C218 ; LV # Lo HANGUL SYLLABLE SU -C234 ; LV # Lo HANGUL SYLLABLE SWEO -C250 ; LV # Lo HANGUL SYLLABLE SWE -C26C ; LV # Lo HANGUL SYLLABLE SWI -C288 ; LV # Lo HANGUL SYLLABLE SYU -C2A4 ; LV # Lo HANGUL SYLLABLE SEU -C2C0 ; LV # Lo HANGUL SYLLABLE SYI -C2DC ; LV # Lo HANGUL SYLLABLE SI -C2F8 ; LV # Lo HANGUL SYLLABLE SSA -C314 ; LV # Lo HANGUL SYLLABLE SSAE -C330 ; LV # Lo HANGUL SYLLABLE SSYA -C34C ; LV # Lo HANGUL SYLLABLE SSYAE -C368 ; LV # Lo HANGUL SYLLABLE SSEO -C384 ; LV # Lo HANGUL SYLLABLE SSE -C3A0 ; LV # Lo HANGUL SYLLABLE SSYEO -C3BC ; LV # Lo HANGUL SYLLABLE SSYE -C3D8 ; LV # Lo HANGUL SYLLABLE SSO -C3F4 ; LV # Lo HANGUL SYLLABLE SSWA -C410 ; LV # Lo HANGUL SYLLABLE SSWAE -C42C ; LV # Lo HANGUL SYLLABLE SSOE -C448 ; LV # Lo HANGUL SYLLABLE SSYO -C464 ; LV # Lo HANGUL SYLLABLE SSU -C480 ; LV # Lo HANGUL SYLLABLE SSWEO -C49C ; LV # Lo HANGUL SYLLABLE SSWE -C4B8 ; LV # Lo HANGUL SYLLABLE SSWI -C4D4 ; LV # Lo HANGUL SYLLABLE SSYU -C4F0 ; LV # Lo HANGUL SYLLABLE SSEU -C50C ; LV # Lo HANGUL SYLLABLE SSYI -C528 ; LV # Lo HANGUL SYLLABLE SSI -C544 ; LV # Lo HANGUL SYLLABLE A -C560 ; LV # Lo HANGUL SYLLABLE AE -C57C ; LV # Lo HANGUL SYLLABLE YA -C598 ; LV # Lo HANGUL SYLLABLE YAE -C5B4 ; LV # Lo HANGUL SYLLABLE EO -C5D0 ; LV # Lo HANGUL SYLLABLE E -C5EC ; LV # Lo HANGUL SYLLABLE YEO -C608 ; LV # Lo HANGUL SYLLABLE YE -C624 ; LV # Lo HANGUL SYLLABLE O -C640 ; LV # Lo HANGUL SYLLABLE WA -C65C ; LV # Lo HANGUL SYLLABLE WAE -C678 ; LV # Lo HANGUL SYLLABLE OE -C694 ; LV # Lo HANGUL SYLLABLE YO -C6B0 ; LV # Lo HANGUL SYLLABLE U -C6CC ; LV # Lo HANGUL SYLLABLE WEO -C6E8 ; LV # Lo HANGUL SYLLABLE WE -C704 ; LV # Lo HANGUL SYLLABLE WI -C720 ; LV # Lo HANGUL SYLLABLE YU -C73C ; LV # Lo HANGUL SYLLABLE EU -C758 ; LV # Lo HANGUL SYLLABLE YI -C774 ; LV # Lo HANGUL SYLLABLE I -C790 ; LV # Lo HANGUL SYLLABLE JA -C7AC ; LV # Lo HANGUL SYLLABLE JAE -C7C8 ; LV # Lo HANGUL SYLLABLE JYA -C7E4 ; LV # Lo HANGUL SYLLABLE JYAE -C800 ; LV # Lo HANGUL SYLLABLE JEO -C81C ; LV # Lo HANGUL SYLLABLE JE -C838 ; LV # Lo HANGUL SYLLABLE JYEO -C854 ; LV # Lo HANGUL SYLLABLE JYE -C870 ; LV # Lo HANGUL SYLLABLE JO -C88C ; LV # Lo HANGUL SYLLABLE JWA -C8A8 ; LV # Lo HANGUL SYLLABLE JWAE -C8C4 ; LV # Lo HANGUL SYLLABLE JOE -C8E0 ; LV # Lo HANGUL SYLLABLE JYO -C8FC ; LV # Lo HANGUL SYLLABLE JU -C918 ; LV # Lo HANGUL SYLLABLE JWEO -C934 ; LV # Lo HANGUL SYLLABLE JWE -C950 ; LV # Lo HANGUL SYLLABLE JWI -C96C ; LV # Lo HANGUL SYLLABLE JYU -C988 ; LV # Lo HANGUL SYLLABLE JEU -C9A4 ; LV # Lo HANGUL SYLLABLE JYI -C9C0 ; LV # Lo HANGUL SYLLABLE JI -C9DC ; LV # Lo HANGUL SYLLABLE JJA -C9F8 ; LV # Lo HANGUL SYLLABLE JJAE -CA14 ; LV # Lo HANGUL SYLLABLE JJYA -CA30 ; LV # Lo HANGUL SYLLABLE JJYAE -CA4C ; LV # Lo HANGUL SYLLABLE JJEO -CA68 ; LV # Lo HANGUL SYLLABLE JJE -CA84 ; LV # Lo HANGUL SYLLABLE JJYEO -CAA0 ; LV # Lo HANGUL SYLLABLE JJYE -CABC ; LV # Lo HANGUL SYLLABLE JJO -CAD8 ; LV # Lo HANGUL SYLLABLE JJWA -CAF4 ; LV # Lo HANGUL SYLLABLE JJWAE -CB10 ; LV # Lo HANGUL SYLLABLE JJOE -CB2C ; LV # Lo HANGUL SYLLABLE JJYO -CB48 ; LV # Lo HANGUL SYLLABLE JJU -CB64 ; LV # Lo HANGUL SYLLABLE JJWEO -CB80 ; LV # Lo HANGUL SYLLABLE JJWE -CB9C ; LV # Lo HANGUL SYLLABLE JJWI -CBB8 ; LV # Lo HANGUL SYLLABLE JJYU -CBD4 ; LV # Lo HANGUL SYLLABLE JJEU -CBF0 ; LV # Lo HANGUL SYLLABLE JJYI -CC0C ; LV # Lo HANGUL SYLLABLE JJI -CC28 ; LV # Lo HANGUL SYLLABLE CA -CC44 ; LV # Lo HANGUL SYLLABLE CAE -CC60 ; LV # Lo HANGUL SYLLABLE CYA -CC7C ; LV # Lo HANGUL SYLLABLE CYAE -CC98 ; LV # Lo HANGUL SYLLABLE CEO -CCB4 ; LV # Lo HANGUL SYLLABLE CE -CCD0 ; LV # Lo HANGUL SYLLABLE CYEO -CCEC ; LV # Lo HANGUL SYLLABLE CYE -CD08 ; LV # Lo HANGUL SYLLABLE CO -CD24 ; LV # Lo HANGUL SYLLABLE CWA -CD40 ; LV # Lo HANGUL SYLLABLE CWAE -CD5C ; LV # Lo HANGUL SYLLABLE COE -CD78 ; LV # Lo HANGUL SYLLABLE CYO -CD94 ; LV # Lo HANGUL SYLLABLE CU -CDB0 ; LV # Lo HANGUL SYLLABLE CWEO -CDCC ; LV # Lo HANGUL SYLLABLE CWE -CDE8 ; LV # Lo HANGUL SYLLABLE CWI -CE04 ; LV # Lo HANGUL SYLLABLE CYU -CE20 ; LV # Lo HANGUL SYLLABLE CEU -CE3C ; LV # Lo HANGUL SYLLABLE CYI -CE58 ; LV # Lo HANGUL SYLLABLE CI -CE74 ; LV # Lo HANGUL SYLLABLE KA -CE90 ; LV # Lo HANGUL SYLLABLE KAE -CEAC ; LV # Lo HANGUL SYLLABLE KYA -CEC8 ; LV # Lo HANGUL SYLLABLE KYAE -CEE4 ; LV # Lo HANGUL SYLLABLE KEO -CF00 ; LV # Lo HANGUL SYLLABLE KE -CF1C ; LV # Lo HANGUL SYLLABLE KYEO -CF38 ; LV # Lo HANGUL SYLLABLE KYE -CF54 ; LV # Lo HANGUL SYLLABLE KO -CF70 ; LV # Lo HANGUL SYLLABLE KWA -CF8C ; LV # Lo HANGUL SYLLABLE KWAE -CFA8 ; LV # Lo HANGUL SYLLABLE KOE -CFC4 ; LV # Lo HANGUL SYLLABLE KYO -CFE0 ; LV # Lo HANGUL SYLLABLE KU -CFFC ; LV # Lo HANGUL SYLLABLE KWEO -D018 ; LV # Lo HANGUL SYLLABLE KWE -D034 ; LV # Lo HANGUL SYLLABLE KWI -D050 ; LV # Lo HANGUL SYLLABLE KYU -D06C ; LV # Lo HANGUL SYLLABLE KEU -D088 ; LV # Lo HANGUL SYLLABLE KYI -D0A4 ; LV # Lo HANGUL SYLLABLE KI -D0C0 ; LV # Lo HANGUL SYLLABLE TA -D0DC ; LV # Lo HANGUL SYLLABLE TAE -D0F8 ; LV # Lo HANGUL SYLLABLE TYA -D114 ; LV # Lo HANGUL SYLLABLE TYAE -D130 ; LV # Lo HANGUL SYLLABLE TEO -D14C ; LV # Lo HANGUL SYLLABLE TE -D168 ; LV # Lo HANGUL SYLLABLE TYEO -D184 ; LV # Lo HANGUL SYLLABLE TYE -D1A0 ; LV # Lo HANGUL SYLLABLE TO -D1BC ; LV # Lo HANGUL SYLLABLE TWA -D1D8 ; LV # Lo HANGUL SYLLABLE TWAE -D1F4 ; LV # Lo HANGUL SYLLABLE TOE -D210 ; LV # Lo HANGUL SYLLABLE TYO -D22C ; LV # Lo HANGUL SYLLABLE TU -D248 ; LV # Lo HANGUL SYLLABLE TWEO -D264 ; LV # Lo HANGUL SYLLABLE TWE -D280 ; LV # Lo HANGUL SYLLABLE TWI -D29C ; LV # Lo HANGUL SYLLABLE TYU -D2B8 ; LV # Lo HANGUL SYLLABLE TEU -D2D4 ; LV # Lo HANGUL SYLLABLE TYI -D2F0 ; LV # Lo HANGUL SYLLABLE TI -D30C ; LV # Lo HANGUL SYLLABLE PA -D328 ; LV # Lo HANGUL SYLLABLE PAE -D344 ; LV # Lo HANGUL SYLLABLE PYA -D360 ; LV # Lo HANGUL SYLLABLE PYAE -D37C ; LV # Lo HANGUL SYLLABLE PEO -D398 ; LV # Lo HANGUL SYLLABLE PE -D3B4 ; LV # Lo HANGUL SYLLABLE PYEO -D3D0 ; LV # Lo HANGUL SYLLABLE PYE -D3EC ; LV # Lo HANGUL SYLLABLE PO -D408 ; LV # Lo HANGUL SYLLABLE PWA -D424 ; LV # Lo HANGUL SYLLABLE PWAE -D440 ; LV # Lo HANGUL SYLLABLE POE -D45C ; LV # Lo HANGUL SYLLABLE PYO -D478 ; LV # Lo HANGUL SYLLABLE PU -D494 ; LV # Lo HANGUL SYLLABLE PWEO -D4B0 ; LV # Lo HANGUL SYLLABLE PWE -D4CC ; LV # Lo HANGUL SYLLABLE PWI -D4E8 ; LV # Lo HANGUL SYLLABLE PYU -D504 ; LV # Lo HANGUL SYLLABLE PEU -D520 ; LV # Lo HANGUL SYLLABLE PYI -D53C ; LV # Lo HANGUL SYLLABLE PI -D558 ; LV # Lo HANGUL SYLLABLE HA -D574 ; LV # Lo HANGUL SYLLABLE HAE -D590 ; LV # Lo HANGUL SYLLABLE HYA -D5AC ; LV # Lo HANGUL SYLLABLE HYAE -D5C8 ; LV # Lo HANGUL SYLLABLE HEO -D5E4 ; LV # Lo HANGUL SYLLABLE HE -D600 ; LV # Lo HANGUL SYLLABLE HYEO -D61C ; LV # Lo HANGUL SYLLABLE HYE -D638 ; LV # Lo HANGUL SYLLABLE HO -D654 ; LV # Lo HANGUL SYLLABLE HWA -D670 ; LV # Lo HANGUL SYLLABLE HWAE -D68C ; LV # Lo HANGUL SYLLABLE HOE -D6A8 ; LV # Lo HANGUL SYLLABLE HYO -D6C4 ; LV # Lo HANGUL SYLLABLE HU -D6E0 ; LV # Lo HANGUL SYLLABLE HWEO -D6FC ; LV # Lo HANGUL SYLLABLE HWE -D718 ; LV # Lo HANGUL SYLLABLE HWI -D734 ; LV # Lo HANGUL SYLLABLE HYU -D750 ; LV # Lo HANGUL SYLLABLE HEU -D76C ; LV # Lo HANGUL SYLLABLE HYI -D788 ; LV # Lo HANGUL SYLLABLE HI - -# Total code points: 399 - -# ================================================ - -AC01..AC1B ; LVT # Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH -AC1D..AC37 ; LVT # Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH -AC39..AC53 ; LVT # Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH -AC55..AC6F ; LVT # Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH -AC71..AC8B ; LVT # Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH -AC8D..ACA7 ; LVT # Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH -ACA9..ACC3 ; LVT # Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH -ACC5..ACDF ; LVT # Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH -ACE1..ACFB ; LVT # Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH -ACFD..AD17 ; LVT # Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH -AD19..AD33 ; LVT # Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH -AD35..AD4F ; LVT # Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH -AD51..AD6B ; LVT # Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH -AD6D..AD87 ; LVT # Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH -AD89..ADA3 ; LVT # Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH -ADA5..ADBF ; LVT # Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH -ADC1..ADDB ; LVT # Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH -ADDD..ADF7 ; LVT # Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH -ADF9..AE13 ; LVT # Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH -AE15..AE2F ; LVT # Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH -AE31..AE4B ; LVT # Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH -AE4D..AE67 ; LVT # Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH -AE69..AE83 ; LVT # Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH -AE85..AE9F ; LVT # Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH -AEA1..AEBB ; LVT # Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH -AEBD..AED7 ; LVT # Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH -AED9..AEF3 ; LVT # Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH -AEF5..AF0F ; LVT # Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH -AF11..AF2B ; LVT # Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH -AF2D..AF47 ; LVT # Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH -AF49..AF63 ; LVT # Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH -AF65..AF7F ; LVT # Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH -AF81..AF9B ; LVT # Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH -AF9D..AFB7 ; LVT # Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH -AFB9..AFD3 ; LVT # Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH -AFD5..AFEF ; LVT # Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH -AFF1..B00B ; LVT # Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH -B00D..B027 ; LVT # Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH -B029..B043 ; LVT # Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH -B045..B05F ; LVT # Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH -B061..B07B ; LVT # Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH -B07D..B097 ; LVT # Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH -B099..B0B3 ; LVT # Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH -B0B5..B0CF ; LVT # Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH -B0D1..B0EB ; LVT # Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH -B0ED..B107 ; LVT # Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH -B109..B123 ; LVT # Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH -B125..B13F ; LVT # Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH -B141..B15B ; LVT # Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH -B15D..B177 ; LVT # Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH -B179..B193 ; LVT # Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH -B195..B1AF ; LVT # Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH -B1B1..B1CB ; LVT # Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH -B1CD..B1E7 ; LVT # Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH -B1E9..B203 ; LVT # Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH -B205..B21F ; LVT # Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH -B221..B23B ; LVT # Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH -B23D..B257 ; LVT # Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH -B259..B273 ; LVT # Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH -B275..B28F ; LVT # Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH -B291..B2AB ; LVT # Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH -B2AD..B2C7 ; LVT # Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH -B2C9..B2E3 ; LVT # Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH -B2E5..B2FF ; LVT # Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH -B301..B31B ; LVT # Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH -B31D..B337 ; LVT # Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH -B339..B353 ; LVT # Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH -B355..B36F ; LVT # Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH -B371..B38B ; LVT # Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH -B38D..B3A7 ; LVT # Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH -B3A9..B3C3 ; LVT # Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH -B3C5..B3DF ; LVT # Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH -B3E1..B3FB ; LVT # Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH -B3FD..B417 ; LVT # Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH -B419..B433 ; LVT # Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH -B435..B44F ; LVT # Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH -B451..B46B ; LVT # Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH -B46D..B487 ; LVT # Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH -B489..B4A3 ; LVT # Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH -B4A5..B4BF ; LVT # Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH -B4C1..B4DB ; LVT # Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH -B4DD..B4F7 ; LVT # Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH -B4F9..B513 ; LVT # Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH -B515..B52F ; LVT # Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH -B531..B54B ; LVT # Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH -B54D..B567 ; LVT # Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH -B569..B583 ; LVT # Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH -B585..B59F ; LVT # Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH -B5A1..B5BB ; LVT # Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH -B5BD..B5D7 ; LVT # Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH -B5D9..B5F3 ; LVT # Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH -B5F5..B60F ; LVT # Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH -B611..B62B ; LVT # Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH -B62D..B647 ; LVT # Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH -B649..B663 ; LVT # Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH -B665..B67F ; LVT # Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH -B681..B69B ; LVT # Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH -B69D..B6B7 ; LVT # Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH -B6B9..B6D3 ; LVT # Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH -B6D5..B6EF ; LVT # Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH -B6F1..B70B ; LVT # Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH -B70D..B727 ; LVT # Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH -B729..B743 ; LVT # Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH -B745..B75F ; LVT # Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH -B761..B77B ; LVT # Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH -B77D..B797 ; LVT # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH -B799..B7B3 ; LVT # Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH -B7B5..B7CF ; LVT # Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH -B7D1..B7EB ; LVT # Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH -B7ED..B807 ; LVT # Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH -B809..B823 ; LVT # Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH -B825..B83F ; LVT # Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH -B841..B85B ; LVT # Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH -B85D..B877 ; LVT # Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH -B879..B893 ; LVT # Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH -B895..B8AF ; LVT # Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH -B8B1..B8CB ; LVT # Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH -B8CD..B8E7 ; LVT # Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH -B8E9..B903 ; LVT # Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH -B905..B91F ; LVT # Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH -B921..B93B ; LVT # Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH -B93D..B957 ; LVT # Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH -B959..B973 ; LVT # Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH -B975..B98F ; LVT # Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH -B991..B9AB ; LVT # Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH -B9AD..B9C7 ; LVT # Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH -B9C9..B9E3 ; LVT # Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH -B9E5..B9FF ; LVT # Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH -BA01..BA1B ; LVT # Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH -BA1D..BA37 ; LVT # Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH -BA39..BA53 ; LVT # Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH -BA55..BA6F ; LVT # Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH -BA71..BA8B ; LVT # Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH -BA8D..BAA7 ; LVT # Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH -BAA9..BAC3 ; LVT # Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH -BAC5..BADF ; LVT # Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH -BAE1..BAFB ; LVT # Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH -BAFD..BB17 ; LVT # Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH -BB19..BB33 ; LVT # Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH -BB35..BB4F ; LVT # Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH -BB51..BB6B ; LVT # Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH -BB6D..BB87 ; LVT # Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH -BB89..BBA3 ; LVT # Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH -BBA5..BBBF ; LVT # Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH -BBC1..BBDB ; LVT # Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH -BBDD..BBF7 ; LVT # Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH -BBF9..BC13 ; LVT # Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH -BC15..BC2F ; LVT # Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH -BC31..BC4B ; LVT # Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH -BC4D..BC67 ; LVT # Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH -BC69..BC83 ; LVT # Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH -BC85..BC9F ; LVT # Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH -BCA1..BCBB ; LVT # Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH -BCBD..BCD7 ; LVT # Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH -BCD9..BCF3 ; LVT # Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH -BCF5..BD0F ; LVT # Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH -BD11..BD2B ; LVT # Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH -BD2D..BD47 ; LVT # Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH -BD49..BD63 ; LVT # Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH -BD65..BD7F ; LVT # Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH -BD81..BD9B ; LVT # Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH -BD9D..BDB7 ; LVT # Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH -BDB9..BDD3 ; LVT # Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH -BDD5..BDEF ; LVT # Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH -BDF1..BE0B ; LVT # Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH -BE0D..BE27 ; LVT # Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH -BE29..BE43 ; LVT # Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH -BE45..BE5F ; LVT # Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH -BE61..BE7B ; LVT # Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH -BE7D..BE97 ; LVT # Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH -BE99..BEB3 ; LVT # Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH -BEB5..BECF ; LVT # Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH -BED1..BEEB ; LVT # Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH -BEED..BF07 ; LVT # Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH -BF09..BF23 ; LVT # Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH -BF25..BF3F ; LVT # Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH -BF41..BF5B ; LVT # Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH -BF5D..BF77 ; LVT # Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH -BF79..BF93 ; LVT # Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH -BF95..BFAF ; LVT # Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH -BFB1..BFCB ; LVT # Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH -BFCD..BFE7 ; LVT # Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH -BFE9..C003 ; LVT # Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH -C005..C01F ; LVT # Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH -C021..C03B ; LVT # Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH -C03D..C057 ; LVT # Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH -C059..C073 ; LVT # Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH -C075..C08F ; LVT # Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH -C091..C0AB ; LVT # Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH -C0AD..C0C7 ; LVT # Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH -C0C9..C0E3 ; LVT # Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH -C0E5..C0FF ; LVT # Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH -C101..C11B ; LVT # Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH -C11D..C137 ; LVT # Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH -C139..C153 ; LVT # Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH -C155..C16F ; LVT # Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH -C171..C18B ; LVT # Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH -C18D..C1A7 ; LVT # Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH -C1A9..C1C3 ; LVT # Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH -C1C5..C1DF ; LVT # Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH -C1E1..C1FB ; LVT # Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH -C1FD..C217 ; LVT # Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH -C219..C233 ; LVT # Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH -C235..C24F ; LVT # Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH -C251..C26B ; LVT # Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH -C26D..C287 ; LVT # Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH -C289..C2A3 ; LVT # Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH -C2A5..C2BF ; LVT # Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH -C2C1..C2DB ; LVT # Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH -C2DD..C2F7 ; LVT # Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH -C2F9..C313 ; LVT # Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH -C315..C32F ; LVT # Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH -C331..C34B ; LVT # Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH -C34D..C367 ; LVT # Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH -C369..C383 ; LVT # Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH -C385..C39F ; LVT # Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH -C3A1..C3BB ; LVT # Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH -C3BD..C3D7 ; LVT # Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH -C3D9..C3F3 ; LVT # Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH -C3F5..C40F ; LVT # Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH -C411..C42B ; LVT # Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH -C42D..C447 ; LVT # Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH -C449..C463 ; LVT # Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH -C465..C47F ; LVT # Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH -C481..C49B ; LVT # Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH -C49D..C4B7 ; LVT # Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH -C4B9..C4D3 ; LVT # Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH -C4D5..C4EF ; LVT # Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH -C4F1..C50B ; LVT # Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH -C50D..C527 ; LVT # Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH -C529..C543 ; LVT # Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH -C545..C55F ; LVT # Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH -C561..C57B ; LVT # Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH -C57D..C597 ; LVT # Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH -C599..C5B3 ; LVT # Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH -C5B5..C5CF ; LVT # Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH -C5D1..C5EB ; LVT # Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH -C5ED..C607 ; LVT # Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH -C609..C623 ; LVT # Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH -C625..C63F ; LVT # Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH -C641..C65B ; LVT # Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH -C65D..C677 ; LVT # Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH -C679..C693 ; LVT # Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH -C695..C6AF ; LVT # Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH -C6B1..C6CB ; LVT # Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH -C6CD..C6E7 ; LVT # Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH -C6E9..C703 ; LVT # Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH -C705..C71F ; LVT # Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH -C721..C73B ; LVT # Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH -C73D..C757 ; LVT # Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH -C759..C773 ; LVT # Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH -C775..C78F ; LVT # Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH -C791..C7AB ; LVT # Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH -C7AD..C7C7 ; LVT # Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH -C7C9..C7E3 ; LVT # Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH -C7E5..C7FF ; LVT # Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH -C801..C81B ; LVT # Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH -C81D..C837 ; LVT # Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH -C839..C853 ; LVT # Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH -C855..C86F ; LVT # Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH -C871..C88B ; LVT # Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH -C88D..C8A7 ; LVT # Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH -C8A9..C8C3 ; LVT # Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH -C8C5..C8DF ; LVT # Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH -C8E1..C8FB ; LVT # Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH -C8FD..C917 ; LVT # Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH -C919..C933 ; LVT # Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH -C935..C94F ; LVT # Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH -C951..C96B ; LVT # Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH -C96D..C987 ; LVT # Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH -C989..C9A3 ; LVT # Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH -C9A5..C9BF ; LVT # Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH -C9C1..C9DB ; LVT # Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH -C9DD..C9F7 ; LVT # Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH -C9F9..CA13 ; LVT # Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH -CA15..CA2F ; LVT # Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH -CA31..CA4B ; LVT # Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH -CA4D..CA67 ; LVT # Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH -CA69..CA83 ; LVT # Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH -CA85..CA9F ; LVT # Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH -CAA1..CABB ; LVT # Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH -CABD..CAD7 ; LVT # Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH -CAD9..CAF3 ; LVT # Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH -CAF5..CB0F ; LVT # Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH -CB11..CB2B ; LVT # Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH -CB2D..CB47 ; LVT # Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH -CB49..CB63 ; LVT # Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH -CB65..CB7F ; LVT # Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH -CB81..CB9B ; LVT # Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH -CB9D..CBB7 ; LVT # Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH -CBB9..CBD3 ; LVT # Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH -CBD5..CBEF ; LVT # Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH -CBF1..CC0B ; LVT # Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH -CC0D..CC27 ; LVT # Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH -CC29..CC43 ; LVT # Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH -CC45..CC5F ; LVT # Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH -CC61..CC7B ; LVT # Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH -CC7D..CC97 ; LVT # Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH -CC99..CCB3 ; LVT # Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH -CCB5..CCCF ; LVT # Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH -CCD1..CCEB ; LVT # Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH -CCED..CD07 ; LVT # Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH -CD09..CD23 ; LVT # Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH -CD25..CD3F ; LVT # Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH -CD41..CD5B ; LVT # Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH -CD5D..CD77 ; LVT # Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH -CD79..CD93 ; LVT # Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH -CD95..CDAF ; LVT # Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH -CDB1..CDCB ; LVT # Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH -CDCD..CDE7 ; LVT # Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH -CDE9..CE03 ; LVT # Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH -CE05..CE1F ; LVT # Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH -CE21..CE3B ; LVT # Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH -CE3D..CE57 ; LVT # Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH -CE59..CE73 ; LVT # Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH -CE75..CE8F ; LVT # Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH -CE91..CEAB ; LVT # Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH -CEAD..CEC7 ; LVT # Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH -CEC9..CEE3 ; LVT # Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH -CEE5..CEFF ; LVT # Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH -CF01..CF1B ; LVT # Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH -CF1D..CF37 ; LVT # Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH -CF39..CF53 ; LVT # Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH -CF55..CF6F ; LVT # Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH -CF71..CF8B ; LVT # Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH -CF8D..CFA7 ; LVT # Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH -CFA9..CFC3 ; LVT # Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH -CFC5..CFDF ; LVT # Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH -CFE1..CFFB ; LVT # Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH -CFFD..D017 ; LVT # Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH -D019..D033 ; LVT # Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH -D035..D04F ; LVT # Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH -D051..D06B ; LVT # Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH -D06D..D087 ; LVT # Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH -D089..D0A3 ; LVT # Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH -D0A5..D0BF ; LVT # Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH -D0C1..D0DB ; LVT # Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH -D0DD..D0F7 ; LVT # Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH -D0F9..D113 ; LVT # Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH -D115..D12F ; LVT # Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH -D131..D14B ; LVT # Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH -D14D..D167 ; LVT # Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH -D169..D183 ; LVT # Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH -D185..D19F ; LVT # Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH -D1A1..D1BB ; LVT # Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH -D1BD..D1D7 ; LVT # Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH -D1D9..D1F3 ; LVT # Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH -D1F5..D20F ; LVT # Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH -D211..D22B ; LVT # Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH -D22D..D247 ; LVT # Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH -D249..D263 ; LVT # Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH -D265..D27F ; LVT # Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH -D281..D29B ; LVT # Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH -D29D..D2B7 ; LVT # Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH -D2B9..D2D3 ; LVT # Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH -D2D5..D2EF ; LVT # Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH -D2F1..D30B ; LVT # Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH -D30D..D327 ; LVT # Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH -D329..D343 ; LVT # Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH -D345..D35F ; LVT # Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH -D361..D37B ; LVT # Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH -D37D..D397 ; LVT # Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH -D399..D3B3 ; LVT # Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH -D3B5..D3CF ; LVT # Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH -D3D1..D3EB ; LVT # Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH -D3ED..D407 ; LVT # Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH -D409..D423 ; LVT # Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH -D425..D43F ; LVT # Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH -D441..D45B ; LVT # Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH -D45D..D477 ; LVT # Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH -D479..D493 ; LVT # Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH -D495..D4AF ; LVT # Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH -D4B1..D4CB ; LVT # Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH -D4CD..D4E7 ; LVT # Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH -D4E9..D503 ; LVT # Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH -D505..D51F ; LVT # Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH -D521..D53B ; LVT # Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH -D53D..D557 ; LVT # Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH -D559..D573 ; LVT # Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH -D575..D58F ; LVT # Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH -D591..D5AB ; LVT # Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH -D5AD..D5C7 ; LVT # Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH -D5C9..D5E3 ; LVT # Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH -D5E5..D5FF ; LVT # Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH -D601..D61B ; LVT # Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH -D61D..D637 ; LVT # Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH -D639..D653 ; LVT # Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH -D655..D66F ; LVT # Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH -D671..D68B ; LVT # Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH -D68D..D6A7 ; LVT # Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH -D6A9..D6C3 ; LVT # Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH -D6C5..D6DF ; LVT # Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH -D6E1..D6FB ; LVT # Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH -D6FD..D717 ; LVT # Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH -D719..D733 ; LVT # Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH -D735..D74F ; LVT # Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH -D751..D76B ; LVT # Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH -D76D..D787 ; LVT # Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH -D789..D7A3 ; LVT # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH - -# Total code points: 10773 - -# ================================================ - -200D ; ZWJ # Cf ZERO WIDTH JOINER - -# Total code points: 1 - -# EOF \ No newline at end of file +# GraphemeBreakProperty-15.0.0.txt +# Date: 2022-04-27, 17:07:38 GMT +# © 2022 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see https://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see https://www.unicode.org/reports/tr44/ + +# ================================================ + +# Property: Grapheme_Cluster_Break + +# All code points not explicitly listed for Grapheme_Cluster_Break +# have the value Other (XX). + +# @missing: 0000..10FFFF; Other + +# ================================================ + +0600..0605 ; Prepend # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE +06DD ; Prepend # Cf ARABIC END OF AYAH +070F ; Prepend # Cf SYRIAC ABBREVIATION MARK +0890..0891 ; Prepend # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +08E2 ; Prepend # Cf ARABIC DISPUTED END OF AYAH +0D4E ; Prepend # Lo MALAYALAM LETTER DOT REPH +110BD ; Prepend # Cf KAITHI NUMBER SIGN +110CD ; Prepend # Cf KAITHI NUMBER SIGN ABOVE +111C2..111C3 ; Prepend # Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA +1193F ; Prepend # Lo DIVES AKURU PREFIXED NASAL SIGN +11941 ; Prepend # Lo DIVES AKURU INITIAL RA +11A3A ; Prepend # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A84..11A89 ; Prepend # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA +11D46 ; Prepend # Lo MASARAM GONDI REPHA +11F02 ; Prepend # Lo KAWI SIGN REPHA + +# Total code points: 27 + +# ================================================ + +000D ; CR # Cc + +# Total code points: 1 + +# ================================================ + +000A ; LF # Cc + +# Total code points: 1 + +# ================================================ + +0000..0009 ; Control # Cc [10] .. +000B..000C ; Control # Cc [2] .. +000E..001F ; Control # Cc [18] .. +007F..009F ; Control # Cc [33] .. +00AD ; Control # Cf SOFT HYPHEN +061C ; Control # Cf ARABIC LETTER MARK +180E ; Control # Cf MONGOLIAN VOWEL SEPARATOR +200B ; Control # Cf ZERO WIDTH SPACE +200E..200F ; Control # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK +2028 ; Control # Zl LINE SEPARATOR +2029 ; Control # Zp PARAGRAPH SEPARATOR +202A..202E ; Control # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE +2060..2064 ; Control # Cf [5] WORD JOINER..INVISIBLE PLUS +2065 ; Control # Cn +2066..206F ; Control # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES +FEFF ; Control # Cf ZERO WIDTH NO-BREAK SPACE +FFF0..FFF8 ; Control # Cn [9] .. +FFF9..FFFB ; Control # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR +13430..1343F ; Control # Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE +1BCA0..1BCA3 ; Control # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1D173..1D17A ; Control # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +E0000 ; Control # Cn +E0001 ; Control # Cf LANGUAGE TAG +E0002..E001F ; Control # Cn [30] .. +E0080..E00FF ; Control # Cn [128] .. +E01F0..E0FFF ; Control # Cn [3600] .. + +# Total code points: 3893 + +# ================================================ + +0300..036F ; Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0483..0487 ; Extend # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +0488..0489 ; Extend # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +0591..05BD ; Extend # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; Extend # Mn HEBREW POINT RAFE +05C1..05C2 ; Extend # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; Extend # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; Extend # Mn HEBREW POINT QAMATS QATAN +0610..061A ; Extend # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +064B..065F ; Extend # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0670 ; Extend # Mn ARABIC LETTER SUPERSCRIPT ALEF +06D6..06DC ; Extend # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DF..06E4 ; Extend # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E7..06E8 ; Extend # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; Extend # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +0711 ; Extend # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0730..074A ; Extend # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +07A6..07B0 ; Extend # Mn [11] THAANA ABAFILI..THAANA SUKUN +07EB..07F3 ; Extend # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07FD ; Extend # Mn NKO DANTAYALAN +0816..0819 ; Extend # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081B..0823 ; Extend # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +0898..089F ; Extend # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA +08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA +093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE +093C ; Extend # Mn DEVANAGARI SIGN NUKTA +0941..0948 ; Extend # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +094D ; Extend # Mn DEVANAGARI SIGN VIRAMA +0951..0957 ; Extend # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0962..0963 ; Extend # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0981 ; Extend # Mn BENGALI SIGN CANDRABINDU +09BC ; Extend # Mn BENGALI SIGN NUKTA +09BE ; Extend # Mc BENGALI VOWEL SIGN AA +09C1..09C4 ; Extend # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09CD ; Extend # Mn BENGALI SIGN VIRAMA +09D7 ; Extend # Mc BENGALI AU LENGTH MARK +09E2..09E3 ; Extend # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09FE ; Extend # Mn BENGALI SANDHI MARK +0A01..0A02 ; Extend # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A3C ; Extend # Mn GURMUKHI SIGN NUKTA +0A41..0A42 ; Extend # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; Extend # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; Extend # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; Extend # Mn GURMUKHI SIGN UDAAT +0A70..0A71 ; Extend # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A75 ; Extend # Mn GURMUKHI SIGN YAKASH +0A81..0A82 ; Extend # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0ABC ; Extend # Mn GUJARATI SIGN NUKTA +0AC1..0AC5 ; Extend # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; Extend # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0ACD ; Extend # Mn GUJARATI SIGN VIRAMA +0AE2..0AE3 ; Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AFA..0AFF ; Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; Extend # Mn ORIYA SIGN CANDRABINDU +0B3C ; Extend # Mn ORIYA SIGN NUKTA +0B3E ; Extend # Mc ORIYA VOWEL SIGN AA +0B3F ; Extend # Mn ORIYA VOWEL SIGN I +0B41..0B44 ; Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B4D ; Extend # Mn ORIYA SIGN VIRAMA +0B55..0B56 ; Extend # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK +0B57 ; Extend # Mc ORIYA AU LENGTH MARK +0B62..0B63 ; Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B82 ; Extend # Mn TAMIL SIGN ANUSVARA +0BBE ; Extend # Mc TAMIL VOWEL SIGN AA +0BC0 ; Extend # Mn TAMIL VOWEL SIGN II +0BCD ; Extend # Mn TAMIL SIGN VIRAMA +0BD7 ; Extend # Mc TAMIL AU LENGTH MARK +0C00 ; Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C04 ; Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; Extend # Mn TELUGU SIGN NUKTA +0C3E..0C40 ; Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C46..0C48 ; Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; Extend # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; Extend # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C62..0C63 ; Extend # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C81 ; Extend # Mn KANNADA SIGN CANDRABINDU +0CBC ; Extend # Mn KANNADA SIGN NUKTA +0CBF ; Extend # Mn KANNADA VOWEL SIGN I +0CC2 ; Extend # Mc KANNADA VOWEL SIGN UU +0CC6 ; Extend # Mn KANNADA VOWEL SIGN E +0CCC..0CCD ; Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CD5..0CD6 ; Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CE2..0CE3 ; Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0D00..0D01 ; Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D3B..0D3C ; Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D3E ; Extend # Mc MALAYALAM VOWEL SIGN AA +0D41..0D44 ; Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D4D ; Extend # Mn MALAYALAM SIGN VIRAMA +0D57 ; Extend # Mc MALAYALAM AU LENGTH MARK +0D62..0D63 ; Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D81 ; Extend # Mn SINHALA SIGN CANDRABINDU +0DCA ; Extend # Mn SINHALA SIGN AL-LAKUNA +0DCF ; Extend # Mc SINHALA VOWEL SIGN AELA-PILLA +0DD2..0DD4 ; Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; Extend # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DDF ; Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA +0E31 ; Extend # Mn THAI CHARACTER MAI HAN-AKAT +0E34..0E3A ; Extend # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E47..0E4E ; Extend # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0EB1 ; Extend # Mn LAO VOWEL SIGN MAI KAN +0EB4..0EBC ; Extend # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EC8..0ECE ; Extend # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN +0F18..0F19 ; Extend # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F35 ; Extend # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; Extend # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; Extend # Mn TIBETAN MARK TSA -PHRU +0F71..0F7E ; Extend # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F80..0F84 ; Extend # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F86..0F87 ; Extend # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F8D..0F97 ; Extend # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; Extend # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FC6 ; Extend # Mn TIBETAN SYMBOL PADMA GDAN +102D..1030 ; Extend # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1032..1037 ; Extend # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +1039..103A ; Extend # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103D..103E ; Extend # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +1058..1059 ; Extend # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105E..1060 ; Extend # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1071..1074 ; Extend # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1082 ; Extend # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1085..1086 ; Extend # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +108D ; Extend # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +109D ; Extend # Mn MYANMAR VOWEL SIGN AITON AI +135D..135F ; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1712..1714 ; Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1732..1733 ; Extend # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1752..1753 ; Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1772..1773 ; Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +17B4..17B5 ; Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B7..17BD ; Extend # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17C6 ; Extend # Mn KHMER SIGN NIKAHIT +17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17DD ; Extend # Mn KHMER SIGN ATTHACAN +180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; Extend # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +1885..1886 ; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA +1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1927..1928 ; Extend # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1932 ; Extend # Mn LIMBU SMALL LETTER ANUSVARA +1939..193B ; Extend # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; Extend # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A1B ; Extend # Mn BUGINESE VOWEL SIGN AE +1A56 ; Extend # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A58..1A5E ; Extend # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A60 ; Extend # Mn TAI THAM SIGN SAKOT +1A62 ; Extend # Mn TAI THAM VOWEL SIGN MAI SAT +1A65..1A6C ; Extend # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A73..1A7C ; Extend # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY +1ABF..1ACE ; Extend # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B34 ; Extend # Mn BALINESE SIGN REREKAN +1B35 ; Extend # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; Extend # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3C ; Extend # Mn BALINESE VOWEL SIGN LA LENGA +1B42 ; Extend # Mn BALINESE VOWEL SIGN PEPET +1B6B..1B73 ; Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B80..1B81 ; Extend # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1BA2..1BA5 ; Extend # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA8..1BA9 ; Extend # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAB..1BAD ; Extend # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BE6 ; Extend # Mn BATAK SIGN TOMPI +1BE8..1BE9 ; Extend # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BED ; Extend # Mn BATAK VOWEL SIGN KARO O +1BEF..1BF1 ; Extend # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1C2C..1C33 ; Extend # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C36..1C37 ; Extend # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1CD0..1CD2 ; Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; Extend # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE2..1CE8 ; Extend # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CED ; Extend # Mn VEDIC SIGN TIRYAK +1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE +1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1DC0..1DFF ; Extend # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +200C ; Extend # Cf ZERO WIDTH NON-JOINER +20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH +20E1 ; Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E2..20E4 ; Extend # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +20E5..20F0 ; Extend # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2CEF..2CF1 ; Extend # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2D7F ; Extend # Mn TIFINAGH CONSONANT JOINER +2DE0..2DFF ; Extend # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +302A..302D ; Extend # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +302E..302F ; Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +3099..309A ; Extend # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A66F ; Extend # Mn COMBINING CYRILLIC VZMET +A670..A672 ; Extend # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN +A674..A67D ; Extend # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A69E..A69F ; Extend # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6F0..A6F1 ; Extend # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A802 ; Extend # Mn SYLOTI NAGRI SIGN DVISVARA +A806 ; Extend # Mn SYLOTI NAGRI SIGN HASANTA +A80B ; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A82C ; Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A8C4..A8C5 ; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8E0..A8F1 ; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8FF ; Extend # Mn DEVANAGARI VOWEL SIGN AY +A926..A92D ; Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A947..A951 ; Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A980..A982 ; Extend # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A9B3 ; Extend # Mn JAVANESE SIGN CECAK TELU +A9B6..A9B9 ; Extend # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BC..A9BD ; Extend # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9E5 ; Extend # Mn MYANMAR SIGN SHAN SAW +AA29..AA2E ; Extend # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA31..AA32 ; Extend # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA35..AA36 ; Extend # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA43 ; Extend # Mn CHAM CONSONANT SIGN FINAL NG +AA4C ; Extend # Mn CHAM CONSONANT SIGN FINAL M +AA7C ; Extend # Mn MYANMAR SIGN TAI LAING TONE-2 +AAB0 ; Extend # Mn TAI VIET MAI KANG +AAB2..AAB4 ; Extend # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB7..AAB8 ; Extend # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AABE..AABF ; Extend # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC1 ; Extend # Mn TAI VIET TONE MAI THO +AAEC..AAED ; Extend # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAF6 ; Extend # Mn MEETEI MAYEK VIRAMA +ABE5 ; Extend # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE8 ; Extend # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABED ; Extend # Mn MEETEI MAYEK APUN IYEK +FB1E ; Extend # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FE00..FE0F ; Extend # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE20..FE2F ; Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +101FD ; Extend # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +102E0 ; Extend # Mn COPTIC EPACT THOUSANDS MARK +10376..1037A ; Extend # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10A01..10A03 ; Extend # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; Extend # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; Extend # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A38..10A3A ; Extend # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; Extend # Mn KHAROSHTHI VIRAMA +10AE5..10AE6 ; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10EAB..10EAC ; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EFD..10EFF ; Extend # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA +10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +11001 ; Extend # Mn BRAHMI SIGN ANUSVARA +11038..11046 ; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; Extend # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Extend # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +1107F..11081 ; Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA +110B3..110B6 ; Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B9..110BA ; Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; Extend # Mn KAITHI VOWEL SIGN VOCALIC R +11100..11102 ; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11127..1112B ; Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112D..11134 ; Extend # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA +11173 ; Extend # Mn MAHAJANI SIGN NUKTA +11180..11181 ; Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +111B6..111BE ; Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111C9..111CC ; Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +111CF ; Extend # Mn SHARADA SIGN INVERTED CANDRABINDU +1122F..11231 ; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11234 ; Extend # Mn KHOJKI SIGN ANUSVARA +11236..11237 ; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +1123E ; Extend # Mn KHOJKI SIGN SUKUN +11241 ; Extend # Mn KHOJKI VOWEL SIGN VOCALIC R +112DF ; Extend # Mn KHUDAWADI SIGN ANUSVARA +112E3..112EA ; Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +11300..11301 ; Extend # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +1133B..1133C ; Extend # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +1133E ; Extend # Mc GRANTHA VOWEL SIGN AA +11340 ; Extend # Mn GRANTHA VOWEL SIGN II +11357 ; Extend # Mc GRANTHA AU LENGTH MARK +11366..1136C ; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +11438..1143F ; Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11442..11444 ; Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11446 ; Extend # Mn NEWA SIGN NUKTA +1145E ; Extend # Mn NEWA SANDHI MARK +114B0 ; Extend # Mc TIRHUTA VOWEL SIGN AA +114B3..114B8 ; Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114BA ; Extend # Mn TIRHUTA VOWEL SIGN SHORT E +114BD ; Extend # Mc TIRHUTA VOWEL SIGN SHORT O +114BF..114C0 ; Extend # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C2..114C3 ; Extend # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +115AF ; Extend # Mc SIDDHAM VOWEL SIGN AA +115B2..115B5 ; Extend # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115BC..115BD ; Extend # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BF..115C0 ; Extend # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115DC..115DD ; Extend # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11633..1163A ; Extend # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163D ; Extend # Mn MODI SIGN ANUSVARA +1163F..11640 ; Extend # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +116AB ; Extend # Mn TAKRI SIGN ANUSVARA +116AD ; Extend # Mn TAKRI VOWEL SIGN AA +116B0..116B5 ; Extend # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B7 ; Extend # Mn TAKRI SIGN NUKTA +1171D..1171F ; Extend # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +11722..11725 ; Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11727..1172B ; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +1182F..11837 ; Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11839..1183A ; Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +11930 ; Extend # Mc DIVES AKURU VOWEL SIGN AA +1193B..1193C ; Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193E ; Extend # Mn DIVES AKURU VIRAMA +11943 ; Extend # Mn DIVES AKURU SIGN NUKTA +119D4..119D7 ; Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119E0 ; Extend # Mn NANDINAGARI SIGN VIRAMA +11A01..11A0A ; Extend # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A33..11A38 ; Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A3B..11A3E ; Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A47 ; Extend # Mn ZANABAZAR SQUARE SUBJOINER +11A51..11A56 ; Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A59..11A5B ; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A8A..11A96 ; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A98..11A99 ; Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11C30..11C36 ; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3F ; Extend # Mn BHAIKSUKI SIGN VIRAMA +11C92..11CA7 ; Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CAA..11CB0 ; Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB2..11CB3 ; Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB5..11CB6 ; Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D31..11D36 ; Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; Extend # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D47 ; Extend # Mn MASARAM GONDI RA-KARA +11D90..11D91 ; Extend # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D95 ; Extend # Mn GUNJALA GONDI SIGN ANUSVARA +11D97 ; Extend # Mn GUNJALA GONDI VIRAMA +11EF3..11EF4 ; Extend # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11F00..11F01 ; Extend # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F36..11F3A ; Extend # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F40 ; Extend # Mn KAWI VOWEL SIGN EU +11F42 ; Extend # Mn KAWI CONJOINER +13440 ; Extend # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY +13447..13455 ; Extend # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +16AF0..16AF4 ; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16B30..16B36 ; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16F4F ; Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F8F..16F92 ; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16FE4 ; Extend # Mn KHITAN SMALL SCRIPT FILLER +1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; Extend # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Extend # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1D165 ; Extend # Mc MUSICAL SYMBOL COMBINING STEM +1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D16E..1D172 ; Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 +1D17B..1D182 ; Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; Extend # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1DA00..1DA36 ; Extend # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA3B..1DA6C ; Extend # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA75 ; Extend # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA84 ; Extend # Mn SIGNWRITING LOCATION HEAD NECK +1DA9B..1DA9F ; Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1E000..1E006 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E08F ; Extend # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E130..1E136 ; Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; Extend # Mn TOTO SIGN RISING TONE +1E2EC..1E2EF ; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E4EC..1E4EF ; Extend # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +1F3FB..1F3FF ; Extend # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 +E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG +E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 2130 + +# ================================================ + +1F1E6..1F1FF ; Regional_Indicator # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z + +# Total code points: 26 + +# ================================================ + +0903 ; SpacingMark # Mc DEVANAGARI SIGN VISARGA +093B ; SpacingMark # Mc DEVANAGARI VOWEL SIGN OOE +093E..0940 ; SpacingMark # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0949..094C ; SpacingMark # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +094E..094F ; SpacingMark # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW +0982..0983 ; SpacingMark # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +09BF..09C0 ; SpacingMark # Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II +09C7..09C8 ; SpacingMark # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; SpacingMark # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +0A03 ; SpacingMark # Mc GURMUKHI SIGN VISARGA +0A3E..0A40 ; SpacingMark # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A83 ; SpacingMark # Mc GUJARATI SIGN VISARGA +0ABE..0AC0 ; SpacingMark # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC9 ; SpacingMark # Mc GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; SpacingMark # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0B02..0B03 ; SpacingMark # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B40 ; SpacingMark # Mc ORIYA VOWEL SIGN II +0B47..0B48 ; SpacingMark # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; SpacingMark # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0BBF ; SpacingMark # Mc TAMIL VOWEL SIGN I +0BC1..0BC2 ; SpacingMark # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; SpacingMark # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; SpacingMark # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0C01..0C03 ; SpacingMark # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C41..0C44 ; SpacingMark # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C82..0C83 ; SpacingMark # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0CBE ; SpacingMark # Mc KANNADA VOWEL SIGN AA +0CC0..0CC1 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U +0CC3..0CC4 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR +0CC7..0CC8 ; SpacingMark # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; SpacingMark # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CF3 ; SpacingMark # Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT +0D02..0D03 ; SpacingMark # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D3F..0D40 ; SpacingMark # Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II +0D46..0D48 ; SpacingMark # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; SpacingMark # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D82..0D83 ; SpacingMark # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0DD0..0DD1 ; SpacingMark # Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD8..0DDE ; SpacingMark # Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA +0DF2..0DF3 ; SpacingMark # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0E33 ; SpacingMark # Lo THAI CHARACTER SARA AM +0EB3 ; SpacingMark # Lo LAO VOWEL SIGN AM +0F3E..0F3F ; SpacingMark # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES +0F7F ; SpacingMark # Mc TIBETAN SIGN RNAM BCAD +1031 ; SpacingMark # Mc MYANMAR VOWEL SIGN E +103B..103C ; SpacingMark # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA +1056..1057 ; SpacingMark # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +1084 ; SpacingMark # Mc MYANMAR VOWEL SIGN SHAN E +1715 ; SpacingMark # Mc TAGALOG SIGN PAMUDPOD +1734 ; SpacingMark # Mc HANUNOO SIGN PAMUDPOD +17B6 ; SpacingMark # Mc KHMER VOWEL SIGN AA +17BE..17C5 ; SpacingMark # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C7..17C8 ; SpacingMark # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +1923..1926 ; SpacingMark # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1929..192B ; SpacingMark # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1930..1931 ; SpacingMark # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1933..1938 ; SpacingMark # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1A19..1A1A ; SpacingMark # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O +1A55 ; SpacingMark # Mc TAI THAM CONSONANT SIGN MEDIAL RA +1A57 ; SpacingMark # Mc TAI THAM CONSONANT SIGN LA TANG LAI +1A6D..1A72 ; SpacingMark # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI +1B04 ; SpacingMark # Mc BALINESE SIGN BISAH +1B3B ; SpacingMark # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3D..1B41 ; SpacingMark # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B43..1B44 ; SpacingMark # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B82 ; SpacingMark # Mc SUNDANESE SIGN PANGWISAD +1BA1 ; SpacingMark # Mc SUNDANESE CONSONANT SIGN PAMINGKAL +1BA6..1BA7 ; SpacingMark # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG +1BAA ; SpacingMark # Mc SUNDANESE SIGN PAMAAEH +1BE7 ; SpacingMark # Mc BATAK VOWEL SIGN E +1BEA..1BEC ; SpacingMark # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O +1BEE ; SpacingMark # Mc BATAK VOWEL SIGN U +1BF2..1BF3 ; SpacingMark # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +1C24..1C2B ; SpacingMark # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU +1C34..1C35 ; SpacingMark # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG +1CE1 ; SpacingMark # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA +1CF7 ; SpacingMark # Mc VEDIC SIGN ATIKRAMA +A823..A824 ; SpacingMark # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A827 ; SpacingMark # Mc SYLOTI NAGRI VOWEL SIGN OO +A880..A881 ; SpacingMark # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA +A8B4..A8C3 ; SpacingMark # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU +A952..A953 ; SpacingMark # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA +A983 ; SpacingMark # Mc JAVANESE SIGN WIGNYAN +A9B4..A9B5 ; SpacingMark # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG +A9BA..A9BB ; SpacingMark # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE +A9BE..A9C0 ; SpacingMark # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON +AA2F..AA30 ; SpacingMark # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI +AA33..AA34 ; SpacingMark # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA +AA4D ; SpacingMark # Mc CHAM CONSONANT SIGN FINAL H +AAEB ; SpacingMark # Mc MEETEI MAYEK VOWEL SIGN II +AAEE..AAEF ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU +AAF5 ; SpacingMark # Mc MEETEI MAYEK VOWEL SIGN VISARGA +ABE3..ABE4 ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP +ABE6..ABE7 ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP +ABE9..ABEA ; SpacingMark # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG +ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK +11000 ; SpacingMark # Mc BRAHMI SIGN CANDRABINDU +11002 ; SpacingMark # Mc BRAHMI SIGN VISARGA +11082 ; SpacingMark # Mc KAITHI SIGN VISARGA +110B0..110B2 ; SpacingMark # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II +110B7..110B8 ; SpacingMark # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +1112C ; SpacingMark # Mc CHAKMA VOWEL SIGN E +11145..11146 ; SpacingMark # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI +11182 ; SpacingMark # Mc SHARADA SIGN VISARGA +111B3..111B5 ; SpacingMark # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II +111BF..111C0 ; SpacingMark # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA +111CE ; SpacingMark # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E +1122C..1122E ; SpacingMark # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II +11232..11233 ; SpacingMark # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU +11235 ; SpacingMark # Mc KHOJKI SIGN VIRAMA +112E0..112E2 ; SpacingMark # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II +11302..11303 ; SpacingMark # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA +1133F ; SpacingMark # Mc GRANTHA VOWEL SIGN I +11341..11344 ; SpacingMark # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR +11347..11348 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI +1134B..1134D ; SpacingMark # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA +11362..11363 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11435..11437 ; SpacingMark # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II +11440..11441 ; SpacingMark # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU +11445 ; SpacingMark # Mc NEWA SIGN VISARGA +114B1..114B2 ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II +114B9 ; SpacingMark # Mc TIRHUTA VOWEL SIGN E +114BB..114BC ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O +114BE ; SpacingMark # Mc TIRHUTA VOWEL SIGN AU +114C1 ; SpacingMark # Mc TIRHUTA SIGN VISARGA +115B0..115B1 ; SpacingMark # Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II +115B8..115BB ; SpacingMark # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU +115BE ; SpacingMark # Mc SIDDHAM SIGN VISARGA +11630..11632 ; SpacingMark # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II +1163B..1163C ; SpacingMark # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU +1163E ; SpacingMark # Mc MODI SIGN VISARGA +116AC ; SpacingMark # Mc TAKRI SIGN VISARGA +116AE..116AF ; SpacingMark # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II +116B6 ; SpacingMark # Mc TAKRI SIGN VIRAMA +11726 ; SpacingMark # Mc AHOM VOWEL SIGN E +1182C..1182E ; SpacingMark # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II +11838 ; SpacingMark # Mc DOGRA SIGN VISARGA +11931..11935 ; SpacingMark # Mc [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E +11937..11938 ; SpacingMark # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O +1193D ; SpacingMark # Mc DIVES AKURU SIGN HALANTA +11940 ; SpacingMark # Mc DIVES AKURU MEDIAL YA +11942 ; SpacingMark # Mc DIVES AKURU MEDIAL RA +119D1..119D3 ; SpacingMark # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II +119DC..119DF ; SpacingMark # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA +119E4 ; SpacingMark # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E +11A39 ; SpacingMark # Mc ZANABAZAR SQUARE SIGN VISARGA +11A57..11A58 ; SpacingMark # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU +11A97 ; SpacingMark # Mc SOYOMBO SIGN VISARGA +11C2F ; SpacingMark # Mc BHAIKSUKI VOWEL SIGN AA +11C3E ; SpacingMark # Mc BHAIKSUKI SIGN VISARGA +11CA9 ; SpacingMark # Mc MARCHEN SUBJOINED LETTER YA +11CB1 ; SpacingMark # Mc MARCHEN VOWEL SIGN I +11CB4 ; SpacingMark # Mc MARCHEN VOWEL SIGN O +11D8A..11D8E ; SpacingMark # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU +11D93..11D94 ; SpacingMark # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU +11D96 ; SpacingMark # Mc GUNJALA GONDI SIGN VISARGA +11EF5..11EF6 ; SpacingMark # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O +11F03 ; SpacingMark # Mc KAWI SIGN VISARGA +11F34..11F35 ; SpacingMark # Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA +11F3E..11F3F ; SpacingMark # Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI +11F41 ; SpacingMark # Mc KAWI SIGN KILLER +16F51..16F87 ; SpacingMark # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI +16FF0..16FF1 ; SpacingMark # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +1D166 ; SpacingMark # Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D16D ; SpacingMark # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT + +# Total code points: 395 + +# ================================================ + +1100..115F ; L # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER +A960..A97C ; L # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH + +# Total code points: 125 + +# ================================================ + +1160..11A7 ; V # Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE +D7B0..D7C6 ; V # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E + +# Total code points: 95 + +# ================================================ + +11A8..11FF ; T # Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN +D7CB..D7FB ; T # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH + +# Total code points: 137 + +# ================================================ + +AC00 ; LV # Lo HANGUL SYLLABLE GA +AC1C ; LV # Lo HANGUL SYLLABLE GAE +AC38 ; LV # Lo HANGUL SYLLABLE GYA +AC54 ; LV # Lo HANGUL SYLLABLE GYAE +AC70 ; LV # Lo HANGUL SYLLABLE GEO +AC8C ; LV # Lo HANGUL SYLLABLE GE +ACA8 ; LV # Lo HANGUL SYLLABLE GYEO +ACC4 ; LV # Lo HANGUL SYLLABLE GYE +ACE0 ; LV # Lo HANGUL SYLLABLE GO +ACFC ; LV # Lo HANGUL SYLLABLE GWA +AD18 ; LV # Lo HANGUL SYLLABLE GWAE +AD34 ; LV # Lo HANGUL SYLLABLE GOE +AD50 ; LV # Lo HANGUL SYLLABLE GYO +AD6C ; LV # Lo HANGUL SYLLABLE GU +AD88 ; LV # Lo HANGUL SYLLABLE GWEO +ADA4 ; LV # Lo HANGUL SYLLABLE GWE +ADC0 ; LV # Lo HANGUL SYLLABLE GWI +ADDC ; LV # Lo HANGUL SYLLABLE GYU +ADF8 ; LV # Lo HANGUL SYLLABLE GEU +AE14 ; LV # Lo HANGUL SYLLABLE GYI +AE30 ; LV # Lo HANGUL SYLLABLE GI +AE4C ; LV # Lo HANGUL SYLLABLE GGA +AE68 ; LV # Lo HANGUL SYLLABLE GGAE +AE84 ; LV # Lo HANGUL SYLLABLE GGYA +AEA0 ; LV # Lo HANGUL SYLLABLE GGYAE +AEBC ; LV # Lo HANGUL SYLLABLE GGEO +AED8 ; LV # Lo HANGUL SYLLABLE GGE +AEF4 ; LV # Lo HANGUL SYLLABLE GGYEO +AF10 ; LV # Lo HANGUL SYLLABLE GGYE +AF2C ; LV # Lo HANGUL SYLLABLE GGO +AF48 ; LV # Lo HANGUL SYLLABLE GGWA +AF64 ; LV # Lo HANGUL SYLLABLE GGWAE +AF80 ; LV # Lo HANGUL SYLLABLE GGOE +AF9C ; LV # Lo HANGUL SYLLABLE GGYO +AFB8 ; LV # Lo HANGUL SYLLABLE GGU +AFD4 ; LV # Lo HANGUL SYLLABLE GGWEO +AFF0 ; LV # Lo HANGUL SYLLABLE GGWE +B00C ; LV # Lo HANGUL SYLLABLE GGWI +B028 ; LV # Lo HANGUL SYLLABLE GGYU +B044 ; LV # Lo HANGUL SYLLABLE GGEU +B060 ; LV # Lo HANGUL SYLLABLE GGYI +B07C ; LV # Lo HANGUL SYLLABLE GGI +B098 ; LV # Lo HANGUL SYLLABLE NA +B0B4 ; LV # Lo HANGUL SYLLABLE NAE +B0D0 ; LV # Lo HANGUL SYLLABLE NYA +B0EC ; LV # Lo HANGUL SYLLABLE NYAE +B108 ; LV # Lo HANGUL SYLLABLE NEO +B124 ; LV # Lo HANGUL SYLLABLE NE +B140 ; LV # Lo HANGUL SYLLABLE NYEO +B15C ; LV # Lo HANGUL SYLLABLE NYE +B178 ; LV # Lo HANGUL SYLLABLE NO +B194 ; LV # Lo HANGUL SYLLABLE NWA +B1B0 ; LV # Lo HANGUL SYLLABLE NWAE +B1CC ; LV # Lo HANGUL SYLLABLE NOE +B1E8 ; LV # Lo HANGUL SYLLABLE NYO +B204 ; LV # Lo HANGUL SYLLABLE NU +B220 ; LV # Lo HANGUL SYLLABLE NWEO +B23C ; LV # Lo HANGUL SYLLABLE NWE +B258 ; LV # Lo HANGUL SYLLABLE NWI +B274 ; LV # Lo HANGUL SYLLABLE NYU +B290 ; LV # Lo HANGUL SYLLABLE NEU +B2AC ; LV # Lo HANGUL SYLLABLE NYI +B2C8 ; LV # Lo HANGUL SYLLABLE NI +B2E4 ; LV # Lo HANGUL SYLLABLE DA +B300 ; LV # Lo HANGUL SYLLABLE DAE +B31C ; LV # Lo HANGUL SYLLABLE DYA +B338 ; LV # Lo HANGUL SYLLABLE DYAE +B354 ; LV # Lo HANGUL SYLLABLE DEO +B370 ; LV # Lo HANGUL SYLLABLE DE +B38C ; LV # Lo HANGUL SYLLABLE DYEO +B3A8 ; LV # Lo HANGUL SYLLABLE DYE +B3C4 ; LV # Lo HANGUL SYLLABLE DO +B3E0 ; LV # Lo HANGUL SYLLABLE DWA +B3FC ; LV # Lo HANGUL SYLLABLE DWAE +B418 ; LV # Lo HANGUL SYLLABLE DOE +B434 ; LV # Lo HANGUL SYLLABLE DYO +B450 ; LV # Lo HANGUL SYLLABLE DU +B46C ; LV # Lo HANGUL SYLLABLE DWEO +B488 ; LV # Lo HANGUL SYLLABLE DWE +B4A4 ; LV # Lo HANGUL SYLLABLE DWI +B4C0 ; LV # Lo HANGUL SYLLABLE DYU +B4DC ; LV # Lo HANGUL SYLLABLE DEU +B4F8 ; LV # Lo HANGUL SYLLABLE DYI +B514 ; LV # Lo HANGUL SYLLABLE DI +B530 ; LV # Lo HANGUL SYLLABLE DDA +B54C ; LV # Lo HANGUL SYLLABLE DDAE +B568 ; LV # Lo HANGUL SYLLABLE DDYA +B584 ; LV # Lo HANGUL SYLLABLE DDYAE +B5A0 ; LV # Lo HANGUL SYLLABLE DDEO +B5BC ; LV # Lo HANGUL SYLLABLE DDE +B5D8 ; LV # Lo HANGUL SYLLABLE DDYEO +B5F4 ; LV # Lo HANGUL SYLLABLE DDYE +B610 ; LV # Lo HANGUL SYLLABLE DDO +B62C ; LV # Lo HANGUL SYLLABLE DDWA +B648 ; LV # Lo HANGUL SYLLABLE DDWAE +B664 ; LV # Lo HANGUL SYLLABLE DDOE +B680 ; LV # Lo HANGUL SYLLABLE DDYO +B69C ; LV # Lo HANGUL SYLLABLE DDU +B6B8 ; LV # Lo HANGUL SYLLABLE DDWEO +B6D4 ; LV # Lo HANGUL SYLLABLE DDWE +B6F0 ; LV # Lo HANGUL SYLLABLE DDWI +B70C ; LV # Lo HANGUL SYLLABLE DDYU +B728 ; LV # Lo HANGUL SYLLABLE DDEU +B744 ; LV # Lo HANGUL SYLLABLE DDYI +B760 ; LV # Lo HANGUL SYLLABLE DDI +B77C ; LV # Lo HANGUL SYLLABLE RA +B798 ; LV # Lo HANGUL SYLLABLE RAE +B7B4 ; LV # Lo HANGUL SYLLABLE RYA +B7D0 ; LV # Lo HANGUL SYLLABLE RYAE +B7EC ; LV # Lo HANGUL SYLLABLE REO +B808 ; LV # Lo HANGUL SYLLABLE RE +B824 ; LV # Lo HANGUL SYLLABLE RYEO +B840 ; LV # Lo HANGUL SYLLABLE RYE +B85C ; LV # Lo HANGUL SYLLABLE RO +B878 ; LV # Lo HANGUL SYLLABLE RWA +B894 ; LV # Lo HANGUL SYLLABLE RWAE +B8B0 ; LV # Lo HANGUL SYLLABLE ROE +B8CC ; LV # Lo HANGUL SYLLABLE RYO +B8E8 ; LV # Lo HANGUL SYLLABLE RU +B904 ; LV # Lo HANGUL SYLLABLE RWEO +B920 ; LV # Lo HANGUL SYLLABLE RWE +B93C ; LV # Lo HANGUL SYLLABLE RWI +B958 ; LV # Lo HANGUL SYLLABLE RYU +B974 ; LV # Lo HANGUL SYLLABLE REU +B990 ; LV # Lo HANGUL SYLLABLE RYI +B9AC ; LV # Lo HANGUL SYLLABLE RI +B9C8 ; LV # Lo HANGUL SYLLABLE MA +B9E4 ; LV # Lo HANGUL SYLLABLE MAE +BA00 ; LV # Lo HANGUL SYLLABLE MYA +BA1C ; LV # Lo HANGUL SYLLABLE MYAE +BA38 ; LV # Lo HANGUL SYLLABLE MEO +BA54 ; LV # Lo HANGUL SYLLABLE ME +BA70 ; LV # Lo HANGUL SYLLABLE MYEO +BA8C ; LV # Lo HANGUL SYLLABLE MYE +BAA8 ; LV # Lo HANGUL SYLLABLE MO +BAC4 ; LV # Lo HANGUL SYLLABLE MWA +BAE0 ; LV # Lo HANGUL SYLLABLE MWAE +BAFC ; LV # Lo HANGUL SYLLABLE MOE +BB18 ; LV # Lo HANGUL SYLLABLE MYO +BB34 ; LV # Lo HANGUL SYLLABLE MU +BB50 ; LV # Lo HANGUL SYLLABLE MWEO +BB6C ; LV # Lo HANGUL SYLLABLE MWE +BB88 ; LV # Lo HANGUL SYLLABLE MWI +BBA4 ; LV # Lo HANGUL SYLLABLE MYU +BBC0 ; LV # Lo HANGUL SYLLABLE MEU +BBDC ; LV # Lo HANGUL SYLLABLE MYI +BBF8 ; LV # Lo HANGUL SYLLABLE MI +BC14 ; LV # Lo HANGUL SYLLABLE BA +BC30 ; LV # Lo HANGUL SYLLABLE BAE +BC4C ; LV # Lo HANGUL SYLLABLE BYA +BC68 ; LV # Lo HANGUL SYLLABLE BYAE +BC84 ; LV # Lo HANGUL SYLLABLE BEO +BCA0 ; LV # Lo HANGUL SYLLABLE BE +BCBC ; LV # Lo HANGUL SYLLABLE BYEO +BCD8 ; LV # Lo HANGUL SYLLABLE BYE +BCF4 ; LV # Lo HANGUL SYLLABLE BO +BD10 ; LV # Lo HANGUL SYLLABLE BWA +BD2C ; LV # Lo HANGUL SYLLABLE BWAE +BD48 ; LV # Lo HANGUL SYLLABLE BOE +BD64 ; LV # Lo HANGUL SYLLABLE BYO +BD80 ; LV # Lo HANGUL SYLLABLE BU +BD9C ; LV # Lo HANGUL SYLLABLE BWEO +BDB8 ; LV # Lo HANGUL SYLLABLE BWE +BDD4 ; LV # Lo HANGUL SYLLABLE BWI +BDF0 ; LV # Lo HANGUL SYLLABLE BYU +BE0C ; LV # Lo HANGUL SYLLABLE BEU +BE28 ; LV # Lo HANGUL SYLLABLE BYI +BE44 ; LV # Lo HANGUL SYLLABLE BI +BE60 ; LV # Lo HANGUL SYLLABLE BBA +BE7C ; LV # Lo HANGUL SYLLABLE BBAE +BE98 ; LV # Lo HANGUL SYLLABLE BBYA +BEB4 ; LV # Lo HANGUL SYLLABLE BBYAE +BED0 ; LV # Lo HANGUL SYLLABLE BBEO +BEEC ; LV # Lo HANGUL SYLLABLE BBE +BF08 ; LV # Lo HANGUL SYLLABLE BBYEO +BF24 ; LV # Lo HANGUL SYLLABLE BBYE +BF40 ; LV # Lo HANGUL SYLLABLE BBO +BF5C ; LV # Lo HANGUL SYLLABLE BBWA +BF78 ; LV # Lo HANGUL SYLLABLE BBWAE +BF94 ; LV # Lo HANGUL SYLLABLE BBOE +BFB0 ; LV # Lo HANGUL SYLLABLE BBYO +BFCC ; LV # Lo HANGUL SYLLABLE BBU +BFE8 ; LV # Lo HANGUL SYLLABLE BBWEO +C004 ; LV # Lo HANGUL SYLLABLE BBWE +C020 ; LV # Lo HANGUL SYLLABLE BBWI +C03C ; LV # Lo HANGUL SYLLABLE BBYU +C058 ; LV # Lo HANGUL SYLLABLE BBEU +C074 ; LV # Lo HANGUL SYLLABLE BBYI +C090 ; LV # Lo HANGUL SYLLABLE BBI +C0AC ; LV # Lo HANGUL SYLLABLE SA +C0C8 ; LV # Lo HANGUL SYLLABLE SAE +C0E4 ; LV # Lo HANGUL SYLLABLE SYA +C100 ; LV # Lo HANGUL SYLLABLE SYAE +C11C ; LV # Lo HANGUL SYLLABLE SEO +C138 ; LV # Lo HANGUL SYLLABLE SE +C154 ; LV # Lo HANGUL SYLLABLE SYEO +C170 ; LV # Lo HANGUL SYLLABLE SYE +C18C ; LV # Lo HANGUL SYLLABLE SO +C1A8 ; LV # Lo HANGUL SYLLABLE SWA +C1C4 ; LV # Lo HANGUL SYLLABLE SWAE +C1E0 ; LV # Lo HANGUL SYLLABLE SOE +C1FC ; LV # Lo HANGUL SYLLABLE SYO +C218 ; LV # Lo HANGUL SYLLABLE SU +C234 ; LV # Lo HANGUL SYLLABLE SWEO +C250 ; LV # Lo HANGUL SYLLABLE SWE +C26C ; LV # Lo HANGUL SYLLABLE SWI +C288 ; LV # Lo HANGUL SYLLABLE SYU +C2A4 ; LV # Lo HANGUL SYLLABLE SEU +C2C0 ; LV # Lo HANGUL SYLLABLE SYI +C2DC ; LV # Lo HANGUL SYLLABLE SI +C2F8 ; LV # Lo HANGUL SYLLABLE SSA +C314 ; LV # Lo HANGUL SYLLABLE SSAE +C330 ; LV # Lo HANGUL SYLLABLE SSYA +C34C ; LV # Lo HANGUL SYLLABLE SSYAE +C368 ; LV # Lo HANGUL SYLLABLE SSEO +C384 ; LV # Lo HANGUL SYLLABLE SSE +C3A0 ; LV # Lo HANGUL SYLLABLE SSYEO +C3BC ; LV # Lo HANGUL SYLLABLE SSYE +C3D8 ; LV # Lo HANGUL SYLLABLE SSO +C3F4 ; LV # Lo HANGUL SYLLABLE SSWA +C410 ; LV # Lo HANGUL SYLLABLE SSWAE +C42C ; LV # Lo HANGUL SYLLABLE SSOE +C448 ; LV # Lo HANGUL SYLLABLE SSYO +C464 ; LV # Lo HANGUL SYLLABLE SSU +C480 ; LV # Lo HANGUL SYLLABLE SSWEO +C49C ; LV # Lo HANGUL SYLLABLE SSWE +C4B8 ; LV # Lo HANGUL SYLLABLE SSWI +C4D4 ; LV # Lo HANGUL SYLLABLE SSYU +C4F0 ; LV # Lo HANGUL SYLLABLE SSEU +C50C ; LV # Lo HANGUL SYLLABLE SSYI +C528 ; LV # Lo HANGUL SYLLABLE SSI +C544 ; LV # Lo HANGUL SYLLABLE A +C560 ; LV # Lo HANGUL SYLLABLE AE +C57C ; LV # Lo HANGUL SYLLABLE YA +C598 ; LV # Lo HANGUL SYLLABLE YAE +C5B4 ; LV # Lo HANGUL SYLLABLE EO +C5D0 ; LV # Lo HANGUL SYLLABLE E +C5EC ; LV # Lo HANGUL SYLLABLE YEO +C608 ; LV # Lo HANGUL SYLLABLE YE +C624 ; LV # Lo HANGUL SYLLABLE O +C640 ; LV # Lo HANGUL SYLLABLE WA +C65C ; LV # Lo HANGUL SYLLABLE WAE +C678 ; LV # Lo HANGUL SYLLABLE OE +C694 ; LV # Lo HANGUL SYLLABLE YO +C6B0 ; LV # Lo HANGUL SYLLABLE U +C6CC ; LV # Lo HANGUL SYLLABLE WEO +C6E8 ; LV # Lo HANGUL SYLLABLE WE +C704 ; LV # Lo HANGUL SYLLABLE WI +C720 ; LV # Lo HANGUL SYLLABLE YU +C73C ; LV # Lo HANGUL SYLLABLE EU +C758 ; LV # Lo HANGUL SYLLABLE YI +C774 ; LV # Lo HANGUL SYLLABLE I +C790 ; LV # Lo HANGUL SYLLABLE JA +C7AC ; LV # Lo HANGUL SYLLABLE JAE +C7C8 ; LV # Lo HANGUL SYLLABLE JYA +C7E4 ; LV # Lo HANGUL SYLLABLE JYAE +C800 ; LV # Lo HANGUL SYLLABLE JEO +C81C ; LV # Lo HANGUL SYLLABLE JE +C838 ; LV # Lo HANGUL SYLLABLE JYEO +C854 ; LV # Lo HANGUL SYLLABLE JYE +C870 ; LV # Lo HANGUL SYLLABLE JO +C88C ; LV # Lo HANGUL SYLLABLE JWA +C8A8 ; LV # Lo HANGUL SYLLABLE JWAE +C8C4 ; LV # Lo HANGUL SYLLABLE JOE +C8E0 ; LV # Lo HANGUL SYLLABLE JYO +C8FC ; LV # Lo HANGUL SYLLABLE JU +C918 ; LV # Lo HANGUL SYLLABLE JWEO +C934 ; LV # Lo HANGUL SYLLABLE JWE +C950 ; LV # Lo HANGUL SYLLABLE JWI +C96C ; LV # Lo HANGUL SYLLABLE JYU +C988 ; LV # Lo HANGUL SYLLABLE JEU +C9A4 ; LV # Lo HANGUL SYLLABLE JYI +C9C0 ; LV # Lo HANGUL SYLLABLE JI +C9DC ; LV # Lo HANGUL SYLLABLE JJA +C9F8 ; LV # Lo HANGUL SYLLABLE JJAE +CA14 ; LV # Lo HANGUL SYLLABLE JJYA +CA30 ; LV # Lo HANGUL SYLLABLE JJYAE +CA4C ; LV # Lo HANGUL SYLLABLE JJEO +CA68 ; LV # Lo HANGUL SYLLABLE JJE +CA84 ; LV # Lo HANGUL SYLLABLE JJYEO +CAA0 ; LV # Lo HANGUL SYLLABLE JJYE +CABC ; LV # Lo HANGUL SYLLABLE JJO +CAD8 ; LV # Lo HANGUL SYLLABLE JJWA +CAF4 ; LV # Lo HANGUL SYLLABLE JJWAE +CB10 ; LV # Lo HANGUL SYLLABLE JJOE +CB2C ; LV # Lo HANGUL SYLLABLE JJYO +CB48 ; LV # Lo HANGUL SYLLABLE JJU +CB64 ; LV # Lo HANGUL SYLLABLE JJWEO +CB80 ; LV # Lo HANGUL SYLLABLE JJWE +CB9C ; LV # Lo HANGUL SYLLABLE JJWI +CBB8 ; LV # Lo HANGUL SYLLABLE JJYU +CBD4 ; LV # Lo HANGUL SYLLABLE JJEU +CBF0 ; LV # Lo HANGUL SYLLABLE JJYI +CC0C ; LV # Lo HANGUL SYLLABLE JJI +CC28 ; LV # Lo HANGUL SYLLABLE CA +CC44 ; LV # Lo HANGUL SYLLABLE CAE +CC60 ; LV # Lo HANGUL SYLLABLE CYA +CC7C ; LV # Lo HANGUL SYLLABLE CYAE +CC98 ; LV # Lo HANGUL SYLLABLE CEO +CCB4 ; LV # Lo HANGUL SYLLABLE CE +CCD0 ; LV # Lo HANGUL SYLLABLE CYEO +CCEC ; LV # Lo HANGUL SYLLABLE CYE +CD08 ; LV # Lo HANGUL SYLLABLE CO +CD24 ; LV # Lo HANGUL SYLLABLE CWA +CD40 ; LV # Lo HANGUL SYLLABLE CWAE +CD5C ; LV # Lo HANGUL SYLLABLE COE +CD78 ; LV # Lo HANGUL SYLLABLE CYO +CD94 ; LV # Lo HANGUL SYLLABLE CU +CDB0 ; LV # Lo HANGUL SYLLABLE CWEO +CDCC ; LV # Lo HANGUL SYLLABLE CWE +CDE8 ; LV # Lo HANGUL SYLLABLE CWI +CE04 ; LV # Lo HANGUL SYLLABLE CYU +CE20 ; LV # Lo HANGUL SYLLABLE CEU +CE3C ; LV # Lo HANGUL SYLLABLE CYI +CE58 ; LV # Lo HANGUL SYLLABLE CI +CE74 ; LV # Lo HANGUL SYLLABLE KA +CE90 ; LV # Lo HANGUL SYLLABLE KAE +CEAC ; LV # Lo HANGUL SYLLABLE KYA +CEC8 ; LV # Lo HANGUL SYLLABLE KYAE +CEE4 ; LV # Lo HANGUL SYLLABLE KEO +CF00 ; LV # Lo HANGUL SYLLABLE KE +CF1C ; LV # Lo HANGUL SYLLABLE KYEO +CF38 ; LV # Lo HANGUL SYLLABLE KYE +CF54 ; LV # Lo HANGUL SYLLABLE KO +CF70 ; LV # Lo HANGUL SYLLABLE KWA +CF8C ; LV # Lo HANGUL SYLLABLE KWAE +CFA8 ; LV # Lo HANGUL SYLLABLE KOE +CFC4 ; LV # Lo HANGUL SYLLABLE KYO +CFE0 ; LV # Lo HANGUL SYLLABLE KU +CFFC ; LV # Lo HANGUL SYLLABLE KWEO +D018 ; LV # Lo HANGUL SYLLABLE KWE +D034 ; LV # Lo HANGUL SYLLABLE KWI +D050 ; LV # Lo HANGUL SYLLABLE KYU +D06C ; LV # Lo HANGUL SYLLABLE KEU +D088 ; LV # Lo HANGUL SYLLABLE KYI +D0A4 ; LV # Lo HANGUL SYLLABLE KI +D0C0 ; LV # Lo HANGUL SYLLABLE TA +D0DC ; LV # Lo HANGUL SYLLABLE TAE +D0F8 ; LV # Lo HANGUL SYLLABLE TYA +D114 ; LV # Lo HANGUL SYLLABLE TYAE +D130 ; LV # Lo HANGUL SYLLABLE TEO +D14C ; LV # Lo HANGUL SYLLABLE TE +D168 ; LV # Lo HANGUL SYLLABLE TYEO +D184 ; LV # Lo HANGUL SYLLABLE TYE +D1A0 ; LV # Lo HANGUL SYLLABLE TO +D1BC ; LV # Lo HANGUL SYLLABLE TWA +D1D8 ; LV # Lo HANGUL SYLLABLE TWAE +D1F4 ; LV # Lo HANGUL SYLLABLE TOE +D210 ; LV # Lo HANGUL SYLLABLE TYO +D22C ; LV # Lo HANGUL SYLLABLE TU +D248 ; LV # Lo HANGUL SYLLABLE TWEO +D264 ; LV # Lo HANGUL SYLLABLE TWE +D280 ; LV # Lo HANGUL SYLLABLE TWI +D29C ; LV # Lo HANGUL SYLLABLE TYU +D2B8 ; LV # Lo HANGUL SYLLABLE TEU +D2D4 ; LV # Lo HANGUL SYLLABLE TYI +D2F0 ; LV # Lo HANGUL SYLLABLE TI +D30C ; LV # Lo HANGUL SYLLABLE PA +D328 ; LV # Lo HANGUL SYLLABLE PAE +D344 ; LV # Lo HANGUL SYLLABLE PYA +D360 ; LV # Lo HANGUL SYLLABLE PYAE +D37C ; LV # Lo HANGUL SYLLABLE PEO +D398 ; LV # Lo HANGUL SYLLABLE PE +D3B4 ; LV # Lo HANGUL SYLLABLE PYEO +D3D0 ; LV # Lo HANGUL SYLLABLE PYE +D3EC ; LV # Lo HANGUL SYLLABLE PO +D408 ; LV # Lo HANGUL SYLLABLE PWA +D424 ; LV # Lo HANGUL SYLLABLE PWAE +D440 ; LV # Lo HANGUL SYLLABLE POE +D45C ; LV # Lo HANGUL SYLLABLE PYO +D478 ; LV # Lo HANGUL SYLLABLE PU +D494 ; LV # Lo HANGUL SYLLABLE PWEO +D4B0 ; LV # Lo HANGUL SYLLABLE PWE +D4CC ; LV # Lo HANGUL SYLLABLE PWI +D4E8 ; LV # Lo HANGUL SYLLABLE PYU +D504 ; LV # Lo HANGUL SYLLABLE PEU +D520 ; LV # Lo HANGUL SYLLABLE PYI +D53C ; LV # Lo HANGUL SYLLABLE PI +D558 ; LV # Lo HANGUL SYLLABLE HA +D574 ; LV # Lo HANGUL SYLLABLE HAE +D590 ; LV # Lo HANGUL SYLLABLE HYA +D5AC ; LV # Lo HANGUL SYLLABLE HYAE +D5C8 ; LV # Lo HANGUL SYLLABLE HEO +D5E4 ; LV # Lo HANGUL SYLLABLE HE +D600 ; LV # Lo HANGUL SYLLABLE HYEO +D61C ; LV # Lo HANGUL SYLLABLE HYE +D638 ; LV # Lo HANGUL SYLLABLE HO +D654 ; LV # Lo HANGUL SYLLABLE HWA +D670 ; LV # Lo HANGUL SYLLABLE HWAE +D68C ; LV # Lo HANGUL SYLLABLE HOE +D6A8 ; LV # Lo HANGUL SYLLABLE HYO +D6C4 ; LV # Lo HANGUL SYLLABLE HU +D6E0 ; LV # Lo HANGUL SYLLABLE HWEO +D6FC ; LV # Lo HANGUL SYLLABLE HWE +D718 ; LV # Lo HANGUL SYLLABLE HWI +D734 ; LV # Lo HANGUL SYLLABLE HYU +D750 ; LV # Lo HANGUL SYLLABLE HEU +D76C ; LV # Lo HANGUL SYLLABLE HYI +D788 ; LV # Lo HANGUL SYLLABLE HI + +# Total code points: 399 + +# ================================================ + +AC01..AC1B ; LVT # Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH +AC1D..AC37 ; LVT # Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH +AC39..AC53 ; LVT # Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH +AC55..AC6F ; LVT # Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH +AC71..AC8B ; LVT # Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH +AC8D..ACA7 ; LVT # Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH +ACA9..ACC3 ; LVT # Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH +ACC5..ACDF ; LVT # Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH +ACE1..ACFB ; LVT # Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH +ACFD..AD17 ; LVT # Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH +AD19..AD33 ; LVT # Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH +AD35..AD4F ; LVT # Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH +AD51..AD6B ; LVT # Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH +AD6D..AD87 ; LVT # Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH +AD89..ADA3 ; LVT # Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH +ADA5..ADBF ; LVT # Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH +ADC1..ADDB ; LVT # Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH +ADDD..ADF7 ; LVT # Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH +ADF9..AE13 ; LVT # Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH +AE15..AE2F ; LVT # Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH +AE31..AE4B ; LVT # Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH +AE4D..AE67 ; LVT # Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH +AE69..AE83 ; LVT # Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH +AE85..AE9F ; LVT # Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH +AEA1..AEBB ; LVT # Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH +AEBD..AED7 ; LVT # Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH +AED9..AEF3 ; LVT # Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH +AEF5..AF0F ; LVT # Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH +AF11..AF2B ; LVT # Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH +AF2D..AF47 ; LVT # Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH +AF49..AF63 ; LVT # Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH +AF65..AF7F ; LVT # Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH +AF81..AF9B ; LVT # Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH +AF9D..AFB7 ; LVT # Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH +AFB9..AFD3 ; LVT # Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH +AFD5..AFEF ; LVT # Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH +AFF1..B00B ; LVT # Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH +B00D..B027 ; LVT # Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH +B029..B043 ; LVT # Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH +B045..B05F ; LVT # Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH +B061..B07B ; LVT # Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH +B07D..B097 ; LVT # Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH +B099..B0B3 ; LVT # Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH +B0B5..B0CF ; LVT # Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH +B0D1..B0EB ; LVT # Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH +B0ED..B107 ; LVT # Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH +B109..B123 ; LVT # Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH +B125..B13F ; LVT # Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH +B141..B15B ; LVT # Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH +B15D..B177 ; LVT # Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH +B179..B193 ; LVT # Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH +B195..B1AF ; LVT # Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH +B1B1..B1CB ; LVT # Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH +B1CD..B1E7 ; LVT # Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH +B1E9..B203 ; LVT # Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH +B205..B21F ; LVT # Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH +B221..B23B ; LVT # Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH +B23D..B257 ; LVT # Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH +B259..B273 ; LVT # Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH +B275..B28F ; LVT # Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH +B291..B2AB ; LVT # Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH +B2AD..B2C7 ; LVT # Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH +B2C9..B2E3 ; LVT # Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH +B2E5..B2FF ; LVT # Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH +B301..B31B ; LVT # Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH +B31D..B337 ; LVT # Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH +B339..B353 ; LVT # Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH +B355..B36F ; LVT # Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH +B371..B38B ; LVT # Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH +B38D..B3A7 ; LVT # Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH +B3A9..B3C3 ; LVT # Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH +B3C5..B3DF ; LVT # Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH +B3E1..B3FB ; LVT # Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH +B3FD..B417 ; LVT # Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH +B419..B433 ; LVT # Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH +B435..B44F ; LVT # Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH +B451..B46B ; LVT # Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH +B46D..B487 ; LVT # Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH +B489..B4A3 ; LVT # Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH +B4A5..B4BF ; LVT # Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH +B4C1..B4DB ; LVT # Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH +B4DD..B4F7 ; LVT # Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH +B4F9..B513 ; LVT # Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH +B515..B52F ; LVT # Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH +B531..B54B ; LVT # Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH +B54D..B567 ; LVT # Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH +B569..B583 ; LVT # Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH +B585..B59F ; LVT # Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH +B5A1..B5BB ; LVT # Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH +B5BD..B5D7 ; LVT # Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH +B5D9..B5F3 ; LVT # Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH +B5F5..B60F ; LVT # Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH +B611..B62B ; LVT # Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH +B62D..B647 ; LVT # Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH +B649..B663 ; LVT # Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH +B665..B67F ; LVT # Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH +B681..B69B ; LVT # Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH +B69D..B6B7 ; LVT # Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH +B6B9..B6D3 ; LVT # Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH +B6D5..B6EF ; LVT # Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH +B6F1..B70B ; LVT # Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH +B70D..B727 ; LVT # Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH +B729..B743 ; LVT # Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH +B745..B75F ; LVT # Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH +B761..B77B ; LVT # Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH +B77D..B797 ; LVT # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH +B799..B7B3 ; LVT # Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH +B7B5..B7CF ; LVT # Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH +B7D1..B7EB ; LVT # Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH +B7ED..B807 ; LVT # Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH +B809..B823 ; LVT # Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH +B825..B83F ; LVT # Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH +B841..B85B ; LVT # Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH +B85D..B877 ; LVT # Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH +B879..B893 ; LVT # Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH +B895..B8AF ; LVT # Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH +B8B1..B8CB ; LVT # Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH +B8CD..B8E7 ; LVT # Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH +B8E9..B903 ; LVT # Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH +B905..B91F ; LVT # Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH +B921..B93B ; LVT # Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH +B93D..B957 ; LVT # Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH +B959..B973 ; LVT # Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH +B975..B98F ; LVT # Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH +B991..B9AB ; LVT # Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH +B9AD..B9C7 ; LVT # Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH +B9C9..B9E3 ; LVT # Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH +B9E5..B9FF ; LVT # Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH +BA01..BA1B ; LVT # Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH +BA1D..BA37 ; LVT # Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH +BA39..BA53 ; LVT # Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH +BA55..BA6F ; LVT # Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH +BA71..BA8B ; LVT # Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH +BA8D..BAA7 ; LVT # Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH +BAA9..BAC3 ; LVT # Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH +BAC5..BADF ; LVT # Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH +BAE1..BAFB ; LVT # Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH +BAFD..BB17 ; LVT # Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH +BB19..BB33 ; LVT # Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH +BB35..BB4F ; LVT # Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH +BB51..BB6B ; LVT # Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH +BB6D..BB87 ; LVT # Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH +BB89..BBA3 ; LVT # Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH +BBA5..BBBF ; LVT # Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH +BBC1..BBDB ; LVT # Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH +BBDD..BBF7 ; LVT # Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH +BBF9..BC13 ; LVT # Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH +BC15..BC2F ; LVT # Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH +BC31..BC4B ; LVT # Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH +BC4D..BC67 ; LVT # Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH +BC69..BC83 ; LVT # Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH +BC85..BC9F ; LVT # Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH +BCA1..BCBB ; LVT # Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH +BCBD..BCD7 ; LVT # Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH +BCD9..BCF3 ; LVT # Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH +BCF5..BD0F ; LVT # Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH +BD11..BD2B ; LVT # Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH +BD2D..BD47 ; LVT # Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH +BD49..BD63 ; LVT # Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH +BD65..BD7F ; LVT # Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH +BD81..BD9B ; LVT # Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH +BD9D..BDB7 ; LVT # Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH +BDB9..BDD3 ; LVT # Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH +BDD5..BDEF ; LVT # Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH +BDF1..BE0B ; LVT # Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH +BE0D..BE27 ; LVT # Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH +BE29..BE43 ; LVT # Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH +BE45..BE5F ; LVT # Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH +BE61..BE7B ; LVT # Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH +BE7D..BE97 ; LVT # Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH +BE99..BEB3 ; LVT # Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH +BEB5..BECF ; LVT # Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH +BED1..BEEB ; LVT # Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH +BEED..BF07 ; LVT # Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH +BF09..BF23 ; LVT # Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH +BF25..BF3F ; LVT # Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH +BF41..BF5B ; LVT # Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH +BF5D..BF77 ; LVT # Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH +BF79..BF93 ; LVT # Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH +BF95..BFAF ; LVT # Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH +BFB1..BFCB ; LVT # Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH +BFCD..BFE7 ; LVT # Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH +BFE9..C003 ; LVT # Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH +C005..C01F ; LVT # Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH +C021..C03B ; LVT # Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH +C03D..C057 ; LVT # Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH +C059..C073 ; LVT # Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH +C075..C08F ; LVT # Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH +C091..C0AB ; LVT # Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH +C0AD..C0C7 ; LVT # Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH +C0C9..C0E3 ; LVT # Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH +C0E5..C0FF ; LVT # Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH +C101..C11B ; LVT # Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH +C11D..C137 ; LVT # Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH +C139..C153 ; LVT # Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH +C155..C16F ; LVT # Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH +C171..C18B ; LVT # Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH +C18D..C1A7 ; LVT # Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH +C1A9..C1C3 ; LVT # Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH +C1C5..C1DF ; LVT # Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH +C1E1..C1FB ; LVT # Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH +C1FD..C217 ; LVT # Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH +C219..C233 ; LVT # Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH +C235..C24F ; LVT # Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH +C251..C26B ; LVT # Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH +C26D..C287 ; LVT # Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH +C289..C2A3 ; LVT # Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH +C2A5..C2BF ; LVT # Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH +C2C1..C2DB ; LVT # Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH +C2DD..C2F7 ; LVT # Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH +C2F9..C313 ; LVT # Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH +C315..C32F ; LVT # Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH +C331..C34B ; LVT # Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH +C34D..C367 ; LVT # Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH +C369..C383 ; LVT # Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH +C385..C39F ; LVT # Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH +C3A1..C3BB ; LVT # Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH +C3BD..C3D7 ; LVT # Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH +C3D9..C3F3 ; LVT # Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH +C3F5..C40F ; LVT # Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH +C411..C42B ; LVT # Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH +C42D..C447 ; LVT # Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH +C449..C463 ; LVT # Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH +C465..C47F ; LVT # Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH +C481..C49B ; LVT # Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH +C49D..C4B7 ; LVT # Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH +C4B9..C4D3 ; LVT # Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH +C4D5..C4EF ; LVT # Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH +C4F1..C50B ; LVT # Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH +C50D..C527 ; LVT # Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH +C529..C543 ; LVT # Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH +C545..C55F ; LVT # Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH +C561..C57B ; LVT # Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH +C57D..C597 ; LVT # Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH +C599..C5B3 ; LVT # Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH +C5B5..C5CF ; LVT # Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH +C5D1..C5EB ; LVT # Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH +C5ED..C607 ; LVT # Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH +C609..C623 ; LVT # Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH +C625..C63F ; LVT # Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH +C641..C65B ; LVT # Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH +C65D..C677 ; LVT # Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH +C679..C693 ; LVT # Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH +C695..C6AF ; LVT # Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH +C6B1..C6CB ; LVT # Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH +C6CD..C6E7 ; LVT # Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH +C6E9..C703 ; LVT # Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH +C705..C71F ; LVT # Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH +C721..C73B ; LVT # Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH +C73D..C757 ; LVT # Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH +C759..C773 ; LVT # Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH +C775..C78F ; LVT # Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH +C791..C7AB ; LVT # Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH +C7AD..C7C7 ; LVT # Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH +C7C9..C7E3 ; LVT # Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH +C7E5..C7FF ; LVT # Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH +C801..C81B ; LVT # Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH +C81D..C837 ; LVT # Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH +C839..C853 ; LVT # Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH +C855..C86F ; LVT # Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH +C871..C88B ; LVT # Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH +C88D..C8A7 ; LVT # Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH +C8A9..C8C3 ; LVT # Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH +C8C5..C8DF ; LVT # Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH +C8E1..C8FB ; LVT # Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH +C8FD..C917 ; LVT # Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH +C919..C933 ; LVT # Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH +C935..C94F ; LVT # Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH +C951..C96B ; LVT # Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH +C96D..C987 ; LVT # Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH +C989..C9A3 ; LVT # Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH +C9A5..C9BF ; LVT # Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH +C9C1..C9DB ; LVT # Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH +C9DD..C9F7 ; LVT # Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH +C9F9..CA13 ; LVT # Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH +CA15..CA2F ; LVT # Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH +CA31..CA4B ; LVT # Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH +CA4D..CA67 ; LVT # Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH +CA69..CA83 ; LVT # Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH +CA85..CA9F ; LVT # Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH +CAA1..CABB ; LVT # Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH +CABD..CAD7 ; LVT # Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH +CAD9..CAF3 ; LVT # Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH +CAF5..CB0F ; LVT # Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH +CB11..CB2B ; LVT # Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH +CB2D..CB47 ; LVT # Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH +CB49..CB63 ; LVT # Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH +CB65..CB7F ; LVT # Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH +CB81..CB9B ; LVT # Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH +CB9D..CBB7 ; LVT # Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH +CBB9..CBD3 ; LVT # Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH +CBD5..CBEF ; LVT # Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH +CBF1..CC0B ; LVT # Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH +CC0D..CC27 ; LVT # Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH +CC29..CC43 ; LVT # Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH +CC45..CC5F ; LVT # Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH +CC61..CC7B ; LVT # Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH +CC7D..CC97 ; LVT # Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH +CC99..CCB3 ; LVT # Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH +CCB5..CCCF ; LVT # Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH +CCD1..CCEB ; LVT # Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH +CCED..CD07 ; LVT # Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH +CD09..CD23 ; LVT # Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH +CD25..CD3F ; LVT # Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH +CD41..CD5B ; LVT # Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH +CD5D..CD77 ; LVT # Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH +CD79..CD93 ; LVT # Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH +CD95..CDAF ; LVT # Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH +CDB1..CDCB ; LVT # Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH +CDCD..CDE7 ; LVT # Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH +CDE9..CE03 ; LVT # Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH +CE05..CE1F ; LVT # Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH +CE21..CE3B ; LVT # Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH +CE3D..CE57 ; LVT # Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH +CE59..CE73 ; LVT # Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH +CE75..CE8F ; LVT # Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH +CE91..CEAB ; LVT # Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH +CEAD..CEC7 ; LVT # Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH +CEC9..CEE3 ; LVT # Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH +CEE5..CEFF ; LVT # Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH +CF01..CF1B ; LVT # Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH +CF1D..CF37 ; LVT # Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH +CF39..CF53 ; LVT # Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH +CF55..CF6F ; LVT # Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH +CF71..CF8B ; LVT # Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH +CF8D..CFA7 ; LVT # Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH +CFA9..CFC3 ; LVT # Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH +CFC5..CFDF ; LVT # Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH +CFE1..CFFB ; LVT # Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH +CFFD..D017 ; LVT # Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH +D019..D033 ; LVT # Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH +D035..D04F ; LVT # Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH +D051..D06B ; LVT # Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH +D06D..D087 ; LVT # Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH +D089..D0A3 ; LVT # Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH +D0A5..D0BF ; LVT # Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH +D0C1..D0DB ; LVT # Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH +D0DD..D0F7 ; LVT # Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH +D0F9..D113 ; LVT # Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH +D115..D12F ; LVT # Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH +D131..D14B ; LVT # Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH +D14D..D167 ; LVT # Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH +D169..D183 ; LVT # Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH +D185..D19F ; LVT # Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH +D1A1..D1BB ; LVT # Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH +D1BD..D1D7 ; LVT # Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH +D1D9..D1F3 ; LVT # Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH +D1F5..D20F ; LVT # Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH +D211..D22B ; LVT # Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH +D22D..D247 ; LVT # Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH +D249..D263 ; LVT # Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH +D265..D27F ; LVT # Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH +D281..D29B ; LVT # Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH +D29D..D2B7 ; LVT # Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH +D2B9..D2D3 ; LVT # Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH +D2D5..D2EF ; LVT # Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH +D2F1..D30B ; LVT # Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH +D30D..D327 ; LVT # Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH +D329..D343 ; LVT # Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH +D345..D35F ; LVT # Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH +D361..D37B ; LVT # Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH +D37D..D397 ; LVT # Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH +D399..D3B3 ; LVT # Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH +D3B5..D3CF ; LVT # Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH +D3D1..D3EB ; LVT # Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH +D3ED..D407 ; LVT # Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH +D409..D423 ; LVT # Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH +D425..D43F ; LVT # Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH +D441..D45B ; LVT # Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH +D45D..D477 ; LVT # Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH +D479..D493 ; LVT # Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH +D495..D4AF ; LVT # Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH +D4B1..D4CB ; LVT # Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH +D4CD..D4E7 ; LVT # Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH +D4E9..D503 ; LVT # Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH +D505..D51F ; LVT # Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH +D521..D53B ; LVT # Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH +D53D..D557 ; LVT # Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH +D559..D573 ; LVT # Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH +D575..D58F ; LVT # Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH +D591..D5AB ; LVT # Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH +D5AD..D5C7 ; LVT # Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH +D5C9..D5E3 ; LVT # Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH +D5E5..D5FF ; LVT # Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH +D601..D61B ; LVT # Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH +D61D..D637 ; LVT # Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH +D639..D653 ; LVT # Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH +D655..D66F ; LVT # Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH +D671..D68B ; LVT # Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH +D68D..D6A7 ; LVT # Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH +D6A9..D6C3 ; LVT # Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH +D6C5..D6DF ; LVT # Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH +D6E1..D6FB ; LVT # Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH +D6FD..D717 ; LVT # Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH +D719..D733 ; LVT # Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH +D735..D74F ; LVT # Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH +D751..D76B ; LVT # Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH +D76D..D787 ; LVT # Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH +D789..D7A3 ; LVT # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH + +# Total code points: 10773 + +# ================================================ + +200D ; ZWJ # Cf ZERO WIDTH JOINER + +# Total code points: 1 + +# EOF diff --git a/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakTest.txt b/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakTest.txt index b443c2bd..3c73f97b 100644 --- a/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakTest.txt +++ b/pkgs/characters/third_party/Unicode_Consortium/GraphemeBreakTest.txt @@ -1,630 +1,630 @@ -# GraphemeBreakTest-12.1.0.txt -# Date: 2019-03-10, 10:53:12 GMT -# © 2019 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# -# Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ -# -# Default Grapheme_Cluster_Break Test -# -# Format: -# (# )? -# contains hex Unicode code points, with -# ÷ wherever there is a break opportunity, and -# × wherever there is not. -# the format can change, but currently it shows: -# - the sample character name -# - (x) the Grapheme_Cluster_Break property value for the sample character -# - [x] the rule that determines whether there is a break or not, -# as listed in the Rules section of GraphemeBreakTest.html -# -# These samples may be extended or changed in the future. -# -÷ 0020 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0020 × 0308 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0020 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (CR) ÷ [0.3] -÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0020 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (LF) ÷ [0.3] -÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0020 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (Control) ÷ [0.3] -÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0020 × 034F ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0020 × 0308 × 034F ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0020 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0020 × 0308 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0020 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0020 × 0308 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0020 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0020 × 0308 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0020 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0020 × 0308 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0020 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0020 × 0308 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0020 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0020 × 0308 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0020 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0020 × 0308 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0020 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] (Other) ÷ [0.3] -÷ 0020 × 0308 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 000D ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] SPACE (Other) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 000D ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] (CR) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 000D × 000A ÷ # ÷ [0.2] (CR) × [3.0] (LF) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 000D ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Control) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 000D ÷ 034F ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 000D ÷ 0308 × 034F ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 000D ÷ 0600 ÷ # ÷ [0.2] (CR) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000D ÷ 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000D ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 000D ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 000D ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 000D ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 000D ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 000D ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 000D ÷ 231A ÷ # ÷ [0.2] (CR) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 000D ÷ 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 000D ÷ 200D ÷ # ÷ [0.2] (CR) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 000D ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Other) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 000A ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] SPACE (Other) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 000A ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] (CR) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 000A ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] (LF) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 000A ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Control) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 000A ÷ 034F ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 000A ÷ 0308 × 034F ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 000A ÷ 0600 ÷ # ÷ [0.2] (LF) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000A ÷ 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000A ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 000A ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 000A ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 000A ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 000A ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 000A ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 000A ÷ 231A ÷ # ÷ [0.2] (LF) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 000A ÷ 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 000A ÷ 200D ÷ # ÷ [0.2] (LF) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 000A ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Other) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0001 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] SPACE (Other) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0001 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] (CR) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0001 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] (LF) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0001 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Control) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0001 ÷ 034F ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0001 ÷ 0308 × 034F ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0001 ÷ 0600 ÷ # ÷ [0.2] (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0001 ÷ 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0001 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0001 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0001 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0001 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0001 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0001 ÷ 231A ÷ # ÷ [0.2] (Control) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0001 ÷ 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0001 ÷ 200D ÷ # ÷ [0.2] (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0001 ÷ 0308 × 200D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0001 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Other) ÷ [0.3] -÷ 0001 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 034F ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 034F × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 034F ÷ 000D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (CR) ÷ [0.3] -÷ 034F × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 034F ÷ 000A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (LF) ÷ [0.3] -÷ 034F × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 034F ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (Control) ÷ [0.3] -÷ 034F × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 034F × 034F ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 034F × 0308 × 034F ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 034F ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 034F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 034F ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 034F × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 034F × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 034F × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 034F ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 034F × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 034F ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 034F × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 034F ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 034F × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 034F ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 034F × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 034F ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 034F × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 034F ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 034F × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 034F × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 034F × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 034F × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 034F × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 034F ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] (Other) ÷ [0.3] -÷ 034F × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 1F1E6 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (CR) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (LF) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (Control) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 1F1E6 × 034F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1F1E6 × 0308 × 034F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1F1E6 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1F1E6 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1F1E6 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1F1E6 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1F1E6 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1F1E6 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1F1E6 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] (Other) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0600 × 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] SPACE (Other) ÷ [0.3] -÷ 0600 × 0308 ÷ 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0600 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (CR) ÷ [0.3] -÷ 0600 × 0308 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0600 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (LF) ÷ [0.3] -÷ 0600 × 0308 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0600 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (Control) ÷ [0.3] -÷ 0600 × 0308 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0600 × 034F ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0600 × 0308 × 034F ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0600 × 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0600 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0600 × 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0600 × 0308 ÷ 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0600 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0600 × 0308 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0600 × 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0600 × 0308 ÷ 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0600 × 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0600 × 0308 ÷ 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0600 × 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0600 × 0308 ÷ 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0600 × AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0600 × 0308 ÷ AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0600 × AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0600 × 0308 ÷ AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0600 × 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] WATCH (ExtPict) ÷ [0.3] -÷ 0600 × 0308 ÷ 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0600 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0600 × 0308 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0600 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0600 × 0308 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0600 × 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] (Other) ÷ [0.3] -÷ 0600 × 0308 ÷ 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (CR) ÷ [0.3] -÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (LF) ÷ [0.3] -÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (Control) ÷ [0.3] -÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0903 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0903 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0903 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0903 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0903 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0903 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0903 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0903 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0903 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0903 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0903 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0903 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] (Other) ÷ [0.3] -÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 1100 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1100 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1100 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (CR) ÷ [0.3] -÷ 1100 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 1100 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (LF) ÷ [0.3] -÷ 1100 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 1100 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (Control) ÷ [0.3] -÷ 1100 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 1100 × 034F ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1100 × 0308 × 034F ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1100 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1100 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1100 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1100 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1100 × 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1100 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1100 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1100 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1100 × AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1100 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1100 × AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1100 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1100 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1100 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1100 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1100 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1100 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1100 × 0308 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1100 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] (Other) ÷ [0.3] -÷ 1100 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 1160 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1160 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1160 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (CR) ÷ [0.3] -÷ 1160 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 1160 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (LF) ÷ [0.3] -÷ 1160 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 1160 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (Control) ÷ [0.3] -÷ 1160 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 1160 × 034F ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1160 × 0308 × 034F ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 1160 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 1160 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1160 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1160 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1160 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1160 × 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1160 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 1160 × 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1160 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 1160 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1160 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 1160 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1160 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 1160 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1160 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 1160 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1160 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 1160 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1160 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 1160 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] (Other) ÷ [0.3] -÷ 1160 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 11A8 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 11A8 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 11A8 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (CR) ÷ [0.3] -÷ 11A8 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 11A8 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (LF) ÷ [0.3] -÷ 11A8 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 11A8 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (Control) ÷ [0.3] -÷ 11A8 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 11A8 × 034F ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 11A8 × 0308 × 034F ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 11A8 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 11A8 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 11A8 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 11A8 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 11A8 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 11A8 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 11A8 × 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 11A8 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 11A8 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 11A8 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 11A8 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 11A8 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 11A8 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 11A8 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 11A8 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 11A8 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 11A8 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 11A8 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 11A8 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] (Other) ÷ [0.3] -÷ 11A8 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ AC00 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ AC00 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ AC00 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (CR) ÷ [0.3] -÷ AC00 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ AC00 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (LF) ÷ [0.3] -÷ AC00 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ AC00 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (Control) ÷ [0.3] -÷ AC00 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ AC00 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ AC00 × 0308 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ AC00 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ AC00 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC00 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC00 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC00 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC00 × 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ AC00 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ AC00 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ AC00 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ AC00 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ AC00 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ AC00 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ AC00 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ AC00 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ AC00 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ AC00 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ AC00 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ AC00 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ AC00 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ AC00 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] (Other) ÷ [0.3] -÷ AC00 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ AC01 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ AC01 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ AC01 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (CR) ÷ [0.3] -÷ AC01 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ AC01 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (LF) ÷ [0.3] -÷ AC01 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ AC01 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (Control) ÷ [0.3] -÷ AC01 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ AC01 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ AC01 × 0308 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ AC01 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ AC01 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC01 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC01 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC01 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC01 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ AC01 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ AC01 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ AC01 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ AC01 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ AC01 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ AC01 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ AC01 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ AC01 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ AC01 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ AC01 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ AC01 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ AC01 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ AC01 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ AC01 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] (Other) ÷ [0.3] -÷ AC01 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 231A ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 231A × 0308 ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 231A ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (CR) ÷ [0.3] -÷ 231A × 0308 ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 231A ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (LF) ÷ [0.3] -÷ 231A × 0308 ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 231A ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (Control) ÷ [0.3] -÷ 231A × 0308 ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 231A × 034F ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 231A × 0308 × 034F ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 231A ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 231A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 231A ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 231A × 0308 ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 231A × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 231A × 0308 × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 231A ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 231A × 0308 ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 231A ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 231A × 0308 ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 231A ÷ 11A8 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 231A × 0308 ÷ 11A8 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 231A ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 231A × 0308 ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 231A ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 231A × 0308 ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 231A ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 231A × 0308 ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 231A × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 231A × 0308 × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 231A × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 231A × 0308 × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 231A ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] (Other) ÷ [0.3] -÷ 231A × 0308 ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0300 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0300 × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0300 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0300 × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0300 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0300 × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0300 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0300 × 034F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0300 × 0308 × 034F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0300 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0300 × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0300 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0300 × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0300 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0300 × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0300 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0300 × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0300 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0300 × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0300 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0300 × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0300 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0300 × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0300 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 200D × 0308 ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 200D ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 200D × 0308 ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 200D ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 200D × 0308 ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 200D × 034F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 200D × 0308 × 034F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 200D ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 200D ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 200D × 0308 ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 200D ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 200D × 0308 ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 200D ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 200D × 0308 ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 200D ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 200D × 0308 ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 200D ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 200D × 0308 ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 200D ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 200D × 0308 ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 200D ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 200D × 0308 ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 200D ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 200D × 0308 ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 0378 ÷ 0020 ÷ # ÷ [0.2] (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0378 × 0308 ÷ 0020 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0378 ÷ 000D ÷ # ÷ [0.2] (Other) ÷ [5.0] (CR) ÷ [0.3] -÷ 0378 × 0308 ÷ 000D ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] -÷ 0378 ÷ 000A ÷ # ÷ [0.2] (Other) ÷ [5.0] (LF) ÷ [0.3] -÷ 0378 × 0308 ÷ 000A ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] -÷ 0378 ÷ 0001 ÷ # ÷ [0.2] (Other) ÷ [5.0] (Control) ÷ [0.3] -÷ 0378 × 0308 ÷ 0001 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] -÷ 0378 × 034F ÷ # ÷ [0.2] (Other) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0378 × 0308 × 034F ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0378 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0378 ÷ 0600 ÷ # ÷ [0.2] (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0378 × 0308 ÷ 0600 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0378 × 0903 ÷ # ÷ [0.2] (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0378 ÷ 1100 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0378 × 0308 ÷ 1100 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0378 ÷ 1160 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0378 × 0308 ÷ 1160 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0378 ÷ 11A8 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0378 × 0308 ÷ 11A8 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0378 ÷ AC00 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0378 ÷ AC01 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0378 × 0308 ÷ AC01 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0378 ÷ 231A ÷ # ÷ [0.2] (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0378 × 0308 ÷ 231A ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0378 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0378 × 200D ÷ # ÷ [0.2] (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0378 × 0308 × 200D ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0378 ÷ 0378 ÷ # ÷ [0.2] (Other) ÷ [999.0] (Other) ÷ [0.3] -÷ 0378 × 0308 ÷ 0378 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] -÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] (CR) × [3.0] (LF) ÷ [4.0] LATIN SMALL LETTER A (Other) ÷ [5.0] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [0.3] -÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [0.3] -÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC LETTER NOON (Other) ÷ [0.3] -÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC00 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ AC01 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 1F1E6 × 200D ÷ 1F1E7 × 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0061 × 0308 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] -÷ 0061 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] -÷ 0061 × 1F3FF ÷ 1F476 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] -÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [0.3] -÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] -÷ 0061 × 200D ÷ 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] -÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] -÷ 0061 × 200D ÷ 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] -# -# Lines: 602 -# -# EOF \ No newline at end of file +# GraphemeBreakTest-15.0.0.txt +# Date: 2022-02-26, 00:38:37 GMT +# © 2022 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see https://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see https://www.unicode.org/reports/tr44/ +# +# Default Grapheme_Cluster_Break Test +# +# Format: +# (# )? +# contains hex Unicode code points, with +# ÷ wherever there is a break opportunity, and +# × wherever there is not. +# the format can change, but currently it shows: +# - the sample character name +# - (x) the Grapheme_Cluster_Break property value for the sample character +# - [x] the rule that determines whether there is a break or not, +# as listed in the Rules section of GraphemeBreakTest.html +# +# These samples may be extended or changed in the future. +# +÷ 0020 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0020 × 0308 ÷ 0020 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0020 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (CR) ÷ [0.3] +÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0020 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (LF) ÷ [0.3] +÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0020 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] (Control) ÷ [0.3] +÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0020 × 034F ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0020 × 0308 × 034F ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0020 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0020 × 0308 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0020 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0020 × 0308 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0020 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0020 × 0308 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0020 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0020 × 0308 ÷ 11A8 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0020 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0020 × 0308 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0020 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0020 × 0308 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0020 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0020 × 0308 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0020 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] (Other) ÷ [0.3] +÷ 0020 × 0308 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 000D ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 000D ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] (CR) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 000D × 000A ÷ # ÷ [0.2] (CR) × [3.0] (LF) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 000D ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Control) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 000D ÷ 034F ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 000D ÷ 0308 × 034F ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 000D ÷ 0600 ÷ # ÷ [0.2] (CR) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 000D ÷ 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000D ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000D ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000D ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000D ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000D ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000D ÷ 231A ÷ # ÷ [0.2] (CR) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 000D ÷ 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 200D ÷ # ÷ [0.2] (CR) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] (Other) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 000A ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 000A ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] (CR) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 000A ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] (LF) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 000A ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Control) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 000A ÷ 034F ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 000A ÷ 0308 × 034F ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 000A ÷ 0600 ÷ # ÷ [0.2] (LF) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 000A ÷ 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 000A ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 000A ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 000A ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 000A ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000A ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000A ÷ 231A ÷ # ÷ [0.2] (LF) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 000A ÷ 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 200D ÷ # ÷ [0.2] (LF) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] (Other) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0001 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] SPACE (Other) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0001 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] (CR) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 000D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0001 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] (LF) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 000A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0001 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Control) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0001 ÷ 034F ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0001 ÷ 0308 × 034F ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0001 ÷ 0600 ÷ # ÷ [0.2] (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0001 ÷ 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0001 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 1160 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0001 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 11A8 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0001 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0001 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0001 ÷ 231A ÷ # ÷ [0.2] (Control) ÷ [4.0] WATCH (ExtPict) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 231A ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0001 ÷ 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 200D ÷ # ÷ [0.2] (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0308 × 200D ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] (Other) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 034F ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 034F × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 034F ÷ 000D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (CR) ÷ [0.3] +÷ 034F × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 034F ÷ 000A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (LF) ÷ [0.3] +÷ 034F × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 034F ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [5.0] (Control) ÷ [0.3] +÷ 034F × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 034F × 034F ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 034F × 0308 × 034F ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 034F ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 034F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 034F ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 034F × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 034F × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 034F × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 034F ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 034F × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 034F ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 034F × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 034F ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 034F × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 034F ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 034F × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 034F ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 034F × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 034F ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 034F × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 034F × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 034F × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 034F × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 034F × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 034F ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] (Other) ÷ [0.3] +÷ 034F × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 1F1E6 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (CR) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (LF) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] (Control) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 1F1E6 × 034F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1F1E6 × 0308 × 034F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1F1E6 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1F1E6 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1F1E6 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1F1E6 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1F1E6 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1F1E6 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1F1E6 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] (Other) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0600 × 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] SPACE (Other) ÷ [0.3] +÷ 0600 × 0308 ÷ 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0600 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (CR) ÷ [0.3] +÷ 0600 × 0308 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0600 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (LF) ÷ [0.3] +÷ 0600 × 0308 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0600 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] (Control) ÷ [0.3] +÷ 0600 × 0308 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0600 × 034F ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0600 × 0308 × 034F ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0600 × 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0600 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0600 × 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0600 × 0308 ÷ 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0600 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0600 × 0308 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0600 × 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0600 × 0308 ÷ 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0600 × 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0600 × 0308 ÷ 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0600 × 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0600 × 0308 ÷ 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0600 × AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0600 × 0308 ÷ AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0600 × AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0600 × 0308 ÷ AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0600 × 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] WATCH (ExtPict) ÷ [0.3] +÷ 0600 × 0308 ÷ 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0600 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0308 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0600 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0308 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] (Other) ÷ [0.3] +÷ 0600 × 0308 ÷ 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (CR) ÷ [0.3] +÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (LF) ÷ [0.3] +÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] (Control) ÷ [0.3] +÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0903 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0903 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0903 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0903 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0903 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0903 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0903 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0903 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0903 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0903 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0903 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0903 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] (Other) ÷ [0.3] +÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 1100 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1100 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1100 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (CR) ÷ [0.3] +÷ 1100 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 1100 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (LF) ÷ [0.3] +÷ 1100 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 1100 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] (Control) ÷ [0.3] +÷ 1100 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 1100 × 034F ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1100 × 0308 × 034F ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1100 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1100 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1100 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1100 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1100 × 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1100 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1100 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1100 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1100 × AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1100 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1100 × AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1100 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1100 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1100 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1100 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1100 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1100 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1100 × 0308 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1100 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] (Other) ÷ [0.3] +÷ 1100 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 1160 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1160 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1160 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (CR) ÷ [0.3] +÷ 1160 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 1160 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (LF) ÷ [0.3] +÷ 1160 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 1160 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] (Control) ÷ [0.3] +÷ 1160 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 1160 × 034F ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1160 × 0308 × 034F ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 1160 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 1160 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1160 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1160 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1160 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1160 × 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1160 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 1160 × 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1160 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 1160 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1160 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 1160 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1160 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1160 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1160 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 1160 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1160 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1160 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1160 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 1160 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] (Other) ÷ [0.3] +÷ 1160 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 11A8 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 11A8 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (CR) ÷ [0.3] +÷ 11A8 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 11A8 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (LF) ÷ [0.3] +÷ 11A8 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 11A8 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] (Control) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 11A8 × 034F ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 11A8 × 0308 × 034F ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 11A8 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 11A8 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 11A8 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 11A8 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 11A8 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 11A8 × 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 11A8 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 11A8 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 11A8 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 11A8 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 11A8 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 11A8 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 11A8 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 11A8 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 11A8 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] (Other) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ AC00 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ AC00 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ AC00 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (CR) ÷ [0.3] +÷ AC00 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ AC00 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (LF) ÷ [0.3] +÷ AC00 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ AC00 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] (Control) ÷ [0.3] +÷ AC00 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ AC00 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ AC00 × 0308 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ AC00 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ AC00 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ AC00 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC00 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC00 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC00 × 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ AC00 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ AC00 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ AC00 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ AC00 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ AC00 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ AC00 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC00 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC00 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ AC00 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ AC00 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC00 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC00 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ AC00 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ AC00 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] (Other) ÷ [0.3] +÷ AC00 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ AC01 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ AC01 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ AC01 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (CR) ÷ [0.3] +÷ AC01 × 0308 ÷ 000D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ AC01 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (LF) ÷ [0.3] +÷ AC01 × 0308 ÷ 000A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ AC01 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] (Control) ÷ [0.3] +÷ AC01 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ AC01 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ AC01 × 0308 × 034F ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ AC01 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ AC01 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ AC01 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC01 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC01 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC01 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ AC01 × 0308 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ AC01 × 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ AC01 × 0308 ÷ 11A8 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ AC01 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ AC01 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ AC01 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC01 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC01 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ AC01 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ AC01 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC01 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC01 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ AC01 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ AC01 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] (Other) ÷ [0.3] +÷ AC01 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 231A ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 231A × 0308 ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 231A ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (CR) ÷ [0.3] +÷ 231A × 0308 ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 231A ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (LF) ÷ [0.3] +÷ 231A × 0308 ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 231A ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] (Control) ÷ [0.3] +÷ 231A × 0308 ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 231A × 034F ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 231A × 0308 × 034F ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 231A ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 231A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 231A ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 231A × 0308 ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 231A × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 231A × 0308 × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 231A ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 231A × 0308 ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 231A ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 231A × 0308 ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 231A ÷ 11A8 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 231A × 0308 ÷ 11A8 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 231A ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 231A × 0308 ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 231A ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 231A × 0308 ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 231A ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 231A × 0308 ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 231A × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 231A × 0308 × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 231A × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 231A × 0308 × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 231A ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] (Other) ÷ [0.3] +÷ 231A × 0308 ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0300 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0300 × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0300 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0300 × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0300 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0300 × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0300 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0300 × 034F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0300 × 0308 × 034F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0300 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0300 × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0300 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0300 × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0300 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0300 × 0308 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0300 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0300 × 0308 ÷ 11A8 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0300 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0300 × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0300 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0300 × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0300 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0300 × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0300 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 200D × 0308 ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 200D ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 200D × 0308 ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 200D ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 200D × 0308 ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 200D × 034F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 200D × 0308 × 034F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 200D ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 200D ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 200D × 0308 ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 200D ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 200D × 0308 ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 200D ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 200D × 0308 ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 200D ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 200D × 0308 ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 200D ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 200D × 0308 ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 200D ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 200D × 0308 ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 200D ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 200D × 0308 ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 200D ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 200D × 0308 ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 0378 ÷ 0020 ÷ # ÷ [0.2] (Other) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0378 × 0308 ÷ 0020 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0378 ÷ 000D ÷ # ÷ [0.2] (Other) ÷ [5.0] (CR) ÷ [0.3] +÷ 0378 × 0308 ÷ 000D ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (CR) ÷ [0.3] +÷ 0378 ÷ 000A ÷ # ÷ [0.2] (Other) ÷ [5.0] (LF) ÷ [0.3] +÷ 0378 × 0308 ÷ 000A ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (LF) ÷ [0.3] +÷ 0378 ÷ 0001 ÷ # ÷ [0.2] (Other) ÷ [5.0] (Control) ÷ [0.3] +÷ 0378 × 0308 ÷ 0001 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] (Control) ÷ [0.3] +÷ 0378 × 034F ÷ # ÷ [0.2] (Other) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0378 × 0308 × 034F ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0378 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0378 ÷ 0600 ÷ # ÷ [0.2] (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0378 × 0308 ÷ 0600 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0378 × 0903 ÷ # ÷ [0.2] (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 ÷ 1100 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0378 × 0308 ÷ 1100 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0378 ÷ 1160 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0378 × 0308 ÷ 1160 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0378 ÷ 11A8 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0378 × 0308 ÷ 11A8 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0378 ÷ AC00 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0378 ÷ AC01 ÷ # ÷ [0.2] (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0378 × 0308 ÷ AC01 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0378 ÷ 231A ÷ # ÷ [0.2] (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0378 × 0308 ÷ 231A ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0378 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0378 × 200D ÷ # ÷ [0.2] (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0378 × 0308 × 200D ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0378 ÷ 0378 ÷ # ÷ [0.2] (Other) ÷ [999.0] (Other) ÷ [0.3] +÷ 0378 × 0308 ÷ 0378 ÷ # ÷ [0.2] (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] (Other) ÷ [0.3] +÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] (CR) × [3.0] (LF) ÷ [4.0] LATIN SMALL LETTER A (Other) ÷ [5.0] (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [0.3] +÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [0.3] +÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC LETTER NOON (Other) ÷ [0.3] +÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC00 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ AC01 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 1F1E6 × 200D ÷ 1F1E7 × 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0061 × 0308 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] +÷ 0061 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] +÷ 0061 × 1F3FF ÷ 1F476 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] +÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [0.3] +÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] +÷ 0061 × 200D ÷ 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3] +÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] +÷ 0061 × 200D ÷ 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] +# +# Lines: 602 +# +# EOF diff --git a/pkgs/characters/third_party/Unicode_Consortium/UNICODE_LICENSE.txt b/pkgs/characters/third_party/Unicode_Consortium/UNICODE_LICENSE.txt index b8eac400..e216c7f3 100644 --- a/pkgs/characters/third_party/Unicode_Consortium/UNICODE_LICENSE.txt +++ b/pkgs/characters/third_party/Unicode_Consortium/UNICODE_LICENSE.txt @@ -1,7 +1,20 @@ +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +See Terms of Use +for definitions of Unicode Inc.’s Data Files and Software. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + COPYRIGHT AND PERMISSION NOTICE -Copyright © 1991-2018 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. +Copyright © 1991-2023 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation diff --git a/pkgs/characters/third_party/Unicode_Consortium/emoji_data.txt b/pkgs/characters/third_party/Unicode_Consortium/emoji_data.txt index 27bb7156..999a4367 100644 --- a/pkgs/characters/third_party/Unicode_Consortium/emoji_data.txt +++ b/pkgs/characters/third_party/Unicode_Consortium/emoji_data.txt @@ -1,769 +1,1320 @@ -# emoji-data.txt -# Date: 2019-01-15, 12:10:05 GMT -# © 2019 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# -# Emoji Data for UTS #51 -# Version: 12.0 -# -# For documentation and usage, see http://www.unicode.org/reports/tr51 -# -# Format: -# ; # -# Note: there is no guarantee as to the structure of whitespace or comments -# -# Characters and sequences are listed in code point order. Users should be shown a more natural order. -# See the CLDR collation order for Emoji. - - -# ================================================ - -# All omitted code points have Emoji=No -# @missing: 0000..10FFFF ; Emoji ; No - -0023 ; Emoji # 1.1 [1] (#️) number sign -002A ; Emoji # 1.1 [1] (*️) asterisk -0030..0039 ; Emoji # 1.1 [10] (0️..9️) digit zero..digit nine -00A9 ; Emoji # 1.1 [1] (©️) copyright -00AE ; Emoji # 1.1 [1] (®️) registered -203C ; Emoji # 1.1 [1] (‼️) double exclamation mark -2049 ; Emoji # 3.0 [1] (⁉️) exclamation question mark -2122 ; Emoji # 1.1 [1] (™️) trade mark -2139 ; Emoji # 3.0 [1] (ℹ️) information -2194..2199 ; Emoji # 1.1 [6] (↔️..↙️) left-right arrow..down-left arrow -21A9..21AA ; Emoji # 1.1 [2] (↩️..↪️) right arrow curving left..left arrow curving right -231A..231B ; Emoji # 1.1 [2] (⌚..⌛) watch..hourglass done -2328 ; Emoji # 1.1 [1] (⌨️) keyboard -23CF ; Emoji # 4.0 [1] (⏏️) eject button -23E9..23F3 ; Emoji # 6.0 [11] (⏩..⏳) fast-forward button..hourglass not done -23F8..23FA ; Emoji # 7.0 [3] (⏸️..⏺️) pause button..record button -24C2 ; Emoji # 1.1 [1] (Ⓜ️) circled M -25AA..25AB ; Emoji # 1.1 [2] (▪️..▫️) black small square..white small square -25B6 ; Emoji # 1.1 [1] (▶️) play button -25C0 ; Emoji # 1.1 [1] (◀️) reverse button -25FB..25FE ; Emoji # 3.2 [4] (◻️..◾) white medium square..black medium-small square -2600..2604 ; Emoji # 1.1 [5] (☀️..☄️) sun..comet -260E ; Emoji # 1.1 [1] (☎️) telephone -2611 ; Emoji # 1.1 [1] (☑️) check box with check -2614..2615 ; Emoji # 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage -2618 ; Emoji # 4.1 [1] (☘️) shamrock -261D ; Emoji # 1.1 [1] (☝️) index pointing up -2620 ; Emoji # 1.1 [1] (☠️) skull and crossbones -2622..2623 ; Emoji # 1.1 [2] (☢️..☣️) radioactive..biohazard -2626 ; Emoji # 1.1 [1] (☦️) orthodox cross -262A ; Emoji # 1.1 [1] (☪️) star and crescent -262E..262F ; Emoji # 1.1 [2] (☮️..☯️) peace symbol..yin yang -2638..263A ; Emoji # 1.1 [3] (☸️..☺️) wheel of dharma..smiling face -2640 ; Emoji # 1.1 [1] (♀️) female sign -2642 ; Emoji # 1.1 [1] (♂️) male sign -2648..2653 ; Emoji # 1.1 [12] (♈..♓) Aries..Pisces -265F..2660 ; Emoji # 1.1 [2] (♟️..♠️) chess pawn..spade suit -2663 ; Emoji # 1.1 [1] (♣️) club suit -2665..2666 ; Emoji # 1.1 [2] (♥️..♦️) heart suit..diamond suit -2668 ; Emoji # 1.1 [1] (♨️) hot springs -267B ; Emoji # 3.2 [1] (♻️) recycling symbol -267E..267F ; Emoji # 4.1 [2] (♾️..♿) infinity..wheelchair symbol -2692..2697 ; Emoji # 4.1 [6] (⚒️..⚗️) hammer and pick..alembic -2699 ; Emoji # 4.1 [1] (⚙️) gear -269B..269C ; Emoji # 4.1 [2] (⚛️..⚜️) atom symbol..fleur-de-lis -26A0..26A1 ; Emoji # 4.0 [2] (⚠️..⚡) warning..high voltage -26AA..26AB ; Emoji # 4.1 [2] (⚪..⚫) white circle..black circle -26B0..26B1 ; Emoji # 4.1 [2] (⚰️..⚱️) coffin..funeral urn -26BD..26BE ; Emoji # 5.2 [2] (⚽..⚾) soccer ball..baseball -26C4..26C5 ; Emoji # 5.2 [2] (⛄..⛅) snowman without snow..sun behind cloud -26C8 ; Emoji # 5.2 [1] (⛈️) cloud with lightning and rain -26CE ; Emoji # 6.0 [1] (⛎) Ophiuchus -26CF ; Emoji # 5.2 [1] (⛏️) pick -26D1 ; Emoji # 5.2 [1] (⛑️) rescue worker’s helmet -26D3..26D4 ; Emoji # 5.2 [2] (⛓️..⛔) chains..no entry -26E9..26EA ; Emoji # 5.2 [2] (⛩️..⛪) shinto shrine..church -26F0..26F5 ; Emoji # 5.2 [6] (⛰️..⛵) mountain..sailboat -26F7..26FA ; Emoji # 5.2 [4] (⛷️..⛺) skier..tent -26FD ; Emoji # 5.2 [1] (⛽) fuel pump -2702 ; Emoji # 1.1 [1] (✂️) scissors -2705 ; Emoji # 6.0 [1] (✅) check mark button -2708..2709 ; Emoji # 1.1 [2] (✈️..✉️) airplane..envelope -270A..270B ; Emoji # 6.0 [2] (✊..✋) raised fist..raised hand -270C..270D ; Emoji # 1.1 [2] (✌️..✍️) victory hand..writing hand -270F ; Emoji # 1.1 [1] (✏️) pencil -2712 ; Emoji # 1.1 [1] (✒️) black nib -2714 ; Emoji # 1.1 [1] (✔️) check mark -2716 ; Emoji # 1.1 [1] (✖️) multiplication sign -271D ; Emoji # 1.1 [1] (✝️) latin cross -2721 ; Emoji # 1.1 [1] (✡️) star of David -2728 ; Emoji # 6.0 [1] (✨) sparkles -2733..2734 ; Emoji # 1.1 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star -2744 ; Emoji # 1.1 [1] (❄️) snowflake -2747 ; Emoji # 1.1 [1] (❇️) sparkle -274C ; Emoji # 6.0 [1] (❌) cross mark -274E ; Emoji # 6.0 [1] (❎) cross mark button -2753..2755 ; Emoji # 6.0 [3] (❓..❕) question mark..white exclamation mark -2757 ; Emoji # 5.2 [1] (❗) exclamation mark -2763..2764 ; Emoji # 1.1 [2] (❣️..❤️) heart exclamation..red heart -2795..2797 ; Emoji # 6.0 [3] (➕..➗) plus sign..division sign -27A1 ; Emoji # 1.1 [1] (➡️) right arrow -27B0 ; Emoji # 6.0 [1] (➰) curly loop -27BF ; Emoji # 6.0 [1] (➿) double curly loop -2934..2935 ; Emoji # 3.2 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down -2B05..2B07 ; Emoji # 4.0 [3] (⬅️..⬇️) left arrow..down arrow -2B1B..2B1C ; Emoji # 5.1 [2] (⬛..⬜) black large square..white large square -2B50 ; Emoji # 5.1 [1] (⭐) star -2B55 ; Emoji # 5.2 [1] (⭕) hollow red circle -3030 ; Emoji # 1.1 [1] (〰️) wavy dash -303D ; Emoji # 3.2 [1] (〽️) part alternation mark -3297 ; Emoji # 1.1 [1] (㊗️) Japanese “congratulations” button -3299 ; Emoji # 1.1 [1] (㊙️) Japanese “secret” button -1F004 ; Emoji # 5.1 [1] (🀄) mahjong red dragon -1F0CF ; Emoji # 6.0 [1] (🃏) joker -1F170..1F171 ; Emoji # 6.0 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) -1F17E ; Emoji # 6.0 [1] (🅾️) O button (blood type) -1F17F ; Emoji # 5.2 [1] (🅿️) P button -1F18E ; Emoji # 6.0 [1] (🆎) AB button (blood type) -1F191..1F19A ; Emoji # 6.0 [10] (🆑..🆚) CL button..VS button -1F1E6..1F1FF ; Emoji # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z -1F201..1F202 ; Emoji # 6.0 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button -1F21A ; Emoji # 5.2 [1] (🈚) Japanese “free of charge” button -1F22F ; Emoji # 5.2 [1] (🈯) Japanese “reserved” button -1F232..1F23A ; Emoji # 6.0 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button -1F250..1F251 ; Emoji # 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button -1F300..1F320 ; Emoji # 6.0 [33] (🌀..🌠) cyclone..shooting star -1F321 ; Emoji # 7.0 [1] (🌡️) thermometer -1F324..1F32C ; Emoji # 7.0 [9] (🌤️..🌬️) sun behind small cloud..wind face -1F32D..1F32F ; Emoji # 8.0 [3] (🌭..🌯) hot dog..burrito -1F330..1F335 ; Emoji # 6.0 [6] (🌰..🌵) chestnut..cactus -1F336 ; Emoji # 7.0 [1] (🌶️) hot pepper -1F337..1F37C ; Emoji # 6.0 [70] (🌷..🍼) tulip..baby bottle -1F37D ; Emoji # 7.0 [1] (🍽️) fork and knife with plate -1F37E..1F37F ; Emoji # 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn -1F380..1F393 ; Emoji # 6.0 [20] (🎀..🎓) ribbon..graduation cap -1F396..1F397 ; Emoji # 7.0 [2] (🎖️..🎗️) military medal..reminder ribbon -1F399..1F39B ; Emoji # 7.0 [3] (🎙️..🎛️) studio microphone..control knobs -1F39E..1F39F ; Emoji # 7.0 [2] (🎞️..🎟️) film frames..admission tickets -1F3A0..1F3C4 ; Emoji # 6.0 [37] (🎠..🏄) carousel horse..person surfing -1F3C5 ; Emoji # 7.0 [1] (🏅) sports medal -1F3C6..1F3CA ; Emoji # 6.0 [5] (🏆..🏊) trophy..person swimming -1F3CB..1F3CE ; Emoji # 7.0 [4] (🏋️..🏎️) person lifting weights..racing car -1F3CF..1F3D3 ; Emoji # 8.0 [5] (🏏..🏓) cricket game..ping pong -1F3D4..1F3DF ; Emoji # 7.0 [12] (🏔️..🏟️) snow-capped mountain..stadium -1F3E0..1F3F0 ; Emoji # 6.0 [17] (🏠..🏰) house..castle -1F3F3..1F3F5 ; Emoji # 7.0 [3] (🏳️..🏵️) white flag..rosette -1F3F7 ; Emoji # 7.0 [1] (🏷️) label -1F3F8..1F3FF ; Emoji # 8.0 [8] (🏸..🏿) badminton..dark skin tone -1F400..1F43E ; Emoji # 6.0 [63] (🐀..🐾) rat..paw prints -1F43F ; Emoji # 7.0 [1] (🐿️) chipmunk -1F440 ; Emoji # 6.0 [1] (👀) eyes -1F441 ; Emoji # 7.0 [1] (👁️) eye -1F442..1F4F7 ; Emoji # 6.0[182] (👂..📷) ear..camera -1F4F8 ; Emoji # 7.0 [1] (📸) camera with flash -1F4F9..1F4FC ; Emoji # 6.0 [4] (📹..📼) video camera..videocassette -1F4FD ; Emoji # 7.0 [1] (📽️) film projector -1F4FF ; Emoji # 8.0 [1] (📿) prayer beads -1F500..1F53D ; Emoji # 6.0 [62] (🔀..🔽) shuffle tracks button..downwards button -1F549..1F54A ; Emoji # 7.0 [2] (🕉️..🕊️) om..dove -1F54B..1F54E ; Emoji # 8.0 [4] (🕋..🕎) kaaba..menorah -1F550..1F567 ; Emoji # 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty -1F56F..1F570 ; Emoji # 7.0 [2] (🕯️..🕰️) candle..mantelpiece clock -1F573..1F579 ; Emoji # 7.0 [7] (🕳️..🕹️) hole..joystick -1F57A ; Emoji # 9.0 [1] (🕺) man dancing -1F587 ; Emoji # 7.0 [1] (🖇️) linked paperclips -1F58A..1F58D ; Emoji # 7.0 [4] (🖊️..🖍️) pen..crayon -1F590 ; Emoji # 7.0 [1] (🖐️) hand with fingers splayed -1F595..1F596 ; Emoji # 7.0 [2] (🖕..🖖) middle finger..vulcan salute -1F5A4 ; Emoji # 9.0 [1] (🖤) black heart -1F5A5 ; Emoji # 7.0 [1] (🖥️) desktop computer -1F5A8 ; Emoji # 7.0 [1] (🖨️) printer -1F5B1..1F5B2 ; Emoji # 7.0 [2] (🖱️..🖲️) computer mouse..trackball -1F5BC ; Emoji # 7.0 [1] (🖼️) framed picture -1F5C2..1F5C4 ; Emoji # 7.0 [3] (🗂️..🗄️) card index dividers..file cabinet -1F5D1..1F5D3 ; Emoji # 7.0 [3] (🗑️..🗓️) wastebasket..spiral calendar -1F5DC..1F5DE ; Emoji # 7.0 [3] (🗜️..🗞️) clamp..rolled-up newspaper -1F5E1 ; Emoji # 7.0 [1] (🗡️) dagger -1F5E3 ; Emoji # 7.0 [1] (🗣️) speaking head -1F5E8 ; Emoji # 7.0 [1] (🗨️) left speech bubble -1F5EF ; Emoji # 7.0 [1] (🗯️) right anger bubble -1F5F3 ; Emoji # 7.0 [1] (🗳️) ballot box with ballot -1F5FA ; Emoji # 7.0 [1] (🗺️) world map -1F5FB..1F5FF ; Emoji # 6.0 [5] (🗻..🗿) mount fuji..moai -1F600 ; Emoji # 6.1 [1] (😀) grinning face -1F601..1F610 ; Emoji # 6.0 [16] (😁..😐) beaming face with smiling eyes..neutral face -1F611 ; Emoji # 6.1 [1] (😑) expressionless face -1F612..1F614 ; Emoji # 6.0 [3] (😒..😔) unamused face..pensive face -1F615 ; Emoji # 6.1 [1] (😕) confused face -1F616 ; Emoji # 6.0 [1] (😖) confounded face -1F617 ; Emoji # 6.1 [1] (😗) kissing face -1F618 ; Emoji # 6.0 [1] (😘) face blowing a kiss -1F619 ; Emoji # 6.1 [1] (😙) kissing face with smiling eyes -1F61A ; Emoji # 6.0 [1] (😚) kissing face with closed eyes -1F61B ; Emoji # 6.1 [1] (😛) face with tongue -1F61C..1F61E ; Emoji # 6.0 [3] (😜..😞) winking face with tongue..disappointed face -1F61F ; Emoji # 6.1 [1] (😟) worried face -1F620..1F625 ; Emoji # 6.0 [6] (😠..😥) angry face..sad but relieved face -1F626..1F627 ; Emoji # 6.1 [2] (😦..😧) frowning face with open mouth..anguished face -1F628..1F62B ; Emoji # 6.0 [4] (😨..😫) fearful face..tired face -1F62C ; Emoji # 6.1 [1] (😬) grimacing face -1F62D ; Emoji # 6.0 [1] (😭) loudly crying face -1F62E..1F62F ; Emoji # 6.1 [2] (😮..😯) face with open mouth..hushed face -1F630..1F633 ; Emoji # 6.0 [4] (😰..😳) anxious face with sweat..flushed face -1F634 ; Emoji # 6.1 [1] (😴) sleeping face -1F635..1F640 ; Emoji # 6.0 [12] (😵..🙀) dizzy face..weary cat -1F641..1F642 ; Emoji # 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face -1F643..1F644 ; Emoji # 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes -1F645..1F64F ; Emoji # 6.0 [11] (🙅..🙏) person gesturing NO..folded hands -1F680..1F6C5 ; Emoji # 6.0 [70] (🚀..🛅) rocket..left luggage -1F6CB..1F6CF ; Emoji # 7.0 [5] (🛋️..🛏️) couch and lamp..bed -1F6D0 ; Emoji # 8.0 [1] (🛐) place of worship -1F6D1..1F6D2 ; Emoji # 9.0 [2] (🛑..🛒) stop sign..shopping cart -1F6D5 ; Emoji # 12.0 [1] (🛕) hindu temple -1F6E0..1F6E5 ; Emoji # 7.0 [6] (🛠️..🛥️) hammer and wrench..motor boat -1F6E9 ; Emoji # 7.0 [1] (🛩️) small airplane -1F6EB..1F6EC ; Emoji # 7.0 [2] (🛫..🛬) airplane departure..airplane arrival -1F6F0 ; Emoji # 7.0 [1] (🛰️) satellite -1F6F3 ; Emoji # 7.0 [1] (🛳️) passenger ship -1F6F4..1F6F6 ; Emoji # 9.0 [3] (🛴..🛶) kick scooter..canoe -1F6F7..1F6F8 ; Emoji # 10.0 [2] (🛷..🛸) sled..flying saucer -1F6F9 ; Emoji # 11.0 [1] (🛹) skateboard -1F6FA ; Emoji # 12.0 [1] (🛺) auto rickshaw -1F7E0..1F7EB ; Emoji # 12.0 [12] (🟠..🟫) orange circle..brown square -1F90D..1F90F ; Emoji # 12.0 [3] (🤍..🤏) white heart..pinching hand -1F910..1F918 ; Emoji # 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns -1F919..1F91E ; Emoji # 9.0 [6] (🤙..🤞) call me hand..crossed fingers -1F91F ; Emoji # 10.0 [1] (🤟) love-you gesture -1F920..1F927 ; Emoji # 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face -1F928..1F92F ; Emoji # 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head -1F930 ; Emoji # 9.0 [1] (🤰) pregnant woman -1F931..1F932 ; Emoji # 10.0 [2] (🤱..🤲) breast-feeding..palms up together -1F933..1F93A ; Emoji # 9.0 [8] (🤳..🤺) selfie..person fencing -1F93C..1F93E ; Emoji # 9.0 [3] (🤼..🤾) people wrestling..person playing handball -1F93F ; Emoji # 12.0 [1] (🤿) diving mask -1F940..1F945 ; Emoji # 9.0 [6] (🥀..🥅) wilted flower..goal net -1F947..1F94B ; Emoji # 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform -1F94C ; Emoji # 10.0 [1] (🥌) curling stone -1F94D..1F94F ; Emoji # 11.0 [3] (🥍..🥏) lacrosse..flying disc -1F950..1F95E ; Emoji # 9.0 [15] (🥐..🥞) croissant..pancakes -1F95F..1F96B ; Emoji # 10.0 [13] (🥟..🥫) dumpling..canned food -1F96C..1F970 ; Emoji # 11.0 [5] (🥬..🥰) leafy green..smiling face with hearts -1F971 ; Emoji # 12.0 [1] (🥱) yawning face -1F973..1F976 ; Emoji # 11.0 [4] (🥳..🥶) partying face..cold face -1F97A ; Emoji # 11.0 [1] (🥺) pleading face -1F97B ; Emoji # 12.0 [1] (🥻) sari -1F97C..1F97F ; Emoji # 11.0 [4] (🥼..🥿) lab coat..flat shoe -1F980..1F984 ; Emoji # 8.0 [5] (🦀..🦄) crab..unicorn -1F985..1F991 ; Emoji # 9.0 [13] (🦅..🦑) eagle..squid -1F992..1F997 ; Emoji # 10.0 [6] (🦒..🦗) giraffe..cricket -1F998..1F9A2 ; Emoji # 11.0 [11] (🦘..🦢) kangaroo..swan -1F9A5..1F9AA ; Emoji # 12.0 [6] (🦥..🦪) sloth..oyster -1F9AE..1F9AF ; Emoji # 12.0 [2] (🦮..🦯) guide dog..probing cane -1F9B0..1F9B9 ; Emoji # 11.0 [10] (🦰..🦹) red hair..supervillain -1F9BA..1F9BF ; Emoji # 12.0 [6] (🦺..🦿) safety vest..mechanical leg -1F9C0 ; Emoji # 8.0 [1] (🧀) cheese wedge -1F9C1..1F9C2 ; Emoji # 11.0 [2] (🧁..🧂) cupcake..salt -1F9C3..1F9CA ; Emoji # 12.0 [8] (🧃..🧊) beverage box..ice cube -1F9CD..1F9CF ; Emoji # 12.0 [3] (🧍..🧏) person standing..deaf person -1F9D0..1F9E6 ; Emoji # 10.0 [23] (🧐..🧦) face with monocle..socks -1F9E7..1F9FF ; Emoji # 11.0 [25] (🧧..🧿) red envelope..nazar amulet -1FA70..1FA73 ; Emoji # 12.0 [4] (🩰..🩳) ballet shoes..shorts -1FA78..1FA7A ; Emoji # 12.0 [3] (🩸..🩺) drop of blood..stethoscope -1FA80..1FA82 ; Emoji # 12.0 [3] (🪀..🪂) yo-yo..parachute -1FA90..1FA95 ; Emoji # 12.0 [6] (🪐..🪕) ringed planet..banjo - -# Total elements: 1311 - -# ================================================ - -# All omitted code points have Emoji_Presentation=No -# @missing: 0000..10FFFF ; Emoji_Presentation ; No - -231A..231B ; Emoji_Presentation # 1.1 [2] (⌚..⌛) watch..hourglass done -23E9..23EC ; Emoji_Presentation # 6.0 [4] (⏩..⏬) fast-forward button..fast down button -23F0 ; Emoji_Presentation # 6.0 [1] (⏰) alarm clock -23F3 ; Emoji_Presentation # 6.0 [1] (⏳) hourglass not done -25FD..25FE ; Emoji_Presentation # 3.2 [2] (◽..◾) white medium-small square..black medium-small square -2614..2615 ; Emoji_Presentation # 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage -2648..2653 ; Emoji_Presentation # 1.1 [12] (♈..♓) Aries..Pisces -267F ; Emoji_Presentation # 4.1 [1] (♿) wheelchair symbol -2693 ; Emoji_Presentation # 4.1 [1] (⚓) anchor -26A1 ; Emoji_Presentation # 4.0 [1] (⚡) high voltage -26AA..26AB ; Emoji_Presentation # 4.1 [2] (⚪..⚫) white circle..black circle -26BD..26BE ; Emoji_Presentation # 5.2 [2] (⚽..⚾) soccer ball..baseball -26C4..26C5 ; Emoji_Presentation # 5.2 [2] (⛄..⛅) snowman without snow..sun behind cloud -26CE ; Emoji_Presentation # 6.0 [1] (⛎) Ophiuchus -26D4 ; Emoji_Presentation # 5.2 [1] (⛔) no entry -26EA ; Emoji_Presentation # 5.2 [1] (⛪) church -26F2..26F3 ; Emoji_Presentation # 5.2 [2] (⛲..⛳) fountain..flag in hole -26F5 ; Emoji_Presentation # 5.2 [1] (⛵) sailboat -26FA ; Emoji_Presentation # 5.2 [1] (⛺) tent -26FD ; Emoji_Presentation # 5.2 [1] (⛽) fuel pump -2705 ; Emoji_Presentation # 6.0 [1] (✅) check mark button -270A..270B ; Emoji_Presentation # 6.0 [2] (✊..✋) raised fist..raised hand -2728 ; Emoji_Presentation # 6.0 [1] (✨) sparkles -274C ; Emoji_Presentation # 6.0 [1] (❌) cross mark -274E ; Emoji_Presentation # 6.0 [1] (❎) cross mark button -2753..2755 ; Emoji_Presentation # 6.0 [3] (❓..❕) question mark..white exclamation mark -2757 ; Emoji_Presentation # 5.2 [1] (❗) exclamation mark -2795..2797 ; Emoji_Presentation # 6.0 [3] (➕..➗) plus sign..division sign -27B0 ; Emoji_Presentation # 6.0 [1] (➰) curly loop -27BF ; Emoji_Presentation # 6.0 [1] (➿) double curly loop -2B1B..2B1C ; Emoji_Presentation # 5.1 [2] (⬛..⬜) black large square..white large square -2B50 ; Emoji_Presentation # 5.1 [1] (⭐) star -2B55 ; Emoji_Presentation # 5.2 [1] (⭕) hollow red circle -1F004 ; Emoji_Presentation # 5.1 [1] (🀄) mahjong red dragon -1F0CF ; Emoji_Presentation # 6.0 [1] (🃏) joker -1F18E ; Emoji_Presentation # 6.0 [1] (🆎) AB button (blood type) -1F191..1F19A ; Emoji_Presentation # 6.0 [10] (🆑..🆚) CL button..VS button -1F1E6..1F1FF ; Emoji_Presentation # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z -1F201 ; Emoji_Presentation # 6.0 [1] (🈁) Japanese “here” button -1F21A ; Emoji_Presentation # 5.2 [1] (🈚) Japanese “free of charge” button -1F22F ; Emoji_Presentation # 5.2 [1] (🈯) Japanese “reserved” button -1F232..1F236 ; Emoji_Presentation # 6.0 [5] (🈲..🈶) Japanese “prohibited” button..Japanese “not free of charge” button -1F238..1F23A ; Emoji_Presentation # 6.0 [3] (🈸..🈺) Japanese “application” button..Japanese “open for business” button -1F250..1F251 ; Emoji_Presentation # 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button -1F300..1F320 ; Emoji_Presentation # 6.0 [33] (🌀..🌠) cyclone..shooting star -1F32D..1F32F ; Emoji_Presentation # 8.0 [3] (🌭..🌯) hot dog..burrito -1F330..1F335 ; Emoji_Presentation # 6.0 [6] (🌰..🌵) chestnut..cactus -1F337..1F37C ; Emoji_Presentation # 6.0 [70] (🌷..🍼) tulip..baby bottle -1F37E..1F37F ; Emoji_Presentation # 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn -1F380..1F393 ; Emoji_Presentation # 6.0 [20] (🎀..🎓) ribbon..graduation cap -1F3A0..1F3C4 ; Emoji_Presentation # 6.0 [37] (🎠..🏄) carousel horse..person surfing -1F3C5 ; Emoji_Presentation # 7.0 [1] (🏅) sports medal -1F3C6..1F3CA ; Emoji_Presentation # 6.0 [5] (🏆..🏊) trophy..person swimming -1F3CF..1F3D3 ; Emoji_Presentation # 8.0 [5] (🏏..🏓) cricket game..ping pong -1F3E0..1F3F0 ; Emoji_Presentation # 6.0 [17] (🏠..🏰) house..castle -1F3F4 ; Emoji_Presentation # 7.0 [1] (🏴) black flag -1F3F8..1F3FF ; Emoji_Presentation # 8.0 [8] (🏸..🏿) badminton..dark skin tone -1F400..1F43E ; Emoji_Presentation # 6.0 [63] (🐀..🐾) rat..paw prints -1F440 ; Emoji_Presentation # 6.0 [1] (👀) eyes -1F442..1F4F7 ; Emoji_Presentation # 6.0[182] (👂..📷) ear..camera -1F4F8 ; Emoji_Presentation # 7.0 [1] (📸) camera with flash -1F4F9..1F4FC ; Emoji_Presentation # 6.0 [4] (📹..📼) video camera..videocassette -1F4FF ; Emoji_Presentation # 8.0 [1] (📿) prayer beads -1F500..1F53D ; Emoji_Presentation # 6.0 [62] (🔀..🔽) shuffle tracks button..downwards button -1F54B..1F54E ; Emoji_Presentation # 8.0 [4] (🕋..🕎) kaaba..menorah -1F550..1F567 ; Emoji_Presentation # 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty -1F57A ; Emoji_Presentation # 9.0 [1] (🕺) man dancing -1F595..1F596 ; Emoji_Presentation # 7.0 [2] (🖕..🖖) middle finger..vulcan salute -1F5A4 ; Emoji_Presentation # 9.0 [1] (🖤) black heart -1F5FB..1F5FF ; Emoji_Presentation # 6.0 [5] (🗻..🗿) mount fuji..moai -1F600 ; Emoji_Presentation # 6.1 [1] (😀) grinning face -1F601..1F610 ; Emoji_Presentation # 6.0 [16] (😁..😐) beaming face with smiling eyes..neutral face -1F611 ; Emoji_Presentation # 6.1 [1] (😑) expressionless face -1F612..1F614 ; Emoji_Presentation # 6.0 [3] (😒..😔) unamused face..pensive face -1F615 ; Emoji_Presentation # 6.1 [1] (😕) confused face -1F616 ; Emoji_Presentation # 6.0 [1] (😖) confounded face -1F617 ; Emoji_Presentation # 6.1 [1] (😗) kissing face -1F618 ; Emoji_Presentation # 6.0 [1] (😘) face blowing a kiss -1F619 ; Emoji_Presentation # 6.1 [1] (😙) kissing face with smiling eyes -1F61A ; Emoji_Presentation # 6.0 [1] (😚) kissing face with closed eyes -1F61B ; Emoji_Presentation # 6.1 [1] (😛) face with tongue -1F61C..1F61E ; Emoji_Presentation # 6.0 [3] (😜..😞) winking face with tongue..disappointed face -1F61F ; Emoji_Presentation # 6.1 [1] (😟) worried face -1F620..1F625 ; Emoji_Presentation # 6.0 [6] (😠..😥) angry face..sad but relieved face -1F626..1F627 ; Emoji_Presentation # 6.1 [2] (😦..😧) frowning face with open mouth..anguished face -1F628..1F62B ; Emoji_Presentation # 6.0 [4] (😨..😫) fearful face..tired face -1F62C ; Emoji_Presentation # 6.1 [1] (😬) grimacing face -1F62D ; Emoji_Presentation # 6.0 [1] (😭) loudly crying face -1F62E..1F62F ; Emoji_Presentation # 6.1 [2] (😮..😯) face with open mouth..hushed face -1F630..1F633 ; Emoji_Presentation # 6.0 [4] (😰..😳) anxious face with sweat..flushed face -1F634 ; Emoji_Presentation # 6.1 [1] (😴) sleeping face -1F635..1F640 ; Emoji_Presentation # 6.0 [12] (😵..🙀) dizzy face..weary cat -1F641..1F642 ; Emoji_Presentation # 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face -1F643..1F644 ; Emoji_Presentation # 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes -1F645..1F64F ; Emoji_Presentation # 6.0 [11] (🙅..🙏) person gesturing NO..folded hands -1F680..1F6C5 ; Emoji_Presentation # 6.0 [70] (🚀..🛅) rocket..left luggage -1F6CC ; Emoji_Presentation # 7.0 [1] (🛌) person in bed -1F6D0 ; Emoji_Presentation # 8.0 [1] (🛐) place of worship -1F6D1..1F6D2 ; Emoji_Presentation # 9.0 [2] (🛑..🛒) stop sign..shopping cart -1F6D5 ; Emoji_Presentation # 12.0 [1] (🛕) hindu temple -1F6EB..1F6EC ; Emoji_Presentation # 7.0 [2] (🛫..🛬) airplane departure..airplane arrival -1F6F4..1F6F6 ; Emoji_Presentation # 9.0 [3] (🛴..🛶) kick scooter..canoe -1F6F7..1F6F8 ; Emoji_Presentation # 10.0 [2] (🛷..🛸) sled..flying saucer -1F6F9 ; Emoji_Presentation # 11.0 [1] (🛹) skateboard -1F6FA ; Emoji_Presentation # 12.0 [1] (🛺) auto rickshaw -1F7E0..1F7EB ; Emoji_Presentation # 12.0 [12] (🟠..🟫) orange circle..brown square -1F90D..1F90F ; Emoji_Presentation # 12.0 [3] (🤍..🤏) white heart..pinching hand -1F910..1F918 ; Emoji_Presentation # 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns -1F919..1F91E ; Emoji_Presentation # 9.0 [6] (🤙..🤞) call me hand..crossed fingers -1F91F ; Emoji_Presentation # 10.0 [1] (🤟) love-you gesture -1F920..1F927 ; Emoji_Presentation # 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face -1F928..1F92F ; Emoji_Presentation # 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head -1F930 ; Emoji_Presentation # 9.0 [1] (🤰) pregnant woman -1F931..1F932 ; Emoji_Presentation # 10.0 [2] (🤱..🤲) breast-feeding..palms up together -1F933..1F93A ; Emoji_Presentation # 9.0 [8] (🤳..🤺) selfie..person fencing -1F93C..1F93E ; Emoji_Presentation # 9.0 [3] (🤼..🤾) people wrestling..person playing handball -1F93F ; Emoji_Presentation # 12.0 [1] (🤿) diving mask -1F940..1F945 ; Emoji_Presentation # 9.0 [6] (🥀..🥅) wilted flower..goal net -1F947..1F94B ; Emoji_Presentation # 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform -1F94C ; Emoji_Presentation # 10.0 [1] (🥌) curling stone -1F94D..1F94F ; Emoji_Presentation # 11.0 [3] (🥍..🥏) lacrosse..flying disc -1F950..1F95E ; Emoji_Presentation # 9.0 [15] (🥐..🥞) croissant..pancakes -1F95F..1F96B ; Emoji_Presentation # 10.0 [13] (🥟..🥫) dumpling..canned food -1F96C..1F970 ; Emoji_Presentation # 11.0 [5] (🥬..🥰) leafy green..smiling face with hearts -1F971 ; Emoji_Presentation # 12.0 [1] (🥱) yawning face -1F973..1F976 ; Emoji_Presentation # 11.0 [4] (🥳..🥶) partying face..cold face -1F97A ; Emoji_Presentation # 11.0 [1] (🥺) pleading face -1F97B ; Emoji_Presentation # 12.0 [1] (🥻) sari -1F97C..1F97F ; Emoji_Presentation # 11.0 [4] (🥼..🥿) lab coat..flat shoe -1F980..1F984 ; Emoji_Presentation # 8.0 [5] (🦀..🦄) crab..unicorn -1F985..1F991 ; Emoji_Presentation # 9.0 [13] (🦅..🦑) eagle..squid -1F992..1F997 ; Emoji_Presentation # 10.0 [6] (🦒..🦗) giraffe..cricket -1F998..1F9A2 ; Emoji_Presentation # 11.0 [11] (🦘..🦢) kangaroo..swan -1F9A5..1F9AA ; Emoji_Presentation # 12.0 [6] (🦥..🦪) sloth..oyster -1F9AE..1F9AF ; Emoji_Presentation # 12.0 [2] (🦮..🦯) guide dog..probing cane -1F9B0..1F9B9 ; Emoji_Presentation # 11.0 [10] (🦰..🦹) red hair..supervillain -1F9BA..1F9BF ; Emoji_Presentation # 12.0 [6] (🦺..🦿) safety vest..mechanical leg -1F9C0 ; Emoji_Presentation # 8.0 [1] (🧀) cheese wedge -1F9C1..1F9C2 ; Emoji_Presentation # 11.0 [2] (🧁..🧂) cupcake..salt -1F9C3..1F9CA ; Emoji_Presentation # 12.0 [8] (🧃..🧊) beverage box..ice cube -1F9CD..1F9CF ; Emoji_Presentation # 12.0 [3] (🧍..🧏) person standing..deaf person -1F9D0..1F9E6 ; Emoji_Presentation # 10.0 [23] (🧐..🧦) face with monocle..socks -1F9E7..1F9FF ; Emoji_Presentation # 11.0 [25] (🧧..🧿) red envelope..nazar amulet -1FA70..1FA73 ; Emoji_Presentation # 12.0 [4] (🩰..🩳) ballet shoes..shorts -1FA78..1FA7A ; Emoji_Presentation # 12.0 [3] (🩸..🩺) drop of blood..stethoscope -1FA80..1FA82 ; Emoji_Presentation # 12.0 [3] (🪀..🪂) yo-yo..parachute -1FA90..1FA95 ; Emoji_Presentation # 12.0 [6] (🪐..🪕) ringed planet..banjo - -# Total elements: 1093 - -# ================================================ - -# All omitted code points have Emoji_Modifier=No -# @missing: 0000..10FFFF ; Emoji_Modifier ; No - -1F3FB..1F3FF ; Emoji_Modifier # 8.0 [5] (🏻..🏿) light skin tone..dark skin tone - -# Total elements: 5 - -# ================================================ - -# All omitted code points have Emoji_Modifier_Base=No -# @missing: 0000..10FFFF ; Emoji_Modifier_Base ; No - -261D ; Emoji_Modifier_Base # 1.1 [1] (☝️) index pointing up -26F9 ; Emoji_Modifier_Base # 5.2 [1] (⛹️) person bouncing ball -270A..270B ; Emoji_Modifier_Base # 6.0 [2] (✊..✋) raised fist..raised hand -270C..270D ; Emoji_Modifier_Base # 1.1 [2] (✌️..✍️) victory hand..writing hand -1F385 ; Emoji_Modifier_Base # 6.0 [1] (🎅) Santa Claus -1F3C2..1F3C4 ; Emoji_Modifier_Base # 6.0 [3] (🏂..🏄) snowboarder..person surfing -1F3C7 ; Emoji_Modifier_Base # 6.0 [1] (🏇) horse racing -1F3CA ; Emoji_Modifier_Base # 6.0 [1] (🏊) person swimming -1F3CB..1F3CC ; Emoji_Modifier_Base # 7.0 [2] (🏋️..🏌️) person lifting weights..person golfing -1F442..1F443 ; Emoji_Modifier_Base # 6.0 [2] (👂..👃) ear..nose -1F446..1F450 ; Emoji_Modifier_Base # 6.0 [11] (👆..👐) backhand index pointing up..open hands -1F466..1F478 ; Emoji_Modifier_Base # 6.0 [19] (👦..👸) boy..princess -1F47C ; Emoji_Modifier_Base # 6.0 [1] (👼) baby angel -1F481..1F483 ; Emoji_Modifier_Base # 6.0 [3] (💁..💃) person tipping hand..woman dancing -1F485..1F487 ; Emoji_Modifier_Base # 6.0 [3] (💅..💇) nail polish..person getting haircut -1F48F ; Emoji_Modifier_Base # 6.0 [1] (💏) kiss -1F491 ; Emoji_Modifier_Base # 6.0 [1] (💑) couple with heart -1F4AA ; Emoji_Modifier_Base # 6.0 [1] (💪) flexed biceps -1F574..1F575 ; Emoji_Modifier_Base # 7.0 [2] (🕴️..🕵️) man in suit levitating..detective -1F57A ; Emoji_Modifier_Base # 9.0 [1] (🕺) man dancing -1F590 ; Emoji_Modifier_Base # 7.0 [1] (🖐️) hand with fingers splayed -1F595..1F596 ; Emoji_Modifier_Base # 7.0 [2] (🖕..🖖) middle finger..vulcan salute -1F645..1F647 ; Emoji_Modifier_Base # 6.0 [3] (🙅..🙇) person gesturing NO..person bowing -1F64B..1F64F ; Emoji_Modifier_Base # 6.0 [5] (🙋..🙏) person raising hand..folded hands -1F6A3 ; Emoji_Modifier_Base # 6.0 [1] (🚣) person rowing boat -1F6B4..1F6B6 ; Emoji_Modifier_Base # 6.0 [3] (🚴..🚶) person biking..person walking -1F6C0 ; Emoji_Modifier_Base # 6.0 [1] (🛀) person taking bath -1F6CC ; Emoji_Modifier_Base # 7.0 [1] (🛌) person in bed -1F90F ; Emoji_Modifier_Base # 12.0 [1] (🤏) pinching hand -1F918 ; Emoji_Modifier_Base # 8.0 [1] (🤘) sign of the horns -1F919..1F91E ; Emoji_Modifier_Base # 9.0 [6] (🤙..🤞) call me hand..crossed fingers -1F91F ; Emoji_Modifier_Base # 10.0 [1] (🤟) love-you gesture -1F926 ; Emoji_Modifier_Base # 9.0 [1] (🤦) person facepalming -1F930 ; Emoji_Modifier_Base # 9.0 [1] (🤰) pregnant woman -1F931..1F932 ; Emoji_Modifier_Base # 10.0 [2] (🤱..🤲) breast-feeding..palms up together -1F933..1F939 ; Emoji_Modifier_Base # 9.0 [7] (🤳..🤹) selfie..person juggling -1F93C..1F93E ; Emoji_Modifier_Base # 9.0 [3] (🤼..🤾) people wrestling..person playing handball -1F9B5..1F9B6 ; Emoji_Modifier_Base # 11.0 [2] (🦵..🦶) leg..foot -1F9B8..1F9B9 ; Emoji_Modifier_Base # 11.0 [2] (🦸..🦹) superhero..supervillain -1F9BB ; Emoji_Modifier_Base # 12.0 [1] (🦻) ear with hearing aid -1F9CD..1F9CF ; Emoji_Modifier_Base # 12.0 [3] (🧍..🧏) person standing..deaf person -1F9D1..1F9DD ; Emoji_Modifier_Base # 10.0 [13] (🧑..🧝) person..elf - -# Total elements: 120 - -# ================================================ - -# All omitted code points have Emoji_Component=No -# @missing: 0000..10FFFF ; Emoji_Component ; No - -0023 ; Emoji_Component # 1.1 [1] (#️) number sign -002A ; Emoji_Component # 1.1 [1] (*️) asterisk -0030..0039 ; Emoji_Component # 1.1 [10] (0️..9️) digit zero..digit nine -200D ; Emoji_Component # 1.1 [1] (‍) zero width joiner -20E3 ; Emoji_Component # 3.0 [1] (⃣) combining enclosing keycap -FE0F ; Emoji_Component # 3.2 [1] () VARIATION SELECTOR-16 -1F1E6..1F1FF ; Emoji_Component # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z -1F3FB..1F3FF ; Emoji_Component # 8.0 [5] (🏻..🏿) light skin tone..dark skin tone -1F9B0..1F9B3 ; Emoji_Component # 11.0 [4] (🦰..🦳) red hair..white hair -E0020..E007F ; Emoji_Component # 3.1 [96] (󠀠..󠁿) tag space..cancel tag - -# Total elements: 146 - -# ================================================ - -# All omitted code points have Extended_Pictographic=No -# @missing: 0000..10FFFF ; Extended_Pictographic ; No - -00A9 ; Extended_Pictographic# 1.1 [1] (©️) copyright -00AE ; Extended_Pictographic# 1.1 [1] (®️) registered -203C ; Extended_Pictographic# 1.1 [1] (‼️) double exclamation mark -2049 ; Extended_Pictographic# 3.0 [1] (⁉️) exclamation question mark -2122 ; Extended_Pictographic# 1.1 [1] (™️) trade mark -2139 ; Extended_Pictographic# 3.0 [1] (ℹ️) information -2194..2199 ; Extended_Pictographic# 1.1 [6] (↔️..↙️) left-right arrow..down-left arrow -21A9..21AA ; Extended_Pictographic# 1.1 [2] (↩️..↪️) right arrow curving left..left arrow curving right -231A..231B ; Extended_Pictographic# 1.1 [2] (⌚..⌛) watch..hourglass done -2328 ; Extended_Pictographic# 1.1 [1] (⌨️) keyboard -2388 ; Extended_Pictographic# 3.0 [1] (⎈) HELM SYMBOL -23CF ; Extended_Pictographic# 4.0 [1] (⏏️) eject button -23E9..23F3 ; Extended_Pictographic# 6.0 [11] (⏩..⏳) fast-forward button..hourglass not done -23F8..23FA ; Extended_Pictographic# 7.0 [3] (⏸️..⏺️) pause button..record button -24C2 ; Extended_Pictographic# 1.1 [1] (Ⓜ️) circled M -25AA..25AB ; Extended_Pictographic# 1.1 [2] (▪️..▫️) black small square..white small square -25B6 ; Extended_Pictographic# 1.1 [1] (▶️) play button -25C0 ; Extended_Pictographic# 1.1 [1] (◀️) reverse button -25FB..25FE ; Extended_Pictographic# 3.2 [4] (◻️..◾) white medium square..black medium-small square -2600..2605 ; Extended_Pictographic# 1.1 [6] (☀️..★) sun..BLACK STAR -2607..2612 ; Extended_Pictographic# 1.1 [12] (☇..☒) LIGHTNING..BALLOT BOX WITH X -2614..2615 ; Extended_Pictographic# 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage -2616..2617 ; Extended_Pictographic# 3.2 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE -2618 ; Extended_Pictographic# 4.1 [1] (☘️) shamrock -2619 ; Extended_Pictographic# 3.0 [1] (☙) REVERSED ROTATED FLORAL HEART BULLET -261A..266F ; Extended_Pictographic# 1.1 [86] (☚..♯) BLACK LEFT POINTING INDEX..MUSIC SHARP SIGN -2670..2671 ; Extended_Pictographic# 3.0 [2] (♰..♱) WEST SYRIAC CROSS..EAST SYRIAC CROSS -2672..267D ; Extended_Pictographic# 3.2 [12] (♲..♽) UNIVERSAL RECYCLING SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL -267E..267F ; Extended_Pictographic# 4.1 [2] (♾️..♿) infinity..wheelchair symbol -2680..2685 ; Extended_Pictographic# 3.2 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 -2690..2691 ; Extended_Pictographic# 4.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG -2692..269C ; Extended_Pictographic# 4.1 [11] (⚒️..⚜️) hammer and pick..fleur-de-lis -269D ; Extended_Pictographic# 5.1 [1] (⚝) OUTLINED WHITE STAR -269E..269F ; Extended_Pictographic# 5.2 [2] (⚞..⚟) THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT -26A0..26A1 ; Extended_Pictographic# 4.0 [2] (⚠️..⚡) warning..high voltage -26A2..26B1 ; Extended_Pictographic# 4.1 [16] (⚢..⚱️) DOUBLED FEMALE SIGN..funeral urn -26B2 ; Extended_Pictographic# 5.0 [1] (⚲) NEUTER -26B3..26BC ; Extended_Pictographic# 5.1 [10] (⚳..⚼) CERES..SESQUIQUADRATE -26BD..26BF ; Extended_Pictographic# 5.2 [3] (⚽..⚿) soccer ball..SQUARED KEY -26C0..26C3 ; Extended_Pictographic# 5.1 [4] (⛀..⛃) WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING -26C4..26CD ; Extended_Pictographic# 5.2 [10] (⛄..⛍) snowman without snow..DISABLED CAR -26CE ; Extended_Pictographic# 6.0 [1] (⛎) Ophiuchus -26CF..26E1 ; Extended_Pictographic# 5.2 [19] (⛏️..⛡) pick..RESTRICTED LEFT ENTRY-2 -26E2 ; Extended_Pictographic# 6.0 [1] (⛢) ASTRONOMICAL SYMBOL FOR URANUS -26E3 ; Extended_Pictographic# 5.2 [1] (⛣) HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE -26E4..26E7 ; Extended_Pictographic# 6.0 [4] (⛤..⛧) PENTAGRAM..INVERTED PENTAGRAM -26E8..26FF ; Extended_Pictographic# 5.2 [24] (⛨..⛿) BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE -2700 ; Extended_Pictographic# 7.0 [1] (✀) BLACK SAFETY SCISSORS -2701..2704 ; Extended_Pictographic# 1.1 [4] (✁..✄) UPPER BLADE SCISSORS..WHITE SCISSORS -2705 ; Extended_Pictographic# 6.0 [1] (✅) check mark button -2708..2709 ; Extended_Pictographic# 1.1 [2] (✈️..✉️) airplane..envelope -270A..270B ; Extended_Pictographic# 6.0 [2] (✊..✋) raised fist..raised hand -270C..2712 ; Extended_Pictographic# 1.1 [7] (✌️..✒️) victory hand..black nib -2714 ; Extended_Pictographic# 1.1 [1] (✔️) check mark -2716 ; Extended_Pictographic# 1.1 [1] (✖️) multiplication sign -271D ; Extended_Pictographic# 1.1 [1] (✝️) latin cross -2721 ; Extended_Pictographic# 1.1 [1] (✡️) star of David -2728 ; Extended_Pictographic# 6.0 [1] (✨) sparkles -2733..2734 ; Extended_Pictographic# 1.1 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star -2744 ; Extended_Pictographic# 1.1 [1] (❄️) snowflake -2747 ; Extended_Pictographic# 1.1 [1] (❇️) sparkle -274C ; Extended_Pictographic# 6.0 [1] (❌) cross mark -274E ; Extended_Pictographic# 6.0 [1] (❎) cross mark button -2753..2755 ; Extended_Pictographic# 6.0 [3] (❓..❕) question mark..white exclamation mark -2757 ; Extended_Pictographic# 5.2 [1] (❗) exclamation mark -2763..2767 ; Extended_Pictographic# 1.1 [5] (❣️..❧) heart exclamation..ROTATED FLORAL HEART BULLET -2795..2797 ; Extended_Pictographic# 6.0 [3] (➕..➗) plus sign..division sign -27A1 ; Extended_Pictographic# 1.1 [1] (➡️) right arrow -27B0 ; Extended_Pictographic# 6.0 [1] (➰) curly loop -27BF ; Extended_Pictographic# 6.0 [1] (➿) double curly loop -2934..2935 ; Extended_Pictographic# 3.2 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down -2B05..2B07 ; Extended_Pictographic# 4.0 [3] (⬅️..⬇️) left arrow..down arrow -2B1B..2B1C ; Extended_Pictographic# 5.1 [2] (⬛..⬜) black large square..white large square -2B50 ; Extended_Pictographic# 5.1 [1] (⭐) star -2B55 ; Extended_Pictographic# 5.2 [1] (⭕) hollow red circle -3030 ; Extended_Pictographic# 1.1 [1] (〰️) wavy dash -303D ; Extended_Pictographic# 3.2 [1] (〽️) part alternation mark -3297 ; Extended_Pictographic# 1.1 [1] (㊗️) Japanese “congratulations” button -3299 ; Extended_Pictographic# 1.1 [1] (㊙️) Japanese “secret” button -1F000..1F02B ; Extended_Pictographic# 5.1 [44] (🀀..🀫) MAHJONG TILE EAST WIND..MAHJONG TILE BACK -1F02C..1F02F ; Extended_Pictographic# NA [4] (🀬..🀯) .. -1F030..1F093 ; Extended_Pictographic# 5.1[100] (🀰..🂓) DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 -1F094..1F09F ; Extended_Pictographic# NA [12] (🂔..🂟) .. -1F0A0..1F0AE ; Extended_Pictographic# 6.0 [15] (🂠..🂮) PLAYING CARD BACK..PLAYING CARD KING OF SPADES -1F0AF..1F0B0 ; Extended_Pictographic# NA [2] (🂯..🂰) .. -1F0B1..1F0BE ; Extended_Pictographic# 6.0 [14] (🂱..🂾) PLAYING CARD ACE OF HEARTS..PLAYING CARD KING OF HEARTS -1F0BF ; Extended_Pictographic# 7.0 [1] (🂿) PLAYING CARD RED JOKER -1F0C0 ; Extended_Pictographic# NA [1] (🃀) -1F0C1..1F0CF ; Extended_Pictographic# 6.0 [15] (🃁..🃏) PLAYING CARD ACE OF DIAMONDS..joker -1F0D0 ; Extended_Pictographic# NA [1] (🃐) -1F0D1..1F0DF ; Extended_Pictographic# 6.0 [15] (🃑..🃟) PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER -1F0E0..1F0F5 ; Extended_Pictographic# 7.0 [22] (🃠..🃵) PLAYING CARD FOOL..PLAYING CARD TRUMP-21 -1F0F6..1F0FF ; Extended_Pictographic# NA [10] (🃶..🃿) .. -1F10D..1F10F ; Extended_Pictographic# NA [3] (🄍..🄏) .. -1F12F ; Extended_Pictographic# 11.0 [1] (🄯) COPYLEFT SYMBOL -1F16C ; Extended_Pictographic# 12.0 [1] (🅬) RAISED MR SIGN -1F16D..1F16F ; Extended_Pictographic# NA [3] (🅭..🅯) .. -1F170..1F171 ; Extended_Pictographic# 6.0 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) -1F17E ; Extended_Pictographic# 6.0 [1] (🅾️) O button (blood type) -1F17F ; Extended_Pictographic# 5.2 [1] (🅿️) P button -1F18E ; Extended_Pictographic# 6.0 [1] (🆎) AB button (blood type) -1F191..1F19A ; Extended_Pictographic# 6.0 [10] (🆑..🆚) CL button..VS button -1F1AD..1F1E5 ; Extended_Pictographic# NA [57] (🆭..🇥) .. -1F201..1F202 ; Extended_Pictographic# 6.0 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button -1F203..1F20F ; Extended_Pictographic# NA [13] (🈃..🈏) .. -1F21A ; Extended_Pictographic# 5.2 [1] (🈚) Japanese “free of charge” button -1F22F ; Extended_Pictographic# 5.2 [1] (🈯) Japanese “reserved” button -1F232..1F23A ; Extended_Pictographic# 6.0 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button -1F23C..1F23F ; Extended_Pictographic# NA [4] (🈼..🈿) .. -1F249..1F24F ; Extended_Pictographic# NA [7] (🉉..🉏) .. -1F250..1F251 ; Extended_Pictographic# 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button -1F252..1F25F ; Extended_Pictographic# NA [14] (🉒..🉟) .. -1F260..1F265 ; Extended_Pictographic# 10.0 [6] (🉠..🉥) ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI -1F266..1F2FF ; Extended_Pictographic# NA[154] (🉦..🋿) .. -1F300..1F320 ; Extended_Pictographic# 6.0 [33] (🌀..🌠) cyclone..shooting star -1F321..1F32C ; Extended_Pictographic# 7.0 [12] (🌡️..🌬️) thermometer..wind face -1F32D..1F32F ; Extended_Pictographic# 8.0 [3] (🌭..🌯) hot dog..burrito -1F330..1F335 ; Extended_Pictographic# 6.0 [6] (🌰..🌵) chestnut..cactus -1F336 ; Extended_Pictographic# 7.0 [1] (🌶️) hot pepper -1F337..1F37C ; Extended_Pictographic# 6.0 [70] (🌷..🍼) tulip..baby bottle -1F37D ; Extended_Pictographic# 7.0 [1] (🍽️) fork and knife with plate -1F37E..1F37F ; Extended_Pictographic# 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn -1F380..1F393 ; Extended_Pictographic# 6.0 [20] (🎀..🎓) ribbon..graduation cap -1F394..1F39F ; Extended_Pictographic# 7.0 [12] (🎔..🎟️) HEART WITH TIP ON THE LEFT..admission tickets -1F3A0..1F3C4 ; Extended_Pictographic# 6.0 [37] (🎠..🏄) carousel horse..person surfing -1F3C5 ; Extended_Pictographic# 7.0 [1] (🏅) sports medal -1F3C6..1F3CA ; Extended_Pictographic# 6.0 [5] (🏆..🏊) trophy..person swimming -1F3CB..1F3CE ; Extended_Pictographic# 7.0 [4] (🏋️..🏎️) person lifting weights..racing car -1F3CF..1F3D3 ; Extended_Pictographic# 8.0 [5] (🏏..🏓) cricket game..ping pong -1F3D4..1F3DF ; Extended_Pictographic# 7.0 [12] (🏔️..🏟️) snow-capped mountain..stadium -1F3E0..1F3F0 ; Extended_Pictographic# 6.0 [17] (🏠..🏰) house..castle -1F3F1..1F3F7 ; Extended_Pictographic# 7.0 [7] (🏱..🏷️) WHITE PENNANT..label -1F3F8..1F3FA ; Extended_Pictographic# 8.0 [3] (🏸..🏺) badminton..amphora -1F400..1F43E ; Extended_Pictographic# 6.0 [63] (🐀..🐾) rat..paw prints -1F43F ; Extended_Pictographic# 7.0 [1] (🐿️) chipmunk -1F440 ; Extended_Pictographic# 6.0 [1] (👀) eyes -1F441 ; Extended_Pictographic# 7.0 [1] (👁️) eye -1F442..1F4F7 ; Extended_Pictographic# 6.0[182] (👂..📷) ear..camera -1F4F8 ; Extended_Pictographic# 7.0 [1] (📸) camera with flash -1F4F9..1F4FC ; Extended_Pictographic# 6.0 [4] (📹..📼) video camera..videocassette -1F4FD..1F4FE ; Extended_Pictographic# 7.0 [2] (📽️..📾) film projector..PORTABLE STEREO -1F4FF ; Extended_Pictographic# 8.0 [1] (📿) prayer beads -1F500..1F53D ; Extended_Pictographic# 6.0 [62] (🔀..🔽) shuffle tracks button..downwards button -1F546..1F54A ; Extended_Pictographic# 7.0 [5] (🕆..🕊️) WHITE LATIN CROSS..dove -1F54B..1F54F ; Extended_Pictographic# 8.0 [5] (🕋..🕏) kaaba..BOWL OF HYGIEIA -1F550..1F567 ; Extended_Pictographic# 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty -1F568..1F579 ; Extended_Pictographic# 7.0 [18] (🕨..🕹️) RIGHT SPEAKER..joystick -1F57A ; Extended_Pictographic# 9.0 [1] (🕺) man dancing -1F57B..1F5A3 ; Extended_Pictographic# 7.0 [41] (🕻..🖣) LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX -1F5A4 ; Extended_Pictographic# 9.0 [1] (🖤) black heart -1F5A5..1F5FA ; Extended_Pictographic# 7.0 [86] (🖥️..🗺️) desktop computer..world map -1F5FB..1F5FF ; Extended_Pictographic# 6.0 [5] (🗻..🗿) mount fuji..moai -1F600 ; Extended_Pictographic# 6.1 [1] (😀) grinning face -1F601..1F610 ; Extended_Pictographic# 6.0 [16] (😁..😐) beaming face with smiling eyes..neutral face -1F611 ; Extended_Pictographic# 6.1 [1] (😑) expressionless face -1F612..1F614 ; Extended_Pictographic# 6.0 [3] (😒..😔) unamused face..pensive face -1F615 ; Extended_Pictographic# 6.1 [1] (😕) confused face -1F616 ; Extended_Pictographic# 6.0 [1] (😖) confounded face -1F617 ; Extended_Pictographic# 6.1 [1] (😗) kissing face -1F618 ; Extended_Pictographic# 6.0 [1] (😘) face blowing a kiss -1F619 ; Extended_Pictographic# 6.1 [1] (😙) kissing face with smiling eyes -1F61A ; Extended_Pictographic# 6.0 [1] (😚) kissing face with closed eyes -1F61B ; Extended_Pictographic# 6.1 [1] (😛) face with tongue -1F61C..1F61E ; Extended_Pictographic# 6.0 [3] (😜..😞) winking face with tongue..disappointed face -1F61F ; Extended_Pictographic# 6.1 [1] (😟) worried face -1F620..1F625 ; Extended_Pictographic# 6.0 [6] (😠..😥) angry face..sad but relieved face -1F626..1F627 ; Extended_Pictographic# 6.1 [2] (😦..😧) frowning face with open mouth..anguished face -1F628..1F62B ; Extended_Pictographic# 6.0 [4] (😨..😫) fearful face..tired face -1F62C ; Extended_Pictographic# 6.1 [1] (😬) grimacing face -1F62D ; Extended_Pictographic# 6.0 [1] (😭) loudly crying face -1F62E..1F62F ; Extended_Pictographic# 6.1 [2] (😮..😯) face with open mouth..hushed face -1F630..1F633 ; Extended_Pictographic# 6.0 [4] (😰..😳) anxious face with sweat..flushed face -1F634 ; Extended_Pictographic# 6.1 [1] (😴) sleeping face -1F635..1F640 ; Extended_Pictographic# 6.0 [12] (😵..🙀) dizzy face..weary cat -1F641..1F642 ; Extended_Pictographic# 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face -1F643..1F644 ; Extended_Pictographic# 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes -1F645..1F64F ; Extended_Pictographic# 6.0 [11] (🙅..🙏) person gesturing NO..folded hands -1F680..1F6C5 ; Extended_Pictographic# 6.0 [70] (🚀..🛅) rocket..left luggage -1F6C6..1F6CF ; Extended_Pictographic# 7.0 [10] (🛆..🛏️) TRIANGLE WITH ROUNDED CORNERS..bed -1F6D0 ; Extended_Pictographic# 8.0 [1] (🛐) place of worship -1F6D1..1F6D2 ; Extended_Pictographic# 9.0 [2] (🛑..🛒) stop sign..shopping cart -1F6D3..1F6D4 ; Extended_Pictographic# 10.0 [2] (🛓..🛔) STUPA..PAGODA -1F6D5 ; Extended_Pictographic# 12.0 [1] (🛕) hindu temple -1F6D6..1F6DF ; Extended_Pictographic# NA [10] (🛖..🛟) .. -1F6E0..1F6EC ; Extended_Pictographic# 7.0 [13] (🛠️..🛬) hammer and wrench..airplane arrival -1F6ED..1F6EF ; Extended_Pictographic# NA [3] (🛭..🛯) .. -1F6F0..1F6F3 ; Extended_Pictographic# 7.0 [4] (🛰️..🛳️) satellite..passenger ship -1F6F4..1F6F6 ; Extended_Pictographic# 9.0 [3] (🛴..🛶) kick scooter..canoe -1F6F7..1F6F8 ; Extended_Pictographic# 10.0 [2] (🛷..🛸) sled..flying saucer -1F6F9 ; Extended_Pictographic# 11.0 [1] (🛹) skateboard -1F6FA ; Extended_Pictographic# 12.0 [1] (🛺) auto rickshaw -1F6FB..1F6FF ; Extended_Pictographic# NA [5] (🛻..🛿) .. -1F774..1F77F ; Extended_Pictographic# NA [12] (🝴..🝿) .. -1F7D5..1F7D8 ; Extended_Pictographic# 11.0 [4] (🟕..🟘) CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE -1F7D9..1F7DF ; Extended_Pictographic# NA [7] (🟙..🟟) .. -1F7E0..1F7EB ; Extended_Pictographic# 12.0 [12] (🟠..🟫) orange circle..brown square -1F7EC..1F7FF ; Extended_Pictographic# NA [20] (🟬..🟿) .. -1F80C..1F80F ; Extended_Pictographic# NA [4] (🠌..🠏) .. -1F848..1F84F ; Extended_Pictographic# NA [8] (🡈..🡏) .. -1F85A..1F85F ; Extended_Pictographic# NA [6] (🡚..🡟) .. -1F888..1F88F ; Extended_Pictographic# NA [8] (🢈..🢏) .. -1F8AE..1F8FF ; Extended_Pictographic# NA [82] (🢮..🣿) .. -1F90C ; Extended_Pictographic# NA [1] (🤌) -1F90D..1F90F ; Extended_Pictographic# 12.0 [3] (🤍..🤏) white heart..pinching hand -1F910..1F918 ; Extended_Pictographic# 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns -1F919..1F91E ; Extended_Pictographic# 9.0 [6] (🤙..🤞) call me hand..crossed fingers -1F91F ; Extended_Pictographic# 10.0 [1] (🤟) love-you gesture -1F920..1F927 ; Extended_Pictographic# 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face -1F928..1F92F ; Extended_Pictographic# 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head -1F930 ; Extended_Pictographic# 9.0 [1] (🤰) pregnant woman -1F931..1F932 ; Extended_Pictographic# 10.0 [2] (🤱..🤲) breast-feeding..palms up together -1F933..1F93A ; Extended_Pictographic# 9.0 [8] (🤳..🤺) selfie..person fencing -1F93C..1F93E ; Extended_Pictographic# 9.0 [3] (🤼..🤾) people wrestling..person playing handball -1F93F ; Extended_Pictographic# 12.0 [1] (🤿) diving mask -1F940..1F945 ; Extended_Pictographic# 9.0 [6] (🥀..🥅) wilted flower..goal net -1F947..1F94B ; Extended_Pictographic# 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform -1F94C ; Extended_Pictographic# 10.0 [1] (🥌) curling stone -1F94D..1F94F ; Extended_Pictographic# 11.0 [3] (🥍..🥏) lacrosse..flying disc -1F950..1F95E ; Extended_Pictographic# 9.0 [15] (🥐..🥞) croissant..pancakes -1F95F..1F96B ; Extended_Pictographic# 10.0 [13] (🥟..🥫) dumpling..canned food -1F96C..1F970 ; Extended_Pictographic# 11.0 [5] (🥬..🥰) leafy green..smiling face with hearts -1F971 ; Extended_Pictographic# 12.0 [1] (🥱) yawning face -1F972 ; Extended_Pictographic# NA [1] (🥲) -1F973..1F976 ; Extended_Pictographic# 11.0 [4] (🥳..🥶) partying face..cold face -1F977..1F979 ; Extended_Pictographic# NA [3] (🥷..🥹) .. -1F97A ; Extended_Pictographic# 11.0 [1] (🥺) pleading face -1F97B ; Extended_Pictographic# 12.0 [1] (🥻) sari -1F97C..1F97F ; Extended_Pictographic# 11.0 [4] (🥼..🥿) lab coat..flat shoe -1F980..1F984 ; Extended_Pictographic# 8.0 [5] (🦀..🦄) crab..unicorn -1F985..1F991 ; Extended_Pictographic# 9.0 [13] (🦅..🦑) eagle..squid -1F992..1F997 ; Extended_Pictographic# 10.0 [6] (🦒..🦗) giraffe..cricket -1F998..1F9A2 ; Extended_Pictographic# 11.0 [11] (🦘..🦢) kangaroo..swan -1F9A3..1F9A4 ; Extended_Pictographic# NA [2] (🦣..🦤) .. -1F9A5..1F9AA ; Extended_Pictographic# 12.0 [6] (🦥..🦪) sloth..oyster -1F9AB..1F9AD ; Extended_Pictographic# NA [3] (🦫..🦭) .. -1F9AE..1F9AF ; Extended_Pictographic# 12.0 [2] (🦮..🦯) guide dog..probing cane -1F9B0..1F9B9 ; Extended_Pictographic# 11.0 [10] (🦰..🦹) red hair..supervillain -1F9BA..1F9BF ; Extended_Pictographic# 12.0 [6] (🦺..🦿) safety vest..mechanical leg -1F9C0 ; Extended_Pictographic# 8.0 [1] (🧀) cheese wedge -1F9C1..1F9C2 ; Extended_Pictographic# 11.0 [2] (🧁..🧂) cupcake..salt -1F9C3..1F9CA ; Extended_Pictographic# 12.0 [8] (🧃..🧊) beverage box..ice cube -1F9CB..1F9CC ; Extended_Pictographic# NA [2] (🧋..🧌) .. -1F9CD..1F9CF ; Extended_Pictographic# 12.0 [3] (🧍..🧏) person standing..deaf person -1F9D0..1F9E6 ; Extended_Pictographic# 10.0 [23] (🧐..🧦) face with monocle..socks -1F9E7..1F9FF ; Extended_Pictographic# 11.0 [25] (🧧..🧿) red envelope..nazar amulet -1FA00..1FA53 ; Extended_Pictographic# 12.0 [84] (🨀..🩓) NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP -1FA54..1FA5F ; Extended_Pictographic# NA [12] (🩔..🩟) .. -1FA60..1FA6D ; Extended_Pictographic# 11.0 [14] (🩠..🩭) XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER -1FA6E..1FA6F ; Extended_Pictographic# NA [2] (🩮..🩯) .. -1FA70..1FA73 ; Extended_Pictographic# 12.0 [4] (🩰..🩳) ballet shoes..shorts -1FA74..1FA77 ; Extended_Pictographic# NA [4] (🩴..🩷) .. -1FA78..1FA7A ; Extended_Pictographic# 12.0 [3] (🩸..🩺) drop of blood..stethoscope -1FA7B..1FA7F ; Extended_Pictographic# NA [5] (🩻..🩿) .. -1FA80..1FA82 ; Extended_Pictographic# 12.0 [3] (🪀..🪂) yo-yo..parachute -1FA83..1FA8F ; Extended_Pictographic# NA [13] (🪃..🪏) .. -1FA90..1FA95 ; Extended_Pictographic# 12.0 [6] (🪐..🪕) ringed planet..banjo -1FA96..1FFFD ; Extended_Pictographic# NA[1384] (🪖..🿽) .. - -# Total elements: 3793 - -#EOF \ No newline at end of file +# emoji-data.txt +# Date: 2022-08-02, 00:26:10 GMT +# © 2022 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see https://www.unicode.org/terms_of_use.html +# +# Emoji Data for UTS #51 +# Used with Emoji Version 15.0 and subsequent minor revisions (if any) +# +# For documentation and usage, see https://www.unicode.org/reports/tr51 +# +# Format: +# ; # +# Note: there is no guarantee as to the structure of whitespace or comments +# +# Characters and sequences are listed in code point order. Users should be shown a more natural order. +# See the CLDR collation order for Emoji. + + +# ================================================ + +# All omitted code points have Emoji=No + +0023 ; Emoji # E0.0 [1] (#️) hash sign +002A ; Emoji # E0.0 [1] (*️) asterisk +0030..0039 ; Emoji # E0.0 [10] (0️..9️) digit zero..digit nine +00A9 ; Emoji # E0.6 [1] (©️) copyright +00AE ; Emoji # E0.6 [1] (®️) registered +203C ; Emoji # E0.6 [1] (‼️) double exclamation mark +2049 ; Emoji # E0.6 [1] (⁉️) exclamation question mark +2122 ; Emoji # E0.6 [1] (™️) trade mark +2139 ; Emoji # E0.6 [1] (ℹ️) information +2194..2199 ; Emoji # E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow +21A9..21AA ; Emoji # E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right +231A..231B ; Emoji # E0.6 [2] (⌚..⌛) watch..hourglass done +2328 ; Emoji # E1.0 [1] (⌨️) keyboard +23CF ; Emoji # E1.0 [1] (⏏️) eject button +23E9..23EC ; Emoji # E0.6 [4] (⏩..⏬) fast-forward button..fast down button +23ED..23EE ; Emoji # E0.7 [2] (⏭️..⏮️) next track button..last track button +23EF ; Emoji # E1.0 [1] (⏯️) play or pause button +23F0 ; Emoji # E0.6 [1] (⏰) alarm clock +23F1..23F2 ; Emoji # E1.0 [2] (⏱️..⏲️) stopwatch..timer clock +23F3 ; Emoji # E0.6 [1] (⏳) hourglass not done +23F8..23FA ; Emoji # E0.7 [3] (⏸️..⏺️) pause button..record button +24C2 ; Emoji # E0.6 [1] (Ⓜ️) circled M +25AA..25AB ; Emoji # E0.6 [2] (▪️..▫️) black small square..white small square +25B6 ; Emoji # E0.6 [1] (▶️) play button +25C0 ; Emoji # E0.6 [1] (◀️) reverse button +25FB..25FE ; Emoji # E0.6 [4] (◻️..◾) white medium square..black medium-small square +2600..2601 ; Emoji # E0.6 [2] (☀️..☁️) sun..cloud +2602..2603 ; Emoji # E0.7 [2] (☂️..☃️) umbrella..snowman +2604 ; Emoji # E1.0 [1] (☄️) comet +260E ; Emoji # E0.6 [1] (☎️) telephone +2611 ; Emoji # E0.6 [1] (☑️) check box with check +2614..2615 ; Emoji # E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage +2618 ; Emoji # E1.0 [1] (☘️) shamrock +261D ; Emoji # E0.6 [1] (☝️) index pointing up +2620 ; Emoji # E1.0 [1] (☠️) skull and crossbones +2622..2623 ; Emoji # E1.0 [2] (☢️..☣️) radioactive..biohazard +2626 ; Emoji # E1.0 [1] (☦️) orthodox cross +262A ; Emoji # E0.7 [1] (☪️) star and crescent +262E ; Emoji # E1.0 [1] (☮️) peace symbol +262F ; Emoji # E0.7 [1] (☯️) yin yang +2638..2639 ; Emoji # E0.7 [2] (☸️..☹️) wheel of dharma..frowning face +263A ; Emoji # E0.6 [1] (☺️) smiling face +2640 ; Emoji # E4.0 [1] (♀️) female sign +2642 ; Emoji # E4.0 [1] (♂️) male sign +2648..2653 ; Emoji # E0.6 [12] (♈..♓) Aries..Pisces +265F ; Emoji # E11.0 [1] (♟️) chess pawn +2660 ; Emoji # E0.6 [1] (♠️) spade suit +2663 ; Emoji # E0.6 [1] (♣️) club suit +2665..2666 ; Emoji # E0.6 [2] (♥️..♦️) heart suit..diamond suit +2668 ; Emoji # E0.6 [1] (♨️) hot springs +267B ; Emoji # E0.6 [1] (♻️) recycling symbol +267E ; Emoji # E11.0 [1] (♾️) infinity +267F ; Emoji # E0.6 [1] (♿) wheelchair symbol +2692 ; Emoji # E1.0 [1] (⚒️) hammer and pick +2693 ; Emoji # E0.6 [1] (⚓) anchor +2694 ; Emoji # E1.0 [1] (⚔️) crossed swords +2695 ; Emoji # E4.0 [1] (⚕️) medical symbol +2696..2697 ; Emoji # E1.0 [2] (⚖️..⚗️) balance scale..alembic +2699 ; Emoji # E1.0 [1] (⚙️) gear +269B..269C ; Emoji # E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis +26A0..26A1 ; Emoji # E0.6 [2] (⚠️..⚡) warning..high voltage +26A7 ; Emoji # E13.0 [1] (⚧️) transgender symbol +26AA..26AB ; Emoji # E0.6 [2] (⚪..⚫) white circle..black circle +26B0..26B1 ; Emoji # E1.0 [2] (⚰️..⚱️) coffin..funeral urn +26BD..26BE ; Emoji # E0.6 [2] (⚽..⚾) soccer ball..baseball +26C4..26C5 ; Emoji # E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud +26C8 ; Emoji # E0.7 [1] (⛈️) cloud with lightning and rain +26CE ; Emoji # E0.6 [1] (⛎) Ophiuchus +26CF ; Emoji # E0.7 [1] (⛏️) pick +26D1 ; Emoji # E0.7 [1] (⛑️) rescue worker’s helmet +26D3 ; Emoji # E0.7 [1] (⛓️) chains +26D4 ; Emoji # E0.6 [1] (⛔) no entry +26E9 ; Emoji # E0.7 [1] (⛩️) shinto shrine +26EA ; Emoji # E0.6 [1] (⛪) church +26F0..26F1 ; Emoji # E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground +26F2..26F3 ; Emoji # E0.6 [2] (⛲..⛳) fountain..flag in hole +26F4 ; Emoji # E0.7 [1] (⛴️) ferry +26F5 ; Emoji # E0.6 [1] (⛵) sailboat +26F7..26F9 ; Emoji # E0.7 [3] (⛷️..⛹️) skier..person bouncing ball +26FA ; Emoji # E0.6 [1] (⛺) tent +26FD ; Emoji # E0.6 [1] (⛽) fuel pump +2702 ; Emoji # E0.6 [1] (✂️) scissors +2705 ; Emoji # E0.6 [1] (✅) check mark button +2708..270C ; Emoji # E0.6 [5] (✈️..✌️) airplane..victory hand +270D ; Emoji # E0.7 [1] (✍️) writing hand +270F ; Emoji # E0.6 [1] (✏️) pencil +2712 ; Emoji # E0.6 [1] (✒️) black nib +2714 ; Emoji # E0.6 [1] (✔️) check mark +2716 ; Emoji # E0.6 [1] (✖️) multiply +271D ; Emoji # E0.7 [1] (✝️) latin cross +2721 ; Emoji # E0.7 [1] (✡️) star of David +2728 ; Emoji # E0.6 [1] (✨) sparkles +2733..2734 ; Emoji # E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star +2744 ; Emoji # E0.6 [1] (❄️) snowflake +2747 ; Emoji # E0.6 [1] (❇️) sparkle +274C ; Emoji # E0.6 [1] (❌) cross mark +274E ; Emoji # E0.6 [1] (❎) cross mark button +2753..2755 ; Emoji # E0.6 [3] (❓..❕) red question mark..white exclamation mark +2757 ; Emoji # E0.6 [1] (❗) red exclamation mark +2763 ; Emoji # E1.0 [1] (❣️) heart exclamation +2764 ; Emoji # E0.6 [1] (❤️) red heart +2795..2797 ; Emoji # E0.6 [3] (➕..➗) plus..divide +27A1 ; Emoji # E0.6 [1] (➡️) right arrow +27B0 ; Emoji # E0.6 [1] (➰) curly loop +27BF ; Emoji # E1.0 [1] (➿) double curly loop +2934..2935 ; Emoji # E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down +2B05..2B07 ; Emoji # E0.6 [3] (⬅️..⬇️) left arrow..down arrow +2B1B..2B1C ; Emoji # E0.6 [2] (⬛..⬜) black large square..white large square +2B50 ; Emoji # E0.6 [1] (⭐) star +2B55 ; Emoji # E0.6 [1] (⭕) hollow red circle +3030 ; Emoji # E0.6 [1] (〰️) wavy dash +303D ; Emoji # E0.6 [1] (〽️) part alternation mark +3297 ; Emoji # E0.6 [1] (㊗️) Japanese “congratulations” button +3299 ; Emoji # E0.6 [1] (㊙️) Japanese “secret” button +1F004 ; Emoji # E0.6 [1] (🀄) mahjong red dragon +1F0CF ; Emoji # E0.6 [1] (🃏) joker +1F170..1F171 ; Emoji # E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) +1F17E..1F17F ; Emoji # E0.6 [2] (🅾️..🅿️) O button (blood type)..P button +1F18E ; Emoji # E0.6 [1] (🆎) AB button (blood type) +1F191..1F19A ; Emoji # E0.6 [10] (🆑..🆚) CL button..VS button +1F1E6..1F1FF ; Emoji # E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z +1F201..1F202 ; Emoji # E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button +1F21A ; Emoji # E0.6 [1] (🈚) Japanese “free of charge” button +1F22F ; Emoji # E0.6 [1] (🈯) Japanese “reserved” button +1F232..1F23A ; Emoji # E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button +1F250..1F251 ; Emoji # E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button +1F300..1F30C ; Emoji # E0.6 [13] (🌀..🌌) cyclone..milky way +1F30D..1F30E ; Emoji # E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas +1F30F ; Emoji # E0.6 [1] (🌏) globe showing Asia-Australia +1F310 ; Emoji # E1.0 [1] (🌐) globe with meridians +1F311 ; Emoji # E0.6 [1] (🌑) new moon +1F312 ; Emoji # E1.0 [1] (🌒) waxing crescent moon +1F313..1F315 ; Emoji # E0.6 [3] (🌓..🌕) first quarter moon..full moon +1F316..1F318 ; Emoji # E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon +1F319 ; Emoji # E0.6 [1] (🌙) crescent moon +1F31A ; Emoji # E1.0 [1] (🌚) new moon face +1F31B ; Emoji # E0.6 [1] (🌛) first quarter moon face +1F31C ; Emoji # E0.7 [1] (🌜) last quarter moon face +1F31D..1F31E ; Emoji # E1.0 [2] (🌝..🌞) full moon face..sun with face +1F31F..1F320 ; Emoji # E0.6 [2] (🌟..🌠) glowing star..shooting star +1F321 ; Emoji # E0.7 [1] (🌡️) thermometer +1F324..1F32C ; Emoji # E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face +1F32D..1F32F ; Emoji # E1.0 [3] (🌭..🌯) hot dog..burrito +1F330..1F331 ; Emoji # E0.6 [2] (🌰..🌱) chestnut..seedling +1F332..1F333 ; Emoji # E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree +1F334..1F335 ; Emoji # E0.6 [2] (🌴..🌵) palm tree..cactus +1F336 ; Emoji # E0.7 [1] (🌶️) hot pepper +1F337..1F34A ; Emoji # E0.6 [20] (🌷..🍊) tulip..tangerine +1F34B ; Emoji # E1.0 [1] (🍋) lemon +1F34C..1F34F ; Emoji # E0.6 [4] (🍌..🍏) banana..green apple +1F350 ; Emoji # E1.0 [1] (🍐) pear +1F351..1F37B ; Emoji # E0.6 [43] (🍑..🍻) peach..clinking beer mugs +1F37C ; Emoji # E1.0 [1] (🍼) baby bottle +1F37D ; Emoji # E0.7 [1] (🍽️) fork and knife with plate +1F37E..1F37F ; Emoji # E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn +1F380..1F393 ; Emoji # E0.6 [20] (🎀..🎓) ribbon..graduation cap +1F396..1F397 ; Emoji # E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon +1F399..1F39B ; Emoji # E0.7 [3] (🎙️..🎛️) studio microphone..control knobs +1F39E..1F39F ; Emoji # E0.7 [2] (🎞️..🎟️) film frames..admission tickets +1F3A0..1F3C4 ; Emoji # E0.6 [37] (🎠..🏄) carousel horse..person surfing +1F3C5 ; Emoji # E1.0 [1] (🏅) sports medal +1F3C6 ; Emoji # E0.6 [1] (🏆) trophy +1F3C7 ; Emoji # E1.0 [1] (🏇) horse racing +1F3C8 ; Emoji # E0.6 [1] (🏈) american football +1F3C9 ; Emoji # E1.0 [1] (🏉) rugby football +1F3CA ; Emoji # E0.6 [1] (🏊) person swimming +1F3CB..1F3CE ; Emoji # E0.7 [4] (🏋️..🏎️) person lifting weights..racing car +1F3CF..1F3D3 ; Emoji # E1.0 [5] (🏏..🏓) cricket game..ping pong +1F3D4..1F3DF ; Emoji # E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium +1F3E0..1F3E3 ; Emoji # E0.6 [4] (🏠..🏣) house..Japanese post office +1F3E4 ; Emoji # E1.0 [1] (🏤) post office +1F3E5..1F3F0 ; Emoji # E0.6 [12] (🏥..🏰) hospital..castle +1F3F3 ; Emoji # E0.7 [1] (🏳️) white flag +1F3F4 ; Emoji # E1.0 [1] (🏴) black flag +1F3F5 ; Emoji # E0.7 [1] (🏵️) rosette +1F3F7 ; Emoji # E0.7 [1] (🏷️) label +1F3F8..1F407 ; Emoji # E1.0 [16] (🏸..🐇) badminton..rabbit +1F408 ; Emoji # E0.7 [1] (🐈) cat +1F409..1F40B ; Emoji # E1.0 [3] (🐉..🐋) dragon..whale +1F40C..1F40E ; Emoji # E0.6 [3] (🐌..🐎) snail..horse +1F40F..1F410 ; Emoji # E1.0 [2] (🐏..🐐) ram..goat +1F411..1F412 ; Emoji # E0.6 [2] (🐑..🐒) ewe..monkey +1F413 ; Emoji # E1.0 [1] (🐓) rooster +1F414 ; Emoji # E0.6 [1] (🐔) chicken +1F415 ; Emoji # E0.7 [1] (🐕) dog +1F416 ; Emoji # E1.0 [1] (🐖) pig +1F417..1F429 ; Emoji # E0.6 [19] (🐗..🐩) boar..poodle +1F42A ; Emoji # E1.0 [1] (🐪) camel +1F42B..1F43E ; Emoji # E0.6 [20] (🐫..🐾) two-hump camel..paw prints +1F43F ; Emoji # E0.7 [1] (🐿️) chipmunk +1F440 ; Emoji # E0.6 [1] (👀) eyes +1F441 ; Emoji # E0.7 [1] (👁️) eye +1F442..1F464 ; Emoji # E0.6 [35] (👂..👤) ear..bust in silhouette +1F465 ; Emoji # E1.0 [1] (👥) busts in silhouette +1F466..1F46B ; Emoji # E0.6 [6] (👦..👫) boy..woman and man holding hands +1F46C..1F46D ; Emoji # E1.0 [2] (👬..👭) men holding hands..women holding hands +1F46E..1F4AC ; Emoji # E0.6 [63] (👮..💬) police officer..speech balloon +1F4AD ; Emoji # E1.0 [1] (💭) thought balloon +1F4AE..1F4B5 ; Emoji # E0.6 [8] (💮..💵) white flower..dollar banknote +1F4B6..1F4B7 ; Emoji # E1.0 [2] (💶..💷) euro banknote..pound banknote +1F4B8..1F4EB ; Emoji # E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag +1F4EC..1F4ED ; Emoji # E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag +1F4EE ; Emoji # E0.6 [1] (📮) postbox +1F4EF ; Emoji # E1.0 [1] (📯) postal horn +1F4F0..1F4F4 ; Emoji # E0.6 [5] (📰..📴) newspaper..mobile phone off +1F4F5 ; Emoji # E1.0 [1] (📵) no mobile phones +1F4F6..1F4F7 ; Emoji # E0.6 [2] (📶..📷) antenna bars..camera +1F4F8 ; Emoji # E1.0 [1] (📸) camera with flash +1F4F9..1F4FC ; Emoji # E0.6 [4] (📹..📼) video camera..videocassette +1F4FD ; Emoji # E0.7 [1] (📽️) film projector +1F4FF..1F502 ; Emoji # E1.0 [4] (📿..🔂) prayer beads..repeat single button +1F503 ; Emoji # E0.6 [1] (🔃) clockwise vertical arrows +1F504..1F507 ; Emoji # E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker +1F508 ; Emoji # E0.7 [1] (🔈) speaker low volume +1F509 ; Emoji # E1.0 [1] (🔉) speaker medium volume +1F50A..1F514 ; Emoji # E0.6 [11] (🔊..🔔) speaker high volume..bell +1F515 ; Emoji # E1.0 [1] (🔕) bell with slash +1F516..1F52B ; Emoji # E0.6 [22] (🔖..🔫) bookmark..water pistol +1F52C..1F52D ; Emoji # E1.0 [2] (🔬..🔭) microscope..telescope +1F52E..1F53D ; Emoji # E0.6 [16] (🔮..🔽) crystal ball..downwards button +1F549..1F54A ; Emoji # E0.7 [2] (🕉️..🕊️) om..dove +1F54B..1F54E ; Emoji # E1.0 [4] (🕋..🕎) kaaba..menorah +1F550..1F55B ; Emoji # E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock +1F55C..1F567 ; Emoji # E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty +1F56F..1F570 ; Emoji # E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock +1F573..1F579 ; Emoji # E0.7 [7] (🕳️..🕹️) hole..joystick +1F57A ; Emoji # E3.0 [1] (🕺) man dancing +1F587 ; Emoji # E0.7 [1] (🖇️) linked paperclips +1F58A..1F58D ; Emoji # E0.7 [4] (🖊️..🖍️) pen..crayon +1F590 ; Emoji # E0.7 [1] (🖐️) hand with fingers splayed +1F595..1F596 ; Emoji # E1.0 [2] (🖕..🖖) middle finger..vulcan salute +1F5A4 ; Emoji # E3.0 [1] (🖤) black heart +1F5A5 ; Emoji # E0.7 [1] (🖥️) desktop computer +1F5A8 ; Emoji # E0.7 [1] (🖨️) printer +1F5B1..1F5B2 ; Emoji # E0.7 [2] (🖱️..🖲️) computer mouse..trackball +1F5BC ; Emoji # E0.7 [1] (🖼️) framed picture +1F5C2..1F5C4 ; Emoji # E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet +1F5D1..1F5D3 ; Emoji # E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar +1F5DC..1F5DE ; Emoji # E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper +1F5E1 ; Emoji # E0.7 [1] (🗡️) dagger +1F5E3 ; Emoji # E0.7 [1] (🗣️) speaking head +1F5E8 ; Emoji # E2.0 [1] (🗨️) left speech bubble +1F5EF ; Emoji # E0.7 [1] (🗯️) right anger bubble +1F5F3 ; Emoji # E0.7 [1] (🗳️) ballot box with ballot +1F5FA ; Emoji # E0.7 [1] (🗺️) world map +1F5FB..1F5FF ; Emoji # E0.6 [5] (🗻..🗿) mount fuji..moai +1F600 ; Emoji # E1.0 [1] (😀) grinning face +1F601..1F606 ; Emoji # E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face +1F607..1F608 ; Emoji # E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns +1F609..1F60D ; Emoji # E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes +1F60E ; Emoji # E1.0 [1] (😎) smiling face with sunglasses +1F60F ; Emoji # E0.6 [1] (😏) smirking face +1F610 ; Emoji # E0.7 [1] (😐) neutral face +1F611 ; Emoji # E1.0 [1] (😑) expressionless face +1F612..1F614 ; Emoji # E0.6 [3] (😒..😔) unamused face..pensive face +1F615 ; Emoji # E1.0 [1] (😕) confused face +1F616 ; Emoji # E0.6 [1] (😖) confounded face +1F617 ; Emoji # E1.0 [1] (😗) kissing face +1F618 ; Emoji # E0.6 [1] (😘) face blowing a kiss +1F619 ; Emoji # E1.0 [1] (😙) kissing face with smiling eyes +1F61A ; Emoji # E0.6 [1] (😚) kissing face with closed eyes +1F61B ; Emoji # E1.0 [1] (😛) face with tongue +1F61C..1F61E ; Emoji # E0.6 [3] (😜..😞) winking face with tongue..disappointed face +1F61F ; Emoji # E1.0 [1] (😟) worried face +1F620..1F625 ; Emoji # E0.6 [6] (😠..😥) angry face..sad but relieved face +1F626..1F627 ; Emoji # E1.0 [2] (😦..😧) frowning face with open mouth..anguished face +1F628..1F62B ; Emoji # E0.6 [4] (😨..😫) fearful face..tired face +1F62C ; Emoji # E1.0 [1] (😬) grimacing face +1F62D ; Emoji # E0.6 [1] (😭) loudly crying face +1F62E..1F62F ; Emoji # E1.0 [2] (😮..😯) face with open mouth..hushed face +1F630..1F633 ; Emoji # E0.6 [4] (😰..😳) anxious face with sweat..flushed face +1F634 ; Emoji # E1.0 [1] (😴) sleeping face +1F635 ; Emoji # E0.6 [1] (😵) face with crossed-out eyes +1F636 ; Emoji # E1.0 [1] (😶) face without mouth +1F637..1F640 ; Emoji # E0.6 [10] (😷..🙀) face with medical mask..weary cat +1F641..1F644 ; Emoji # E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes +1F645..1F64F ; Emoji # E0.6 [11] (🙅..🙏) person gesturing NO..folded hands +1F680 ; Emoji # E0.6 [1] (🚀) rocket +1F681..1F682 ; Emoji # E1.0 [2] (🚁..🚂) helicopter..locomotive +1F683..1F685 ; Emoji # E0.6 [3] (🚃..🚅) railway car..bullet train +1F686 ; Emoji # E1.0 [1] (🚆) train +1F687 ; Emoji # E0.6 [1] (🚇) metro +1F688 ; Emoji # E1.0 [1] (🚈) light rail +1F689 ; Emoji # E0.6 [1] (🚉) station +1F68A..1F68B ; Emoji # E1.0 [2] (🚊..🚋) tram..tram car +1F68C ; Emoji # E0.6 [1] (🚌) bus +1F68D ; Emoji # E0.7 [1] (🚍) oncoming bus +1F68E ; Emoji # E1.0 [1] (🚎) trolleybus +1F68F ; Emoji # E0.6 [1] (🚏) bus stop +1F690 ; Emoji # E1.0 [1] (🚐) minibus +1F691..1F693 ; Emoji # E0.6 [3] (🚑..🚓) ambulance..police car +1F694 ; Emoji # E0.7 [1] (🚔) oncoming police car +1F695 ; Emoji # E0.6 [1] (🚕) taxi +1F696 ; Emoji # E1.0 [1] (🚖) oncoming taxi +1F697 ; Emoji # E0.6 [1] (🚗) automobile +1F698 ; Emoji # E0.7 [1] (🚘) oncoming automobile +1F699..1F69A ; Emoji # E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck +1F69B..1F6A1 ; Emoji # E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway +1F6A2 ; Emoji # E0.6 [1] (🚢) ship +1F6A3 ; Emoji # E1.0 [1] (🚣) person rowing boat +1F6A4..1F6A5 ; Emoji # E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light +1F6A6 ; Emoji # E1.0 [1] (🚦) vertical traffic light +1F6A7..1F6AD ; Emoji # E0.6 [7] (🚧..🚭) construction..no smoking +1F6AE..1F6B1 ; Emoji # E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water +1F6B2 ; Emoji # E0.6 [1] (🚲) bicycle +1F6B3..1F6B5 ; Emoji # E1.0 [3] (🚳..🚵) no bicycles..person mountain biking +1F6B6 ; Emoji # E0.6 [1] (🚶) person walking +1F6B7..1F6B8 ; Emoji # E1.0 [2] (🚷..🚸) no pedestrians..children crossing +1F6B9..1F6BE ; Emoji # E0.6 [6] (🚹..🚾) men’s room..water closet +1F6BF ; Emoji # E1.0 [1] (🚿) shower +1F6C0 ; Emoji # E0.6 [1] (🛀) person taking bath +1F6C1..1F6C5 ; Emoji # E1.0 [5] (🛁..🛅) bathtub..left luggage +1F6CB ; Emoji # E0.7 [1] (🛋️) couch and lamp +1F6CC ; Emoji # E1.0 [1] (🛌) person in bed +1F6CD..1F6CF ; Emoji # E0.7 [3] (🛍️..🛏️) shopping bags..bed +1F6D0 ; Emoji # E1.0 [1] (🛐) place of worship +1F6D1..1F6D2 ; Emoji # E3.0 [2] (🛑..🛒) stop sign..shopping cart +1F6D5 ; Emoji # E12.0 [1] (🛕) hindu temple +1F6D6..1F6D7 ; Emoji # E13.0 [2] (🛖..🛗) hut..elevator +1F6DC ; Emoji # E15.0 [1] (🛜) wireless +1F6DD..1F6DF ; Emoji # E14.0 [3] (🛝..🛟) playground slide..ring buoy +1F6E0..1F6E5 ; Emoji # E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat +1F6E9 ; Emoji # E0.7 [1] (🛩️) small airplane +1F6EB..1F6EC ; Emoji # E1.0 [2] (🛫..🛬) airplane departure..airplane arrival +1F6F0 ; Emoji # E0.7 [1] (🛰️) satellite +1F6F3 ; Emoji # E0.7 [1] (🛳️) passenger ship +1F6F4..1F6F6 ; Emoji # E3.0 [3] (🛴..🛶) kick scooter..canoe +1F6F7..1F6F8 ; Emoji # E5.0 [2] (🛷..🛸) sled..flying saucer +1F6F9 ; Emoji # E11.0 [1] (🛹) skateboard +1F6FA ; Emoji # E12.0 [1] (🛺) auto rickshaw +1F6FB..1F6FC ; Emoji # E13.0 [2] (🛻..🛼) pickup truck..roller skate +1F7E0..1F7EB ; Emoji # E12.0 [12] (🟠..🟫) orange circle..brown square +1F7F0 ; Emoji # E14.0 [1] (🟰) heavy equals sign +1F90C ; Emoji # E13.0 [1] (🤌) pinched fingers +1F90D..1F90F ; Emoji # E12.0 [3] (🤍..🤏) white heart..pinching hand +1F910..1F918 ; Emoji # E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns +1F919..1F91E ; Emoji # E3.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Emoji # E5.0 [1] (🤟) love-you gesture +1F920..1F927 ; Emoji # E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face +1F928..1F92F ; Emoji # E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head +1F930 ; Emoji # E3.0 [1] (🤰) pregnant woman +1F931..1F932 ; Emoji # E5.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F93A ; Emoji # E3.0 [8] (🤳..🤺) selfie..person fencing +1F93C..1F93E ; Emoji # E3.0 [3] (🤼..🤾) people wrestling..person playing handball +1F93F ; Emoji # E12.0 [1] (🤿) diving mask +1F940..1F945 ; Emoji # E3.0 [6] (🥀..🥅) wilted flower..goal net +1F947..1F94B ; Emoji # E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform +1F94C ; Emoji # E5.0 [1] (🥌) curling stone +1F94D..1F94F ; Emoji # E11.0 [3] (🥍..🥏) lacrosse..flying disc +1F950..1F95E ; Emoji # E3.0 [15] (🥐..🥞) croissant..pancakes +1F95F..1F96B ; Emoji # E5.0 [13] (🥟..🥫) dumpling..canned food +1F96C..1F970 ; Emoji # E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts +1F971 ; Emoji # E12.0 [1] (🥱) yawning face +1F972 ; Emoji # E13.0 [1] (🥲) smiling face with tear +1F973..1F976 ; Emoji # E11.0 [4] (🥳..🥶) partying face..cold face +1F977..1F978 ; Emoji # E13.0 [2] (🥷..🥸) ninja..disguised face +1F979 ; Emoji # E14.0 [1] (🥹) face holding back tears +1F97A ; Emoji # E11.0 [1] (🥺) pleading face +1F97B ; Emoji # E12.0 [1] (🥻) sari +1F97C..1F97F ; Emoji # E11.0 [4] (🥼..🥿) lab coat..flat shoe +1F980..1F984 ; Emoji # E1.0 [5] (🦀..🦄) crab..unicorn +1F985..1F991 ; Emoji # E3.0 [13] (🦅..🦑) eagle..squid +1F992..1F997 ; Emoji # E5.0 [6] (🦒..🦗) giraffe..cricket +1F998..1F9A2 ; Emoji # E11.0 [11] (🦘..🦢) kangaroo..swan +1F9A3..1F9A4 ; Emoji # E13.0 [2] (🦣..🦤) mammoth..dodo +1F9A5..1F9AA ; Emoji # E12.0 [6] (🦥..🦪) sloth..oyster +1F9AB..1F9AD ; Emoji # E13.0 [3] (🦫..🦭) beaver..seal +1F9AE..1F9AF ; Emoji # E12.0 [2] (🦮..🦯) guide dog..white cane +1F9B0..1F9B9 ; Emoji # E11.0 [10] (🦰..🦹) red hair..supervillain +1F9BA..1F9BF ; Emoji # E12.0 [6] (🦺..🦿) safety vest..mechanical leg +1F9C0 ; Emoji # E1.0 [1] (🧀) cheese wedge +1F9C1..1F9C2 ; Emoji # E11.0 [2] (🧁..🧂) cupcake..salt +1F9C3..1F9CA ; Emoji # E12.0 [8] (🧃..🧊) beverage box..ice +1F9CB ; Emoji # E13.0 [1] (🧋) bubble tea +1F9CC ; Emoji # E14.0 [1] (🧌) troll +1F9CD..1F9CF ; Emoji # E12.0 [3] (🧍..🧏) person standing..deaf person +1F9D0..1F9E6 ; Emoji # E5.0 [23] (🧐..🧦) face with monocle..socks +1F9E7..1F9FF ; Emoji # E11.0 [25] (🧧..🧿) red envelope..nazar amulet +1FA70..1FA73 ; Emoji # E12.0 [4] (🩰..🩳) ballet shoes..shorts +1FA74 ; Emoji # E13.0 [1] (🩴) thong sandal +1FA75..1FA77 ; Emoji # E15.0 [3] (🩵..🩷) light blue heart..pink heart +1FA78..1FA7A ; Emoji # E12.0 [3] (🩸..🩺) drop of blood..stethoscope +1FA7B..1FA7C ; Emoji # E14.0 [2] (🩻..🩼) x-ray..crutch +1FA80..1FA82 ; Emoji # E12.0 [3] (🪀..🪂) yo-yo..parachute +1FA83..1FA86 ; Emoji # E13.0 [4] (🪃..🪆) boomerang..nesting dolls +1FA87..1FA88 ; Emoji # E15.0 [2] (🪇..🪈) maracas..flute +1FA90..1FA95 ; Emoji # E12.0 [6] (🪐..🪕) ringed planet..banjo +1FA96..1FAA8 ; Emoji # E13.0 [19] (🪖..🪨) military helmet..rock +1FAA9..1FAAC ; Emoji # E14.0 [4] (🪩..🪬) mirror ball..hamsa +1FAAD..1FAAF ; Emoji # E15.0 [3] (🪭..🪯) folding hand fan..khanda +1FAB0..1FAB6 ; Emoji # E13.0 [7] (🪰..🪶) fly..feather +1FAB7..1FABA ; Emoji # E14.0 [4] (🪷..🪺) lotus..nest with eggs +1FABB..1FABD ; Emoji # E15.0 [3] (🪻..🪽) hyacinth..wing +1FABF ; Emoji # E15.0 [1] (🪿) goose +1FAC0..1FAC2 ; Emoji # E13.0 [3] (🫀..🫂) anatomical heart..people hugging +1FAC3..1FAC5 ; Emoji # E14.0 [3] (🫃..🫅) pregnant man..person with crown +1FACE..1FACF ; Emoji # E15.0 [2] (🫎..🫏) moose..donkey +1FAD0..1FAD6 ; Emoji # E13.0 [7] (🫐..🫖) blueberries..teapot +1FAD7..1FAD9 ; Emoji # E14.0 [3] (🫗..🫙) pouring liquid..jar +1FADA..1FADB ; Emoji # E15.0 [2] (🫚..🫛) ginger root..pea pod +1FAE0..1FAE7 ; Emoji # E14.0 [8] (🫠..🫧) melting face..bubbles +1FAE8 ; Emoji # E15.0 [1] (🫨) shaking face +1FAF0..1FAF6 ; Emoji # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands +1FAF7..1FAF8 ; Emoji # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand + +# Total elements: 1424 + +# ================================================ + +# All omitted code points have Emoji_Presentation=No + +231A..231B ; Emoji_Presentation # E0.6 [2] (⌚..⌛) watch..hourglass done +23E9..23EC ; Emoji_Presentation # E0.6 [4] (⏩..⏬) fast-forward button..fast down button +23F0 ; Emoji_Presentation # E0.6 [1] (⏰) alarm clock +23F3 ; Emoji_Presentation # E0.6 [1] (⏳) hourglass not done +25FD..25FE ; Emoji_Presentation # E0.6 [2] (◽..◾) white medium-small square..black medium-small square +2614..2615 ; Emoji_Presentation # E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage +2648..2653 ; Emoji_Presentation # E0.6 [12] (♈..♓) Aries..Pisces +267F ; Emoji_Presentation # E0.6 [1] (♿) wheelchair symbol +2693 ; Emoji_Presentation # E0.6 [1] (⚓) anchor +26A1 ; Emoji_Presentation # E0.6 [1] (⚡) high voltage +26AA..26AB ; Emoji_Presentation # E0.6 [2] (⚪..⚫) white circle..black circle +26BD..26BE ; Emoji_Presentation # E0.6 [2] (⚽..⚾) soccer ball..baseball +26C4..26C5 ; Emoji_Presentation # E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud +26CE ; Emoji_Presentation # E0.6 [1] (⛎) Ophiuchus +26D4 ; Emoji_Presentation # E0.6 [1] (⛔) no entry +26EA ; Emoji_Presentation # E0.6 [1] (⛪) church +26F2..26F3 ; Emoji_Presentation # E0.6 [2] (⛲..⛳) fountain..flag in hole +26F5 ; Emoji_Presentation # E0.6 [1] (⛵) sailboat +26FA ; Emoji_Presentation # E0.6 [1] (⛺) tent +26FD ; Emoji_Presentation # E0.6 [1] (⛽) fuel pump +2705 ; Emoji_Presentation # E0.6 [1] (✅) check mark button +270A..270B ; Emoji_Presentation # E0.6 [2] (✊..✋) raised fist..raised hand +2728 ; Emoji_Presentation # E0.6 [1] (✨) sparkles +274C ; Emoji_Presentation # E0.6 [1] (❌) cross mark +274E ; Emoji_Presentation # E0.6 [1] (❎) cross mark button +2753..2755 ; Emoji_Presentation # E0.6 [3] (❓..❕) red question mark..white exclamation mark +2757 ; Emoji_Presentation # E0.6 [1] (❗) red exclamation mark +2795..2797 ; Emoji_Presentation # E0.6 [3] (➕..➗) plus..divide +27B0 ; Emoji_Presentation # E0.6 [1] (➰) curly loop +27BF ; Emoji_Presentation # E1.0 [1] (➿) double curly loop +2B1B..2B1C ; Emoji_Presentation # E0.6 [2] (⬛..⬜) black large square..white large square +2B50 ; Emoji_Presentation # E0.6 [1] (⭐) star +2B55 ; Emoji_Presentation # E0.6 [1] (⭕) hollow red circle +1F004 ; Emoji_Presentation # E0.6 [1] (🀄) mahjong red dragon +1F0CF ; Emoji_Presentation # E0.6 [1] (🃏) joker +1F18E ; Emoji_Presentation # E0.6 [1] (🆎) AB button (blood type) +1F191..1F19A ; Emoji_Presentation # E0.6 [10] (🆑..🆚) CL button..VS button +1F1E6..1F1FF ; Emoji_Presentation # E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z +1F201 ; Emoji_Presentation # E0.6 [1] (🈁) Japanese “here” button +1F21A ; Emoji_Presentation # E0.6 [1] (🈚) Japanese “free of charge” button +1F22F ; Emoji_Presentation # E0.6 [1] (🈯) Japanese “reserved” button +1F232..1F236 ; Emoji_Presentation # E0.6 [5] (🈲..🈶) Japanese “prohibited” button..Japanese “not free of charge” button +1F238..1F23A ; Emoji_Presentation # E0.6 [3] (🈸..🈺) Japanese “application” button..Japanese “open for business” button +1F250..1F251 ; Emoji_Presentation # E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button +1F300..1F30C ; Emoji_Presentation # E0.6 [13] (🌀..🌌) cyclone..milky way +1F30D..1F30E ; Emoji_Presentation # E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas +1F30F ; Emoji_Presentation # E0.6 [1] (🌏) globe showing Asia-Australia +1F310 ; Emoji_Presentation # E1.0 [1] (🌐) globe with meridians +1F311 ; Emoji_Presentation # E0.6 [1] (🌑) new moon +1F312 ; Emoji_Presentation # E1.0 [1] (🌒) waxing crescent moon +1F313..1F315 ; Emoji_Presentation # E0.6 [3] (🌓..🌕) first quarter moon..full moon +1F316..1F318 ; Emoji_Presentation # E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon +1F319 ; Emoji_Presentation # E0.6 [1] (🌙) crescent moon +1F31A ; Emoji_Presentation # E1.0 [1] (🌚) new moon face +1F31B ; Emoji_Presentation # E0.6 [1] (🌛) first quarter moon face +1F31C ; Emoji_Presentation # E0.7 [1] (🌜) last quarter moon face +1F31D..1F31E ; Emoji_Presentation # E1.0 [2] (🌝..🌞) full moon face..sun with face +1F31F..1F320 ; Emoji_Presentation # E0.6 [2] (🌟..🌠) glowing star..shooting star +1F32D..1F32F ; Emoji_Presentation # E1.0 [3] (🌭..🌯) hot dog..burrito +1F330..1F331 ; Emoji_Presentation # E0.6 [2] (🌰..🌱) chestnut..seedling +1F332..1F333 ; Emoji_Presentation # E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree +1F334..1F335 ; Emoji_Presentation # E0.6 [2] (🌴..🌵) palm tree..cactus +1F337..1F34A ; Emoji_Presentation # E0.6 [20] (🌷..🍊) tulip..tangerine +1F34B ; Emoji_Presentation # E1.0 [1] (🍋) lemon +1F34C..1F34F ; Emoji_Presentation # E0.6 [4] (🍌..🍏) banana..green apple +1F350 ; Emoji_Presentation # E1.0 [1] (🍐) pear +1F351..1F37B ; Emoji_Presentation # E0.6 [43] (🍑..🍻) peach..clinking beer mugs +1F37C ; Emoji_Presentation # E1.0 [1] (🍼) baby bottle +1F37E..1F37F ; Emoji_Presentation # E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn +1F380..1F393 ; Emoji_Presentation # E0.6 [20] (🎀..🎓) ribbon..graduation cap +1F3A0..1F3C4 ; Emoji_Presentation # E0.6 [37] (🎠..🏄) carousel horse..person surfing +1F3C5 ; Emoji_Presentation # E1.0 [1] (🏅) sports medal +1F3C6 ; Emoji_Presentation # E0.6 [1] (🏆) trophy +1F3C7 ; Emoji_Presentation # E1.0 [1] (🏇) horse racing +1F3C8 ; Emoji_Presentation # E0.6 [1] (🏈) american football +1F3C9 ; Emoji_Presentation # E1.0 [1] (🏉) rugby football +1F3CA ; Emoji_Presentation # E0.6 [1] (🏊) person swimming +1F3CF..1F3D3 ; Emoji_Presentation # E1.0 [5] (🏏..🏓) cricket game..ping pong +1F3E0..1F3E3 ; Emoji_Presentation # E0.6 [4] (🏠..🏣) house..Japanese post office +1F3E4 ; Emoji_Presentation # E1.0 [1] (🏤) post office +1F3E5..1F3F0 ; Emoji_Presentation # E0.6 [12] (🏥..🏰) hospital..castle +1F3F4 ; Emoji_Presentation # E1.0 [1] (🏴) black flag +1F3F8..1F407 ; Emoji_Presentation # E1.0 [16] (🏸..🐇) badminton..rabbit +1F408 ; Emoji_Presentation # E0.7 [1] (🐈) cat +1F409..1F40B ; Emoji_Presentation # E1.0 [3] (🐉..🐋) dragon..whale +1F40C..1F40E ; Emoji_Presentation # E0.6 [3] (🐌..🐎) snail..horse +1F40F..1F410 ; Emoji_Presentation # E1.0 [2] (🐏..🐐) ram..goat +1F411..1F412 ; Emoji_Presentation # E0.6 [2] (🐑..🐒) ewe..monkey +1F413 ; Emoji_Presentation # E1.0 [1] (🐓) rooster +1F414 ; Emoji_Presentation # E0.6 [1] (🐔) chicken +1F415 ; Emoji_Presentation # E0.7 [1] (🐕) dog +1F416 ; Emoji_Presentation # E1.0 [1] (🐖) pig +1F417..1F429 ; Emoji_Presentation # E0.6 [19] (🐗..🐩) boar..poodle +1F42A ; Emoji_Presentation # E1.0 [1] (🐪) camel +1F42B..1F43E ; Emoji_Presentation # E0.6 [20] (🐫..🐾) two-hump camel..paw prints +1F440 ; Emoji_Presentation # E0.6 [1] (👀) eyes +1F442..1F464 ; Emoji_Presentation # E0.6 [35] (👂..👤) ear..bust in silhouette +1F465 ; Emoji_Presentation # E1.0 [1] (👥) busts in silhouette +1F466..1F46B ; Emoji_Presentation # E0.6 [6] (👦..👫) boy..woman and man holding hands +1F46C..1F46D ; Emoji_Presentation # E1.0 [2] (👬..👭) men holding hands..women holding hands +1F46E..1F4AC ; Emoji_Presentation # E0.6 [63] (👮..💬) police officer..speech balloon +1F4AD ; Emoji_Presentation # E1.0 [1] (💭) thought balloon +1F4AE..1F4B5 ; Emoji_Presentation # E0.6 [8] (💮..💵) white flower..dollar banknote +1F4B6..1F4B7 ; Emoji_Presentation # E1.0 [2] (💶..💷) euro banknote..pound banknote +1F4B8..1F4EB ; Emoji_Presentation # E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag +1F4EC..1F4ED ; Emoji_Presentation # E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag +1F4EE ; Emoji_Presentation # E0.6 [1] (📮) postbox +1F4EF ; Emoji_Presentation # E1.0 [1] (📯) postal horn +1F4F0..1F4F4 ; Emoji_Presentation # E0.6 [5] (📰..📴) newspaper..mobile phone off +1F4F5 ; Emoji_Presentation # E1.0 [1] (📵) no mobile phones +1F4F6..1F4F7 ; Emoji_Presentation # E0.6 [2] (📶..📷) antenna bars..camera +1F4F8 ; Emoji_Presentation # E1.0 [1] (📸) camera with flash +1F4F9..1F4FC ; Emoji_Presentation # E0.6 [4] (📹..📼) video camera..videocassette +1F4FF..1F502 ; Emoji_Presentation # E1.0 [4] (📿..🔂) prayer beads..repeat single button +1F503 ; Emoji_Presentation # E0.6 [1] (🔃) clockwise vertical arrows +1F504..1F507 ; Emoji_Presentation # E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker +1F508 ; Emoji_Presentation # E0.7 [1] (🔈) speaker low volume +1F509 ; Emoji_Presentation # E1.0 [1] (🔉) speaker medium volume +1F50A..1F514 ; Emoji_Presentation # E0.6 [11] (🔊..🔔) speaker high volume..bell +1F515 ; Emoji_Presentation # E1.0 [1] (🔕) bell with slash +1F516..1F52B ; Emoji_Presentation # E0.6 [22] (🔖..🔫) bookmark..water pistol +1F52C..1F52D ; Emoji_Presentation # E1.0 [2] (🔬..🔭) microscope..telescope +1F52E..1F53D ; Emoji_Presentation # E0.6 [16] (🔮..🔽) crystal ball..downwards button +1F54B..1F54E ; Emoji_Presentation # E1.0 [4] (🕋..🕎) kaaba..menorah +1F550..1F55B ; Emoji_Presentation # E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock +1F55C..1F567 ; Emoji_Presentation # E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty +1F57A ; Emoji_Presentation # E3.0 [1] (🕺) man dancing +1F595..1F596 ; Emoji_Presentation # E1.0 [2] (🖕..🖖) middle finger..vulcan salute +1F5A4 ; Emoji_Presentation # E3.0 [1] (🖤) black heart +1F5FB..1F5FF ; Emoji_Presentation # E0.6 [5] (🗻..🗿) mount fuji..moai +1F600 ; Emoji_Presentation # E1.0 [1] (😀) grinning face +1F601..1F606 ; Emoji_Presentation # E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face +1F607..1F608 ; Emoji_Presentation # E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns +1F609..1F60D ; Emoji_Presentation # E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes +1F60E ; Emoji_Presentation # E1.0 [1] (😎) smiling face with sunglasses +1F60F ; Emoji_Presentation # E0.6 [1] (😏) smirking face +1F610 ; Emoji_Presentation # E0.7 [1] (😐) neutral face +1F611 ; Emoji_Presentation # E1.0 [1] (😑) expressionless face +1F612..1F614 ; Emoji_Presentation # E0.6 [3] (😒..😔) unamused face..pensive face +1F615 ; Emoji_Presentation # E1.0 [1] (😕) confused face +1F616 ; Emoji_Presentation # E0.6 [1] (😖) confounded face +1F617 ; Emoji_Presentation # E1.0 [1] (😗) kissing face +1F618 ; Emoji_Presentation # E0.6 [1] (😘) face blowing a kiss +1F619 ; Emoji_Presentation # E1.0 [1] (😙) kissing face with smiling eyes +1F61A ; Emoji_Presentation # E0.6 [1] (😚) kissing face with closed eyes +1F61B ; Emoji_Presentation # E1.0 [1] (😛) face with tongue +1F61C..1F61E ; Emoji_Presentation # E0.6 [3] (😜..😞) winking face with tongue..disappointed face +1F61F ; Emoji_Presentation # E1.0 [1] (😟) worried face +1F620..1F625 ; Emoji_Presentation # E0.6 [6] (😠..😥) angry face..sad but relieved face +1F626..1F627 ; Emoji_Presentation # E1.0 [2] (😦..😧) frowning face with open mouth..anguished face +1F628..1F62B ; Emoji_Presentation # E0.6 [4] (😨..😫) fearful face..tired face +1F62C ; Emoji_Presentation # E1.0 [1] (😬) grimacing face +1F62D ; Emoji_Presentation # E0.6 [1] (😭) loudly crying face +1F62E..1F62F ; Emoji_Presentation # E1.0 [2] (😮..😯) face with open mouth..hushed face +1F630..1F633 ; Emoji_Presentation # E0.6 [4] (😰..😳) anxious face with sweat..flushed face +1F634 ; Emoji_Presentation # E1.0 [1] (😴) sleeping face +1F635 ; Emoji_Presentation # E0.6 [1] (😵) face with crossed-out eyes +1F636 ; Emoji_Presentation # E1.0 [1] (😶) face without mouth +1F637..1F640 ; Emoji_Presentation # E0.6 [10] (😷..🙀) face with medical mask..weary cat +1F641..1F644 ; Emoji_Presentation # E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes +1F645..1F64F ; Emoji_Presentation # E0.6 [11] (🙅..🙏) person gesturing NO..folded hands +1F680 ; Emoji_Presentation # E0.6 [1] (🚀) rocket +1F681..1F682 ; Emoji_Presentation # E1.0 [2] (🚁..🚂) helicopter..locomotive +1F683..1F685 ; Emoji_Presentation # E0.6 [3] (🚃..🚅) railway car..bullet train +1F686 ; Emoji_Presentation # E1.0 [1] (🚆) train +1F687 ; Emoji_Presentation # E0.6 [1] (🚇) metro +1F688 ; Emoji_Presentation # E1.0 [1] (🚈) light rail +1F689 ; Emoji_Presentation # E0.6 [1] (🚉) station +1F68A..1F68B ; Emoji_Presentation # E1.0 [2] (🚊..🚋) tram..tram car +1F68C ; Emoji_Presentation # E0.6 [1] (🚌) bus +1F68D ; Emoji_Presentation # E0.7 [1] (🚍) oncoming bus +1F68E ; Emoji_Presentation # E1.0 [1] (🚎) trolleybus +1F68F ; Emoji_Presentation # E0.6 [1] (🚏) bus stop +1F690 ; Emoji_Presentation # E1.0 [1] (🚐) minibus +1F691..1F693 ; Emoji_Presentation # E0.6 [3] (🚑..🚓) ambulance..police car +1F694 ; Emoji_Presentation # E0.7 [1] (🚔) oncoming police car +1F695 ; Emoji_Presentation # E0.6 [1] (🚕) taxi +1F696 ; Emoji_Presentation # E1.0 [1] (🚖) oncoming taxi +1F697 ; Emoji_Presentation # E0.6 [1] (🚗) automobile +1F698 ; Emoji_Presentation # E0.7 [1] (🚘) oncoming automobile +1F699..1F69A ; Emoji_Presentation # E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck +1F69B..1F6A1 ; Emoji_Presentation # E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway +1F6A2 ; Emoji_Presentation # E0.6 [1] (🚢) ship +1F6A3 ; Emoji_Presentation # E1.0 [1] (🚣) person rowing boat +1F6A4..1F6A5 ; Emoji_Presentation # E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light +1F6A6 ; Emoji_Presentation # E1.0 [1] (🚦) vertical traffic light +1F6A7..1F6AD ; Emoji_Presentation # E0.6 [7] (🚧..🚭) construction..no smoking +1F6AE..1F6B1 ; Emoji_Presentation # E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water +1F6B2 ; Emoji_Presentation # E0.6 [1] (🚲) bicycle +1F6B3..1F6B5 ; Emoji_Presentation # E1.0 [3] (🚳..🚵) no bicycles..person mountain biking +1F6B6 ; Emoji_Presentation # E0.6 [1] (🚶) person walking +1F6B7..1F6B8 ; Emoji_Presentation # E1.0 [2] (🚷..🚸) no pedestrians..children crossing +1F6B9..1F6BE ; Emoji_Presentation # E0.6 [6] (🚹..🚾) men’s room..water closet +1F6BF ; Emoji_Presentation # E1.0 [1] (🚿) shower +1F6C0 ; Emoji_Presentation # E0.6 [1] (🛀) person taking bath +1F6C1..1F6C5 ; Emoji_Presentation # E1.0 [5] (🛁..🛅) bathtub..left luggage +1F6CC ; Emoji_Presentation # E1.0 [1] (🛌) person in bed +1F6D0 ; Emoji_Presentation # E1.0 [1] (🛐) place of worship +1F6D1..1F6D2 ; Emoji_Presentation # E3.0 [2] (🛑..🛒) stop sign..shopping cart +1F6D5 ; Emoji_Presentation # E12.0 [1] (🛕) hindu temple +1F6D6..1F6D7 ; Emoji_Presentation # E13.0 [2] (🛖..🛗) hut..elevator +1F6DC ; Emoji_Presentation # E15.0 [1] (🛜) wireless +1F6DD..1F6DF ; Emoji_Presentation # E14.0 [3] (🛝..🛟) playground slide..ring buoy +1F6EB..1F6EC ; Emoji_Presentation # E1.0 [2] (🛫..🛬) airplane departure..airplane arrival +1F6F4..1F6F6 ; Emoji_Presentation # E3.0 [3] (🛴..🛶) kick scooter..canoe +1F6F7..1F6F8 ; Emoji_Presentation # E5.0 [2] (🛷..🛸) sled..flying saucer +1F6F9 ; Emoji_Presentation # E11.0 [1] (🛹) skateboard +1F6FA ; Emoji_Presentation # E12.0 [1] (🛺) auto rickshaw +1F6FB..1F6FC ; Emoji_Presentation # E13.0 [2] (🛻..🛼) pickup truck..roller skate +1F7E0..1F7EB ; Emoji_Presentation # E12.0 [12] (🟠..🟫) orange circle..brown square +1F7F0 ; Emoji_Presentation # E14.0 [1] (🟰) heavy equals sign +1F90C ; Emoji_Presentation # E13.0 [1] (🤌) pinched fingers +1F90D..1F90F ; Emoji_Presentation # E12.0 [3] (🤍..🤏) white heart..pinching hand +1F910..1F918 ; Emoji_Presentation # E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns +1F919..1F91E ; Emoji_Presentation # E3.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Emoji_Presentation # E5.0 [1] (🤟) love-you gesture +1F920..1F927 ; Emoji_Presentation # E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face +1F928..1F92F ; Emoji_Presentation # E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head +1F930 ; Emoji_Presentation # E3.0 [1] (🤰) pregnant woman +1F931..1F932 ; Emoji_Presentation # E5.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F93A ; Emoji_Presentation # E3.0 [8] (🤳..🤺) selfie..person fencing +1F93C..1F93E ; Emoji_Presentation # E3.0 [3] (🤼..🤾) people wrestling..person playing handball +1F93F ; Emoji_Presentation # E12.0 [1] (🤿) diving mask +1F940..1F945 ; Emoji_Presentation # E3.0 [6] (🥀..🥅) wilted flower..goal net +1F947..1F94B ; Emoji_Presentation # E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform +1F94C ; Emoji_Presentation # E5.0 [1] (🥌) curling stone +1F94D..1F94F ; Emoji_Presentation # E11.0 [3] (🥍..🥏) lacrosse..flying disc +1F950..1F95E ; Emoji_Presentation # E3.0 [15] (🥐..🥞) croissant..pancakes +1F95F..1F96B ; Emoji_Presentation # E5.0 [13] (🥟..🥫) dumpling..canned food +1F96C..1F970 ; Emoji_Presentation # E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts +1F971 ; Emoji_Presentation # E12.0 [1] (🥱) yawning face +1F972 ; Emoji_Presentation # E13.0 [1] (🥲) smiling face with tear +1F973..1F976 ; Emoji_Presentation # E11.0 [4] (🥳..🥶) partying face..cold face +1F977..1F978 ; Emoji_Presentation # E13.0 [2] (🥷..🥸) ninja..disguised face +1F979 ; Emoji_Presentation # E14.0 [1] (🥹) face holding back tears +1F97A ; Emoji_Presentation # E11.0 [1] (🥺) pleading face +1F97B ; Emoji_Presentation # E12.0 [1] (🥻) sari +1F97C..1F97F ; Emoji_Presentation # E11.0 [4] (🥼..🥿) lab coat..flat shoe +1F980..1F984 ; Emoji_Presentation # E1.0 [5] (🦀..🦄) crab..unicorn +1F985..1F991 ; Emoji_Presentation # E3.0 [13] (🦅..🦑) eagle..squid +1F992..1F997 ; Emoji_Presentation # E5.0 [6] (🦒..🦗) giraffe..cricket +1F998..1F9A2 ; Emoji_Presentation # E11.0 [11] (🦘..🦢) kangaroo..swan +1F9A3..1F9A4 ; Emoji_Presentation # E13.0 [2] (🦣..🦤) mammoth..dodo +1F9A5..1F9AA ; Emoji_Presentation # E12.0 [6] (🦥..🦪) sloth..oyster +1F9AB..1F9AD ; Emoji_Presentation # E13.0 [3] (🦫..🦭) beaver..seal +1F9AE..1F9AF ; Emoji_Presentation # E12.0 [2] (🦮..🦯) guide dog..white cane +1F9B0..1F9B9 ; Emoji_Presentation # E11.0 [10] (🦰..🦹) red hair..supervillain +1F9BA..1F9BF ; Emoji_Presentation # E12.0 [6] (🦺..🦿) safety vest..mechanical leg +1F9C0 ; Emoji_Presentation # E1.0 [1] (🧀) cheese wedge +1F9C1..1F9C2 ; Emoji_Presentation # E11.0 [2] (🧁..🧂) cupcake..salt +1F9C3..1F9CA ; Emoji_Presentation # E12.0 [8] (🧃..🧊) beverage box..ice +1F9CB ; Emoji_Presentation # E13.0 [1] (🧋) bubble tea +1F9CC ; Emoji_Presentation # E14.0 [1] (🧌) troll +1F9CD..1F9CF ; Emoji_Presentation # E12.0 [3] (🧍..🧏) person standing..deaf person +1F9D0..1F9E6 ; Emoji_Presentation # E5.0 [23] (🧐..🧦) face with monocle..socks +1F9E7..1F9FF ; Emoji_Presentation # E11.0 [25] (🧧..🧿) red envelope..nazar amulet +1FA70..1FA73 ; Emoji_Presentation # E12.0 [4] (🩰..🩳) ballet shoes..shorts +1FA74 ; Emoji_Presentation # E13.0 [1] (🩴) thong sandal +1FA75..1FA77 ; Emoji_Presentation # E15.0 [3] (🩵..🩷) light blue heart..pink heart +1FA78..1FA7A ; Emoji_Presentation # E12.0 [3] (🩸..🩺) drop of blood..stethoscope +1FA7B..1FA7C ; Emoji_Presentation # E14.0 [2] (🩻..🩼) x-ray..crutch +1FA80..1FA82 ; Emoji_Presentation # E12.0 [3] (🪀..🪂) yo-yo..parachute +1FA83..1FA86 ; Emoji_Presentation # E13.0 [4] (🪃..🪆) boomerang..nesting dolls +1FA87..1FA88 ; Emoji_Presentation # E15.0 [2] (🪇..🪈) maracas..flute +1FA90..1FA95 ; Emoji_Presentation # E12.0 [6] (🪐..🪕) ringed planet..banjo +1FA96..1FAA8 ; Emoji_Presentation # E13.0 [19] (🪖..🪨) military helmet..rock +1FAA9..1FAAC ; Emoji_Presentation # E14.0 [4] (🪩..🪬) mirror ball..hamsa +1FAAD..1FAAF ; Emoji_Presentation # E15.0 [3] (🪭..🪯) folding hand fan..khanda +1FAB0..1FAB6 ; Emoji_Presentation # E13.0 [7] (🪰..🪶) fly..feather +1FAB7..1FABA ; Emoji_Presentation # E14.0 [4] (🪷..🪺) lotus..nest with eggs +1FABB..1FABD ; Emoji_Presentation # E15.0 [3] (🪻..🪽) hyacinth..wing +1FABF ; Emoji_Presentation # E15.0 [1] (🪿) goose +1FAC0..1FAC2 ; Emoji_Presentation # E13.0 [3] (🫀..🫂) anatomical heart..people hugging +1FAC3..1FAC5 ; Emoji_Presentation # E14.0 [3] (🫃..🫅) pregnant man..person with crown +1FACE..1FACF ; Emoji_Presentation # E15.0 [2] (🫎..🫏) moose..donkey +1FAD0..1FAD6 ; Emoji_Presentation # E13.0 [7] (🫐..🫖) blueberries..teapot +1FAD7..1FAD9 ; Emoji_Presentation # E14.0 [3] (🫗..🫙) pouring liquid..jar +1FADA..1FADB ; Emoji_Presentation # E15.0 [2] (🫚..🫛) ginger root..pea pod +1FAE0..1FAE7 ; Emoji_Presentation # E14.0 [8] (🫠..🫧) melting face..bubbles +1FAE8 ; Emoji_Presentation # E15.0 [1] (🫨) shaking face +1FAF0..1FAF6 ; Emoji_Presentation # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands +1FAF7..1FAF8 ; Emoji_Presentation # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand + +# Total elements: 1205 + +# ================================================ + +# All omitted code points have Emoji_Modifier=No + +1F3FB..1F3FF ; Emoji_Modifier # E1.0 [5] (🏻..🏿) light skin tone..dark skin tone + +# Total elements: 5 + +# ================================================ + +# All omitted code points have Emoji_Modifier_Base=No + +261D ; Emoji_Modifier_Base # E0.6 [1] (☝️) index pointing up +26F9 ; Emoji_Modifier_Base # E0.7 [1] (⛹️) person bouncing ball +270A..270C ; Emoji_Modifier_Base # E0.6 [3] (✊..✌️) raised fist..victory hand +270D ; Emoji_Modifier_Base # E0.7 [1] (✍️) writing hand +1F385 ; Emoji_Modifier_Base # E0.6 [1] (🎅) Santa Claus +1F3C2..1F3C4 ; Emoji_Modifier_Base # E0.6 [3] (🏂..🏄) snowboarder..person surfing +1F3C7 ; Emoji_Modifier_Base # E1.0 [1] (🏇) horse racing +1F3CA ; Emoji_Modifier_Base # E0.6 [1] (🏊) person swimming +1F3CB..1F3CC ; Emoji_Modifier_Base # E0.7 [2] (🏋️..🏌️) person lifting weights..person golfing +1F442..1F443 ; Emoji_Modifier_Base # E0.6 [2] (👂..👃) ear..nose +1F446..1F450 ; Emoji_Modifier_Base # E0.6 [11] (👆..👐) backhand index pointing up..open hands +1F466..1F46B ; Emoji_Modifier_Base # E0.6 [6] (👦..👫) boy..woman and man holding hands +1F46C..1F46D ; Emoji_Modifier_Base # E1.0 [2] (👬..👭) men holding hands..women holding hands +1F46E..1F478 ; Emoji_Modifier_Base # E0.6 [11] (👮..👸) police officer..princess +1F47C ; Emoji_Modifier_Base # E0.6 [1] (👼) baby angel +1F481..1F483 ; Emoji_Modifier_Base # E0.6 [3] (💁..💃) person tipping hand..woman dancing +1F485..1F487 ; Emoji_Modifier_Base # E0.6 [3] (💅..💇) nail polish..person getting haircut +1F48F ; Emoji_Modifier_Base # E0.6 [1] (💏) kiss +1F491 ; Emoji_Modifier_Base # E0.6 [1] (💑) couple with heart +1F4AA ; Emoji_Modifier_Base # E0.6 [1] (💪) flexed biceps +1F574..1F575 ; Emoji_Modifier_Base # E0.7 [2] (🕴️..🕵️) person in suit levitating..detective +1F57A ; Emoji_Modifier_Base # E3.0 [1] (🕺) man dancing +1F590 ; Emoji_Modifier_Base # E0.7 [1] (🖐️) hand with fingers splayed +1F595..1F596 ; Emoji_Modifier_Base # E1.0 [2] (🖕..🖖) middle finger..vulcan salute +1F645..1F647 ; Emoji_Modifier_Base # E0.6 [3] (🙅..🙇) person gesturing NO..person bowing +1F64B..1F64F ; Emoji_Modifier_Base # E0.6 [5] (🙋..🙏) person raising hand..folded hands +1F6A3 ; Emoji_Modifier_Base # E1.0 [1] (🚣) person rowing boat +1F6B4..1F6B5 ; Emoji_Modifier_Base # E1.0 [2] (🚴..🚵) person biking..person mountain biking +1F6B6 ; Emoji_Modifier_Base # E0.6 [1] (🚶) person walking +1F6C0 ; Emoji_Modifier_Base # E0.6 [1] (🛀) person taking bath +1F6CC ; Emoji_Modifier_Base # E1.0 [1] (🛌) person in bed +1F90C ; Emoji_Modifier_Base # E13.0 [1] (🤌) pinched fingers +1F90F ; Emoji_Modifier_Base # E12.0 [1] (🤏) pinching hand +1F918 ; Emoji_Modifier_Base # E1.0 [1] (🤘) sign of the horns +1F919..1F91E ; Emoji_Modifier_Base # E3.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Emoji_Modifier_Base # E5.0 [1] (🤟) love-you gesture +1F926 ; Emoji_Modifier_Base # E3.0 [1] (🤦) person facepalming +1F930 ; Emoji_Modifier_Base # E3.0 [1] (🤰) pregnant woman +1F931..1F932 ; Emoji_Modifier_Base # E5.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F939 ; Emoji_Modifier_Base # E3.0 [7] (🤳..🤹) selfie..person juggling +1F93C..1F93E ; Emoji_Modifier_Base # E3.0 [3] (🤼..🤾) people wrestling..person playing handball +1F977 ; Emoji_Modifier_Base # E13.0 [1] (🥷) ninja +1F9B5..1F9B6 ; Emoji_Modifier_Base # E11.0 [2] (🦵..🦶) leg..foot +1F9B8..1F9B9 ; Emoji_Modifier_Base # E11.0 [2] (🦸..🦹) superhero..supervillain +1F9BB ; Emoji_Modifier_Base # E12.0 [1] (🦻) ear with hearing aid +1F9CD..1F9CF ; Emoji_Modifier_Base # E12.0 [3] (🧍..🧏) person standing..deaf person +1F9D1..1F9DD ; Emoji_Modifier_Base # E5.0 [13] (🧑..🧝) person..elf +1FAC3..1FAC5 ; Emoji_Modifier_Base # E14.0 [3] (🫃..🫅) pregnant man..person with crown +1FAF0..1FAF6 ; Emoji_Modifier_Base # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands +1FAF7..1FAF8 ; Emoji_Modifier_Base # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand + +# Total elements: 134 + +# ================================================ + +# All omitted code points have Emoji_Component=No + +0023 ; Emoji_Component # E0.0 [1] (#️) hash sign +002A ; Emoji_Component # E0.0 [1] (*️) asterisk +0030..0039 ; Emoji_Component # E0.0 [10] (0️..9️) digit zero..digit nine +200D ; Emoji_Component # E0.0 [1] (‍) zero width joiner +20E3 ; Emoji_Component # E0.0 [1] (⃣) combining enclosing keycap +FE0F ; Emoji_Component # E0.0 [1] () VARIATION SELECTOR-16 +1F1E6..1F1FF ; Emoji_Component # E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z +1F3FB..1F3FF ; Emoji_Component # E1.0 [5] (🏻..🏿) light skin tone..dark skin tone +1F9B0..1F9B3 ; Emoji_Component # E11.0 [4] (🦰..🦳) red hair..white hair +E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..cancel tag + +# Total elements: 146 + +# ================================================ + +# All omitted code points have Extended_Pictographic=No + +00A9 ; Extended_Pictographic# E0.6 [1] (©️) copyright +00AE ; Extended_Pictographic# E0.6 [1] (®️) registered +203C ; Extended_Pictographic# E0.6 [1] (‼️) double exclamation mark +2049 ; Extended_Pictographic# E0.6 [1] (⁉️) exclamation question mark +2122 ; Extended_Pictographic# E0.6 [1] (™️) trade mark +2139 ; Extended_Pictographic# E0.6 [1] (ℹ️) information +2194..2199 ; Extended_Pictographic# E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow +21A9..21AA ; Extended_Pictographic# E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right +231A..231B ; Extended_Pictographic# E0.6 [2] (⌚..⌛) watch..hourglass done +2328 ; Extended_Pictographic# E1.0 [1] (⌨️) keyboard +2388 ; Extended_Pictographic# E0.0 [1] (⎈) HELM SYMBOL +23CF ; Extended_Pictographic# E1.0 [1] (⏏️) eject button +23E9..23EC ; Extended_Pictographic# E0.6 [4] (⏩..⏬) fast-forward button..fast down button +23ED..23EE ; Extended_Pictographic# E0.7 [2] (⏭️..⏮️) next track button..last track button +23EF ; Extended_Pictographic# E1.0 [1] (⏯️) play or pause button +23F0 ; Extended_Pictographic# E0.6 [1] (⏰) alarm clock +23F1..23F2 ; Extended_Pictographic# E1.0 [2] (⏱️..⏲️) stopwatch..timer clock +23F3 ; Extended_Pictographic# E0.6 [1] (⏳) hourglass not done +23F8..23FA ; Extended_Pictographic# E0.7 [3] (⏸️..⏺️) pause button..record button +24C2 ; Extended_Pictographic# E0.6 [1] (Ⓜ️) circled M +25AA..25AB ; Extended_Pictographic# E0.6 [2] (▪️..▫️) black small square..white small square +25B6 ; Extended_Pictographic# E0.6 [1] (▶️) play button +25C0 ; Extended_Pictographic# E0.6 [1] (◀️) reverse button +25FB..25FE ; Extended_Pictographic# E0.6 [4] (◻️..◾) white medium square..black medium-small square +2600..2601 ; Extended_Pictographic# E0.6 [2] (☀️..☁️) sun..cloud +2602..2603 ; Extended_Pictographic# E0.7 [2] (☂️..☃️) umbrella..snowman +2604 ; Extended_Pictographic# E1.0 [1] (☄️) comet +2605 ; Extended_Pictographic# E0.0 [1] (★) BLACK STAR +2607..260D ; Extended_Pictographic# E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION +260E ; Extended_Pictographic# E0.6 [1] (☎️) telephone +260F..2610 ; Extended_Pictographic# E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX +2611 ; Extended_Pictographic# E0.6 [1] (☑️) check box with check +2612 ; Extended_Pictographic# E0.0 [1] (☒) BALLOT BOX WITH X +2614..2615 ; Extended_Pictographic# E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage +2616..2617 ; Extended_Pictographic# E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE +2618 ; Extended_Pictographic# E1.0 [1] (☘️) shamrock +2619..261C ; Extended_Pictographic# E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX +261D ; Extended_Pictographic# E0.6 [1] (☝️) index pointing up +261E..261F ; Extended_Pictographic# E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX +2620 ; Extended_Pictographic# E1.0 [1] (☠️) skull and crossbones +2621 ; Extended_Pictographic# E0.0 [1] (☡) CAUTION SIGN +2622..2623 ; Extended_Pictographic# E1.0 [2] (☢️..☣️) radioactive..biohazard +2624..2625 ; Extended_Pictographic# E0.0 [2] (☤..☥) CADUCEUS..ANKH +2626 ; Extended_Pictographic# E1.0 [1] (☦️) orthodox cross +2627..2629 ; Extended_Pictographic# E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM +262A ; Extended_Pictographic# E0.7 [1] (☪️) star and crescent +262B..262D ; Extended_Pictographic# E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE +262E ; Extended_Pictographic# E1.0 [1] (☮️) peace symbol +262F ; Extended_Pictographic# E0.7 [1] (☯️) yin yang +2630..2637 ; Extended_Pictographic# E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH +2638..2639 ; Extended_Pictographic# E0.7 [2] (☸️..☹️) wheel of dharma..frowning face +263A ; Extended_Pictographic# E0.6 [1] (☺️) smiling face +263B..263F ; Extended_Pictographic# E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY +2640 ; Extended_Pictographic# E4.0 [1] (♀️) female sign +2641 ; Extended_Pictographic# E0.0 [1] (♁) EARTH +2642 ; Extended_Pictographic# E4.0 [1] (♂️) male sign +2643..2647 ; Extended_Pictographic# E0.0 [5] (♃..♇) JUPITER..PLUTO +2648..2653 ; Extended_Pictographic# E0.6 [12] (♈..♓) Aries..Pisces +2654..265E ; Extended_Pictographic# E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT +265F ; Extended_Pictographic# E11.0 [1] (♟️) chess pawn +2660 ; Extended_Pictographic# E0.6 [1] (♠️) spade suit +2661..2662 ; Extended_Pictographic# E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT +2663 ; Extended_Pictographic# E0.6 [1] (♣️) club suit +2664 ; Extended_Pictographic# E0.0 [1] (♤) WHITE SPADE SUIT +2665..2666 ; Extended_Pictographic# E0.6 [2] (♥️..♦️) heart suit..diamond suit +2667 ; Extended_Pictographic# E0.0 [1] (♧) WHITE CLUB SUIT +2668 ; Extended_Pictographic# E0.6 [1] (♨️) hot springs +2669..267A ; Extended_Pictographic# E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS +267B ; Extended_Pictographic# E0.6 [1] (♻️) recycling symbol +267C..267D ; Extended_Pictographic# E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL +267E ; Extended_Pictographic# E11.0 [1] (♾️) infinity +267F ; Extended_Pictographic# E0.6 [1] (♿) wheelchair symbol +2680..2685 ; Extended_Pictographic# E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 +2690..2691 ; Extended_Pictographic# E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG +2692 ; Extended_Pictographic# E1.0 [1] (⚒️) hammer and pick +2693 ; Extended_Pictographic# E0.6 [1] (⚓) anchor +2694 ; Extended_Pictographic# E1.0 [1] (⚔️) crossed swords +2695 ; Extended_Pictographic# E4.0 [1] (⚕️) medical symbol +2696..2697 ; Extended_Pictographic# E1.0 [2] (⚖️..⚗️) balance scale..alembic +2698 ; Extended_Pictographic# E0.0 [1] (⚘) FLOWER +2699 ; Extended_Pictographic# E1.0 [1] (⚙️) gear +269A ; Extended_Pictographic# E0.0 [1] (⚚) STAFF OF HERMES +269B..269C ; Extended_Pictographic# E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis +269D..269F ; Extended_Pictographic# E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT +26A0..26A1 ; Extended_Pictographic# E0.6 [2] (⚠️..⚡) warning..high voltage +26A2..26A6 ; Extended_Pictographic# E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN +26A7 ; Extended_Pictographic# E13.0 [1] (⚧️) transgender symbol +26A8..26A9 ; Extended_Pictographic# E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN +26AA..26AB ; Extended_Pictographic# E0.6 [2] (⚪..⚫) white circle..black circle +26AC..26AF ; Extended_Pictographic# E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL +26B0..26B1 ; Extended_Pictographic# E1.0 [2] (⚰️..⚱️) coffin..funeral urn +26B2..26BC ; Extended_Pictographic# E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE +26BD..26BE ; Extended_Pictographic# E0.6 [2] (⚽..⚾) soccer ball..baseball +26BF..26C3 ; Extended_Pictographic# E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING +26C4..26C5 ; Extended_Pictographic# E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud +26C6..26C7 ; Extended_Pictographic# E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN +26C8 ; Extended_Pictographic# E0.7 [1] (⛈️) cloud with lightning and rain +26C9..26CD ; Extended_Pictographic# E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR +26CE ; Extended_Pictographic# E0.6 [1] (⛎) Ophiuchus +26CF ; Extended_Pictographic# E0.7 [1] (⛏️) pick +26D0 ; Extended_Pictographic# E0.0 [1] (⛐) CAR SLIDING +26D1 ; Extended_Pictographic# E0.7 [1] (⛑️) rescue worker’s helmet +26D2 ; Extended_Pictographic# E0.0 [1] (⛒) CIRCLED CROSSING LANES +26D3 ; Extended_Pictographic# E0.7 [1] (⛓️) chains +26D4 ; Extended_Pictographic# E0.6 [1] (⛔) no entry +26D5..26E8 ; Extended_Pictographic# E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD +26E9 ; Extended_Pictographic# E0.7 [1] (⛩️) shinto shrine +26EA ; Extended_Pictographic# E0.6 [1] (⛪) church +26EB..26EF ; Extended_Pictographic# E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE +26F0..26F1 ; Extended_Pictographic# E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground +26F2..26F3 ; Extended_Pictographic# E0.6 [2] (⛲..⛳) fountain..flag in hole +26F4 ; Extended_Pictographic# E0.7 [1] (⛴️) ferry +26F5 ; Extended_Pictographic# E0.6 [1] (⛵) sailboat +26F6 ; Extended_Pictographic# E0.0 [1] (⛶) SQUARE FOUR CORNERS +26F7..26F9 ; Extended_Pictographic# E0.7 [3] (⛷️..⛹️) skier..person bouncing ball +26FA ; Extended_Pictographic# E0.6 [1] (⛺) tent +26FB..26FC ; Extended_Pictographic# E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL +26FD ; Extended_Pictographic# E0.6 [1] (⛽) fuel pump +26FE..2701 ; Extended_Pictographic# E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS +2702 ; Extended_Pictographic# E0.6 [1] (✂️) scissors +2703..2704 ; Extended_Pictographic# E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS +2705 ; Extended_Pictographic# E0.6 [1] (✅) check mark button +2708..270C ; Extended_Pictographic# E0.6 [5] (✈️..✌️) airplane..victory hand +270D ; Extended_Pictographic# E0.7 [1] (✍️) writing hand +270E ; Extended_Pictographic# E0.0 [1] (✎) LOWER RIGHT PENCIL +270F ; Extended_Pictographic# E0.6 [1] (✏️) pencil +2710..2711 ; Extended_Pictographic# E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB +2712 ; Extended_Pictographic# E0.6 [1] (✒️) black nib +2714 ; Extended_Pictographic# E0.6 [1] (✔️) check mark +2716 ; Extended_Pictographic# E0.6 [1] (✖️) multiply +271D ; Extended_Pictographic# E0.7 [1] (✝️) latin cross +2721 ; Extended_Pictographic# E0.7 [1] (✡️) star of David +2728 ; Extended_Pictographic# E0.6 [1] (✨) sparkles +2733..2734 ; Extended_Pictographic# E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star +2744 ; Extended_Pictographic# E0.6 [1] (❄️) snowflake +2747 ; Extended_Pictographic# E0.6 [1] (❇️) sparkle +274C ; Extended_Pictographic# E0.6 [1] (❌) cross mark +274E ; Extended_Pictographic# E0.6 [1] (❎) cross mark button +2753..2755 ; Extended_Pictographic# E0.6 [3] (❓..❕) red question mark..white exclamation mark +2757 ; Extended_Pictographic# E0.6 [1] (❗) red exclamation mark +2763 ; Extended_Pictographic# E1.0 [1] (❣️) heart exclamation +2764 ; Extended_Pictographic# E0.6 [1] (❤️) red heart +2765..2767 ; Extended_Pictographic# E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET +2795..2797 ; Extended_Pictographic# E0.6 [3] (➕..➗) plus..divide +27A1 ; Extended_Pictographic# E0.6 [1] (➡️) right arrow +27B0 ; Extended_Pictographic# E0.6 [1] (➰) curly loop +27BF ; Extended_Pictographic# E1.0 [1] (➿) double curly loop +2934..2935 ; Extended_Pictographic# E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down +2B05..2B07 ; Extended_Pictographic# E0.6 [3] (⬅️..⬇️) left arrow..down arrow +2B1B..2B1C ; Extended_Pictographic# E0.6 [2] (⬛..⬜) black large square..white large square +2B50 ; Extended_Pictographic# E0.6 [1] (⭐) star +2B55 ; Extended_Pictographic# E0.6 [1] (⭕) hollow red circle +3030 ; Extended_Pictographic# E0.6 [1] (〰️) wavy dash +303D ; Extended_Pictographic# E0.6 [1] (〽️) part alternation mark +3297 ; Extended_Pictographic# E0.6 [1] (㊗️) Japanese “congratulations” button +3299 ; Extended_Pictographic# E0.6 [1] (㊙️) Japanese “secret” button +1F000..1F003 ; Extended_Pictographic# E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND +1F004 ; Extended_Pictographic# E0.6 [1] (🀄) mahjong red dragon +1F005..1F0CE ; Extended_Pictographic# E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS +1F0CF ; Extended_Pictographic# E0.6 [1] (🃏) joker +1F0D0..1F0FF ; Extended_Pictographic# E0.0 [48] (🃐..🃿) .. +1F10D..1F10F ; Extended_Pictographic# E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH +1F12F ; Extended_Pictographic# E0.0 [1] (🄯) COPYLEFT SYMBOL +1F16C..1F16F ; Extended_Pictographic# E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE +1F170..1F171 ; Extended_Pictographic# E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) +1F17E..1F17F ; Extended_Pictographic# E0.6 [2] (🅾️..🅿️) O button (blood type)..P button +1F18E ; Extended_Pictographic# E0.6 [1] (🆎) AB button (blood type) +1F191..1F19A ; Extended_Pictographic# E0.6 [10] (🆑..🆚) CL button..VS button +1F1AD..1F1E5 ; Extended_Pictographic# E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. +1F201..1F202 ; Extended_Pictographic# E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button +1F203..1F20F ; Extended_Pictographic# E0.0 [13] (🈃..🈏) .. +1F21A ; Extended_Pictographic# E0.6 [1] (🈚) Japanese “free of charge” button +1F22F ; Extended_Pictographic# E0.6 [1] (🈯) Japanese “reserved” button +1F232..1F23A ; Extended_Pictographic# E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button +1F23C..1F23F ; Extended_Pictographic# E0.0 [4] (🈼..🈿) .. +1F249..1F24F ; Extended_Pictographic# E0.0 [7] (🉉..🉏) .. +1F250..1F251 ; Extended_Pictographic# E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button +1F252..1F2FF ; Extended_Pictographic# E0.0 [174] (🉒..🋿) .. +1F300..1F30C ; Extended_Pictographic# E0.6 [13] (🌀..🌌) cyclone..milky way +1F30D..1F30E ; Extended_Pictographic# E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas +1F30F ; Extended_Pictographic# E0.6 [1] (🌏) globe showing Asia-Australia +1F310 ; Extended_Pictographic# E1.0 [1] (🌐) globe with meridians +1F311 ; Extended_Pictographic# E0.6 [1] (🌑) new moon +1F312 ; Extended_Pictographic# E1.0 [1] (🌒) waxing crescent moon +1F313..1F315 ; Extended_Pictographic# E0.6 [3] (🌓..🌕) first quarter moon..full moon +1F316..1F318 ; Extended_Pictographic# E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon +1F319 ; Extended_Pictographic# E0.6 [1] (🌙) crescent moon +1F31A ; Extended_Pictographic# E1.0 [1] (🌚) new moon face +1F31B ; Extended_Pictographic# E0.6 [1] (🌛) first quarter moon face +1F31C ; Extended_Pictographic# E0.7 [1] (🌜) last quarter moon face +1F31D..1F31E ; Extended_Pictographic# E1.0 [2] (🌝..🌞) full moon face..sun with face +1F31F..1F320 ; Extended_Pictographic# E0.6 [2] (🌟..🌠) glowing star..shooting star +1F321 ; Extended_Pictographic# E0.7 [1] (🌡️) thermometer +1F322..1F323 ; Extended_Pictographic# E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN +1F324..1F32C ; Extended_Pictographic# E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face +1F32D..1F32F ; Extended_Pictographic# E1.0 [3] (🌭..🌯) hot dog..burrito +1F330..1F331 ; Extended_Pictographic# E0.6 [2] (🌰..🌱) chestnut..seedling +1F332..1F333 ; Extended_Pictographic# E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree +1F334..1F335 ; Extended_Pictographic# E0.6 [2] (🌴..🌵) palm tree..cactus +1F336 ; Extended_Pictographic# E0.7 [1] (🌶️) hot pepper +1F337..1F34A ; Extended_Pictographic# E0.6 [20] (🌷..🍊) tulip..tangerine +1F34B ; Extended_Pictographic# E1.0 [1] (🍋) lemon +1F34C..1F34F ; Extended_Pictographic# E0.6 [4] (🍌..🍏) banana..green apple +1F350 ; Extended_Pictographic# E1.0 [1] (🍐) pear +1F351..1F37B ; Extended_Pictographic# E0.6 [43] (🍑..🍻) peach..clinking beer mugs +1F37C ; Extended_Pictographic# E1.0 [1] (🍼) baby bottle +1F37D ; Extended_Pictographic# E0.7 [1] (🍽️) fork and knife with plate +1F37E..1F37F ; Extended_Pictographic# E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn +1F380..1F393 ; Extended_Pictographic# E0.6 [20] (🎀..🎓) ribbon..graduation cap +1F394..1F395 ; Extended_Pictographic# E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS +1F396..1F397 ; Extended_Pictographic# E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon +1F398 ; Extended_Pictographic# E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS +1F399..1F39B ; Extended_Pictographic# E0.7 [3] (🎙️..🎛️) studio microphone..control knobs +1F39C..1F39D ; Extended_Pictographic# E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES +1F39E..1F39F ; Extended_Pictographic# E0.7 [2] (🎞️..🎟️) film frames..admission tickets +1F3A0..1F3C4 ; Extended_Pictographic# E0.6 [37] (🎠..🏄) carousel horse..person surfing +1F3C5 ; Extended_Pictographic# E1.0 [1] (🏅) sports medal +1F3C6 ; Extended_Pictographic# E0.6 [1] (🏆) trophy +1F3C7 ; Extended_Pictographic# E1.0 [1] (🏇) horse racing +1F3C8 ; Extended_Pictographic# E0.6 [1] (🏈) american football +1F3C9 ; Extended_Pictographic# E1.0 [1] (🏉) rugby football +1F3CA ; Extended_Pictographic# E0.6 [1] (🏊) person swimming +1F3CB..1F3CE ; Extended_Pictographic# E0.7 [4] (🏋️..🏎️) person lifting weights..racing car +1F3CF..1F3D3 ; Extended_Pictographic# E1.0 [5] (🏏..🏓) cricket game..ping pong +1F3D4..1F3DF ; Extended_Pictographic# E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium +1F3E0..1F3E3 ; Extended_Pictographic# E0.6 [4] (🏠..🏣) house..Japanese post office +1F3E4 ; Extended_Pictographic# E1.0 [1] (🏤) post office +1F3E5..1F3F0 ; Extended_Pictographic# E0.6 [12] (🏥..🏰) hospital..castle +1F3F1..1F3F2 ; Extended_Pictographic# E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT +1F3F3 ; Extended_Pictographic# E0.7 [1] (🏳️) white flag +1F3F4 ; Extended_Pictographic# E1.0 [1] (🏴) black flag +1F3F5 ; Extended_Pictographic# E0.7 [1] (🏵️) rosette +1F3F6 ; Extended_Pictographic# E0.0 [1] (🏶) BLACK ROSETTE +1F3F7 ; Extended_Pictographic# E0.7 [1] (🏷️) label +1F3F8..1F3FA ; Extended_Pictographic# E1.0 [3] (🏸..🏺) badminton..amphora +1F400..1F407 ; Extended_Pictographic# E1.0 [8] (🐀..🐇) rat..rabbit +1F408 ; Extended_Pictographic# E0.7 [1] (🐈) cat +1F409..1F40B ; Extended_Pictographic# E1.0 [3] (🐉..🐋) dragon..whale +1F40C..1F40E ; Extended_Pictographic# E0.6 [3] (🐌..🐎) snail..horse +1F40F..1F410 ; Extended_Pictographic# E1.0 [2] (🐏..🐐) ram..goat +1F411..1F412 ; Extended_Pictographic# E0.6 [2] (🐑..🐒) ewe..monkey +1F413 ; Extended_Pictographic# E1.0 [1] (🐓) rooster +1F414 ; Extended_Pictographic# E0.6 [1] (🐔) chicken +1F415 ; Extended_Pictographic# E0.7 [1] (🐕) dog +1F416 ; Extended_Pictographic# E1.0 [1] (🐖) pig +1F417..1F429 ; Extended_Pictographic# E0.6 [19] (🐗..🐩) boar..poodle +1F42A ; Extended_Pictographic# E1.0 [1] (🐪) camel +1F42B..1F43E ; Extended_Pictographic# E0.6 [20] (🐫..🐾) two-hump camel..paw prints +1F43F ; Extended_Pictographic# E0.7 [1] (🐿️) chipmunk +1F440 ; Extended_Pictographic# E0.6 [1] (👀) eyes +1F441 ; Extended_Pictographic# E0.7 [1] (👁️) eye +1F442..1F464 ; Extended_Pictographic# E0.6 [35] (👂..👤) ear..bust in silhouette +1F465 ; Extended_Pictographic# E1.0 [1] (👥) busts in silhouette +1F466..1F46B ; Extended_Pictographic# E0.6 [6] (👦..👫) boy..woman and man holding hands +1F46C..1F46D ; Extended_Pictographic# E1.0 [2] (👬..👭) men holding hands..women holding hands +1F46E..1F4AC ; Extended_Pictographic# E0.6 [63] (👮..💬) police officer..speech balloon +1F4AD ; Extended_Pictographic# E1.0 [1] (💭) thought balloon +1F4AE..1F4B5 ; Extended_Pictographic# E0.6 [8] (💮..💵) white flower..dollar banknote +1F4B6..1F4B7 ; Extended_Pictographic# E1.0 [2] (💶..💷) euro banknote..pound banknote +1F4B8..1F4EB ; Extended_Pictographic# E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag +1F4EC..1F4ED ; Extended_Pictographic# E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag +1F4EE ; Extended_Pictographic# E0.6 [1] (📮) postbox +1F4EF ; Extended_Pictographic# E1.0 [1] (📯) postal horn +1F4F0..1F4F4 ; Extended_Pictographic# E0.6 [5] (📰..📴) newspaper..mobile phone off +1F4F5 ; Extended_Pictographic# E1.0 [1] (📵) no mobile phones +1F4F6..1F4F7 ; Extended_Pictographic# E0.6 [2] (📶..📷) antenna bars..camera +1F4F8 ; Extended_Pictographic# E1.0 [1] (📸) camera with flash +1F4F9..1F4FC ; Extended_Pictographic# E0.6 [4] (📹..📼) video camera..videocassette +1F4FD ; Extended_Pictographic# E0.7 [1] (📽️) film projector +1F4FE ; Extended_Pictographic# E0.0 [1] (📾) PORTABLE STEREO +1F4FF..1F502 ; Extended_Pictographic# E1.0 [4] (📿..🔂) prayer beads..repeat single button +1F503 ; Extended_Pictographic# E0.6 [1] (🔃) clockwise vertical arrows +1F504..1F507 ; Extended_Pictographic# E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker +1F508 ; Extended_Pictographic# E0.7 [1] (🔈) speaker low volume +1F509 ; Extended_Pictographic# E1.0 [1] (🔉) speaker medium volume +1F50A..1F514 ; Extended_Pictographic# E0.6 [11] (🔊..🔔) speaker high volume..bell +1F515 ; Extended_Pictographic# E1.0 [1] (🔕) bell with slash +1F516..1F52B ; Extended_Pictographic# E0.6 [22] (🔖..🔫) bookmark..water pistol +1F52C..1F52D ; Extended_Pictographic# E1.0 [2] (🔬..🔭) microscope..telescope +1F52E..1F53D ; Extended_Pictographic# E0.6 [16] (🔮..🔽) crystal ball..downwards button +1F546..1F548 ; Extended_Pictographic# E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS +1F549..1F54A ; Extended_Pictographic# E0.7 [2] (🕉️..🕊️) om..dove +1F54B..1F54E ; Extended_Pictographic# E1.0 [4] (🕋..🕎) kaaba..menorah +1F54F ; Extended_Pictographic# E0.0 [1] (🕏) BOWL OF HYGIEIA +1F550..1F55B ; Extended_Pictographic# E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock +1F55C..1F567 ; Extended_Pictographic# E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty +1F568..1F56E ; Extended_Pictographic# E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK +1F56F..1F570 ; Extended_Pictographic# E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock +1F571..1F572 ; Extended_Pictographic# E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY +1F573..1F579 ; Extended_Pictographic# E0.7 [7] (🕳️..🕹️) hole..joystick +1F57A ; Extended_Pictographic# E3.0 [1] (🕺) man dancing +1F57B..1F586 ; Extended_Pictographic# E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE +1F587 ; Extended_Pictographic# E0.7 [1] (🖇️) linked paperclips +1F588..1F589 ; Extended_Pictographic# E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL +1F58A..1F58D ; Extended_Pictographic# E0.7 [4] (🖊️..🖍️) pen..crayon +1F58E..1F58F ; Extended_Pictographic# E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN +1F590 ; Extended_Pictographic# E0.7 [1] (🖐️) hand with fingers splayed +1F591..1F594 ; Extended_Pictographic# E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND +1F595..1F596 ; Extended_Pictographic# E1.0 [2] (🖕..🖖) middle finger..vulcan salute +1F597..1F5A3 ; Extended_Pictographic# E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX +1F5A4 ; Extended_Pictographic# E3.0 [1] (🖤) black heart +1F5A5 ; Extended_Pictographic# E0.7 [1] (🖥️) desktop computer +1F5A6..1F5A7 ; Extended_Pictographic# E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS +1F5A8 ; Extended_Pictographic# E0.7 [1] (🖨️) printer +1F5A9..1F5B0 ; Extended_Pictographic# E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE +1F5B1..1F5B2 ; Extended_Pictographic# E0.7 [2] (🖱️..🖲️) computer mouse..trackball +1F5B3..1F5BB ; Extended_Pictographic# E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE +1F5BC ; Extended_Pictographic# E0.7 [1] (🖼️) framed picture +1F5BD..1F5C1 ; Extended_Pictographic# E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER +1F5C2..1F5C4 ; Extended_Pictographic# E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet +1F5C5..1F5D0 ; Extended_Pictographic# E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES +1F5D1..1F5D3 ; Extended_Pictographic# E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar +1F5D4..1F5DB ; Extended_Pictographic# E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL +1F5DC..1F5DE ; Extended_Pictographic# E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper +1F5DF..1F5E0 ; Extended_Pictographic# E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART +1F5E1 ; Extended_Pictographic# E0.7 [1] (🗡️) dagger +1F5E2 ; Extended_Pictographic# E0.0 [1] (🗢) LIPS +1F5E3 ; Extended_Pictographic# E0.7 [1] (🗣️) speaking head +1F5E4..1F5E7 ; Extended_Pictographic# E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT +1F5E8 ; Extended_Pictographic# E2.0 [1] (🗨️) left speech bubble +1F5E9..1F5EE ; Extended_Pictographic# E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE +1F5EF ; Extended_Pictographic# E0.7 [1] (🗯️) right anger bubble +1F5F0..1F5F2 ; Extended_Pictographic# E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD +1F5F3 ; Extended_Pictographic# E0.7 [1] (🗳️) ballot box with ballot +1F5F4..1F5F9 ; Extended_Pictographic# E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK +1F5FA ; Extended_Pictographic# E0.7 [1] (🗺️) world map +1F5FB..1F5FF ; Extended_Pictographic# E0.6 [5] (🗻..🗿) mount fuji..moai +1F600 ; Extended_Pictographic# E1.0 [1] (😀) grinning face +1F601..1F606 ; Extended_Pictographic# E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face +1F607..1F608 ; Extended_Pictographic# E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns +1F609..1F60D ; Extended_Pictographic# E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes +1F60E ; Extended_Pictographic# E1.0 [1] (😎) smiling face with sunglasses +1F60F ; Extended_Pictographic# E0.6 [1] (😏) smirking face +1F610 ; Extended_Pictographic# E0.7 [1] (😐) neutral face +1F611 ; Extended_Pictographic# E1.0 [1] (😑) expressionless face +1F612..1F614 ; Extended_Pictographic# E0.6 [3] (😒..😔) unamused face..pensive face +1F615 ; Extended_Pictographic# E1.0 [1] (😕) confused face +1F616 ; Extended_Pictographic# E0.6 [1] (😖) confounded face +1F617 ; Extended_Pictographic# E1.0 [1] (😗) kissing face +1F618 ; Extended_Pictographic# E0.6 [1] (😘) face blowing a kiss +1F619 ; Extended_Pictographic# E1.0 [1] (😙) kissing face with smiling eyes +1F61A ; Extended_Pictographic# E0.6 [1] (😚) kissing face with closed eyes +1F61B ; Extended_Pictographic# E1.0 [1] (😛) face with tongue +1F61C..1F61E ; Extended_Pictographic# E0.6 [3] (😜..😞) winking face with tongue..disappointed face +1F61F ; Extended_Pictographic# E1.0 [1] (😟) worried face +1F620..1F625 ; Extended_Pictographic# E0.6 [6] (😠..😥) angry face..sad but relieved face +1F626..1F627 ; Extended_Pictographic# E1.0 [2] (😦..😧) frowning face with open mouth..anguished face +1F628..1F62B ; Extended_Pictographic# E0.6 [4] (😨..😫) fearful face..tired face +1F62C ; Extended_Pictographic# E1.0 [1] (😬) grimacing face +1F62D ; Extended_Pictographic# E0.6 [1] (😭) loudly crying face +1F62E..1F62F ; Extended_Pictographic# E1.0 [2] (😮..😯) face with open mouth..hushed face +1F630..1F633 ; Extended_Pictographic# E0.6 [4] (😰..😳) anxious face with sweat..flushed face +1F634 ; Extended_Pictographic# E1.0 [1] (😴) sleeping face +1F635 ; Extended_Pictographic# E0.6 [1] (😵) face with crossed-out eyes +1F636 ; Extended_Pictographic# E1.0 [1] (😶) face without mouth +1F637..1F640 ; Extended_Pictographic# E0.6 [10] (😷..🙀) face with medical mask..weary cat +1F641..1F644 ; Extended_Pictographic# E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes +1F645..1F64F ; Extended_Pictographic# E0.6 [11] (🙅..🙏) person gesturing NO..folded hands +1F680 ; Extended_Pictographic# E0.6 [1] (🚀) rocket +1F681..1F682 ; Extended_Pictographic# E1.0 [2] (🚁..🚂) helicopter..locomotive +1F683..1F685 ; Extended_Pictographic# E0.6 [3] (🚃..🚅) railway car..bullet train +1F686 ; Extended_Pictographic# E1.0 [1] (🚆) train +1F687 ; Extended_Pictographic# E0.6 [1] (🚇) metro +1F688 ; Extended_Pictographic# E1.0 [1] (🚈) light rail +1F689 ; Extended_Pictographic# E0.6 [1] (🚉) station +1F68A..1F68B ; Extended_Pictographic# E1.0 [2] (🚊..🚋) tram..tram car +1F68C ; Extended_Pictographic# E0.6 [1] (🚌) bus +1F68D ; Extended_Pictographic# E0.7 [1] (🚍) oncoming bus +1F68E ; Extended_Pictographic# E1.0 [1] (🚎) trolleybus +1F68F ; Extended_Pictographic# E0.6 [1] (🚏) bus stop +1F690 ; Extended_Pictographic# E1.0 [1] (🚐) minibus +1F691..1F693 ; Extended_Pictographic# E0.6 [3] (🚑..🚓) ambulance..police car +1F694 ; Extended_Pictographic# E0.7 [1] (🚔) oncoming police car +1F695 ; Extended_Pictographic# E0.6 [1] (🚕) taxi +1F696 ; Extended_Pictographic# E1.0 [1] (🚖) oncoming taxi +1F697 ; Extended_Pictographic# E0.6 [1] (🚗) automobile +1F698 ; Extended_Pictographic# E0.7 [1] (🚘) oncoming automobile +1F699..1F69A ; Extended_Pictographic# E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck +1F69B..1F6A1 ; Extended_Pictographic# E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway +1F6A2 ; Extended_Pictographic# E0.6 [1] (🚢) ship +1F6A3 ; Extended_Pictographic# E1.0 [1] (🚣) person rowing boat +1F6A4..1F6A5 ; Extended_Pictographic# E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light +1F6A6 ; Extended_Pictographic# E1.0 [1] (🚦) vertical traffic light +1F6A7..1F6AD ; Extended_Pictographic# E0.6 [7] (🚧..🚭) construction..no smoking +1F6AE..1F6B1 ; Extended_Pictographic# E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water +1F6B2 ; Extended_Pictographic# E0.6 [1] (🚲) bicycle +1F6B3..1F6B5 ; Extended_Pictographic# E1.0 [3] (🚳..🚵) no bicycles..person mountain biking +1F6B6 ; Extended_Pictographic# E0.6 [1] (🚶) person walking +1F6B7..1F6B8 ; Extended_Pictographic# E1.0 [2] (🚷..🚸) no pedestrians..children crossing +1F6B9..1F6BE ; Extended_Pictographic# E0.6 [6] (🚹..🚾) men’s room..water closet +1F6BF ; Extended_Pictographic# E1.0 [1] (🚿) shower +1F6C0 ; Extended_Pictographic# E0.6 [1] (🛀) person taking bath +1F6C1..1F6C5 ; Extended_Pictographic# E1.0 [5] (🛁..🛅) bathtub..left luggage +1F6C6..1F6CA ; Extended_Pictographic# E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL +1F6CB ; Extended_Pictographic# E0.7 [1] (🛋️) couch and lamp +1F6CC ; Extended_Pictographic# E1.0 [1] (🛌) person in bed +1F6CD..1F6CF ; Extended_Pictographic# E0.7 [3] (🛍️..🛏️) shopping bags..bed +1F6D0 ; Extended_Pictographic# E1.0 [1] (🛐) place of worship +1F6D1..1F6D2 ; Extended_Pictographic# E3.0 [2] (🛑..🛒) stop sign..shopping cart +1F6D3..1F6D4 ; Extended_Pictographic# E0.0 [2] (🛓..🛔) STUPA..PAGODA +1F6D5 ; Extended_Pictographic# E12.0 [1] (🛕) hindu temple +1F6D6..1F6D7 ; Extended_Pictographic# E13.0 [2] (🛖..🛗) hut..elevator +1F6D8..1F6DB ; Extended_Pictographic# E0.0 [4] (🛘..🛛) .. +1F6DC ; Extended_Pictographic# E15.0 [1] (🛜) wireless +1F6DD..1F6DF ; Extended_Pictographic# E14.0 [3] (🛝..🛟) playground slide..ring buoy +1F6E0..1F6E5 ; Extended_Pictographic# E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat +1F6E6..1F6E8 ; Extended_Pictographic# E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE +1F6E9 ; Extended_Pictographic# E0.7 [1] (🛩️) small airplane +1F6EA ; Extended_Pictographic# E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE +1F6EB..1F6EC ; Extended_Pictographic# E1.0 [2] (🛫..🛬) airplane departure..airplane arrival +1F6ED..1F6EF ; Extended_Pictographic# E0.0 [3] (🛭..🛯) .. +1F6F0 ; Extended_Pictographic# E0.7 [1] (🛰️) satellite +1F6F1..1F6F2 ; Extended_Pictographic# E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE +1F6F3 ; Extended_Pictographic# E0.7 [1] (🛳️) passenger ship +1F6F4..1F6F6 ; Extended_Pictographic# E3.0 [3] (🛴..🛶) kick scooter..canoe +1F6F7..1F6F8 ; Extended_Pictographic# E5.0 [2] (🛷..🛸) sled..flying saucer +1F6F9 ; Extended_Pictographic# E11.0 [1] (🛹) skateboard +1F6FA ; Extended_Pictographic# E12.0 [1] (🛺) auto rickshaw +1F6FB..1F6FC ; Extended_Pictographic# E13.0 [2] (🛻..🛼) pickup truck..roller skate +1F6FD..1F6FF ; Extended_Pictographic# E0.0 [3] (🛽..🛿) .. +1F774..1F77F ; Extended_Pictographic# E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS +1F7D5..1F7DF ; Extended_Pictographic# E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. +1F7E0..1F7EB ; Extended_Pictographic# E12.0 [12] (🟠..🟫) orange circle..brown square +1F7EC..1F7EF ; Extended_Pictographic# E0.0 [4] (🟬..🟯) .. +1F7F0 ; Extended_Pictographic# E14.0 [1] (🟰) heavy equals sign +1F7F1..1F7FF ; Extended_Pictographic# E0.0 [15] (🟱..🟿) .. +1F80C..1F80F ; Extended_Pictographic# E0.0 [4] (🠌..🠏) .. +1F848..1F84F ; Extended_Pictographic# E0.0 [8] (🡈..🡏) .. +1F85A..1F85F ; Extended_Pictographic# E0.0 [6] (🡚..🡟) .. +1F888..1F88F ; Extended_Pictographic# E0.0 [8] (🢈..🢏) .. +1F8AE..1F8FF ; Extended_Pictographic# E0.0 [82] (🢮..🣿) .. +1F90C ; Extended_Pictographic# E13.0 [1] (🤌) pinched fingers +1F90D..1F90F ; Extended_Pictographic# E12.0 [3] (🤍..🤏) white heart..pinching hand +1F910..1F918 ; Extended_Pictographic# E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns +1F919..1F91E ; Extended_Pictographic# E3.0 [6] (🤙..🤞) call me hand..crossed fingers +1F91F ; Extended_Pictographic# E5.0 [1] (🤟) love-you gesture +1F920..1F927 ; Extended_Pictographic# E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face +1F928..1F92F ; Extended_Pictographic# E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head +1F930 ; Extended_Pictographic# E3.0 [1] (🤰) pregnant woman +1F931..1F932 ; Extended_Pictographic# E5.0 [2] (🤱..🤲) breast-feeding..palms up together +1F933..1F93A ; Extended_Pictographic# E3.0 [8] (🤳..🤺) selfie..person fencing +1F93C..1F93E ; Extended_Pictographic# E3.0 [3] (🤼..🤾) people wrestling..person playing handball +1F93F ; Extended_Pictographic# E12.0 [1] (🤿) diving mask +1F940..1F945 ; Extended_Pictographic# E3.0 [6] (🥀..🥅) wilted flower..goal net +1F947..1F94B ; Extended_Pictographic# E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform +1F94C ; Extended_Pictographic# E5.0 [1] (🥌) curling stone +1F94D..1F94F ; Extended_Pictographic# E11.0 [3] (🥍..🥏) lacrosse..flying disc +1F950..1F95E ; Extended_Pictographic# E3.0 [15] (🥐..🥞) croissant..pancakes +1F95F..1F96B ; Extended_Pictographic# E5.0 [13] (🥟..🥫) dumpling..canned food +1F96C..1F970 ; Extended_Pictographic# E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts +1F971 ; Extended_Pictographic# E12.0 [1] (🥱) yawning face +1F972 ; Extended_Pictographic# E13.0 [1] (🥲) smiling face with tear +1F973..1F976 ; Extended_Pictographic# E11.0 [4] (🥳..🥶) partying face..cold face +1F977..1F978 ; Extended_Pictographic# E13.0 [2] (🥷..🥸) ninja..disguised face +1F979 ; Extended_Pictographic# E14.0 [1] (🥹) face holding back tears +1F97A ; Extended_Pictographic# E11.0 [1] (🥺) pleading face +1F97B ; Extended_Pictographic# E12.0 [1] (🥻) sari +1F97C..1F97F ; Extended_Pictographic# E11.0 [4] (🥼..🥿) lab coat..flat shoe +1F980..1F984 ; Extended_Pictographic# E1.0 [5] (🦀..🦄) crab..unicorn +1F985..1F991 ; Extended_Pictographic# E3.0 [13] (🦅..🦑) eagle..squid +1F992..1F997 ; Extended_Pictographic# E5.0 [6] (🦒..🦗) giraffe..cricket +1F998..1F9A2 ; Extended_Pictographic# E11.0 [11] (🦘..🦢) kangaroo..swan +1F9A3..1F9A4 ; Extended_Pictographic# E13.0 [2] (🦣..🦤) mammoth..dodo +1F9A5..1F9AA ; Extended_Pictographic# E12.0 [6] (🦥..🦪) sloth..oyster +1F9AB..1F9AD ; Extended_Pictographic# E13.0 [3] (🦫..🦭) beaver..seal +1F9AE..1F9AF ; Extended_Pictographic# E12.0 [2] (🦮..🦯) guide dog..white cane +1F9B0..1F9B9 ; Extended_Pictographic# E11.0 [10] (🦰..🦹) red hair..supervillain +1F9BA..1F9BF ; Extended_Pictographic# E12.0 [6] (🦺..🦿) safety vest..mechanical leg +1F9C0 ; Extended_Pictographic# E1.0 [1] (🧀) cheese wedge +1F9C1..1F9C2 ; Extended_Pictographic# E11.0 [2] (🧁..🧂) cupcake..salt +1F9C3..1F9CA ; Extended_Pictographic# E12.0 [8] (🧃..🧊) beverage box..ice +1F9CB ; Extended_Pictographic# E13.0 [1] (🧋) bubble tea +1F9CC ; Extended_Pictographic# E14.0 [1] (🧌) troll +1F9CD..1F9CF ; Extended_Pictographic# E12.0 [3] (🧍..🧏) person standing..deaf person +1F9D0..1F9E6 ; Extended_Pictographic# E5.0 [23] (🧐..🧦) face with monocle..socks +1F9E7..1F9FF ; Extended_Pictographic# E11.0 [25] (🧧..🧿) red envelope..nazar amulet +1FA00..1FA6F ; Extended_Pictographic# E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. +1FA70..1FA73 ; Extended_Pictographic# E12.0 [4] (🩰..🩳) ballet shoes..shorts +1FA74 ; Extended_Pictographic# E13.0 [1] (🩴) thong sandal +1FA75..1FA77 ; Extended_Pictographic# E15.0 [3] (🩵..🩷) light blue heart..pink heart +1FA78..1FA7A ; Extended_Pictographic# E12.0 [3] (🩸..🩺) drop of blood..stethoscope +1FA7B..1FA7C ; Extended_Pictographic# E14.0 [2] (🩻..🩼) x-ray..crutch +1FA7D..1FA7F ; Extended_Pictographic# E0.0 [3] (🩽..🩿) .. +1FA80..1FA82 ; Extended_Pictographic# E12.0 [3] (🪀..🪂) yo-yo..parachute +1FA83..1FA86 ; Extended_Pictographic# E13.0 [4] (🪃..🪆) boomerang..nesting dolls +1FA87..1FA88 ; Extended_Pictographic# E15.0 [2] (🪇..🪈) maracas..flute +1FA89..1FA8F ; Extended_Pictographic# E0.0 [7] (🪉..🪏) .. +1FA90..1FA95 ; Extended_Pictographic# E12.0 [6] (🪐..🪕) ringed planet..banjo +1FA96..1FAA8 ; Extended_Pictographic# E13.0 [19] (🪖..🪨) military helmet..rock +1FAA9..1FAAC ; Extended_Pictographic# E14.0 [4] (🪩..🪬) mirror ball..hamsa +1FAAD..1FAAF ; Extended_Pictographic# E15.0 [3] (🪭..🪯) folding hand fan..khanda +1FAB0..1FAB6 ; Extended_Pictographic# E13.0 [7] (🪰..🪶) fly..feather +1FAB7..1FABA ; Extended_Pictographic# E14.0 [4] (🪷..🪺) lotus..nest with eggs +1FABB..1FABD ; Extended_Pictographic# E15.0 [3] (🪻..🪽) hyacinth..wing +1FABE ; Extended_Pictographic# E0.0 [1] (🪾) +1FABF ; Extended_Pictographic# E15.0 [1] (🪿) goose +1FAC0..1FAC2 ; Extended_Pictographic# E13.0 [3] (🫀..🫂) anatomical heart..people hugging +1FAC3..1FAC5 ; Extended_Pictographic# E14.0 [3] (🫃..🫅) pregnant man..person with crown +1FAC6..1FACD ; Extended_Pictographic# E0.0 [8] (🫆..🫍) .. +1FACE..1FACF ; Extended_Pictographic# E15.0 [2] (🫎..🫏) moose..donkey +1FAD0..1FAD6 ; Extended_Pictographic# E13.0 [7] (🫐..🫖) blueberries..teapot +1FAD7..1FAD9 ; Extended_Pictographic# E14.0 [3] (🫗..🫙) pouring liquid..jar +1FADA..1FADB ; Extended_Pictographic# E15.0 [2] (🫚..🫛) ginger root..pea pod +1FADC..1FADF ; Extended_Pictographic# E0.0 [4] (🫜..🫟) .. +1FAE0..1FAE7 ; Extended_Pictographic# E14.0 [8] (🫠..🫧) melting face..bubbles +1FAE8 ; Extended_Pictographic# E15.0 [1] (🫨) shaking face +1FAE9..1FAEF ; Extended_Pictographic# E0.0 [7] (🫩..🫯) .. +1FAF0..1FAF6 ; Extended_Pictographic# E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands +1FAF7..1FAF8 ; Extended_Pictographic# E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand +1FAF9..1FAFF ; Extended_Pictographic# E0.0 [7] (🫹..🫿) .. +1FC00..1FFFD ; Extended_Pictographic# E0.0[1022] (🰀..🿽) .. + +# Total elements: 3537 + +#EOF diff --git a/pkgs/characters/third_party/Unicode_Consortium/emoji_test.txt b/pkgs/characters/third_party/Unicode_Consortium/emoji_test.txt index 05b6f2c7..87d093d6 100644 --- a/pkgs/characters/third_party/Unicode_Consortium/emoji_test.txt +++ b/pkgs/characters/third_party/Unicode_Consortium/emoji_test.txt @@ -1,3793 +1,5024 @@ -# emoji-test.txt -# Date: 2018-02-07, 09:44:06 GMT -# © 2018 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# -# Emoji Keyboard/Display Test Data for UTS #51 -# Version: 11.0 -# -# For documentation and usage, see http://www.unicode.org/reports/tr51 -# -# This file provides data for testing which emoji forms should be in keyboards and which should also be displayed/processed. -# Format -# Code points; status # emoji name -# Status -# fully-qualified — see “Emoji Implementation Notes” in UTS #51 -# non-fully-qualified — see “Emoji Implementation Notes” in UTS #51 -# Notes: -# • This currently omits the 12 keycap bases, the 5 modifier characters, and 26 singleton Regional Indicator characters -# • The file is in CLDR order, not codepoint order. This is recommended (but not required!) for keyboard palettes. -# • The groups and subgroups are purely illustrative. See the Emoji Order chart for more information. - -# group: Smileys & People - -# subgroup: face-positive -1F600 ; fully-qualified # 😀 grinning face -1F601 ; fully-qualified # 😁 beaming face with smiling eyes -1F602 ; fully-qualified # 😂 face with tears of joy -1F923 ; fully-qualified # 🤣 rolling on the floor laughing -1F603 ; fully-qualified # 😃 grinning face with big eyes -1F604 ; fully-qualified # 😄 grinning face with smiling eyes -1F605 ; fully-qualified # 😅 grinning face with sweat -1F606 ; fully-qualified # 😆 grinning squinting face -1F609 ; fully-qualified # 😉 winking face -1F60A ; fully-qualified # 😊 smiling face with smiling eyes -1F60B ; fully-qualified # 😋 face savoring food -1F60E ; fully-qualified # 😎 smiling face with sunglasses -1F60D ; fully-qualified # 😍 smiling face with heart-eyes -1F618 ; fully-qualified # 😘 face blowing a kiss -1F970 ; fully-qualified # 🥰 smiling face with 3 hearts -1F617 ; fully-qualified # 😗 kissing face -1F619 ; fully-qualified # 😙 kissing face with smiling eyes -1F61A ; fully-qualified # 😚 kissing face with closed eyes -263A FE0F ; fully-qualified # ☺️ smiling face -263A ; non-fully-qualified # ☺ smiling face -1F642 ; fully-qualified # 🙂 slightly smiling face -1F917 ; fully-qualified # 🤗 hugging face -1F929 ; fully-qualified # 🤩 star-struck - -# subgroup: face-neutral -1F914 ; fully-qualified # 🤔 thinking face -1F928 ; fully-qualified # 🤨 face with raised eyebrow -1F610 ; fully-qualified # 😐 neutral face -1F611 ; fully-qualified # 😑 expressionless face -1F636 ; fully-qualified # 😶 face without mouth -1F644 ; fully-qualified # 🙄 face with rolling eyes -1F60F ; fully-qualified # 😏 smirking face -1F623 ; fully-qualified # 😣 persevering face -1F625 ; fully-qualified # 😥 sad but relieved face -1F62E ; fully-qualified # 😮 face with open mouth -1F910 ; fully-qualified # 🤐 zipper-mouth face -1F62F ; fully-qualified # 😯 hushed face -1F62A ; fully-qualified # 😪 sleepy face -1F62B ; fully-qualified # 😫 tired face -1F634 ; fully-qualified # 😴 sleeping face -1F60C ; fully-qualified # 😌 relieved face -1F61B ; fully-qualified # 😛 face with tongue -1F61C ; fully-qualified # 😜 winking face with tongue -1F61D ; fully-qualified # 😝 squinting face with tongue -1F924 ; fully-qualified # 🤤 drooling face -1F612 ; fully-qualified # 😒 unamused face -1F613 ; fully-qualified # 😓 downcast face with sweat -1F614 ; fully-qualified # 😔 pensive face -1F615 ; fully-qualified # 😕 confused face -1F643 ; fully-qualified # 🙃 upside-down face -1F911 ; fully-qualified # 🤑 money-mouth face -1F632 ; fully-qualified # 😲 astonished face - -# subgroup: face-negative -2639 FE0F ; fully-qualified # ☹️ frowning face -2639 ; non-fully-qualified # ☹ frowning face -1F641 ; fully-qualified # 🙁 slightly frowning face -1F616 ; fully-qualified # 😖 confounded face -1F61E ; fully-qualified # 😞 disappointed face -1F61F ; fully-qualified # 😟 worried face -1F624 ; fully-qualified # 😤 face with steam from nose -1F622 ; fully-qualified # 😢 crying face -1F62D ; fully-qualified # 😭 loudly crying face -1F626 ; fully-qualified # 😦 frowning face with open mouth -1F627 ; fully-qualified # 😧 anguished face -1F628 ; fully-qualified # 😨 fearful face -1F629 ; fully-qualified # 😩 weary face -1F92F ; fully-qualified # 🤯 exploding head -1F62C ; fully-qualified # 😬 grimacing face -1F630 ; fully-qualified # 😰 anxious face with sweat -1F631 ; fully-qualified # 😱 face screaming in fear -1F975 ; fully-qualified # 🥵 hot face -1F976 ; fully-qualified # 🥶 cold face -1F633 ; fully-qualified # 😳 flushed face -1F92A ; fully-qualified # 🤪 zany face -1F635 ; fully-qualified # 😵 dizzy face -1F621 ; fully-qualified # 😡 pouting face -1F620 ; fully-qualified # 😠 angry face -1F92C ; fully-qualified # 🤬 face with symbols on mouth - -# subgroup: face-sick -1F637 ; fully-qualified # 😷 face with medical mask -1F912 ; fully-qualified # 🤒 face with thermometer -1F915 ; fully-qualified # 🤕 face with head-bandage -1F922 ; fully-qualified # 🤢 nauseated face -1F92E ; fully-qualified # 🤮 face vomiting -1F927 ; fully-qualified # 🤧 sneezing face - -# subgroup: face-role -1F607 ; fully-qualified # 😇 smiling face with halo -1F920 ; fully-qualified # 🤠 cowboy hat face -1F973 ; fully-qualified # 🥳 partying face -1F974 ; fully-qualified # 🥴 woozy face -1F97A ; fully-qualified # 🥺 pleading face -1F925 ; fully-qualified # 🤥 lying face -1F92B ; fully-qualified # 🤫 shushing face -1F92D ; fully-qualified # 🤭 face with hand over mouth -1F9D0 ; fully-qualified # 🧐 face with monocle -1F913 ; fully-qualified # 🤓 nerd face - -# subgroup: face-fantasy -1F608 ; fully-qualified # 😈 smiling face with horns -1F47F ; fully-qualified # 👿 angry face with horns -1F921 ; fully-qualified # 🤡 clown face -1F479 ; fully-qualified # 👹 ogre -1F47A ; fully-qualified # 👺 goblin -1F480 ; fully-qualified # 💀 skull -2620 FE0F ; fully-qualified # ☠️ skull and crossbones -2620 ; non-fully-qualified # ☠ skull and crossbones -1F47B ; fully-qualified # 👻 ghost -1F47D ; fully-qualified # 👽 alien -1F47E ; fully-qualified # 👾 alien monster -1F916 ; fully-qualified # 🤖 robot face -1F4A9 ; fully-qualified # 💩 pile of poo - -# subgroup: cat-face -1F63A ; fully-qualified # 😺 grinning cat face -1F638 ; fully-qualified # 😸 grinning cat face with smiling eyes -1F639 ; fully-qualified # 😹 cat face with tears of joy -1F63B ; fully-qualified # 😻 smiling cat face with heart-eyes -1F63C ; fully-qualified # 😼 cat face with wry smile -1F63D ; fully-qualified # 😽 kissing cat face -1F640 ; fully-qualified # 🙀 weary cat face -1F63F ; fully-qualified # 😿 crying cat face -1F63E ; fully-qualified # 😾 pouting cat face - -# subgroup: monkey-face -1F648 ; fully-qualified # 🙈 see-no-evil monkey -1F649 ; fully-qualified # 🙉 hear-no-evil monkey -1F64A ; fully-qualified # 🙊 speak-no-evil monkey - -# subgroup: skin-tone -1F3FB ; fully-qualified # 🏻 light skin tone -1F3FC ; fully-qualified # 🏼 medium-light skin tone -1F3FD ; fully-qualified # 🏽 medium skin tone -1F3FE ; fully-qualified # 🏾 medium-dark skin tone -1F3FF ; fully-qualified # 🏿 dark skin tone - -# subgroup: person -1F476 ; fully-qualified # 👶 baby -1F476 1F3FB ; fully-qualified # 👶🏻 baby: light skin tone -1F476 1F3FC ; fully-qualified # 👶🏼 baby: medium-light skin tone -1F476 1F3FD ; fully-qualified # 👶🏽 baby: medium skin tone -1F476 1F3FE ; fully-qualified # 👶🏾 baby: medium-dark skin tone -1F476 1F3FF ; fully-qualified # 👶🏿 baby: dark skin tone -1F9D2 ; fully-qualified # 🧒 child -1F9D2 1F3FB ; fully-qualified # 🧒🏻 child: light skin tone -1F9D2 1F3FC ; fully-qualified # 🧒🏼 child: medium-light skin tone -1F9D2 1F3FD ; fully-qualified # 🧒🏽 child: medium skin tone -1F9D2 1F3FE ; fully-qualified # 🧒🏾 child: medium-dark skin tone -1F9D2 1F3FF ; fully-qualified # 🧒🏿 child: dark skin tone -1F466 ; fully-qualified # 👦 boy -1F466 1F3FB ; fully-qualified # 👦🏻 boy: light skin tone -1F466 1F3FC ; fully-qualified # 👦🏼 boy: medium-light skin tone -1F466 1F3FD ; fully-qualified # 👦🏽 boy: medium skin tone -1F466 1F3FE ; fully-qualified # 👦🏾 boy: medium-dark skin tone -1F466 1F3FF ; fully-qualified # 👦🏿 boy: dark skin tone -1F467 ; fully-qualified # 👧 girl -1F467 1F3FB ; fully-qualified # 👧🏻 girl: light skin tone -1F467 1F3FC ; fully-qualified # 👧🏼 girl: medium-light skin tone -1F467 1F3FD ; fully-qualified # 👧🏽 girl: medium skin tone -1F467 1F3FE ; fully-qualified # 👧🏾 girl: medium-dark skin tone -1F467 1F3FF ; fully-qualified # 👧🏿 girl: dark skin tone -1F9D1 ; fully-qualified # 🧑 adult -1F9D1 1F3FB ; fully-qualified # 🧑🏻 adult: light skin tone -1F9D1 1F3FC ; fully-qualified # 🧑🏼 adult: medium-light skin tone -1F9D1 1F3FD ; fully-qualified # 🧑🏽 adult: medium skin tone -1F9D1 1F3FE ; fully-qualified # 🧑🏾 adult: medium-dark skin tone -1F9D1 1F3FF ; fully-qualified # 🧑🏿 adult: dark skin tone -1F468 ; fully-qualified # 👨 man -1F468 1F3FB ; fully-qualified # 👨🏻 man: light skin tone -1F468 1F3FC ; fully-qualified # 👨🏼 man: medium-light skin tone -1F468 1F3FD ; fully-qualified # 👨🏽 man: medium skin tone -1F468 1F3FE ; fully-qualified # 👨🏾 man: medium-dark skin tone -1F468 1F3FF ; fully-qualified # 👨🏿 man: dark skin tone -1F469 ; fully-qualified # 👩 woman -1F469 1F3FB ; fully-qualified # 👩🏻 woman: light skin tone -1F469 1F3FC ; fully-qualified # 👩🏼 woman: medium-light skin tone -1F469 1F3FD ; fully-qualified # 👩🏽 woman: medium skin tone -1F469 1F3FE ; fully-qualified # 👩🏾 woman: medium-dark skin tone -1F469 1F3FF ; fully-qualified # 👩🏿 woman: dark skin tone -1F9D3 ; fully-qualified # 🧓 older adult -1F9D3 1F3FB ; fully-qualified # 🧓🏻 older adult: light skin tone -1F9D3 1F3FC ; fully-qualified # 🧓🏼 older adult: medium-light skin tone -1F9D3 1F3FD ; fully-qualified # 🧓🏽 older adult: medium skin tone -1F9D3 1F3FE ; fully-qualified # 🧓🏾 older adult: medium-dark skin tone -1F9D3 1F3FF ; fully-qualified # 🧓🏿 older adult: dark skin tone -1F474 ; fully-qualified # 👴 old man -1F474 1F3FB ; fully-qualified # 👴🏻 old man: light skin tone -1F474 1F3FC ; fully-qualified # 👴🏼 old man: medium-light skin tone -1F474 1F3FD ; fully-qualified # 👴🏽 old man: medium skin tone -1F474 1F3FE ; fully-qualified # 👴🏾 old man: medium-dark skin tone -1F474 1F3FF ; fully-qualified # 👴🏿 old man: dark skin tone -1F475 ; fully-qualified # 👵 old woman -1F475 1F3FB ; fully-qualified # 👵🏻 old woman: light skin tone -1F475 1F3FC ; fully-qualified # 👵🏼 old woman: medium-light skin tone -1F475 1F3FD ; fully-qualified # 👵🏽 old woman: medium skin tone -1F475 1F3FE ; fully-qualified # 👵🏾 old woman: medium-dark skin tone -1F475 1F3FF ; fully-qualified # 👵🏿 old woman: dark skin tone - -# subgroup: person-role -1F468 200D 2695 FE0F ; fully-qualified # 👨‍⚕️ man health worker -1F468 200D 2695 ; non-fully-qualified # 👨‍⚕ man health worker -1F468 1F3FB 200D 2695 FE0F ; fully-qualified # 👨🏻‍⚕️ man health worker: light skin tone -1F468 1F3FB 200D 2695 ; non-fully-qualified # 👨🏻‍⚕ man health worker: light skin tone -1F468 1F3FC 200D 2695 FE0F ; fully-qualified # 👨🏼‍⚕️ man health worker: medium-light skin tone -1F468 1F3FC 200D 2695 ; non-fully-qualified # 👨🏼‍⚕ man health worker: medium-light skin tone -1F468 1F3FD 200D 2695 FE0F ; fully-qualified # 👨🏽‍⚕️ man health worker: medium skin tone -1F468 1F3FD 200D 2695 ; non-fully-qualified # 👨🏽‍⚕ man health worker: medium skin tone -1F468 1F3FE 200D 2695 FE0F ; fully-qualified # 👨🏾‍⚕️ man health worker: medium-dark skin tone -1F468 1F3FE 200D 2695 ; non-fully-qualified # 👨🏾‍⚕ man health worker: medium-dark skin tone -1F468 1F3FF 200D 2695 FE0F ; fully-qualified # 👨🏿‍⚕️ man health worker: dark skin tone -1F468 1F3FF 200D 2695 ; non-fully-qualified # 👨🏿‍⚕ man health worker: dark skin tone -1F469 200D 2695 FE0F ; fully-qualified # 👩‍⚕️ woman health worker -1F469 200D 2695 ; non-fully-qualified # 👩‍⚕ woman health worker -1F469 1F3FB 200D 2695 FE0F ; fully-qualified # 👩🏻‍⚕️ woman health worker: light skin tone -1F469 1F3FB 200D 2695 ; non-fully-qualified # 👩🏻‍⚕ woman health worker: light skin tone -1F469 1F3FC 200D 2695 FE0F ; fully-qualified # 👩🏼‍⚕️ woman health worker: medium-light skin tone -1F469 1F3FC 200D 2695 ; non-fully-qualified # 👩🏼‍⚕ woman health worker: medium-light skin tone -1F469 1F3FD 200D 2695 FE0F ; fully-qualified # 👩🏽‍⚕️ woman health worker: medium skin tone -1F469 1F3FD 200D 2695 ; non-fully-qualified # 👩🏽‍⚕ woman health worker: medium skin tone -1F469 1F3FE 200D 2695 FE0F ; fully-qualified # 👩🏾‍⚕️ woman health worker: medium-dark skin tone -1F469 1F3FE 200D 2695 ; non-fully-qualified # 👩🏾‍⚕ woman health worker: medium-dark skin tone -1F469 1F3FF 200D 2695 FE0F ; fully-qualified # 👩🏿‍⚕️ woman health worker: dark skin tone -1F469 1F3FF 200D 2695 ; non-fully-qualified # 👩🏿‍⚕ woman health worker: dark skin tone -1F468 200D 1F393 ; fully-qualified # 👨‍🎓 man student -1F468 1F3FB 200D 1F393 ; fully-qualified # 👨🏻‍🎓 man student: light skin tone -1F468 1F3FC 200D 1F393 ; fully-qualified # 👨🏼‍🎓 man student: medium-light skin tone -1F468 1F3FD 200D 1F393 ; fully-qualified # 👨🏽‍🎓 man student: medium skin tone -1F468 1F3FE 200D 1F393 ; fully-qualified # 👨🏾‍🎓 man student: medium-dark skin tone -1F468 1F3FF 200D 1F393 ; fully-qualified # 👨🏿‍🎓 man student: dark skin tone -1F469 200D 1F393 ; fully-qualified # 👩‍🎓 woman student -1F469 1F3FB 200D 1F393 ; fully-qualified # 👩🏻‍🎓 woman student: light skin tone -1F469 1F3FC 200D 1F393 ; fully-qualified # 👩🏼‍🎓 woman student: medium-light skin tone -1F469 1F3FD 200D 1F393 ; fully-qualified # 👩🏽‍🎓 woman student: medium skin tone -1F469 1F3FE 200D 1F393 ; fully-qualified # 👩🏾‍🎓 woman student: medium-dark skin tone -1F469 1F3FF 200D 1F393 ; fully-qualified # 👩🏿‍🎓 woman student: dark skin tone -1F468 200D 1F3EB ; fully-qualified # 👨‍🏫 man teacher -1F468 1F3FB 200D 1F3EB ; fully-qualified # 👨🏻‍🏫 man teacher: light skin tone -1F468 1F3FC 200D 1F3EB ; fully-qualified # 👨🏼‍🏫 man teacher: medium-light skin tone -1F468 1F3FD 200D 1F3EB ; fully-qualified # 👨🏽‍🏫 man teacher: medium skin tone -1F468 1F3FE 200D 1F3EB ; fully-qualified # 👨🏾‍🏫 man teacher: medium-dark skin tone -1F468 1F3FF 200D 1F3EB ; fully-qualified # 👨🏿‍🏫 man teacher: dark skin tone -1F469 200D 1F3EB ; fully-qualified # 👩‍🏫 woman teacher -1F469 1F3FB 200D 1F3EB ; fully-qualified # 👩🏻‍🏫 woman teacher: light skin tone -1F469 1F3FC 200D 1F3EB ; fully-qualified # 👩🏼‍🏫 woman teacher: medium-light skin tone -1F469 1F3FD 200D 1F3EB ; fully-qualified # 👩🏽‍🏫 woman teacher: medium skin tone -1F469 1F3FE 200D 1F3EB ; fully-qualified # 👩🏾‍🏫 woman teacher: medium-dark skin tone -1F469 1F3FF 200D 1F3EB ; fully-qualified # 👩🏿‍🏫 woman teacher: dark skin tone -1F468 200D 2696 FE0F ; fully-qualified # 👨‍⚖️ man judge -1F468 200D 2696 ; non-fully-qualified # 👨‍⚖ man judge -1F468 1F3FB 200D 2696 FE0F ; fully-qualified # 👨🏻‍⚖️ man judge: light skin tone -1F468 1F3FB 200D 2696 ; non-fully-qualified # 👨🏻‍⚖ man judge: light skin tone -1F468 1F3FC 200D 2696 FE0F ; fully-qualified # 👨🏼‍⚖️ man judge: medium-light skin tone -1F468 1F3FC 200D 2696 ; non-fully-qualified # 👨🏼‍⚖ man judge: medium-light skin tone -1F468 1F3FD 200D 2696 FE0F ; fully-qualified # 👨🏽‍⚖️ man judge: medium skin tone -1F468 1F3FD 200D 2696 ; non-fully-qualified # 👨🏽‍⚖ man judge: medium skin tone -1F468 1F3FE 200D 2696 FE0F ; fully-qualified # 👨🏾‍⚖️ man judge: medium-dark skin tone -1F468 1F3FE 200D 2696 ; non-fully-qualified # 👨🏾‍⚖ man judge: medium-dark skin tone -1F468 1F3FF 200D 2696 FE0F ; fully-qualified # 👨🏿‍⚖️ man judge: dark skin tone -1F468 1F3FF 200D 2696 ; non-fully-qualified # 👨🏿‍⚖ man judge: dark skin tone -1F469 200D 2696 FE0F ; fully-qualified # 👩‍⚖️ woman judge -1F469 200D 2696 ; non-fully-qualified # 👩‍⚖ woman judge -1F469 1F3FB 200D 2696 FE0F ; fully-qualified # 👩🏻‍⚖️ woman judge: light skin tone -1F469 1F3FB 200D 2696 ; non-fully-qualified # 👩🏻‍⚖ woman judge: light skin tone -1F469 1F3FC 200D 2696 FE0F ; fully-qualified # 👩🏼‍⚖️ woman judge: medium-light skin tone -1F469 1F3FC 200D 2696 ; non-fully-qualified # 👩🏼‍⚖ woman judge: medium-light skin tone -1F469 1F3FD 200D 2696 FE0F ; fully-qualified # 👩🏽‍⚖️ woman judge: medium skin tone -1F469 1F3FD 200D 2696 ; non-fully-qualified # 👩🏽‍⚖ woman judge: medium skin tone -1F469 1F3FE 200D 2696 FE0F ; fully-qualified # 👩🏾‍⚖️ woman judge: medium-dark skin tone -1F469 1F3FE 200D 2696 ; non-fully-qualified # 👩🏾‍⚖ woman judge: medium-dark skin tone -1F469 1F3FF 200D 2696 FE0F ; fully-qualified # 👩🏿‍⚖️ woman judge: dark skin tone -1F469 1F3FF 200D 2696 ; non-fully-qualified # 👩🏿‍⚖ woman judge: dark skin tone -1F468 200D 1F33E ; fully-qualified # 👨‍🌾 man farmer -1F468 1F3FB 200D 1F33E ; fully-qualified # 👨🏻‍🌾 man farmer: light skin tone -1F468 1F3FC 200D 1F33E ; fully-qualified # 👨🏼‍🌾 man farmer: medium-light skin tone -1F468 1F3FD 200D 1F33E ; fully-qualified # 👨🏽‍🌾 man farmer: medium skin tone -1F468 1F3FE 200D 1F33E ; fully-qualified # 👨🏾‍🌾 man farmer: medium-dark skin tone -1F468 1F3FF 200D 1F33E ; fully-qualified # 👨🏿‍🌾 man farmer: dark skin tone -1F469 200D 1F33E ; fully-qualified # 👩‍🌾 woman farmer -1F469 1F3FB 200D 1F33E ; fully-qualified # 👩🏻‍🌾 woman farmer: light skin tone -1F469 1F3FC 200D 1F33E ; fully-qualified # 👩🏼‍🌾 woman farmer: medium-light skin tone -1F469 1F3FD 200D 1F33E ; fully-qualified # 👩🏽‍🌾 woman farmer: medium skin tone -1F469 1F3FE 200D 1F33E ; fully-qualified # 👩🏾‍🌾 woman farmer: medium-dark skin tone -1F469 1F3FF 200D 1F33E ; fully-qualified # 👩🏿‍🌾 woman farmer: dark skin tone -1F468 200D 1F373 ; fully-qualified # 👨‍🍳 man cook -1F468 1F3FB 200D 1F373 ; fully-qualified # 👨🏻‍🍳 man cook: light skin tone -1F468 1F3FC 200D 1F373 ; fully-qualified # 👨🏼‍🍳 man cook: medium-light skin tone -1F468 1F3FD 200D 1F373 ; fully-qualified # 👨🏽‍🍳 man cook: medium skin tone -1F468 1F3FE 200D 1F373 ; fully-qualified # 👨🏾‍🍳 man cook: medium-dark skin tone -1F468 1F3FF 200D 1F373 ; fully-qualified # 👨🏿‍🍳 man cook: dark skin tone -1F469 200D 1F373 ; fully-qualified # 👩‍🍳 woman cook -1F469 1F3FB 200D 1F373 ; fully-qualified # 👩🏻‍🍳 woman cook: light skin tone -1F469 1F3FC 200D 1F373 ; fully-qualified # 👩🏼‍🍳 woman cook: medium-light skin tone -1F469 1F3FD 200D 1F373 ; fully-qualified # 👩🏽‍🍳 woman cook: medium skin tone -1F469 1F3FE 200D 1F373 ; fully-qualified # 👩🏾‍🍳 woman cook: medium-dark skin tone -1F469 1F3FF 200D 1F373 ; fully-qualified # 👩🏿‍🍳 woman cook: dark skin tone -1F468 200D 1F527 ; fully-qualified # 👨‍🔧 man mechanic -1F468 1F3FB 200D 1F527 ; fully-qualified # 👨🏻‍🔧 man mechanic: light skin tone -1F468 1F3FC 200D 1F527 ; fully-qualified # 👨🏼‍🔧 man mechanic: medium-light skin tone -1F468 1F3FD 200D 1F527 ; fully-qualified # 👨🏽‍🔧 man mechanic: medium skin tone -1F468 1F3FE 200D 1F527 ; fully-qualified # 👨🏾‍🔧 man mechanic: medium-dark skin tone -1F468 1F3FF 200D 1F527 ; fully-qualified # 👨🏿‍🔧 man mechanic: dark skin tone -1F469 200D 1F527 ; fully-qualified # 👩‍🔧 woman mechanic -1F469 1F3FB 200D 1F527 ; fully-qualified # 👩🏻‍🔧 woman mechanic: light skin tone -1F469 1F3FC 200D 1F527 ; fully-qualified # 👩🏼‍🔧 woman mechanic: medium-light skin tone -1F469 1F3FD 200D 1F527 ; fully-qualified # 👩🏽‍🔧 woman mechanic: medium skin tone -1F469 1F3FE 200D 1F527 ; fully-qualified # 👩🏾‍🔧 woman mechanic: medium-dark skin tone -1F469 1F3FF 200D 1F527 ; fully-qualified # 👩🏿‍🔧 woman mechanic: dark skin tone -1F468 200D 1F3ED ; fully-qualified # 👨‍🏭 man factory worker -1F468 1F3FB 200D 1F3ED ; fully-qualified # 👨🏻‍🏭 man factory worker: light skin tone -1F468 1F3FC 200D 1F3ED ; fully-qualified # 👨🏼‍🏭 man factory worker: medium-light skin tone -1F468 1F3FD 200D 1F3ED ; fully-qualified # 👨🏽‍🏭 man factory worker: medium skin tone -1F468 1F3FE 200D 1F3ED ; fully-qualified # 👨🏾‍🏭 man factory worker: medium-dark skin tone -1F468 1F3FF 200D 1F3ED ; fully-qualified # 👨🏿‍🏭 man factory worker: dark skin tone -1F469 200D 1F3ED ; fully-qualified # 👩‍🏭 woman factory worker -1F469 1F3FB 200D 1F3ED ; fully-qualified # 👩🏻‍🏭 woman factory worker: light skin tone -1F469 1F3FC 200D 1F3ED ; fully-qualified # 👩🏼‍🏭 woman factory worker: medium-light skin tone -1F469 1F3FD 200D 1F3ED ; fully-qualified # 👩🏽‍🏭 woman factory worker: medium skin tone -1F469 1F3FE 200D 1F3ED ; fully-qualified # 👩🏾‍🏭 woman factory worker: medium-dark skin tone -1F469 1F3FF 200D 1F3ED ; fully-qualified # 👩🏿‍🏭 woman factory worker: dark skin tone -1F468 200D 1F4BC ; fully-qualified # 👨‍💼 man office worker -1F468 1F3FB 200D 1F4BC ; fully-qualified # 👨🏻‍💼 man office worker: light skin tone -1F468 1F3FC 200D 1F4BC ; fully-qualified # 👨🏼‍💼 man office worker: medium-light skin tone -1F468 1F3FD 200D 1F4BC ; fully-qualified # 👨🏽‍💼 man office worker: medium skin tone -1F468 1F3FE 200D 1F4BC ; fully-qualified # 👨🏾‍💼 man office worker: medium-dark skin tone -1F468 1F3FF 200D 1F4BC ; fully-qualified # 👨🏿‍💼 man office worker: dark skin tone -1F469 200D 1F4BC ; fully-qualified # 👩‍💼 woman office worker -1F469 1F3FB 200D 1F4BC ; fully-qualified # 👩🏻‍💼 woman office worker: light skin tone -1F469 1F3FC 200D 1F4BC ; fully-qualified # 👩🏼‍💼 woman office worker: medium-light skin tone -1F469 1F3FD 200D 1F4BC ; fully-qualified # 👩🏽‍💼 woman office worker: medium skin tone -1F469 1F3FE 200D 1F4BC ; fully-qualified # 👩🏾‍💼 woman office worker: medium-dark skin tone -1F469 1F3FF 200D 1F4BC ; fully-qualified # 👩🏿‍💼 woman office worker: dark skin tone -1F468 200D 1F52C ; fully-qualified # 👨‍🔬 man scientist -1F468 1F3FB 200D 1F52C ; fully-qualified # 👨🏻‍🔬 man scientist: light skin tone -1F468 1F3FC 200D 1F52C ; fully-qualified # 👨🏼‍🔬 man scientist: medium-light skin tone -1F468 1F3FD 200D 1F52C ; fully-qualified # 👨🏽‍🔬 man scientist: medium skin tone -1F468 1F3FE 200D 1F52C ; fully-qualified # 👨🏾‍🔬 man scientist: medium-dark skin tone -1F468 1F3FF 200D 1F52C ; fully-qualified # 👨🏿‍🔬 man scientist: dark skin tone -1F469 200D 1F52C ; fully-qualified # 👩‍🔬 woman scientist -1F469 1F3FB 200D 1F52C ; fully-qualified # 👩🏻‍🔬 woman scientist: light skin tone -1F469 1F3FC 200D 1F52C ; fully-qualified # 👩🏼‍🔬 woman scientist: medium-light skin tone -1F469 1F3FD 200D 1F52C ; fully-qualified # 👩🏽‍🔬 woman scientist: medium skin tone -1F469 1F3FE 200D 1F52C ; fully-qualified # 👩🏾‍🔬 woman scientist: medium-dark skin tone -1F469 1F3FF 200D 1F52C ; fully-qualified # 👩🏿‍🔬 woman scientist: dark skin tone -1F468 200D 1F4BB ; fully-qualified # 👨‍💻 man technologist -1F468 1F3FB 200D 1F4BB ; fully-qualified # 👨🏻‍💻 man technologist: light skin tone -1F468 1F3FC 200D 1F4BB ; fully-qualified # 👨🏼‍💻 man technologist: medium-light skin tone -1F468 1F3FD 200D 1F4BB ; fully-qualified # 👨🏽‍💻 man technologist: medium skin tone -1F468 1F3FE 200D 1F4BB ; fully-qualified # 👨🏾‍💻 man technologist: medium-dark skin tone -1F468 1F3FF 200D 1F4BB ; fully-qualified # 👨🏿‍💻 man technologist: dark skin tone -1F469 200D 1F4BB ; fully-qualified # 👩‍💻 woman technologist -1F469 1F3FB 200D 1F4BB ; fully-qualified # 👩🏻‍💻 woman technologist: light skin tone -1F469 1F3FC 200D 1F4BB ; fully-qualified # 👩🏼‍💻 woman technologist: medium-light skin tone -1F469 1F3FD 200D 1F4BB ; fully-qualified # 👩🏽‍💻 woman technologist: medium skin tone -1F469 1F3FE 200D 1F4BB ; fully-qualified # 👩🏾‍💻 woman technologist: medium-dark skin tone -1F469 1F3FF 200D 1F4BB ; fully-qualified # 👩🏿‍💻 woman technologist: dark skin tone -1F468 200D 1F3A4 ; fully-qualified # 👨‍🎤 man singer -1F468 1F3FB 200D 1F3A4 ; fully-qualified # 👨🏻‍🎤 man singer: light skin tone -1F468 1F3FC 200D 1F3A4 ; fully-qualified # 👨🏼‍🎤 man singer: medium-light skin tone -1F468 1F3FD 200D 1F3A4 ; fully-qualified # 👨🏽‍🎤 man singer: medium skin tone -1F468 1F3FE 200D 1F3A4 ; fully-qualified # 👨🏾‍🎤 man singer: medium-dark skin tone -1F468 1F3FF 200D 1F3A4 ; fully-qualified # 👨🏿‍🎤 man singer: dark skin tone -1F469 200D 1F3A4 ; fully-qualified # 👩‍🎤 woman singer -1F469 1F3FB 200D 1F3A4 ; fully-qualified # 👩🏻‍🎤 woman singer: light skin tone -1F469 1F3FC 200D 1F3A4 ; fully-qualified # 👩🏼‍🎤 woman singer: medium-light skin tone -1F469 1F3FD 200D 1F3A4 ; fully-qualified # 👩🏽‍🎤 woman singer: medium skin tone -1F469 1F3FE 200D 1F3A4 ; fully-qualified # 👩🏾‍🎤 woman singer: medium-dark skin tone -1F469 1F3FF 200D 1F3A4 ; fully-qualified # 👩🏿‍🎤 woman singer: dark skin tone -1F468 200D 1F3A8 ; fully-qualified # 👨‍🎨 man artist -1F468 1F3FB 200D 1F3A8 ; fully-qualified # 👨🏻‍🎨 man artist: light skin tone -1F468 1F3FC 200D 1F3A8 ; fully-qualified # 👨🏼‍🎨 man artist: medium-light skin tone -1F468 1F3FD 200D 1F3A8 ; fully-qualified # 👨🏽‍🎨 man artist: medium skin tone -1F468 1F3FE 200D 1F3A8 ; fully-qualified # 👨🏾‍🎨 man artist: medium-dark skin tone -1F468 1F3FF 200D 1F3A8 ; fully-qualified # 👨🏿‍🎨 man artist: dark skin tone -1F469 200D 1F3A8 ; fully-qualified # 👩‍🎨 woman artist -1F469 1F3FB 200D 1F3A8 ; fully-qualified # 👩🏻‍🎨 woman artist: light skin tone -1F469 1F3FC 200D 1F3A8 ; fully-qualified # 👩🏼‍🎨 woman artist: medium-light skin tone -1F469 1F3FD 200D 1F3A8 ; fully-qualified # 👩🏽‍🎨 woman artist: medium skin tone -1F469 1F3FE 200D 1F3A8 ; fully-qualified # 👩🏾‍🎨 woman artist: medium-dark skin tone -1F469 1F3FF 200D 1F3A8 ; fully-qualified # 👩🏿‍🎨 woman artist: dark skin tone -1F468 200D 2708 FE0F ; fully-qualified # 👨‍✈️ man pilot -1F468 200D 2708 ; non-fully-qualified # 👨‍✈ man pilot -1F468 1F3FB 200D 2708 FE0F ; fully-qualified # 👨🏻‍✈️ man pilot: light skin tone -1F468 1F3FB 200D 2708 ; non-fully-qualified # 👨🏻‍✈ man pilot: light skin tone -1F468 1F3FC 200D 2708 FE0F ; fully-qualified # 👨🏼‍✈️ man pilot: medium-light skin tone -1F468 1F3FC 200D 2708 ; non-fully-qualified # 👨🏼‍✈ man pilot: medium-light skin tone -1F468 1F3FD 200D 2708 FE0F ; fully-qualified # 👨🏽‍✈️ man pilot: medium skin tone -1F468 1F3FD 200D 2708 ; non-fully-qualified # 👨🏽‍✈ man pilot: medium skin tone -1F468 1F3FE 200D 2708 FE0F ; fully-qualified # 👨🏾‍✈️ man pilot: medium-dark skin tone -1F468 1F3FE 200D 2708 ; non-fully-qualified # 👨🏾‍✈ man pilot: medium-dark skin tone -1F468 1F3FF 200D 2708 FE0F ; fully-qualified # 👨🏿‍✈️ man pilot: dark skin tone -1F468 1F3FF 200D 2708 ; non-fully-qualified # 👨🏿‍✈ man pilot: dark skin tone -1F469 200D 2708 FE0F ; fully-qualified # 👩‍✈️ woman pilot -1F469 200D 2708 ; non-fully-qualified # 👩‍✈ woman pilot -1F469 1F3FB 200D 2708 FE0F ; fully-qualified # 👩🏻‍✈️ woman pilot: light skin tone -1F469 1F3FB 200D 2708 ; non-fully-qualified # 👩🏻‍✈ woman pilot: light skin tone -1F469 1F3FC 200D 2708 FE0F ; fully-qualified # 👩🏼‍✈️ woman pilot: medium-light skin tone -1F469 1F3FC 200D 2708 ; non-fully-qualified # 👩🏼‍✈ woman pilot: medium-light skin tone -1F469 1F3FD 200D 2708 FE0F ; fully-qualified # 👩🏽‍✈️ woman pilot: medium skin tone -1F469 1F3FD 200D 2708 ; non-fully-qualified # 👩🏽‍✈ woman pilot: medium skin tone -1F469 1F3FE 200D 2708 FE0F ; fully-qualified # 👩🏾‍✈️ woman pilot: medium-dark skin tone -1F469 1F3FE 200D 2708 ; non-fully-qualified # 👩🏾‍✈ woman pilot: medium-dark skin tone -1F469 1F3FF 200D 2708 FE0F ; fully-qualified # 👩🏿‍✈️ woman pilot: dark skin tone -1F469 1F3FF 200D 2708 ; non-fully-qualified # 👩🏿‍✈ woman pilot: dark skin tone -1F468 200D 1F680 ; fully-qualified # 👨‍🚀 man astronaut -1F468 1F3FB 200D 1F680 ; fully-qualified # 👨🏻‍🚀 man astronaut: light skin tone -1F468 1F3FC 200D 1F680 ; fully-qualified # 👨🏼‍🚀 man astronaut: medium-light skin tone -1F468 1F3FD 200D 1F680 ; fully-qualified # 👨🏽‍🚀 man astronaut: medium skin tone -1F468 1F3FE 200D 1F680 ; fully-qualified # 👨🏾‍🚀 man astronaut: medium-dark skin tone -1F468 1F3FF 200D 1F680 ; fully-qualified # 👨🏿‍🚀 man astronaut: dark skin tone -1F469 200D 1F680 ; fully-qualified # 👩‍🚀 woman astronaut -1F469 1F3FB 200D 1F680 ; fully-qualified # 👩🏻‍🚀 woman astronaut: light skin tone -1F469 1F3FC 200D 1F680 ; fully-qualified # 👩🏼‍🚀 woman astronaut: medium-light skin tone -1F469 1F3FD 200D 1F680 ; fully-qualified # 👩🏽‍🚀 woman astronaut: medium skin tone -1F469 1F3FE 200D 1F680 ; fully-qualified # 👩🏾‍🚀 woman astronaut: medium-dark skin tone -1F469 1F3FF 200D 1F680 ; fully-qualified # 👩🏿‍🚀 woman astronaut: dark skin tone -1F468 200D 1F692 ; fully-qualified # 👨‍🚒 man firefighter -1F468 1F3FB 200D 1F692 ; fully-qualified # 👨🏻‍🚒 man firefighter: light skin tone -1F468 1F3FC 200D 1F692 ; fully-qualified # 👨🏼‍🚒 man firefighter: medium-light skin tone -1F468 1F3FD 200D 1F692 ; fully-qualified # 👨🏽‍🚒 man firefighter: medium skin tone -1F468 1F3FE 200D 1F692 ; fully-qualified # 👨🏾‍🚒 man firefighter: medium-dark skin tone -1F468 1F3FF 200D 1F692 ; fully-qualified # 👨🏿‍🚒 man firefighter: dark skin tone -1F469 200D 1F692 ; fully-qualified # 👩‍🚒 woman firefighter -1F469 1F3FB 200D 1F692 ; fully-qualified # 👩🏻‍🚒 woman firefighter: light skin tone -1F469 1F3FC 200D 1F692 ; fully-qualified # 👩🏼‍🚒 woman firefighter: medium-light skin tone -1F469 1F3FD 200D 1F692 ; fully-qualified # 👩🏽‍🚒 woman firefighter: medium skin tone -1F469 1F3FE 200D 1F692 ; fully-qualified # 👩🏾‍🚒 woman firefighter: medium-dark skin tone -1F469 1F3FF 200D 1F692 ; fully-qualified # 👩🏿‍🚒 woman firefighter: dark skin tone -1F46E ; fully-qualified # 👮 police officer -1F46E 1F3FB ; fully-qualified # 👮🏻 police officer: light skin tone -1F46E 1F3FC ; fully-qualified # 👮🏼 police officer: medium-light skin tone -1F46E 1F3FD ; fully-qualified # 👮🏽 police officer: medium skin tone -1F46E 1F3FE ; fully-qualified # 👮🏾 police officer: medium-dark skin tone -1F46E 1F3FF ; fully-qualified # 👮🏿 police officer: dark skin tone -1F46E 200D 2642 FE0F ; fully-qualified # 👮‍♂️ man police officer -1F46E 200D 2642 ; non-fully-qualified # 👮‍♂ man police officer -1F46E 1F3FB 200D 2642 FE0F ; fully-qualified # 👮🏻‍♂️ man police officer: light skin tone -1F46E 1F3FB 200D 2642 ; non-fully-qualified # 👮🏻‍♂ man police officer: light skin tone -1F46E 1F3FC 200D 2642 FE0F ; fully-qualified # 👮🏼‍♂️ man police officer: medium-light skin tone -1F46E 1F3FC 200D 2642 ; non-fully-qualified # 👮🏼‍♂ man police officer: medium-light skin tone -1F46E 1F3FD 200D 2642 FE0F ; fully-qualified # 👮🏽‍♂️ man police officer: medium skin tone -1F46E 1F3FD 200D 2642 ; non-fully-qualified # 👮🏽‍♂ man police officer: medium skin tone -1F46E 1F3FE 200D 2642 FE0F ; fully-qualified # 👮🏾‍♂️ man police officer: medium-dark skin tone -1F46E 1F3FE 200D 2642 ; non-fully-qualified # 👮🏾‍♂ man police officer: medium-dark skin tone -1F46E 1F3FF 200D 2642 FE0F ; fully-qualified # 👮🏿‍♂️ man police officer: dark skin tone -1F46E 1F3FF 200D 2642 ; non-fully-qualified # 👮🏿‍♂ man police officer: dark skin tone -1F46E 200D 2640 FE0F ; fully-qualified # 👮‍♀️ woman police officer -1F46E 200D 2640 ; non-fully-qualified # 👮‍♀ woman police officer -1F46E 1F3FB 200D 2640 FE0F ; fully-qualified # 👮🏻‍♀️ woman police officer: light skin tone -1F46E 1F3FB 200D 2640 ; non-fully-qualified # 👮🏻‍♀ woman police officer: light skin tone -1F46E 1F3FC 200D 2640 FE0F ; fully-qualified # 👮🏼‍♀️ woman police officer: medium-light skin tone -1F46E 1F3FC 200D 2640 ; non-fully-qualified # 👮🏼‍♀ woman police officer: medium-light skin tone -1F46E 1F3FD 200D 2640 FE0F ; fully-qualified # 👮🏽‍♀️ woman police officer: medium skin tone -1F46E 1F3FD 200D 2640 ; non-fully-qualified # 👮🏽‍♀ woman police officer: medium skin tone -1F46E 1F3FE 200D 2640 FE0F ; fully-qualified # 👮🏾‍♀️ woman police officer: medium-dark skin tone -1F46E 1F3FE 200D 2640 ; non-fully-qualified # 👮🏾‍♀ woman police officer: medium-dark skin tone -1F46E 1F3FF 200D 2640 FE0F ; fully-qualified # 👮🏿‍♀️ woman police officer: dark skin tone -1F46E 1F3FF 200D 2640 ; non-fully-qualified # 👮🏿‍♀ woman police officer: dark skin tone -1F575 FE0F ; fully-qualified # 🕵️ detective -1F575 ; non-fully-qualified # 🕵 detective -1F575 1F3FB ; fully-qualified # 🕵🏻 detective: light skin tone -1F575 1F3FC ; fully-qualified # 🕵🏼 detective: medium-light skin tone -1F575 1F3FD ; fully-qualified # 🕵🏽 detective: medium skin tone -1F575 1F3FE ; fully-qualified # 🕵🏾 detective: medium-dark skin tone -1F575 1F3FF ; fully-qualified # 🕵🏿 detective: dark skin tone -1F575 FE0F 200D 2642 FE0F ; fully-qualified # 🕵️‍♂️ man detective -1F575 200D 2642 FE0F ; non-fully-qualified # 🕵‍♂️ man detective -1F575 FE0F 200D 2642 ; non-fully-qualified # 🕵️‍♂ man detective -1F575 200D 2642 ; non-fully-qualified # 🕵‍♂ man detective -1F575 1F3FB 200D 2642 FE0F ; fully-qualified # 🕵🏻‍♂️ man detective: light skin tone -1F575 1F3FB 200D 2642 ; non-fully-qualified # 🕵🏻‍♂ man detective: light skin tone -1F575 1F3FC 200D 2642 FE0F ; fully-qualified # 🕵🏼‍♂️ man detective: medium-light skin tone -1F575 1F3FC 200D 2642 ; non-fully-qualified # 🕵🏼‍♂ man detective: medium-light skin tone -1F575 1F3FD 200D 2642 FE0F ; fully-qualified # 🕵🏽‍♂️ man detective: medium skin tone -1F575 1F3FD 200D 2642 ; non-fully-qualified # 🕵🏽‍♂ man detective: medium skin tone -1F575 1F3FE 200D 2642 FE0F ; fully-qualified # 🕵🏾‍♂️ man detective: medium-dark skin tone -1F575 1F3FE 200D 2642 ; non-fully-qualified # 🕵🏾‍♂ man detective: medium-dark skin tone -1F575 1F3FF 200D 2642 FE0F ; fully-qualified # 🕵🏿‍♂️ man detective: dark skin tone -1F575 1F3FF 200D 2642 ; non-fully-qualified # 🕵🏿‍♂ man detective: dark skin tone -1F575 FE0F 200D 2640 FE0F ; fully-qualified # 🕵️‍♀️ woman detective -1F575 200D 2640 FE0F ; non-fully-qualified # 🕵‍♀️ woman detective -1F575 FE0F 200D 2640 ; non-fully-qualified # 🕵️‍♀ woman detective -1F575 200D 2640 ; non-fully-qualified # 🕵‍♀ woman detective -1F575 1F3FB 200D 2640 FE0F ; fully-qualified # 🕵🏻‍♀️ woman detective: light skin tone -1F575 1F3FB 200D 2640 ; non-fully-qualified # 🕵🏻‍♀ woman detective: light skin tone -1F575 1F3FC 200D 2640 FE0F ; fully-qualified # 🕵🏼‍♀️ woman detective: medium-light skin tone -1F575 1F3FC 200D 2640 ; non-fully-qualified # 🕵🏼‍♀ woman detective: medium-light skin tone -1F575 1F3FD 200D 2640 FE0F ; fully-qualified # 🕵🏽‍♀️ woman detective: medium skin tone -1F575 1F3FD 200D 2640 ; non-fully-qualified # 🕵🏽‍♀ woman detective: medium skin tone -1F575 1F3FE 200D 2640 FE0F ; fully-qualified # 🕵🏾‍♀️ woman detective: medium-dark skin tone -1F575 1F3FE 200D 2640 ; non-fully-qualified # 🕵🏾‍♀ woman detective: medium-dark skin tone -1F575 1F3FF 200D 2640 FE0F ; fully-qualified # 🕵🏿‍♀️ woman detective: dark skin tone -1F575 1F3FF 200D 2640 ; non-fully-qualified # 🕵🏿‍♀ woman detective: dark skin tone -1F482 ; fully-qualified # 💂 guard -1F482 1F3FB ; fully-qualified # 💂🏻 guard: light skin tone -1F482 1F3FC ; fully-qualified # 💂🏼 guard: medium-light skin tone -1F482 1F3FD ; fully-qualified # 💂🏽 guard: medium skin tone -1F482 1F3FE ; fully-qualified # 💂🏾 guard: medium-dark skin tone -1F482 1F3FF ; fully-qualified # 💂🏿 guard: dark skin tone -1F482 200D 2642 FE0F ; fully-qualified # 💂‍♂️ man guard -1F482 200D 2642 ; non-fully-qualified # 💂‍♂ man guard -1F482 1F3FB 200D 2642 FE0F ; fully-qualified # 💂🏻‍♂️ man guard: light skin tone -1F482 1F3FB 200D 2642 ; non-fully-qualified # 💂🏻‍♂ man guard: light skin tone -1F482 1F3FC 200D 2642 FE0F ; fully-qualified # 💂🏼‍♂️ man guard: medium-light skin tone -1F482 1F3FC 200D 2642 ; non-fully-qualified # 💂🏼‍♂ man guard: medium-light skin tone -1F482 1F3FD 200D 2642 FE0F ; fully-qualified # 💂🏽‍♂️ man guard: medium skin tone -1F482 1F3FD 200D 2642 ; non-fully-qualified # 💂🏽‍♂ man guard: medium skin tone -1F482 1F3FE 200D 2642 FE0F ; fully-qualified # 💂🏾‍♂️ man guard: medium-dark skin tone -1F482 1F3FE 200D 2642 ; non-fully-qualified # 💂🏾‍♂ man guard: medium-dark skin tone -1F482 1F3FF 200D 2642 FE0F ; fully-qualified # 💂🏿‍♂️ man guard: dark skin tone -1F482 1F3FF 200D 2642 ; non-fully-qualified # 💂🏿‍♂ man guard: dark skin tone -1F482 200D 2640 FE0F ; fully-qualified # 💂‍♀️ woman guard -1F482 200D 2640 ; non-fully-qualified # 💂‍♀ woman guard -1F482 1F3FB 200D 2640 FE0F ; fully-qualified # 💂🏻‍♀️ woman guard: light skin tone -1F482 1F3FB 200D 2640 ; non-fully-qualified # 💂🏻‍♀ woman guard: light skin tone -1F482 1F3FC 200D 2640 FE0F ; fully-qualified # 💂🏼‍♀️ woman guard: medium-light skin tone -1F482 1F3FC 200D 2640 ; non-fully-qualified # 💂🏼‍♀ woman guard: medium-light skin tone -1F482 1F3FD 200D 2640 FE0F ; fully-qualified # 💂🏽‍♀️ woman guard: medium skin tone -1F482 1F3FD 200D 2640 ; non-fully-qualified # 💂🏽‍♀ woman guard: medium skin tone -1F482 1F3FE 200D 2640 FE0F ; fully-qualified # 💂🏾‍♀️ woman guard: medium-dark skin tone -1F482 1F3FE 200D 2640 ; non-fully-qualified # 💂🏾‍♀ woman guard: medium-dark skin tone -1F482 1F3FF 200D 2640 FE0F ; fully-qualified # 💂🏿‍♀️ woman guard: dark skin tone -1F482 1F3FF 200D 2640 ; non-fully-qualified # 💂🏿‍♀ woman guard: dark skin tone -1F477 ; fully-qualified # 👷 construction worker -1F477 1F3FB ; fully-qualified # 👷🏻 construction worker: light skin tone -1F477 1F3FC ; fully-qualified # 👷🏼 construction worker: medium-light skin tone -1F477 1F3FD ; fully-qualified # 👷🏽 construction worker: medium skin tone -1F477 1F3FE ; fully-qualified # 👷🏾 construction worker: medium-dark skin tone -1F477 1F3FF ; fully-qualified # 👷🏿 construction worker: dark skin tone -1F477 200D 2642 FE0F ; fully-qualified # 👷‍♂️ man construction worker -1F477 200D 2642 ; non-fully-qualified # 👷‍♂ man construction worker -1F477 1F3FB 200D 2642 FE0F ; fully-qualified # 👷🏻‍♂️ man construction worker: light skin tone -1F477 1F3FB 200D 2642 ; non-fully-qualified # 👷🏻‍♂ man construction worker: light skin tone -1F477 1F3FC 200D 2642 FE0F ; fully-qualified # 👷🏼‍♂️ man construction worker: medium-light skin tone -1F477 1F3FC 200D 2642 ; non-fully-qualified # 👷🏼‍♂ man construction worker: medium-light skin tone -1F477 1F3FD 200D 2642 FE0F ; fully-qualified # 👷🏽‍♂️ man construction worker: medium skin tone -1F477 1F3FD 200D 2642 ; non-fully-qualified # 👷🏽‍♂ man construction worker: medium skin tone -1F477 1F3FE 200D 2642 FE0F ; fully-qualified # 👷🏾‍♂️ man construction worker: medium-dark skin tone -1F477 1F3FE 200D 2642 ; non-fully-qualified # 👷🏾‍♂ man construction worker: medium-dark skin tone -1F477 1F3FF 200D 2642 FE0F ; fully-qualified # 👷🏿‍♂️ man construction worker: dark skin tone -1F477 1F3FF 200D 2642 ; non-fully-qualified # 👷🏿‍♂ man construction worker: dark skin tone -1F477 200D 2640 FE0F ; fully-qualified # 👷‍♀️ woman construction worker -1F477 200D 2640 ; non-fully-qualified # 👷‍♀ woman construction worker -1F477 1F3FB 200D 2640 FE0F ; fully-qualified # 👷🏻‍♀️ woman construction worker: light skin tone -1F477 1F3FB 200D 2640 ; non-fully-qualified # 👷🏻‍♀ woman construction worker: light skin tone -1F477 1F3FC 200D 2640 FE0F ; fully-qualified # 👷🏼‍♀️ woman construction worker: medium-light skin tone -1F477 1F3FC 200D 2640 ; non-fully-qualified # 👷🏼‍♀ woman construction worker: medium-light skin tone -1F477 1F3FD 200D 2640 FE0F ; fully-qualified # 👷🏽‍♀️ woman construction worker: medium skin tone -1F477 1F3FD 200D 2640 ; non-fully-qualified # 👷🏽‍♀ woman construction worker: medium skin tone -1F477 1F3FE 200D 2640 FE0F ; fully-qualified # 👷🏾‍♀️ woman construction worker: medium-dark skin tone -1F477 1F3FE 200D 2640 ; non-fully-qualified # 👷🏾‍♀ woman construction worker: medium-dark skin tone -1F477 1F3FF 200D 2640 FE0F ; fully-qualified # 👷🏿‍♀️ woman construction worker: dark skin tone -1F477 1F3FF 200D 2640 ; non-fully-qualified # 👷🏿‍♀ woman construction worker: dark skin tone -1F934 ; fully-qualified # 🤴 prince -1F934 1F3FB ; fully-qualified # 🤴🏻 prince: light skin tone -1F934 1F3FC ; fully-qualified # 🤴🏼 prince: medium-light skin tone -1F934 1F3FD ; fully-qualified # 🤴🏽 prince: medium skin tone -1F934 1F3FE ; fully-qualified # 🤴🏾 prince: medium-dark skin tone -1F934 1F3FF ; fully-qualified # 🤴🏿 prince: dark skin tone -1F478 ; fully-qualified # 👸 princess -1F478 1F3FB ; fully-qualified # 👸🏻 princess: light skin tone -1F478 1F3FC ; fully-qualified # 👸🏼 princess: medium-light skin tone -1F478 1F3FD ; fully-qualified # 👸🏽 princess: medium skin tone -1F478 1F3FE ; fully-qualified # 👸🏾 princess: medium-dark skin tone -1F478 1F3FF ; fully-qualified # 👸🏿 princess: dark skin tone -1F473 ; fully-qualified # 👳 person wearing turban -1F473 1F3FB ; fully-qualified # 👳🏻 person wearing turban: light skin tone -1F473 1F3FC ; fully-qualified # 👳🏼 person wearing turban: medium-light skin tone -1F473 1F3FD ; fully-qualified # 👳🏽 person wearing turban: medium skin tone -1F473 1F3FE ; fully-qualified # 👳🏾 person wearing turban: medium-dark skin tone -1F473 1F3FF ; fully-qualified # 👳🏿 person wearing turban: dark skin tone -1F473 200D 2642 FE0F ; fully-qualified # 👳‍♂️ man wearing turban -1F473 200D 2642 ; non-fully-qualified # 👳‍♂ man wearing turban -1F473 1F3FB 200D 2642 FE0F ; fully-qualified # 👳🏻‍♂️ man wearing turban: light skin tone -1F473 1F3FB 200D 2642 ; non-fully-qualified # 👳🏻‍♂ man wearing turban: light skin tone -1F473 1F3FC 200D 2642 FE0F ; fully-qualified # 👳🏼‍♂️ man wearing turban: medium-light skin tone -1F473 1F3FC 200D 2642 ; non-fully-qualified # 👳🏼‍♂ man wearing turban: medium-light skin tone -1F473 1F3FD 200D 2642 FE0F ; fully-qualified # 👳🏽‍♂️ man wearing turban: medium skin tone -1F473 1F3FD 200D 2642 ; non-fully-qualified # 👳🏽‍♂ man wearing turban: medium skin tone -1F473 1F3FE 200D 2642 FE0F ; fully-qualified # 👳🏾‍♂️ man wearing turban: medium-dark skin tone -1F473 1F3FE 200D 2642 ; non-fully-qualified # 👳🏾‍♂ man wearing turban: medium-dark skin tone -1F473 1F3FF 200D 2642 FE0F ; fully-qualified # 👳🏿‍♂️ man wearing turban: dark skin tone -1F473 1F3FF 200D 2642 ; non-fully-qualified # 👳🏿‍♂ man wearing turban: dark skin tone -1F473 200D 2640 FE0F ; fully-qualified # 👳‍♀️ woman wearing turban -1F473 200D 2640 ; non-fully-qualified # 👳‍♀ woman wearing turban -1F473 1F3FB 200D 2640 FE0F ; fully-qualified # 👳🏻‍♀️ woman wearing turban: light skin tone -1F473 1F3FB 200D 2640 ; non-fully-qualified # 👳🏻‍♀ woman wearing turban: light skin tone -1F473 1F3FC 200D 2640 FE0F ; fully-qualified # 👳🏼‍♀️ woman wearing turban: medium-light skin tone -1F473 1F3FC 200D 2640 ; non-fully-qualified # 👳🏼‍♀ woman wearing turban: medium-light skin tone -1F473 1F3FD 200D 2640 FE0F ; fully-qualified # 👳🏽‍♀️ woman wearing turban: medium skin tone -1F473 1F3FD 200D 2640 ; non-fully-qualified # 👳🏽‍♀ woman wearing turban: medium skin tone -1F473 1F3FE 200D 2640 FE0F ; fully-qualified # 👳🏾‍♀️ woman wearing turban: medium-dark skin tone -1F473 1F3FE 200D 2640 ; non-fully-qualified # 👳🏾‍♀ woman wearing turban: medium-dark skin tone -1F473 1F3FF 200D 2640 FE0F ; fully-qualified # 👳🏿‍♀️ woman wearing turban: dark skin tone -1F473 1F3FF 200D 2640 ; non-fully-qualified # 👳🏿‍♀ woman wearing turban: dark skin tone -1F472 ; fully-qualified # 👲 man with Chinese cap -1F472 1F3FB ; fully-qualified # 👲🏻 man with Chinese cap: light skin tone -1F472 1F3FC ; fully-qualified # 👲🏼 man with Chinese cap: medium-light skin tone -1F472 1F3FD ; fully-qualified # 👲🏽 man with Chinese cap: medium skin tone -1F472 1F3FE ; fully-qualified # 👲🏾 man with Chinese cap: medium-dark skin tone -1F472 1F3FF ; fully-qualified # 👲🏿 man with Chinese cap: dark skin tone -1F9D5 ; fully-qualified # 🧕 woman with headscarf -1F9D5 1F3FB ; fully-qualified # 🧕🏻 woman with headscarf: light skin tone -1F9D5 1F3FC ; fully-qualified # 🧕🏼 woman with headscarf: medium-light skin tone -1F9D5 1F3FD ; fully-qualified # 🧕🏽 woman with headscarf: medium skin tone -1F9D5 1F3FE ; fully-qualified # 🧕🏾 woman with headscarf: medium-dark skin tone -1F9D5 1F3FF ; fully-qualified # 🧕🏿 woman with headscarf: dark skin tone -1F9D4 ; fully-qualified # 🧔 bearded person -1F9D4 1F3FB ; fully-qualified # 🧔🏻 bearded person: light skin tone -1F9D4 1F3FC ; fully-qualified # 🧔🏼 bearded person: medium-light skin tone -1F9D4 1F3FD ; fully-qualified # 🧔🏽 bearded person: medium skin tone -1F9D4 1F3FE ; fully-qualified # 🧔🏾 bearded person: medium-dark skin tone -1F9D4 1F3FF ; fully-qualified # 🧔🏿 bearded person: dark skin tone -1F471 ; fully-qualified # 👱 blond-haired person -1F471 1F3FB ; fully-qualified # 👱🏻 blond-haired person: light skin tone -1F471 1F3FC ; fully-qualified # 👱🏼 blond-haired person: medium-light skin tone -1F471 1F3FD ; fully-qualified # 👱🏽 blond-haired person: medium skin tone -1F471 1F3FE ; fully-qualified # 👱🏾 blond-haired person: medium-dark skin tone -1F471 1F3FF ; fully-qualified # 👱🏿 blond-haired person: dark skin tone -1F471 200D 2642 FE0F ; fully-qualified # 👱‍♂️ blond-haired man -1F471 200D 2642 ; non-fully-qualified # 👱‍♂ blond-haired man -1F471 1F3FB 200D 2642 FE0F ; fully-qualified # 👱🏻‍♂️ blond-haired man: light skin tone -1F471 1F3FB 200D 2642 ; non-fully-qualified # 👱🏻‍♂ blond-haired man: light skin tone -1F471 1F3FC 200D 2642 FE0F ; fully-qualified # 👱🏼‍♂️ blond-haired man: medium-light skin tone -1F471 1F3FC 200D 2642 ; non-fully-qualified # 👱🏼‍♂ blond-haired man: medium-light skin tone -1F471 1F3FD 200D 2642 FE0F ; fully-qualified # 👱🏽‍♂️ blond-haired man: medium skin tone -1F471 1F3FD 200D 2642 ; non-fully-qualified # 👱🏽‍♂ blond-haired man: medium skin tone -1F471 1F3FE 200D 2642 FE0F ; fully-qualified # 👱🏾‍♂️ blond-haired man: medium-dark skin tone -1F471 1F3FE 200D 2642 ; non-fully-qualified # 👱🏾‍♂ blond-haired man: medium-dark skin tone -1F471 1F3FF 200D 2642 FE0F ; fully-qualified # 👱🏿‍♂️ blond-haired man: dark skin tone -1F471 1F3FF 200D 2642 ; non-fully-qualified # 👱🏿‍♂ blond-haired man: dark skin tone -1F471 200D 2640 FE0F ; fully-qualified # 👱‍♀️ blond-haired woman -1F471 200D 2640 ; non-fully-qualified # 👱‍♀ blond-haired woman -1F471 1F3FB 200D 2640 FE0F ; fully-qualified # 👱🏻‍♀️ blond-haired woman: light skin tone -1F471 1F3FB 200D 2640 ; non-fully-qualified # 👱🏻‍♀ blond-haired woman: light skin tone -1F471 1F3FC 200D 2640 FE0F ; fully-qualified # 👱🏼‍♀️ blond-haired woman: medium-light skin tone -1F471 1F3FC 200D 2640 ; non-fully-qualified # 👱🏼‍♀ blond-haired woman: medium-light skin tone -1F471 1F3FD 200D 2640 FE0F ; fully-qualified # 👱🏽‍♀️ blond-haired woman: medium skin tone -1F471 1F3FD 200D 2640 ; non-fully-qualified # 👱🏽‍♀ blond-haired woman: medium skin tone -1F471 1F3FE 200D 2640 FE0F ; fully-qualified # 👱🏾‍♀️ blond-haired woman: medium-dark skin tone -1F471 1F3FE 200D 2640 ; non-fully-qualified # 👱🏾‍♀ blond-haired woman: medium-dark skin tone -1F471 1F3FF 200D 2640 FE0F ; fully-qualified # 👱🏿‍♀️ blond-haired woman: dark skin tone -1F471 1F3FF 200D 2640 ; non-fully-qualified # 👱🏿‍♀ blond-haired woman: dark skin tone -1F468 200D 1F9B0 ; fully-qualified # 👨‍🦰 man, red haired -1F468 1F3FB 200D 1F9B0 ; fully-qualified # 👨🏻‍🦰 man, red haired: light skin tone -1F468 1F3FC 200D 1F9B0 ; fully-qualified # 👨🏼‍🦰 man, red haired: medium-light skin tone -1F468 1F3FD 200D 1F9B0 ; fully-qualified # 👨🏽‍🦰 man, red haired: medium skin tone -1F468 1F3FE 200D 1F9B0 ; fully-qualified # 👨🏾‍🦰 man, red haired: medium-dark skin tone -1F468 1F3FF 200D 1F9B0 ; fully-qualified # 👨🏿‍🦰 man, red haired: dark skin tone -1F469 200D 1F9B0 ; fully-qualified # 👩‍🦰 woman, red haired -1F469 1F3FB 200D 1F9B0 ; fully-qualified # 👩🏻‍🦰 woman, red haired: light skin tone -1F469 1F3FC 200D 1F9B0 ; fully-qualified # 👩🏼‍🦰 woman, red haired: medium-light skin tone -1F469 1F3FD 200D 1F9B0 ; fully-qualified # 👩🏽‍🦰 woman, red haired: medium skin tone -1F469 1F3FE 200D 1F9B0 ; fully-qualified # 👩🏾‍🦰 woman, red haired: medium-dark skin tone -1F469 1F3FF 200D 1F9B0 ; fully-qualified # 👩🏿‍🦰 woman, red haired: dark skin tone -1F468 200D 1F9B1 ; fully-qualified # 👨‍🦱 man, curly haired -1F468 1F3FB 200D 1F9B1 ; fully-qualified # 👨🏻‍🦱 man, curly haired: light skin tone -1F468 1F3FC 200D 1F9B1 ; fully-qualified # 👨🏼‍🦱 man, curly haired: medium-light skin tone -1F468 1F3FD 200D 1F9B1 ; fully-qualified # 👨🏽‍🦱 man, curly haired: medium skin tone -1F468 1F3FE 200D 1F9B1 ; fully-qualified # 👨🏾‍🦱 man, curly haired: medium-dark skin tone -1F468 1F3FF 200D 1F9B1 ; fully-qualified # 👨🏿‍🦱 man, curly haired: dark skin tone -1F469 200D 1F9B1 ; fully-qualified # 👩‍🦱 woman, curly haired -1F469 1F3FB 200D 1F9B1 ; fully-qualified # 👩🏻‍🦱 woman, curly haired: light skin tone -1F469 1F3FC 200D 1F9B1 ; fully-qualified # 👩🏼‍🦱 woman, curly haired: medium-light skin tone -1F469 1F3FD 200D 1F9B1 ; fully-qualified # 👩🏽‍🦱 woman, curly haired: medium skin tone -1F469 1F3FE 200D 1F9B1 ; fully-qualified # 👩🏾‍🦱 woman, curly haired: medium-dark skin tone -1F469 1F3FF 200D 1F9B1 ; fully-qualified # 👩🏿‍🦱 woman, curly haired: dark skin tone -1F468 200D 1F9B2 ; fully-qualified # 👨‍🦲 man, bald -1F468 1F3FB 200D 1F9B2 ; fully-qualified # 👨🏻‍🦲 man, bald: light skin tone -1F468 1F3FC 200D 1F9B2 ; fully-qualified # 👨🏼‍🦲 man, bald: medium-light skin tone -1F468 1F3FD 200D 1F9B2 ; fully-qualified # 👨🏽‍🦲 man, bald: medium skin tone -1F468 1F3FE 200D 1F9B2 ; fully-qualified # 👨🏾‍🦲 man, bald: medium-dark skin tone -1F468 1F3FF 200D 1F9B2 ; fully-qualified # 👨🏿‍🦲 man, bald: dark skin tone -1F469 200D 1F9B2 ; fully-qualified # 👩‍🦲 woman, bald -1F469 1F3FB 200D 1F9B2 ; fully-qualified # 👩🏻‍🦲 woman, bald: light skin tone -1F469 1F3FC 200D 1F9B2 ; fully-qualified # 👩🏼‍🦲 woman, bald: medium-light skin tone -1F469 1F3FD 200D 1F9B2 ; fully-qualified # 👩🏽‍🦲 woman, bald: medium skin tone -1F469 1F3FE 200D 1F9B2 ; fully-qualified # 👩🏾‍🦲 woman, bald: medium-dark skin tone -1F469 1F3FF 200D 1F9B2 ; fully-qualified # 👩🏿‍🦲 woman, bald: dark skin tone -1F468 200D 1F9B3 ; fully-qualified # 👨‍🦳 man, white haired -1F468 1F3FB 200D 1F9B3 ; fully-qualified # 👨🏻‍🦳 man, white haired: light skin tone -1F468 1F3FC 200D 1F9B3 ; fully-qualified # 👨🏼‍🦳 man, white haired: medium-light skin tone -1F468 1F3FD 200D 1F9B3 ; fully-qualified # 👨🏽‍🦳 man, white haired: medium skin tone -1F468 1F3FE 200D 1F9B3 ; fully-qualified # 👨🏾‍🦳 man, white haired: medium-dark skin tone -1F468 1F3FF 200D 1F9B3 ; fully-qualified # 👨🏿‍🦳 man, white haired: dark skin tone -1F469 200D 1F9B3 ; fully-qualified # 👩‍🦳 woman, white haired -1F469 1F3FB 200D 1F9B3 ; fully-qualified # 👩🏻‍🦳 woman, white haired: light skin tone -1F469 1F3FC 200D 1F9B3 ; fully-qualified # 👩🏼‍🦳 woman, white haired: medium-light skin tone -1F469 1F3FD 200D 1F9B3 ; fully-qualified # 👩🏽‍🦳 woman, white haired: medium skin tone -1F469 1F3FE 200D 1F9B3 ; fully-qualified # 👩🏾‍🦳 woman, white haired: medium-dark skin tone -1F469 1F3FF 200D 1F9B3 ; fully-qualified # 👩🏿‍🦳 woman, white haired: dark skin tone -1F935 ; fully-qualified # 🤵 man in tuxedo -1F935 1F3FB ; fully-qualified # 🤵🏻 man in tuxedo: light skin tone -1F935 1F3FC ; fully-qualified # 🤵🏼 man in tuxedo: medium-light skin tone -1F935 1F3FD ; fully-qualified # 🤵🏽 man in tuxedo: medium skin tone -1F935 1F3FE ; fully-qualified # 🤵🏾 man in tuxedo: medium-dark skin tone -1F935 1F3FF ; fully-qualified # 🤵🏿 man in tuxedo: dark skin tone -1F470 ; fully-qualified # 👰 bride with veil -1F470 1F3FB ; fully-qualified # 👰🏻 bride with veil: light skin tone -1F470 1F3FC ; fully-qualified # 👰🏼 bride with veil: medium-light skin tone -1F470 1F3FD ; fully-qualified # 👰🏽 bride with veil: medium skin tone -1F470 1F3FE ; fully-qualified # 👰🏾 bride with veil: medium-dark skin tone -1F470 1F3FF ; fully-qualified # 👰🏿 bride with veil: dark skin tone -1F930 ; fully-qualified # 🤰 pregnant woman -1F930 1F3FB ; fully-qualified # 🤰🏻 pregnant woman: light skin tone -1F930 1F3FC ; fully-qualified # 🤰🏼 pregnant woman: medium-light skin tone -1F930 1F3FD ; fully-qualified # 🤰🏽 pregnant woman: medium skin tone -1F930 1F3FE ; fully-qualified # 🤰🏾 pregnant woman: medium-dark skin tone -1F930 1F3FF ; fully-qualified # 🤰🏿 pregnant woman: dark skin tone -1F931 ; fully-qualified # 🤱 breast-feeding -1F931 1F3FB ; fully-qualified # 🤱🏻 breast-feeding: light skin tone -1F931 1F3FC ; fully-qualified # 🤱🏼 breast-feeding: medium-light skin tone -1F931 1F3FD ; fully-qualified # 🤱🏽 breast-feeding: medium skin tone -1F931 1F3FE ; fully-qualified # 🤱🏾 breast-feeding: medium-dark skin tone -1F931 1F3FF ; fully-qualified # 🤱🏿 breast-feeding: dark skin tone - -# subgroup: person-fantasy -1F47C ; fully-qualified # 👼 baby angel -1F47C 1F3FB ; fully-qualified # 👼🏻 baby angel: light skin tone -1F47C 1F3FC ; fully-qualified # 👼🏼 baby angel: medium-light skin tone -1F47C 1F3FD ; fully-qualified # 👼🏽 baby angel: medium skin tone -1F47C 1F3FE ; fully-qualified # 👼🏾 baby angel: medium-dark skin tone -1F47C 1F3FF ; fully-qualified # 👼🏿 baby angel: dark skin tone -1F385 ; fully-qualified # 🎅 Santa Claus -1F385 1F3FB ; fully-qualified # 🎅🏻 Santa Claus: light skin tone -1F385 1F3FC ; fully-qualified # 🎅🏼 Santa Claus: medium-light skin tone -1F385 1F3FD ; fully-qualified # 🎅🏽 Santa Claus: medium skin tone -1F385 1F3FE ; fully-qualified # 🎅🏾 Santa Claus: medium-dark skin tone -1F385 1F3FF ; fully-qualified # 🎅🏿 Santa Claus: dark skin tone -1F936 ; fully-qualified # 🤶 Mrs. Claus -1F936 1F3FB ; fully-qualified # 🤶🏻 Mrs. Claus: light skin tone -1F936 1F3FC ; fully-qualified # 🤶🏼 Mrs. Claus: medium-light skin tone -1F936 1F3FD ; fully-qualified # 🤶🏽 Mrs. Claus: medium skin tone -1F936 1F3FE ; fully-qualified # 🤶🏾 Mrs. Claus: medium-dark skin tone -1F936 1F3FF ; fully-qualified # 🤶🏿 Mrs. Claus: dark skin tone -1F9B8 ; fully-qualified # 🦸 superhero -1F9B8 1F3FB ; fully-qualified # 🦸🏻 superhero: light skin tone -1F9B8 1F3FC ; fully-qualified # 🦸🏼 superhero: medium-light skin tone -1F9B8 1F3FD ; fully-qualified # 🦸🏽 superhero: medium skin tone -1F9B8 1F3FE ; fully-qualified # 🦸🏾 superhero: medium-dark skin tone -1F9B8 1F3FF ; fully-qualified # 🦸🏿 superhero: dark skin tone -1F9B8 200D 2640 FE0F ; fully-qualified # 🦸‍♀️ woman superhero -1F9B8 200D 2640 ; non-fully-qualified # 🦸‍♀ woman superhero -1F9B8 1F3FB 200D 2640 FE0F ; fully-qualified # 🦸🏻‍♀️ woman superhero: light skin tone -1F9B8 1F3FB 200D 2640 ; non-fully-qualified # 🦸🏻‍♀ woman superhero: light skin tone -1F9B8 1F3FC 200D 2640 FE0F ; fully-qualified # 🦸🏼‍♀️ woman superhero: medium-light skin tone -1F9B8 1F3FC 200D 2640 ; non-fully-qualified # 🦸🏼‍♀ woman superhero: medium-light skin tone -1F9B8 1F3FD 200D 2640 FE0F ; fully-qualified # 🦸🏽‍♀️ woman superhero: medium skin tone -1F9B8 1F3FD 200D 2640 ; non-fully-qualified # 🦸🏽‍♀ woman superhero: medium skin tone -1F9B8 1F3FE 200D 2640 FE0F ; fully-qualified # 🦸🏾‍♀️ woman superhero: medium-dark skin tone -1F9B8 1F3FE 200D 2640 ; non-fully-qualified # 🦸🏾‍♀ woman superhero: medium-dark skin tone -1F9B8 1F3FF 200D 2640 FE0F ; fully-qualified # 🦸🏿‍♀️ woman superhero: dark skin tone -1F9B8 1F3FF 200D 2640 ; non-fully-qualified # 🦸🏿‍♀ woman superhero: dark skin tone -1F9B8 200D 2642 FE0F ; fully-qualified # 🦸‍♂️ man superhero -1F9B8 200D 2642 ; non-fully-qualified # 🦸‍♂ man superhero -1F9B8 1F3FB 200D 2642 FE0F ; fully-qualified # 🦸🏻‍♂️ man superhero: light skin tone -1F9B8 1F3FB 200D 2642 ; non-fully-qualified # 🦸🏻‍♂ man superhero: light skin tone -1F9B8 1F3FC 200D 2642 FE0F ; fully-qualified # 🦸🏼‍♂️ man superhero: medium-light skin tone -1F9B8 1F3FC 200D 2642 ; non-fully-qualified # 🦸🏼‍♂ man superhero: medium-light skin tone -1F9B8 1F3FD 200D 2642 FE0F ; fully-qualified # 🦸🏽‍♂️ man superhero: medium skin tone -1F9B8 1F3FD 200D 2642 ; non-fully-qualified # 🦸🏽‍♂ man superhero: medium skin tone -1F9B8 1F3FE 200D 2642 FE0F ; fully-qualified # 🦸🏾‍♂️ man superhero: medium-dark skin tone -1F9B8 1F3FE 200D 2642 ; non-fully-qualified # 🦸🏾‍♂ man superhero: medium-dark skin tone -1F9B8 1F3FF 200D 2642 FE0F ; fully-qualified # 🦸🏿‍♂️ man superhero: dark skin tone -1F9B8 1F3FF 200D 2642 ; non-fully-qualified # 🦸🏿‍♂ man superhero: dark skin tone -1F9B9 ; fully-qualified # 🦹 supervillain -1F9B9 1F3FB ; fully-qualified # 🦹🏻 supervillain: light skin tone -1F9B9 1F3FC ; fully-qualified # 🦹🏼 supervillain: medium-light skin tone -1F9B9 1F3FD ; fully-qualified # 🦹🏽 supervillain: medium skin tone -1F9B9 1F3FE ; fully-qualified # 🦹🏾 supervillain: medium-dark skin tone -1F9B9 1F3FF ; fully-qualified # 🦹🏿 supervillain: dark skin tone -1F9B9 200D 2640 FE0F ; fully-qualified # 🦹‍♀️ woman supervillain -1F9B9 200D 2640 ; non-fully-qualified # 🦹‍♀ woman supervillain -1F9B9 1F3FB 200D 2640 FE0F ; fully-qualified # 🦹🏻‍♀️ woman supervillain: light skin tone -1F9B9 1F3FB 200D 2640 ; non-fully-qualified # 🦹🏻‍♀ woman supervillain: light skin tone -1F9B9 1F3FC 200D 2640 FE0F ; fully-qualified # 🦹🏼‍♀️ woman supervillain: medium-light skin tone -1F9B9 1F3FC 200D 2640 ; non-fully-qualified # 🦹🏼‍♀ woman supervillain: medium-light skin tone -1F9B9 1F3FD 200D 2640 FE0F ; fully-qualified # 🦹🏽‍♀️ woman supervillain: medium skin tone -1F9B9 1F3FD 200D 2640 ; non-fully-qualified # 🦹🏽‍♀ woman supervillain: medium skin tone -1F9B9 1F3FE 200D 2640 FE0F ; fully-qualified # 🦹🏾‍♀️ woman supervillain: medium-dark skin tone -1F9B9 1F3FE 200D 2640 ; non-fully-qualified # 🦹🏾‍♀ woman supervillain: medium-dark skin tone -1F9B9 1F3FF 200D 2640 FE0F ; fully-qualified # 🦹🏿‍♀️ woman supervillain: dark skin tone -1F9B9 1F3FF 200D 2640 ; non-fully-qualified # 🦹🏿‍♀ woman supervillain: dark skin tone -1F9B9 200D 2642 FE0F ; fully-qualified # 🦹‍♂️ man supervillain -1F9B9 200D 2642 ; non-fully-qualified # 🦹‍♂ man supervillain -1F9B9 1F3FB 200D 2642 FE0F ; fully-qualified # 🦹🏻‍♂️ man supervillain: light skin tone -1F9B9 1F3FB 200D 2642 ; non-fully-qualified # 🦹🏻‍♂ man supervillain: light skin tone -1F9B9 1F3FC 200D 2642 FE0F ; fully-qualified # 🦹🏼‍♂️ man supervillain: medium-light skin tone -1F9B9 1F3FC 200D 2642 ; non-fully-qualified # 🦹🏼‍♂ man supervillain: medium-light skin tone -1F9B9 1F3FD 200D 2642 FE0F ; fully-qualified # 🦹🏽‍♂️ man supervillain: medium skin tone -1F9B9 1F3FD 200D 2642 ; non-fully-qualified # 🦹🏽‍♂ man supervillain: medium skin tone -1F9B9 1F3FE 200D 2642 FE0F ; fully-qualified # 🦹🏾‍♂️ man supervillain: medium-dark skin tone -1F9B9 1F3FE 200D 2642 ; non-fully-qualified # 🦹🏾‍♂ man supervillain: medium-dark skin tone -1F9B9 1F3FF 200D 2642 FE0F ; fully-qualified # 🦹🏿‍♂️ man supervillain: dark skin tone -1F9B9 1F3FF 200D 2642 ; non-fully-qualified # 🦹🏿‍♂ man supervillain: dark skin tone -1F9D9 ; fully-qualified # 🧙 mage -1F9D9 1F3FB ; fully-qualified # 🧙🏻 mage: light skin tone -1F9D9 1F3FC ; fully-qualified # 🧙🏼 mage: medium-light skin tone -1F9D9 1F3FD ; fully-qualified # 🧙🏽 mage: medium skin tone -1F9D9 1F3FE ; fully-qualified # 🧙🏾 mage: medium-dark skin tone -1F9D9 1F3FF ; fully-qualified # 🧙🏿 mage: dark skin tone -1F9D9 200D 2640 FE0F ; fully-qualified # 🧙‍♀️ woman mage -1F9D9 200D 2640 ; non-fully-qualified # 🧙‍♀ woman mage -1F9D9 1F3FB 200D 2640 FE0F ; fully-qualified # 🧙🏻‍♀️ woman mage: light skin tone -1F9D9 1F3FB 200D 2640 ; non-fully-qualified # 🧙🏻‍♀ woman mage: light skin tone -1F9D9 1F3FC 200D 2640 FE0F ; fully-qualified # 🧙🏼‍♀️ woman mage: medium-light skin tone -1F9D9 1F3FC 200D 2640 ; non-fully-qualified # 🧙🏼‍♀ woman mage: medium-light skin tone -1F9D9 1F3FD 200D 2640 FE0F ; fully-qualified # 🧙🏽‍♀️ woman mage: medium skin tone -1F9D9 1F3FD 200D 2640 ; non-fully-qualified # 🧙🏽‍♀ woman mage: medium skin tone -1F9D9 1F3FE 200D 2640 FE0F ; fully-qualified # 🧙🏾‍♀️ woman mage: medium-dark skin tone -1F9D9 1F3FE 200D 2640 ; non-fully-qualified # 🧙🏾‍♀ woman mage: medium-dark skin tone -1F9D9 1F3FF 200D 2640 FE0F ; fully-qualified # 🧙🏿‍♀️ woman mage: dark skin tone -1F9D9 1F3FF 200D 2640 ; non-fully-qualified # 🧙🏿‍♀ woman mage: dark skin tone -1F9D9 200D 2642 FE0F ; fully-qualified # 🧙‍♂️ man mage -1F9D9 200D 2642 ; non-fully-qualified # 🧙‍♂ man mage -1F9D9 1F3FB 200D 2642 FE0F ; fully-qualified # 🧙🏻‍♂️ man mage: light skin tone -1F9D9 1F3FB 200D 2642 ; non-fully-qualified # 🧙🏻‍♂ man mage: light skin tone -1F9D9 1F3FC 200D 2642 FE0F ; fully-qualified # 🧙🏼‍♂️ man mage: medium-light skin tone -1F9D9 1F3FC 200D 2642 ; non-fully-qualified # 🧙🏼‍♂ man mage: medium-light skin tone -1F9D9 1F3FD 200D 2642 FE0F ; fully-qualified # 🧙🏽‍♂️ man mage: medium skin tone -1F9D9 1F3FD 200D 2642 ; non-fully-qualified # 🧙🏽‍♂ man mage: medium skin tone -1F9D9 1F3FE 200D 2642 FE0F ; fully-qualified # 🧙🏾‍♂️ man mage: medium-dark skin tone -1F9D9 1F3FE 200D 2642 ; non-fully-qualified # 🧙🏾‍♂ man mage: medium-dark skin tone -1F9D9 1F3FF 200D 2642 FE0F ; fully-qualified # 🧙🏿‍♂️ man mage: dark skin tone -1F9D9 1F3FF 200D 2642 ; non-fully-qualified # 🧙🏿‍♂ man mage: dark skin tone -1F9DA ; fully-qualified # 🧚 fairy -1F9DA 1F3FB ; fully-qualified # 🧚🏻 fairy: light skin tone -1F9DA 1F3FC ; fully-qualified # 🧚🏼 fairy: medium-light skin tone -1F9DA 1F3FD ; fully-qualified # 🧚🏽 fairy: medium skin tone -1F9DA 1F3FE ; fully-qualified # 🧚🏾 fairy: medium-dark skin tone -1F9DA 1F3FF ; fully-qualified # 🧚🏿 fairy: dark skin tone -1F9DA 200D 2640 FE0F ; fully-qualified # 🧚‍♀️ woman fairy -1F9DA 200D 2640 ; non-fully-qualified # 🧚‍♀ woman fairy -1F9DA 1F3FB 200D 2640 FE0F ; fully-qualified # 🧚🏻‍♀️ woman fairy: light skin tone -1F9DA 1F3FB 200D 2640 ; non-fully-qualified # 🧚🏻‍♀ woman fairy: light skin tone -1F9DA 1F3FC 200D 2640 FE0F ; fully-qualified # 🧚🏼‍♀️ woman fairy: medium-light skin tone -1F9DA 1F3FC 200D 2640 ; non-fully-qualified # 🧚🏼‍♀ woman fairy: medium-light skin tone -1F9DA 1F3FD 200D 2640 FE0F ; fully-qualified # 🧚🏽‍♀️ woman fairy: medium skin tone -1F9DA 1F3FD 200D 2640 ; non-fully-qualified # 🧚🏽‍♀ woman fairy: medium skin tone -1F9DA 1F3FE 200D 2640 FE0F ; fully-qualified # 🧚🏾‍♀️ woman fairy: medium-dark skin tone -1F9DA 1F3FE 200D 2640 ; non-fully-qualified # 🧚🏾‍♀ woman fairy: medium-dark skin tone -1F9DA 1F3FF 200D 2640 FE0F ; fully-qualified # 🧚🏿‍♀️ woman fairy: dark skin tone -1F9DA 1F3FF 200D 2640 ; non-fully-qualified # 🧚🏿‍♀ woman fairy: dark skin tone -1F9DA 200D 2642 FE0F ; fully-qualified # 🧚‍♂️ man fairy -1F9DA 200D 2642 ; non-fully-qualified # 🧚‍♂ man fairy -1F9DA 1F3FB 200D 2642 FE0F ; fully-qualified # 🧚🏻‍♂️ man fairy: light skin tone -1F9DA 1F3FB 200D 2642 ; non-fully-qualified # 🧚🏻‍♂ man fairy: light skin tone -1F9DA 1F3FC 200D 2642 FE0F ; fully-qualified # 🧚🏼‍♂️ man fairy: medium-light skin tone -1F9DA 1F3FC 200D 2642 ; non-fully-qualified # 🧚🏼‍♂ man fairy: medium-light skin tone -1F9DA 1F3FD 200D 2642 FE0F ; fully-qualified # 🧚🏽‍♂️ man fairy: medium skin tone -1F9DA 1F3FD 200D 2642 ; non-fully-qualified # 🧚🏽‍♂ man fairy: medium skin tone -1F9DA 1F3FE 200D 2642 FE0F ; fully-qualified # 🧚🏾‍♂️ man fairy: medium-dark skin tone -1F9DA 1F3FE 200D 2642 ; non-fully-qualified # 🧚🏾‍♂ man fairy: medium-dark skin tone -1F9DA 1F3FF 200D 2642 FE0F ; fully-qualified # 🧚🏿‍♂️ man fairy: dark skin tone -1F9DA 1F3FF 200D 2642 ; non-fully-qualified # 🧚🏿‍♂ man fairy: dark skin tone -1F9DB ; fully-qualified # 🧛 vampire -1F9DB 1F3FB ; fully-qualified # 🧛🏻 vampire: light skin tone -1F9DB 1F3FC ; fully-qualified # 🧛🏼 vampire: medium-light skin tone -1F9DB 1F3FD ; fully-qualified # 🧛🏽 vampire: medium skin tone -1F9DB 1F3FE ; fully-qualified # 🧛🏾 vampire: medium-dark skin tone -1F9DB 1F3FF ; fully-qualified # 🧛🏿 vampire: dark skin tone -1F9DB 200D 2640 FE0F ; fully-qualified # 🧛‍♀️ woman vampire -1F9DB 200D 2640 ; non-fully-qualified # 🧛‍♀ woman vampire -1F9DB 1F3FB 200D 2640 FE0F ; fully-qualified # 🧛🏻‍♀️ woman vampire: light skin tone -1F9DB 1F3FB 200D 2640 ; non-fully-qualified # 🧛🏻‍♀ woman vampire: light skin tone -1F9DB 1F3FC 200D 2640 FE0F ; fully-qualified # 🧛🏼‍♀️ woman vampire: medium-light skin tone -1F9DB 1F3FC 200D 2640 ; non-fully-qualified # 🧛🏼‍♀ woman vampire: medium-light skin tone -1F9DB 1F3FD 200D 2640 FE0F ; fully-qualified # 🧛🏽‍♀️ woman vampire: medium skin tone -1F9DB 1F3FD 200D 2640 ; non-fully-qualified # 🧛🏽‍♀ woman vampire: medium skin tone -1F9DB 1F3FE 200D 2640 FE0F ; fully-qualified # 🧛🏾‍♀️ woman vampire: medium-dark skin tone -1F9DB 1F3FE 200D 2640 ; non-fully-qualified # 🧛🏾‍♀ woman vampire: medium-dark skin tone -1F9DB 1F3FF 200D 2640 FE0F ; fully-qualified # 🧛🏿‍♀️ woman vampire: dark skin tone -1F9DB 1F3FF 200D 2640 ; non-fully-qualified # 🧛🏿‍♀ woman vampire: dark skin tone -1F9DB 200D 2642 FE0F ; fully-qualified # 🧛‍♂️ man vampire -1F9DB 200D 2642 ; non-fully-qualified # 🧛‍♂ man vampire -1F9DB 1F3FB 200D 2642 FE0F ; fully-qualified # 🧛🏻‍♂️ man vampire: light skin tone -1F9DB 1F3FB 200D 2642 ; non-fully-qualified # 🧛🏻‍♂ man vampire: light skin tone -1F9DB 1F3FC 200D 2642 FE0F ; fully-qualified # 🧛🏼‍♂️ man vampire: medium-light skin tone -1F9DB 1F3FC 200D 2642 ; non-fully-qualified # 🧛🏼‍♂ man vampire: medium-light skin tone -1F9DB 1F3FD 200D 2642 FE0F ; fully-qualified # 🧛🏽‍♂️ man vampire: medium skin tone -1F9DB 1F3FD 200D 2642 ; non-fully-qualified # 🧛🏽‍♂ man vampire: medium skin tone -1F9DB 1F3FE 200D 2642 FE0F ; fully-qualified # 🧛🏾‍♂️ man vampire: medium-dark skin tone -1F9DB 1F3FE 200D 2642 ; non-fully-qualified # 🧛🏾‍♂ man vampire: medium-dark skin tone -1F9DB 1F3FF 200D 2642 FE0F ; fully-qualified # 🧛🏿‍♂️ man vampire: dark skin tone -1F9DB 1F3FF 200D 2642 ; non-fully-qualified # 🧛🏿‍♂ man vampire: dark skin tone -1F9DC ; fully-qualified # 🧜 merperson -1F9DC 1F3FB ; fully-qualified # 🧜🏻 merperson: light skin tone -1F9DC 1F3FC ; fully-qualified # 🧜🏼 merperson: medium-light skin tone -1F9DC 1F3FD ; fully-qualified # 🧜🏽 merperson: medium skin tone -1F9DC 1F3FE ; fully-qualified # 🧜🏾 merperson: medium-dark skin tone -1F9DC 1F3FF ; fully-qualified # 🧜🏿 merperson: dark skin tone -1F9DC 200D 2640 FE0F ; fully-qualified # 🧜‍♀️ mermaid -1F9DC 200D 2640 ; non-fully-qualified # 🧜‍♀ mermaid -1F9DC 1F3FB 200D 2640 FE0F ; fully-qualified # 🧜🏻‍♀️ mermaid: light skin tone -1F9DC 1F3FB 200D 2640 ; non-fully-qualified # 🧜🏻‍♀ mermaid: light skin tone -1F9DC 1F3FC 200D 2640 FE0F ; fully-qualified # 🧜🏼‍♀️ mermaid: medium-light skin tone -1F9DC 1F3FC 200D 2640 ; non-fully-qualified # 🧜🏼‍♀ mermaid: medium-light skin tone -1F9DC 1F3FD 200D 2640 FE0F ; fully-qualified # 🧜🏽‍♀️ mermaid: medium skin tone -1F9DC 1F3FD 200D 2640 ; non-fully-qualified # 🧜🏽‍♀ mermaid: medium skin tone -1F9DC 1F3FE 200D 2640 FE0F ; fully-qualified # 🧜🏾‍♀️ mermaid: medium-dark skin tone -1F9DC 1F3FE 200D 2640 ; non-fully-qualified # 🧜🏾‍♀ mermaid: medium-dark skin tone -1F9DC 1F3FF 200D 2640 FE0F ; fully-qualified # 🧜🏿‍♀️ mermaid: dark skin tone -1F9DC 1F3FF 200D 2640 ; non-fully-qualified # 🧜🏿‍♀ mermaid: dark skin tone -1F9DC 200D 2642 FE0F ; fully-qualified # 🧜‍♂️ merman -1F9DC 200D 2642 ; non-fully-qualified # 🧜‍♂ merman -1F9DC 1F3FB 200D 2642 FE0F ; fully-qualified # 🧜🏻‍♂️ merman: light skin tone -1F9DC 1F3FB 200D 2642 ; non-fully-qualified # 🧜🏻‍♂ merman: light skin tone -1F9DC 1F3FC 200D 2642 FE0F ; fully-qualified # 🧜🏼‍♂️ merman: medium-light skin tone -1F9DC 1F3FC 200D 2642 ; non-fully-qualified # 🧜🏼‍♂ merman: medium-light skin tone -1F9DC 1F3FD 200D 2642 FE0F ; fully-qualified # 🧜🏽‍♂️ merman: medium skin tone -1F9DC 1F3FD 200D 2642 ; non-fully-qualified # 🧜🏽‍♂ merman: medium skin tone -1F9DC 1F3FE 200D 2642 FE0F ; fully-qualified # 🧜🏾‍♂️ merman: medium-dark skin tone -1F9DC 1F3FE 200D 2642 ; non-fully-qualified # 🧜🏾‍♂ merman: medium-dark skin tone -1F9DC 1F3FF 200D 2642 FE0F ; fully-qualified # 🧜🏿‍♂️ merman: dark skin tone -1F9DC 1F3FF 200D 2642 ; non-fully-qualified # 🧜🏿‍♂ merman: dark skin tone -1F9DD ; fully-qualified # 🧝 elf -1F9DD 1F3FB ; fully-qualified # 🧝🏻 elf: light skin tone -1F9DD 1F3FC ; fully-qualified # 🧝🏼 elf: medium-light skin tone -1F9DD 1F3FD ; fully-qualified # 🧝🏽 elf: medium skin tone -1F9DD 1F3FE ; fully-qualified # 🧝🏾 elf: medium-dark skin tone -1F9DD 1F3FF ; fully-qualified # 🧝🏿 elf: dark skin tone -1F9DD 200D 2640 FE0F ; fully-qualified # 🧝‍♀️ woman elf -1F9DD 200D 2640 ; non-fully-qualified # 🧝‍♀ woman elf -1F9DD 1F3FB 200D 2640 FE0F ; fully-qualified # 🧝🏻‍♀️ woman elf: light skin tone -1F9DD 1F3FB 200D 2640 ; non-fully-qualified # 🧝🏻‍♀ woman elf: light skin tone -1F9DD 1F3FC 200D 2640 FE0F ; fully-qualified # 🧝🏼‍♀️ woman elf: medium-light skin tone -1F9DD 1F3FC 200D 2640 ; non-fully-qualified # 🧝🏼‍♀ woman elf: medium-light skin tone -1F9DD 1F3FD 200D 2640 FE0F ; fully-qualified # 🧝🏽‍♀️ woman elf: medium skin tone -1F9DD 1F3FD 200D 2640 ; non-fully-qualified # 🧝🏽‍♀ woman elf: medium skin tone -1F9DD 1F3FE 200D 2640 FE0F ; fully-qualified # 🧝🏾‍♀️ woman elf: medium-dark skin tone -1F9DD 1F3FE 200D 2640 ; non-fully-qualified # 🧝🏾‍♀ woman elf: medium-dark skin tone -1F9DD 1F3FF 200D 2640 FE0F ; fully-qualified # 🧝🏿‍♀️ woman elf: dark skin tone -1F9DD 1F3FF 200D 2640 ; non-fully-qualified # 🧝🏿‍♀ woman elf: dark skin tone -1F9DD 200D 2642 FE0F ; fully-qualified # 🧝‍♂️ man elf -1F9DD 200D 2642 ; non-fully-qualified # 🧝‍♂ man elf -1F9DD 1F3FB 200D 2642 FE0F ; fully-qualified # 🧝🏻‍♂️ man elf: light skin tone -1F9DD 1F3FB 200D 2642 ; non-fully-qualified # 🧝🏻‍♂ man elf: light skin tone -1F9DD 1F3FC 200D 2642 FE0F ; fully-qualified # 🧝🏼‍♂️ man elf: medium-light skin tone -1F9DD 1F3FC 200D 2642 ; non-fully-qualified # 🧝🏼‍♂ man elf: medium-light skin tone -1F9DD 1F3FD 200D 2642 FE0F ; fully-qualified # 🧝🏽‍♂️ man elf: medium skin tone -1F9DD 1F3FD 200D 2642 ; non-fully-qualified # 🧝🏽‍♂ man elf: medium skin tone -1F9DD 1F3FE 200D 2642 FE0F ; fully-qualified # 🧝🏾‍♂️ man elf: medium-dark skin tone -1F9DD 1F3FE 200D 2642 ; non-fully-qualified # 🧝🏾‍♂ man elf: medium-dark skin tone -1F9DD 1F3FF 200D 2642 FE0F ; fully-qualified # 🧝🏿‍♂️ man elf: dark skin tone -1F9DD 1F3FF 200D 2642 ; non-fully-qualified # 🧝🏿‍♂ man elf: dark skin tone -1F9DE ; fully-qualified # 🧞 genie -1F9DE 200D 2640 FE0F ; fully-qualified # 🧞‍♀️ woman genie -1F9DE 200D 2640 ; non-fully-qualified # 🧞‍♀ woman genie -1F9DE 200D 2642 FE0F ; fully-qualified # 🧞‍♂️ man genie -1F9DE 200D 2642 ; non-fully-qualified # 🧞‍♂ man genie -1F9DF ; fully-qualified # 🧟 zombie -1F9DF 200D 2640 FE0F ; fully-qualified # 🧟‍♀️ woman zombie -1F9DF 200D 2640 ; non-fully-qualified # 🧟‍♀ woman zombie -1F9DF 200D 2642 FE0F ; fully-qualified # 🧟‍♂️ man zombie -1F9DF 200D 2642 ; non-fully-qualified # 🧟‍♂ man zombie - -# subgroup: person-gesture -1F64D ; fully-qualified # 🙍 person frowning -1F64D 1F3FB ; fully-qualified # 🙍🏻 person frowning: light skin tone -1F64D 1F3FC ; fully-qualified # 🙍🏼 person frowning: medium-light skin tone -1F64D 1F3FD ; fully-qualified # 🙍🏽 person frowning: medium skin tone -1F64D 1F3FE ; fully-qualified # 🙍🏾 person frowning: medium-dark skin tone -1F64D 1F3FF ; fully-qualified # 🙍🏿 person frowning: dark skin tone -1F64D 200D 2642 FE0F ; fully-qualified # 🙍‍♂️ man frowning -1F64D 200D 2642 ; non-fully-qualified # 🙍‍♂ man frowning -1F64D 1F3FB 200D 2642 FE0F ; fully-qualified # 🙍🏻‍♂️ man frowning: light skin tone -1F64D 1F3FB 200D 2642 ; non-fully-qualified # 🙍🏻‍♂ man frowning: light skin tone -1F64D 1F3FC 200D 2642 FE0F ; fully-qualified # 🙍🏼‍♂️ man frowning: medium-light skin tone -1F64D 1F3FC 200D 2642 ; non-fully-qualified # 🙍🏼‍♂ man frowning: medium-light skin tone -1F64D 1F3FD 200D 2642 FE0F ; fully-qualified # 🙍🏽‍♂️ man frowning: medium skin tone -1F64D 1F3FD 200D 2642 ; non-fully-qualified # 🙍🏽‍♂ man frowning: medium skin tone -1F64D 1F3FE 200D 2642 FE0F ; fully-qualified # 🙍🏾‍♂️ man frowning: medium-dark skin tone -1F64D 1F3FE 200D 2642 ; non-fully-qualified # 🙍🏾‍♂ man frowning: medium-dark skin tone -1F64D 1F3FF 200D 2642 FE0F ; fully-qualified # 🙍🏿‍♂️ man frowning: dark skin tone -1F64D 1F3FF 200D 2642 ; non-fully-qualified # 🙍🏿‍♂ man frowning: dark skin tone -1F64D 200D 2640 FE0F ; fully-qualified # 🙍‍♀️ woman frowning -1F64D 200D 2640 ; non-fully-qualified # 🙍‍♀ woman frowning -1F64D 1F3FB 200D 2640 FE0F ; fully-qualified # 🙍🏻‍♀️ woman frowning: light skin tone -1F64D 1F3FB 200D 2640 ; non-fully-qualified # 🙍🏻‍♀ woman frowning: light skin tone -1F64D 1F3FC 200D 2640 FE0F ; fully-qualified # 🙍🏼‍♀️ woman frowning: medium-light skin tone -1F64D 1F3FC 200D 2640 ; non-fully-qualified # 🙍🏼‍♀ woman frowning: medium-light skin tone -1F64D 1F3FD 200D 2640 FE0F ; fully-qualified # 🙍🏽‍♀️ woman frowning: medium skin tone -1F64D 1F3FD 200D 2640 ; non-fully-qualified # 🙍🏽‍♀ woman frowning: medium skin tone -1F64D 1F3FE 200D 2640 FE0F ; fully-qualified # 🙍🏾‍♀️ woman frowning: medium-dark skin tone -1F64D 1F3FE 200D 2640 ; non-fully-qualified # 🙍🏾‍♀ woman frowning: medium-dark skin tone -1F64D 1F3FF 200D 2640 FE0F ; fully-qualified # 🙍🏿‍♀️ woman frowning: dark skin tone -1F64D 1F3FF 200D 2640 ; non-fully-qualified # 🙍🏿‍♀ woman frowning: dark skin tone -1F64E ; fully-qualified # 🙎 person pouting -1F64E 1F3FB ; fully-qualified # 🙎🏻 person pouting: light skin tone -1F64E 1F3FC ; fully-qualified # 🙎🏼 person pouting: medium-light skin tone -1F64E 1F3FD ; fully-qualified # 🙎🏽 person pouting: medium skin tone -1F64E 1F3FE ; fully-qualified # 🙎🏾 person pouting: medium-dark skin tone -1F64E 1F3FF ; fully-qualified # 🙎🏿 person pouting: dark skin tone -1F64E 200D 2642 FE0F ; fully-qualified # 🙎‍♂️ man pouting -1F64E 200D 2642 ; non-fully-qualified # 🙎‍♂ man pouting -1F64E 1F3FB 200D 2642 FE0F ; fully-qualified # 🙎🏻‍♂️ man pouting: light skin tone -1F64E 1F3FB 200D 2642 ; non-fully-qualified # 🙎🏻‍♂ man pouting: light skin tone -1F64E 1F3FC 200D 2642 FE0F ; fully-qualified # 🙎🏼‍♂️ man pouting: medium-light skin tone -1F64E 1F3FC 200D 2642 ; non-fully-qualified # 🙎🏼‍♂ man pouting: medium-light skin tone -1F64E 1F3FD 200D 2642 FE0F ; fully-qualified # 🙎🏽‍♂️ man pouting: medium skin tone -1F64E 1F3FD 200D 2642 ; non-fully-qualified # 🙎🏽‍♂ man pouting: medium skin tone -1F64E 1F3FE 200D 2642 FE0F ; fully-qualified # 🙎🏾‍♂️ man pouting: medium-dark skin tone -1F64E 1F3FE 200D 2642 ; non-fully-qualified # 🙎🏾‍♂ man pouting: medium-dark skin tone -1F64E 1F3FF 200D 2642 FE0F ; fully-qualified # 🙎🏿‍♂️ man pouting: dark skin tone -1F64E 1F3FF 200D 2642 ; non-fully-qualified # 🙎🏿‍♂ man pouting: dark skin tone -1F64E 200D 2640 FE0F ; fully-qualified # 🙎‍♀️ woman pouting -1F64E 200D 2640 ; non-fully-qualified # 🙎‍♀ woman pouting -1F64E 1F3FB 200D 2640 FE0F ; fully-qualified # 🙎🏻‍♀️ woman pouting: light skin tone -1F64E 1F3FB 200D 2640 ; non-fully-qualified # 🙎🏻‍♀ woman pouting: light skin tone -1F64E 1F3FC 200D 2640 FE0F ; fully-qualified # 🙎🏼‍♀️ woman pouting: medium-light skin tone -1F64E 1F3FC 200D 2640 ; non-fully-qualified # 🙎🏼‍♀ woman pouting: medium-light skin tone -1F64E 1F3FD 200D 2640 FE0F ; fully-qualified # 🙎🏽‍♀️ woman pouting: medium skin tone -1F64E 1F3FD 200D 2640 ; non-fully-qualified # 🙎🏽‍♀ woman pouting: medium skin tone -1F64E 1F3FE 200D 2640 FE0F ; fully-qualified # 🙎🏾‍♀️ woman pouting: medium-dark skin tone -1F64E 1F3FE 200D 2640 ; non-fully-qualified # 🙎🏾‍♀ woman pouting: medium-dark skin tone -1F64E 1F3FF 200D 2640 FE0F ; fully-qualified # 🙎🏿‍♀️ woman pouting: dark skin tone -1F64E 1F3FF 200D 2640 ; non-fully-qualified # 🙎🏿‍♀ woman pouting: dark skin tone -1F645 ; fully-qualified # 🙅 person gesturing NO -1F645 1F3FB ; fully-qualified # 🙅🏻 person gesturing NO: light skin tone -1F645 1F3FC ; fully-qualified # 🙅🏼 person gesturing NO: medium-light skin tone -1F645 1F3FD ; fully-qualified # 🙅🏽 person gesturing NO: medium skin tone -1F645 1F3FE ; fully-qualified # 🙅🏾 person gesturing NO: medium-dark skin tone -1F645 1F3FF ; fully-qualified # 🙅🏿 person gesturing NO: dark skin tone -1F645 200D 2642 FE0F ; fully-qualified # 🙅‍♂️ man gesturing NO -1F645 200D 2642 ; non-fully-qualified # 🙅‍♂ man gesturing NO -1F645 1F3FB 200D 2642 FE0F ; fully-qualified # 🙅🏻‍♂️ man gesturing NO: light skin tone -1F645 1F3FB 200D 2642 ; non-fully-qualified # 🙅🏻‍♂ man gesturing NO: light skin tone -1F645 1F3FC 200D 2642 FE0F ; fully-qualified # 🙅🏼‍♂️ man gesturing NO: medium-light skin tone -1F645 1F3FC 200D 2642 ; non-fully-qualified # 🙅🏼‍♂ man gesturing NO: medium-light skin tone -1F645 1F3FD 200D 2642 FE0F ; fully-qualified # 🙅🏽‍♂️ man gesturing NO: medium skin tone -1F645 1F3FD 200D 2642 ; non-fully-qualified # 🙅🏽‍♂ man gesturing NO: medium skin tone -1F645 1F3FE 200D 2642 FE0F ; fully-qualified # 🙅🏾‍♂️ man gesturing NO: medium-dark skin tone -1F645 1F3FE 200D 2642 ; non-fully-qualified # 🙅🏾‍♂ man gesturing NO: medium-dark skin tone -1F645 1F3FF 200D 2642 FE0F ; fully-qualified # 🙅🏿‍♂️ man gesturing NO: dark skin tone -1F645 1F3FF 200D 2642 ; non-fully-qualified # 🙅🏿‍♂ man gesturing NO: dark skin tone -1F645 200D 2640 FE0F ; fully-qualified # 🙅‍♀️ woman gesturing NO -1F645 200D 2640 ; non-fully-qualified # 🙅‍♀ woman gesturing NO -1F645 1F3FB 200D 2640 FE0F ; fully-qualified # 🙅🏻‍♀️ woman gesturing NO: light skin tone -1F645 1F3FB 200D 2640 ; non-fully-qualified # 🙅🏻‍♀ woman gesturing NO: light skin tone -1F645 1F3FC 200D 2640 FE0F ; fully-qualified # 🙅🏼‍♀️ woman gesturing NO: medium-light skin tone -1F645 1F3FC 200D 2640 ; non-fully-qualified # 🙅🏼‍♀ woman gesturing NO: medium-light skin tone -1F645 1F3FD 200D 2640 FE0F ; fully-qualified # 🙅🏽‍♀️ woman gesturing NO: medium skin tone -1F645 1F3FD 200D 2640 ; non-fully-qualified # 🙅🏽‍♀ woman gesturing NO: medium skin tone -1F645 1F3FE 200D 2640 FE0F ; fully-qualified # 🙅🏾‍♀️ woman gesturing NO: medium-dark skin tone -1F645 1F3FE 200D 2640 ; non-fully-qualified # 🙅🏾‍♀ woman gesturing NO: medium-dark skin tone -1F645 1F3FF 200D 2640 FE0F ; fully-qualified # 🙅🏿‍♀️ woman gesturing NO: dark skin tone -1F645 1F3FF 200D 2640 ; non-fully-qualified # 🙅🏿‍♀ woman gesturing NO: dark skin tone -1F646 ; fully-qualified # 🙆 person gesturing OK -1F646 1F3FB ; fully-qualified # 🙆🏻 person gesturing OK: light skin tone -1F646 1F3FC ; fully-qualified # 🙆🏼 person gesturing OK: medium-light skin tone -1F646 1F3FD ; fully-qualified # 🙆🏽 person gesturing OK: medium skin tone -1F646 1F3FE ; fully-qualified # 🙆🏾 person gesturing OK: medium-dark skin tone -1F646 1F3FF ; fully-qualified # 🙆🏿 person gesturing OK: dark skin tone -1F646 200D 2642 FE0F ; fully-qualified # 🙆‍♂️ man gesturing OK -1F646 200D 2642 ; non-fully-qualified # 🙆‍♂ man gesturing OK -1F646 1F3FB 200D 2642 FE0F ; fully-qualified # 🙆🏻‍♂️ man gesturing OK: light skin tone -1F646 1F3FB 200D 2642 ; non-fully-qualified # 🙆🏻‍♂ man gesturing OK: light skin tone -1F646 1F3FC 200D 2642 FE0F ; fully-qualified # 🙆🏼‍♂️ man gesturing OK: medium-light skin tone -1F646 1F3FC 200D 2642 ; non-fully-qualified # 🙆🏼‍♂ man gesturing OK: medium-light skin tone -1F646 1F3FD 200D 2642 FE0F ; fully-qualified # 🙆🏽‍♂️ man gesturing OK: medium skin tone -1F646 1F3FD 200D 2642 ; non-fully-qualified # 🙆🏽‍♂ man gesturing OK: medium skin tone -1F646 1F3FE 200D 2642 FE0F ; fully-qualified # 🙆🏾‍♂️ man gesturing OK: medium-dark skin tone -1F646 1F3FE 200D 2642 ; non-fully-qualified # 🙆🏾‍♂ man gesturing OK: medium-dark skin tone -1F646 1F3FF 200D 2642 FE0F ; fully-qualified # 🙆🏿‍♂️ man gesturing OK: dark skin tone -1F646 1F3FF 200D 2642 ; non-fully-qualified # 🙆🏿‍♂ man gesturing OK: dark skin tone -1F646 200D 2640 FE0F ; fully-qualified # 🙆‍♀️ woman gesturing OK -1F646 200D 2640 ; non-fully-qualified # 🙆‍♀ woman gesturing OK -1F646 1F3FB 200D 2640 FE0F ; fully-qualified # 🙆🏻‍♀️ woman gesturing OK: light skin tone -1F646 1F3FB 200D 2640 ; non-fully-qualified # 🙆🏻‍♀ woman gesturing OK: light skin tone -1F646 1F3FC 200D 2640 FE0F ; fully-qualified # 🙆🏼‍♀️ woman gesturing OK: medium-light skin tone -1F646 1F3FC 200D 2640 ; non-fully-qualified # 🙆🏼‍♀ woman gesturing OK: medium-light skin tone -1F646 1F3FD 200D 2640 FE0F ; fully-qualified # 🙆🏽‍♀️ woman gesturing OK: medium skin tone -1F646 1F3FD 200D 2640 ; non-fully-qualified # 🙆🏽‍♀ woman gesturing OK: medium skin tone -1F646 1F3FE 200D 2640 FE0F ; fully-qualified # 🙆🏾‍♀️ woman gesturing OK: medium-dark skin tone -1F646 1F3FE 200D 2640 ; non-fully-qualified # 🙆🏾‍♀ woman gesturing OK: medium-dark skin tone -1F646 1F3FF 200D 2640 FE0F ; fully-qualified # 🙆🏿‍♀️ woman gesturing OK: dark skin tone -1F646 1F3FF 200D 2640 ; non-fully-qualified # 🙆🏿‍♀ woman gesturing OK: dark skin tone -1F481 ; fully-qualified # 💁 person tipping hand -1F481 1F3FB ; fully-qualified # 💁🏻 person tipping hand: light skin tone -1F481 1F3FC ; fully-qualified # 💁🏼 person tipping hand: medium-light skin tone -1F481 1F3FD ; fully-qualified # 💁🏽 person tipping hand: medium skin tone -1F481 1F3FE ; fully-qualified # 💁🏾 person tipping hand: medium-dark skin tone -1F481 1F3FF ; fully-qualified # 💁🏿 person tipping hand: dark skin tone -1F481 200D 2642 FE0F ; fully-qualified # 💁‍♂️ man tipping hand -1F481 200D 2642 ; non-fully-qualified # 💁‍♂ man tipping hand -1F481 1F3FB 200D 2642 FE0F ; fully-qualified # 💁🏻‍♂️ man tipping hand: light skin tone -1F481 1F3FB 200D 2642 ; non-fully-qualified # 💁🏻‍♂ man tipping hand: light skin tone -1F481 1F3FC 200D 2642 FE0F ; fully-qualified # 💁🏼‍♂️ man tipping hand: medium-light skin tone -1F481 1F3FC 200D 2642 ; non-fully-qualified # 💁🏼‍♂ man tipping hand: medium-light skin tone -1F481 1F3FD 200D 2642 FE0F ; fully-qualified # 💁🏽‍♂️ man tipping hand: medium skin tone -1F481 1F3FD 200D 2642 ; non-fully-qualified # 💁🏽‍♂ man tipping hand: medium skin tone -1F481 1F3FE 200D 2642 FE0F ; fully-qualified # 💁🏾‍♂️ man tipping hand: medium-dark skin tone -1F481 1F3FE 200D 2642 ; non-fully-qualified # 💁🏾‍♂ man tipping hand: medium-dark skin tone -1F481 1F3FF 200D 2642 FE0F ; fully-qualified # 💁🏿‍♂️ man tipping hand: dark skin tone -1F481 1F3FF 200D 2642 ; non-fully-qualified # 💁🏿‍♂ man tipping hand: dark skin tone -1F481 200D 2640 FE0F ; fully-qualified # 💁‍♀️ woman tipping hand -1F481 200D 2640 ; non-fully-qualified # 💁‍♀ woman tipping hand -1F481 1F3FB 200D 2640 FE0F ; fully-qualified # 💁🏻‍♀️ woman tipping hand: light skin tone -1F481 1F3FB 200D 2640 ; non-fully-qualified # 💁🏻‍♀ woman tipping hand: light skin tone -1F481 1F3FC 200D 2640 FE0F ; fully-qualified # 💁🏼‍♀️ woman tipping hand: medium-light skin tone -1F481 1F3FC 200D 2640 ; non-fully-qualified # 💁🏼‍♀ woman tipping hand: medium-light skin tone -1F481 1F3FD 200D 2640 FE0F ; fully-qualified # 💁🏽‍♀️ woman tipping hand: medium skin tone -1F481 1F3FD 200D 2640 ; non-fully-qualified # 💁🏽‍♀ woman tipping hand: medium skin tone -1F481 1F3FE 200D 2640 FE0F ; fully-qualified # 💁🏾‍♀️ woman tipping hand: medium-dark skin tone -1F481 1F3FE 200D 2640 ; non-fully-qualified # 💁🏾‍♀ woman tipping hand: medium-dark skin tone -1F481 1F3FF 200D 2640 FE0F ; fully-qualified # 💁🏿‍♀️ woman tipping hand: dark skin tone -1F481 1F3FF 200D 2640 ; non-fully-qualified # 💁🏿‍♀ woman tipping hand: dark skin tone -1F64B ; fully-qualified # 🙋 person raising hand -1F64B 1F3FB ; fully-qualified # 🙋🏻 person raising hand: light skin tone -1F64B 1F3FC ; fully-qualified # 🙋🏼 person raising hand: medium-light skin tone -1F64B 1F3FD ; fully-qualified # 🙋🏽 person raising hand: medium skin tone -1F64B 1F3FE ; fully-qualified # 🙋🏾 person raising hand: medium-dark skin tone -1F64B 1F3FF ; fully-qualified # 🙋🏿 person raising hand: dark skin tone -1F64B 200D 2642 FE0F ; fully-qualified # 🙋‍♂️ man raising hand -1F64B 200D 2642 ; non-fully-qualified # 🙋‍♂ man raising hand -1F64B 1F3FB 200D 2642 FE0F ; fully-qualified # 🙋🏻‍♂️ man raising hand: light skin tone -1F64B 1F3FB 200D 2642 ; non-fully-qualified # 🙋🏻‍♂ man raising hand: light skin tone -1F64B 1F3FC 200D 2642 FE0F ; fully-qualified # 🙋🏼‍♂️ man raising hand: medium-light skin tone -1F64B 1F3FC 200D 2642 ; non-fully-qualified # 🙋🏼‍♂ man raising hand: medium-light skin tone -1F64B 1F3FD 200D 2642 FE0F ; fully-qualified # 🙋🏽‍♂️ man raising hand: medium skin tone -1F64B 1F3FD 200D 2642 ; non-fully-qualified # 🙋🏽‍♂ man raising hand: medium skin tone -1F64B 1F3FE 200D 2642 FE0F ; fully-qualified # 🙋🏾‍♂️ man raising hand: medium-dark skin tone -1F64B 1F3FE 200D 2642 ; non-fully-qualified # 🙋🏾‍♂ man raising hand: medium-dark skin tone -1F64B 1F3FF 200D 2642 FE0F ; fully-qualified # 🙋🏿‍♂️ man raising hand: dark skin tone -1F64B 1F3FF 200D 2642 ; non-fully-qualified # 🙋🏿‍♂ man raising hand: dark skin tone -1F64B 200D 2640 FE0F ; fully-qualified # 🙋‍♀️ woman raising hand -1F64B 200D 2640 ; non-fully-qualified # 🙋‍♀ woman raising hand -1F64B 1F3FB 200D 2640 FE0F ; fully-qualified # 🙋🏻‍♀️ woman raising hand: light skin tone -1F64B 1F3FB 200D 2640 ; non-fully-qualified # 🙋🏻‍♀ woman raising hand: light skin tone -1F64B 1F3FC 200D 2640 FE0F ; fully-qualified # 🙋🏼‍♀️ woman raising hand: medium-light skin tone -1F64B 1F3FC 200D 2640 ; non-fully-qualified # 🙋🏼‍♀ woman raising hand: medium-light skin tone -1F64B 1F3FD 200D 2640 FE0F ; fully-qualified # 🙋🏽‍♀️ woman raising hand: medium skin tone -1F64B 1F3FD 200D 2640 ; non-fully-qualified # 🙋🏽‍♀ woman raising hand: medium skin tone -1F64B 1F3FE 200D 2640 FE0F ; fully-qualified # 🙋🏾‍♀️ woman raising hand: medium-dark skin tone -1F64B 1F3FE 200D 2640 ; non-fully-qualified # 🙋🏾‍♀ woman raising hand: medium-dark skin tone -1F64B 1F3FF 200D 2640 FE0F ; fully-qualified # 🙋🏿‍♀️ woman raising hand: dark skin tone -1F64B 1F3FF 200D 2640 ; non-fully-qualified # 🙋🏿‍♀ woman raising hand: dark skin tone -1F647 ; fully-qualified # 🙇 person bowing -1F647 1F3FB ; fully-qualified # 🙇🏻 person bowing: light skin tone -1F647 1F3FC ; fully-qualified # 🙇🏼 person bowing: medium-light skin tone -1F647 1F3FD ; fully-qualified # 🙇🏽 person bowing: medium skin tone -1F647 1F3FE ; fully-qualified # 🙇🏾 person bowing: medium-dark skin tone -1F647 1F3FF ; fully-qualified # 🙇🏿 person bowing: dark skin tone -1F647 200D 2642 FE0F ; fully-qualified # 🙇‍♂️ man bowing -1F647 200D 2642 ; non-fully-qualified # 🙇‍♂ man bowing -1F647 1F3FB 200D 2642 FE0F ; fully-qualified # 🙇🏻‍♂️ man bowing: light skin tone -1F647 1F3FB 200D 2642 ; non-fully-qualified # 🙇🏻‍♂ man bowing: light skin tone -1F647 1F3FC 200D 2642 FE0F ; fully-qualified # 🙇🏼‍♂️ man bowing: medium-light skin tone -1F647 1F3FC 200D 2642 ; non-fully-qualified # 🙇🏼‍♂ man bowing: medium-light skin tone -1F647 1F3FD 200D 2642 FE0F ; fully-qualified # 🙇🏽‍♂️ man bowing: medium skin tone -1F647 1F3FD 200D 2642 ; non-fully-qualified # 🙇🏽‍♂ man bowing: medium skin tone -1F647 1F3FE 200D 2642 FE0F ; fully-qualified # 🙇🏾‍♂️ man bowing: medium-dark skin tone -1F647 1F3FE 200D 2642 ; non-fully-qualified # 🙇🏾‍♂ man bowing: medium-dark skin tone -1F647 1F3FF 200D 2642 FE0F ; fully-qualified # 🙇🏿‍♂️ man bowing: dark skin tone -1F647 1F3FF 200D 2642 ; non-fully-qualified # 🙇🏿‍♂ man bowing: dark skin tone -1F647 200D 2640 FE0F ; fully-qualified # 🙇‍♀️ woman bowing -1F647 200D 2640 ; non-fully-qualified # 🙇‍♀ woman bowing -1F647 1F3FB 200D 2640 FE0F ; fully-qualified # 🙇🏻‍♀️ woman bowing: light skin tone -1F647 1F3FB 200D 2640 ; non-fully-qualified # 🙇🏻‍♀ woman bowing: light skin tone -1F647 1F3FC 200D 2640 FE0F ; fully-qualified # 🙇🏼‍♀️ woman bowing: medium-light skin tone -1F647 1F3FC 200D 2640 ; non-fully-qualified # 🙇🏼‍♀ woman bowing: medium-light skin tone -1F647 1F3FD 200D 2640 FE0F ; fully-qualified # 🙇🏽‍♀️ woman bowing: medium skin tone -1F647 1F3FD 200D 2640 ; non-fully-qualified # 🙇🏽‍♀ woman bowing: medium skin tone -1F647 1F3FE 200D 2640 FE0F ; fully-qualified # 🙇🏾‍♀️ woman bowing: medium-dark skin tone -1F647 1F3FE 200D 2640 ; non-fully-qualified # 🙇🏾‍♀ woman bowing: medium-dark skin tone -1F647 1F3FF 200D 2640 FE0F ; fully-qualified # 🙇🏿‍♀️ woman bowing: dark skin tone -1F647 1F3FF 200D 2640 ; non-fully-qualified # 🙇🏿‍♀ woman bowing: dark skin tone -1F926 ; fully-qualified # 🤦 person facepalming -1F926 1F3FB ; fully-qualified # 🤦🏻 person facepalming: light skin tone -1F926 1F3FC ; fully-qualified # 🤦🏼 person facepalming: medium-light skin tone -1F926 1F3FD ; fully-qualified # 🤦🏽 person facepalming: medium skin tone -1F926 1F3FE ; fully-qualified # 🤦🏾 person facepalming: medium-dark skin tone -1F926 1F3FF ; fully-qualified # 🤦🏿 person facepalming: dark skin tone -1F926 200D 2642 FE0F ; fully-qualified # 🤦‍♂️ man facepalming -1F926 200D 2642 ; non-fully-qualified # 🤦‍♂ man facepalming -1F926 1F3FB 200D 2642 FE0F ; fully-qualified # 🤦🏻‍♂️ man facepalming: light skin tone -1F926 1F3FB 200D 2642 ; non-fully-qualified # 🤦🏻‍♂ man facepalming: light skin tone -1F926 1F3FC 200D 2642 FE0F ; fully-qualified # 🤦🏼‍♂️ man facepalming: medium-light skin tone -1F926 1F3FC 200D 2642 ; non-fully-qualified # 🤦🏼‍♂ man facepalming: medium-light skin tone -1F926 1F3FD 200D 2642 FE0F ; fully-qualified # 🤦🏽‍♂️ man facepalming: medium skin tone -1F926 1F3FD 200D 2642 ; non-fully-qualified # 🤦🏽‍♂ man facepalming: medium skin tone -1F926 1F3FE 200D 2642 FE0F ; fully-qualified # 🤦🏾‍♂️ man facepalming: medium-dark skin tone -1F926 1F3FE 200D 2642 ; non-fully-qualified # 🤦🏾‍♂ man facepalming: medium-dark skin tone -1F926 1F3FF 200D 2642 FE0F ; fully-qualified # 🤦🏿‍♂️ man facepalming: dark skin tone -1F926 1F3FF 200D 2642 ; non-fully-qualified # 🤦🏿‍♂ man facepalming: dark skin tone -1F926 200D 2640 FE0F ; fully-qualified # 🤦‍♀️ woman facepalming -1F926 200D 2640 ; non-fully-qualified # 🤦‍♀ woman facepalming -1F926 1F3FB 200D 2640 FE0F ; fully-qualified # 🤦🏻‍♀️ woman facepalming: light skin tone -1F926 1F3FB 200D 2640 ; non-fully-qualified # 🤦🏻‍♀ woman facepalming: light skin tone -1F926 1F3FC 200D 2640 FE0F ; fully-qualified # 🤦🏼‍♀️ woman facepalming: medium-light skin tone -1F926 1F3FC 200D 2640 ; non-fully-qualified # 🤦🏼‍♀ woman facepalming: medium-light skin tone -1F926 1F3FD 200D 2640 FE0F ; fully-qualified # 🤦🏽‍♀️ woman facepalming: medium skin tone -1F926 1F3FD 200D 2640 ; non-fully-qualified # 🤦🏽‍♀ woman facepalming: medium skin tone -1F926 1F3FE 200D 2640 FE0F ; fully-qualified # 🤦🏾‍♀️ woman facepalming: medium-dark skin tone -1F926 1F3FE 200D 2640 ; non-fully-qualified # 🤦🏾‍♀ woman facepalming: medium-dark skin tone -1F926 1F3FF 200D 2640 FE0F ; fully-qualified # 🤦🏿‍♀️ woman facepalming: dark skin tone -1F926 1F3FF 200D 2640 ; non-fully-qualified # 🤦🏿‍♀ woman facepalming: dark skin tone -1F937 ; fully-qualified # 🤷 person shrugging -1F937 1F3FB ; fully-qualified # 🤷🏻 person shrugging: light skin tone -1F937 1F3FC ; fully-qualified # 🤷🏼 person shrugging: medium-light skin tone -1F937 1F3FD ; fully-qualified # 🤷🏽 person shrugging: medium skin tone -1F937 1F3FE ; fully-qualified # 🤷🏾 person shrugging: medium-dark skin tone -1F937 1F3FF ; fully-qualified # 🤷🏿 person shrugging: dark skin tone -1F937 200D 2642 FE0F ; fully-qualified # 🤷‍♂️ man shrugging -1F937 200D 2642 ; non-fully-qualified # 🤷‍♂ man shrugging -1F937 1F3FB 200D 2642 FE0F ; fully-qualified # 🤷🏻‍♂️ man shrugging: light skin tone -1F937 1F3FB 200D 2642 ; non-fully-qualified # 🤷🏻‍♂ man shrugging: light skin tone -1F937 1F3FC 200D 2642 FE0F ; fully-qualified # 🤷🏼‍♂️ man shrugging: medium-light skin tone -1F937 1F3FC 200D 2642 ; non-fully-qualified # 🤷🏼‍♂ man shrugging: medium-light skin tone -1F937 1F3FD 200D 2642 FE0F ; fully-qualified # 🤷🏽‍♂️ man shrugging: medium skin tone -1F937 1F3FD 200D 2642 ; non-fully-qualified # 🤷🏽‍♂ man shrugging: medium skin tone -1F937 1F3FE 200D 2642 FE0F ; fully-qualified # 🤷🏾‍♂️ man shrugging: medium-dark skin tone -1F937 1F3FE 200D 2642 ; non-fully-qualified # 🤷🏾‍♂ man shrugging: medium-dark skin tone -1F937 1F3FF 200D 2642 FE0F ; fully-qualified # 🤷🏿‍♂️ man shrugging: dark skin tone -1F937 1F3FF 200D 2642 ; non-fully-qualified # 🤷🏿‍♂ man shrugging: dark skin tone -1F937 200D 2640 FE0F ; fully-qualified # 🤷‍♀️ woman shrugging -1F937 200D 2640 ; non-fully-qualified # 🤷‍♀ woman shrugging -1F937 1F3FB 200D 2640 FE0F ; fully-qualified # 🤷🏻‍♀️ woman shrugging: light skin tone -1F937 1F3FB 200D 2640 ; non-fully-qualified # 🤷🏻‍♀ woman shrugging: light skin tone -1F937 1F3FC 200D 2640 FE0F ; fully-qualified # 🤷🏼‍♀️ woman shrugging: medium-light skin tone -1F937 1F3FC 200D 2640 ; non-fully-qualified # 🤷🏼‍♀ woman shrugging: medium-light skin tone -1F937 1F3FD 200D 2640 FE0F ; fully-qualified # 🤷🏽‍♀️ woman shrugging: medium skin tone -1F937 1F3FD 200D 2640 ; non-fully-qualified # 🤷🏽‍♀ woman shrugging: medium skin tone -1F937 1F3FE 200D 2640 FE0F ; fully-qualified # 🤷🏾‍♀️ woman shrugging: medium-dark skin tone -1F937 1F3FE 200D 2640 ; non-fully-qualified # 🤷🏾‍♀ woman shrugging: medium-dark skin tone -1F937 1F3FF 200D 2640 FE0F ; fully-qualified # 🤷🏿‍♀️ woman shrugging: dark skin tone -1F937 1F3FF 200D 2640 ; non-fully-qualified # 🤷🏿‍♀ woman shrugging: dark skin tone - -# subgroup: person-activity -1F486 ; fully-qualified # 💆 person getting massage -1F486 1F3FB ; fully-qualified # 💆🏻 person getting massage: light skin tone -1F486 1F3FC ; fully-qualified # 💆🏼 person getting massage: medium-light skin tone -1F486 1F3FD ; fully-qualified # 💆🏽 person getting massage: medium skin tone -1F486 1F3FE ; fully-qualified # 💆🏾 person getting massage: medium-dark skin tone -1F486 1F3FF ; fully-qualified # 💆🏿 person getting massage: dark skin tone -1F486 200D 2642 FE0F ; fully-qualified # 💆‍♂️ man getting massage -1F486 200D 2642 ; non-fully-qualified # 💆‍♂ man getting massage -1F486 1F3FB 200D 2642 FE0F ; fully-qualified # 💆🏻‍♂️ man getting massage: light skin tone -1F486 1F3FB 200D 2642 ; non-fully-qualified # 💆🏻‍♂ man getting massage: light skin tone -1F486 1F3FC 200D 2642 FE0F ; fully-qualified # 💆🏼‍♂️ man getting massage: medium-light skin tone -1F486 1F3FC 200D 2642 ; non-fully-qualified # 💆🏼‍♂ man getting massage: medium-light skin tone -1F486 1F3FD 200D 2642 FE0F ; fully-qualified # 💆🏽‍♂️ man getting massage: medium skin tone -1F486 1F3FD 200D 2642 ; non-fully-qualified # 💆🏽‍♂ man getting massage: medium skin tone -1F486 1F3FE 200D 2642 FE0F ; fully-qualified # 💆🏾‍♂️ man getting massage: medium-dark skin tone -1F486 1F3FE 200D 2642 ; non-fully-qualified # 💆🏾‍♂ man getting massage: medium-dark skin tone -1F486 1F3FF 200D 2642 FE0F ; fully-qualified # 💆🏿‍♂️ man getting massage: dark skin tone -1F486 1F3FF 200D 2642 ; non-fully-qualified # 💆🏿‍♂ man getting massage: dark skin tone -1F486 200D 2640 FE0F ; fully-qualified # 💆‍♀️ woman getting massage -1F486 200D 2640 ; non-fully-qualified # 💆‍♀ woman getting massage -1F486 1F3FB 200D 2640 FE0F ; fully-qualified # 💆🏻‍♀️ woman getting massage: light skin tone -1F486 1F3FB 200D 2640 ; non-fully-qualified # 💆🏻‍♀ woman getting massage: light skin tone -1F486 1F3FC 200D 2640 FE0F ; fully-qualified # 💆🏼‍♀️ woman getting massage: medium-light skin tone -1F486 1F3FC 200D 2640 ; non-fully-qualified # 💆🏼‍♀ woman getting massage: medium-light skin tone -1F486 1F3FD 200D 2640 FE0F ; fully-qualified # 💆🏽‍♀️ woman getting massage: medium skin tone -1F486 1F3FD 200D 2640 ; non-fully-qualified # 💆🏽‍♀ woman getting massage: medium skin tone -1F486 1F3FE 200D 2640 FE0F ; fully-qualified # 💆🏾‍♀️ woman getting massage: medium-dark skin tone -1F486 1F3FE 200D 2640 ; non-fully-qualified # 💆🏾‍♀ woman getting massage: medium-dark skin tone -1F486 1F3FF 200D 2640 FE0F ; fully-qualified # 💆🏿‍♀️ woman getting massage: dark skin tone -1F486 1F3FF 200D 2640 ; non-fully-qualified # 💆🏿‍♀ woman getting massage: dark skin tone -1F487 ; fully-qualified # 💇 person getting haircut -1F487 1F3FB ; fully-qualified # 💇🏻 person getting haircut: light skin tone -1F487 1F3FC ; fully-qualified # 💇🏼 person getting haircut: medium-light skin tone -1F487 1F3FD ; fully-qualified # 💇🏽 person getting haircut: medium skin tone -1F487 1F3FE ; fully-qualified # 💇🏾 person getting haircut: medium-dark skin tone -1F487 1F3FF ; fully-qualified # 💇🏿 person getting haircut: dark skin tone -1F487 200D 2642 FE0F ; fully-qualified # 💇‍♂️ man getting haircut -1F487 200D 2642 ; non-fully-qualified # 💇‍♂ man getting haircut -1F487 1F3FB 200D 2642 FE0F ; fully-qualified # 💇🏻‍♂️ man getting haircut: light skin tone -1F487 1F3FB 200D 2642 ; non-fully-qualified # 💇🏻‍♂ man getting haircut: light skin tone -1F487 1F3FC 200D 2642 FE0F ; fully-qualified # 💇🏼‍♂️ man getting haircut: medium-light skin tone -1F487 1F3FC 200D 2642 ; non-fully-qualified # 💇🏼‍♂ man getting haircut: medium-light skin tone -1F487 1F3FD 200D 2642 FE0F ; fully-qualified # 💇🏽‍♂️ man getting haircut: medium skin tone -1F487 1F3FD 200D 2642 ; non-fully-qualified # 💇🏽‍♂ man getting haircut: medium skin tone -1F487 1F3FE 200D 2642 FE0F ; fully-qualified # 💇🏾‍♂️ man getting haircut: medium-dark skin tone -1F487 1F3FE 200D 2642 ; non-fully-qualified # 💇🏾‍♂ man getting haircut: medium-dark skin tone -1F487 1F3FF 200D 2642 FE0F ; fully-qualified # 💇🏿‍♂️ man getting haircut: dark skin tone -1F487 1F3FF 200D 2642 ; non-fully-qualified # 💇🏿‍♂ man getting haircut: dark skin tone -1F487 200D 2640 FE0F ; fully-qualified # 💇‍♀️ woman getting haircut -1F487 200D 2640 ; non-fully-qualified # 💇‍♀ woman getting haircut -1F487 1F3FB 200D 2640 FE0F ; fully-qualified # 💇🏻‍♀️ woman getting haircut: light skin tone -1F487 1F3FB 200D 2640 ; non-fully-qualified # 💇🏻‍♀ woman getting haircut: light skin tone -1F487 1F3FC 200D 2640 FE0F ; fully-qualified # 💇🏼‍♀️ woman getting haircut: medium-light skin tone -1F487 1F3FC 200D 2640 ; non-fully-qualified # 💇🏼‍♀ woman getting haircut: medium-light skin tone -1F487 1F3FD 200D 2640 FE0F ; fully-qualified # 💇🏽‍♀️ woman getting haircut: medium skin tone -1F487 1F3FD 200D 2640 ; non-fully-qualified # 💇🏽‍♀ woman getting haircut: medium skin tone -1F487 1F3FE 200D 2640 FE0F ; fully-qualified # 💇🏾‍♀️ woman getting haircut: medium-dark skin tone -1F487 1F3FE 200D 2640 ; non-fully-qualified # 💇🏾‍♀ woman getting haircut: medium-dark skin tone -1F487 1F3FF 200D 2640 FE0F ; fully-qualified # 💇🏿‍♀️ woman getting haircut: dark skin tone -1F487 1F3FF 200D 2640 ; non-fully-qualified # 💇🏿‍♀ woman getting haircut: dark skin tone -1F6B6 ; fully-qualified # 🚶 person walking -1F6B6 1F3FB ; fully-qualified # 🚶🏻 person walking: light skin tone -1F6B6 1F3FC ; fully-qualified # 🚶🏼 person walking: medium-light skin tone -1F6B6 1F3FD ; fully-qualified # 🚶🏽 person walking: medium skin tone -1F6B6 1F3FE ; fully-qualified # 🚶🏾 person walking: medium-dark skin tone -1F6B6 1F3FF ; fully-qualified # 🚶🏿 person walking: dark skin tone -1F6B6 200D 2642 FE0F ; fully-qualified # 🚶‍♂️ man walking -1F6B6 200D 2642 ; non-fully-qualified # 🚶‍♂ man walking -1F6B6 1F3FB 200D 2642 FE0F ; fully-qualified # 🚶🏻‍♂️ man walking: light skin tone -1F6B6 1F3FB 200D 2642 ; non-fully-qualified # 🚶🏻‍♂ man walking: light skin tone -1F6B6 1F3FC 200D 2642 FE0F ; fully-qualified # 🚶🏼‍♂️ man walking: medium-light skin tone -1F6B6 1F3FC 200D 2642 ; non-fully-qualified # 🚶🏼‍♂ man walking: medium-light skin tone -1F6B6 1F3FD 200D 2642 FE0F ; fully-qualified # 🚶🏽‍♂️ man walking: medium skin tone -1F6B6 1F3FD 200D 2642 ; non-fully-qualified # 🚶🏽‍♂ man walking: medium skin tone -1F6B6 1F3FE 200D 2642 FE0F ; fully-qualified # 🚶🏾‍♂️ man walking: medium-dark skin tone -1F6B6 1F3FE 200D 2642 ; non-fully-qualified # 🚶🏾‍♂ man walking: medium-dark skin tone -1F6B6 1F3FF 200D 2642 FE0F ; fully-qualified # 🚶🏿‍♂️ man walking: dark skin tone -1F6B6 1F3FF 200D 2642 ; non-fully-qualified # 🚶🏿‍♂ man walking: dark skin tone -1F6B6 200D 2640 FE0F ; fully-qualified # 🚶‍♀️ woman walking -1F6B6 200D 2640 ; non-fully-qualified # 🚶‍♀ woman walking -1F6B6 1F3FB 200D 2640 FE0F ; fully-qualified # 🚶🏻‍♀️ woman walking: light skin tone -1F6B6 1F3FB 200D 2640 ; non-fully-qualified # 🚶🏻‍♀ woman walking: light skin tone -1F6B6 1F3FC 200D 2640 FE0F ; fully-qualified # 🚶🏼‍♀️ woman walking: medium-light skin tone -1F6B6 1F3FC 200D 2640 ; non-fully-qualified # 🚶🏼‍♀ woman walking: medium-light skin tone -1F6B6 1F3FD 200D 2640 FE0F ; fully-qualified # 🚶🏽‍♀️ woman walking: medium skin tone -1F6B6 1F3FD 200D 2640 ; non-fully-qualified # 🚶🏽‍♀ woman walking: medium skin tone -1F6B6 1F3FE 200D 2640 FE0F ; fully-qualified # 🚶🏾‍♀️ woman walking: medium-dark skin tone -1F6B6 1F3FE 200D 2640 ; non-fully-qualified # 🚶🏾‍♀ woman walking: medium-dark skin tone -1F6B6 1F3FF 200D 2640 FE0F ; fully-qualified # 🚶🏿‍♀️ woman walking: dark skin tone -1F6B6 1F3FF 200D 2640 ; non-fully-qualified # 🚶🏿‍♀ woman walking: dark skin tone -1F3C3 ; fully-qualified # 🏃 person running -1F3C3 1F3FB ; fully-qualified # 🏃🏻 person running: light skin tone -1F3C3 1F3FC ; fully-qualified # 🏃🏼 person running: medium-light skin tone -1F3C3 1F3FD ; fully-qualified # 🏃🏽 person running: medium skin tone -1F3C3 1F3FE ; fully-qualified # 🏃🏾 person running: medium-dark skin tone -1F3C3 1F3FF ; fully-qualified # 🏃🏿 person running: dark skin tone -1F3C3 200D 2642 FE0F ; fully-qualified # 🏃‍♂️ man running -1F3C3 200D 2642 ; non-fully-qualified # 🏃‍♂ man running -1F3C3 1F3FB 200D 2642 FE0F ; fully-qualified # 🏃🏻‍♂️ man running: light skin tone -1F3C3 1F3FB 200D 2642 ; non-fully-qualified # 🏃🏻‍♂ man running: light skin tone -1F3C3 1F3FC 200D 2642 FE0F ; fully-qualified # 🏃🏼‍♂️ man running: medium-light skin tone -1F3C3 1F3FC 200D 2642 ; non-fully-qualified # 🏃🏼‍♂ man running: medium-light skin tone -1F3C3 1F3FD 200D 2642 FE0F ; fully-qualified # 🏃🏽‍♂️ man running: medium skin tone -1F3C3 1F3FD 200D 2642 ; non-fully-qualified # 🏃🏽‍♂ man running: medium skin tone -1F3C3 1F3FE 200D 2642 FE0F ; fully-qualified # 🏃🏾‍♂️ man running: medium-dark skin tone -1F3C3 1F3FE 200D 2642 ; non-fully-qualified # 🏃🏾‍♂ man running: medium-dark skin tone -1F3C3 1F3FF 200D 2642 FE0F ; fully-qualified # 🏃🏿‍♂️ man running: dark skin tone -1F3C3 1F3FF 200D 2642 ; non-fully-qualified # 🏃🏿‍♂ man running: dark skin tone -1F3C3 200D 2640 FE0F ; fully-qualified # 🏃‍♀️ woman running -1F3C3 200D 2640 ; non-fully-qualified # 🏃‍♀ woman running -1F3C3 1F3FB 200D 2640 FE0F ; fully-qualified # 🏃🏻‍♀️ woman running: light skin tone -1F3C3 1F3FB 200D 2640 ; non-fully-qualified # 🏃🏻‍♀ woman running: light skin tone -1F3C3 1F3FC 200D 2640 FE0F ; fully-qualified # 🏃🏼‍♀️ woman running: medium-light skin tone -1F3C3 1F3FC 200D 2640 ; non-fully-qualified # 🏃🏼‍♀ woman running: medium-light skin tone -1F3C3 1F3FD 200D 2640 FE0F ; fully-qualified # 🏃🏽‍♀️ woman running: medium skin tone -1F3C3 1F3FD 200D 2640 ; non-fully-qualified # 🏃🏽‍♀ woman running: medium skin tone -1F3C3 1F3FE 200D 2640 FE0F ; fully-qualified # 🏃🏾‍♀️ woman running: medium-dark skin tone -1F3C3 1F3FE 200D 2640 ; non-fully-qualified # 🏃🏾‍♀ woman running: medium-dark skin tone -1F3C3 1F3FF 200D 2640 FE0F ; fully-qualified # 🏃🏿‍♀️ woman running: dark skin tone -1F3C3 1F3FF 200D 2640 ; non-fully-qualified # 🏃🏿‍♀ woman running: dark skin tone -1F483 ; fully-qualified # 💃 woman dancing -1F483 1F3FB ; fully-qualified # 💃🏻 woman dancing: light skin tone -1F483 1F3FC ; fully-qualified # 💃🏼 woman dancing: medium-light skin tone -1F483 1F3FD ; fully-qualified # 💃🏽 woman dancing: medium skin tone -1F483 1F3FE ; fully-qualified # 💃🏾 woman dancing: medium-dark skin tone -1F483 1F3FF ; fully-qualified # 💃🏿 woman dancing: dark skin tone -1F57A ; fully-qualified # 🕺 man dancing -1F57A 1F3FB ; fully-qualified # 🕺🏻 man dancing: light skin tone -1F57A 1F3FC ; fully-qualified # 🕺🏼 man dancing: medium-light skin tone -1F57A 1F3FD ; fully-qualified # 🕺🏽 man dancing: medium skin tone -1F57A 1F3FE ; fully-qualified # 🕺🏾 man dancing: medium-dark skin tone -1F57A 1F3FF ; fully-qualified # 🕺🏿 man dancing: dark skin tone -1F46F ; fully-qualified # 👯 people with bunny ears -1F46F 200D 2642 FE0F ; fully-qualified # 👯‍♂️ men with bunny ears -1F46F 200D 2642 ; non-fully-qualified # 👯‍♂ men with bunny ears -1F46F 200D 2640 FE0F ; fully-qualified # 👯‍♀️ women with bunny ears -1F46F 200D 2640 ; non-fully-qualified # 👯‍♀ women with bunny ears -1F9D6 ; fully-qualified # 🧖 person in steamy room -1F9D6 1F3FB ; fully-qualified # 🧖🏻 person in steamy room: light skin tone -1F9D6 1F3FC ; fully-qualified # 🧖🏼 person in steamy room: medium-light skin tone -1F9D6 1F3FD ; fully-qualified # 🧖🏽 person in steamy room: medium skin tone -1F9D6 1F3FE ; fully-qualified # 🧖🏾 person in steamy room: medium-dark skin tone -1F9D6 1F3FF ; fully-qualified # 🧖🏿 person in steamy room: dark skin tone -1F9D6 200D 2640 FE0F ; fully-qualified # 🧖‍♀️ woman in steamy room -1F9D6 200D 2640 ; non-fully-qualified # 🧖‍♀ woman in steamy room -1F9D6 1F3FB 200D 2640 FE0F ; fully-qualified # 🧖🏻‍♀️ woman in steamy room: light skin tone -1F9D6 1F3FB 200D 2640 ; non-fully-qualified # 🧖🏻‍♀ woman in steamy room: light skin tone -1F9D6 1F3FC 200D 2640 FE0F ; fully-qualified # 🧖🏼‍♀️ woman in steamy room: medium-light skin tone -1F9D6 1F3FC 200D 2640 ; non-fully-qualified # 🧖🏼‍♀ woman in steamy room: medium-light skin tone -1F9D6 1F3FD 200D 2640 FE0F ; fully-qualified # 🧖🏽‍♀️ woman in steamy room: medium skin tone -1F9D6 1F3FD 200D 2640 ; non-fully-qualified # 🧖🏽‍♀ woman in steamy room: medium skin tone -1F9D6 1F3FE 200D 2640 FE0F ; fully-qualified # 🧖🏾‍♀️ woman in steamy room: medium-dark skin tone -1F9D6 1F3FE 200D 2640 ; non-fully-qualified # 🧖🏾‍♀ woman in steamy room: medium-dark skin tone -1F9D6 1F3FF 200D 2640 FE0F ; fully-qualified # 🧖🏿‍♀️ woman in steamy room: dark skin tone -1F9D6 1F3FF 200D 2640 ; non-fully-qualified # 🧖🏿‍♀ woman in steamy room: dark skin tone -1F9D6 200D 2642 FE0F ; fully-qualified # 🧖‍♂️ man in steamy room -1F9D6 200D 2642 ; non-fully-qualified # 🧖‍♂ man in steamy room -1F9D6 1F3FB 200D 2642 FE0F ; fully-qualified # 🧖🏻‍♂️ man in steamy room: light skin tone -1F9D6 1F3FB 200D 2642 ; non-fully-qualified # 🧖🏻‍♂ man in steamy room: light skin tone -1F9D6 1F3FC 200D 2642 FE0F ; fully-qualified # 🧖🏼‍♂️ man in steamy room: medium-light skin tone -1F9D6 1F3FC 200D 2642 ; non-fully-qualified # 🧖🏼‍♂ man in steamy room: medium-light skin tone -1F9D6 1F3FD 200D 2642 FE0F ; fully-qualified # 🧖🏽‍♂️ man in steamy room: medium skin tone -1F9D6 1F3FD 200D 2642 ; non-fully-qualified # 🧖🏽‍♂ man in steamy room: medium skin tone -1F9D6 1F3FE 200D 2642 FE0F ; fully-qualified # 🧖🏾‍♂️ man in steamy room: medium-dark skin tone -1F9D6 1F3FE 200D 2642 ; non-fully-qualified # 🧖🏾‍♂ man in steamy room: medium-dark skin tone -1F9D6 1F3FF 200D 2642 FE0F ; fully-qualified # 🧖🏿‍♂️ man in steamy room: dark skin tone -1F9D6 1F3FF 200D 2642 ; non-fully-qualified # 🧖🏿‍♂ man in steamy room: dark skin tone -1F9D7 ; fully-qualified # 🧗 person climbing -1F9D7 1F3FB ; fully-qualified # 🧗🏻 person climbing: light skin tone -1F9D7 1F3FC ; fully-qualified # 🧗🏼 person climbing: medium-light skin tone -1F9D7 1F3FD ; fully-qualified # 🧗🏽 person climbing: medium skin tone -1F9D7 1F3FE ; fully-qualified # 🧗🏾 person climbing: medium-dark skin tone -1F9D7 1F3FF ; fully-qualified # 🧗🏿 person climbing: dark skin tone -1F9D7 200D 2640 FE0F ; fully-qualified # 🧗‍♀️ woman climbing -1F9D7 200D 2640 ; non-fully-qualified # 🧗‍♀ woman climbing -1F9D7 1F3FB 200D 2640 FE0F ; fully-qualified # 🧗🏻‍♀️ woman climbing: light skin tone -1F9D7 1F3FB 200D 2640 ; non-fully-qualified # 🧗🏻‍♀ woman climbing: light skin tone -1F9D7 1F3FC 200D 2640 FE0F ; fully-qualified # 🧗🏼‍♀️ woman climbing: medium-light skin tone -1F9D7 1F3FC 200D 2640 ; non-fully-qualified # 🧗🏼‍♀ woman climbing: medium-light skin tone -1F9D7 1F3FD 200D 2640 FE0F ; fully-qualified # 🧗🏽‍♀️ woman climbing: medium skin tone -1F9D7 1F3FD 200D 2640 ; non-fully-qualified # 🧗🏽‍♀ woman climbing: medium skin tone -1F9D7 1F3FE 200D 2640 FE0F ; fully-qualified # 🧗🏾‍♀️ woman climbing: medium-dark skin tone -1F9D7 1F3FE 200D 2640 ; non-fully-qualified # 🧗🏾‍♀ woman climbing: medium-dark skin tone -1F9D7 1F3FF 200D 2640 FE0F ; fully-qualified # 🧗🏿‍♀️ woman climbing: dark skin tone -1F9D7 1F3FF 200D 2640 ; non-fully-qualified # 🧗🏿‍♀ woman climbing: dark skin tone -1F9D7 200D 2642 FE0F ; fully-qualified # 🧗‍♂️ man climbing -1F9D7 200D 2642 ; non-fully-qualified # 🧗‍♂ man climbing -1F9D7 1F3FB 200D 2642 FE0F ; fully-qualified # 🧗🏻‍♂️ man climbing: light skin tone -1F9D7 1F3FB 200D 2642 ; non-fully-qualified # 🧗🏻‍♂ man climbing: light skin tone -1F9D7 1F3FC 200D 2642 FE0F ; fully-qualified # 🧗🏼‍♂️ man climbing: medium-light skin tone -1F9D7 1F3FC 200D 2642 ; non-fully-qualified # 🧗🏼‍♂ man climbing: medium-light skin tone -1F9D7 1F3FD 200D 2642 FE0F ; fully-qualified # 🧗🏽‍♂️ man climbing: medium skin tone -1F9D7 1F3FD 200D 2642 ; non-fully-qualified # 🧗🏽‍♂ man climbing: medium skin tone -1F9D7 1F3FE 200D 2642 FE0F ; fully-qualified # 🧗🏾‍♂️ man climbing: medium-dark skin tone -1F9D7 1F3FE 200D 2642 ; non-fully-qualified # 🧗🏾‍♂ man climbing: medium-dark skin tone -1F9D7 1F3FF 200D 2642 FE0F ; fully-qualified # 🧗🏿‍♂️ man climbing: dark skin tone -1F9D7 1F3FF 200D 2642 ; non-fully-qualified # 🧗🏿‍♂ man climbing: dark skin tone -1F9D8 ; fully-qualified # 🧘 person in lotus position -1F9D8 1F3FB ; fully-qualified # 🧘🏻 person in lotus position: light skin tone -1F9D8 1F3FC ; fully-qualified # 🧘🏼 person in lotus position: medium-light skin tone -1F9D8 1F3FD ; fully-qualified # 🧘🏽 person in lotus position: medium skin tone -1F9D8 1F3FE ; fully-qualified # 🧘🏾 person in lotus position: medium-dark skin tone -1F9D8 1F3FF ; fully-qualified # 🧘🏿 person in lotus position: dark skin tone -1F9D8 200D 2640 FE0F ; fully-qualified # 🧘‍♀️ woman in lotus position -1F9D8 200D 2640 ; non-fully-qualified # 🧘‍♀ woman in lotus position -1F9D8 1F3FB 200D 2640 FE0F ; fully-qualified # 🧘🏻‍♀️ woman in lotus position: light skin tone -1F9D8 1F3FB 200D 2640 ; non-fully-qualified # 🧘🏻‍♀ woman in lotus position: light skin tone -1F9D8 1F3FC 200D 2640 FE0F ; fully-qualified # 🧘🏼‍♀️ woman in lotus position: medium-light skin tone -1F9D8 1F3FC 200D 2640 ; non-fully-qualified # 🧘🏼‍♀ woman in lotus position: medium-light skin tone -1F9D8 1F3FD 200D 2640 FE0F ; fully-qualified # 🧘🏽‍♀️ woman in lotus position: medium skin tone -1F9D8 1F3FD 200D 2640 ; non-fully-qualified # 🧘🏽‍♀ woman in lotus position: medium skin tone -1F9D8 1F3FE 200D 2640 FE0F ; fully-qualified # 🧘🏾‍♀️ woman in lotus position: medium-dark skin tone -1F9D8 1F3FE 200D 2640 ; non-fully-qualified # 🧘🏾‍♀ woman in lotus position: medium-dark skin tone -1F9D8 1F3FF 200D 2640 FE0F ; fully-qualified # 🧘🏿‍♀️ woman in lotus position: dark skin tone -1F9D8 1F3FF 200D 2640 ; non-fully-qualified # 🧘🏿‍♀ woman in lotus position: dark skin tone -1F9D8 200D 2642 FE0F ; fully-qualified # 🧘‍♂️ man in lotus position -1F9D8 200D 2642 ; non-fully-qualified # 🧘‍♂ man in lotus position -1F9D8 1F3FB 200D 2642 FE0F ; fully-qualified # 🧘🏻‍♂️ man in lotus position: light skin tone -1F9D8 1F3FB 200D 2642 ; non-fully-qualified # 🧘🏻‍♂ man in lotus position: light skin tone -1F9D8 1F3FC 200D 2642 FE0F ; fully-qualified # 🧘🏼‍♂️ man in lotus position: medium-light skin tone -1F9D8 1F3FC 200D 2642 ; non-fully-qualified # 🧘🏼‍♂ man in lotus position: medium-light skin tone -1F9D8 1F3FD 200D 2642 FE0F ; fully-qualified # 🧘🏽‍♂️ man in lotus position: medium skin tone -1F9D8 1F3FD 200D 2642 ; non-fully-qualified # 🧘🏽‍♂ man in lotus position: medium skin tone -1F9D8 1F3FE 200D 2642 FE0F ; fully-qualified # 🧘🏾‍♂️ man in lotus position: medium-dark skin tone -1F9D8 1F3FE 200D 2642 ; non-fully-qualified # 🧘🏾‍♂ man in lotus position: medium-dark skin tone -1F9D8 1F3FF 200D 2642 FE0F ; fully-qualified # 🧘🏿‍♂️ man in lotus position: dark skin tone -1F9D8 1F3FF 200D 2642 ; non-fully-qualified # 🧘🏿‍♂ man in lotus position: dark skin tone -1F6C0 ; fully-qualified # 🛀 person taking bath -1F6C0 1F3FB ; fully-qualified # 🛀🏻 person taking bath: light skin tone -1F6C0 1F3FC ; fully-qualified # 🛀🏼 person taking bath: medium-light skin tone -1F6C0 1F3FD ; fully-qualified # 🛀🏽 person taking bath: medium skin tone -1F6C0 1F3FE ; fully-qualified # 🛀🏾 person taking bath: medium-dark skin tone -1F6C0 1F3FF ; fully-qualified # 🛀🏿 person taking bath: dark skin tone -1F6CC ; fully-qualified # 🛌 person in bed -1F6CC 1F3FB ; fully-qualified # 🛌🏻 person in bed: light skin tone -1F6CC 1F3FC ; fully-qualified # 🛌🏼 person in bed: medium-light skin tone -1F6CC 1F3FD ; fully-qualified # 🛌🏽 person in bed: medium skin tone -1F6CC 1F3FE ; fully-qualified # 🛌🏾 person in bed: medium-dark skin tone -1F6CC 1F3FF ; fully-qualified # 🛌🏿 person in bed: dark skin tone -1F574 FE0F ; fully-qualified # 🕴️ man in suit levitating -1F574 ; non-fully-qualified # 🕴 man in suit levitating -1F574 1F3FB ; fully-qualified # 🕴🏻 man in suit levitating: light skin tone -1F574 1F3FC ; fully-qualified # 🕴🏼 man in suit levitating: medium-light skin tone -1F574 1F3FD ; fully-qualified # 🕴🏽 man in suit levitating: medium skin tone -1F574 1F3FE ; fully-qualified # 🕴🏾 man in suit levitating: medium-dark skin tone -1F574 1F3FF ; fully-qualified # 🕴🏿 man in suit levitating: dark skin tone -1F5E3 FE0F ; fully-qualified # 🗣️ speaking head -1F5E3 ; non-fully-qualified # 🗣 speaking head -1F464 ; fully-qualified # 👤 bust in silhouette -1F465 ; fully-qualified # 👥 busts in silhouette - -# subgroup: person-sport -1F93A ; fully-qualified # 🤺 person fencing -1F3C7 ; fully-qualified # 🏇 horse racing -1F3C7 1F3FB ; fully-qualified # 🏇🏻 horse racing: light skin tone -1F3C7 1F3FC ; fully-qualified # 🏇🏼 horse racing: medium-light skin tone -1F3C7 1F3FD ; fully-qualified # 🏇🏽 horse racing: medium skin tone -1F3C7 1F3FE ; fully-qualified # 🏇🏾 horse racing: medium-dark skin tone -1F3C7 1F3FF ; fully-qualified # 🏇🏿 horse racing: dark skin tone -26F7 FE0F ; fully-qualified # ⛷️ skier -26F7 ; non-fully-qualified # ⛷ skier -1F3C2 ; fully-qualified # 🏂 snowboarder -1F3C2 1F3FB ; fully-qualified # 🏂🏻 snowboarder: light skin tone -1F3C2 1F3FC ; fully-qualified # 🏂🏼 snowboarder: medium-light skin tone -1F3C2 1F3FD ; fully-qualified # 🏂🏽 snowboarder: medium skin tone -1F3C2 1F3FE ; fully-qualified # 🏂🏾 snowboarder: medium-dark skin tone -1F3C2 1F3FF ; fully-qualified # 🏂🏿 snowboarder: dark skin tone -1F3CC FE0F ; fully-qualified # 🏌️ person golfing -1F3CC ; non-fully-qualified # 🏌 person golfing -1F3CC 1F3FB ; fully-qualified # 🏌🏻 person golfing: light skin tone -1F3CC 1F3FC ; fully-qualified # 🏌🏼 person golfing: medium-light skin tone -1F3CC 1F3FD ; fully-qualified # 🏌🏽 person golfing: medium skin tone -1F3CC 1F3FE ; fully-qualified # 🏌🏾 person golfing: medium-dark skin tone -1F3CC 1F3FF ; fully-qualified # 🏌🏿 person golfing: dark skin tone -1F3CC FE0F 200D 2642 FE0F ; fully-qualified # 🏌️‍♂️ man golfing -1F3CC 200D 2642 FE0F ; non-fully-qualified # 🏌‍♂️ man golfing -1F3CC FE0F 200D 2642 ; non-fully-qualified # 🏌️‍♂ man golfing -1F3CC 200D 2642 ; non-fully-qualified # 🏌‍♂ man golfing -1F3CC 1F3FB 200D 2642 FE0F ; fully-qualified # 🏌🏻‍♂️ man golfing: light skin tone -1F3CC 1F3FB 200D 2642 ; non-fully-qualified # 🏌🏻‍♂ man golfing: light skin tone -1F3CC 1F3FC 200D 2642 FE0F ; fully-qualified # 🏌🏼‍♂️ man golfing: medium-light skin tone -1F3CC 1F3FC 200D 2642 ; non-fully-qualified # 🏌🏼‍♂ man golfing: medium-light skin tone -1F3CC 1F3FD 200D 2642 FE0F ; fully-qualified # 🏌🏽‍♂️ man golfing: medium skin tone -1F3CC 1F3FD 200D 2642 ; non-fully-qualified # 🏌🏽‍♂ man golfing: medium skin tone -1F3CC 1F3FE 200D 2642 FE0F ; fully-qualified # 🏌🏾‍♂️ man golfing: medium-dark skin tone -1F3CC 1F3FE 200D 2642 ; non-fully-qualified # 🏌🏾‍♂ man golfing: medium-dark skin tone -1F3CC 1F3FF 200D 2642 FE0F ; fully-qualified # 🏌🏿‍♂️ man golfing: dark skin tone -1F3CC 1F3FF 200D 2642 ; non-fully-qualified # 🏌🏿‍♂ man golfing: dark skin tone -1F3CC FE0F 200D 2640 FE0F ; fully-qualified # 🏌️‍♀️ woman golfing -1F3CC 200D 2640 FE0F ; non-fully-qualified # 🏌‍♀️ woman golfing -1F3CC FE0F 200D 2640 ; non-fully-qualified # 🏌️‍♀ woman golfing -1F3CC 200D 2640 ; non-fully-qualified # 🏌‍♀ woman golfing -1F3CC 1F3FB 200D 2640 FE0F ; fully-qualified # 🏌🏻‍♀️ woman golfing: light skin tone -1F3CC 1F3FB 200D 2640 ; non-fully-qualified # 🏌🏻‍♀ woman golfing: light skin tone -1F3CC 1F3FC 200D 2640 FE0F ; fully-qualified # 🏌🏼‍♀️ woman golfing: medium-light skin tone -1F3CC 1F3FC 200D 2640 ; non-fully-qualified # 🏌🏼‍♀ woman golfing: medium-light skin tone -1F3CC 1F3FD 200D 2640 FE0F ; fully-qualified # 🏌🏽‍♀️ woman golfing: medium skin tone -1F3CC 1F3FD 200D 2640 ; non-fully-qualified # 🏌🏽‍♀ woman golfing: medium skin tone -1F3CC 1F3FE 200D 2640 FE0F ; fully-qualified # 🏌🏾‍♀️ woman golfing: medium-dark skin tone -1F3CC 1F3FE 200D 2640 ; non-fully-qualified # 🏌🏾‍♀ woman golfing: medium-dark skin tone -1F3CC 1F3FF 200D 2640 FE0F ; fully-qualified # 🏌🏿‍♀️ woman golfing: dark skin tone -1F3CC 1F3FF 200D 2640 ; non-fully-qualified # 🏌🏿‍♀ woman golfing: dark skin tone -1F3C4 ; fully-qualified # 🏄 person surfing -1F3C4 1F3FB ; fully-qualified # 🏄🏻 person surfing: light skin tone -1F3C4 1F3FC ; fully-qualified # 🏄🏼 person surfing: medium-light skin tone -1F3C4 1F3FD ; fully-qualified # 🏄🏽 person surfing: medium skin tone -1F3C4 1F3FE ; fully-qualified # 🏄🏾 person surfing: medium-dark skin tone -1F3C4 1F3FF ; fully-qualified # 🏄🏿 person surfing: dark skin tone -1F3C4 200D 2642 FE0F ; fully-qualified # 🏄‍♂️ man surfing -1F3C4 200D 2642 ; non-fully-qualified # 🏄‍♂ man surfing -1F3C4 1F3FB 200D 2642 FE0F ; fully-qualified # 🏄🏻‍♂️ man surfing: light skin tone -1F3C4 1F3FB 200D 2642 ; non-fully-qualified # 🏄🏻‍♂ man surfing: light skin tone -1F3C4 1F3FC 200D 2642 FE0F ; fully-qualified # 🏄🏼‍♂️ man surfing: medium-light skin tone -1F3C4 1F3FC 200D 2642 ; non-fully-qualified # 🏄🏼‍♂ man surfing: medium-light skin tone -1F3C4 1F3FD 200D 2642 FE0F ; fully-qualified # 🏄🏽‍♂️ man surfing: medium skin tone -1F3C4 1F3FD 200D 2642 ; non-fully-qualified # 🏄🏽‍♂ man surfing: medium skin tone -1F3C4 1F3FE 200D 2642 FE0F ; fully-qualified # 🏄🏾‍♂️ man surfing: medium-dark skin tone -1F3C4 1F3FE 200D 2642 ; non-fully-qualified # 🏄🏾‍♂ man surfing: medium-dark skin tone -1F3C4 1F3FF 200D 2642 FE0F ; fully-qualified # 🏄🏿‍♂️ man surfing: dark skin tone -1F3C4 1F3FF 200D 2642 ; non-fully-qualified # 🏄🏿‍♂ man surfing: dark skin tone -1F3C4 200D 2640 FE0F ; fully-qualified # 🏄‍♀️ woman surfing -1F3C4 200D 2640 ; non-fully-qualified # 🏄‍♀ woman surfing -1F3C4 1F3FB 200D 2640 FE0F ; fully-qualified # 🏄🏻‍♀️ woman surfing: light skin tone -1F3C4 1F3FB 200D 2640 ; non-fully-qualified # 🏄🏻‍♀ woman surfing: light skin tone -1F3C4 1F3FC 200D 2640 FE0F ; fully-qualified # 🏄🏼‍♀️ woman surfing: medium-light skin tone -1F3C4 1F3FC 200D 2640 ; non-fully-qualified # 🏄🏼‍♀ woman surfing: medium-light skin tone -1F3C4 1F3FD 200D 2640 FE0F ; fully-qualified # 🏄🏽‍♀️ woman surfing: medium skin tone -1F3C4 1F3FD 200D 2640 ; non-fully-qualified # 🏄🏽‍♀ woman surfing: medium skin tone -1F3C4 1F3FE 200D 2640 FE0F ; fully-qualified # 🏄🏾‍♀️ woman surfing: medium-dark skin tone -1F3C4 1F3FE 200D 2640 ; non-fully-qualified # 🏄🏾‍♀ woman surfing: medium-dark skin tone -1F3C4 1F3FF 200D 2640 FE0F ; fully-qualified # 🏄🏿‍♀️ woman surfing: dark skin tone -1F3C4 1F3FF 200D 2640 ; non-fully-qualified # 🏄🏿‍♀ woman surfing: dark skin tone -1F6A3 ; fully-qualified # 🚣 person rowing boat -1F6A3 1F3FB ; fully-qualified # 🚣🏻 person rowing boat: light skin tone -1F6A3 1F3FC ; fully-qualified # 🚣🏼 person rowing boat: medium-light skin tone -1F6A3 1F3FD ; fully-qualified # 🚣🏽 person rowing boat: medium skin tone -1F6A3 1F3FE ; fully-qualified # 🚣🏾 person rowing boat: medium-dark skin tone -1F6A3 1F3FF ; fully-qualified # 🚣🏿 person rowing boat: dark skin tone -1F6A3 200D 2642 FE0F ; fully-qualified # 🚣‍♂️ man rowing boat -1F6A3 200D 2642 ; non-fully-qualified # 🚣‍♂ man rowing boat -1F6A3 1F3FB 200D 2642 FE0F ; fully-qualified # 🚣🏻‍♂️ man rowing boat: light skin tone -1F6A3 1F3FB 200D 2642 ; non-fully-qualified # 🚣🏻‍♂ man rowing boat: light skin tone -1F6A3 1F3FC 200D 2642 FE0F ; fully-qualified # 🚣🏼‍♂️ man rowing boat: medium-light skin tone -1F6A3 1F3FC 200D 2642 ; non-fully-qualified # 🚣🏼‍♂ man rowing boat: medium-light skin tone -1F6A3 1F3FD 200D 2642 FE0F ; fully-qualified # 🚣🏽‍♂️ man rowing boat: medium skin tone -1F6A3 1F3FD 200D 2642 ; non-fully-qualified # 🚣🏽‍♂ man rowing boat: medium skin tone -1F6A3 1F3FE 200D 2642 FE0F ; fully-qualified # 🚣🏾‍♂️ man rowing boat: medium-dark skin tone -1F6A3 1F3FE 200D 2642 ; non-fully-qualified # 🚣🏾‍♂ man rowing boat: medium-dark skin tone -1F6A3 1F3FF 200D 2642 FE0F ; fully-qualified # 🚣🏿‍♂️ man rowing boat: dark skin tone -1F6A3 1F3FF 200D 2642 ; non-fully-qualified # 🚣🏿‍♂ man rowing boat: dark skin tone -1F6A3 200D 2640 FE0F ; fully-qualified # 🚣‍♀️ woman rowing boat -1F6A3 200D 2640 ; non-fully-qualified # 🚣‍♀ woman rowing boat -1F6A3 1F3FB 200D 2640 FE0F ; fully-qualified # 🚣🏻‍♀️ woman rowing boat: light skin tone -1F6A3 1F3FB 200D 2640 ; non-fully-qualified # 🚣🏻‍♀ woman rowing boat: light skin tone -1F6A3 1F3FC 200D 2640 FE0F ; fully-qualified # 🚣🏼‍♀️ woman rowing boat: medium-light skin tone -1F6A3 1F3FC 200D 2640 ; non-fully-qualified # 🚣🏼‍♀ woman rowing boat: medium-light skin tone -1F6A3 1F3FD 200D 2640 FE0F ; fully-qualified # 🚣🏽‍♀️ woman rowing boat: medium skin tone -1F6A3 1F3FD 200D 2640 ; non-fully-qualified # 🚣🏽‍♀ woman rowing boat: medium skin tone -1F6A3 1F3FE 200D 2640 FE0F ; fully-qualified # 🚣🏾‍♀️ woman rowing boat: medium-dark skin tone -1F6A3 1F3FE 200D 2640 ; non-fully-qualified # 🚣🏾‍♀ woman rowing boat: medium-dark skin tone -1F6A3 1F3FF 200D 2640 FE0F ; fully-qualified # 🚣🏿‍♀️ woman rowing boat: dark skin tone -1F6A3 1F3FF 200D 2640 ; non-fully-qualified # 🚣🏿‍♀ woman rowing boat: dark skin tone -1F3CA ; fully-qualified # 🏊 person swimming -1F3CA 1F3FB ; fully-qualified # 🏊🏻 person swimming: light skin tone -1F3CA 1F3FC ; fully-qualified # 🏊🏼 person swimming: medium-light skin tone -1F3CA 1F3FD ; fully-qualified # 🏊🏽 person swimming: medium skin tone -1F3CA 1F3FE ; fully-qualified # 🏊🏾 person swimming: medium-dark skin tone -1F3CA 1F3FF ; fully-qualified # 🏊🏿 person swimming: dark skin tone -1F3CA 200D 2642 FE0F ; fully-qualified # 🏊‍♂️ man swimming -1F3CA 200D 2642 ; non-fully-qualified # 🏊‍♂ man swimming -1F3CA 1F3FB 200D 2642 FE0F ; fully-qualified # 🏊🏻‍♂️ man swimming: light skin tone -1F3CA 1F3FB 200D 2642 ; non-fully-qualified # 🏊🏻‍♂ man swimming: light skin tone -1F3CA 1F3FC 200D 2642 FE0F ; fully-qualified # 🏊🏼‍♂️ man swimming: medium-light skin tone -1F3CA 1F3FC 200D 2642 ; non-fully-qualified # 🏊🏼‍♂ man swimming: medium-light skin tone -1F3CA 1F3FD 200D 2642 FE0F ; fully-qualified # 🏊🏽‍♂️ man swimming: medium skin tone -1F3CA 1F3FD 200D 2642 ; non-fully-qualified # 🏊🏽‍♂ man swimming: medium skin tone -1F3CA 1F3FE 200D 2642 FE0F ; fully-qualified # 🏊🏾‍♂️ man swimming: medium-dark skin tone -1F3CA 1F3FE 200D 2642 ; non-fully-qualified # 🏊🏾‍♂ man swimming: medium-dark skin tone -1F3CA 1F3FF 200D 2642 FE0F ; fully-qualified # 🏊🏿‍♂️ man swimming: dark skin tone -1F3CA 1F3FF 200D 2642 ; non-fully-qualified # 🏊🏿‍♂ man swimming: dark skin tone -1F3CA 200D 2640 FE0F ; fully-qualified # 🏊‍♀️ woman swimming -1F3CA 200D 2640 ; non-fully-qualified # 🏊‍♀ woman swimming -1F3CA 1F3FB 200D 2640 FE0F ; fully-qualified # 🏊🏻‍♀️ woman swimming: light skin tone -1F3CA 1F3FB 200D 2640 ; non-fully-qualified # 🏊🏻‍♀ woman swimming: light skin tone -1F3CA 1F3FC 200D 2640 FE0F ; fully-qualified # 🏊🏼‍♀️ woman swimming: medium-light skin tone -1F3CA 1F3FC 200D 2640 ; non-fully-qualified # 🏊🏼‍♀ woman swimming: medium-light skin tone -1F3CA 1F3FD 200D 2640 FE0F ; fully-qualified # 🏊🏽‍♀️ woman swimming: medium skin tone -1F3CA 1F3FD 200D 2640 ; non-fully-qualified # 🏊🏽‍♀ woman swimming: medium skin tone -1F3CA 1F3FE 200D 2640 FE0F ; fully-qualified # 🏊🏾‍♀️ woman swimming: medium-dark skin tone -1F3CA 1F3FE 200D 2640 ; non-fully-qualified # 🏊🏾‍♀ woman swimming: medium-dark skin tone -1F3CA 1F3FF 200D 2640 FE0F ; fully-qualified # 🏊🏿‍♀️ woman swimming: dark skin tone -1F3CA 1F3FF 200D 2640 ; non-fully-qualified # 🏊🏿‍♀ woman swimming: dark skin tone -26F9 FE0F ; fully-qualified # ⛹️ person bouncing ball -26F9 ; non-fully-qualified # ⛹ person bouncing ball -26F9 1F3FB ; fully-qualified # ⛹🏻 person bouncing ball: light skin tone -26F9 1F3FC ; fully-qualified # ⛹🏼 person bouncing ball: medium-light skin tone -26F9 1F3FD ; fully-qualified # ⛹🏽 person bouncing ball: medium skin tone -26F9 1F3FE ; fully-qualified # ⛹🏾 person bouncing ball: medium-dark skin tone -26F9 1F3FF ; fully-qualified # ⛹🏿 person bouncing ball: dark skin tone -26F9 FE0F 200D 2642 FE0F ; fully-qualified # ⛹️‍♂️ man bouncing ball -26F9 200D 2642 FE0F ; non-fully-qualified # ⛹‍♂️ man bouncing ball -26F9 FE0F 200D 2642 ; non-fully-qualified # ⛹️‍♂ man bouncing ball -26F9 200D 2642 ; non-fully-qualified # ⛹‍♂ man bouncing ball -26F9 1F3FB 200D 2642 FE0F ; fully-qualified # ⛹🏻‍♂️ man bouncing ball: light skin tone -26F9 1F3FB 200D 2642 ; non-fully-qualified # ⛹🏻‍♂ man bouncing ball: light skin tone -26F9 1F3FC 200D 2642 FE0F ; fully-qualified # ⛹🏼‍♂️ man bouncing ball: medium-light skin tone -26F9 1F3FC 200D 2642 ; non-fully-qualified # ⛹🏼‍♂ man bouncing ball: medium-light skin tone -26F9 1F3FD 200D 2642 FE0F ; fully-qualified # ⛹🏽‍♂️ man bouncing ball: medium skin tone -26F9 1F3FD 200D 2642 ; non-fully-qualified # ⛹🏽‍♂ man bouncing ball: medium skin tone -26F9 1F3FE 200D 2642 FE0F ; fully-qualified # ⛹🏾‍♂️ man bouncing ball: medium-dark skin tone -26F9 1F3FE 200D 2642 ; non-fully-qualified # ⛹🏾‍♂ man bouncing ball: medium-dark skin tone -26F9 1F3FF 200D 2642 FE0F ; fully-qualified # ⛹🏿‍♂️ man bouncing ball: dark skin tone -26F9 1F3FF 200D 2642 ; non-fully-qualified # ⛹🏿‍♂ man bouncing ball: dark skin tone -26F9 FE0F 200D 2640 FE0F ; fully-qualified # ⛹️‍♀️ woman bouncing ball -26F9 200D 2640 FE0F ; non-fully-qualified # ⛹‍♀️ woman bouncing ball -26F9 FE0F 200D 2640 ; non-fully-qualified # ⛹️‍♀ woman bouncing ball -26F9 200D 2640 ; non-fully-qualified # ⛹‍♀ woman bouncing ball -26F9 1F3FB 200D 2640 FE0F ; fully-qualified # ⛹🏻‍♀️ woman bouncing ball: light skin tone -26F9 1F3FB 200D 2640 ; non-fully-qualified # ⛹🏻‍♀ woman bouncing ball: light skin tone -26F9 1F3FC 200D 2640 FE0F ; fully-qualified # ⛹🏼‍♀️ woman bouncing ball: medium-light skin tone -26F9 1F3FC 200D 2640 ; non-fully-qualified # ⛹🏼‍♀ woman bouncing ball: medium-light skin tone -26F9 1F3FD 200D 2640 FE0F ; fully-qualified # ⛹🏽‍♀️ woman bouncing ball: medium skin tone -26F9 1F3FD 200D 2640 ; non-fully-qualified # ⛹🏽‍♀ woman bouncing ball: medium skin tone -26F9 1F3FE 200D 2640 FE0F ; fully-qualified # ⛹🏾‍♀️ woman bouncing ball: medium-dark skin tone -26F9 1F3FE 200D 2640 ; non-fully-qualified # ⛹🏾‍♀ woman bouncing ball: medium-dark skin tone -26F9 1F3FF 200D 2640 FE0F ; fully-qualified # ⛹🏿‍♀️ woman bouncing ball: dark skin tone -26F9 1F3FF 200D 2640 ; non-fully-qualified # ⛹🏿‍♀ woman bouncing ball: dark skin tone -1F3CB FE0F ; fully-qualified # 🏋️ person lifting weights -1F3CB ; non-fully-qualified # 🏋 person lifting weights -1F3CB 1F3FB ; fully-qualified # 🏋🏻 person lifting weights: light skin tone -1F3CB 1F3FC ; fully-qualified # 🏋🏼 person lifting weights: medium-light skin tone -1F3CB 1F3FD ; fully-qualified # 🏋🏽 person lifting weights: medium skin tone -1F3CB 1F3FE ; fully-qualified # 🏋🏾 person lifting weights: medium-dark skin tone -1F3CB 1F3FF ; fully-qualified # 🏋🏿 person lifting weights: dark skin tone -1F3CB FE0F 200D 2642 FE0F ; fully-qualified # 🏋️‍♂️ man lifting weights -1F3CB 200D 2642 FE0F ; non-fully-qualified # 🏋‍♂️ man lifting weights -1F3CB FE0F 200D 2642 ; non-fully-qualified # 🏋️‍♂ man lifting weights -1F3CB 200D 2642 ; non-fully-qualified # 🏋‍♂ man lifting weights -1F3CB 1F3FB 200D 2642 FE0F ; fully-qualified # 🏋🏻‍♂️ man lifting weights: light skin tone -1F3CB 1F3FB 200D 2642 ; non-fully-qualified # 🏋🏻‍♂ man lifting weights: light skin tone -1F3CB 1F3FC 200D 2642 FE0F ; fully-qualified # 🏋🏼‍♂️ man lifting weights: medium-light skin tone -1F3CB 1F3FC 200D 2642 ; non-fully-qualified # 🏋🏼‍♂ man lifting weights: medium-light skin tone -1F3CB 1F3FD 200D 2642 FE0F ; fully-qualified # 🏋🏽‍♂️ man lifting weights: medium skin tone -1F3CB 1F3FD 200D 2642 ; non-fully-qualified # 🏋🏽‍♂ man lifting weights: medium skin tone -1F3CB 1F3FE 200D 2642 FE0F ; fully-qualified # 🏋🏾‍♂️ man lifting weights: medium-dark skin tone -1F3CB 1F3FE 200D 2642 ; non-fully-qualified # 🏋🏾‍♂ man lifting weights: medium-dark skin tone -1F3CB 1F3FF 200D 2642 FE0F ; fully-qualified # 🏋🏿‍♂️ man lifting weights: dark skin tone -1F3CB 1F3FF 200D 2642 ; non-fully-qualified # 🏋🏿‍♂ man lifting weights: dark skin tone -1F3CB FE0F 200D 2640 FE0F ; fully-qualified # 🏋️‍♀️ woman lifting weights -1F3CB 200D 2640 FE0F ; non-fully-qualified # 🏋‍♀️ woman lifting weights -1F3CB FE0F 200D 2640 ; non-fully-qualified # 🏋️‍♀ woman lifting weights -1F3CB 200D 2640 ; non-fully-qualified # 🏋‍♀ woman lifting weights -1F3CB 1F3FB 200D 2640 FE0F ; fully-qualified # 🏋🏻‍♀️ woman lifting weights: light skin tone -1F3CB 1F3FB 200D 2640 ; non-fully-qualified # 🏋🏻‍♀ woman lifting weights: light skin tone -1F3CB 1F3FC 200D 2640 FE0F ; fully-qualified # 🏋🏼‍♀️ woman lifting weights: medium-light skin tone -1F3CB 1F3FC 200D 2640 ; non-fully-qualified # 🏋🏼‍♀ woman lifting weights: medium-light skin tone -1F3CB 1F3FD 200D 2640 FE0F ; fully-qualified # 🏋🏽‍♀️ woman lifting weights: medium skin tone -1F3CB 1F3FD 200D 2640 ; non-fully-qualified # 🏋🏽‍♀ woman lifting weights: medium skin tone -1F3CB 1F3FE 200D 2640 FE0F ; fully-qualified # 🏋🏾‍♀️ woman lifting weights: medium-dark skin tone -1F3CB 1F3FE 200D 2640 ; non-fully-qualified # 🏋🏾‍♀ woman lifting weights: medium-dark skin tone -1F3CB 1F3FF 200D 2640 FE0F ; fully-qualified # 🏋🏿‍♀️ woman lifting weights: dark skin tone -1F3CB 1F3FF 200D 2640 ; non-fully-qualified # 🏋🏿‍♀ woman lifting weights: dark skin tone -1F6B4 ; fully-qualified # 🚴 person biking -1F6B4 1F3FB ; fully-qualified # 🚴🏻 person biking: light skin tone -1F6B4 1F3FC ; fully-qualified # 🚴🏼 person biking: medium-light skin tone -1F6B4 1F3FD ; fully-qualified # 🚴🏽 person biking: medium skin tone -1F6B4 1F3FE ; fully-qualified # 🚴🏾 person biking: medium-dark skin tone -1F6B4 1F3FF ; fully-qualified # 🚴🏿 person biking: dark skin tone -1F6B4 200D 2642 FE0F ; fully-qualified # 🚴‍♂️ man biking -1F6B4 200D 2642 ; non-fully-qualified # 🚴‍♂ man biking -1F6B4 1F3FB 200D 2642 FE0F ; fully-qualified # 🚴🏻‍♂️ man biking: light skin tone -1F6B4 1F3FB 200D 2642 ; non-fully-qualified # 🚴🏻‍♂ man biking: light skin tone -1F6B4 1F3FC 200D 2642 FE0F ; fully-qualified # 🚴🏼‍♂️ man biking: medium-light skin tone -1F6B4 1F3FC 200D 2642 ; non-fully-qualified # 🚴🏼‍♂ man biking: medium-light skin tone -1F6B4 1F3FD 200D 2642 FE0F ; fully-qualified # 🚴🏽‍♂️ man biking: medium skin tone -1F6B4 1F3FD 200D 2642 ; non-fully-qualified # 🚴🏽‍♂ man biking: medium skin tone -1F6B4 1F3FE 200D 2642 FE0F ; fully-qualified # 🚴🏾‍♂️ man biking: medium-dark skin tone -1F6B4 1F3FE 200D 2642 ; non-fully-qualified # 🚴🏾‍♂ man biking: medium-dark skin tone -1F6B4 1F3FF 200D 2642 FE0F ; fully-qualified # 🚴🏿‍♂️ man biking: dark skin tone -1F6B4 1F3FF 200D 2642 ; non-fully-qualified # 🚴🏿‍♂ man biking: dark skin tone -1F6B4 200D 2640 FE0F ; fully-qualified # 🚴‍♀️ woman biking -1F6B4 200D 2640 ; non-fully-qualified # 🚴‍♀ woman biking -1F6B4 1F3FB 200D 2640 FE0F ; fully-qualified # 🚴🏻‍♀️ woman biking: light skin tone -1F6B4 1F3FB 200D 2640 ; non-fully-qualified # 🚴🏻‍♀ woman biking: light skin tone -1F6B4 1F3FC 200D 2640 FE0F ; fully-qualified # 🚴🏼‍♀️ woman biking: medium-light skin tone -1F6B4 1F3FC 200D 2640 ; non-fully-qualified # 🚴🏼‍♀ woman biking: medium-light skin tone -1F6B4 1F3FD 200D 2640 FE0F ; fully-qualified # 🚴🏽‍♀️ woman biking: medium skin tone -1F6B4 1F3FD 200D 2640 ; non-fully-qualified # 🚴🏽‍♀ woman biking: medium skin tone -1F6B4 1F3FE 200D 2640 FE0F ; fully-qualified # 🚴🏾‍♀️ woman biking: medium-dark skin tone -1F6B4 1F3FE 200D 2640 ; non-fully-qualified # 🚴🏾‍♀ woman biking: medium-dark skin tone -1F6B4 1F3FF 200D 2640 FE0F ; fully-qualified # 🚴🏿‍♀️ woman biking: dark skin tone -1F6B4 1F3FF 200D 2640 ; non-fully-qualified # 🚴🏿‍♀ woman biking: dark skin tone -1F6B5 ; fully-qualified # 🚵 person mountain biking -1F6B5 1F3FB ; fully-qualified # 🚵🏻 person mountain biking: light skin tone -1F6B5 1F3FC ; fully-qualified # 🚵🏼 person mountain biking: medium-light skin tone -1F6B5 1F3FD ; fully-qualified # 🚵🏽 person mountain biking: medium skin tone -1F6B5 1F3FE ; fully-qualified # 🚵🏾 person mountain biking: medium-dark skin tone -1F6B5 1F3FF ; fully-qualified # 🚵🏿 person mountain biking: dark skin tone -1F6B5 200D 2642 FE0F ; fully-qualified # 🚵‍♂️ man mountain biking -1F6B5 200D 2642 ; non-fully-qualified # 🚵‍♂ man mountain biking -1F6B5 1F3FB 200D 2642 FE0F ; fully-qualified # 🚵🏻‍♂️ man mountain biking: light skin tone -1F6B5 1F3FB 200D 2642 ; non-fully-qualified # 🚵🏻‍♂ man mountain biking: light skin tone -1F6B5 1F3FC 200D 2642 FE0F ; fully-qualified # 🚵🏼‍♂️ man mountain biking: medium-light skin tone -1F6B5 1F3FC 200D 2642 ; non-fully-qualified # 🚵🏼‍♂ man mountain biking: medium-light skin tone -1F6B5 1F3FD 200D 2642 FE0F ; fully-qualified # 🚵🏽‍♂️ man mountain biking: medium skin tone -1F6B5 1F3FD 200D 2642 ; non-fully-qualified # 🚵🏽‍♂ man mountain biking: medium skin tone -1F6B5 1F3FE 200D 2642 FE0F ; fully-qualified # 🚵🏾‍♂️ man mountain biking: medium-dark skin tone -1F6B5 1F3FE 200D 2642 ; non-fully-qualified # 🚵🏾‍♂ man mountain biking: medium-dark skin tone -1F6B5 1F3FF 200D 2642 FE0F ; fully-qualified # 🚵🏿‍♂️ man mountain biking: dark skin tone -1F6B5 1F3FF 200D 2642 ; non-fully-qualified # 🚵🏿‍♂ man mountain biking: dark skin tone -1F6B5 200D 2640 FE0F ; fully-qualified # 🚵‍♀️ woman mountain biking -1F6B5 200D 2640 ; non-fully-qualified # 🚵‍♀ woman mountain biking -1F6B5 1F3FB 200D 2640 FE0F ; fully-qualified # 🚵🏻‍♀️ woman mountain biking: light skin tone -1F6B5 1F3FB 200D 2640 ; non-fully-qualified # 🚵🏻‍♀ woman mountain biking: light skin tone -1F6B5 1F3FC 200D 2640 FE0F ; fully-qualified # 🚵🏼‍♀️ woman mountain biking: medium-light skin tone -1F6B5 1F3FC 200D 2640 ; non-fully-qualified # 🚵🏼‍♀ woman mountain biking: medium-light skin tone -1F6B5 1F3FD 200D 2640 FE0F ; fully-qualified # 🚵🏽‍♀️ woman mountain biking: medium skin tone -1F6B5 1F3FD 200D 2640 ; non-fully-qualified # 🚵🏽‍♀ woman mountain biking: medium skin tone -1F6B5 1F3FE 200D 2640 FE0F ; fully-qualified # 🚵🏾‍♀️ woman mountain biking: medium-dark skin tone -1F6B5 1F3FE 200D 2640 ; non-fully-qualified # 🚵🏾‍♀ woman mountain biking: medium-dark skin tone -1F6B5 1F3FF 200D 2640 FE0F ; fully-qualified # 🚵🏿‍♀️ woman mountain biking: dark skin tone -1F6B5 1F3FF 200D 2640 ; non-fully-qualified # 🚵🏿‍♀ woman mountain biking: dark skin tone -1F3CE FE0F ; fully-qualified # 🏎️ racing car -1F3CE ; non-fully-qualified # 🏎 racing car -1F3CD FE0F ; fully-qualified # 🏍️ motorcycle -1F3CD ; non-fully-qualified # 🏍 motorcycle -1F938 ; fully-qualified # 🤸 person cartwheeling -1F938 1F3FB ; fully-qualified # 🤸🏻 person cartwheeling: light skin tone -1F938 1F3FC ; fully-qualified # 🤸🏼 person cartwheeling: medium-light skin tone -1F938 1F3FD ; fully-qualified # 🤸🏽 person cartwheeling: medium skin tone -1F938 1F3FE ; fully-qualified # 🤸🏾 person cartwheeling: medium-dark skin tone -1F938 1F3FF ; fully-qualified # 🤸🏿 person cartwheeling: dark skin tone -1F938 200D 2642 FE0F ; fully-qualified # 🤸‍♂️ man cartwheeling -1F938 200D 2642 ; non-fully-qualified # 🤸‍♂ man cartwheeling -1F938 1F3FB 200D 2642 FE0F ; fully-qualified # 🤸🏻‍♂️ man cartwheeling: light skin tone -1F938 1F3FB 200D 2642 ; non-fully-qualified # 🤸🏻‍♂ man cartwheeling: light skin tone -1F938 1F3FC 200D 2642 FE0F ; fully-qualified # 🤸🏼‍♂️ man cartwheeling: medium-light skin tone -1F938 1F3FC 200D 2642 ; non-fully-qualified # 🤸🏼‍♂ man cartwheeling: medium-light skin tone -1F938 1F3FD 200D 2642 FE0F ; fully-qualified # 🤸🏽‍♂️ man cartwheeling: medium skin tone -1F938 1F3FD 200D 2642 ; non-fully-qualified # 🤸🏽‍♂ man cartwheeling: medium skin tone -1F938 1F3FE 200D 2642 FE0F ; fully-qualified # 🤸🏾‍♂️ man cartwheeling: medium-dark skin tone -1F938 1F3FE 200D 2642 ; non-fully-qualified # 🤸🏾‍♂ man cartwheeling: medium-dark skin tone -1F938 1F3FF 200D 2642 FE0F ; fully-qualified # 🤸🏿‍♂️ man cartwheeling: dark skin tone -1F938 1F3FF 200D 2642 ; non-fully-qualified # 🤸🏿‍♂ man cartwheeling: dark skin tone -1F938 200D 2640 FE0F ; fully-qualified # 🤸‍♀️ woman cartwheeling -1F938 200D 2640 ; non-fully-qualified # 🤸‍♀ woman cartwheeling -1F938 1F3FB 200D 2640 FE0F ; fully-qualified # 🤸🏻‍♀️ woman cartwheeling: light skin tone -1F938 1F3FB 200D 2640 ; non-fully-qualified # 🤸🏻‍♀ woman cartwheeling: light skin tone -1F938 1F3FC 200D 2640 FE0F ; fully-qualified # 🤸🏼‍♀️ woman cartwheeling: medium-light skin tone -1F938 1F3FC 200D 2640 ; non-fully-qualified # 🤸🏼‍♀ woman cartwheeling: medium-light skin tone -1F938 1F3FD 200D 2640 FE0F ; fully-qualified # 🤸🏽‍♀️ woman cartwheeling: medium skin tone -1F938 1F3FD 200D 2640 ; non-fully-qualified # 🤸🏽‍♀ woman cartwheeling: medium skin tone -1F938 1F3FE 200D 2640 FE0F ; fully-qualified # 🤸🏾‍♀️ woman cartwheeling: medium-dark skin tone -1F938 1F3FE 200D 2640 ; non-fully-qualified # 🤸🏾‍♀ woman cartwheeling: medium-dark skin tone -1F938 1F3FF 200D 2640 FE0F ; fully-qualified # 🤸🏿‍♀️ woman cartwheeling: dark skin tone -1F938 1F3FF 200D 2640 ; non-fully-qualified # 🤸🏿‍♀ woman cartwheeling: dark skin tone -1F93C ; fully-qualified # 🤼 people wrestling -1F93C 200D 2642 FE0F ; fully-qualified # 🤼‍♂️ men wrestling -1F93C 200D 2642 ; non-fully-qualified # 🤼‍♂ men wrestling -1F93C 200D 2640 FE0F ; fully-qualified # 🤼‍♀️ women wrestling -1F93C 200D 2640 ; non-fully-qualified # 🤼‍♀ women wrestling -1F93D ; fully-qualified # 🤽 person playing water polo -1F93D 1F3FB ; fully-qualified # 🤽🏻 person playing water polo: light skin tone -1F93D 1F3FC ; fully-qualified # 🤽🏼 person playing water polo: medium-light skin tone -1F93D 1F3FD ; fully-qualified # 🤽🏽 person playing water polo: medium skin tone -1F93D 1F3FE ; fully-qualified # 🤽🏾 person playing water polo: medium-dark skin tone -1F93D 1F3FF ; fully-qualified # 🤽🏿 person playing water polo: dark skin tone -1F93D 200D 2642 FE0F ; fully-qualified # 🤽‍♂️ man playing water polo -1F93D 200D 2642 ; non-fully-qualified # 🤽‍♂ man playing water polo -1F93D 1F3FB 200D 2642 FE0F ; fully-qualified # 🤽🏻‍♂️ man playing water polo: light skin tone -1F93D 1F3FB 200D 2642 ; non-fully-qualified # 🤽🏻‍♂ man playing water polo: light skin tone -1F93D 1F3FC 200D 2642 FE0F ; fully-qualified # 🤽🏼‍♂️ man playing water polo: medium-light skin tone -1F93D 1F3FC 200D 2642 ; non-fully-qualified # 🤽🏼‍♂ man playing water polo: medium-light skin tone -1F93D 1F3FD 200D 2642 FE0F ; fully-qualified # 🤽🏽‍♂️ man playing water polo: medium skin tone -1F93D 1F3FD 200D 2642 ; non-fully-qualified # 🤽🏽‍♂ man playing water polo: medium skin tone -1F93D 1F3FE 200D 2642 FE0F ; fully-qualified # 🤽🏾‍♂️ man playing water polo: medium-dark skin tone -1F93D 1F3FE 200D 2642 ; non-fully-qualified # 🤽🏾‍♂ man playing water polo: medium-dark skin tone -1F93D 1F3FF 200D 2642 FE0F ; fully-qualified # 🤽🏿‍♂️ man playing water polo: dark skin tone -1F93D 1F3FF 200D 2642 ; non-fully-qualified # 🤽🏿‍♂ man playing water polo: dark skin tone -1F93D 200D 2640 FE0F ; fully-qualified # 🤽‍♀️ woman playing water polo -1F93D 200D 2640 ; non-fully-qualified # 🤽‍♀ woman playing water polo -1F93D 1F3FB 200D 2640 FE0F ; fully-qualified # 🤽🏻‍♀️ woman playing water polo: light skin tone -1F93D 1F3FB 200D 2640 ; non-fully-qualified # 🤽🏻‍♀ woman playing water polo: light skin tone -1F93D 1F3FC 200D 2640 FE0F ; fully-qualified # 🤽🏼‍♀️ woman playing water polo: medium-light skin tone -1F93D 1F3FC 200D 2640 ; non-fully-qualified # 🤽🏼‍♀ woman playing water polo: medium-light skin tone -1F93D 1F3FD 200D 2640 FE0F ; fully-qualified # 🤽🏽‍♀️ woman playing water polo: medium skin tone -1F93D 1F3FD 200D 2640 ; non-fully-qualified # 🤽🏽‍♀ woman playing water polo: medium skin tone -1F93D 1F3FE 200D 2640 FE0F ; fully-qualified # 🤽🏾‍♀️ woman playing water polo: medium-dark skin tone -1F93D 1F3FE 200D 2640 ; non-fully-qualified # 🤽🏾‍♀ woman playing water polo: medium-dark skin tone -1F93D 1F3FF 200D 2640 FE0F ; fully-qualified # 🤽🏿‍♀️ woman playing water polo: dark skin tone -1F93D 1F3FF 200D 2640 ; non-fully-qualified # 🤽🏿‍♀ woman playing water polo: dark skin tone -1F93E ; fully-qualified # 🤾 person playing handball -1F93E 1F3FB ; fully-qualified # 🤾🏻 person playing handball: light skin tone -1F93E 1F3FC ; fully-qualified # 🤾🏼 person playing handball: medium-light skin tone -1F93E 1F3FD ; fully-qualified # 🤾🏽 person playing handball: medium skin tone -1F93E 1F3FE ; fully-qualified # 🤾🏾 person playing handball: medium-dark skin tone -1F93E 1F3FF ; fully-qualified # 🤾🏿 person playing handball: dark skin tone -1F93E 200D 2642 FE0F ; fully-qualified # 🤾‍♂️ man playing handball -1F93E 200D 2642 ; non-fully-qualified # 🤾‍♂ man playing handball -1F93E 1F3FB 200D 2642 FE0F ; fully-qualified # 🤾🏻‍♂️ man playing handball: light skin tone -1F93E 1F3FB 200D 2642 ; non-fully-qualified # 🤾🏻‍♂ man playing handball: light skin tone -1F93E 1F3FC 200D 2642 FE0F ; fully-qualified # 🤾🏼‍♂️ man playing handball: medium-light skin tone -1F93E 1F3FC 200D 2642 ; non-fully-qualified # 🤾🏼‍♂ man playing handball: medium-light skin tone -1F93E 1F3FD 200D 2642 FE0F ; fully-qualified # 🤾🏽‍♂️ man playing handball: medium skin tone -1F93E 1F3FD 200D 2642 ; non-fully-qualified # 🤾🏽‍♂ man playing handball: medium skin tone -1F93E 1F3FE 200D 2642 FE0F ; fully-qualified # 🤾🏾‍♂️ man playing handball: medium-dark skin tone -1F93E 1F3FE 200D 2642 ; non-fully-qualified # 🤾🏾‍♂ man playing handball: medium-dark skin tone -1F93E 1F3FF 200D 2642 FE0F ; fully-qualified # 🤾🏿‍♂️ man playing handball: dark skin tone -1F93E 1F3FF 200D 2642 ; non-fully-qualified # 🤾🏿‍♂ man playing handball: dark skin tone -1F93E 200D 2640 FE0F ; fully-qualified # 🤾‍♀️ woman playing handball -1F93E 200D 2640 ; non-fully-qualified # 🤾‍♀ woman playing handball -1F93E 1F3FB 200D 2640 FE0F ; fully-qualified # 🤾🏻‍♀️ woman playing handball: light skin tone -1F93E 1F3FB 200D 2640 ; non-fully-qualified # 🤾🏻‍♀ woman playing handball: light skin tone -1F93E 1F3FC 200D 2640 FE0F ; fully-qualified # 🤾🏼‍♀️ woman playing handball: medium-light skin tone -1F93E 1F3FC 200D 2640 ; non-fully-qualified # 🤾🏼‍♀ woman playing handball: medium-light skin tone -1F93E 1F3FD 200D 2640 FE0F ; fully-qualified # 🤾🏽‍♀️ woman playing handball: medium skin tone -1F93E 1F3FD 200D 2640 ; non-fully-qualified # 🤾🏽‍♀ woman playing handball: medium skin tone -1F93E 1F3FE 200D 2640 FE0F ; fully-qualified # 🤾🏾‍♀️ woman playing handball: medium-dark skin tone -1F93E 1F3FE 200D 2640 ; non-fully-qualified # 🤾🏾‍♀ woman playing handball: medium-dark skin tone -1F93E 1F3FF 200D 2640 FE0F ; fully-qualified # 🤾🏿‍♀️ woman playing handball: dark skin tone -1F93E 1F3FF 200D 2640 ; non-fully-qualified # 🤾🏿‍♀ woman playing handball: dark skin tone -1F939 ; fully-qualified # 🤹 person juggling -1F939 1F3FB ; fully-qualified # 🤹🏻 person juggling: light skin tone -1F939 1F3FC ; fully-qualified # 🤹🏼 person juggling: medium-light skin tone -1F939 1F3FD ; fully-qualified # 🤹🏽 person juggling: medium skin tone -1F939 1F3FE ; fully-qualified # 🤹🏾 person juggling: medium-dark skin tone -1F939 1F3FF ; fully-qualified # 🤹🏿 person juggling: dark skin tone -1F939 200D 2642 FE0F ; fully-qualified # 🤹‍♂️ man juggling -1F939 200D 2642 ; non-fully-qualified # 🤹‍♂ man juggling -1F939 1F3FB 200D 2642 FE0F ; fully-qualified # 🤹🏻‍♂️ man juggling: light skin tone -1F939 1F3FB 200D 2642 ; non-fully-qualified # 🤹🏻‍♂ man juggling: light skin tone -1F939 1F3FC 200D 2642 FE0F ; fully-qualified # 🤹🏼‍♂️ man juggling: medium-light skin tone -1F939 1F3FC 200D 2642 ; non-fully-qualified # 🤹🏼‍♂ man juggling: medium-light skin tone -1F939 1F3FD 200D 2642 FE0F ; fully-qualified # 🤹🏽‍♂️ man juggling: medium skin tone -1F939 1F3FD 200D 2642 ; non-fully-qualified # 🤹🏽‍♂ man juggling: medium skin tone -1F939 1F3FE 200D 2642 FE0F ; fully-qualified # 🤹🏾‍♂️ man juggling: medium-dark skin tone -1F939 1F3FE 200D 2642 ; non-fully-qualified # 🤹🏾‍♂ man juggling: medium-dark skin tone -1F939 1F3FF 200D 2642 FE0F ; fully-qualified # 🤹🏿‍♂️ man juggling: dark skin tone -1F939 1F3FF 200D 2642 ; non-fully-qualified # 🤹🏿‍♂ man juggling: dark skin tone -1F939 200D 2640 FE0F ; fully-qualified # 🤹‍♀️ woman juggling -1F939 200D 2640 ; non-fully-qualified # 🤹‍♀ woman juggling -1F939 1F3FB 200D 2640 FE0F ; fully-qualified # 🤹🏻‍♀️ woman juggling: light skin tone -1F939 1F3FB 200D 2640 ; non-fully-qualified # 🤹🏻‍♀ woman juggling: light skin tone -1F939 1F3FC 200D 2640 FE0F ; fully-qualified # 🤹🏼‍♀️ woman juggling: medium-light skin tone -1F939 1F3FC 200D 2640 ; non-fully-qualified # 🤹🏼‍♀ woman juggling: medium-light skin tone -1F939 1F3FD 200D 2640 FE0F ; fully-qualified # 🤹🏽‍♀️ woman juggling: medium skin tone -1F939 1F3FD 200D 2640 ; non-fully-qualified # 🤹🏽‍♀ woman juggling: medium skin tone -1F939 1F3FE 200D 2640 FE0F ; fully-qualified # 🤹🏾‍♀️ woman juggling: medium-dark skin tone -1F939 1F3FE 200D 2640 ; non-fully-qualified # 🤹🏾‍♀ woman juggling: medium-dark skin tone -1F939 1F3FF 200D 2640 FE0F ; fully-qualified # 🤹🏿‍♀️ woman juggling: dark skin tone -1F939 1F3FF 200D 2640 ; non-fully-qualified # 🤹🏿‍♀ woman juggling: dark skin tone - -# subgroup: family -1F46B ; fully-qualified # 👫 man and woman holding hands -1F46C ; fully-qualified # 👬 two men holding hands -1F46D ; fully-qualified # 👭 two women holding hands -1F48F ; fully-qualified # 💏 kiss -1F469 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # 👩‍❤️‍💋‍👨 kiss: woman, man -1F469 200D 2764 200D 1F48B 200D 1F468 ; non-fully-qualified # 👩‍❤‍💋‍👨 kiss: woman, man -1F468 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # 👨‍❤️‍💋‍👨 kiss: man, man -1F468 200D 2764 200D 1F48B 200D 1F468 ; non-fully-qualified # 👨‍❤‍💋‍👨 kiss: man, man -1F469 200D 2764 FE0F 200D 1F48B 200D 1F469 ; fully-qualified # 👩‍❤️‍💋‍👩 kiss: woman, woman -1F469 200D 2764 200D 1F48B 200D 1F469 ; non-fully-qualified # 👩‍❤‍💋‍👩 kiss: woman, woman -1F491 ; fully-qualified # 💑 couple with heart -1F469 200D 2764 FE0F 200D 1F468 ; fully-qualified # 👩‍❤️‍👨 couple with heart: woman, man -1F469 200D 2764 200D 1F468 ; non-fully-qualified # 👩‍❤‍👨 couple with heart: woman, man -1F468 200D 2764 FE0F 200D 1F468 ; fully-qualified # 👨‍❤️‍👨 couple with heart: man, man -1F468 200D 2764 200D 1F468 ; non-fully-qualified # 👨‍❤‍👨 couple with heart: man, man -1F469 200D 2764 FE0F 200D 1F469 ; fully-qualified # 👩‍❤️‍👩 couple with heart: woman, woman -1F469 200D 2764 200D 1F469 ; non-fully-qualified # 👩‍❤‍👩 couple with heart: woman, woman -1F46A ; fully-qualified # 👪 family -1F468 200D 1F469 200D 1F466 ; fully-qualified # 👨‍👩‍👦 family: man, woman, boy -1F468 200D 1F469 200D 1F467 ; fully-qualified # 👨‍👩‍👧 family: man, woman, girl -1F468 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👩‍👧‍👦 family: man, woman, girl, boy -1F468 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👩‍👦‍👦 family: man, woman, boy, boy -1F468 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👩‍👧‍👧 family: man, woman, girl, girl -1F468 200D 1F468 200D 1F466 ; fully-qualified # 👨‍👨‍👦 family: man, man, boy -1F468 200D 1F468 200D 1F467 ; fully-qualified # 👨‍👨‍👧 family: man, man, girl -1F468 200D 1F468 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👨‍👧‍👦 family: man, man, girl, boy -1F468 200D 1F468 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👨‍👦‍👦 family: man, man, boy, boy -1F468 200D 1F468 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👨‍👧‍👧 family: man, man, girl, girl -1F469 200D 1F469 200D 1F466 ; fully-qualified # 👩‍👩‍👦 family: woman, woman, boy -1F469 200D 1F469 200D 1F467 ; fully-qualified # 👩‍👩‍👧 family: woman, woman, girl -1F469 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👩‍👩‍👧‍👦 family: woman, woman, girl, boy -1F469 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # 👩‍👩‍👦‍👦 family: woman, woman, boy, boy -1F469 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # 👩‍👩‍👧‍👧 family: woman, woman, girl, girl -1F468 200D 1F466 ; fully-qualified # 👨‍👦 family: man, boy -1F468 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👦‍👦 family: man, boy, boy -1F468 200D 1F467 ; fully-qualified # 👨‍👧 family: man, girl -1F468 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👧‍👦 family: man, girl, boy -1F468 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👧‍👧 family: man, girl, girl -1F469 200D 1F466 ; fully-qualified # 👩‍👦 family: woman, boy -1F469 200D 1F466 200D 1F466 ; fully-qualified # 👩‍👦‍👦 family: woman, boy, boy -1F469 200D 1F467 ; fully-qualified # 👩‍👧 family: woman, girl -1F469 200D 1F467 200D 1F466 ; fully-qualified # 👩‍👧‍👦 family: woman, girl, boy -1F469 200D 1F467 200D 1F467 ; fully-qualified # 👩‍👧‍👧 family: woman, girl, girl - -# subgroup: body -1F933 ; fully-qualified # 🤳 selfie -1F933 1F3FB ; fully-qualified # 🤳🏻 selfie: light skin tone -1F933 1F3FC ; fully-qualified # 🤳🏼 selfie: medium-light skin tone -1F933 1F3FD ; fully-qualified # 🤳🏽 selfie: medium skin tone -1F933 1F3FE ; fully-qualified # 🤳🏾 selfie: medium-dark skin tone -1F933 1F3FF ; fully-qualified # 🤳🏿 selfie: dark skin tone -1F4AA ; fully-qualified # 💪 flexed biceps -1F4AA 1F3FB ; fully-qualified # 💪🏻 flexed biceps: light skin tone -1F4AA 1F3FC ; fully-qualified # 💪🏼 flexed biceps: medium-light skin tone -1F4AA 1F3FD ; fully-qualified # 💪🏽 flexed biceps: medium skin tone -1F4AA 1F3FE ; fully-qualified # 💪🏾 flexed biceps: medium-dark skin tone -1F4AA 1F3FF ; fully-qualified # 💪🏿 flexed biceps: dark skin tone -1F9B5 ; fully-qualified # 🦵 leg -1F9B5 1F3FB ; fully-qualified # 🦵🏻 leg: light skin tone -1F9B5 1F3FC ; fully-qualified # 🦵🏼 leg: medium-light skin tone -1F9B5 1F3FD ; fully-qualified # 🦵🏽 leg: medium skin tone -1F9B5 1F3FE ; fully-qualified # 🦵🏾 leg: medium-dark skin tone -1F9B5 1F3FF ; fully-qualified # 🦵🏿 leg: dark skin tone -1F9B6 ; fully-qualified # 🦶 foot -1F9B6 1F3FB ; fully-qualified # 🦶🏻 foot: light skin tone -1F9B6 1F3FC ; fully-qualified # 🦶🏼 foot: medium-light skin tone -1F9B6 1F3FD ; fully-qualified # 🦶🏽 foot: medium skin tone -1F9B6 1F3FE ; fully-qualified # 🦶🏾 foot: medium-dark skin tone -1F9B6 1F3FF ; fully-qualified # 🦶🏿 foot: dark skin tone -1F448 ; fully-qualified # 👈 backhand index pointing left -1F448 1F3FB ; fully-qualified # 👈🏻 backhand index pointing left: light skin tone -1F448 1F3FC ; fully-qualified # 👈🏼 backhand index pointing left: medium-light skin tone -1F448 1F3FD ; fully-qualified # 👈🏽 backhand index pointing left: medium skin tone -1F448 1F3FE ; fully-qualified # 👈🏾 backhand index pointing left: medium-dark skin tone -1F448 1F3FF ; fully-qualified # 👈🏿 backhand index pointing left: dark skin tone -1F449 ; fully-qualified # 👉 backhand index pointing right -1F449 1F3FB ; fully-qualified # 👉🏻 backhand index pointing right: light skin tone -1F449 1F3FC ; fully-qualified # 👉🏼 backhand index pointing right: medium-light skin tone -1F449 1F3FD ; fully-qualified # 👉🏽 backhand index pointing right: medium skin tone -1F449 1F3FE ; fully-qualified # 👉🏾 backhand index pointing right: medium-dark skin tone -1F449 1F3FF ; fully-qualified # 👉🏿 backhand index pointing right: dark skin tone -261D FE0F ; fully-qualified # ☝️ index pointing up -261D ; non-fully-qualified # ☝ index pointing up -261D 1F3FB ; fully-qualified # ☝🏻 index pointing up: light skin tone -261D 1F3FC ; fully-qualified # ☝🏼 index pointing up: medium-light skin tone -261D 1F3FD ; fully-qualified # ☝🏽 index pointing up: medium skin tone -261D 1F3FE ; fully-qualified # ☝🏾 index pointing up: medium-dark skin tone -261D 1F3FF ; fully-qualified # ☝🏿 index pointing up: dark skin tone -1F446 ; fully-qualified # 👆 backhand index pointing up -1F446 1F3FB ; fully-qualified # 👆🏻 backhand index pointing up: light skin tone -1F446 1F3FC ; fully-qualified # 👆🏼 backhand index pointing up: medium-light skin tone -1F446 1F3FD ; fully-qualified # 👆🏽 backhand index pointing up: medium skin tone -1F446 1F3FE ; fully-qualified # 👆🏾 backhand index pointing up: medium-dark skin tone -1F446 1F3FF ; fully-qualified # 👆🏿 backhand index pointing up: dark skin tone -1F595 ; fully-qualified # 🖕 middle finger -1F595 1F3FB ; fully-qualified # 🖕🏻 middle finger: light skin tone -1F595 1F3FC ; fully-qualified # 🖕🏼 middle finger: medium-light skin tone -1F595 1F3FD ; fully-qualified # 🖕🏽 middle finger: medium skin tone -1F595 1F3FE ; fully-qualified # 🖕🏾 middle finger: medium-dark skin tone -1F595 1F3FF ; fully-qualified # 🖕🏿 middle finger: dark skin tone -1F447 ; fully-qualified # 👇 backhand index pointing down -1F447 1F3FB ; fully-qualified # 👇🏻 backhand index pointing down: light skin tone -1F447 1F3FC ; fully-qualified # 👇🏼 backhand index pointing down: medium-light skin tone -1F447 1F3FD ; fully-qualified # 👇🏽 backhand index pointing down: medium skin tone -1F447 1F3FE ; fully-qualified # 👇🏾 backhand index pointing down: medium-dark skin tone -1F447 1F3FF ; fully-qualified # 👇🏿 backhand index pointing down: dark skin tone -270C FE0F ; fully-qualified # ✌️ victory hand -270C ; non-fully-qualified # ✌ victory hand -270C 1F3FB ; fully-qualified # ✌🏻 victory hand: light skin tone -270C 1F3FC ; fully-qualified # ✌🏼 victory hand: medium-light skin tone -270C 1F3FD ; fully-qualified # ✌🏽 victory hand: medium skin tone -270C 1F3FE ; fully-qualified # ✌🏾 victory hand: medium-dark skin tone -270C 1F3FF ; fully-qualified # ✌🏿 victory hand: dark skin tone -1F91E ; fully-qualified # 🤞 crossed fingers -1F91E 1F3FB ; fully-qualified # 🤞🏻 crossed fingers: light skin tone -1F91E 1F3FC ; fully-qualified # 🤞🏼 crossed fingers: medium-light skin tone -1F91E 1F3FD ; fully-qualified # 🤞🏽 crossed fingers: medium skin tone -1F91E 1F3FE ; fully-qualified # 🤞🏾 crossed fingers: medium-dark skin tone -1F91E 1F3FF ; fully-qualified # 🤞🏿 crossed fingers: dark skin tone -1F596 ; fully-qualified # 🖖 vulcan salute -1F596 1F3FB ; fully-qualified # 🖖🏻 vulcan salute: light skin tone -1F596 1F3FC ; fully-qualified # 🖖🏼 vulcan salute: medium-light skin tone -1F596 1F3FD ; fully-qualified # 🖖🏽 vulcan salute: medium skin tone -1F596 1F3FE ; fully-qualified # 🖖🏾 vulcan salute: medium-dark skin tone -1F596 1F3FF ; fully-qualified # 🖖🏿 vulcan salute: dark skin tone -1F918 ; fully-qualified # 🤘 sign of the horns -1F918 1F3FB ; fully-qualified # 🤘🏻 sign of the horns: light skin tone -1F918 1F3FC ; fully-qualified # 🤘🏼 sign of the horns: medium-light skin tone -1F918 1F3FD ; fully-qualified # 🤘🏽 sign of the horns: medium skin tone -1F918 1F3FE ; fully-qualified # 🤘🏾 sign of the horns: medium-dark skin tone -1F918 1F3FF ; fully-qualified # 🤘🏿 sign of the horns: dark skin tone -1F919 ; fully-qualified # 🤙 call me hand -1F919 1F3FB ; fully-qualified # 🤙🏻 call me hand: light skin tone -1F919 1F3FC ; fully-qualified # 🤙🏼 call me hand: medium-light skin tone -1F919 1F3FD ; fully-qualified # 🤙🏽 call me hand: medium skin tone -1F919 1F3FE ; fully-qualified # 🤙🏾 call me hand: medium-dark skin tone -1F919 1F3FF ; fully-qualified # 🤙🏿 call me hand: dark skin tone -1F590 FE0F ; fully-qualified # 🖐️ hand with fingers splayed -1F590 ; non-fully-qualified # 🖐 hand with fingers splayed -1F590 1F3FB ; fully-qualified # 🖐🏻 hand with fingers splayed: light skin tone -1F590 1F3FC ; fully-qualified # 🖐🏼 hand with fingers splayed: medium-light skin tone -1F590 1F3FD ; fully-qualified # 🖐🏽 hand with fingers splayed: medium skin tone -1F590 1F3FE ; fully-qualified # 🖐🏾 hand with fingers splayed: medium-dark skin tone -1F590 1F3FF ; fully-qualified # 🖐🏿 hand with fingers splayed: dark skin tone -270B ; fully-qualified # ✋ raised hand -270B 1F3FB ; fully-qualified # ✋🏻 raised hand: light skin tone -270B 1F3FC ; fully-qualified # ✋🏼 raised hand: medium-light skin tone -270B 1F3FD ; fully-qualified # ✋🏽 raised hand: medium skin tone -270B 1F3FE ; fully-qualified # ✋🏾 raised hand: medium-dark skin tone -270B 1F3FF ; fully-qualified # ✋🏿 raised hand: dark skin tone -1F44C ; fully-qualified # 👌 OK hand -1F44C 1F3FB ; fully-qualified # 👌🏻 OK hand: light skin tone -1F44C 1F3FC ; fully-qualified # 👌🏼 OK hand: medium-light skin tone -1F44C 1F3FD ; fully-qualified # 👌🏽 OK hand: medium skin tone -1F44C 1F3FE ; fully-qualified # 👌🏾 OK hand: medium-dark skin tone -1F44C 1F3FF ; fully-qualified # 👌🏿 OK hand: dark skin tone -1F44D ; fully-qualified # 👍 thumbs up -1F44D 1F3FB ; fully-qualified # 👍🏻 thumbs up: light skin tone -1F44D 1F3FC ; fully-qualified # 👍🏼 thumbs up: medium-light skin tone -1F44D 1F3FD ; fully-qualified # 👍🏽 thumbs up: medium skin tone -1F44D 1F3FE ; fully-qualified # 👍🏾 thumbs up: medium-dark skin tone -1F44D 1F3FF ; fully-qualified # 👍🏿 thumbs up: dark skin tone -1F44E ; fully-qualified # 👎 thumbs down -1F44E 1F3FB ; fully-qualified # 👎🏻 thumbs down: light skin tone -1F44E 1F3FC ; fully-qualified # 👎🏼 thumbs down: medium-light skin tone -1F44E 1F3FD ; fully-qualified # 👎🏽 thumbs down: medium skin tone -1F44E 1F3FE ; fully-qualified # 👎🏾 thumbs down: medium-dark skin tone -1F44E 1F3FF ; fully-qualified # 👎🏿 thumbs down: dark skin tone -270A ; fully-qualified # ✊ raised fist -270A 1F3FB ; fully-qualified # ✊🏻 raised fist: light skin tone -270A 1F3FC ; fully-qualified # ✊🏼 raised fist: medium-light skin tone -270A 1F3FD ; fully-qualified # ✊🏽 raised fist: medium skin tone -270A 1F3FE ; fully-qualified # ✊🏾 raised fist: medium-dark skin tone -270A 1F3FF ; fully-qualified # ✊🏿 raised fist: dark skin tone -1F44A ; fully-qualified # 👊 oncoming fist -1F44A 1F3FB ; fully-qualified # 👊🏻 oncoming fist: light skin tone -1F44A 1F3FC ; fully-qualified # 👊🏼 oncoming fist: medium-light skin tone -1F44A 1F3FD ; fully-qualified # 👊🏽 oncoming fist: medium skin tone -1F44A 1F3FE ; fully-qualified # 👊🏾 oncoming fist: medium-dark skin tone -1F44A 1F3FF ; fully-qualified # 👊🏿 oncoming fist: dark skin tone -1F91B ; fully-qualified # 🤛 left-facing fist -1F91B 1F3FB ; fully-qualified # 🤛🏻 left-facing fist: light skin tone -1F91B 1F3FC ; fully-qualified # 🤛🏼 left-facing fist: medium-light skin tone -1F91B 1F3FD ; fully-qualified # 🤛🏽 left-facing fist: medium skin tone -1F91B 1F3FE ; fully-qualified # 🤛🏾 left-facing fist: medium-dark skin tone -1F91B 1F3FF ; fully-qualified # 🤛🏿 left-facing fist: dark skin tone -1F91C ; fully-qualified # 🤜 right-facing fist -1F91C 1F3FB ; fully-qualified # 🤜🏻 right-facing fist: light skin tone -1F91C 1F3FC ; fully-qualified # 🤜🏼 right-facing fist: medium-light skin tone -1F91C 1F3FD ; fully-qualified # 🤜🏽 right-facing fist: medium skin tone -1F91C 1F3FE ; fully-qualified # 🤜🏾 right-facing fist: medium-dark skin tone -1F91C 1F3FF ; fully-qualified # 🤜🏿 right-facing fist: dark skin tone -1F91A ; fully-qualified # 🤚 raised back of hand -1F91A 1F3FB ; fully-qualified # 🤚🏻 raised back of hand: light skin tone -1F91A 1F3FC ; fully-qualified # 🤚🏼 raised back of hand: medium-light skin tone -1F91A 1F3FD ; fully-qualified # 🤚🏽 raised back of hand: medium skin tone -1F91A 1F3FE ; fully-qualified # 🤚🏾 raised back of hand: medium-dark skin tone -1F91A 1F3FF ; fully-qualified # 🤚🏿 raised back of hand: dark skin tone -1F44B ; fully-qualified # 👋 waving hand -1F44B 1F3FB ; fully-qualified # 👋🏻 waving hand: light skin tone -1F44B 1F3FC ; fully-qualified # 👋🏼 waving hand: medium-light skin tone -1F44B 1F3FD ; fully-qualified # 👋🏽 waving hand: medium skin tone -1F44B 1F3FE ; fully-qualified # 👋🏾 waving hand: medium-dark skin tone -1F44B 1F3FF ; fully-qualified # 👋🏿 waving hand: dark skin tone -1F91F ; fully-qualified # 🤟 love-you gesture -1F91F 1F3FB ; fully-qualified # 🤟🏻 love-you gesture: light skin tone -1F91F 1F3FC ; fully-qualified # 🤟🏼 love-you gesture: medium-light skin tone -1F91F 1F3FD ; fully-qualified # 🤟🏽 love-you gesture: medium skin tone -1F91F 1F3FE ; fully-qualified # 🤟🏾 love-you gesture: medium-dark skin tone -1F91F 1F3FF ; fully-qualified # 🤟🏿 love-you gesture: dark skin tone -270D FE0F ; fully-qualified # ✍️ writing hand -270D ; non-fully-qualified # ✍ writing hand -270D 1F3FB ; fully-qualified # ✍🏻 writing hand: light skin tone -270D 1F3FC ; fully-qualified # ✍🏼 writing hand: medium-light skin tone -270D 1F3FD ; fully-qualified # ✍🏽 writing hand: medium skin tone -270D 1F3FE ; fully-qualified # ✍🏾 writing hand: medium-dark skin tone -270D 1F3FF ; fully-qualified # ✍🏿 writing hand: dark skin tone -1F44F ; fully-qualified # 👏 clapping hands -1F44F 1F3FB ; fully-qualified # 👏🏻 clapping hands: light skin tone -1F44F 1F3FC ; fully-qualified # 👏🏼 clapping hands: medium-light skin tone -1F44F 1F3FD ; fully-qualified # 👏🏽 clapping hands: medium skin tone -1F44F 1F3FE ; fully-qualified # 👏🏾 clapping hands: medium-dark skin tone -1F44F 1F3FF ; fully-qualified # 👏🏿 clapping hands: dark skin tone -1F450 ; fully-qualified # 👐 open hands -1F450 1F3FB ; fully-qualified # 👐🏻 open hands: light skin tone -1F450 1F3FC ; fully-qualified # 👐🏼 open hands: medium-light skin tone -1F450 1F3FD ; fully-qualified # 👐🏽 open hands: medium skin tone -1F450 1F3FE ; fully-qualified # 👐🏾 open hands: medium-dark skin tone -1F450 1F3FF ; fully-qualified # 👐🏿 open hands: dark skin tone -1F64C ; fully-qualified # 🙌 raising hands -1F64C 1F3FB ; fully-qualified # 🙌🏻 raising hands: light skin tone -1F64C 1F3FC ; fully-qualified # 🙌🏼 raising hands: medium-light skin tone -1F64C 1F3FD ; fully-qualified # 🙌🏽 raising hands: medium skin tone -1F64C 1F3FE ; fully-qualified # 🙌🏾 raising hands: medium-dark skin tone -1F64C 1F3FF ; fully-qualified # 🙌🏿 raising hands: dark skin tone -1F932 ; fully-qualified # 🤲 palms up together -1F932 1F3FB ; fully-qualified # 🤲🏻 palms up together: light skin tone -1F932 1F3FC ; fully-qualified # 🤲🏼 palms up together: medium-light skin tone -1F932 1F3FD ; fully-qualified # 🤲🏽 palms up together: medium skin tone -1F932 1F3FE ; fully-qualified # 🤲🏾 palms up together: medium-dark skin tone -1F932 1F3FF ; fully-qualified # 🤲🏿 palms up together: dark skin tone -1F64F ; fully-qualified # 🙏 folded hands -1F64F 1F3FB ; fully-qualified # 🙏🏻 folded hands: light skin tone -1F64F 1F3FC ; fully-qualified # 🙏🏼 folded hands: medium-light skin tone -1F64F 1F3FD ; fully-qualified # 🙏🏽 folded hands: medium skin tone -1F64F 1F3FE ; fully-qualified # 🙏🏾 folded hands: medium-dark skin tone -1F64F 1F3FF ; fully-qualified # 🙏🏿 folded hands: dark skin tone -1F91D ; fully-qualified # 🤝 handshake -1F485 ; fully-qualified # 💅 nail polish -1F485 1F3FB ; fully-qualified # 💅🏻 nail polish: light skin tone -1F485 1F3FC ; fully-qualified # 💅🏼 nail polish: medium-light skin tone -1F485 1F3FD ; fully-qualified # 💅🏽 nail polish: medium skin tone -1F485 1F3FE ; fully-qualified # 💅🏾 nail polish: medium-dark skin tone -1F485 1F3FF ; fully-qualified # 💅🏿 nail polish: dark skin tone -1F442 ; fully-qualified # 👂 ear -1F442 1F3FB ; fully-qualified # 👂🏻 ear: light skin tone -1F442 1F3FC ; fully-qualified # 👂🏼 ear: medium-light skin tone -1F442 1F3FD ; fully-qualified # 👂🏽 ear: medium skin tone -1F442 1F3FE ; fully-qualified # 👂🏾 ear: medium-dark skin tone -1F442 1F3FF ; fully-qualified # 👂🏿 ear: dark skin tone -1F443 ; fully-qualified # 👃 nose -1F443 1F3FB ; fully-qualified # 👃🏻 nose: light skin tone -1F443 1F3FC ; fully-qualified # 👃🏼 nose: medium-light skin tone -1F443 1F3FD ; fully-qualified # 👃🏽 nose: medium skin tone -1F443 1F3FE ; fully-qualified # 👃🏾 nose: medium-dark skin tone -1F443 1F3FF ; fully-qualified # 👃🏿 nose: dark skin tone -1F9B0 ; fully-qualified # 🦰 red-haired -1F9B1 ; fully-qualified # 🦱 curly-haired -1F9B2 ; fully-qualified # 🦲 bald -1F9B3 ; fully-qualified # 🦳 white-haired -1F463 ; fully-qualified # 👣 footprints -1F440 ; fully-qualified # 👀 eyes -1F441 FE0F ; fully-qualified # 👁️ eye -1F441 ; non-fully-qualified # 👁 eye -1F441 FE0F 200D 1F5E8 FE0F ; fully-qualified # 👁️‍🗨️ eye in speech bubble -1F441 200D 1F5E8 FE0F ; non-fully-qualified # 👁‍🗨️ eye in speech bubble -1F441 FE0F 200D 1F5E8 ; non-fully-qualified # 👁️‍🗨 eye in speech bubble -1F441 200D 1F5E8 ; non-fully-qualified # 👁‍🗨 eye in speech bubble -1F9E0 ; fully-qualified # 🧠 brain -1F9B4 ; fully-qualified # 🦴 bone -1F9B7 ; fully-qualified # 🦷 tooth -1F445 ; fully-qualified # 👅 tongue -1F444 ; fully-qualified # 👄 mouth - -# subgroup: emotion -1F48B ; fully-qualified # 💋 kiss mark -1F498 ; fully-qualified # 💘 heart with arrow -2764 FE0F ; fully-qualified # ❤️ red heart -2764 ; non-fully-qualified # ❤ red heart -1F493 ; fully-qualified # 💓 beating heart -1F494 ; fully-qualified # 💔 broken heart -1F495 ; fully-qualified # 💕 two hearts -1F496 ; fully-qualified # 💖 sparkling heart -1F497 ; fully-qualified # 💗 growing heart -1F499 ; fully-qualified # 💙 blue heart -1F49A ; fully-qualified # 💚 green heart -1F49B ; fully-qualified # 💛 yellow heart -1F9E1 ; fully-qualified # 🧡 orange heart -1F49C ; fully-qualified # 💜 purple heart -1F5A4 ; fully-qualified # 🖤 black heart -1F49D ; fully-qualified # 💝 heart with ribbon -1F49E ; fully-qualified # 💞 revolving hearts -1F49F ; fully-qualified # 💟 heart decoration -2763 FE0F ; fully-qualified # ❣️ heavy heart exclamation -2763 ; non-fully-qualified # ❣ heavy heart exclamation -1F48C ; fully-qualified # 💌 love letter -1F4A4 ; fully-qualified # 💤 zzz -1F4A2 ; fully-qualified # 💢 anger symbol -1F4A3 ; fully-qualified # 💣 bomb -1F4A5 ; fully-qualified # 💥 collision -1F4A6 ; fully-qualified # 💦 sweat droplets -1F4A8 ; fully-qualified # 💨 dashing away -1F4AB ; fully-qualified # 💫 dizzy -1F4AC ; fully-qualified # 💬 speech balloon -1F5E8 FE0F ; fully-qualified # 🗨️ left speech bubble -1F5E8 ; non-fully-qualified # 🗨 left speech bubble -1F5EF FE0F ; fully-qualified # 🗯️ right anger bubble -1F5EF ; non-fully-qualified # 🗯 right anger bubble -1F4AD ; fully-qualified # 💭 thought balloon -1F573 FE0F ; fully-qualified # 🕳️ hole -1F573 ; non-fully-qualified # 🕳 hole - -# subgroup: clothing -1F453 ; fully-qualified # 👓 glasses -1F576 FE0F ; fully-qualified # 🕶️ sunglasses -1F576 ; non-fully-qualified # 🕶 sunglasses -1F97D ; fully-qualified # 🥽 goggles -1F97C ; fully-qualified # 🥼 lab coat -1F454 ; fully-qualified # 👔 necktie -1F455 ; fully-qualified # 👕 t-shirt -1F456 ; fully-qualified # 👖 jeans -1F9E3 ; fully-qualified # 🧣 scarf -1F9E4 ; fully-qualified # 🧤 gloves -1F9E5 ; fully-qualified # 🧥 coat -1F9E6 ; fully-qualified # 🧦 socks -1F457 ; fully-qualified # 👗 dress -1F458 ; fully-qualified # 👘 kimono -1F459 ; fully-qualified # 👙 bikini -1F45A ; fully-qualified # 👚 woman’s clothes -1F45B ; fully-qualified # 👛 purse -1F45C ; fully-qualified # 👜 handbag -1F45D ; fully-qualified # 👝 clutch bag -1F6CD FE0F ; fully-qualified # 🛍️ shopping bags -1F6CD ; non-fully-qualified # 🛍 shopping bags -1F392 ; fully-qualified # 🎒 school backpack -1F45E ; fully-qualified # 👞 man’s shoe -1F45F ; fully-qualified # 👟 running shoe -1F97E ; fully-qualified # 🥾 hiking boot -1F97F ; fully-qualified # 🥿 woman’s flat shoe -1F460 ; fully-qualified # 👠 high-heeled shoe -1F461 ; fully-qualified # 👡 woman’s sandal -1F462 ; fully-qualified # 👢 woman’s boot -1F451 ; fully-qualified # 👑 crown -1F452 ; fully-qualified # 👒 woman’s hat -1F3A9 ; fully-qualified # 🎩 top hat -1F393 ; fully-qualified # 🎓 graduation cap -1F9E2 ; fully-qualified # 🧢 billed cap -26D1 FE0F ; fully-qualified # ⛑️ rescue worker’s helmet -26D1 ; non-fully-qualified # ⛑ rescue worker’s helmet -1F4FF ; fully-qualified # 📿 prayer beads -1F484 ; fully-qualified # 💄 lipstick -1F48D ; fully-qualified # 💍 ring -1F48E ; fully-qualified # 💎 gem stone - -# Smileys & People subtotal: 2210 -# Smileys & People subtotal: 625 w/o modifiers - -# group: Animals & Nature - -# subgroup: animal-mammal -1F435 ; fully-qualified # 🐵 monkey face -1F412 ; fully-qualified # 🐒 monkey -1F98D ; fully-qualified # 🦍 gorilla -1F436 ; fully-qualified # 🐶 dog face -1F415 ; fully-qualified # 🐕 dog -1F429 ; fully-qualified # 🐩 poodle -1F43A ; fully-qualified # 🐺 wolf face -1F98A ; fully-qualified # 🦊 fox face -1F99D ; fully-qualified # 🦝 raccoon -1F431 ; fully-qualified # 🐱 cat face -1F408 ; fully-qualified # 🐈 cat -1F981 ; fully-qualified # 🦁 lion face -1F42F ; fully-qualified # 🐯 tiger face -1F405 ; fully-qualified # 🐅 tiger -1F406 ; fully-qualified # 🐆 leopard -1F434 ; fully-qualified # 🐴 horse face -1F40E ; fully-qualified # 🐎 horse -1F984 ; fully-qualified # 🦄 unicorn face -1F993 ; fully-qualified # 🦓 zebra -1F98C ; fully-qualified # 🦌 deer -1F42E ; fully-qualified # 🐮 cow face -1F402 ; fully-qualified # 🐂 ox -1F403 ; fully-qualified # 🐃 water buffalo -1F404 ; fully-qualified # 🐄 cow -1F437 ; fully-qualified # 🐷 pig face -1F416 ; fully-qualified # 🐖 pig -1F417 ; fully-qualified # 🐗 boar -1F43D ; fully-qualified # 🐽 pig nose -1F40F ; fully-qualified # 🐏 ram -1F411 ; fully-qualified # 🐑 ewe -1F410 ; fully-qualified # 🐐 goat -1F42A ; fully-qualified # 🐪 camel -1F42B ; fully-qualified # 🐫 two-hump camel -1F999 ; fully-qualified # 🦙 llama -1F992 ; fully-qualified # 🦒 giraffe -1F418 ; fully-qualified # 🐘 elephant -1F98F ; fully-qualified # 🦏 rhinoceros -1F99B ; fully-qualified # 🦛 hippopotamus -1F42D ; fully-qualified # 🐭 mouse face -1F401 ; fully-qualified # 🐁 mouse -1F400 ; fully-qualified # 🐀 rat -1F439 ; fully-qualified # 🐹 hamster face -1F430 ; fully-qualified # 🐰 rabbit face -1F407 ; fully-qualified # 🐇 rabbit -1F43F FE0F ; fully-qualified # 🐿️ chipmunk -1F43F ; non-fully-qualified # 🐿 chipmunk -1F994 ; fully-qualified # 🦔 hedgehog -1F987 ; fully-qualified # 🦇 bat -1F43B ; fully-qualified # 🐻 bear face -1F428 ; fully-qualified # 🐨 koala -1F43C ; fully-qualified # 🐼 panda face -1F998 ; fully-qualified # 🦘 kangaroo -1F9A1 ; fully-qualified # 🦡 badger -1F43E ; fully-qualified # 🐾 paw prints - -# subgroup: animal-bird -1F983 ; fully-qualified # 🦃 turkey -1F414 ; fully-qualified # 🐔 chicken -1F413 ; fully-qualified # 🐓 rooster -1F423 ; fully-qualified # 🐣 hatching chick -1F424 ; fully-qualified # 🐤 baby chick -1F425 ; fully-qualified # 🐥 front-facing baby chick -1F426 ; fully-qualified # 🐦 bird -1F427 ; fully-qualified # 🐧 penguin -1F54A FE0F ; fully-qualified # 🕊️ dove -1F54A ; non-fully-qualified # 🕊 dove -1F985 ; fully-qualified # 🦅 eagle -1F986 ; fully-qualified # 🦆 duck -1F9A2 ; fully-qualified # 🦢 swan -1F989 ; fully-qualified # 🦉 owl -1F99A ; fully-qualified # 🦚 peacock -1F99C ; fully-qualified # 🦜 parrot - -# subgroup: animal-amphibian -1F438 ; fully-qualified # 🐸 frog face - -# subgroup: animal-reptile -1F40A ; fully-qualified # 🐊 crocodile -1F422 ; fully-qualified # 🐢 turtle -1F98E ; fully-qualified # 🦎 lizard -1F40D ; fully-qualified # 🐍 snake -1F432 ; fully-qualified # 🐲 dragon face -1F409 ; fully-qualified # 🐉 dragon -1F995 ; fully-qualified # 🦕 sauropod -1F996 ; fully-qualified # 🦖 T-Rex - -# subgroup: animal-marine -1F433 ; fully-qualified # 🐳 spouting whale -1F40B ; fully-qualified # 🐋 whale -1F42C ; fully-qualified # 🐬 dolphin -1F41F ; fully-qualified # 🐟 fish -1F420 ; fully-qualified # 🐠 tropical fish -1F421 ; fully-qualified # 🐡 blowfish -1F988 ; fully-qualified # 🦈 shark -1F419 ; fully-qualified # 🐙 octopus -1F41A ; fully-qualified # 🐚 spiral shell -1F980 ; fully-qualified # 🦀 crab -1F99E ; fully-qualified # 🦞 lobster -1F990 ; fully-qualified # 🦐 shrimp -1F991 ; fully-qualified # 🦑 squid - -# subgroup: animal-bug -1F40C ; fully-qualified # 🐌 snail -1F98B ; fully-qualified # 🦋 butterfly -1F41B ; fully-qualified # 🐛 bug -1F41C ; fully-qualified # 🐜 ant -1F41D ; fully-qualified # 🐝 honeybee -1F41E ; fully-qualified # 🐞 lady beetle -1F997 ; fully-qualified # 🦗 cricket -1F577 FE0F ; fully-qualified # 🕷️ spider -1F577 ; non-fully-qualified # 🕷 spider -1F578 FE0F ; fully-qualified # 🕸️ spider web -1F578 ; non-fully-qualified # 🕸 spider web -1F982 ; fully-qualified # 🦂 scorpion -1F99F ; fully-qualified # 🦟 mosquito -1F9A0 ; fully-qualified # 🦠 microbe - -# subgroup: plant-flower -1F490 ; fully-qualified # 💐 bouquet -1F338 ; fully-qualified # 🌸 cherry blossom -1F4AE ; fully-qualified # 💮 white flower -1F3F5 FE0F ; fully-qualified # 🏵️ rosette -1F3F5 ; non-fully-qualified # 🏵 rosette -1F339 ; fully-qualified # 🌹 rose -1F940 ; fully-qualified # 🥀 wilted flower -1F33A ; fully-qualified # 🌺 hibiscus -1F33B ; fully-qualified # 🌻 sunflower -1F33C ; fully-qualified # 🌼 blossom -1F337 ; fully-qualified # 🌷 tulip - -# subgroup: plant-other -1F331 ; fully-qualified # 🌱 seedling -1F332 ; fully-qualified # 🌲 evergreen tree -1F333 ; fully-qualified # 🌳 deciduous tree -1F334 ; fully-qualified # 🌴 palm tree -1F335 ; fully-qualified # 🌵 cactus -1F33E ; fully-qualified # 🌾 sheaf of rice -1F33F ; fully-qualified # 🌿 herb -2618 FE0F ; fully-qualified # ☘️ shamrock -2618 ; non-fully-qualified # ☘ shamrock -1F340 ; fully-qualified # 🍀 four leaf clover -1F341 ; fully-qualified # 🍁 maple leaf -1F342 ; fully-qualified # 🍂 fallen leaf -1F343 ; fully-qualified # 🍃 leaf fluttering in wind - -# Animals & Nature subtotal: 130 -# Animals & Nature subtotal: 130 w/o modifiers - -# group: Food & Drink - -# subgroup: food-fruit -1F347 ; fully-qualified # 🍇 grapes -1F348 ; fully-qualified # 🍈 melon -1F349 ; fully-qualified # 🍉 watermelon -1F34A ; fully-qualified # 🍊 tangerine -1F34B ; fully-qualified # 🍋 lemon -1F34C ; fully-qualified # 🍌 banana -1F34D ; fully-qualified # 🍍 pineapple -1F96D ; fully-qualified # 🥭 mango -1F34E ; fully-qualified # 🍎 red apple -1F34F ; fully-qualified # 🍏 green apple -1F350 ; fully-qualified # 🍐 pear -1F351 ; fully-qualified # 🍑 peach -1F352 ; fully-qualified # 🍒 cherries -1F353 ; fully-qualified # 🍓 strawberry -1F95D ; fully-qualified # 🥝 kiwi fruit -1F345 ; fully-qualified # 🍅 tomato -1F965 ; fully-qualified # 🥥 coconut - -# subgroup: food-vegetable -1F951 ; fully-qualified # 🥑 avocado -1F346 ; fully-qualified # 🍆 eggplant -1F954 ; fully-qualified # 🥔 potato -1F955 ; fully-qualified # 🥕 carrot -1F33D ; fully-qualified # 🌽 ear of corn -1F336 FE0F ; fully-qualified # 🌶️ hot pepper -1F336 ; non-fully-qualified # 🌶 hot pepper -1F952 ; fully-qualified # 🥒 cucumber -1F96C ; fully-qualified # 🥬 leafy green -1F966 ; fully-qualified # 🥦 broccoli -1F344 ; fully-qualified # 🍄 mushroom -1F95C ; fully-qualified # 🥜 peanuts -1F330 ; fully-qualified # 🌰 chestnut - -# subgroup: food-prepared -1F35E ; fully-qualified # 🍞 bread -1F950 ; fully-qualified # 🥐 croissant -1F956 ; fully-qualified # 🥖 baguette bread -1F968 ; fully-qualified # 🥨 pretzel -1F96F ; fully-qualified # 🥯 bagel -1F95E ; fully-qualified # 🥞 pancakes -1F9C0 ; fully-qualified # 🧀 cheese wedge -1F356 ; fully-qualified # 🍖 meat on bone -1F357 ; fully-qualified # 🍗 poultry leg -1F969 ; fully-qualified # 🥩 cut of meat -1F953 ; fully-qualified # 🥓 bacon -1F354 ; fully-qualified # 🍔 hamburger -1F35F ; fully-qualified # 🍟 french fries -1F355 ; fully-qualified # 🍕 pizza -1F32D ; fully-qualified # 🌭 hot dog -1F96A ; fully-qualified # 🥪 sandwich -1F32E ; fully-qualified # 🌮 taco -1F32F ; fully-qualified # 🌯 burrito -1F959 ; fully-qualified # 🥙 stuffed flatbread -1F95A ; fully-qualified # 🥚 egg -1F373 ; fully-qualified # 🍳 cooking -1F958 ; fully-qualified # 🥘 shallow pan of food -1F372 ; fully-qualified # 🍲 pot of food -1F963 ; fully-qualified # 🥣 bowl with spoon -1F957 ; fully-qualified # 🥗 green salad -1F37F ; fully-qualified # 🍿 popcorn -1F9C2 ; fully-qualified # 🧂 salt -1F96B ; fully-qualified # 🥫 canned food - -# subgroup: food-asian -1F371 ; fully-qualified # 🍱 bento box -1F358 ; fully-qualified # 🍘 rice cracker -1F359 ; fully-qualified # 🍙 rice ball -1F35A ; fully-qualified # 🍚 cooked rice -1F35B ; fully-qualified # 🍛 curry rice -1F35C ; fully-qualified # 🍜 steaming bowl -1F35D ; fully-qualified # 🍝 spaghetti -1F360 ; fully-qualified # 🍠 roasted sweet potato -1F362 ; fully-qualified # 🍢 oden -1F363 ; fully-qualified # 🍣 sushi -1F364 ; fully-qualified # 🍤 fried shrimp -1F365 ; fully-qualified # 🍥 fish cake with swirl -1F96E ; fully-qualified # 🥮 moon cake -1F361 ; fully-qualified # 🍡 dango -1F95F ; fully-qualified # 🥟 dumpling -1F960 ; fully-qualified # 🥠 fortune cookie -1F961 ; fully-qualified # 🥡 takeout box - -# subgroup: food-sweet -1F366 ; fully-qualified # 🍦 soft ice cream -1F367 ; fully-qualified # 🍧 shaved ice -1F368 ; fully-qualified # 🍨 ice cream -1F369 ; fully-qualified # 🍩 doughnut -1F36A ; fully-qualified # 🍪 cookie -1F382 ; fully-qualified # 🎂 birthday cake -1F370 ; fully-qualified # 🍰 shortcake -1F9C1 ; fully-qualified # 🧁 cupcake -1F967 ; fully-qualified # 🥧 pie -1F36B ; fully-qualified # 🍫 chocolate bar -1F36C ; fully-qualified # 🍬 candy -1F36D ; fully-qualified # 🍭 lollipop -1F36E ; fully-qualified # 🍮 custard -1F36F ; fully-qualified # 🍯 honey pot - -# subgroup: drink -1F37C ; fully-qualified # 🍼 baby bottle -1F95B ; fully-qualified # 🥛 glass of milk -2615 ; fully-qualified # ☕ hot beverage -1F375 ; fully-qualified # 🍵 teacup without handle -1F376 ; fully-qualified # 🍶 sake -1F37E ; fully-qualified # 🍾 bottle with popping cork -1F377 ; fully-qualified # 🍷 wine glass -1F378 ; fully-qualified # 🍸 cocktail glass -1F379 ; fully-qualified # 🍹 tropical drink -1F37A ; fully-qualified # 🍺 beer mug -1F37B ; fully-qualified # 🍻 clinking beer mugs -1F942 ; fully-qualified # 🥂 clinking glasses -1F943 ; fully-qualified # 🥃 tumbler glass -1F964 ; fully-qualified # 🥤 cup with straw - -# subgroup: dishware -1F962 ; fully-qualified # 🥢 chopsticks -1F37D FE0F ; fully-qualified # 🍽️ fork and knife with plate -1F37D ; non-fully-qualified # 🍽 fork and knife with plate -1F374 ; fully-qualified # 🍴 fork and knife -1F944 ; fully-qualified # 🥄 spoon -1F52A ; fully-qualified # 🔪 kitchen knife -1F3FA ; fully-qualified # 🏺 amphora - -# Food & Drink subtotal: 110 -# Food & Drink subtotal: 110 w/o modifiers - -# group: Travel & Places - -# subgroup: place-map -1F30D ; fully-qualified # 🌍 globe showing Europe-Africa -1F30E ; fully-qualified # 🌎 globe showing Americas -1F30F ; fully-qualified # 🌏 globe showing Asia-Australia -1F310 ; fully-qualified # 🌐 globe with meridians -1F5FA FE0F ; fully-qualified # 🗺️ world map -1F5FA ; non-fully-qualified # 🗺 world map -1F5FE ; fully-qualified # 🗾 map of Japan -1F9ED ; fully-qualified # 🧭 compass - -# subgroup: place-geographic -1F3D4 FE0F ; fully-qualified # 🏔️ snow-capped mountain -1F3D4 ; non-fully-qualified # 🏔 snow-capped mountain -26F0 FE0F ; fully-qualified # ⛰️ mountain -26F0 ; non-fully-qualified # ⛰ mountain -1F30B ; fully-qualified # 🌋 volcano -1F5FB ; fully-qualified # 🗻 mount fuji -1F3D5 FE0F ; fully-qualified # 🏕️ camping -1F3D5 ; non-fully-qualified # 🏕 camping -1F3D6 FE0F ; fully-qualified # 🏖️ beach with umbrella -1F3D6 ; non-fully-qualified # 🏖 beach with umbrella -1F3DC FE0F ; fully-qualified # 🏜️ desert -1F3DC ; non-fully-qualified # 🏜 desert -1F3DD FE0F ; fully-qualified # 🏝️ desert island -1F3DD ; non-fully-qualified # 🏝 desert island -1F3DE FE0F ; fully-qualified # 🏞️ national park -1F3DE ; non-fully-qualified # 🏞 national park - -# subgroup: place-building -1F3DF FE0F ; fully-qualified # 🏟️ stadium -1F3DF ; non-fully-qualified # 🏟 stadium -1F3DB FE0F ; fully-qualified # 🏛️ classical building -1F3DB ; non-fully-qualified # 🏛 classical building -1F3D7 FE0F ; fully-qualified # 🏗️ building construction -1F3D7 ; non-fully-qualified # 🏗 building construction -1F9F1 ; fully-qualified # 🧱 bricks -1F3D8 FE0F ; fully-qualified # 🏘️ houses -1F3D8 ; non-fully-qualified # 🏘 houses -1F3DA FE0F ; fully-qualified # 🏚️ derelict house -1F3DA ; non-fully-qualified # 🏚 derelict house -1F3E0 ; fully-qualified # 🏠 house -1F3E1 ; fully-qualified # 🏡 house with garden -1F3E2 ; fully-qualified # 🏢 office building -1F3E3 ; fully-qualified # 🏣 Japanese post office -1F3E4 ; fully-qualified # 🏤 post office -1F3E5 ; fully-qualified # 🏥 hospital -1F3E6 ; fully-qualified # 🏦 bank -1F3E8 ; fully-qualified # 🏨 hotel -1F3E9 ; fully-qualified # 🏩 love hotel -1F3EA ; fully-qualified # 🏪 convenience store -1F3EB ; fully-qualified # 🏫 school -1F3EC ; fully-qualified # 🏬 department store -1F3ED ; fully-qualified # 🏭 factory -1F3EF ; fully-qualified # 🏯 Japanese castle -1F3F0 ; fully-qualified # 🏰 castle -1F492 ; fully-qualified # 💒 wedding -1F5FC ; fully-qualified # 🗼 Tokyo tower -1F5FD ; fully-qualified # 🗽 Statue of Liberty - -# subgroup: place-religious -26EA ; fully-qualified # ⛪ church -1F54C ; fully-qualified # 🕌 mosque -1F54D ; fully-qualified # 🕍 synagogue -26E9 FE0F ; fully-qualified # ⛩️ shinto shrine -26E9 ; non-fully-qualified # ⛩ shinto shrine -1F54B ; fully-qualified # 🕋 kaaba - -# subgroup: place-other -26F2 ; fully-qualified # ⛲ fountain -26FA ; fully-qualified # ⛺ tent -1F301 ; fully-qualified # 🌁 foggy -1F303 ; fully-qualified # 🌃 night with stars -1F3D9 FE0F ; fully-qualified # 🏙️ cityscape -1F3D9 ; non-fully-qualified # 🏙 cityscape -1F304 ; fully-qualified # 🌄 sunrise over mountains -1F305 ; fully-qualified # 🌅 sunrise -1F306 ; fully-qualified # 🌆 cityscape at dusk -1F307 ; fully-qualified # 🌇 sunset -1F309 ; fully-qualified # 🌉 bridge at night -2668 FE0F ; fully-qualified # ♨️ hot springs -2668 ; non-fully-qualified # ♨ hot springs -1F30C ; fully-qualified # 🌌 milky way -1F3A0 ; fully-qualified # 🎠 carousel horse -1F3A1 ; fully-qualified # 🎡 ferris wheel -1F3A2 ; fully-qualified # 🎢 roller coaster -1F488 ; fully-qualified # 💈 barber pole -1F3AA ; fully-qualified # 🎪 circus tent - -# subgroup: transport-ground -1F682 ; fully-qualified # 🚂 locomotive -1F683 ; fully-qualified # 🚃 railway car -1F684 ; fully-qualified # 🚄 high-speed train -1F685 ; fully-qualified # 🚅 bullet train -1F686 ; fully-qualified # 🚆 train -1F687 ; fully-qualified # 🚇 metro -1F688 ; fully-qualified # 🚈 light rail -1F689 ; fully-qualified # 🚉 station -1F68A ; fully-qualified # 🚊 tram -1F69D ; fully-qualified # 🚝 monorail -1F69E ; fully-qualified # 🚞 mountain railway -1F68B ; fully-qualified # 🚋 tram car -1F68C ; fully-qualified # 🚌 bus -1F68D ; fully-qualified # 🚍 oncoming bus -1F68E ; fully-qualified # 🚎 trolleybus -1F690 ; fully-qualified # 🚐 minibus -1F691 ; fully-qualified # 🚑 ambulance -1F692 ; fully-qualified # 🚒 fire engine -1F693 ; fully-qualified # 🚓 police car -1F694 ; fully-qualified # 🚔 oncoming police car -1F695 ; fully-qualified # 🚕 taxi -1F696 ; fully-qualified # 🚖 oncoming taxi -1F697 ; fully-qualified # 🚗 automobile -1F698 ; fully-qualified # 🚘 oncoming automobile -1F699 ; fully-qualified # 🚙 sport utility vehicle -1F69A ; fully-qualified # 🚚 delivery truck -1F69B ; fully-qualified # 🚛 articulated lorry -1F69C ; fully-qualified # 🚜 tractor -1F6B2 ; fully-qualified # 🚲 bicycle -1F6F4 ; fully-qualified # 🛴 kick scooter -1F6F9 ; fully-qualified # 🛹 skateboard -1F6F5 ; fully-qualified # 🛵 motor scooter -1F68F ; fully-qualified # 🚏 bus stop -1F6E3 FE0F ; fully-qualified # 🛣️ motorway -1F6E3 ; non-fully-qualified # 🛣 motorway -1F6E4 FE0F ; fully-qualified # 🛤️ railway track -1F6E4 ; non-fully-qualified # 🛤 railway track -1F6E2 FE0F ; fully-qualified # 🛢️ oil drum -1F6E2 ; non-fully-qualified # 🛢 oil drum -26FD ; fully-qualified # ⛽ fuel pump -1F6A8 ; fully-qualified # 🚨 police car light -1F6A5 ; fully-qualified # 🚥 horizontal traffic light -1F6A6 ; fully-qualified # 🚦 vertical traffic light -1F6D1 ; fully-qualified # 🛑 stop sign -1F6A7 ; fully-qualified # 🚧 construction - -# subgroup: transport-water -2693 ; fully-qualified # ⚓ anchor -26F5 ; fully-qualified # ⛵ sailboat -1F6F6 ; fully-qualified # 🛶 canoe -1F6A4 ; fully-qualified # 🚤 speedboat -1F6F3 FE0F ; fully-qualified # 🛳️ passenger ship -1F6F3 ; non-fully-qualified # 🛳 passenger ship -26F4 FE0F ; fully-qualified # ⛴️ ferry -26F4 ; non-fully-qualified # ⛴ ferry -1F6E5 FE0F ; fully-qualified # 🛥️ motor boat -1F6E5 ; non-fully-qualified # 🛥 motor boat -1F6A2 ; fully-qualified # 🚢 ship - -# subgroup: transport-air -2708 FE0F ; fully-qualified # ✈️ airplane -2708 ; non-fully-qualified # ✈ airplane -1F6E9 FE0F ; fully-qualified # 🛩️ small airplane -1F6E9 ; non-fully-qualified # 🛩 small airplane -1F6EB ; fully-qualified # 🛫 airplane departure -1F6EC ; fully-qualified # 🛬 airplane arrival -1F4BA ; fully-qualified # 💺 seat -1F681 ; fully-qualified # 🚁 helicopter -1F69F ; fully-qualified # 🚟 suspension railway -1F6A0 ; fully-qualified # 🚠 mountain cableway -1F6A1 ; fully-qualified # 🚡 aerial tramway -1F6F0 FE0F ; fully-qualified # 🛰️ satellite -1F6F0 ; non-fully-qualified # 🛰 satellite -1F680 ; fully-qualified # 🚀 rocket -1F6F8 ; fully-qualified # 🛸 flying saucer - -# subgroup: hotel -1F6CE FE0F ; fully-qualified # 🛎️ bellhop bell -1F6CE ; non-fully-qualified # 🛎 bellhop bell -1F9F3 ; fully-qualified # 🧳 luggage - -# subgroup: time -231B ; fully-qualified # ⌛ hourglass done -23F3 ; fully-qualified # ⏳ hourglass not done -231A ; fully-qualified # ⌚ watch -23F0 ; fully-qualified # ⏰ alarm clock -23F1 FE0F ; fully-qualified # ⏱️ stopwatch -23F1 ; non-fully-qualified # ⏱ stopwatch -23F2 FE0F ; fully-qualified # ⏲️ timer clock -23F2 ; non-fully-qualified # ⏲ timer clock -1F570 FE0F ; fully-qualified # 🕰️ mantelpiece clock -1F570 ; non-fully-qualified # 🕰 mantelpiece clock -1F55B ; fully-qualified # 🕛 twelve o’clock -1F567 ; fully-qualified # 🕧 twelve-thirty -1F550 ; fully-qualified # 🕐 one o’clock -1F55C ; fully-qualified # 🕜 one-thirty -1F551 ; fully-qualified # 🕑 two o’clock -1F55D ; fully-qualified # 🕝 two-thirty -1F552 ; fully-qualified # 🕒 three o’clock -1F55E ; fully-qualified # 🕞 three-thirty -1F553 ; fully-qualified # 🕓 four o’clock -1F55F ; fully-qualified # 🕟 four-thirty -1F554 ; fully-qualified # 🕔 five o’clock -1F560 ; fully-qualified # 🕠 five-thirty -1F555 ; fully-qualified # 🕕 six o’clock -1F561 ; fully-qualified # 🕡 six-thirty -1F556 ; fully-qualified # 🕖 seven o’clock -1F562 ; fully-qualified # 🕢 seven-thirty -1F557 ; fully-qualified # 🕗 eight o’clock -1F563 ; fully-qualified # 🕣 eight-thirty -1F558 ; fully-qualified # 🕘 nine o’clock -1F564 ; fully-qualified # 🕤 nine-thirty -1F559 ; fully-qualified # 🕙 ten o’clock -1F565 ; fully-qualified # 🕥 ten-thirty -1F55A ; fully-qualified # 🕚 eleven o’clock -1F566 ; fully-qualified # 🕦 eleven-thirty - -# subgroup: sky & weather -1F311 ; fully-qualified # 🌑 new moon -1F312 ; fully-qualified # 🌒 waxing crescent moon -1F313 ; fully-qualified # 🌓 first quarter moon -1F314 ; fully-qualified # 🌔 waxing gibbous moon -1F315 ; fully-qualified # 🌕 full moon -1F316 ; fully-qualified # 🌖 waning gibbous moon -1F317 ; fully-qualified # 🌗 last quarter moon -1F318 ; fully-qualified # 🌘 waning crescent moon -1F319 ; fully-qualified # 🌙 crescent moon -1F31A ; fully-qualified # 🌚 new moon face -1F31B ; fully-qualified # 🌛 first quarter moon face -1F31C ; fully-qualified # 🌜 last quarter moon face -1F321 FE0F ; fully-qualified # 🌡️ thermometer -1F321 ; non-fully-qualified # 🌡 thermometer -2600 FE0F ; fully-qualified # ☀️ sun -2600 ; non-fully-qualified # ☀ sun -1F31D ; fully-qualified # 🌝 full moon face -1F31E ; fully-qualified # 🌞 sun with face -2B50 ; fully-qualified # ⭐ star -1F31F ; fully-qualified # 🌟 glowing star -1F320 ; fully-qualified # 🌠 shooting star -2601 FE0F ; fully-qualified # ☁️ cloud -2601 ; non-fully-qualified # ☁ cloud -26C5 ; fully-qualified # ⛅ sun behind cloud -26C8 FE0F ; fully-qualified # ⛈️ cloud with lightning and rain -26C8 ; non-fully-qualified # ⛈ cloud with lightning and rain -1F324 FE0F ; fully-qualified # 🌤️ sun behind small cloud -1F324 ; non-fully-qualified # 🌤 sun behind small cloud -1F325 FE0F ; fully-qualified # 🌥️ sun behind large cloud -1F325 ; non-fully-qualified # 🌥 sun behind large cloud -1F326 FE0F ; fully-qualified # 🌦️ sun behind rain cloud -1F326 ; non-fully-qualified # 🌦 sun behind rain cloud -1F327 FE0F ; fully-qualified # 🌧️ cloud with rain -1F327 ; non-fully-qualified # 🌧 cloud with rain -1F328 FE0F ; fully-qualified # 🌨️ cloud with snow -1F328 ; non-fully-qualified # 🌨 cloud with snow -1F329 FE0F ; fully-qualified # 🌩️ cloud with lightning -1F329 ; non-fully-qualified # 🌩 cloud with lightning -1F32A FE0F ; fully-qualified # 🌪️ tornado -1F32A ; non-fully-qualified # 🌪 tornado -1F32B FE0F ; fully-qualified # 🌫️ fog -1F32B ; non-fully-qualified # 🌫 fog -1F32C FE0F ; fully-qualified # 🌬️ wind face -1F32C ; non-fully-qualified # 🌬 wind face -1F300 ; fully-qualified # 🌀 cyclone -1F308 ; fully-qualified # 🌈 rainbow -1F302 ; fully-qualified # 🌂 closed umbrella -2602 FE0F ; fully-qualified # ☂️ umbrella -2602 ; non-fully-qualified # ☂ umbrella -2614 ; fully-qualified # ☔ umbrella with rain drops -26F1 FE0F ; fully-qualified # ⛱️ umbrella on ground -26F1 ; non-fully-qualified # ⛱ umbrella on ground -26A1 ; fully-qualified # ⚡ high voltage -2744 FE0F ; fully-qualified # ❄️ snowflake -2744 ; non-fully-qualified # ❄ snowflake -2603 FE0F ; fully-qualified # ☃️ snowman -2603 ; non-fully-qualified # ☃ snowman -26C4 ; fully-qualified # ⛄ snowman without snow -2604 FE0F ; fully-qualified # ☄️ comet -2604 ; non-fully-qualified # ☄ comet -1F525 ; fully-qualified # 🔥 fire -1F4A7 ; fully-qualified # 💧 droplet -1F30A ; fully-qualified # 🌊 water wave - -# Travel & Places subtotal: 249 -# Travel & Places subtotal: 249 w/o modifiers - -# group: Activities - -# subgroup: event -1F383 ; fully-qualified # 🎃 jack-o-lantern -1F384 ; fully-qualified # 🎄 Christmas tree -1F386 ; fully-qualified # 🎆 fireworks -1F387 ; fully-qualified # 🎇 sparkler -1F9E8 ; fully-qualified # 🧨 firecracker -2728 ; fully-qualified # ✨ sparkles -1F388 ; fully-qualified # 🎈 balloon -1F389 ; fully-qualified # 🎉 party popper -1F38A ; fully-qualified # 🎊 confetti ball -1F38B ; fully-qualified # 🎋 tanabata tree -1F38D ; fully-qualified # 🎍 pine decoration -1F38E ; fully-qualified # 🎎 Japanese dolls -1F38F ; fully-qualified # 🎏 carp streamer -1F390 ; fully-qualified # 🎐 wind chime -1F391 ; fully-qualified # 🎑 moon viewing ceremony -1F9E7 ; fully-qualified # 🧧 red envelope -1F380 ; fully-qualified # 🎀 ribbon -1F381 ; fully-qualified # 🎁 wrapped gift -1F397 FE0F ; fully-qualified # 🎗️ reminder ribbon -1F397 ; non-fully-qualified # 🎗 reminder ribbon -1F39F FE0F ; fully-qualified # 🎟️ admission tickets -1F39F ; non-fully-qualified # 🎟 admission tickets -1F3AB ; fully-qualified # 🎫 ticket - -# subgroup: award-medal -1F396 FE0F ; fully-qualified # 🎖️ military medal -1F396 ; non-fully-qualified # 🎖 military medal -1F3C6 ; fully-qualified # 🏆 trophy -1F3C5 ; fully-qualified # 🏅 sports medal -1F947 ; fully-qualified # 🥇 1st place medal -1F948 ; fully-qualified # 🥈 2nd place medal -1F949 ; fully-qualified # 🥉 3rd place medal - -# subgroup: sport -26BD ; fully-qualified # ⚽ soccer ball -26BE ; fully-qualified # ⚾ baseball -1F94E ; fully-qualified # 🥎 softball -1F3C0 ; fully-qualified # 🏀 basketball -1F3D0 ; fully-qualified # 🏐 volleyball -1F3C8 ; fully-qualified # 🏈 american football -1F3C9 ; fully-qualified # 🏉 rugby football -1F3BE ; fully-qualified # 🎾 tennis -1F94F ; fully-qualified # 🥏 flying disc -1F3B3 ; fully-qualified # 🎳 bowling -1F3CF ; fully-qualified # 🏏 cricket game -1F3D1 ; fully-qualified # 🏑 field hockey -1F3D2 ; fully-qualified # 🏒 ice hockey -1F94D ; fully-qualified # 🥍 lacrosse -1F3D3 ; fully-qualified # 🏓 ping pong -1F3F8 ; fully-qualified # 🏸 badminton -1F94A ; fully-qualified # 🥊 boxing glove -1F94B ; fully-qualified # 🥋 martial arts uniform -1F945 ; fully-qualified # 🥅 goal net -26F3 ; fully-qualified # ⛳ flag in hole -26F8 FE0F ; fully-qualified # ⛸️ ice skate -26F8 ; non-fully-qualified # ⛸ ice skate -1F3A3 ; fully-qualified # 🎣 fishing pole -1F3BD ; fully-qualified # 🎽 running shirt -1F3BF ; fully-qualified # 🎿 skis -1F6F7 ; fully-qualified # 🛷 sled -1F94C ; fully-qualified # 🥌 curling stone - -# subgroup: game -1F3AF ; fully-qualified # 🎯 direct hit -1F3B1 ; fully-qualified # 🎱 pool 8 ball -1F52E ; fully-qualified # 🔮 crystal ball -1F9FF ; fully-qualified # 🧿 nazar amulet -1F3AE ; fully-qualified # 🎮 video game -1F579 FE0F ; fully-qualified # 🕹️ joystick -1F579 ; non-fully-qualified # 🕹 joystick -1F3B0 ; fully-qualified # 🎰 slot machine -1F3B2 ; fully-qualified # 🎲 game die -1F9E9 ; fully-qualified # 🧩 jigsaw -1F9F8 ; fully-qualified # 🧸 teddy bear -2660 FE0F ; fully-qualified # ♠️ spade suit -2660 ; non-fully-qualified # ♠ spade suit -2665 FE0F ; fully-qualified # ♥️ heart suit -2665 ; non-fully-qualified # ♥ heart suit -2666 FE0F ; fully-qualified # ♦️ diamond suit -2666 ; non-fully-qualified # ♦ diamond suit -2663 FE0F ; fully-qualified # ♣️ club suit -2663 ; non-fully-qualified # ♣ club suit -265F FE0F ; fully-qualified # ♟️ chess pawn -265F ; non-fully-qualified # ♟ chess pawn -1F0CF ; fully-qualified # 🃏 joker -1F004 ; fully-qualified # 🀄 mahjong red dragon -1F3B4 ; fully-qualified # 🎴 flower playing cards - -# subgroup: arts & crafts -1F3AD ; fully-qualified # 🎭 performing arts -1F5BC FE0F ; fully-qualified # 🖼️ framed picture -1F5BC ; non-fully-qualified # 🖼 framed picture -1F3A8 ; fully-qualified # 🎨 artist palette -1F9F5 ; fully-qualified # 🧵 thread -1F9F6 ; fully-qualified # 🧶 yarn - -# Activities subtotal: 87 -# Activities subtotal: 87 w/o modifiers - -# group: Objects - -# subgroup: sound -1F507 ; fully-qualified # 🔇 muted speaker -1F508 ; fully-qualified # 🔈 speaker low volume -1F509 ; fully-qualified # 🔉 speaker medium volume -1F50A ; fully-qualified # 🔊 speaker high volume -1F4E2 ; fully-qualified # 📢 loudspeaker -1F4E3 ; fully-qualified # 📣 megaphone -1F4EF ; fully-qualified # 📯 postal horn -1F514 ; fully-qualified # 🔔 bell -1F515 ; fully-qualified # 🔕 bell with slash - -# subgroup: music -1F3BC ; fully-qualified # 🎼 musical score -1F3B5 ; fully-qualified # 🎵 musical note -1F3B6 ; fully-qualified # 🎶 musical notes -1F399 FE0F ; fully-qualified # 🎙️ studio microphone -1F399 ; non-fully-qualified # 🎙 studio microphone -1F39A FE0F ; fully-qualified # 🎚️ level slider -1F39A ; non-fully-qualified # 🎚 level slider -1F39B FE0F ; fully-qualified # 🎛️ control knobs -1F39B ; non-fully-qualified # 🎛 control knobs -1F3A4 ; fully-qualified # 🎤 microphone -1F3A7 ; fully-qualified # 🎧 headphone -1F4FB ; fully-qualified # 📻 radio - -# subgroup: musical-instrument -1F3B7 ; fully-qualified # 🎷 saxophone -1F3B8 ; fully-qualified # 🎸 guitar -1F3B9 ; fully-qualified # 🎹 musical keyboard -1F3BA ; fully-qualified # 🎺 trumpet -1F3BB ; fully-qualified # 🎻 violin -1F941 ; fully-qualified # 🥁 drum - -# subgroup: phone -1F4F1 ; fully-qualified # 📱 mobile phone -1F4F2 ; fully-qualified # 📲 mobile phone with arrow -260E FE0F ; fully-qualified # ☎️ telephone -260E ; non-fully-qualified # ☎ telephone -1F4DE ; fully-qualified # 📞 telephone receiver -1F4DF ; fully-qualified # 📟 pager -1F4E0 ; fully-qualified # 📠 fax machine - -# subgroup: computer -1F50B ; fully-qualified # 🔋 battery -1F50C ; fully-qualified # 🔌 electric plug -1F4BB ; fully-qualified # 💻 laptop computer -1F5A5 FE0F ; fully-qualified # 🖥️ desktop computer -1F5A5 ; non-fully-qualified # 🖥 desktop computer -1F5A8 FE0F ; fully-qualified # 🖨️ printer -1F5A8 ; non-fully-qualified # 🖨 printer -2328 FE0F ; fully-qualified # ⌨️ keyboard -2328 ; non-fully-qualified # ⌨ keyboard -1F5B1 FE0F ; fully-qualified # 🖱️ computer mouse -1F5B1 ; non-fully-qualified # 🖱 computer mouse -1F5B2 FE0F ; fully-qualified # 🖲️ trackball -1F5B2 ; non-fully-qualified # 🖲 trackball -1F4BD ; fully-qualified # 💽 computer disk -1F4BE ; fully-qualified # 💾 floppy disk -1F4BF ; fully-qualified # 💿 optical disk -1F4C0 ; fully-qualified # 📀 dvd -1F9EE ; fully-qualified # 🧮 abacus - -# subgroup: light & video -1F3A5 ; fully-qualified # 🎥 movie camera -1F39E FE0F ; fully-qualified # 🎞️ film frames -1F39E ; non-fully-qualified # 🎞 film frames -1F4FD FE0F ; fully-qualified # 📽️ film projector -1F4FD ; non-fully-qualified # 📽 film projector -1F3AC ; fully-qualified # 🎬 clapper board -1F4FA ; fully-qualified # 📺 television -1F4F7 ; fully-qualified # 📷 camera -1F4F8 ; fully-qualified # 📸 camera with flash -1F4F9 ; fully-qualified # 📹 video camera -1F4FC ; fully-qualified # 📼 videocassette -1F50D ; fully-qualified # 🔍 magnifying glass tilted left -1F50E ; fully-qualified # 🔎 magnifying glass tilted right -1F56F FE0F ; fully-qualified # 🕯️ candle -1F56F ; non-fully-qualified # 🕯 candle -1F4A1 ; fully-qualified # 💡 light bulb -1F526 ; fully-qualified # 🔦 flashlight -1F3EE ; fully-qualified # 🏮 red paper lantern - -# subgroup: book-paper -1F4D4 ; fully-qualified # 📔 notebook with decorative cover -1F4D5 ; fully-qualified # 📕 closed book -1F4D6 ; fully-qualified # 📖 open book -1F4D7 ; fully-qualified # 📗 green book -1F4D8 ; fully-qualified # 📘 blue book -1F4D9 ; fully-qualified # 📙 orange book -1F4DA ; fully-qualified # 📚 books -1F4D3 ; fully-qualified # 📓 notebook -1F4D2 ; fully-qualified # 📒 ledger -1F4C3 ; fully-qualified # 📃 page with curl -1F4DC ; fully-qualified # 📜 scroll -1F4C4 ; fully-qualified # 📄 page facing up -1F4F0 ; fully-qualified # 📰 newspaper -1F5DE FE0F ; fully-qualified # 🗞️ rolled-up newspaper -1F5DE ; non-fully-qualified # 🗞 rolled-up newspaper -1F4D1 ; fully-qualified # 📑 bookmark tabs -1F516 ; fully-qualified # 🔖 bookmark -1F3F7 FE0F ; fully-qualified # 🏷️ label -1F3F7 ; non-fully-qualified # 🏷 label - -# subgroup: money -1F4B0 ; fully-qualified # 💰 money bag -1F4B4 ; fully-qualified # 💴 yen banknote -1F4B5 ; fully-qualified # 💵 dollar banknote -1F4B6 ; fully-qualified # 💶 euro banknote -1F4B7 ; fully-qualified # 💷 pound banknote -1F4B8 ; fully-qualified # 💸 money with wings -1F4B3 ; fully-qualified # 💳 credit card -1F9FE ; fully-qualified # 🧾 receipt -1F4B9 ; fully-qualified # 💹 chart increasing with yen -1F4B1 ; fully-qualified # 💱 currency exchange -1F4B2 ; fully-qualified # 💲 heavy dollar sign - -# subgroup: mail -2709 FE0F ; fully-qualified # ✉️ envelope -2709 ; non-fully-qualified # ✉ envelope -1F4E7 ; fully-qualified # 📧 e-mail -1F4E8 ; fully-qualified # 📨 incoming envelope -1F4E9 ; fully-qualified # 📩 envelope with arrow -1F4E4 ; fully-qualified # 📤 outbox tray -1F4E5 ; fully-qualified # 📥 inbox tray -1F4E6 ; fully-qualified # 📦 package -1F4EB ; fully-qualified # 📫 closed mailbox with raised flag -1F4EA ; fully-qualified # 📪 closed mailbox with lowered flag -1F4EC ; fully-qualified # 📬 open mailbox with raised flag -1F4ED ; fully-qualified # 📭 open mailbox with lowered flag -1F4EE ; fully-qualified # 📮 postbox -1F5F3 FE0F ; fully-qualified # 🗳️ ballot box with ballot -1F5F3 ; non-fully-qualified # 🗳 ballot box with ballot - -# subgroup: writing -270F FE0F ; fully-qualified # ✏️ pencil -270F ; non-fully-qualified # ✏ pencil -2712 FE0F ; fully-qualified # ✒️ black nib -2712 ; non-fully-qualified # ✒ black nib -1F58B FE0F ; fully-qualified # 🖋️ fountain pen -1F58B ; non-fully-qualified # 🖋 fountain pen -1F58A FE0F ; fully-qualified # 🖊️ pen -1F58A ; non-fully-qualified # 🖊 pen -1F58C FE0F ; fully-qualified # 🖌️ paintbrush -1F58C ; non-fully-qualified # 🖌 paintbrush -1F58D FE0F ; fully-qualified # 🖍️ crayon -1F58D ; non-fully-qualified # 🖍 crayon -1F4DD ; fully-qualified # 📝 memo - -# subgroup: office -1F4BC ; fully-qualified # 💼 briefcase -1F4C1 ; fully-qualified # 📁 file folder -1F4C2 ; fully-qualified # 📂 open file folder -1F5C2 FE0F ; fully-qualified # 🗂️ card index dividers -1F5C2 ; non-fully-qualified # 🗂 card index dividers -1F4C5 ; fully-qualified # 📅 calendar -1F4C6 ; fully-qualified # 📆 tear-off calendar -1F5D2 FE0F ; fully-qualified # 🗒️ spiral notepad -1F5D2 ; non-fully-qualified # 🗒 spiral notepad -1F5D3 FE0F ; fully-qualified # 🗓️ spiral calendar -1F5D3 ; non-fully-qualified # 🗓 spiral calendar -1F4C7 ; fully-qualified # 📇 card index -1F4C8 ; fully-qualified # 📈 chart increasing -1F4C9 ; fully-qualified # 📉 chart decreasing -1F4CA ; fully-qualified # 📊 bar chart -1F4CB ; fully-qualified # 📋 clipboard -1F4CC ; fully-qualified # 📌 pushpin -1F4CD ; fully-qualified # 📍 round pushpin -1F4CE ; fully-qualified # 📎 paperclip -1F587 FE0F ; fully-qualified # 🖇️ linked paperclips -1F587 ; non-fully-qualified # 🖇 linked paperclips -1F4CF ; fully-qualified # 📏 straight ruler -1F4D0 ; fully-qualified # 📐 triangular ruler -2702 FE0F ; fully-qualified # ✂️ scissors -2702 ; non-fully-qualified # ✂ scissors -1F5C3 FE0F ; fully-qualified # 🗃️ card file box -1F5C3 ; non-fully-qualified # 🗃 card file box -1F5C4 FE0F ; fully-qualified # 🗄️ file cabinet -1F5C4 ; non-fully-qualified # 🗄 file cabinet -1F5D1 FE0F ; fully-qualified # 🗑️ wastebasket -1F5D1 ; non-fully-qualified # 🗑 wastebasket - -# subgroup: lock -1F512 ; fully-qualified # 🔒 locked -1F513 ; fully-qualified # 🔓 unlocked -1F50F ; fully-qualified # 🔏 locked with pen -1F510 ; fully-qualified # 🔐 locked with key -1F511 ; fully-qualified # 🔑 key -1F5DD FE0F ; fully-qualified # 🗝️ old key -1F5DD ; non-fully-qualified # 🗝 old key - -# subgroup: tool -1F528 ; fully-qualified # 🔨 hammer -26CF FE0F ; fully-qualified # ⛏️ pick -26CF ; non-fully-qualified # ⛏ pick -2692 FE0F ; fully-qualified # ⚒️ hammer and pick -2692 ; non-fully-qualified # ⚒ hammer and pick -1F6E0 FE0F ; fully-qualified # 🛠️ hammer and wrench -1F6E0 ; non-fully-qualified # 🛠 hammer and wrench -1F5E1 FE0F ; fully-qualified # 🗡️ dagger -1F5E1 ; non-fully-qualified # 🗡 dagger -2694 FE0F ; fully-qualified # ⚔️ crossed swords -2694 ; non-fully-qualified # ⚔ crossed swords -1F52B ; fully-qualified # 🔫 pistol -1F3F9 ; fully-qualified # 🏹 bow and arrow -1F6E1 FE0F ; fully-qualified # 🛡️ shield -1F6E1 ; non-fully-qualified # 🛡 shield -1F527 ; fully-qualified # 🔧 wrench -1F529 ; fully-qualified # 🔩 nut and bolt -2699 FE0F ; fully-qualified # ⚙️ gear -2699 ; non-fully-qualified # ⚙ gear -1F5DC FE0F ; fully-qualified # 🗜️ clamp -1F5DC ; non-fully-qualified # 🗜 clamp -2696 FE0F ; fully-qualified # ⚖️ balance scale -2696 ; non-fully-qualified # ⚖ balance scale -1F517 ; fully-qualified # 🔗 link -26D3 FE0F ; fully-qualified # ⛓️ chains -26D3 ; non-fully-qualified # ⛓ chains -1F9F0 ; fully-qualified # 🧰 toolbox -1F9F2 ; fully-qualified # 🧲 magnet - -# subgroup: science -2697 FE0F ; fully-qualified # ⚗️ alembic -2697 ; non-fully-qualified # ⚗ alembic -1F9EA ; fully-qualified # 🧪 test tube -1F9EB ; fully-qualified # 🧫 petri dish -1F9EC ; fully-qualified # 🧬 dna -1F52C ; fully-qualified # 🔬 microscope -1F52D ; fully-qualified # 🔭 telescope -1F4E1 ; fully-qualified # 📡 satellite antenna - -# subgroup: medical -1F489 ; fully-qualified # 💉 syringe -1F48A ; fully-qualified # 💊 pill - -# subgroup: household -1F6AA ; fully-qualified # 🚪 door -1F6CF FE0F ; fully-qualified # 🛏️ bed -1F6CF ; non-fully-qualified # 🛏 bed -1F6CB FE0F ; fully-qualified # 🛋️ couch and lamp -1F6CB ; non-fully-qualified # 🛋 couch and lamp -1F6BD ; fully-qualified # 🚽 toilet -1F6BF ; fully-qualified # 🚿 shower -1F6C1 ; fully-qualified # 🛁 bathtub -1F9F4 ; fully-qualified # 🧴 lotion bottle -1F9F7 ; fully-qualified # 🧷 safety pin -1F9F9 ; fully-qualified # 🧹 broom -1F9FA ; fully-qualified # 🧺 basket -1F9FB ; fully-qualified # 🧻 roll of paper -1F9FC ; fully-qualified # 🧼 soap -1F9FD ; fully-qualified # 🧽 sponge -1F9EF ; fully-qualified # 🧯 fire extinguisher -1F6D2 ; fully-qualified # 🛒 shopping cart - -# subgroup: other-object -1F6AC ; fully-qualified # 🚬 cigarette -26B0 FE0F ; fully-qualified # ⚰️ coffin -26B0 ; non-fully-qualified # ⚰ coffin -26B1 FE0F ; fully-qualified # ⚱️ funeral urn -26B1 ; non-fully-qualified # ⚱ funeral urn -1F5FF ; fully-qualified # 🗿 moai - -# Objects subtotal: 227 -# Objects subtotal: 227 w/o modifiers - -# group: Symbols - -# subgroup: transport-sign -1F3E7 ; fully-qualified # 🏧 ATM sign -1F6AE ; fully-qualified # 🚮 litter in bin sign -1F6B0 ; fully-qualified # 🚰 potable water -267F ; fully-qualified # ♿ wheelchair symbol -1F6B9 ; fully-qualified # 🚹 men’s room -1F6BA ; fully-qualified # 🚺 women’s room -1F6BB ; fully-qualified # 🚻 restroom -1F6BC ; fully-qualified # 🚼 baby symbol -1F6BE ; fully-qualified # 🚾 water closet -1F6C2 ; fully-qualified # 🛂 passport control -1F6C3 ; fully-qualified # 🛃 customs -1F6C4 ; fully-qualified # 🛄 baggage claim -1F6C5 ; fully-qualified # 🛅 left luggage - -# subgroup: warning -26A0 FE0F ; fully-qualified # ⚠️ warning -26A0 ; non-fully-qualified # ⚠ warning -1F6B8 ; fully-qualified # 🚸 children crossing -26D4 ; fully-qualified # ⛔ no entry -1F6AB ; fully-qualified # 🚫 prohibited -1F6B3 ; fully-qualified # 🚳 no bicycles -1F6AD ; fully-qualified # 🚭 no smoking -1F6AF ; fully-qualified # 🚯 no littering -1F6B1 ; fully-qualified # 🚱 non-potable water -1F6B7 ; fully-qualified # 🚷 no pedestrians -1F4F5 ; fully-qualified # 📵 no mobile phones -1F51E ; fully-qualified # 🔞 no one under eighteen -2622 FE0F ; fully-qualified # ☢️ radioactive -2622 ; non-fully-qualified # ☢ radioactive -2623 FE0F ; fully-qualified # ☣️ biohazard -2623 ; non-fully-qualified # ☣ biohazard - -# subgroup: arrow -2B06 FE0F ; fully-qualified # ⬆️ up arrow -2B06 ; non-fully-qualified # ⬆ up arrow -2197 FE0F ; fully-qualified # ↗️ up-right arrow -2197 ; non-fully-qualified # ↗ up-right arrow -27A1 FE0F ; fully-qualified # ➡️ right arrow -27A1 ; non-fully-qualified # ➡ right arrow -2198 FE0F ; fully-qualified # ↘️ down-right arrow -2198 ; non-fully-qualified # ↘ down-right arrow -2B07 FE0F ; fully-qualified # ⬇️ down arrow -2B07 ; non-fully-qualified # ⬇ down arrow -2199 FE0F ; fully-qualified # ↙️ down-left arrow -2199 ; non-fully-qualified # ↙ down-left arrow -2B05 FE0F ; fully-qualified # ⬅️ left arrow -2B05 ; non-fully-qualified # ⬅ left arrow -2196 FE0F ; fully-qualified # ↖️ up-left arrow -2196 ; non-fully-qualified # ↖ up-left arrow -2195 FE0F ; fully-qualified # ↕️ up-down arrow -2195 ; non-fully-qualified # ↕ up-down arrow -2194 FE0F ; fully-qualified # ↔️ left-right arrow -2194 ; non-fully-qualified # ↔ left-right arrow -21A9 FE0F ; fully-qualified # ↩️ right arrow curving left -21A9 ; non-fully-qualified # ↩ right arrow curving left -21AA FE0F ; fully-qualified # ↪️ left arrow curving right -21AA ; non-fully-qualified # ↪ left arrow curving right -2934 FE0F ; fully-qualified # ⤴️ right arrow curving up -2934 ; non-fully-qualified # ⤴ right arrow curving up -2935 FE0F ; fully-qualified # ⤵️ right arrow curving down -2935 ; non-fully-qualified # ⤵ right arrow curving down -1F503 ; fully-qualified # 🔃 clockwise vertical arrows -1F504 ; fully-qualified # 🔄 counterclockwise arrows button -1F519 ; fully-qualified # 🔙 BACK arrow -1F51A ; fully-qualified # 🔚 END arrow -1F51B ; fully-qualified # 🔛 ON! arrow -1F51C ; fully-qualified # 🔜 SOON arrow -1F51D ; fully-qualified # 🔝 TOP arrow - -# subgroup: religion -1F6D0 ; fully-qualified # 🛐 place of worship -269B FE0F ; fully-qualified # ⚛️ atom symbol -269B ; non-fully-qualified # ⚛ atom symbol -1F549 FE0F ; fully-qualified # 🕉️ om -1F549 ; non-fully-qualified # 🕉 om -2721 FE0F ; fully-qualified # ✡️ star of David -2721 ; non-fully-qualified # ✡ star of David -2638 FE0F ; fully-qualified # ☸️ wheel of dharma -2638 ; non-fully-qualified # ☸ wheel of dharma -262F FE0F ; fully-qualified # ☯️ yin yang -262F ; non-fully-qualified # ☯ yin yang -271D FE0F ; fully-qualified # ✝️ latin cross -271D ; non-fully-qualified # ✝ latin cross -2626 FE0F ; fully-qualified # ☦️ orthodox cross -2626 ; non-fully-qualified # ☦ orthodox cross -262A FE0F ; fully-qualified # ☪️ star and crescent -262A ; non-fully-qualified # ☪ star and crescent -262E FE0F ; fully-qualified # ☮️ peace symbol -262E ; non-fully-qualified # ☮ peace symbol -1F54E ; fully-qualified # 🕎 menorah -1F52F ; fully-qualified # 🔯 dotted six-pointed star - -# subgroup: zodiac -2648 ; fully-qualified # ♈ Aries -2649 ; fully-qualified # ♉ Taurus -264A ; fully-qualified # ♊ Gemini -264B ; fully-qualified # ♋ Cancer -264C ; fully-qualified # ♌ Leo -264D ; fully-qualified # ♍ Virgo -264E ; fully-qualified # ♎ Libra -264F ; fully-qualified # ♏ Scorpio -2650 ; fully-qualified # ♐ Sagittarius -2651 ; fully-qualified # ♑ Capricorn -2652 ; fully-qualified # ♒ Aquarius -2653 ; fully-qualified # ♓ Pisces -26CE ; fully-qualified # ⛎ Ophiuchus - -# subgroup: av-symbol -1F500 ; fully-qualified # 🔀 shuffle tracks button -1F501 ; fully-qualified # 🔁 repeat button -1F502 ; fully-qualified # 🔂 repeat single button -25B6 FE0F ; fully-qualified # ▶️ play button -25B6 ; non-fully-qualified # ▶ play button -23E9 ; fully-qualified # ⏩ fast-forward button -23ED FE0F ; fully-qualified # ⏭️ next track button -23ED ; non-fully-qualified # ⏭ next track button -23EF FE0F ; fully-qualified # ⏯️ play or pause button -23EF ; non-fully-qualified # ⏯ play or pause button -25C0 FE0F ; fully-qualified # ◀️ reverse button -25C0 ; non-fully-qualified # ◀ reverse button -23EA ; fully-qualified # ⏪ fast reverse button -23EE FE0F ; fully-qualified # ⏮️ last track button -23EE ; non-fully-qualified # ⏮ last track button -1F53C ; fully-qualified # 🔼 upwards button -23EB ; fully-qualified # ⏫ fast up button -1F53D ; fully-qualified # 🔽 downwards button -23EC ; fully-qualified # ⏬ fast down button -23F8 FE0F ; fully-qualified # ⏸️ pause button -23F8 ; non-fully-qualified # ⏸ pause button -23F9 FE0F ; fully-qualified # ⏹️ stop button -23F9 ; non-fully-qualified # ⏹ stop button -23FA FE0F ; fully-qualified # ⏺️ record button -23FA ; non-fully-qualified # ⏺ record button -23CF FE0F ; fully-qualified # ⏏️ eject button -23CF ; non-fully-qualified # ⏏ eject button -1F3A6 ; fully-qualified # 🎦 cinema -1F505 ; fully-qualified # 🔅 dim button -1F506 ; fully-qualified # 🔆 bright button -1F4F6 ; fully-qualified # 📶 antenna bars -1F4F3 ; fully-qualified # 📳 vibration mode -1F4F4 ; fully-qualified # 📴 mobile phone off - -# subgroup: other-symbol -2640 FE0F ; fully-qualified # ♀️ female sign -2640 ; non-fully-qualified # ♀ female sign -2642 FE0F ; fully-qualified # ♂️ male sign -2642 ; non-fully-qualified # ♂ male sign -2695 FE0F ; fully-qualified # ⚕️ medical symbol -2695 ; non-fully-qualified # ⚕ medical symbol -267E FE0F ; fully-qualified # ♾️ infinity -267E ; non-fully-qualified # ♾ infinity -267B FE0F ; fully-qualified # ♻️ recycling symbol -267B ; non-fully-qualified # ♻ recycling symbol -269C FE0F ; fully-qualified # ⚜️ fleur-de-lis -269C ; non-fully-qualified # ⚜ fleur-de-lis -1F531 ; fully-qualified # 🔱 trident emblem -1F4DB ; fully-qualified # 📛 name badge -1F530 ; fully-qualified # 🔰 Japanese symbol for beginner -2B55 ; fully-qualified # ⭕ heavy large circle -2705 ; fully-qualified # ✅ white heavy check mark -2611 FE0F ; fully-qualified # ☑️ ballot box with check -2611 ; non-fully-qualified # ☑ ballot box with check -2714 FE0F ; fully-qualified # ✔️ heavy check mark -2714 ; non-fully-qualified # ✔ heavy check mark -2716 FE0F ; fully-qualified # ✖️ heavy multiplication x -2716 ; non-fully-qualified # ✖ heavy multiplication x -274C ; fully-qualified # ❌ cross mark -274E ; fully-qualified # ❎ cross mark button -2795 ; fully-qualified # ➕ heavy plus sign -2796 ; fully-qualified # ➖ heavy minus sign -2797 ; fully-qualified # ➗ heavy division sign -27B0 ; fully-qualified # ➰ curly loop -27BF ; fully-qualified # ➿ double curly loop -303D FE0F ; fully-qualified # 〽️ part alternation mark -303D ; non-fully-qualified # 〽 part alternation mark -2733 FE0F ; fully-qualified # ✳️ eight-spoked asterisk -2733 ; non-fully-qualified # ✳ eight-spoked asterisk -2734 FE0F ; fully-qualified # ✴️ eight-pointed star -2734 ; non-fully-qualified # ✴ eight-pointed star -2747 FE0F ; fully-qualified # ❇️ sparkle -2747 ; non-fully-qualified # ❇ sparkle -203C FE0F ; fully-qualified # ‼️ double exclamation mark -203C ; non-fully-qualified # ‼ double exclamation mark -2049 FE0F ; fully-qualified # ⁉️ exclamation question mark -2049 ; non-fully-qualified # ⁉ exclamation question mark -2753 ; fully-qualified # ❓ question mark -2754 ; fully-qualified # ❔ white question mark -2755 ; fully-qualified # ❕ white exclamation mark -2757 ; fully-qualified # ❗ exclamation mark -3030 FE0F ; fully-qualified # 〰️ wavy dash -3030 ; non-fully-qualified # 〰 wavy dash -00A9 FE0F ; fully-qualified # ©️ copyright -00A9 ; non-fully-qualified # © copyright -00AE FE0F ; fully-qualified # ®️ registered -00AE ; non-fully-qualified # ® registered -2122 FE0F ; fully-qualified # ™️ trade mark -2122 ; non-fully-qualified # ™ trade mark - -# subgroup: keycap -0023 FE0F 20E3 ; fully-qualified # #️⃣ keycap: # -0023 20E3 ; non-fully-qualified # #⃣ keycap: # -002A FE0F 20E3 ; fully-qualified # *️⃣ keycap: * -002A 20E3 ; non-fully-qualified # *⃣ keycap: * -0030 FE0F 20E3 ; fully-qualified # 0️⃣ keycap: 0 -0030 20E3 ; non-fully-qualified # 0⃣ keycap: 0 -0031 FE0F 20E3 ; fully-qualified # 1️⃣ keycap: 1 -0031 20E3 ; non-fully-qualified # 1⃣ keycap: 1 -0032 FE0F 20E3 ; fully-qualified # 2️⃣ keycap: 2 -0032 20E3 ; non-fully-qualified # 2⃣ keycap: 2 -0033 FE0F 20E3 ; fully-qualified # 3️⃣ keycap: 3 -0033 20E3 ; non-fully-qualified # 3⃣ keycap: 3 -0034 FE0F 20E3 ; fully-qualified # 4️⃣ keycap: 4 -0034 20E3 ; non-fully-qualified # 4⃣ keycap: 4 -0035 FE0F 20E3 ; fully-qualified # 5️⃣ keycap: 5 -0035 20E3 ; non-fully-qualified # 5⃣ keycap: 5 -0036 FE0F 20E3 ; fully-qualified # 6️⃣ keycap: 6 -0036 20E3 ; non-fully-qualified # 6⃣ keycap: 6 -0037 FE0F 20E3 ; fully-qualified # 7️⃣ keycap: 7 -0037 20E3 ; non-fully-qualified # 7⃣ keycap: 7 -0038 FE0F 20E3 ; fully-qualified # 8️⃣ keycap: 8 -0038 20E3 ; non-fully-qualified # 8⃣ keycap: 8 -0039 FE0F 20E3 ; fully-qualified # 9️⃣ keycap: 9 -0039 20E3 ; non-fully-qualified # 9⃣ keycap: 9 -1F51F ; fully-qualified # 🔟 keycap: 10 - -# subgroup: alphanum -1F4AF ; fully-qualified # 💯 hundred points -1F520 ; fully-qualified # 🔠 input latin uppercase -1F521 ; fully-qualified # 🔡 input latin lowercase -1F522 ; fully-qualified # 🔢 input numbers -1F523 ; fully-qualified # 🔣 input symbols -1F524 ; fully-qualified # 🔤 input latin letters -1F170 FE0F ; fully-qualified # 🅰️ A button (blood type) -1F170 ; non-fully-qualified # 🅰 A button (blood type) -1F18E ; fully-qualified # 🆎 AB button (blood type) -1F171 FE0F ; fully-qualified # 🅱️ B button (blood type) -1F171 ; non-fully-qualified # 🅱 B button (blood type) -1F191 ; fully-qualified # 🆑 CL button -1F192 ; fully-qualified # 🆒 COOL button -1F193 ; fully-qualified # 🆓 FREE button -2139 FE0F ; fully-qualified # ℹ️ information -2139 ; non-fully-qualified # ℹ information -1F194 ; fully-qualified # 🆔 ID button -24C2 FE0F ; fully-qualified # Ⓜ️ circled M -24C2 ; non-fully-qualified # Ⓜ circled M -1F195 ; fully-qualified # 🆕 NEW button -1F196 ; fully-qualified # 🆖 NG button -1F17E FE0F ; fully-qualified # 🅾️ O button (blood type) -1F17E ; non-fully-qualified # 🅾 O button (blood type) -1F197 ; fully-qualified # 🆗 OK button -1F17F FE0F ; fully-qualified # 🅿️ P button -1F17F ; non-fully-qualified # 🅿 P button -1F198 ; fully-qualified # 🆘 SOS button -1F199 ; fully-qualified # 🆙 UP! button -1F19A ; fully-qualified # 🆚 VS button -1F201 ; fully-qualified # 🈁 Japanese “here” button -1F202 FE0F ; fully-qualified # 🈂️ Japanese “service charge” button -1F202 ; non-fully-qualified # 🈂 Japanese “service charge” button -1F237 FE0F ; fully-qualified # 🈷️ Japanese “monthly amount” button -1F237 ; non-fully-qualified # 🈷 Japanese “monthly amount” button -1F236 ; fully-qualified # 🈶 Japanese “not free of charge” button -1F22F ; fully-qualified # 🈯 Japanese “reserved” button -1F250 ; fully-qualified # 🉐 Japanese “bargain” button -1F239 ; fully-qualified # 🈹 Japanese “discount” button -1F21A ; fully-qualified # 🈚 Japanese “free of charge” button -1F232 ; fully-qualified # 🈲 Japanese “prohibited” button -1F251 ; fully-qualified # 🉑 Japanese “acceptable” button -1F238 ; fully-qualified # 🈸 Japanese “application” button -1F234 ; fully-qualified # 🈴 Japanese “passing grade” button -1F233 ; fully-qualified # 🈳 Japanese “vacancy” button -3297 FE0F ; fully-qualified # ㊗️ Japanese “congratulations” button -3297 ; non-fully-qualified # ㊗ Japanese “congratulations” button -3299 FE0F ; fully-qualified # ㊙️ Japanese “secret” button -3299 ; non-fully-qualified # ㊙ Japanese “secret” button -1F23A ; fully-qualified # 🈺 Japanese “open for business” button -1F235 ; fully-qualified # 🈵 Japanese “no vacancy” button - -# subgroup: geometric -25AA FE0F ; fully-qualified # ▪️ black small square -25AA ; non-fully-qualified # ▪ black small square -25AB FE0F ; fully-qualified # ▫️ white small square -25AB ; non-fully-qualified # ▫ white small square -25FB FE0F ; fully-qualified # ◻️ white medium square -25FB ; non-fully-qualified # ◻ white medium square -25FC FE0F ; fully-qualified # ◼️ black medium square -25FC ; non-fully-qualified # ◼ black medium square -25FD ; fully-qualified # ◽ white medium-small square -25FE ; fully-qualified # ◾ black medium-small square -2B1B ; fully-qualified # ⬛ black large square -2B1C ; fully-qualified # ⬜ white large square -1F536 ; fully-qualified # 🔶 large orange diamond -1F537 ; fully-qualified # 🔷 large blue diamond -1F538 ; fully-qualified # 🔸 small orange diamond -1F539 ; fully-qualified # 🔹 small blue diamond -1F53A ; fully-qualified # 🔺 red triangle pointed up -1F53B ; fully-qualified # 🔻 red triangle pointed down -1F4A0 ; fully-qualified # 💠 diamond with a dot -1F518 ; fully-qualified # 🔘 radio button -1F532 ; fully-qualified # 🔲 black square button -1F533 ; fully-qualified # 🔳 white square button -26AA ; fully-qualified # ⚪ white circle -26AB ; fully-qualified # ⚫ black circle -1F534 ; fully-qualified # 🔴 red circle -1F535 ; fully-qualified # 🔵 blue circle - -# Symbols subtotal: 286 -# Symbols subtotal: 286 w/o modifiers - -# group: Flags - -# subgroup: flag -1F3C1 ; fully-qualified # 🏁 chequered flag -1F6A9 ; fully-qualified # 🚩 triangular flag -1F38C ; fully-qualified # 🎌 crossed flags -1F3F4 ; fully-qualified # 🏴 black flag -1F3F3 FE0F ; fully-qualified # 🏳️ white flag -1F3F3 ; non-fully-qualified # 🏳 white flag -1F3F3 FE0F 200D 1F308 ; fully-qualified # 🏳️‍🌈 rainbow flag -1F3F3 200D 1F308 ; non-fully-qualified # 🏳‍🌈 rainbow flag -1F3F4 200D 2620 FE0F ; fully-qualified # 🏴‍☠️ pirate flag -1F3F4 200D 2620 ; non-fully-qualified # 🏴‍☠ pirate flag - -# subgroup: country-flag -1F1E6 1F1E8 ; fully-qualified # 🇦🇨 Ascension Island -1F1E6 1F1E9 ; fully-qualified # 🇦🇩 Andorra -1F1E6 1F1EA ; fully-qualified # 🇦🇪 United Arab Emirates -1F1E6 1F1EB ; fully-qualified # 🇦🇫 Afghanistan -1F1E6 1F1EC ; fully-qualified # 🇦🇬 Antigua & Barbuda -1F1E6 1F1EE ; fully-qualified # 🇦🇮 Anguilla -1F1E6 1F1F1 ; fully-qualified # 🇦🇱 Albania -1F1E6 1F1F2 ; fully-qualified # 🇦🇲 Armenia -1F1E6 1F1F4 ; fully-qualified # 🇦🇴 Angola -1F1E6 1F1F6 ; fully-qualified # 🇦🇶 Antarctica -1F1E6 1F1F7 ; fully-qualified # 🇦🇷 Argentina -1F1E6 1F1F8 ; fully-qualified # 🇦🇸 American Samoa -1F1E6 1F1F9 ; fully-qualified # 🇦🇹 Austria -1F1E6 1F1FA ; fully-qualified # 🇦🇺 Australia -1F1E6 1F1FC ; fully-qualified # 🇦🇼 Aruba -1F1E6 1F1FD ; fully-qualified # 🇦🇽 Åland Islands -1F1E6 1F1FF ; fully-qualified # 🇦🇿 Azerbaijan -1F1E7 1F1E6 ; fully-qualified # 🇧🇦 Bosnia & Herzegovina -1F1E7 1F1E7 ; fully-qualified # 🇧🇧 Barbados -1F1E7 1F1E9 ; fully-qualified # 🇧🇩 Bangladesh -1F1E7 1F1EA ; fully-qualified # 🇧🇪 Belgium -1F1E7 1F1EB ; fully-qualified # 🇧🇫 Burkina Faso -1F1E7 1F1EC ; fully-qualified # 🇧🇬 Bulgaria -1F1E7 1F1ED ; fully-qualified # 🇧🇭 Bahrain -1F1E7 1F1EE ; fully-qualified # 🇧🇮 Burundi -1F1E7 1F1EF ; fully-qualified # 🇧🇯 Benin -1F1E7 1F1F1 ; fully-qualified # 🇧🇱 St. Barthélemy -1F1E7 1F1F2 ; fully-qualified # 🇧🇲 Bermuda -1F1E7 1F1F3 ; fully-qualified # 🇧🇳 Brunei -1F1E7 1F1F4 ; fully-qualified # 🇧🇴 Bolivia -1F1E7 1F1F6 ; fully-qualified # 🇧🇶 Caribbean Netherlands -1F1E7 1F1F7 ; fully-qualified # 🇧🇷 Brazil -1F1E7 1F1F8 ; fully-qualified # 🇧🇸 Bahamas -1F1E7 1F1F9 ; fully-qualified # 🇧🇹 Bhutan -1F1E7 1F1FB ; fully-qualified # 🇧🇻 Bouvet Island -1F1E7 1F1FC ; fully-qualified # 🇧🇼 Botswana -1F1E7 1F1FE ; fully-qualified # 🇧🇾 Belarus -1F1E7 1F1FF ; fully-qualified # 🇧🇿 Belize -1F1E8 1F1E6 ; fully-qualified # 🇨🇦 Canada -1F1E8 1F1E8 ; fully-qualified # 🇨🇨 Cocos (Keeling) Islands -1F1E8 1F1E9 ; fully-qualified # 🇨🇩 Congo - Kinshasa -1F1E8 1F1EB ; fully-qualified # 🇨🇫 Central African Republic -1F1E8 1F1EC ; fully-qualified # 🇨🇬 Congo - Brazzaville -1F1E8 1F1ED ; fully-qualified # 🇨🇭 Switzerland -1F1E8 1F1EE ; fully-qualified # 🇨🇮 Côte d’Ivoire -1F1E8 1F1F0 ; fully-qualified # 🇨🇰 Cook Islands -1F1E8 1F1F1 ; fully-qualified # 🇨🇱 Chile -1F1E8 1F1F2 ; fully-qualified # 🇨🇲 Cameroon -1F1E8 1F1F3 ; fully-qualified # 🇨🇳 China -1F1E8 1F1F4 ; fully-qualified # 🇨🇴 Colombia -1F1E8 1F1F5 ; fully-qualified # 🇨🇵 Clipperton Island -1F1E8 1F1F7 ; fully-qualified # 🇨🇷 Costa Rica -1F1E8 1F1FA ; fully-qualified # 🇨🇺 Cuba -1F1E8 1F1FB ; fully-qualified # 🇨🇻 Cape Verde -1F1E8 1F1FC ; fully-qualified # 🇨🇼 Curaçao -1F1E8 1F1FD ; fully-qualified # 🇨🇽 Christmas Island -1F1E8 1F1FE ; fully-qualified # 🇨🇾 Cyprus -1F1E8 1F1FF ; fully-qualified # 🇨🇿 Czechia -1F1E9 1F1EA ; fully-qualified # 🇩🇪 Germany -1F1E9 1F1EC ; fully-qualified # 🇩🇬 Diego Garcia -1F1E9 1F1EF ; fully-qualified # 🇩🇯 Djibouti -1F1E9 1F1F0 ; fully-qualified # 🇩🇰 Denmark -1F1E9 1F1F2 ; fully-qualified # 🇩🇲 Dominica -1F1E9 1F1F4 ; fully-qualified # 🇩🇴 Dominican Republic -1F1E9 1F1FF ; fully-qualified # 🇩🇿 Algeria -1F1EA 1F1E6 ; fully-qualified # 🇪🇦 Ceuta & Melilla -1F1EA 1F1E8 ; fully-qualified # 🇪🇨 Ecuador -1F1EA 1F1EA ; fully-qualified # 🇪🇪 Estonia -1F1EA 1F1EC ; fully-qualified # 🇪🇬 Egypt -1F1EA 1F1ED ; fully-qualified # 🇪🇭 Western Sahara -1F1EA 1F1F7 ; fully-qualified # 🇪🇷 Eritrea -1F1EA 1F1F8 ; fully-qualified # 🇪🇸 Spain -1F1EA 1F1F9 ; fully-qualified # 🇪🇹 Ethiopia -1F1EA 1F1FA ; fully-qualified # 🇪🇺 European Union -1F1EB 1F1EE ; fully-qualified # 🇫🇮 Finland -1F1EB 1F1EF ; fully-qualified # 🇫🇯 Fiji -1F1EB 1F1F0 ; fully-qualified # 🇫🇰 Falkland Islands -1F1EB 1F1F2 ; fully-qualified # 🇫🇲 Micronesia -1F1EB 1F1F4 ; fully-qualified # 🇫🇴 Faroe Islands -1F1EB 1F1F7 ; fully-qualified # 🇫🇷 France -1F1EC 1F1E6 ; fully-qualified # 🇬🇦 Gabon -1F1EC 1F1E7 ; fully-qualified # 🇬🇧 United Kingdom -1F1EC 1F1E9 ; fully-qualified # 🇬🇩 Grenada -1F1EC 1F1EA ; fully-qualified # 🇬🇪 Georgia -1F1EC 1F1EB ; fully-qualified # 🇬🇫 French Guiana -1F1EC 1F1EC ; fully-qualified # 🇬🇬 Guernsey -1F1EC 1F1ED ; fully-qualified # 🇬🇭 Ghana -1F1EC 1F1EE ; fully-qualified # 🇬🇮 Gibraltar -1F1EC 1F1F1 ; fully-qualified # 🇬🇱 Greenland -1F1EC 1F1F2 ; fully-qualified # 🇬🇲 Gambia -1F1EC 1F1F3 ; fully-qualified # 🇬🇳 Guinea -1F1EC 1F1F5 ; fully-qualified # 🇬🇵 Guadeloupe -1F1EC 1F1F6 ; fully-qualified # 🇬🇶 Equatorial Guinea -1F1EC 1F1F7 ; fully-qualified # 🇬🇷 Greece -1F1EC 1F1F8 ; fully-qualified # 🇬🇸 South Georgia & South Sandwich Islands -1F1EC 1F1F9 ; fully-qualified # 🇬🇹 Guatemala -1F1EC 1F1FA ; fully-qualified # 🇬🇺 Guam -1F1EC 1F1FC ; fully-qualified # 🇬🇼 Guinea-Bissau -1F1EC 1F1FE ; fully-qualified # 🇬🇾 Guyana -1F1ED 1F1F0 ; fully-qualified # 🇭🇰 Hong Kong SAR China -1F1ED 1F1F2 ; fully-qualified # 🇭🇲 Heard & McDonald Islands -1F1ED 1F1F3 ; fully-qualified # 🇭🇳 Honduras -1F1ED 1F1F7 ; fully-qualified # 🇭🇷 Croatia -1F1ED 1F1F9 ; fully-qualified # 🇭🇹 Haiti -1F1ED 1F1FA ; fully-qualified # 🇭🇺 Hungary -1F1EE 1F1E8 ; fully-qualified # 🇮🇨 Canary Islands -1F1EE 1F1E9 ; fully-qualified # 🇮🇩 Indonesia -1F1EE 1F1EA ; fully-qualified # 🇮🇪 Ireland -1F1EE 1F1F1 ; fully-qualified # 🇮🇱 Israel -1F1EE 1F1F2 ; fully-qualified # 🇮🇲 Isle of Man -1F1EE 1F1F3 ; fully-qualified # 🇮🇳 India -1F1EE 1F1F4 ; fully-qualified # 🇮🇴 British Indian Ocean Territory -1F1EE 1F1F6 ; fully-qualified # 🇮🇶 Iraq -1F1EE 1F1F7 ; fully-qualified # 🇮🇷 Iran -1F1EE 1F1F8 ; fully-qualified # 🇮🇸 Iceland -1F1EE 1F1F9 ; fully-qualified # 🇮🇹 Italy -1F1EF 1F1EA ; fully-qualified # 🇯🇪 Jersey -1F1EF 1F1F2 ; fully-qualified # 🇯🇲 Jamaica -1F1EF 1F1F4 ; fully-qualified # 🇯🇴 Jordan -1F1EF 1F1F5 ; fully-qualified # 🇯🇵 Japan -1F1F0 1F1EA ; fully-qualified # 🇰🇪 Kenya -1F1F0 1F1EC ; fully-qualified # 🇰🇬 Kyrgyzstan -1F1F0 1F1ED ; fully-qualified # 🇰🇭 Cambodia -1F1F0 1F1EE ; fully-qualified # 🇰🇮 Kiribati -1F1F0 1F1F2 ; fully-qualified # 🇰🇲 Comoros -1F1F0 1F1F3 ; fully-qualified # 🇰🇳 St. Kitts & Nevis -1F1F0 1F1F5 ; fully-qualified # 🇰🇵 North Korea -1F1F0 1F1F7 ; fully-qualified # 🇰🇷 South Korea -1F1F0 1F1FC ; fully-qualified # 🇰🇼 Kuwait -1F1F0 1F1FE ; fully-qualified # 🇰🇾 Cayman Islands -1F1F0 1F1FF ; fully-qualified # 🇰🇿 Kazakhstan -1F1F1 1F1E6 ; fully-qualified # 🇱🇦 Laos -1F1F1 1F1E7 ; fully-qualified # 🇱🇧 Lebanon -1F1F1 1F1E8 ; fully-qualified # 🇱🇨 St. Lucia -1F1F1 1F1EE ; fully-qualified # 🇱🇮 Liechtenstein -1F1F1 1F1F0 ; fully-qualified # 🇱🇰 Sri Lanka -1F1F1 1F1F7 ; fully-qualified # 🇱🇷 Liberia -1F1F1 1F1F8 ; fully-qualified # 🇱🇸 Lesotho -1F1F1 1F1F9 ; fully-qualified # 🇱🇹 Lithuania -1F1F1 1F1FA ; fully-qualified # 🇱🇺 Luxembourg -1F1F1 1F1FB ; fully-qualified # 🇱🇻 Latvia -1F1F1 1F1FE ; fully-qualified # 🇱🇾 Libya -1F1F2 1F1E6 ; fully-qualified # 🇲🇦 Morocco -1F1F2 1F1E8 ; fully-qualified # 🇲🇨 Monaco -1F1F2 1F1E9 ; fully-qualified # 🇲🇩 Moldova -1F1F2 1F1EA ; fully-qualified # 🇲🇪 Montenegro -1F1F2 1F1EB ; fully-qualified # 🇲🇫 St. Martin -1F1F2 1F1EC ; fully-qualified # 🇲🇬 Madagascar -1F1F2 1F1ED ; fully-qualified # 🇲🇭 Marshall Islands -1F1F2 1F1F0 ; fully-qualified # 🇲🇰 Macedonia -1F1F2 1F1F1 ; fully-qualified # 🇲🇱 Mali -1F1F2 1F1F2 ; fully-qualified # 🇲🇲 Myanmar (Burma) -1F1F2 1F1F3 ; fully-qualified # 🇲🇳 Mongolia -1F1F2 1F1F4 ; fully-qualified # 🇲🇴 Macau SAR China -1F1F2 1F1F5 ; fully-qualified # 🇲🇵 Northern Mariana Islands -1F1F2 1F1F6 ; fully-qualified # 🇲🇶 Martinique -1F1F2 1F1F7 ; fully-qualified # 🇲🇷 Mauritania -1F1F2 1F1F8 ; fully-qualified # 🇲🇸 Montserrat -1F1F2 1F1F9 ; fully-qualified # 🇲🇹 Malta -1F1F2 1F1FA ; fully-qualified # 🇲🇺 Mauritius -1F1F2 1F1FB ; fully-qualified # 🇲🇻 Maldives -1F1F2 1F1FC ; fully-qualified # 🇲🇼 Malawi -1F1F2 1F1FD ; fully-qualified # 🇲🇽 Mexico -1F1F2 1F1FE ; fully-qualified # 🇲🇾 Malaysia -1F1F2 1F1FF ; fully-qualified # 🇲🇿 Mozambique -1F1F3 1F1E6 ; fully-qualified # 🇳🇦 Namibia -1F1F3 1F1E8 ; fully-qualified # 🇳🇨 New Caledonia -1F1F3 1F1EA ; fully-qualified # 🇳🇪 Niger -1F1F3 1F1EB ; fully-qualified # 🇳🇫 Norfolk Island -1F1F3 1F1EC ; fully-qualified # 🇳🇬 Nigeria -1F1F3 1F1EE ; fully-qualified # 🇳🇮 Nicaragua -1F1F3 1F1F1 ; fully-qualified # 🇳🇱 Netherlands -1F1F3 1F1F4 ; fully-qualified # 🇳🇴 Norway -1F1F3 1F1F5 ; fully-qualified # 🇳🇵 Nepal -1F1F3 1F1F7 ; fully-qualified # 🇳🇷 Nauru -1F1F3 1F1FA ; fully-qualified # 🇳🇺 Niue -1F1F3 1F1FF ; fully-qualified # 🇳🇿 New Zealand -1F1F4 1F1F2 ; fully-qualified # 🇴🇲 Oman -1F1F5 1F1E6 ; fully-qualified # 🇵🇦 Panama -1F1F5 1F1EA ; fully-qualified # 🇵🇪 Peru -1F1F5 1F1EB ; fully-qualified # 🇵🇫 French Polynesia -1F1F5 1F1EC ; fully-qualified # 🇵🇬 Papua New Guinea -1F1F5 1F1ED ; fully-qualified # 🇵🇭 Philippines -1F1F5 1F1F0 ; fully-qualified # 🇵🇰 Pakistan -1F1F5 1F1F1 ; fully-qualified # 🇵🇱 Poland -1F1F5 1F1F2 ; fully-qualified # 🇵🇲 St. Pierre & Miquelon -1F1F5 1F1F3 ; fully-qualified # 🇵🇳 Pitcairn Islands -1F1F5 1F1F7 ; fully-qualified # 🇵🇷 Puerto Rico -1F1F5 1F1F8 ; fully-qualified # 🇵🇸 Palestinian Territories -1F1F5 1F1F9 ; fully-qualified # 🇵🇹 Portugal -1F1F5 1F1FC ; fully-qualified # 🇵🇼 Palau -1F1F5 1F1FE ; fully-qualified # 🇵🇾 Paraguay -1F1F6 1F1E6 ; fully-qualified # 🇶🇦 Qatar -1F1F7 1F1EA ; fully-qualified # 🇷🇪 Réunion -1F1F7 1F1F4 ; fully-qualified # 🇷🇴 Romania -1F1F7 1F1F8 ; fully-qualified # 🇷🇸 Serbia -1F1F7 1F1FA ; fully-qualified # 🇷🇺 Russia -1F1F7 1F1FC ; fully-qualified # 🇷🇼 Rwanda -1F1F8 1F1E6 ; fully-qualified # 🇸🇦 Saudi Arabia -1F1F8 1F1E7 ; fully-qualified # 🇸🇧 Solomon Islands -1F1F8 1F1E8 ; fully-qualified # 🇸🇨 Seychelles -1F1F8 1F1E9 ; fully-qualified # 🇸🇩 Sudan -1F1F8 1F1EA ; fully-qualified # 🇸🇪 Sweden -1F1F8 1F1EC ; fully-qualified # 🇸🇬 Singapore -1F1F8 1F1ED ; fully-qualified # 🇸🇭 St. Helena -1F1F8 1F1EE ; fully-qualified # 🇸🇮 Slovenia -1F1F8 1F1EF ; fully-qualified # 🇸🇯 Svalbard & Jan Mayen -1F1F8 1F1F0 ; fully-qualified # 🇸🇰 Slovakia -1F1F8 1F1F1 ; fully-qualified # 🇸🇱 Sierra Leone -1F1F8 1F1F2 ; fully-qualified # 🇸🇲 San Marino -1F1F8 1F1F3 ; fully-qualified # 🇸🇳 Senegal -1F1F8 1F1F4 ; fully-qualified # 🇸🇴 Somalia -1F1F8 1F1F7 ; fully-qualified # 🇸🇷 Suriname -1F1F8 1F1F8 ; fully-qualified # 🇸🇸 South Sudan -1F1F8 1F1F9 ; fully-qualified # 🇸🇹 São Tomé & Príncipe -1F1F8 1F1FB ; fully-qualified # 🇸🇻 El Salvador -1F1F8 1F1FD ; fully-qualified # 🇸🇽 Sint Maarten -1F1F8 1F1FE ; fully-qualified # 🇸🇾 Syria -1F1F8 1F1FF ; fully-qualified # 🇸🇿 Swaziland -1F1F9 1F1E6 ; fully-qualified # 🇹🇦 Tristan da Cunha -1F1F9 1F1E8 ; fully-qualified # 🇹🇨 Turks & Caicos Islands -1F1F9 1F1E9 ; fully-qualified # 🇹🇩 Chad -1F1F9 1F1EB ; fully-qualified # 🇹🇫 French Southern Territories -1F1F9 1F1EC ; fully-qualified # 🇹🇬 Togo -1F1F9 1F1ED ; fully-qualified # 🇹🇭 Thailand -1F1F9 1F1EF ; fully-qualified # 🇹🇯 Tajikistan -1F1F9 1F1F0 ; fully-qualified # 🇹🇰 Tokelau -1F1F9 1F1F1 ; fully-qualified # 🇹🇱 Timor-Leste -1F1F9 1F1F2 ; fully-qualified # 🇹🇲 Turkmenistan -1F1F9 1F1F3 ; fully-qualified # 🇹🇳 Tunisia -1F1F9 1F1F4 ; fully-qualified # 🇹🇴 Tonga -1F1F9 1F1F7 ; fully-qualified # 🇹🇷 Turkey -1F1F9 1F1F9 ; fully-qualified # 🇹🇹 Trinidad & Tobago -1F1F9 1F1FB ; fully-qualified # 🇹🇻 Tuvalu -1F1F9 1F1FC ; fully-qualified # 🇹🇼 Taiwan -1F1F9 1F1FF ; fully-qualified # 🇹🇿 Tanzania -1F1FA 1F1E6 ; fully-qualified # 🇺🇦 Ukraine -1F1FA 1F1EC ; fully-qualified # 🇺🇬 Uganda -1F1FA 1F1F2 ; fully-qualified # 🇺🇲 U.S. Outlying Islands -1F1FA 1F1F3 ; fully-qualified # 🇺🇳 United Nations -1F1FA 1F1F8 ; fully-qualified # 🇺🇸 United States -1F1FA 1F1FE ; fully-qualified # 🇺🇾 Uruguay -1F1FA 1F1FF ; fully-qualified # 🇺🇿 Uzbekistan -1F1FB 1F1E6 ; fully-qualified # 🇻🇦 Vatican City -1F1FB 1F1E8 ; fully-qualified # 🇻🇨 St. Vincent & Grenadines -1F1FB 1F1EA ; fully-qualified # 🇻🇪 Venezuela -1F1FB 1F1EC ; fully-qualified # 🇻🇬 British Virgin Islands -1F1FB 1F1EE ; fully-qualified # 🇻🇮 U.S. Virgin Islands -1F1FB 1F1F3 ; fully-qualified # 🇻🇳 Vietnam -1F1FB 1F1FA ; fully-qualified # 🇻🇺 Vanuatu -1F1FC 1F1EB ; fully-qualified # 🇼🇫 Wallis & Futuna -1F1FC 1F1F8 ; fully-qualified # 🇼🇸 Samoa -1F1FD 1F1F0 ; fully-qualified # 🇽🇰 Kosovo -1F1FE 1F1EA ; fully-qualified # 🇾🇪 Yemen -1F1FE 1F1F9 ; fully-qualified # 🇾🇹 Mayotte -1F1FF 1F1E6 ; fully-qualified # 🇿🇦 South Africa -1F1FF 1F1F2 ; fully-qualified # 🇿🇲 Zambia -1F1FF 1F1FC ; fully-qualified # 🇿🇼 Zimbabwe - -# subgroup: subdivision-flag -1F3F4 E0067 E0062 E0065 E006E E0067 E007F ; fully-qualified # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 England -1F3F4 E0067 E0062 E0073 E0063 E0074 E007F ; fully-qualified # 🏴󠁧󠁢󠁳󠁣󠁴󠁿 Scotland -1F3F4 E0067 E0062 E0077 E006C E0073 E007F ; fully-qualified # 🏴󠁧󠁢󠁷󠁬󠁳󠁿 Wales - -# Flags subtotal: 271 -# Flags subtotal: 271 w/o modifiers - -#EOF \ No newline at end of file +# emoji-test.txt +# Date: 2022-08-12, 20:24:39 GMT +# © 2022 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see https://www.unicode.org/terms_of_use.html +# +# Emoji Keyboard/Display Test Data for UTS #51 +# Version: 15.0 +# +# For documentation and usage, see https://www.unicode.org/reports/tr51 +# +# This file provides data for testing which emoji forms should be in keyboards and which should also be displayed/processed. +# Format: code points; status # emoji name +# Code points — list of one or more hex code points, separated by spaces +# Status +# component — an Emoji_Component, +# excluding Regional_Indicators, ASCII, and non-Emoji. +# fully-qualified — a fully-qualified emoji (see ED-18 in UTS #51), +# excluding Emoji_Component +# minimally-qualified — a minimally-qualified emoji (see ED-18a in UTS #51) +# unqualified — a unqualified emoji (See ED-19 in UTS #51) +# Notes: +# • This includes the emoji components that need emoji presentation (skin tone and hair) +# when isolated, but omits the components that need not have an emoji +# presentation when isolated. +# • The RGI set is covered by the listed fully-qualified emoji. +# • The listed minimally-qualified and unqualified cover all cases where an +# element of the RGI set is missing one or more emoji presentation selectors. +# • The file is in CLDR order, not codepoint order. This is recommended (but not required!) for keyboard palettes. +# • The groups and subgroups are illustrative. See the Emoji Order chart for more information. + + +# group: Smileys & Emotion + +# subgroup: face-smiling +1F600 ; fully-qualified # 😀 E1.0 grinning face +1F603 ; fully-qualified # 😃 E0.6 grinning face with big eyes +1F604 ; fully-qualified # 😄 E0.6 grinning face with smiling eyes +1F601 ; fully-qualified # 😁 E0.6 beaming face with smiling eyes +1F606 ; fully-qualified # 😆 E0.6 grinning squinting face +1F605 ; fully-qualified # 😅 E0.6 grinning face with sweat +1F923 ; fully-qualified # 🤣 E3.0 rolling on the floor laughing +1F602 ; fully-qualified # 😂 E0.6 face with tears of joy +1F642 ; fully-qualified # 🙂 E1.0 slightly smiling face +1F643 ; fully-qualified # 🙃 E1.0 upside-down face +1FAE0 ; fully-qualified # 🫠 E14.0 melting face +1F609 ; fully-qualified # 😉 E0.6 winking face +1F60A ; fully-qualified # 😊 E0.6 smiling face with smiling eyes +1F607 ; fully-qualified # 😇 E1.0 smiling face with halo + +# subgroup: face-affection +1F970 ; fully-qualified # 🥰 E11.0 smiling face with hearts +1F60D ; fully-qualified # 😍 E0.6 smiling face with heart-eyes +1F929 ; fully-qualified # 🤩 E5.0 star-struck +1F618 ; fully-qualified # 😘 E0.6 face blowing a kiss +1F617 ; fully-qualified # 😗 E1.0 kissing face +263A FE0F ; fully-qualified # ☺️ E0.6 smiling face +263A ; unqualified # ☺ E0.6 smiling face +1F61A ; fully-qualified # 😚 E0.6 kissing face with closed eyes +1F619 ; fully-qualified # 😙 E1.0 kissing face with smiling eyes +1F972 ; fully-qualified # 🥲 E13.0 smiling face with tear + +# subgroup: face-tongue +1F60B ; fully-qualified # 😋 E0.6 face savoring food +1F61B ; fully-qualified # 😛 E1.0 face with tongue +1F61C ; fully-qualified # 😜 E0.6 winking face with tongue +1F92A ; fully-qualified # 🤪 E5.0 zany face +1F61D ; fully-qualified # 😝 E0.6 squinting face with tongue +1F911 ; fully-qualified # 🤑 E1.0 money-mouth face + +# subgroup: face-hand +1F917 ; fully-qualified # 🤗 E1.0 smiling face with open hands +1F92D ; fully-qualified # 🤭 E5.0 face with hand over mouth +1FAE2 ; fully-qualified # 🫢 E14.0 face with open eyes and hand over mouth +1FAE3 ; fully-qualified # 🫣 E14.0 face with peeking eye +1F92B ; fully-qualified # 🤫 E5.0 shushing face +1F914 ; fully-qualified # 🤔 E1.0 thinking face +1FAE1 ; fully-qualified # 🫡 E14.0 saluting face + +# subgroup: face-neutral-skeptical +1F910 ; fully-qualified # 🤐 E1.0 zipper-mouth face +1F928 ; fully-qualified # 🤨 E5.0 face with raised eyebrow +1F610 ; fully-qualified # 😐 E0.7 neutral face +1F611 ; fully-qualified # 😑 E1.0 expressionless face +1F636 ; fully-qualified # 😶 E1.0 face without mouth +1FAE5 ; fully-qualified # 🫥 E14.0 dotted line face +1F636 200D 1F32B FE0F ; fully-qualified # 😶‍🌫️ E13.1 face in clouds +1F636 200D 1F32B ; minimally-qualified # 😶‍🌫 E13.1 face in clouds +1F60F ; fully-qualified # 😏 E0.6 smirking face +1F612 ; fully-qualified # 😒 E0.6 unamused face +1F644 ; fully-qualified # 🙄 E1.0 face with rolling eyes +1F62C ; fully-qualified # 😬 E1.0 grimacing face +1F62E 200D 1F4A8 ; fully-qualified # 😮‍💨 E13.1 face exhaling +1F925 ; fully-qualified # 🤥 E3.0 lying face +1FAE8 ; fully-qualified # 🫨 E15.0 shaking face + +# subgroup: face-sleepy +1F60C ; fully-qualified # 😌 E0.6 relieved face +1F614 ; fully-qualified # 😔 E0.6 pensive face +1F62A ; fully-qualified # 😪 E0.6 sleepy face +1F924 ; fully-qualified # 🤤 E3.0 drooling face +1F634 ; fully-qualified # 😴 E1.0 sleeping face + +# subgroup: face-unwell +1F637 ; fully-qualified # 😷 E0.6 face with medical mask +1F912 ; fully-qualified # 🤒 E1.0 face with thermometer +1F915 ; fully-qualified # 🤕 E1.0 face with head-bandage +1F922 ; fully-qualified # 🤢 E3.0 nauseated face +1F92E ; fully-qualified # 🤮 E5.0 face vomiting +1F927 ; fully-qualified # 🤧 E3.0 sneezing face +1F975 ; fully-qualified # 🥵 E11.0 hot face +1F976 ; fully-qualified # 🥶 E11.0 cold face +1F974 ; fully-qualified # 🥴 E11.0 woozy face +1F635 ; fully-qualified # 😵 E0.6 face with crossed-out eyes +1F635 200D 1F4AB ; fully-qualified # 😵‍💫 E13.1 face with spiral eyes +1F92F ; fully-qualified # 🤯 E5.0 exploding head + +# subgroup: face-hat +1F920 ; fully-qualified # 🤠 E3.0 cowboy hat face +1F973 ; fully-qualified # 🥳 E11.0 partying face +1F978 ; fully-qualified # 🥸 E13.0 disguised face + +# subgroup: face-glasses +1F60E ; fully-qualified # 😎 E1.0 smiling face with sunglasses +1F913 ; fully-qualified # 🤓 E1.0 nerd face +1F9D0 ; fully-qualified # 🧐 E5.0 face with monocle + +# subgroup: face-concerned +1F615 ; fully-qualified # 😕 E1.0 confused face +1FAE4 ; fully-qualified # 🫤 E14.0 face with diagonal mouth +1F61F ; fully-qualified # 😟 E1.0 worried face +1F641 ; fully-qualified # 🙁 E1.0 slightly frowning face +2639 FE0F ; fully-qualified # ☹️ E0.7 frowning face +2639 ; unqualified # ☹ E0.7 frowning face +1F62E ; fully-qualified # 😮 E1.0 face with open mouth +1F62F ; fully-qualified # 😯 E1.0 hushed face +1F632 ; fully-qualified # 😲 E0.6 astonished face +1F633 ; fully-qualified # 😳 E0.6 flushed face +1F97A ; fully-qualified # 🥺 E11.0 pleading face +1F979 ; fully-qualified # 🥹 E14.0 face holding back tears +1F626 ; fully-qualified # 😦 E1.0 frowning face with open mouth +1F627 ; fully-qualified # 😧 E1.0 anguished face +1F628 ; fully-qualified # 😨 E0.6 fearful face +1F630 ; fully-qualified # 😰 E0.6 anxious face with sweat +1F625 ; fully-qualified # 😥 E0.6 sad but relieved face +1F622 ; fully-qualified # 😢 E0.6 crying face +1F62D ; fully-qualified # 😭 E0.6 loudly crying face +1F631 ; fully-qualified # 😱 E0.6 face screaming in fear +1F616 ; fully-qualified # 😖 E0.6 confounded face +1F623 ; fully-qualified # 😣 E0.6 persevering face +1F61E ; fully-qualified # 😞 E0.6 disappointed face +1F613 ; fully-qualified # 😓 E0.6 downcast face with sweat +1F629 ; fully-qualified # 😩 E0.6 weary face +1F62B ; fully-qualified # 😫 E0.6 tired face +1F971 ; fully-qualified # 🥱 E12.0 yawning face + +# subgroup: face-negative +1F624 ; fully-qualified # 😤 E0.6 face with steam from nose +1F621 ; fully-qualified # 😡 E0.6 enraged face +1F620 ; fully-qualified # 😠 E0.6 angry face +1F92C ; fully-qualified # 🤬 E5.0 face with symbols on mouth +1F608 ; fully-qualified # 😈 E1.0 smiling face with horns +1F47F ; fully-qualified # 👿 E0.6 angry face with horns +1F480 ; fully-qualified # 💀 E0.6 skull +2620 FE0F ; fully-qualified # ☠️ E1.0 skull and crossbones +2620 ; unqualified # ☠ E1.0 skull and crossbones + +# subgroup: face-costume +1F4A9 ; fully-qualified # 💩 E0.6 pile of poo +1F921 ; fully-qualified # 🤡 E3.0 clown face +1F479 ; fully-qualified # 👹 E0.6 ogre +1F47A ; fully-qualified # 👺 E0.6 goblin +1F47B ; fully-qualified # 👻 E0.6 ghost +1F47D ; fully-qualified # 👽 E0.6 alien +1F47E ; fully-qualified # 👾 E0.6 alien monster +1F916 ; fully-qualified # 🤖 E1.0 robot + +# subgroup: cat-face +1F63A ; fully-qualified # 😺 E0.6 grinning cat +1F638 ; fully-qualified # 😸 E0.6 grinning cat with smiling eyes +1F639 ; fully-qualified # 😹 E0.6 cat with tears of joy +1F63B ; fully-qualified # 😻 E0.6 smiling cat with heart-eyes +1F63C ; fully-qualified # 😼 E0.6 cat with wry smile +1F63D ; fully-qualified # 😽 E0.6 kissing cat +1F640 ; fully-qualified # 🙀 E0.6 weary cat +1F63F ; fully-qualified # 😿 E0.6 crying cat +1F63E ; fully-qualified # 😾 E0.6 pouting cat + +# subgroup: monkey-face +1F648 ; fully-qualified # 🙈 E0.6 see-no-evil monkey +1F649 ; fully-qualified # 🙉 E0.6 hear-no-evil monkey +1F64A ; fully-qualified # 🙊 E0.6 speak-no-evil monkey + +# subgroup: heart +1F48C ; fully-qualified # 💌 E0.6 love letter +1F498 ; fully-qualified # 💘 E0.6 heart with arrow +1F49D ; fully-qualified # 💝 E0.6 heart with ribbon +1F496 ; fully-qualified # 💖 E0.6 sparkling heart +1F497 ; fully-qualified # 💗 E0.6 growing heart +1F493 ; fully-qualified # 💓 E0.6 beating heart +1F49E ; fully-qualified # 💞 E0.6 revolving hearts +1F495 ; fully-qualified # 💕 E0.6 two hearts +1F49F ; fully-qualified # 💟 E0.6 heart decoration +2763 FE0F ; fully-qualified # ❣️ E1.0 heart exclamation +2763 ; unqualified # ❣ E1.0 heart exclamation +1F494 ; fully-qualified # 💔 E0.6 broken heart +2764 FE0F 200D 1F525 ; fully-qualified # ❤️‍🔥 E13.1 heart on fire +2764 200D 1F525 ; unqualified # ❤‍🔥 E13.1 heart on fire +2764 FE0F 200D 1FA79 ; fully-qualified # ❤️‍🩹 E13.1 mending heart +2764 200D 1FA79 ; unqualified # ❤‍🩹 E13.1 mending heart +2764 FE0F ; fully-qualified # ❤️ E0.6 red heart +2764 ; unqualified # ❤ E0.6 red heart +1FA77 ; fully-qualified # 🩷 E15.0 pink heart +1F9E1 ; fully-qualified # 🧡 E5.0 orange heart +1F49B ; fully-qualified # 💛 E0.6 yellow heart +1F49A ; fully-qualified # 💚 E0.6 green heart +1F499 ; fully-qualified # 💙 E0.6 blue heart +1FA75 ; fully-qualified # 🩵 E15.0 light blue heart +1F49C ; fully-qualified # 💜 E0.6 purple heart +1F90E ; fully-qualified # 🤎 E12.0 brown heart +1F5A4 ; fully-qualified # 🖤 E3.0 black heart +1FA76 ; fully-qualified # 🩶 E15.0 grey heart +1F90D ; fully-qualified # 🤍 E12.0 white heart + +# subgroup: emotion +1F48B ; fully-qualified # 💋 E0.6 kiss mark +1F4AF ; fully-qualified # 💯 E0.6 hundred points +1F4A2 ; fully-qualified # 💢 E0.6 anger symbol +1F4A5 ; fully-qualified # 💥 E0.6 collision +1F4AB ; fully-qualified # 💫 E0.6 dizzy +1F4A6 ; fully-qualified # 💦 E0.6 sweat droplets +1F4A8 ; fully-qualified # 💨 E0.6 dashing away +1F573 FE0F ; fully-qualified # 🕳️ E0.7 hole +1F573 ; unqualified # 🕳 E0.7 hole +1F4AC ; fully-qualified # 💬 E0.6 speech balloon +1F441 FE0F 200D 1F5E8 FE0F ; fully-qualified # 👁️‍🗨️ E2.0 eye in speech bubble +1F441 200D 1F5E8 FE0F ; unqualified # 👁‍🗨️ E2.0 eye in speech bubble +1F441 FE0F 200D 1F5E8 ; minimally-qualified # 👁️‍🗨 E2.0 eye in speech bubble +1F441 200D 1F5E8 ; unqualified # 👁‍🗨 E2.0 eye in speech bubble +1F5E8 FE0F ; fully-qualified # 🗨️ E2.0 left speech bubble +1F5E8 ; unqualified # 🗨 E2.0 left speech bubble +1F5EF FE0F ; fully-qualified # 🗯️ E0.7 right anger bubble +1F5EF ; unqualified # 🗯 E0.7 right anger bubble +1F4AD ; fully-qualified # 💭 E1.0 thought balloon +1F4A4 ; fully-qualified # 💤 E0.6 ZZZ + +# Smileys & Emotion subtotal: 180 +# Smileys & Emotion subtotal: 180 w/o modifiers + +# group: People & Body + +# subgroup: hand-fingers-open +1F44B ; fully-qualified # 👋 E0.6 waving hand +1F44B 1F3FB ; fully-qualified # 👋🏻 E1.0 waving hand: light skin tone +1F44B 1F3FC ; fully-qualified # 👋🏼 E1.0 waving hand: medium-light skin tone +1F44B 1F3FD ; fully-qualified # 👋🏽 E1.0 waving hand: medium skin tone +1F44B 1F3FE ; fully-qualified # 👋🏾 E1.0 waving hand: medium-dark skin tone +1F44B 1F3FF ; fully-qualified # 👋🏿 E1.0 waving hand: dark skin tone +1F91A ; fully-qualified # 🤚 E3.0 raised back of hand +1F91A 1F3FB ; fully-qualified # 🤚🏻 E3.0 raised back of hand: light skin tone +1F91A 1F3FC ; fully-qualified # 🤚🏼 E3.0 raised back of hand: medium-light skin tone +1F91A 1F3FD ; fully-qualified # 🤚🏽 E3.0 raised back of hand: medium skin tone +1F91A 1F3FE ; fully-qualified # 🤚🏾 E3.0 raised back of hand: medium-dark skin tone +1F91A 1F3FF ; fully-qualified # 🤚🏿 E3.0 raised back of hand: dark skin tone +1F590 FE0F ; fully-qualified # 🖐️ E0.7 hand with fingers splayed +1F590 ; unqualified # 🖐 E0.7 hand with fingers splayed +1F590 1F3FB ; fully-qualified # 🖐🏻 E1.0 hand with fingers splayed: light skin tone +1F590 1F3FC ; fully-qualified # 🖐🏼 E1.0 hand with fingers splayed: medium-light skin tone +1F590 1F3FD ; fully-qualified # 🖐🏽 E1.0 hand with fingers splayed: medium skin tone +1F590 1F3FE ; fully-qualified # 🖐🏾 E1.0 hand with fingers splayed: medium-dark skin tone +1F590 1F3FF ; fully-qualified # 🖐🏿 E1.0 hand with fingers splayed: dark skin tone +270B ; fully-qualified # ✋ E0.6 raised hand +270B 1F3FB ; fully-qualified # ✋🏻 E1.0 raised hand: light skin tone +270B 1F3FC ; fully-qualified # ✋🏼 E1.0 raised hand: medium-light skin tone +270B 1F3FD ; fully-qualified # ✋🏽 E1.0 raised hand: medium skin tone +270B 1F3FE ; fully-qualified # ✋🏾 E1.0 raised hand: medium-dark skin tone +270B 1F3FF ; fully-qualified # ✋🏿 E1.0 raised hand: dark skin tone +1F596 ; fully-qualified # 🖖 E1.0 vulcan salute +1F596 1F3FB ; fully-qualified # 🖖🏻 E1.0 vulcan salute: light skin tone +1F596 1F3FC ; fully-qualified # 🖖🏼 E1.0 vulcan salute: medium-light skin tone +1F596 1F3FD ; fully-qualified # 🖖🏽 E1.0 vulcan salute: medium skin tone +1F596 1F3FE ; fully-qualified # 🖖🏾 E1.0 vulcan salute: medium-dark skin tone +1F596 1F3FF ; fully-qualified # 🖖🏿 E1.0 vulcan salute: dark skin tone +1FAF1 ; fully-qualified # 🫱 E14.0 rightwards hand +1FAF1 1F3FB ; fully-qualified # 🫱🏻 E14.0 rightwards hand: light skin tone +1FAF1 1F3FC ; fully-qualified # 🫱🏼 E14.0 rightwards hand: medium-light skin tone +1FAF1 1F3FD ; fully-qualified # 🫱🏽 E14.0 rightwards hand: medium skin tone +1FAF1 1F3FE ; fully-qualified # 🫱🏾 E14.0 rightwards hand: medium-dark skin tone +1FAF1 1F3FF ; fully-qualified # 🫱🏿 E14.0 rightwards hand: dark skin tone +1FAF2 ; fully-qualified # 🫲 E14.0 leftwards hand +1FAF2 1F3FB ; fully-qualified # 🫲🏻 E14.0 leftwards hand: light skin tone +1FAF2 1F3FC ; fully-qualified # 🫲🏼 E14.0 leftwards hand: medium-light skin tone +1FAF2 1F3FD ; fully-qualified # 🫲🏽 E14.0 leftwards hand: medium skin tone +1FAF2 1F3FE ; fully-qualified # 🫲🏾 E14.0 leftwards hand: medium-dark skin tone +1FAF2 1F3FF ; fully-qualified # 🫲🏿 E14.0 leftwards hand: dark skin tone +1FAF3 ; fully-qualified # 🫳 E14.0 palm down hand +1FAF3 1F3FB ; fully-qualified # 🫳🏻 E14.0 palm down hand: light skin tone +1FAF3 1F3FC ; fully-qualified # 🫳🏼 E14.0 palm down hand: medium-light skin tone +1FAF3 1F3FD ; fully-qualified # 🫳🏽 E14.0 palm down hand: medium skin tone +1FAF3 1F3FE ; fully-qualified # 🫳🏾 E14.0 palm down hand: medium-dark skin tone +1FAF3 1F3FF ; fully-qualified # 🫳🏿 E14.0 palm down hand: dark skin tone +1FAF4 ; fully-qualified # 🫴 E14.0 palm up hand +1FAF4 1F3FB ; fully-qualified # 🫴🏻 E14.0 palm up hand: light skin tone +1FAF4 1F3FC ; fully-qualified # 🫴🏼 E14.0 palm up hand: medium-light skin tone +1FAF4 1F3FD ; fully-qualified # 🫴🏽 E14.0 palm up hand: medium skin tone +1FAF4 1F3FE ; fully-qualified # 🫴🏾 E14.0 palm up hand: medium-dark skin tone +1FAF4 1F3FF ; fully-qualified # 🫴🏿 E14.0 palm up hand: dark skin tone +1FAF7 ; fully-qualified # 🫷 E15.0 leftwards pushing hand +1FAF7 1F3FB ; fully-qualified # 🫷🏻 E15.0 leftwards pushing hand: light skin tone +1FAF7 1F3FC ; fully-qualified # 🫷🏼 E15.0 leftwards pushing hand: medium-light skin tone +1FAF7 1F3FD ; fully-qualified # 🫷🏽 E15.0 leftwards pushing hand: medium skin tone +1FAF7 1F3FE ; fully-qualified # 🫷🏾 E15.0 leftwards pushing hand: medium-dark skin tone +1FAF7 1F3FF ; fully-qualified # 🫷🏿 E15.0 leftwards pushing hand: dark skin tone +1FAF8 ; fully-qualified # 🫸 E15.0 rightwards pushing hand +1FAF8 1F3FB ; fully-qualified # 🫸🏻 E15.0 rightwards pushing hand: light skin tone +1FAF8 1F3FC ; fully-qualified # 🫸🏼 E15.0 rightwards pushing hand: medium-light skin tone +1FAF8 1F3FD ; fully-qualified # 🫸🏽 E15.0 rightwards pushing hand: medium skin tone +1FAF8 1F3FE ; fully-qualified # 🫸🏾 E15.0 rightwards pushing hand: medium-dark skin tone +1FAF8 1F3FF ; fully-qualified # 🫸🏿 E15.0 rightwards pushing hand: dark skin tone + +# subgroup: hand-fingers-partial +1F44C ; fully-qualified # 👌 E0.6 OK hand +1F44C 1F3FB ; fully-qualified # 👌🏻 E1.0 OK hand: light skin tone +1F44C 1F3FC ; fully-qualified # 👌🏼 E1.0 OK hand: medium-light skin tone +1F44C 1F3FD ; fully-qualified # 👌🏽 E1.0 OK hand: medium skin tone +1F44C 1F3FE ; fully-qualified # 👌🏾 E1.0 OK hand: medium-dark skin tone +1F44C 1F3FF ; fully-qualified # 👌🏿 E1.0 OK hand: dark skin tone +1F90C ; fully-qualified # 🤌 E13.0 pinched fingers +1F90C 1F3FB ; fully-qualified # 🤌🏻 E13.0 pinched fingers: light skin tone +1F90C 1F3FC ; fully-qualified # 🤌🏼 E13.0 pinched fingers: medium-light skin tone +1F90C 1F3FD ; fully-qualified # 🤌🏽 E13.0 pinched fingers: medium skin tone +1F90C 1F3FE ; fully-qualified # 🤌🏾 E13.0 pinched fingers: medium-dark skin tone +1F90C 1F3FF ; fully-qualified # 🤌🏿 E13.0 pinched fingers: dark skin tone +1F90F ; fully-qualified # 🤏 E12.0 pinching hand +1F90F 1F3FB ; fully-qualified # 🤏🏻 E12.0 pinching hand: light skin tone +1F90F 1F3FC ; fully-qualified # 🤏🏼 E12.0 pinching hand: medium-light skin tone +1F90F 1F3FD ; fully-qualified # 🤏🏽 E12.0 pinching hand: medium skin tone +1F90F 1F3FE ; fully-qualified # 🤏🏾 E12.0 pinching hand: medium-dark skin tone +1F90F 1F3FF ; fully-qualified # 🤏🏿 E12.0 pinching hand: dark skin tone +270C FE0F ; fully-qualified # ✌️ E0.6 victory hand +270C ; unqualified # ✌ E0.6 victory hand +270C 1F3FB ; fully-qualified # ✌🏻 E1.0 victory hand: light skin tone +270C 1F3FC ; fully-qualified # ✌🏼 E1.0 victory hand: medium-light skin tone +270C 1F3FD ; fully-qualified # ✌🏽 E1.0 victory hand: medium skin tone +270C 1F3FE ; fully-qualified # ✌🏾 E1.0 victory hand: medium-dark skin tone +270C 1F3FF ; fully-qualified # ✌🏿 E1.0 victory hand: dark skin tone +1F91E ; fully-qualified # 🤞 E3.0 crossed fingers +1F91E 1F3FB ; fully-qualified # 🤞🏻 E3.0 crossed fingers: light skin tone +1F91E 1F3FC ; fully-qualified # 🤞🏼 E3.0 crossed fingers: medium-light skin tone +1F91E 1F3FD ; fully-qualified # 🤞🏽 E3.0 crossed fingers: medium skin tone +1F91E 1F3FE ; fully-qualified # 🤞🏾 E3.0 crossed fingers: medium-dark skin tone +1F91E 1F3FF ; fully-qualified # 🤞🏿 E3.0 crossed fingers: dark skin tone +1FAF0 ; fully-qualified # 🫰 E14.0 hand with index finger and thumb crossed +1FAF0 1F3FB ; fully-qualified # 🫰🏻 E14.0 hand with index finger and thumb crossed: light skin tone +1FAF0 1F3FC ; fully-qualified # 🫰🏼 E14.0 hand with index finger and thumb crossed: medium-light skin tone +1FAF0 1F3FD ; fully-qualified # 🫰🏽 E14.0 hand with index finger and thumb crossed: medium skin tone +1FAF0 1F3FE ; fully-qualified # 🫰🏾 E14.0 hand with index finger and thumb crossed: medium-dark skin tone +1FAF0 1F3FF ; fully-qualified # 🫰🏿 E14.0 hand with index finger and thumb crossed: dark skin tone +1F91F ; fully-qualified # 🤟 E5.0 love-you gesture +1F91F 1F3FB ; fully-qualified # 🤟🏻 E5.0 love-you gesture: light skin tone +1F91F 1F3FC ; fully-qualified # 🤟🏼 E5.0 love-you gesture: medium-light skin tone +1F91F 1F3FD ; fully-qualified # 🤟🏽 E5.0 love-you gesture: medium skin tone +1F91F 1F3FE ; fully-qualified # 🤟🏾 E5.0 love-you gesture: medium-dark skin tone +1F91F 1F3FF ; fully-qualified # 🤟🏿 E5.0 love-you gesture: dark skin tone +1F918 ; fully-qualified # 🤘 E1.0 sign of the horns +1F918 1F3FB ; fully-qualified # 🤘🏻 E1.0 sign of the horns: light skin tone +1F918 1F3FC ; fully-qualified # 🤘🏼 E1.0 sign of the horns: medium-light skin tone +1F918 1F3FD ; fully-qualified # 🤘🏽 E1.0 sign of the horns: medium skin tone +1F918 1F3FE ; fully-qualified # 🤘🏾 E1.0 sign of the horns: medium-dark skin tone +1F918 1F3FF ; fully-qualified # 🤘🏿 E1.0 sign of the horns: dark skin tone +1F919 ; fully-qualified # 🤙 E3.0 call me hand +1F919 1F3FB ; fully-qualified # 🤙🏻 E3.0 call me hand: light skin tone +1F919 1F3FC ; fully-qualified # 🤙🏼 E3.0 call me hand: medium-light skin tone +1F919 1F3FD ; fully-qualified # 🤙🏽 E3.0 call me hand: medium skin tone +1F919 1F3FE ; fully-qualified # 🤙🏾 E3.0 call me hand: medium-dark skin tone +1F919 1F3FF ; fully-qualified # 🤙🏿 E3.0 call me hand: dark skin tone + +# subgroup: hand-single-finger +1F448 ; fully-qualified # 👈 E0.6 backhand index pointing left +1F448 1F3FB ; fully-qualified # 👈🏻 E1.0 backhand index pointing left: light skin tone +1F448 1F3FC ; fully-qualified # 👈🏼 E1.0 backhand index pointing left: medium-light skin tone +1F448 1F3FD ; fully-qualified # 👈🏽 E1.0 backhand index pointing left: medium skin tone +1F448 1F3FE ; fully-qualified # 👈🏾 E1.0 backhand index pointing left: medium-dark skin tone +1F448 1F3FF ; fully-qualified # 👈🏿 E1.0 backhand index pointing left: dark skin tone +1F449 ; fully-qualified # 👉 E0.6 backhand index pointing right +1F449 1F3FB ; fully-qualified # 👉🏻 E1.0 backhand index pointing right: light skin tone +1F449 1F3FC ; fully-qualified # 👉🏼 E1.0 backhand index pointing right: medium-light skin tone +1F449 1F3FD ; fully-qualified # 👉🏽 E1.0 backhand index pointing right: medium skin tone +1F449 1F3FE ; fully-qualified # 👉🏾 E1.0 backhand index pointing right: medium-dark skin tone +1F449 1F3FF ; fully-qualified # 👉🏿 E1.0 backhand index pointing right: dark skin tone +1F446 ; fully-qualified # 👆 E0.6 backhand index pointing up +1F446 1F3FB ; fully-qualified # 👆🏻 E1.0 backhand index pointing up: light skin tone +1F446 1F3FC ; fully-qualified # 👆🏼 E1.0 backhand index pointing up: medium-light skin tone +1F446 1F3FD ; fully-qualified # 👆🏽 E1.0 backhand index pointing up: medium skin tone +1F446 1F3FE ; fully-qualified # 👆🏾 E1.0 backhand index pointing up: medium-dark skin tone +1F446 1F3FF ; fully-qualified # 👆🏿 E1.0 backhand index pointing up: dark skin tone +1F595 ; fully-qualified # 🖕 E1.0 middle finger +1F595 1F3FB ; fully-qualified # 🖕🏻 E1.0 middle finger: light skin tone +1F595 1F3FC ; fully-qualified # 🖕🏼 E1.0 middle finger: medium-light skin tone +1F595 1F3FD ; fully-qualified # 🖕🏽 E1.0 middle finger: medium skin tone +1F595 1F3FE ; fully-qualified # 🖕🏾 E1.0 middle finger: medium-dark skin tone +1F595 1F3FF ; fully-qualified # 🖕🏿 E1.0 middle finger: dark skin tone +1F447 ; fully-qualified # 👇 E0.6 backhand index pointing down +1F447 1F3FB ; fully-qualified # 👇🏻 E1.0 backhand index pointing down: light skin tone +1F447 1F3FC ; fully-qualified # 👇🏼 E1.0 backhand index pointing down: medium-light skin tone +1F447 1F3FD ; fully-qualified # 👇🏽 E1.0 backhand index pointing down: medium skin tone +1F447 1F3FE ; fully-qualified # 👇🏾 E1.0 backhand index pointing down: medium-dark skin tone +1F447 1F3FF ; fully-qualified # 👇🏿 E1.0 backhand index pointing down: dark skin tone +261D FE0F ; fully-qualified # ☝️ E0.6 index pointing up +261D ; unqualified # ☝ E0.6 index pointing up +261D 1F3FB ; fully-qualified # ☝🏻 E1.0 index pointing up: light skin tone +261D 1F3FC ; fully-qualified # ☝🏼 E1.0 index pointing up: medium-light skin tone +261D 1F3FD ; fully-qualified # ☝🏽 E1.0 index pointing up: medium skin tone +261D 1F3FE ; fully-qualified # ☝🏾 E1.0 index pointing up: medium-dark skin tone +261D 1F3FF ; fully-qualified # ☝🏿 E1.0 index pointing up: dark skin tone +1FAF5 ; fully-qualified # 🫵 E14.0 index pointing at the viewer +1FAF5 1F3FB ; fully-qualified # 🫵🏻 E14.0 index pointing at the viewer: light skin tone +1FAF5 1F3FC ; fully-qualified # 🫵🏼 E14.0 index pointing at the viewer: medium-light skin tone +1FAF5 1F3FD ; fully-qualified # 🫵🏽 E14.0 index pointing at the viewer: medium skin tone +1FAF5 1F3FE ; fully-qualified # 🫵🏾 E14.0 index pointing at the viewer: medium-dark skin tone +1FAF5 1F3FF ; fully-qualified # 🫵🏿 E14.0 index pointing at the viewer: dark skin tone + +# subgroup: hand-fingers-closed +1F44D ; fully-qualified # 👍 E0.6 thumbs up +1F44D 1F3FB ; fully-qualified # 👍🏻 E1.0 thumbs up: light skin tone +1F44D 1F3FC ; fully-qualified # 👍🏼 E1.0 thumbs up: medium-light skin tone +1F44D 1F3FD ; fully-qualified # 👍🏽 E1.0 thumbs up: medium skin tone +1F44D 1F3FE ; fully-qualified # 👍🏾 E1.0 thumbs up: medium-dark skin tone +1F44D 1F3FF ; fully-qualified # 👍🏿 E1.0 thumbs up: dark skin tone +1F44E ; fully-qualified # 👎 E0.6 thumbs down +1F44E 1F3FB ; fully-qualified # 👎🏻 E1.0 thumbs down: light skin tone +1F44E 1F3FC ; fully-qualified # 👎🏼 E1.0 thumbs down: medium-light skin tone +1F44E 1F3FD ; fully-qualified # 👎🏽 E1.0 thumbs down: medium skin tone +1F44E 1F3FE ; fully-qualified # 👎🏾 E1.0 thumbs down: medium-dark skin tone +1F44E 1F3FF ; fully-qualified # 👎🏿 E1.0 thumbs down: dark skin tone +270A ; fully-qualified # ✊ E0.6 raised fist +270A 1F3FB ; fully-qualified # ✊🏻 E1.0 raised fist: light skin tone +270A 1F3FC ; fully-qualified # ✊🏼 E1.0 raised fist: medium-light skin tone +270A 1F3FD ; fully-qualified # ✊🏽 E1.0 raised fist: medium skin tone +270A 1F3FE ; fully-qualified # ✊🏾 E1.0 raised fist: medium-dark skin tone +270A 1F3FF ; fully-qualified # ✊🏿 E1.0 raised fist: dark skin tone +1F44A ; fully-qualified # 👊 E0.6 oncoming fist +1F44A 1F3FB ; fully-qualified # 👊🏻 E1.0 oncoming fist: light skin tone +1F44A 1F3FC ; fully-qualified # 👊🏼 E1.0 oncoming fist: medium-light skin tone +1F44A 1F3FD ; fully-qualified # 👊🏽 E1.0 oncoming fist: medium skin tone +1F44A 1F3FE ; fully-qualified # 👊🏾 E1.0 oncoming fist: medium-dark skin tone +1F44A 1F3FF ; fully-qualified # 👊🏿 E1.0 oncoming fist: dark skin tone +1F91B ; fully-qualified # 🤛 E3.0 left-facing fist +1F91B 1F3FB ; fully-qualified # 🤛🏻 E3.0 left-facing fist: light skin tone +1F91B 1F3FC ; fully-qualified # 🤛🏼 E3.0 left-facing fist: medium-light skin tone +1F91B 1F3FD ; fully-qualified # 🤛🏽 E3.0 left-facing fist: medium skin tone +1F91B 1F3FE ; fully-qualified # 🤛🏾 E3.0 left-facing fist: medium-dark skin tone +1F91B 1F3FF ; fully-qualified # 🤛🏿 E3.0 left-facing fist: dark skin tone +1F91C ; fully-qualified # 🤜 E3.0 right-facing fist +1F91C 1F3FB ; fully-qualified # 🤜🏻 E3.0 right-facing fist: light skin tone +1F91C 1F3FC ; fully-qualified # 🤜🏼 E3.0 right-facing fist: medium-light skin tone +1F91C 1F3FD ; fully-qualified # 🤜🏽 E3.0 right-facing fist: medium skin tone +1F91C 1F3FE ; fully-qualified # 🤜🏾 E3.0 right-facing fist: medium-dark skin tone +1F91C 1F3FF ; fully-qualified # 🤜🏿 E3.0 right-facing fist: dark skin tone + +# subgroup: hands +1F44F ; fully-qualified # 👏 E0.6 clapping hands +1F44F 1F3FB ; fully-qualified # 👏🏻 E1.0 clapping hands: light skin tone +1F44F 1F3FC ; fully-qualified # 👏🏼 E1.0 clapping hands: medium-light skin tone +1F44F 1F3FD ; fully-qualified # 👏🏽 E1.0 clapping hands: medium skin tone +1F44F 1F3FE ; fully-qualified # 👏🏾 E1.0 clapping hands: medium-dark skin tone +1F44F 1F3FF ; fully-qualified # 👏🏿 E1.0 clapping hands: dark skin tone +1F64C ; fully-qualified # 🙌 E0.6 raising hands +1F64C 1F3FB ; fully-qualified # 🙌🏻 E1.0 raising hands: light skin tone +1F64C 1F3FC ; fully-qualified # 🙌🏼 E1.0 raising hands: medium-light skin tone +1F64C 1F3FD ; fully-qualified # 🙌🏽 E1.0 raising hands: medium skin tone +1F64C 1F3FE ; fully-qualified # 🙌🏾 E1.0 raising hands: medium-dark skin tone +1F64C 1F3FF ; fully-qualified # 🙌🏿 E1.0 raising hands: dark skin tone +1FAF6 ; fully-qualified # 🫶 E14.0 heart hands +1FAF6 1F3FB ; fully-qualified # 🫶🏻 E14.0 heart hands: light skin tone +1FAF6 1F3FC ; fully-qualified # 🫶🏼 E14.0 heart hands: medium-light skin tone +1FAF6 1F3FD ; fully-qualified # 🫶🏽 E14.0 heart hands: medium skin tone +1FAF6 1F3FE ; fully-qualified # 🫶🏾 E14.0 heart hands: medium-dark skin tone +1FAF6 1F3FF ; fully-qualified # 🫶🏿 E14.0 heart hands: dark skin tone +1F450 ; fully-qualified # 👐 E0.6 open hands +1F450 1F3FB ; fully-qualified # 👐🏻 E1.0 open hands: light skin tone +1F450 1F3FC ; fully-qualified # 👐🏼 E1.0 open hands: medium-light skin tone +1F450 1F3FD ; fully-qualified # 👐🏽 E1.0 open hands: medium skin tone +1F450 1F3FE ; fully-qualified # 👐🏾 E1.0 open hands: medium-dark skin tone +1F450 1F3FF ; fully-qualified # 👐🏿 E1.0 open hands: dark skin tone +1F932 ; fully-qualified # 🤲 E5.0 palms up together +1F932 1F3FB ; fully-qualified # 🤲🏻 E5.0 palms up together: light skin tone +1F932 1F3FC ; fully-qualified # 🤲🏼 E5.0 palms up together: medium-light skin tone +1F932 1F3FD ; fully-qualified # 🤲🏽 E5.0 palms up together: medium skin tone +1F932 1F3FE ; fully-qualified # 🤲🏾 E5.0 palms up together: medium-dark skin tone +1F932 1F3FF ; fully-qualified # 🤲🏿 E5.0 palms up together: dark skin tone +1F91D ; fully-qualified # 🤝 E3.0 handshake +1F91D 1F3FB ; fully-qualified # 🤝🏻 E14.0 handshake: light skin tone +1F91D 1F3FC ; fully-qualified # 🤝🏼 E14.0 handshake: medium-light skin tone +1F91D 1F3FD ; fully-qualified # 🤝🏽 E14.0 handshake: medium skin tone +1F91D 1F3FE ; fully-qualified # 🤝🏾 E14.0 handshake: medium-dark skin tone +1F91D 1F3FF ; fully-qualified # 🤝🏿 E14.0 handshake: dark skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏻‍🫲🏼 E14.0 handshake: light skin tone, medium-light skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏻‍🫲🏽 E14.0 handshake: light skin tone, medium skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏻‍🫲🏾 E14.0 handshake: light skin tone, medium-dark skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏻‍🫲🏿 E14.0 handshake: light skin tone, dark skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏼‍🫲🏻 E14.0 handshake: medium-light skin tone, light skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏼‍🫲🏽 E14.0 handshake: medium-light skin tone, medium skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏼‍🫲🏾 E14.0 handshake: medium-light skin tone, medium-dark skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏼‍🫲🏿 E14.0 handshake: medium-light skin tone, dark skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏽‍🫲🏻 E14.0 handshake: medium skin tone, light skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏽‍🫲🏼 E14.0 handshake: medium skin tone, medium-light skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏽‍🫲🏾 E14.0 handshake: medium skin tone, medium-dark skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏽‍🫲🏿 E14.0 handshake: medium skin tone, dark skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏾‍🫲🏻 E14.0 handshake: medium-dark skin tone, light skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏾‍🫲🏼 E14.0 handshake: medium-dark skin tone, medium-light skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏾‍🫲🏽 E14.0 handshake: medium-dark skin tone, medium skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏾‍🫲🏿 E14.0 handshake: medium-dark skin tone, dark skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏿‍🫲🏻 E14.0 handshake: dark skin tone, light skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏿‍🫲🏼 E14.0 handshake: dark skin tone, medium-light skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏿‍🫲🏽 E14.0 handshake: dark skin tone, medium skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏿‍🫲🏾 E14.0 handshake: dark skin tone, medium-dark skin tone +1F64F ; fully-qualified # 🙏 E0.6 folded hands +1F64F 1F3FB ; fully-qualified # 🙏🏻 E1.0 folded hands: light skin tone +1F64F 1F3FC ; fully-qualified # 🙏🏼 E1.0 folded hands: medium-light skin tone +1F64F 1F3FD ; fully-qualified # 🙏🏽 E1.0 folded hands: medium skin tone +1F64F 1F3FE ; fully-qualified # 🙏🏾 E1.0 folded hands: medium-dark skin tone +1F64F 1F3FF ; fully-qualified # 🙏🏿 E1.0 folded hands: dark skin tone + +# subgroup: hand-prop +270D FE0F ; fully-qualified # ✍️ E0.7 writing hand +270D ; unqualified # ✍ E0.7 writing hand +270D 1F3FB ; fully-qualified # ✍🏻 E1.0 writing hand: light skin tone +270D 1F3FC ; fully-qualified # ✍🏼 E1.0 writing hand: medium-light skin tone +270D 1F3FD ; fully-qualified # ✍🏽 E1.0 writing hand: medium skin tone +270D 1F3FE ; fully-qualified # ✍🏾 E1.0 writing hand: medium-dark skin tone +270D 1F3FF ; fully-qualified # ✍🏿 E1.0 writing hand: dark skin tone +1F485 ; fully-qualified # 💅 E0.6 nail polish +1F485 1F3FB ; fully-qualified # 💅🏻 E1.0 nail polish: light skin tone +1F485 1F3FC ; fully-qualified # 💅🏼 E1.0 nail polish: medium-light skin tone +1F485 1F3FD ; fully-qualified # 💅🏽 E1.0 nail polish: medium skin tone +1F485 1F3FE ; fully-qualified # 💅🏾 E1.0 nail polish: medium-dark skin tone +1F485 1F3FF ; fully-qualified # 💅🏿 E1.0 nail polish: dark skin tone +1F933 ; fully-qualified # 🤳 E3.0 selfie +1F933 1F3FB ; fully-qualified # 🤳🏻 E3.0 selfie: light skin tone +1F933 1F3FC ; fully-qualified # 🤳🏼 E3.0 selfie: medium-light skin tone +1F933 1F3FD ; fully-qualified # 🤳🏽 E3.0 selfie: medium skin tone +1F933 1F3FE ; fully-qualified # 🤳🏾 E3.0 selfie: medium-dark skin tone +1F933 1F3FF ; fully-qualified # 🤳🏿 E3.0 selfie: dark skin tone + +# subgroup: body-parts +1F4AA ; fully-qualified # 💪 E0.6 flexed biceps +1F4AA 1F3FB ; fully-qualified # 💪🏻 E1.0 flexed biceps: light skin tone +1F4AA 1F3FC ; fully-qualified # 💪🏼 E1.0 flexed biceps: medium-light skin tone +1F4AA 1F3FD ; fully-qualified # 💪🏽 E1.0 flexed biceps: medium skin tone +1F4AA 1F3FE ; fully-qualified # 💪🏾 E1.0 flexed biceps: medium-dark skin tone +1F4AA 1F3FF ; fully-qualified # 💪🏿 E1.0 flexed biceps: dark skin tone +1F9BE ; fully-qualified # 🦾 E12.0 mechanical arm +1F9BF ; fully-qualified # 🦿 E12.0 mechanical leg +1F9B5 ; fully-qualified # 🦵 E11.0 leg +1F9B5 1F3FB ; fully-qualified # 🦵🏻 E11.0 leg: light skin tone +1F9B5 1F3FC ; fully-qualified # 🦵🏼 E11.0 leg: medium-light skin tone +1F9B5 1F3FD ; fully-qualified # 🦵🏽 E11.0 leg: medium skin tone +1F9B5 1F3FE ; fully-qualified # 🦵🏾 E11.0 leg: medium-dark skin tone +1F9B5 1F3FF ; fully-qualified # 🦵🏿 E11.0 leg: dark skin tone +1F9B6 ; fully-qualified # 🦶 E11.0 foot +1F9B6 1F3FB ; fully-qualified # 🦶🏻 E11.0 foot: light skin tone +1F9B6 1F3FC ; fully-qualified # 🦶🏼 E11.0 foot: medium-light skin tone +1F9B6 1F3FD ; fully-qualified # 🦶🏽 E11.0 foot: medium skin tone +1F9B6 1F3FE ; fully-qualified # 🦶🏾 E11.0 foot: medium-dark skin tone +1F9B6 1F3FF ; fully-qualified # 🦶🏿 E11.0 foot: dark skin tone +1F442 ; fully-qualified # 👂 E0.6 ear +1F442 1F3FB ; fully-qualified # 👂🏻 E1.0 ear: light skin tone +1F442 1F3FC ; fully-qualified # 👂🏼 E1.0 ear: medium-light skin tone +1F442 1F3FD ; fully-qualified # 👂🏽 E1.0 ear: medium skin tone +1F442 1F3FE ; fully-qualified # 👂🏾 E1.0 ear: medium-dark skin tone +1F442 1F3FF ; fully-qualified # 👂🏿 E1.0 ear: dark skin tone +1F9BB ; fully-qualified # 🦻 E12.0 ear with hearing aid +1F9BB 1F3FB ; fully-qualified # 🦻🏻 E12.0 ear with hearing aid: light skin tone +1F9BB 1F3FC ; fully-qualified # 🦻🏼 E12.0 ear with hearing aid: medium-light skin tone +1F9BB 1F3FD ; fully-qualified # 🦻🏽 E12.0 ear with hearing aid: medium skin tone +1F9BB 1F3FE ; fully-qualified # 🦻🏾 E12.0 ear with hearing aid: medium-dark skin tone +1F9BB 1F3FF ; fully-qualified # 🦻🏿 E12.0 ear with hearing aid: dark skin tone +1F443 ; fully-qualified # 👃 E0.6 nose +1F443 1F3FB ; fully-qualified # 👃🏻 E1.0 nose: light skin tone +1F443 1F3FC ; fully-qualified # 👃🏼 E1.0 nose: medium-light skin tone +1F443 1F3FD ; fully-qualified # 👃🏽 E1.0 nose: medium skin tone +1F443 1F3FE ; fully-qualified # 👃🏾 E1.0 nose: medium-dark skin tone +1F443 1F3FF ; fully-qualified # 👃🏿 E1.0 nose: dark skin tone +1F9E0 ; fully-qualified # 🧠 E5.0 brain +1FAC0 ; fully-qualified # 🫀 E13.0 anatomical heart +1FAC1 ; fully-qualified # 🫁 E13.0 lungs +1F9B7 ; fully-qualified # 🦷 E11.0 tooth +1F9B4 ; fully-qualified # 🦴 E11.0 bone +1F440 ; fully-qualified # 👀 E0.6 eyes +1F441 FE0F ; fully-qualified # 👁️ E0.7 eye +1F441 ; unqualified # 👁 E0.7 eye +1F445 ; fully-qualified # 👅 E0.6 tongue +1F444 ; fully-qualified # 👄 E0.6 mouth +1FAE6 ; fully-qualified # 🫦 E14.0 biting lip + +# subgroup: person +1F476 ; fully-qualified # 👶 E0.6 baby +1F476 1F3FB ; fully-qualified # 👶🏻 E1.0 baby: light skin tone +1F476 1F3FC ; fully-qualified # 👶🏼 E1.0 baby: medium-light skin tone +1F476 1F3FD ; fully-qualified # 👶🏽 E1.0 baby: medium skin tone +1F476 1F3FE ; fully-qualified # 👶🏾 E1.0 baby: medium-dark skin tone +1F476 1F3FF ; fully-qualified # 👶🏿 E1.0 baby: dark skin tone +1F9D2 ; fully-qualified # 🧒 E5.0 child +1F9D2 1F3FB ; fully-qualified # 🧒🏻 E5.0 child: light skin tone +1F9D2 1F3FC ; fully-qualified # 🧒🏼 E5.0 child: medium-light skin tone +1F9D2 1F3FD ; fully-qualified # 🧒🏽 E5.0 child: medium skin tone +1F9D2 1F3FE ; fully-qualified # 🧒🏾 E5.0 child: medium-dark skin tone +1F9D2 1F3FF ; fully-qualified # 🧒🏿 E5.0 child: dark skin tone +1F466 ; fully-qualified # 👦 E0.6 boy +1F466 1F3FB ; fully-qualified # 👦🏻 E1.0 boy: light skin tone +1F466 1F3FC ; fully-qualified # 👦🏼 E1.0 boy: medium-light skin tone +1F466 1F3FD ; fully-qualified # 👦🏽 E1.0 boy: medium skin tone +1F466 1F3FE ; fully-qualified # 👦🏾 E1.0 boy: medium-dark skin tone +1F466 1F3FF ; fully-qualified # 👦🏿 E1.0 boy: dark skin tone +1F467 ; fully-qualified # 👧 E0.6 girl +1F467 1F3FB ; fully-qualified # 👧🏻 E1.0 girl: light skin tone +1F467 1F3FC ; fully-qualified # 👧🏼 E1.0 girl: medium-light skin tone +1F467 1F3FD ; fully-qualified # 👧🏽 E1.0 girl: medium skin tone +1F467 1F3FE ; fully-qualified # 👧🏾 E1.0 girl: medium-dark skin tone +1F467 1F3FF ; fully-qualified # 👧🏿 E1.0 girl: dark skin tone +1F9D1 ; fully-qualified # 🧑 E5.0 person +1F9D1 1F3FB ; fully-qualified # 🧑🏻 E5.0 person: light skin tone +1F9D1 1F3FC ; fully-qualified # 🧑🏼 E5.0 person: medium-light skin tone +1F9D1 1F3FD ; fully-qualified # 🧑🏽 E5.0 person: medium skin tone +1F9D1 1F3FE ; fully-qualified # 🧑🏾 E5.0 person: medium-dark skin tone +1F9D1 1F3FF ; fully-qualified # 🧑🏿 E5.0 person: dark skin tone +1F471 ; fully-qualified # 👱 E0.6 person: blond hair +1F471 1F3FB ; fully-qualified # 👱🏻 E1.0 person: light skin tone, blond hair +1F471 1F3FC ; fully-qualified # 👱🏼 E1.0 person: medium-light skin tone, blond hair +1F471 1F3FD ; fully-qualified # 👱🏽 E1.0 person: medium skin tone, blond hair +1F471 1F3FE ; fully-qualified # 👱🏾 E1.0 person: medium-dark skin tone, blond hair +1F471 1F3FF ; fully-qualified # 👱🏿 E1.0 person: dark skin tone, blond hair +1F468 ; fully-qualified # 👨 E0.6 man +1F468 1F3FB ; fully-qualified # 👨🏻 E1.0 man: light skin tone +1F468 1F3FC ; fully-qualified # 👨🏼 E1.0 man: medium-light skin tone +1F468 1F3FD ; fully-qualified # 👨🏽 E1.0 man: medium skin tone +1F468 1F3FE ; fully-qualified # 👨🏾 E1.0 man: medium-dark skin tone +1F468 1F3FF ; fully-qualified # 👨🏿 E1.0 man: dark skin tone +1F9D4 ; fully-qualified # 🧔 E5.0 person: beard +1F9D4 1F3FB ; fully-qualified # 🧔🏻 E5.0 person: light skin tone, beard +1F9D4 1F3FC ; fully-qualified # 🧔🏼 E5.0 person: medium-light skin tone, beard +1F9D4 1F3FD ; fully-qualified # 🧔🏽 E5.0 person: medium skin tone, beard +1F9D4 1F3FE ; fully-qualified # 🧔🏾 E5.0 person: medium-dark skin tone, beard +1F9D4 1F3FF ; fully-qualified # 🧔🏿 E5.0 person: dark skin tone, beard +1F9D4 200D 2642 FE0F ; fully-qualified # 🧔‍♂️ E13.1 man: beard +1F9D4 200D 2642 ; minimally-qualified # 🧔‍♂ E13.1 man: beard +1F9D4 1F3FB 200D 2642 FE0F ; fully-qualified # 🧔🏻‍♂️ E13.1 man: light skin tone, beard +1F9D4 1F3FB 200D 2642 ; minimally-qualified # 🧔🏻‍♂ E13.1 man: light skin tone, beard +1F9D4 1F3FC 200D 2642 FE0F ; fully-qualified # 🧔🏼‍♂️ E13.1 man: medium-light skin tone, beard +1F9D4 1F3FC 200D 2642 ; minimally-qualified # 🧔🏼‍♂ E13.1 man: medium-light skin tone, beard +1F9D4 1F3FD 200D 2642 FE0F ; fully-qualified # 🧔🏽‍♂️ E13.1 man: medium skin tone, beard +1F9D4 1F3FD 200D 2642 ; minimally-qualified # 🧔🏽‍♂ E13.1 man: medium skin tone, beard +1F9D4 1F3FE 200D 2642 FE0F ; fully-qualified # 🧔🏾‍♂️ E13.1 man: medium-dark skin tone, beard +1F9D4 1F3FE 200D 2642 ; minimally-qualified # 🧔🏾‍♂ E13.1 man: medium-dark skin tone, beard +1F9D4 1F3FF 200D 2642 FE0F ; fully-qualified # 🧔🏿‍♂️ E13.1 man: dark skin tone, beard +1F9D4 1F3FF 200D 2642 ; minimally-qualified # 🧔🏿‍♂ E13.1 man: dark skin tone, beard +1F9D4 200D 2640 FE0F ; fully-qualified # 🧔‍♀️ E13.1 woman: beard +1F9D4 200D 2640 ; minimally-qualified # 🧔‍♀ E13.1 woman: beard +1F9D4 1F3FB 200D 2640 FE0F ; fully-qualified # 🧔🏻‍♀️ E13.1 woman: light skin tone, beard +1F9D4 1F3FB 200D 2640 ; minimally-qualified # 🧔🏻‍♀ E13.1 woman: light skin tone, beard +1F9D4 1F3FC 200D 2640 FE0F ; fully-qualified # 🧔🏼‍♀️ E13.1 woman: medium-light skin tone, beard +1F9D4 1F3FC 200D 2640 ; minimally-qualified # 🧔🏼‍♀ E13.1 woman: medium-light skin tone, beard +1F9D4 1F3FD 200D 2640 FE0F ; fully-qualified # 🧔🏽‍♀️ E13.1 woman: medium skin tone, beard +1F9D4 1F3FD 200D 2640 ; minimally-qualified # 🧔🏽‍♀ E13.1 woman: medium skin tone, beard +1F9D4 1F3FE 200D 2640 FE0F ; fully-qualified # 🧔🏾‍♀️ E13.1 woman: medium-dark skin tone, beard +1F9D4 1F3FE 200D 2640 ; minimally-qualified # 🧔🏾‍♀ E13.1 woman: medium-dark skin tone, beard +1F9D4 1F3FF 200D 2640 FE0F ; fully-qualified # 🧔🏿‍♀️ E13.1 woman: dark skin tone, beard +1F9D4 1F3FF 200D 2640 ; minimally-qualified # 🧔🏿‍♀ E13.1 woman: dark skin tone, beard +1F468 200D 1F9B0 ; fully-qualified # 👨‍🦰 E11.0 man: red hair +1F468 1F3FB 200D 1F9B0 ; fully-qualified # 👨🏻‍🦰 E11.0 man: light skin tone, red hair +1F468 1F3FC 200D 1F9B0 ; fully-qualified # 👨🏼‍🦰 E11.0 man: medium-light skin tone, red hair +1F468 1F3FD 200D 1F9B0 ; fully-qualified # 👨🏽‍🦰 E11.0 man: medium skin tone, red hair +1F468 1F3FE 200D 1F9B0 ; fully-qualified # 👨🏾‍🦰 E11.0 man: medium-dark skin tone, red hair +1F468 1F3FF 200D 1F9B0 ; fully-qualified # 👨🏿‍🦰 E11.0 man: dark skin tone, red hair +1F468 200D 1F9B1 ; fully-qualified # 👨‍🦱 E11.0 man: curly hair +1F468 1F3FB 200D 1F9B1 ; fully-qualified # 👨🏻‍🦱 E11.0 man: light skin tone, curly hair +1F468 1F3FC 200D 1F9B1 ; fully-qualified # 👨🏼‍🦱 E11.0 man: medium-light skin tone, curly hair +1F468 1F3FD 200D 1F9B1 ; fully-qualified # 👨🏽‍🦱 E11.0 man: medium skin tone, curly hair +1F468 1F3FE 200D 1F9B1 ; fully-qualified # 👨🏾‍🦱 E11.0 man: medium-dark skin tone, curly hair +1F468 1F3FF 200D 1F9B1 ; fully-qualified # 👨🏿‍🦱 E11.0 man: dark skin tone, curly hair +1F468 200D 1F9B3 ; fully-qualified # 👨‍🦳 E11.0 man: white hair +1F468 1F3FB 200D 1F9B3 ; fully-qualified # 👨🏻‍🦳 E11.0 man: light skin tone, white hair +1F468 1F3FC 200D 1F9B3 ; fully-qualified # 👨🏼‍🦳 E11.0 man: medium-light skin tone, white hair +1F468 1F3FD 200D 1F9B3 ; fully-qualified # 👨🏽‍🦳 E11.0 man: medium skin tone, white hair +1F468 1F3FE 200D 1F9B3 ; fully-qualified # 👨🏾‍🦳 E11.0 man: medium-dark skin tone, white hair +1F468 1F3FF 200D 1F9B3 ; fully-qualified # 👨🏿‍🦳 E11.0 man: dark skin tone, white hair +1F468 200D 1F9B2 ; fully-qualified # 👨‍🦲 E11.0 man: bald +1F468 1F3FB 200D 1F9B2 ; fully-qualified # 👨🏻‍🦲 E11.0 man: light skin tone, bald +1F468 1F3FC 200D 1F9B2 ; fully-qualified # 👨🏼‍🦲 E11.0 man: medium-light skin tone, bald +1F468 1F3FD 200D 1F9B2 ; fully-qualified # 👨🏽‍🦲 E11.0 man: medium skin tone, bald +1F468 1F3FE 200D 1F9B2 ; fully-qualified # 👨🏾‍🦲 E11.0 man: medium-dark skin tone, bald +1F468 1F3FF 200D 1F9B2 ; fully-qualified # 👨🏿‍🦲 E11.0 man: dark skin tone, bald +1F469 ; fully-qualified # 👩 E0.6 woman +1F469 1F3FB ; fully-qualified # 👩🏻 E1.0 woman: light skin tone +1F469 1F3FC ; fully-qualified # 👩🏼 E1.0 woman: medium-light skin tone +1F469 1F3FD ; fully-qualified # 👩🏽 E1.0 woman: medium skin tone +1F469 1F3FE ; fully-qualified # 👩🏾 E1.0 woman: medium-dark skin tone +1F469 1F3FF ; fully-qualified # 👩🏿 E1.0 woman: dark skin tone +1F469 200D 1F9B0 ; fully-qualified # 👩‍🦰 E11.0 woman: red hair +1F469 1F3FB 200D 1F9B0 ; fully-qualified # 👩🏻‍🦰 E11.0 woman: light skin tone, red hair +1F469 1F3FC 200D 1F9B0 ; fully-qualified # 👩🏼‍🦰 E11.0 woman: medium-light skin tone, red hair +1F469 1F3FD 200D 1F9B0 ; fully-qualified # 👩🏽‍🦰 E11.0 woman: medium skin tone, red hair +1F469 1F3FE 200D 1F9B0 ; fully-qualified # 👩🏾‍🦰 E11.0 woman: medium-dark skin tone, red hair +1F469 1F3FF 200D 1F9B0 ; fully-qualified # 👩🏿‍🦰 E11.0 woman: dark skin tone, red hair +1F9D1 200D 1F9B0 ; fully-qualified # 🧑‍🦰 E12.1 person: red hair +1F9D1 1F3FB 200D 1F9B0 ; fully-qualified # 🧑🏻‍🦰 E12.1 person: light skin tone, red hair +1F9D1 1F3FC 200D 1F9B0 ; fully-qualified # 🧑🏼‍🦰 E12.1 person: medium-light skin tone, red hair +1F9D1 1F3FD 200D 1F9B0 ; fully-qualified # 🧑🏽‍🦰 E12.1 person: medium skin tone, red hair +1F9D1 1F3FE 200D 1F9B0 ; fully-qualified # 🧑🏾‍🦰 E12.1 person: medium-dark skin tone, red hair +1F9D1 1F3FF 200D 1F9B0 ; fully-qualified # 🧑🏿‍🦰 E12.1 person: dark skin tone, red hair +1F469 200D 1F9B1 ; fully-qualified # 👩‍🦱 E11.0 woman: curly hair +1F469 1F3FB 200D 1F9B1 ; fully-qualified # 👩🏻‍🦱 E11.0 woman: light skin tone, curly hair +1F469 1F3FC 200D 1F9B1 ; fully-qualified # 👩🏼‍🦱 E11.0 woman: medium-light skin tone, curly hair +1F469 1F3FD 200D 1F9B1 ; fully-qualified # 👩🏽‍🦱 E11.0 woman: medium skin tone, curly hair +1F469 1F3FE 200D 1F9B1 ; fully-qualified # 👩🏾‍🦱 E11.0 woman: medium-dark skin tone, curly hair +1F469 1F3FF 200D 1F9B1 ; fully-qualified # 👩🏿‍🦱 E11.0 woman: dark skin tone, curly hair +1F9D1 200D 1F9B1 ; fully-qualified # 🧑‍🦱 E12.1 person: curly hair +1F9D1 1F3FB 200D 1F9B1 ; fully-qualified # 🧑🏻‍🦱 E12.1 person: light skin tone, curly hair +1F9D1 1F3FC 200D 1F9B1 ; fully-qualified # 🧑🏼‍🦱 E12.1 person: medium-light skin tone, curly hair +1F9D1 1F3FD 200D 1F9B1 ; fully-qualified # 🧑🏽‍🦱 E12.1 person: medium skin tone, curly hair +1F9D1 1F3FE 200D 1F9B1 ; fully-qualified # 🧑🏾‍🦱 E12.1 person: medium-dark skin tone, curly hair +1F9D1 1F3FF 200D 1F9B1 ; fully-qualified # 🧑🏿‍🦱 E12.1 person: dark skin tone, curly hair +1F469 200D 1F9B3 ; fully-qualified # 👩‍🦳 E11.0 woman: white hair +1F469 1F3FB 200D 1F9B3 ; fully-qualified # 👩🏻‍🦳 E11.0 woman: light skin tone, white hair +1F469 1F3FC 200D 1F9B3 ; fully-qualified # 👩🏼‍🦳 E11.0 woman: medium-light skin tone, white hair +1F469 1F3FD 200D 1F9B3 ; fully-qualified # 👩🏽‍🦳 E11.0 woman: medium skin tone, white hair +1F469 1F3FE 200D 1F9B3 ; fully-qualified # 👩🏾‍🦳 E11.0 woman: medium-dark skin tone, white hair +1F469 1F3FF 200D 1F9B3 ; fully-qualified # 👩🏿‍🦳 E11.0 woman: dark skin tone, white hair +1F9D1 200D 1F9B3 ; fully-qualified # 🧑‍🦳 E12.1 person: white hair +1F9D1 1F3FB 200D 1F9B3 ; fully-qualified # 🧑🏻‍🦳 E12.1 person: light skin tone, white hair +1F9D1 1F3FC 200D 1F9B3 ; fully-qualified # 🧑🏼‍🦳 E12.1 person: medium-light skin tone, white hair +1F9D1 1F3FD 200D 1F9B3 ; fully-qualified # 🧑🏽‍🦳 E12.1 person: medium skin tone, white hair +1F9D1 1F3FE 200D 1F9B3 ; fully-qualified # 🧑🏾‍🦳 E12.1 person: medium-dark skin tone, white hair +1F9D1 1F3FF 200D 1F9B3 ; fully-qualified # 🧑🏿‍🦳 E12.1 person: dark skin tone, white hair +1F469 200D 1F9B2 ; fully-qualified # 👩‍🦲 E11.0 woman: bald +1F469 1F3FB 200D 1F9B2 ; fully-qualified # 👩🏻‍🦲 E11.0 woman: light skin tone, bald +1F469 1F3FC 200D 1F9B2 ; fully-qualified # 👩🏼‍🦲 E11.0 woman: medium-light skin tone, bald +1F469 1F3FD 200D 1F9B2 ; fully-qualified # 👩🏽‍🦲 E11.0 woman: medium skin tone, bald +1F469 1F3FE 200D 1F9B2 ; fully-qualified # 👩🏾‍🦲 E11.0 woman: medium-dark skin tone, bald +1F469 1F3FF 200D 1F9B2 ; fully-qualified # 👩🏿‍🦲 E11.0 woman: dark skin tone, bald +1F9D1 200D 1F9B2 ; fully-qualified # 🧑‍🦲 E12.1 person: bald +1F9D1 1F3FB 200D 1F9B2 ; fully-qualified # 🧑🏻‍🦲 E12.1 person: light skin tone, bald +1F9D1 1F3FC 200D 1F9B2 ; fully-qualified # 🧑🏼‍🦲 E12.1 person: medium-light skin tone, bald +1F9D1 1F3FD 200D 1F9B2 ; fully-qualified # 🧑🏽‍🦲 E12.1 person: medium skin tone, bald +1F9D1 1F3FE 200D 1F9B2 ; fully-qualified # 🧑🏾‍🦲 E12.1 person: medium-dark skin tone, bald +1F9D1 1F3FF 200D 1F9B2 ; fully-qualified # 🧑🏿‍🦲 E12.1 person: dark skin tone, bald +1F471 200D 2640 FE0F ; fully-qualified # 👱‍♀️ E4.0 woman: blond hair +1F471 200D 2640 ; minimally-qualified # 👱‍♀ E4.0 woman: blond hair +1F471 1F3FB 200D 2640 FE0F ; fully-qualified # 👱🏻‍♀️ E4.0 woman: light skin tone, blond hair +1F471 1F3FB 200D 2640 ; minimally-qualified # 👱🏻‍♀ E4.0 woman: light skin tone, blond hair +1F471 1F3FC 200D 2640 FE0F ; fully-qualified # 👱🏼‍♀️ E4.0 woman: medium-light skin tone, blond hair +1F471 1F3FC 200D 2640 ; minimally-qualified # 👱🏼‍♀ E4.0 woman: medium-light skin tone, blond hair +1F471 1F3FD 200D 2640 FE0F ; fully-qualified # 👱🏽‍♀️ E4.0 woman: medium skin tone, blond hair +1F471 1F3FD 200D 2640 ; minimally-qualified # 👱🏽‍♀ E4.0 woman: medium skin tone, blond hair +1F471 1F3FE 200D 2640 FE0F ; fully-qualified # 👱🏾‍♀️ E4.0 woman: medium-dark skin tone, blond hair +1F471 1F3FE 200D 2640 ; minimally-qualified # 👱🏾‍♀ E4.0 woman: medium-dark skin tone, blond hair +1F471 1F3FF 200D 2640 FE0F ; fully-qualified # 👱🏿‍♀️ E4.0 woman: dark skin tone, blond hair +1F471 1F3FF 200D 2640 ; minimally-qualified # 👱🏿‍♀ E4.0 woman: dark skin tone, blond hair +1F471 200D 2642 FE0F ; fully-qualified # 👱‍♂️ E4.0 man: blond hair +1F471 200D 2642 ; minimally-qualified # 👱‍♂ E4.0 man: blond hair +1F471 1F3FB 200D 2642 FE0F ; fully-qualified # 👱🏻‍♂️ E4.0 man: light skin tone, blond hair +1F471 1F3FB 200D 2642 ; minimally-qualified # 👱🏻‍♂ E4.0 man: light skin tone, blond hair +1F471 1F3FC 200D 2642 FE0F ; fully-qualified # 👱🏼‍♂️ E4.0 man: medium-light skin tone, blond hair +1F471 1F3FC 200D 2642 ; minimally-qualified # 👱🏼‍♂ E4.0 man: medium-light skin tone, blond hair +1F471 1F3FD 200D 2642 FE0F ; fully-qualified # 👱🏽‍♂️ E4.0 man: medium skin tone, blond hair +1F471 1F3FD 200D 2642 ; minimally-qualified # 👱🏽‍♂ E4.0 man: medium skin tone, blond hair +1F471 1F3FE 200D 2642 FE0F ; fully-qualified # 👱🏾‍♂️ E4.0 man: medium-dark skin tone, blond hair +1F471 1F3FE 200D 2642 ; minimally-qualified # 👱🏾‍♂ E4.0 man: medium-dark skin tone, blond hair +1F471 1F3FF 200D 2642 FE0F ; fully-qualified # 👱🏿‍♂️ E4.0 man: dark skin tone, blond hair +1F471 1F3FF 200D 2642 ; minimally-qualified # 👱🏿‍♂ E4.0 man: dark skin tone, blond hair +1F9D3 ; fully-qualified # 🧓 E5.0 older person +1F9D3 1F3FB ; fully-qualified # 🧓🏻 E5.0 older person: light skin tone +1F9D3 1F3FC ; fully-qualified # 🧓🏼 E5.0 older person: medium-light skin tone +1F9D3 1F3FD ; fully-qualified # 🧓🏽 E5.0 older person: medium skin tone +1F9D3 1F3FE ; fully-qualified # 🧓🏾 E5.0 older person: medium-dark skin tone +1F9D3 1F3FF ; fully-qualified # 🧓🏿 E5.0 older person: dark skin tone +1F474 ; fully-qualified # 👴 E0.6 old man +1F474 1F3FB ; fully-qualified # 👴🏻 E1.0 old man: light skin tone +1F474 1F3FC ; fully-qualified # 👴🏼 E1.0 old man: medium-light skin tone +1F474 1F3FD ; fully-qualified # 👴🏽 E1.0 old man: medium skin tone +1F474 1F3FE ; fully-qualified # 👴🏾 E1.0 old man: medium-dark skin tone +1F474 1F3FF ; fully-qualified # 👴🏿 E1.0 old man: dark skin tone +1F475 ; fully-qualified # 👵 E0.6 old woman +1F475 1F3FB ; fully-qualified # 👵🏻 E1.0 old woman: light skin tone +1F475 1F3FC ; fully-qualified # 👵🏼 E1.0 old woman: medium-light skin tone +1F475 1F3FD ; fully-qualified # 👵🏽 E1.0 old woman: medium skin tone +1F475 1F3FE ; fully-qualified # 👵🏾 E1.0 old woman: medium-dark skin tone +1F475 1F3FF ; fully-qualified # 👵🏿 E1.0 old woman: dark skin tone + +# subgroup: person-gesture +1F64D ; fully-qualified # 🙍 E0.6 person frowning +1F64D 1F3FB ; fully-qualified # 🙍🏻 E1.0 person frowning: light skin tone +1F64D 1F3FC ; fully-qualified # 🙍🏼 E1.0 person frowning: medium-light skin tone +1F64D 1F3FD ; fully-qualified # 🙍🏽 E1.0 person frowning: medium skin tone +1F64D 1F3FE ; fully-qualified # 🙍🏾 E1.0 person frowning: medium-dark skin tone +1F64D 1F3FF ; fully-qualified # 🙍🏿 E1.0 person frowning: dark skin tone +1F64D 200D 2642 FE0F ; fully-qualified # 🙍‍♂️ E4.0 man frowning +1F64D 200D 2642 ; minimally-qualified # 🙍‍♂ E4.0 man frowning +1F64D 1F3FB 200D 2642 FE0F ; fully-qualified # 🙍🏻‍♂️ E4.0 man frowning: light skin tone +1F64D 1F3FB 200D 2642 ; minimally-qualified # 🙍🏻‍♂ E4.0 man frowning: light skin tone +1F64D 1F3FC 200D 2642 FE0F ; fully-qualified # 🙍🏼‍♂️ E4.0 man frowning: medium-light skin tone +1F64D 1F3FC 200D 2642 ; minimally-qualified # 🙍🏼‍♂ E4.0 man frowning: medium-light skin tone +1F64D 1F3FD 200D 2642 FE0F ; fully-qualified # 🙍🏽‍♂️ E4.0 man frowning: medium skin tone +1F64D 1F3FD 200D 2642 ; minimally-qualified # 🙍🏽‍♂ E4.0 man frowning: medium skin tone +1F64D 1F3FE 200D 2642 FE0F ; fully-qualified # 🙍🏾‍♂️ E4.0 man frowning: medium-dark skin tone +1F64D 1F3FE 200D 2642 ; minimally-qualified # 🙍🏾‍♂ E4.0 man frowning: medium-dark skin tone +1F64D 1F3FF 200D 2642 FE0F ; fully-qualified # 🙍🏿‍♂️ E4.0 man frowning: dark skin tone +1F64D 1F3FF 200D 2642 ; minimally-qualified # 🙍🏿‍♂ E4.0 man frowning: dark skin tone +1F64D 200D 2640 FE0F ; fully-qualified # 🙍‍♀️ E4.0 woman frowning +1F64D 200D 2640 ; minimally-qualified # 🙍‍♀ E4.0 woman frowning +1F64D 1F3FB 200D 2640 FE0F ; fully-qualified # 🙍🏻‍♀️ E4.0 woman frowning: light skin tone +1F64D 1F3FB 200D 2640 ; minimally-qualified # 🙍🏻‍♀ E4.0 woman frowning: light skin tone +1F64D 1F3FC 200D 2640 FE0F ; fully-qualified # 🙍🏼‍♀️ E4.0 woman frowning: medium-light skin tone +1F64D 1F3FC 200D 2640 ; minimally-qualified # 🙍🏼‍♀ E4.0 woman frowning: medium-light skin tone +1F64D 1F3FD 200D 2640 FE0F ; fully-qualified # 🙍🏽‍♀️ E4.0 woman frowning: medium skin tone +1F64D 1F3FD 200D 2640 ; minimally-qualified # 🙍🏽‍♀ E4.0 woman frowning: medium skin tone +1F64D 1F3FE 200D 2640 FE0F ; fully-qualified # 🙍🏾‍♀️ E4.0 woman frowning: medium-dark skin tone +1F64D 1F3FE 200D 2640 ; minimally-qualified # 🙍🏾‍♀ E4.0 woman frowning: medium-dark skin tone +1F64D 1F3FF 200D 2640 FE0F ; fully-qualified # 🙍🏿‍♀️ E4.0 woman frowning: dark skin tone +1F64D 1F3FF 200D 2640 ; minimally-qualified # 🙍🏿‍♀ E4.0 woman frowning: dark skin tone +1F64E ; fully-qualified # 🙎 E0.6 person pouting +1F64E 1F3FB ; fully-qualified # 🙎🏻 E1.0 person pouting: light skin tone +1F64E 1F3FC ; fully-qualified # 🙎🏼 E1.0 person pouting: medium-light skin tone +1F64E 1F3FD ; fully-qualified # 🙎🏽 E1.0 person pouting: medium skin tone +1F64E 1F3FE ; fully-qualified # 🙎🏾 E1.0 person pouting: medium-dark skin tone +1F64E 1F3FF ; fully-qualified # 🙎🏿 E1.0 person pouting: dark skin tone +1F64E 200D 2642 FE0F ; fully-qualified # 🙎‍♂️ E4.0 man pouting +1F64E 200D 2642 ; minimally-qualified # 🙎‍♂ E4.0 man pouting +1F64E 1F3FB 200D 2642 FE0F ; fully-qualified # 🙎🏻‍♂️ E4.0 man pouting: light skin tone +1F64E 1F3FB 200D 2642 ; minimally-qualified # 🙎🏻‍♂ E4.0 man pouting: light skin tone +1F64E 1F3FC 200D 2642 FE0F ; fully-qualified # 🙎🏼‍♂️ E4.0 man pouting: medium-light skin tone +1F64E 1F3FC 200D 2642 ; minimally-qualified # 🙎🏼‍♂ E4.0 man pouting: medium-light skin tone +1F64E 1F3FD 200D 2642 FE0F ; fully-qualified # 🙎🏽‍♂️ E4.0 man pouting: medium skin tone +1F64E 1F3FD 200D 2642 ; minimally-qualified # 🙎🏽‍♂ E4.0 man pouting: medium skin tone +1F64E 1F3FE 200D 2642 FE0F ; fully-qualified # 🙎🏾‍♂️ E4.0 man pouting: medium-dark skin tone +1F64E 1F3FE 200D 2642 ; minimally-qualified # 🙎🏾‍♂ E4.0 man pouting: medium-dark skin tone +1F64E 1F3FF 200D 2642 FE0F ; fully-qualified # 🙎🏿‍♂️ E4.0 man pouting: dark skin tone +1F64E 1F3FF 200D 2642 ; minimally-qualified # 🙎🏿‍♂ E4.0 man pouting: dark skin tone +1F64E 200D 2640 FE0F ; fully-qualified # 🙎‍♀️ E4.0 woman pouting +1F64E 200D 2640 ; minimally-qualified # 🙎‍♀ E4.0 woman pouting +1F64E 1F3FB 200D 2640 FE0F ; fully-qualified # 🙎🏻‍♀️ E4.0 woman pouting: light skin tone +1F64E 1F3FB 200D 2640 ; minimally-qualified # 🙎🏻‍♀ E4.0 woman pouting: light skin tone +1F64E 1F3FC 200D 2640 FE0F ; fully-qualified # 🙎🏼‍♀️ E4.0 woman pouting: medium-light skin tone +1F64E 1F3FC 200D 2640 ; minimally-qualified # 🙎🏼‍♀ E4.0 woman pouting: medium-light skin tone +1F64E 1F3FD 200D 2640 FE0F ; fully-qualified # 🙎🏽‍♀️ E4.0 woman pouting: medium skin tone +1F64E 1F3FD 200D 2640 ; minimally-qualified # 🙎🏽‍♀ E4.0 woman pouting: medium skin tone +1F64E 1F3FE 200D 2640 FE0F ; fully-qualified # 🙎🏾‍♀️ E4.0 woman pouting: medium-dark skin tone +1F64E 1F3FE 200D 2640 ; minimally-qualified # 🙎🏾‍♀ E4.0 woman pouting: medium-dark skin tone +1F64E 1F3FF 200D 2640 FE0F ; fully-qualified # 🙎🏿‍♀️ E4.0 woman pouting: dark skin tone +1F64E 1F3FF 200D 2640 ; minimally-qualified # 🙎🏿‍♀ E4.0 woman pouting: dark skin tone +1F645 ; fully-qualified # 🙅 E0.6 person gesturing NO +1F645 1F3FB ; fully-qualified # 🙅🏻 E1.0 person gesturing NO: light skin tone +1F645 1F3FC ; fully-qualified # 🙅🏼 E1.0 person gesturing NO: medium-light skin tone +1F645 1F3FD ; fully-qualified # 🙅🏽 E1.0 person gesturing NO: medium skin tone +1F645 1F3FE ; fully-qualified # 🙅🏾 E1.0 person gesturing NO: medium-dark skin tone +1F645 1F3FF ; fully-qualified # 🙅🏿 E1.0 person gesturing NO: dark skin tone +1F645 200D 2642 FE0F ; fully-qualified # 🙅‍♂️ E4.0 man gesturing NO +1F645 200D 2642 ; minimally-qualified # 🙅‍♂ E4.0 man gesturing NO +1F645 1F3FB 200D 2642 FE0F ; fully-qualified # 🙅🏻‍♂️ E4.0 man gesturing NO: light skin tone +1F645 1F3FB 200D 2642 ; minimally-qualified # 🙅🏻‍♂ E4.0 man gesturing NO: light skin tone +1F645 1F3FC 200D 2642 FE0F ; fully-qualified # 🙅🏼‍♂️ E4.0 man gesturing NO: medium-light skin tone +1F645 1F3FC 200D 2642 ; minimally-qualified # 🙅🏼‍♂ E4.0 man gesturing NO: medium-light skin tone +1F645 1F3FD 200D 2642 FE0F ; fully-qualified # 🙅🏽‍♂️ E4.0 man gesturing NO: medium skin tone +1F645 1F3FD 200D 2642 ; minimally-qualified # 🙅🏽‍♂ E4.0 man gesturing NO: medium skin tone +1F645 1F3FE 200D 2642 FE0F ; fully-qualified # 🙅🏾‍♂️ E4.0 man gesturing NO: medium-dark skin tone +1F645 1F3FE 200D 2642 ; minimally-qualified # 🙅🏾‍♂ E4.0 man gesturing NO: medium-dark skin tone +1F645 1F3FF 200D 2642 FE0F ; fully-qualified # 🙅🏿‍♂️ E4.0 man gesturing NO: dark skin tone +1F645 1F3FF 200D 2642 ; minimally-qualified # 🙅🏿‍♂ E4.0 man gesturing NO: dark skin tone +1F645 200D 2640 FE0F ; fully-qualified # 🙅‍♀️ E4.0 woman gesturing NO +1F645 200D 2640 ; minimally-qualified # 🙅‍♀ E4.0 woman gesturing NO +1F645 1F3FB 200D 2640 FE0F ; fully-qualified # 🙅🏻‍♀️ E4.0 woman gesturing NO: light skin tone +1F645 1F3FB 200D 2640 ; minimally-qualified # 🙅🏻‍♀ E4.0 woman gesturing NO: light skin tone +1F645 1F3FC 200D 2640 FE0F ; fully-qualified # 🙅🏼‍♀️ E4.0 woman gesturing NO: medium-light skin tone +1F645 1F3FC 200D 2640 ; minimally-qualified # 🙅🏼‍♀ E4.0 woman gesturing NO: medium-light skin tone +1F645 1F3FD 200D 2640 FE0F ; fully-qualified # 🙅🏽‍♀️ E4.0 woman gesturing NO: medium skin tone +1F645 1F3FD 200D 2640 ; minimally-qualified # 🙅🏽‍♀ E4.0 woman gesturing NO: medium skin tone +1F645 1F3FE 200D 2640 FE0F ; fully-qualified # 🙅🏾‍♀️ E4.0 woman gesturing NO: medium-dark skin tone +1F645 1F3FE 200D 2640 ; minimally-qualified # 🙅🏾‍♀ E4.0 woman gesturing NO: medium-dark skin tone +1F645 1F3FF 200D 2640 FE0F ; fully-qualified # 🙅🏿‍♀️ E4.0 woman gesturing NO: dark skin tone +1F645 1F3FF 200D 2640 ; minimally-qualified # 🙅🏿‍♀ E4.0 woman gesturing NO: dark skin tone +1F646 ; fully-qualified # 🙆 E0.6 person gesturing OK +1F646 1F3FB ; fully-qualified # 🙆🏻 E1.0 person gesturing OK: light skin tone +1F646 1F3FC ; fully-qualified # 🙆🏼 E1.0 person gesturing OK: medium-light skin tone +1F646 1F3FD ; fully-qualified # 🙆🏽 E1.0 person gesturing OK: medium skin tone +1F646 1F3FE ; fully-qualified # 🙆🏾 E1.0 person gesturing OK: medium-dark skin tone +1F646 1F3FF ; fully-qualified # 🙆🏿 E1.0 person gesturing OK: dark skin tone +1F646 200D 2642 FE0F ; fully-qualified # 🙆‍♂️ E4.0 man gesturing OK +1F646 200D 2642 ; minimally-qualified # 🙆‍♂ E4.0 man gesturing OK +1F646 1F3FB 200D 2642 FE0F ; fully-qualified # 🙆🏻‍♂️ E4.0 man gesturing OK: light skin tone +1F646 1F3FB 200D 2642 ; minimally-qualified # 🙆🏻‍♂ E4.0 man gesturing OK: light skin tone +1F646 1F3FC 200D 2642 FE0F ; fully-qualified # 🙆🏼‍♂️ E4.0 man gesturing OK: medium-light skin tone +1F646 1F3FC 200D 2642 ; minimally-qualified # 🙆🏼‍♂ E4.0 man gesturing OK: medium-light skin tone +1F646 1F3FD 200D 2642 FE0F ; fully-qualified # 🙆🏽‍♂️ E4.0 man gesturing OK: medium skin tone +1F646 1F3FD 200D 2642 ; minimally-qualified # 🙆🏽‍♂ E4.0 man gesturing OK: medium skin tone +1F646 1F3FE 200D 2642 FE0F ; fully-qualified # 🙆🏾‍♂️ E4.0 man gesturing OK: medium-dark skin tone +1F646 1F3FE 200D 2642 ; minimally-qualified # 🙆🏾‍♂ E4.0 man gesturing OK: medium-dark skin tone +1F646 1F3FF 200D 2642 FE0F ; fully-qualified # 🙆🏿‍♂️ E4.0 man gesturing OK: dark skin tone +1F646 1F3FF 200D 2642 ; minimally-qualified # 🙆🏿‍♂ E4.0 man gesturing OK: dark skin tone +1F646 200D 2640 FE0F ; fully-qualified # 🙆‍♀️ E4.0 woman gesturing OK +1F646 200D 2640 ; minimally-qualified # 🙆‍♀ E4.0 woman gesturing OK +1F646 1F3FB 200D 2640 FE0F ; fully-qualified # 🙆🏻‍♀️ E4.0 woman gesturing OK: light skin tone +1F646 1F3FB 200D 2640 ; minimally-qualified # 🙆🏻‍♀ E4.0 woman gesturing OK: light skin tone +1F646 1F3FC 200D 2640 FE0F ; fully-qualified # 🙆🏼‍♀️ E4.0 woman gesturing OK: medium-light skin tone +1F646 1F3FC 200D 2640 ; minimally-qualified # 🙆🏼‍♀ E4.0 woman gesturing OK: medium-light skin tone +1F646 1F3FD 200D 2640 FE0F ; fully-qualified # 🙆🏽‍♀️ E4.0 woman gesturing OK: medium skin tone +1F646 1F3FD 200D 2640 ; minimally-qualified # 🙆🏽‍♀ E4.0 woman gesturing OK: medium skin tone +1F646 1F3FE 200D 2640 FE0F ; fully-qualified # 🙆🏾‍♀️ E4.0 woman gesturing OK: medium-dark skin tone +1F646 1F3FE 200D 2640 ; minimally-qualified # 🙆🏾‍♀ E4.0 woman gesturing OK: medium-dark skin tone +1F646 1F3FF 200D 2640 FE0F ; fully-qualified # 🙆🏿‍♀️ E4.0 woman gesturing OK: dark skin tone +1F646 1F3FF 200D 2640 ; minimally-qualified # 🙆🏿‍♀ E4.0 woman gesturing OK: dark skin tone +1F481 ; fully-qualified # 💁 E0.6 person tipping hand +1F481 1F3FB ; fully-qualified # 💁🏻 E1.0 person tipping hand: light skin tone +1F481 1F3FC ; fully-qualified # 💁🏼 E1.0 person tipping hand: medium-light skin tone +1F481 1F3FD ; fully-qualified # 💁🏽 E1.0 person tipping hand: medium skin tone +1F481 1F3FE ; fully-qualified # 💁🏾 E1.0 person tipping hand: medium-dark skin tone +1F481 1F3FF ; fully-qualified # 💁🏿 E1.0 person tipping hand: dark skin tone +1F481 200D 2642 FE0F ; fully-qualified # 💁‍♂️ E4.0 man tipping hand +1F481 200D 2642 ; minimally-qualified # 💁‍♂ E4.0 man tipping hand +1F481 1F3FB 200D 2642 FE0F ; fully-qualified # 💁🏻‍♂️ E4.0 man tipping hand: light skin tone +1F481 1F3FB 200D 2642 ; minimally-qualified # 💁🏻‍♂ E4.0 man tipping hand: light skin tone +1F481 1F3FC 200D 2642 FE0F ; fully-qualified # 💁🏼‍♂️ E4.0 man tipping hand: medium-light skin tone +1F481 1F3FC 200D 2642 ; minimally-qualified # 💁🏼‍♂ E4.0 man tipping hand: medium-light skin tone +1F481 1F3FD 200D 2642 FE0F ; fully-qualified # 💁🏽‍♂️ E4.0 man tipping hand: medium skin tone +1F481 1F3FD 200D 2642 ; minimally-qualified # 💁🏽‍♂ E4.0 man tipping hand: medium skin tone +1F481 1F3FE 200D 2642 FE0F ; fully-qualified # 💁🏾‍♂️ E4.0 man tipping hand: medium-dark skin tone +1F481 1F3FE 200D 2642 ; minimally-qualified # 💁🏾‍♂ E4.0 man tipping hand: medium-dark skin tone +1F481 1F3FF 200D 2642 FE0F ; fully-qualified # 💁🏿‍♂️ E4.0 man tipping hand: dark skin tone +1F481 1F3FF 200D 2642 ; minimally-qualified # 💁🏿‍♂ E4.0 man tipping hand: dark skin tone +1F481 200D 2640 FE0F ; fully-qualified # 💁‍♀️ E4.0 woman tipping hand +1F481 200D 2640 ; minimally-qualified # 💁‍♀ E4.0 woman tipping hand +1F481 1F3FB 200D 2640 FE0F ; fully-qualified # 💁🏻‍♀️ E4.0 woman tipping hand: light skin tone +1F481 1F3FB 200D 2640 ; minimally-qualified # 💁🏻‍♀ E4.0 woman tipping hand: light skin tone +1F481 1F3FC 200D 2640 FE0F ; fully-qualified # 💁🏼‍♀️ E4.0 woman tipping hand: medium-light skin tone +1F481 1F3FC 200D 2640 ; minimally-qualified # 💁🏼‍♀ E4.0 woman tipping hand: medium-light skin tone +1F481 1F3FD 200D 2640 FE0F ; fully-qualified # 💁🏽‍♀️ E4.0 woman tipping hand: medium skin tone +1F481 1F3FD 200D 2640 ; minimally-qualified # 💁🏽‍♀ E4.0 woman tipping hand: medium skin tone +1F481 1F3FE 200D 2640 FE0F ; fully-qualified # 💁🏾‍♀️ E4.0 woman tipping hand: medium-dark skin tone +1F481 1F3FE 200D 2640 ; minimally-qualified # 💁🏾‍♀ E4.0 woman tipping hand: medium-dark skin tone +1F481 1F3FF 200D 2640 FE0F ; fully-qualified # 💁🏿‍♀️ E4.0 woman tipping hand: dark skin tone +1F481 1F3FF 200D 2640 ; minimally-qualified # 💁🏿‍♀ E4.0 woman tipping hand: dark skin tone +1F64B ; fully-qualified # 🙋 E0.6 person raising hand +1F64B 1F3FB ; fully-qualified # 🙋🏻 E1.0 person raising hand: light skin tone +1F64B 1F3FC ; fully-qualified # 🙋🏼 E1.0 person raising hand: medium-light skin tone +1F64B 1F3FD ; fully-qualified # 🙋🏽 E1.0 person raising hand: medium skin tone +1F64B 1F3FE ; fully-qualified # 🙋🏾 E1.0 person raising hand: medium-dark skin tone +1F64B 1F3FF ; fully-qualified # 🙋🏿 E1.0 person raising hand: dark skin tone +1F64B 200D 2642 FE0F ; fully-qualified # 🙋‍♂️ E4.0 man raising hand +1F64B 200D 2642 ; minimally-qualified # 🙋‍♂ E4.0 man raising hand +1F64B 1F3FB 200D 2642 FE0F ; fully-qualified # 🙋🏻‍♂️ E4.0 man raising hand: light skin tone +1F64B 1F3FB 200D 2642 ; minimally-qualified # 🙋🏻‍♂ E4.0 man raising hand: light skin tone +1F64B 1F3FC 200D 2642 FE0F ; fully-qualified # 🙋🏼‍♂️ E4.0 man raising hand: medium-light skin tone +1F64B 1F3FC 200D 2642 ; minimally-qualified # 🙋🏼‍♂ E4.0 man raising hand: medium-light skin tone +1F64B 1F3FD 200D 2642 FE0F ; fully-qualified # 🙋🏽‍♂️ E4.0 man raising hand: medium skin tone +1F64B 1F3FD 200D 2642 ; minimally-qualified # 🙋🏽‍♂ E4.0 man raising hand: medium skin tone +1F64B 1F3FE 200D 2642 FE0F ; fully-qualified # 🙋🏾‍♂️ E4.0 man raising hand: medium-dark skin tone +1F64B 1F3FE 200D 2642 ; minimally-qualified # 🙋🏾‍♂ E4.0 man raising hand: medium-dark skin tone +1F64B 1F3FF 200D 2642 FE0F ; fully-qualified # 🙋🏿‍♂️ E4.0 man raising hand: dark skin tone +1F64B 1F3FF 200D 2642 ; minimally-qualified # 🙋🏿‍♂ E4.0 man raising hand: dark skin tone +1F64B 200D 2640 FE0F ; fully-qualified # 🙋‍♀️ E4.0 woman raising hand +1F64B 200D 2640 ; minimally-qualified # 🙋‍♀ E4.0 woman raising hand +1F64B 1F3FB 200D 2640 FE0F ; fully-qualified # 🙋🏻‍♀️ E4.0 woman raising hand: light skin tone +1F64B 1F3FB 200D 2640 ; minimally-qualified # 🙋🏻‍♀ E4.0 woman raising hand: light skin tone +1F64B 1F3FC 200D 2640 FE0F ; fully-qualified # 🙋🏼‍♀️ E4.0 woman raising hand: medium-light skin tone +1F64B 1F3FC 200D 2640 ; minimally-qualified # 🙋🏼‍♀ E4.0 woman raising hand: medium-light skin tone +1F64B 1F3FD 200D 2640 FE0F ; fully-qualified # 🙋🏽‍♀️ E4.0 woman raising hand: medium skin tone +1F64B 1F3FD 200D 2640 ; minimally-qualified # 🙋🏽‍♀ E4.0 woman raising hand: medium skin tone +1F64B 1F3FE 200D 2640 FE0F ; fully-qualified # 🙋🏾‍♀️ E4.0 woman raising hand: medium-dark skin tone +1F64B 1F3FE 200D 2640 ; minimally-qualified # 🙋🏾‍♀ E4.0 woman raising hand: medium-dark skin tone +1F64B 1F3FF 200D 2640 FE0F ; fully-qualified # 🙋🏿‍♀️ E4.0 woman raising hand: dark skin tone +1F64B 1F3FF 200D 2640 ; minimally-qualified # 🙋🏿‍♀ E4.0 woman raising hand: dark skin tone +1F9CF ; fully-qualified # 🧏 E12.0 deaf person +1F9CF 1F3FB ; fully-qualified # 🧏🏻 E12.0 deaf person: light skin tone +1F9CF 1F3FC ; fully-qualified # 🧏🏼 E12.0 deaf person: medium-light skin tone +1F9CF 1F3FD ; fully-qualified # 🧏🏽 E12.0 deaf person: medium skin tone +1F9CF 1F3FE ; fully-qualified # 🧏🏾 E12.0 deaf person: medium-dark skin tone +1F9CF 1F3FF ; fully-qualified # 🧏🏿 E12.0 deaf person: dark skin tone +1F9CF 200D 2642 FE0F ; fully-qualified # 🧏‍♂️ E12.0 deaf man +1F9CF 200D 2642 ; minimally-qualified # 🧏‍♂ E12.0 deaf man +1F9CF 1F3FB 200D 2642 FE0F ; fully-qualified # 🧏🏻‍♂️ E12.0 deaf man: light skin tone +1F9CF 1F3FB 200D 2642 ; minimally-qualified # 🧏🏻‍♂ E12.0 deaf man: light skin tone +1F9CF 1F3FC 200D 2642 FE0F ; fully-qualified # 🧏🏼‍♂️ E12.0 deaf man: medium-light skin tone +1F9CF 1F3FC 200D 2642 ; minimally-qualified # 🧏🏼‍♂ E12.0 deaf man: medium-light skin tone +1F9CF 1F3FD 200D 2642 FE0F ; fully-qualified # 🧏🏽‍♂️ E12.0 deaf man: medium skin tone +1F9CF 1F3FD 200D 2642 ; minimally-qualified # 🧏🏽‍♂ E12.0 deaf man: medium skin tone +1F9CF 1F3FE 200D 2642 FE0F ; fully-qualified # 🧏🏾‍♂️ E12.0 deaf man: medium-dark skin tone +1F9CF 1F3FE 200D 2642 ; minimally-qualified # 🧏🏾‍♂ E12.0 deaf man: medium-dark skin tone +1F9CF 1F3FF 200D 2642 FE0F ; fully-qualified # 🧏🏿‍♂️ E12.0 deaf man: dark skin tone +1F9CF 1F3FF 200D 2642 ; minimally-qualified # 🧏🏿‍♂ E12.0 deaf man: dark skin tone +1F9CF 200D 2640 FE0F ; fully-qualified # 🧏‍♀️ E12.0 deaf woman +1F9CF 200D 2640 ; minimally-qualified # 🧏‍♀ E12.0 deaf woman +1F9CF 1F3FB 200D 2640 FE0F ; fully-qualified # 🧏🏻‍♀️ E12.0 deaf woman: light skin tone +1F9CF 1F3FB 200D 2640 ; minimally-qualified # 🧏🏻‍♀ E12.0 deaf woman: light skin tone +1F9CF 1F3FC 200D 2640 FE0F ; fully-qualified # 🧏🏼‍♀️ E12.0 deaf woman: medium-light skin tone +1F9CF 1F3FC 200D 2640 ; minimally-qualified # 🧏🏼‍♀ E12.0 deaf woman: medium-light skin tone +1F9CF 1F3FD 200D 2640 FE0F ; fully-qualified # 🧏🏽‍♀️ E12.0 deaf woman: medium skin tone +1F9CF 1F3FD 200D 2640 ; minimally-qualified # 🧏🏽‍♀ E12.0 deaf woman: medium skin tone +1F9CF 1F3FE 200D 2640 FE0F ; fully-qualified # 🧏🏾‍♀️ E12.0 deaf woman: medium-dark skin tone +1F9CF 1F3FE 200D 2640 ; minimally-qualified # 🧏🏾‍♀ E12.0 deaf woman: medium-dark skin tone +1F9CF 1F3FF 200D 2640 FE0F ; fully-qualified # 🧏🏿‍♀️ E12.0 deaf woman: dark skin tone +1F9CF 1F3FF 200D 2640 ; minimally-qualified # 🧏🏿‍♀ E12.0 deaf woman: dark skin tone +1F647 ; fully-qualified # 🙇 E0.6 person bowing +1F647 1F3FB ; fully-qualified # 🙇🏻 E1.0 person bowing: light skin tone +1F647 1F3FC ; fully-qualified # 🙇🏼 E1.0 person bowing: medium-light skin tone +1F647 1F3FD ; fully-qualified # 🙇🏽 E1.0 person bowing: medium skin tone +1F647 1F3FE ; fully-qualified # 🙇🏾 E1.0 person bowing: medium-dark skin tone +1F647 1F3FF ; fully-qualified # 🙇🏿 E1.0 person bowing: dark skin tone +1F647 200D 2642 FE0F ; fully-qualified # 🙇‍♂️ E4.0 man bowing +1F647 200D 2642 ; minimally-qualified # 🙇‍♂ E4.0 man bowing +1F647 1F3FB 200D 2642 FE0F ; fully-qualified # 🙇🏻‍♂️ E4.0 man bowing: light skin tone +1F647 1F3FB 200D 2642 ; minimally-qualified # 🙇🏻‍♂ E4.0 man bowing: light skin tone +1F647 1F3FC 200D 2642 FE0F ; fully-qualified # 🙇🏼‍♂️ E4.0 man bowing: medium-light skin tone +1F647 1F3FC 200D 2642 ; minimally-qualified # 🙇🏼‍♂ E4.0 man bowing: medium-light skin tone +1F647 1F3FD 200D 2642 FE0F ; fully-qualified # 🙇🏽‍♂️ E4.0 man bowing: medium skin tone +1F647 1F3FD 200D 2642 ; minimally-qualified # 🙇🏽‍♂ E4.0 man bowing: medium skin tone +1F647 1F3FE 200D 2642 FE0F ; fully-qualified # 🙇🏾‍♂️ E4.0 man bowing: medium-dark skin tone +1F647 1F3FE 200D 2642 ; minimally-qualified # 🙇🏾‍♂ E4.0 man bowing: medium-dark skin tone +1F647 1F3FF 200D 2642 FE0F ; fully-qualified # 🙇🏿‍♂️ E4.0 man bowing: dark skin tone +1F647 1F3FF 200D 2642 ; minimally-qualified # 🙇🏿‍♂ E4.0 man bowing: dark skin tone +1F647 200D 2640 FE0F ; fully-qualified # 🙇‍♀️ E4.0 woman bowing +1F647 200D 2640 ; minimally-qualified # 🙇‍♀ E4.0 woman bowing +1F647 1F3FB 200D 2640 FE0F ; fully-qualified # 🙇🏻‍♀️ E4.0 woman bowing: light skin tone +1F647 1F3FB 200D 2640 ; minimally-qualified # 🙇🏻‍♀ E4.0 woman bowing: light skin tone +1F647 1F3FC 200D 2640 FE0F ; fully-qualified # 🙇🏼‍♀️ E4.0 woman bowing: medium-light skin tone +1F647 1F3FC 200D 2640 ; minimally-qualified # 🙇🏼‍♀ E4.0 woman bowing: medium-light skin tone +1F647 1F3FD 200D 2640 FE0F ; fully-qualified # 🙇🏽‍♀️ E4.0 woman bowing: medium skin tone +1F647 1F3FD 200D 2640 ; minimally-qualified # 🙇🏽‍♀ E4.0 woman bowing: medium skin tone +1F647 1F3FE 200D 2640 FE0F ; fully-qualified # 🙇🏾‍♀️ E4.0 woman bowing: medium-dark skin tone +1F647 1F3FE 200D 2640 ; minimally-qualified # 🙇🏾‍♀ E4.0 woman bowing: medium-dark skin tone +1F647 1F3FF 200D 2640 FE0F ; fully-qualified # 🙇🏿‍♀️ E4.0 woman bowing: dark skin tone +1F647 1F3FF 200D 2640 ; minimally-qualified # 🙇🏿‍♀ E4.0 woman bowing: dark skin tone +1F926 ; fully-qualified # 🤦 E3.0 person facepalming +1F926 1F3FB ; fully-qualified # 🤦🏻 E3.0 person facepalming: light skin tone +1F926 1F3FC ; fully-qualified # 🤦🏼 E3.0 person facepalming: medium-light skin tone +1F926 1F3FD ; fully-qualified # 🤦🏽 E3.0 person facepalming: medium skin tone +1F926 1F3FE ; fully-qualified # 🤦🏾 E3.0 person facepalming: medium-dark skin tone +1F926 1F3FF ; fully-qualified # 🤦🏿 E3.0 person facepalming: dark skin tone +1F926 200D 2642 FE0F ; fully-qualified # 🤦‍♂️ E4.0 man facepalming +1F926 200D 2642 ; minimally-qualified # 🤦‍♂ E4.0 man facepalming +1F926 1F3FB 200D 2642 FE0F ; fully-qualified # 🤦🏻‍♂️ E4.0 man facepalming: light skin tone +1F926 1F3FB 200D 2642 ; minimally-qualified # 🤦🏻‍♂ E4.0 man facepalming: light skin tone +1F926 1F3FC 200D 2642 FE0F ; fully-qualified # 🤦🏼‍♂️ E4.0 man facepalming: medium-light skin tone +1F926 1F3FC 200D 2642 ; minimally-qualified # 🤦🏼‍♂ E4.0 man facepalming: medium-light skin tone +1F926 1F3FD 200D 2642 FE0F ; fully-qualified # 🤦🏽‍♂️ E4.0 man facepalming: medium skin tone +1F926 1F3FD 200D 2642 ; minimally-qualified # 🤦🏽‍♂ E4.0 man facepalming: medium skin tone +1F926 1F3FE 200D 2642 FE0F ; fully-qualified # 🤦🏾‍♂️ E4.0 man facepalming: medium-dark skin tone +1F926 1F3FE 200D 2642 ; minimally-qualified # 🤦🏾‍♂ E4.0 man facepalming: medium-dark skin tone +1F926 1F3FF 200D 2642 FE0F ; fully-qualified # 🤦🏿‍♂️ E4.0 man facepalming: dark skin tone +1F926 1F3FF 200D 2642 ; minimally-qualified # 🤦🏿‍♂ E4.0 man facepalming: dark skin tone +1F926 200D 2640 FE0F ; fully-qualified # 🤦‍♀️ E4.0 woman facepalming +1F926 200D 2640 ; minimally-qualified # 🤦‍♀ E4.0 woman facepalming +1F926 1F3FB 200D 2640 FE0F ; fully-qualified # 🤦🏻‍♀️ E4.0 woman facepalming: light skin tone +1F926 1F3FB 200D 2640 ; minimally-qualified # 🤦🏻‍♀ E4.0 woman facepalming: light skin tone +1F926 1F3FC 200D 2640 FE0F ; fully-qualified # 🤦🏼‍♀️ E4.0 woman facepalming: medium-light skin tone +1F926 1F3FC 200D 2640 ; minimally-qualified # 🤦🏼‍♀ E4.0 woman facepalming: medium-light skin tone +1F926 1F3FD 200D 2640 FE0F ; fully-qualified # 🤦🏽‍♀️ E4.0 woman facepalming: medium skin tone +1F926 1F3FD 200D 2640 ; minimally-qualified # 🤦🏽‍♀ E4.0 woman facepalming: medium skin tone +1F926 1F3FE 200D 2640 FE0F ; fully-qualified # 🤦🏾‍♀️ E4.0 woman facepalming: medium-dark skin tone +1F926 1F3FE 200D 2640 ; minimally-qualified # 🤦🏾‍♀ E4.0 woman facepalming: medium-dark skin tone +1F926 1F3FF 200D 2640 FE0F ; fully-qualified # 🤦🏿‍♀️ E4.0 woman facepalming: dark skin tone +1F926 1F3FF 200D 2640 ; minimally-qualified # 🤦🏿‍♀ E4.0 woman facepalming: dark skin tone +1F937 ; fully-qualified # 🤷 E3.0 person shrugging +1F937 1F3FB ; fully-qualified # 🤷🏻 E3.0 person shrugging: light skin tone +1F937 1F3FC ; fully-qualified # 🤷🏼 E3.0 person shrugging: medium-light skin tone +1F937 1F3FD ; fully-qualified # 🤷🏽 E3.0 person shrugging: medium skin tone +1F937 1F3FE ; fully-qualified # 🤷🏾 E3.0 person shrugging: medium-dark skin tone +1F937 1F3FF ; fully-qualified # 🤷🏿 E3.0 person shrugging: dark skin tone +1F937 200D 2642 FE0F ; fully-qualified # 🤷‍♂️ E4.0 man shrugging +1F937 200D 2642 ; minimally-qualified # 🤷‍♂ E4.0 man shrugging +1F937 1F3FB 200D 2642 FE0F ; fully-qualified # 🤷🏻‍♂️ E4.0 man shrugging: light skin tone +1F937 1F3FB 200D 2642 ; minimally-qualified # 🤷🏻‍♂ E4.0 man shrugging: light skin tone +1F937 1F3FC 200D 2642 FE0F ; fully-qualified # 🤷🏼‍♂️ E4.0 man shrugging: medium-light skin tone +1F937 1F3FC 200D 2642 ; minimally-qualified # 🤷🏼‍♂ E4.0 man shrugging: medium-light skin tone +1F937 1F3FD 200D 2642 FE0F ; fully-qualified # 🤷🏽‍♂️ E4.0 man shrugging: medium skin tone +1F937 1F3FD 200D 2642 ; minimally-qualified # 🤷🏽‍♂ E4.0 man shrugging: medium skin tone +1F937 1F3FE 200D 2642 FE0F ; fully-qualified # 🤷🏾‍♂️ E4.0 man shrugging: medium-dark skin tone +1F937 1F3FE 200D 2642 ; minimally-qualified # 🤷🏾‍♂ E4.0 man shrugging: medium-dark skin tone +1F937 1F3FF 200D 2642 FE0F ; fully-qualified # 🤷🏿‍♂️ E4.0 man shrugging: dark skin tone +1F937 1F3FF 200D 2642 ; minimally-qualified # 🤷🏿‍♂ E4.0 man shrugging: dark skin tone +1F937 200D 2640 FE0F ; fully-qualified # 🤷‍♀️ E4.0 woman shrugging +1F937 200D 2640 ; minimally-qualified # 🤷‍♀ E4.0 woman shrugging +1F937 1F3FB 200D 2640 FE0F ; fully-qualified # 🤷🏻‍♀️ E4.0 woman shrugging: light skin tone +1F937 1F3FB 200D 2640 ; minimally-qualified # 🤷🏻‍♀ E4.0 woman shrugging: light skin tone +1F937 1F3FC 200D 2640 FE0F ; fully-qualified # 🤷🏼‍♀️ E4.0 woman shrugging: medium-light skin tone +1F937 1F3FC 200D 2640 ; minimally-qualified # 🤷🏼‍♀ E4.0 woman shrugging: medium-light skin tone +1F937 1F3FD 200D 2640 FE0F ; fully-qualified # 🤷🏽‍♀️ E4.0 woman shrugging: medium skin tone +1F937 1F3FD 200D 2640 ; minimally-qualified # 🤷🏽‍♀ E4.0 woman shrugging: medium skin tone +1F937 1F3FE 200D 2640 FE0F ; fully-qualified # 🤷🏾‍♀️ E4.0 woman shrugging: medium-dark skin tone +1F937 1F3FE 200D 2640 ; minimally-qualified # 🤷🏾‍♀ E4.0 woman shrugging: medium-dark skin tone +1F937 1F3FF 200D 2640 FE0F ; fully-qualified # 🤷🏿‍♀️ E4.0 woman shrugging: dark skin tone +1F937 1F3FF 200D 2640 ; minimally-qualified # 🤷🏿‍♀ E4.0 woman shrugging: dark skin tone + +# subgroup: person-role +1F9D1 200D 2695 FE0F ; fully-qualified # 🧑‍⚕️ E12.1 health worker +1F9D1 200D 2695 ; minimally-qualified # 🧑‍⚕ E12.1 health worker +1F9D1 1F3FB 200D 2695 FE0F ; fully-qualified # 🧑🏻‍⚕️ E12.1 health worker: light skin tone +1F9D1 1F3FB 200D 2695 ; minimally-qualified # 🧑🏻‍⚕ E12.1 health worker: light skin tone +1F9D1 1F3FC 200D 2695 FE0F ; fully-qualified # 🧑🏼‍⚕️ E12.1 health worker: medium-light skin tone +1F9D1 1F3FC 200D 2695 ; minimally-qualified # 🧑🏼‍⚕ E12.1 health worker: medium-light skin tone +1F9D1 1F3FD 200D 2695 FE0F ; fully-qualified # 🧑🏽‍⚕️ E12.1 health worker: medium skin tone +1F9D1 1F3FD 200D 2695 ; minimally-qualified # 🧑🏽‍⚕ E12.1 health worker: medium skin tone +1F9D1 1F3FE 200D 2695 FE0F ; fully-qualified # 🧑🏾‍⚕️ E12.1 health worker: medium-dark skin tone +1F9D1 1F3FE 200D 2695 ; minimally-qualified # 🧑🏾‍⚕ E12.1 health worker: medium-dark skin tone +1F9D1 1F3FF 200D 2695 FE0F ; fully-qualified # 🧑🏿‍⚕️ E12.1 health worker: dark skin tone +1F9D1 1F3FF 200D 2695 ; minimally-qualified # 🧑🏿‍⚕ E12.1 health worker: dark skin tone +1F468 200D 2695 FE0F ; fully-qualified # 👨‍⚕️ E4.0 man health worker +1F468 200D 2695 ; minimally-qualified # 👨‍⚕ E4.0 man health worker +1F468 1F3FB 200D 2695 FE0F ; fully-qualified # 👨🏻‍⚕️ E4.0 man health worker: light skin tone +1F468 1F3FB 200D 2695 ; minimally-qualified # 👨🏻‍⚕ E4.0 man health worker: light skin tone +1F468 1F3FC 200D 2695 FE0F ; fully-qualified # 👨🏼‍⚕️ E4.0 man health worker: medium-light skin tone +1F468 1F3FC 200D 2695 ; minimally-qualified # 👨🏼‍⚕ E4.0 man health worker: medium-light skin tone +1F468 1F3FD 200D 2695 FE0F ; fully-qualified # 👨🏽‍⚕️ E4.0 man health worker: medium skin tone +1F468 1F3FD 200D 2695 ; minimally-qualified # 👨🏽‍⚕ E4.0 man health worker: medium skin tone +1F468 1F3FE 200D 2695 FE0F ; fully-qualified # 👨🏾‍⚕️ E4.0 man health worker: medium-dark skin tone +1F468 1F3FE 200D 2695 ; minimally-qualified # 👨🏾‍⚕ E4.0 man health worker: medium-dark skin tone +1F468 1F3FF 200D 2695 FE0F ; fully-qualified # 👨🏿‍⚕️ E4.0 man health worker: dark skin tone +1F468 1F3FF 200D 2695 ; minimally-qualified # 👨🏿‍⚕ E4.0 man health worker: dark skin tone +1F469 200D 2695 FE0F ; fully-qualified # 👩‍⚕️ E4.0 woman health worker +1F469 200D 2695 ; minimally-qualified # 👩‍⚕ E4.0 woman health worker +1F469 1F3FB 200D 2695 FE0F ; fully-qualified # 👩🏻‍⚕️ E4.0 woman health worker: light skin tone +1F469 1F3FB 200D 2695 ; minimally-qualified # 👩🏻‍⚕ E4.0 woman health worker: light skin tone +1F469 1F3FC 200D 2695 FE0F ; fully-qualified # 👩🏼‍⚕️ E4.0 woman health worker: medium-light skin tone +1F469 1F3FC 200D 2695 ; minimally-qualified # 👩🏼‍⚕ E4.0 woman health worker: medium-light skin tone +1F469 1F3FD 200D 2695 FE0F ; fully-qualified # 👩🏽‍⚕️ E4.0 woman health worker: medium skin tone +1F469 1F3FD 200D 2695 ; minimally-qualified # 👩🏽‍⚕ E4.0 woman health worker: medium skin tone +1F469 1F3FE 200D 2695 FE0F ; fully-qualified # 👩🏾‍⚕️ E4.0 woman health worker: medium-dark skin tone +1F469 1F3FE 200D 2695 ; minimally-qualified # 👩🏾‍⚕ E4.0 woman health worker: medium-dark skin tone +1F469 1F3FF 200D 2695 FE0F ; fully-qualified # 👩🏿‍⚕️ E4.0 woman health worker: dark skin tone +1F469 1F3FF 200D 2695 ; minimally-qualified # 👩🏿‍⚕ E4.0 woman health worker: dark skin tone +1F9D1 200D 1F393 ; fully-qualified # 🧑‍🎓 E12.1 student +1F9D1 1F3FB 200D 1F393 ; fully-qualified # 🧑🏻‍🎓 E12.1 student: light skin tone +1F9D1 1F3FC 200D 1F393 ; fully-qualified # 🧑🏼‍🎓 E12.1 student: medium-light skin tone +1F9D1 1F3FD 200D 1F393 ; fully-qualified # 🧑🏽‍🎓 E12.1 student: medium skin tone +1F9D1 1F3FE 200D 1F393 ; fully-qualified # 🧑🏾‍🎓 E12.1 student: medium-dark skin tone +1F9D1 1F3FF 200D 1F393 ; fully-qualified # 🧑🏿‍🎓 E12.1 student: dark skin tone +1F468 200D 1F393 ; fully-qualified # 👨‍🎓 E4.0 man student +1F468 1F3FB 200D 1F393 ; fully-qualified # 👨🏻‍🎓 E4.0 man student: light skin tone +1F468 1F3FC 200D 1F393 ; fully-qualified # 👨🏼‍🎓 E4.0 man student: medium-light skin tone +1F468 1F3FD 200D 1F393 ; fully-qualified # 👨🏽‍🎓 E4.0 man student: medium skin tone +1F468 1F3FE 200D 1F393 ; fully-qualified # 👨🏾‍🎓 E4.0 man student: medium-dark skin tone +1F468 1F3FF 200D 1F393 ; fully-qualified # 👨🏿‍🎓 E4.0 man student: dark skin tone +1F469 200D 1F393 ; fully-qualified # 👩‍🎓 E4.0 woman student +1F469 1F3FB 200D 1F393 ; fully-qualified # 👩🏻‍🎓 E4.0 woman student: light skin tone +1F469 1F3FC 200D 1F393 ; fully-qualified # 👩🏼‍🎓 E4.0 woman student: medium-light skin tone +1F469 1F3FD 200D 1F393 ; fully-qualified # 👩🏽‍🎓 E4.0 woman student: medium skin tone +1F469 1F3FE 200D 1F393 ; fully-qualified # 👩🏾‍🎓 E4.0 woman student: medium-dark skin tone +1F469 1F3FF 200D 1F393 ; fully-qualified # 👩🏿‍🎓 E4.0 woman student: dark skin tone +1F9D1 200D 1F3EB ; fully-qualified # 🧑‍🏫 E12.1 teacher +1F9D1 1F3FB 200D 1F3EB ; fully-qualified # 🧑🏻‍🏫 E12.1 teacher: light skin tone +1F9D1 1F3FC 200D 1F3EB ; fully-qualified # 🧑🏼‍🏫 E12.1 teacher: medium-light skin tone +1F9D1 1F3FD 200D 1F3EB ; fully-qualified # 🧑🏽‍🏫 E12.1 teacher: medium skin tone +1F9D1 1F3FE 200D 1F3EB ; fully-qualified # 🧑🏾‍🏫 E12.1 teacher: medium-dark skin tone +1F9D1 1F3FF 200D 1F3EB ; fully-qualified # 🧑🏿‍🏫 E12.1 teacher: dark skin tone +1F468 200D 1F3EB ; fully-qualified # 👨‍🏫 E4.0 man teacher +1F468 1F3FB 200D 1F3EB ; fully-qualified # 👨🏻‍🏫 E4.0 man teacher: light skin tone +1F468 1F3FC 200D 1F3EB ; fully-qualified # 👨🏼‍🏫 E4.0 man teacher: medium-light skin tone +1F468 1F3FD 200D 1F3EB ; fully-qualified # 👨🏽‍🏫 E4.0 man teacher: medium skin tone +1F468 1F3FE 200D 1F3EB ; fully-qualified # 👨🏾‍🏫 E4.0 man teacher: medium-dark skin tone +1F468 1F3FF 200D 1F3EB ; fully-qualified # 👨🏿‍🏫 E4.0 man teacher: dark skin tone +1F469 200D 1F3EB ; fully-qualified # 👩‍🏫 E4.0 woman teacher +1F469 1F3FB 200D 1F3EB ; fully-qualified # 👩🏻‍🏫 E4.0 woman teacher: light skin tone +1F469 1F3FC 200D 1F3EB ; fully-qualified # 👩🏼‍🏫 E4.0 woman teacher: medium-light skin tone +1F469 1F3FD 200D 1F3EB ; fully-qualified # 👩🏽‍🏫 E4.0 woman teacher: medium skin tone +1F469 1F3FE 200D 1F3EB ; fully-qualified # 👩🏾‍🏫 E4.0 woman teacher: medium-dark skin tone +1F469 1F3FF 200D 1F3EB ; fully-qualified # 👩🏿‍🏫 E4.0 woman teacher: dark skin tone +1F9D1 200D 2696 FE0F ; fully-qualified # 🧑‍⚖️ E12.1 judge +1F9D1 200D 2696 ; minimally-qualified # 🧑‍⚖ E12.1 judge +1F9D1 1F3FB 200D 2696 FE0F ; fully-qualified # 🧑🏻‍⚖️ E12.1 judge: light skin tone +1F9D1 1F3FB 200D 2696 ; minimally-qualified # 🧑🏻‍⚖ E12.1 judge: light skin tone +1F9D1 1F3FC 200D 2696 FE0F ; fully-qualified # 🧑🏼‍⚖️ E12.1 judge: medium-light skin tone +1F9D1 1F3FC 200D 2696 ; minimally-qualified # 🧑🏼‍⚖ E12.1 judge: medium-light skin tone +1F9D1 1F3FD 200D 2696 FE0F ; fully-qualified # 🧑🏽‍⚖️ E12.1 judge: medium skin tone +1F9D1 1F3FD 200D 2696 ; minimally-qualified # 🧑🏽‍⚖ E12.1 judge: medium skin tone +1F9D1 1F3FE 200D 2696 FE0F ; fully-qualified # 🧑🏾‍⚖️ E12.1 judge: medium-dark skin tone +1F9D1 1F3FE 200D 2696 ; minimally-qualified # 🧑🏾‍⚖ E12.1 judge: medium-dark skin tone +1F9D1 1F3FF 200D 2696 FE0F ; fully-qualified # 🧑🏿‍⚖️ E12.1 judge: dark skin tone +1F9D1 1F3FF 200D 2696 ; minimally-qualified # 🧑🏿‍⚖ E12.1 judge: dark skin tone +1F468 200D 2696 FE0F ; fully-qualified # 👨‍⚖️ E4.0 man judge +1F468 200D 2696 ; minimally-qualified # 👨‍⚖ E4.0 man judge +1F468 1F3FB 200D 2696 FE0F ; fully-qualified # 👨🏻‍⚖️ E4.0 man judge: light skin tone +1F468 1F3FB 200D 2696 ; minimally-qualified # 👨🏻‍⚖ E4.0 man judge: light skin tone +1F468 1F3FC 200D 2696 FE0F ; fully-qualified # 👨🏼‍⚖️ E4.0 man judge: medium-light skin tone +1F468 1F3FC 200D 2696 ; minimally-qualified # 👨🏼‍⚖ E4.0 man judge: medium-light skin tone +1F468 1F3FD 200D 2696 FE0F ; fully-qualified # 👨🏽‍⚖️ E4.0 man judge: medium skin tone +1F468 1F3FD 200D 2696 ; minimally-qualified # 👨🏽‍⚖ E4.0 man judge: medium skin tone +1F468 1F3FE 200D 2696 FE0F ; fully-qualified # 👨🏾‍⚖️ E4.0 man judge: medium-dark skin tone +1F468 1F3FE 200D 2696 ; minimally-qualified # 👨🏾‍⚖ E4.0 man judge: medium-dark skin tone +1F468 1F3FF 200D 2696 FE0F ; fully-qualified # 👨🏿‍⚖️ E4.0 man judge: dark skin tone +1F468 1F3FF 200D 2696 ; minimally-qualified # 👨🏿‍⚖ E4.0 man judge: dark skin tone +1F469 200D 2696 FE0F ; fully-qualified # 👩‍⚖️ E4.0 woman judge +1F469 200D 2696 ; minimally-qualified # 👩‍⚖ E4.0 woman judge +1F469 1F3FB 200D 2696 FE0F ; fully-qualified # 👩🏻‍⚖️ E4.0 woman judge: light skin tone +1F469 1F3FB 200D 2696 ; minimally-qualified # 👩🏻‍⚖ E4.0 woman judge: light skin tone +1F469 1F3FC 200D 2696 FE0F ; fully-qualified # 👩🏼‍⚖️ E4.0 woman judge: medium-light skin tone +1F469 1F3FC 200D 2696 ; minimally-qualified # 👩🏼‍⚖ E4.0 woman judge: medium-light skin tone +1F469 1F3FD 200D 2696 FE0F ; fully-qualified # 👩🏽‍⚖️ E4.0 woman judge: medium skin tone +1F469 1F3FD 200D 2696 ; minimally-qualified # 👩🏽‍⚖ E4.0 woman judge: medium skin tone +1F469 1F3FE 200D 2696 FE0F ; fully-qualified # 👩🏾‍⚖️ E4.0 woman judge: medium-dark skin tone +1F469 1F3FE 200D 2696 ; minimally-qualified # 👩🏾‍⚖ E4.0 woman judge: medium-dark skin tone +1F469 1F3FF 200D 2696 FE0F ; fully-qualified # 👩🏿‍⚖️ E4.0 woman judge: dark skin tone +1F469 1F3FF 200D 2696 ; minimally-qualified # 👩🏿‍⚖ E4.0 woman judge: dark skin tone +1F9D1 200D 1F33E ; fully-qualified # 🧑‍🌾 E12.1 farmer +1F9D1 1F3FB 200D 1F33E ; fully-qualified # 🧑🏻‍🌾 E12.1 farmer: light skin tone +1F9D1 1F3FC 200D 1F33E ; fully-qualified # 🧑🏼‍🌾 E12.1 farmer: medium-light skin tone +1F9D1 1F3FD 200D 1F33E ; fully-qualified # 🧑🏽‍🌾 E12.1 farmer: medium skin tone +1F9D1 1F3FE 200D 1F33E ; fully-qualified # 🧑🏾‍🌾 E12.1 farmer: medium-dark skin tone +1F9D1 1F3FF 200D 1F33E ; fully-qualified # 🧑🏿‍🌾 E12.1 farmer: dark skin tone +1F468 200D 1F33E ; fully-qualified # 👨‍🌾 E4.0 man farmer +1F468 1F3FB 200D 1F33E ; fully-qualified # 👨🏻‍🌾 E4.0 man farmer: light skin tone +1F468 1F3FC 200D 1F33E ; fully-qualified # 👨🏼‍🌾 E4.0 man farmer: medium-light skin tone +1F468 1F3FD 200D 1F33E ; fully-qualified # 👨🏽‍🌾 E4.0 man farmer: medium skin tone +1F468 1F3FE 200D 1F33E ; fully-qualified # 👨🏾‍🌾 E4.0 man farmer: medium-dark skin tone +1F468 1F3FF 200D 1F33E ; fully-qualified # 👨🏿‍🌾 E4.0 man farmer: dark skin tone +1F469 200D 1F33E ; fully-qualified # 👩‍🌾 E4.0 woman farmer +1F469 1F3FB 200D 1F33E ; fully-qualified # 👩🏻‍🌾 E4.0 woman farmer: light skin tone +1F469 1F3FC 200D 1F33E ; fully-qualified # 👩🏼‍🌾 E4.0 woman farmer: medium-light skin tone +1F469 1F3FD 200D 1F33E ; fully-qualified # 👩🏽‍🌾 E4.0 woman farmer: medium skin tone +1F469 1F3FE 200D 1F33E ; fully-qualified # 👩🏾‍🌾 E4.0 woman farmer: medium-dark skin tone +1F469 1F3FF 200D 1F33E ; fully-qualified # 👩🏿‍🌾 E4.0 woman farmer: dark skin tone +1F9D1 200D 1F373 ; fully-qualified # 🧑‍🍳 E12.1 cook +1F9D1 1F3FB 200D 1F373 ; fully-qualified # 🧑🏻‍🍳 E12.1 cook: light skin tone +1F9D1 1F3FC 200D 1F373 ; fully-qualified # 🧑🏼‍🍳 E12.1 cook: medium-light skin tone +1F9D1 1F3FD 200D 1F373 ; fully-qualified # 🧑🏽‍🍳 E12.1 cook: medium skin tone +1F9D1 1F3FE 200D 1F373 ; fully-qualified # 🧑🏾‍🍳 E12.1 cook: medium-dark skin tone +1F9D1 1F3FF 200D 1F373 ; fully-qualified # 🧑🏿‍🍳 E12.1 cook: dark skin tone +1F468 200D 1F373 ; fully-qualified # 👨‍🍳 E4.0 man cook +1F468 1F3FB 200D 1F373 ; fully-qualified # 👨🏻‍🍳 E4.0 man cook: light skin tone +1F468 1F3FC 200D 1F373 ; fully-qualified # 👨🏼‍🍳 E4.0 man cook: medium-light skin tone +1F468 1F3FD 200D 1F373 ; fully-qualified # 👨🏽‍🍳 E4.0 man cook: medium skin tone +1F468 1F3FE 200D 1F373 ; fully-qualified # 👨🏾‍🍳 E4.0 man cook: medium-dark skin tone +1F468 1F3FF 200D 1F373 ; fully-qualified # 👨🏿‍🍳 E4.0 man cook: dark skin tone +1F469 200D 1F373 ; fully-qualified # 👩‍🍳 E4.0 woman cook +1F469 1F3FB 200D 1F373 ; fully-qualified # 👩🏻‍🍳 E4.0 woman cook: light skin tone +1F469 1F3FC 200D 1F373 ; fully-qualified # 👩🏼‍🍳 E4.0 woman cook: medium-light skin tone +1F469 1F3FD 200D 1F373 ; fully-qualified # 👩🏽‍🍳 E4.0 woman cook: medium skin tone +1F469 1F3FE 200D 1F373 ; fully-qualified # 👩🏾‍🍳 E4.0 woman cook: medium-dark skin tone +1F469 1F3FF 200D 1F373 ; fully-qualified # 👩🏿‍🍳 E4.0 woman cook: dark skin tone +1F9D1 200D 1F527 ; fully-qualified # 🧑‍🔧 E12.1 mechanic +1F9D1 1F3FB 200D 1F527 ; fully-qualified # 🧑🏻‍🔧 E12.1 mechanic: light skin tone +1F9D1 1F3FC 200D 1F527 ; fully-qualified # 🧑🏼‍🔧 E12.1 mechanic: medium-light skin tone +1F9D1 1F3FD 200D 1F527 ; fully-qualified # 🧑🏽‍🔧 E12.1 mechanic: medium skin tone +1F9D1 1F3FE 200D 1F527 ; fully-qualified # 🧑🏾‍🔧 E12.1 mechanic: medium-dark skin tone +1F9D1 1F3FF 200D 1F527 ; fully-qualified # 🧑🏿‍🔧 E12.1 mechanic: dark skin tone +1F468 200D 1F527 ; fully-qualified # 👨‍🔧 E4.0 man mechanic +1F468 1F3FB 200D 1F527 ; fully-qualified # 👨🏻‍🔧 E4.0 man mechanic: light skin tone +1F468 1F3FC 200D 1F527 ; fully-qualified # 👨🏼‍🔧 E4.0 man mechanic: medium-light skin tone +1F468 1F3FD 200D 1F527 ; fully-qualified # 👨🏽‍🔧 E4.0 man mechanic: medium skin tone +1F468 1F3FE 200D 1F527 ; fully-qualified # 👨🏾‍🔧 E4.0 man mechanic: medium-dark skin tone +1F468 1F3FF 200D 1F527 ; fully-qualified # 👨🏿‍🔧 E4.0 man mechanic: dark skin tone +1F469 200D 1F527 ; fully-qualified # 👩‍🔧 E4.0 woman mechanic +1F469 1F3FB 200D 1F527 ; fully-qualified # 👩🏻‍🔧 E4.0 woman mechanic: light skin tone +1F469 1F3FC 200D 1F527 ; fully-qualified # 👩🏼‍🔧 E4.0 woman mechanic: medium-light skin tone +1F469 1F3FD 200D 1F527 ; fully-qualified # 👩🏽‍🔧 E4.0 woman mechanic: medium skin tone +1F469 1F3FE 200D 1F527 ; fully-qualified # 👩🏾‍🔧 E4.0 woman mechanic: medium-dark skin tone +1F469 1F3FF 200D 1F527 ; fully-qualified # 👩🏿‍🔧 E4.0 woman mechanic: dark skin tone +1F9D1 200D 1F3ED ; fully-qualified # 🧑‍🏭 E12.1 factory worker +1F9D1 1F3FB 200D 1F3ED ; fully-qualified # 🧑🏻‍🏭 E12.1 factory worker: light skin tone +1F9D1 1F3FC 200D 1F3ED ; fully-qualified # 🧑🏼‍🏭 E12.1 factory worker: medium-light skin tone +1F9D1 1F3FD 200D 1F3ED ; fully-qualified # 🧑🏽‍🏭 E12.1 factory worker: medium skin tone +1F9D1 1F3FE 200D 1F3ED ; fully-qualified # 🧑🏾‍🏭 E12.1 factory worker: medium-dark skin tone +1F9D1 1F3FF 200D 1F3ED ; fully-qualified # 🧑🏿‍🏭 E12.1 factory worker: dark skin tone +1F468 200D 1F3ED ; fully-qualified # 👨‍🏭 E4.0 man factory worker +1F468 1F3FB 200D 1F3ED ; fully-qualified # 👨🏻‍🏭 E4.0 man factory worker: light skin tone +1F468 1F3FC 200D 1F3ED ; fully-qualified # 👨🏼‍🏭 E4.0 man factory worker: medium-light skin tone +1F468 1F3FD 200D 1F3ED ; fully-qualified # 👨🏽‍🏭 E4.0 man factory worker: medium skin tone +1F468 1F3FE 200D 1F3ED ; fully-qualified # 👨🏾‍🏭 E4.0 man factory worker: medium-dark skin tone +1F468 1F3FF 200D 1F3ED ; fully-qualified # 👨🏿‍🏭 E4.0 man factory worker: dark skin tone +1F469 200D 1F3ED ; fully-qualified # 👩‍🏭 E4.0 woman factory worker +1F469 1F3FB 200D 1F3ED ; fully-qualified # 👩🏻‍🏭 E4.0 woman factory worker: light skin tone +1F469 1F3FC 200D 1F3ED ; fully-qualified # 👩🏼‍🏭 E4.0 woman factory worker: medium-light skin tone +1F469 1F3FD 200D 1F3ED ; fully-qualified # 👩🏽‍🏭 E4.0 woman factory worker: medium skin tone +1F469 1F3FE 200D 1F3ED ; fully-qualified # 👩🏾‍🏭 E4.0 woman factory worker: medium-dark skin tone +1F469 1F3FF 200D 1F3ED ; fully-qualified # 👩🏿‍🏭 E4.0 woman factory worker: dark skin tone +1F9D1 200D 1F4BC ; fully-qualified # 🧑‍💼 E12.1 office worker +1F9D1 1F3FB 200D 1F4BC ; fully-qualified # 🧑🏻‍💼 E12.1 office worker: light skin tone +1F9D1 1F3FC 200D 1F4BC ; fully-qualified # 🧑🏼‍💼 E12.1 office worker: medium-light skin tone +1F9D1 1F3FD 200D 1F4BC ; fully-qualified # 🧑🏽‍💼 E12.1 office worker: medium skin tone +1F9D1 1F3FE 200D 1F4BC ; fully-qualified # 🧑🏾‍💼 E12.1 office worker: medium-dark skin tone +1F9D1 1F3FF 200D 1F4BC ; fully-qualified # 🧑🏿‍💼 E12.1 office worker: dark skin tone +1F468 200D 1F4BC ; fully-qualified # 👨‍💼 E4.0 man office worker +1F468 1F3FB 200D 1F4BC ; fully-qualified # 👨🏻‍💼 E4.0 man office worker: light skin tone +1F468 1F3FC 200D 1F4BC ; fully-qualified # 👨🏼‍💼 E4.0 man office worker: medium-light skin tone +1F468 1F3FD 200D 1F4BC ; fully-qualified # 👨🏽‍💼 E4.0 man office worker: medium skin tone +1F468 1F3FE 200D 1F4BC ; fully-qualified # 👨🏾‍💼 E4.0 man office worker: medium-dark skin tone +1F468 1F3FF 200D 1F4BC ; fully-qualified # 👨🏿‍💼 E4.0 man office worker: dark skin tone +1F469 200D 1F4BC ; fully-qualified # 👩‍💼 E4.0 woman office worker +1F469 1F3FB 200D 1F4BC ; fully-qualified # 👩🏻‍💼 E4.0 woman office worker: light skin tone +1F469 1F3FC 200D 1F4BC ; fully-qualified # 👩🏼‍💼 E4.0 woman office worker: medium-light skin tone +1F469 1F3FD 200D 1F4BC ; fully-qualified # 👩🏽‍💼 E4.0 woman office worker: medium skin tone +1F469 1F3FE 200D 1F4BC ; fully-qualified # 👩🏾‍💼 E4.0 woman office worker: medium-dark skin tone +1F469 1F3FF 200D 1F4BC ; fully-qualified # 👩🏿‍💼 E4.0 woman office worker: dark skin tone +1F9D1 200D 1F52C ; fully-qualified # 🧑‍🔬 E12.1 scientist +1F9D1 1F3FB 200D 1F52C ; fully-qualified # 🧑🏻‍🔬 E12.1 scientist: light skin tone +1F9D1 1F3FC 200D 1F52C ; fully-qualified # 🧑🏼‍🔬 E12.1 scientist: medium-light skin tone +1F9D1 1F3FD 200D 1F52C ; fully-qualified # 🧑🏽‍🔬 E12.1 scientist: medium skin tone +1F9D1 1F3FE 200D 1F52C ; fully-qualified # 🧑🏾‍🔬 E12.1 scientist: medium-dark skin tone +1F9D1 1F3FF 200D 1F52C ; fully-qualified # 🧑🏿‍🔬 E12.1 scientist: dark skin tone +1F468 200D 1F52C ; fully-qualified # 👨‍🔬 E4.0 man scientist +1F468 1F3FB 200D 1F52C ; fully-qualified # 👨🏻‍🔬 E4.0 man scientist: light skin tone +1F468 1F3FC 200D 1F52C ; fully-qualified # 👨🏼‍🔬 E4.0 man scientist: medium-light skin tone +1F468 1F3FD 200D 1F52C ; fully-qualified # 👨🏽‍🔬 E4.0 man scientist: medium skin tone +1F468 1F3FE 200D 1F52C ; fully-qualified # 👨🏾‍🔬 E4.0 man scientist: medium-dark skin tone +1F468 1F3FF 200D 1F52C ; fully-qualified # 👨🏿‍🔬 E4.0 man scientist: dark skin tone +1F469 200D 1F52C ; fully-qualified # 👩‍🔬 E4.0 woman scientist +1F469 1F3FB 200D 1F52C ; fully-qualified # 👩🏻‍🔬 E4.0 woman scientist: light skin tone +1F469 1F3FC 200D 1F52C ; fully-qualified # 👩🏼‍🔬 E4.0 woman scientist: medium-light skin tone +1F469 1F3FD 200D 1F52C ; fully-qualified # 👩🏽‍🔬 E4.0 woman scientist: medium skin tone +1F469 1F3FE 200D 1F52C ; fully-qualified # 👩🏾‍🔬 E4.0 woman scientist: medium-dark skin tone +1F469 1F3FF 200D 1F52C ; fully-qualified # 👩🏿‍🔬 E4.0 woman scientist: dark skin tone +1F9D1 200D 1F4BB ; fully-qualified # 🧑‍💻 E12.1 technologist +1F9D1 1F3FB 200D 1F4BB ; fully-qualified # 🧑🏻‍💻 E12.1 technologist: light skin tone +1F9D1 1F3FC 200D 1F4BB ; fully-qualified # 🧑🏼‍💻 E12.1 technologist: medium-light skin tone +1F9D1 1F3FD 200D 1F4BB ; fully-qualified # 🧑🏽‍💻 E12.1 technologist: medium skin tone +1F9D1 1F3FE 200D 1F4BB ; fully-qualified # 🧑🏾‍💻 E12.1 technologist: medium-dark skin tone +1F9D1 1F3FF 200D 1F4BB ; fully-qualified # 🧑🏿‍💻 E12.1 technologist: dark skin tone +1F468 200D 1F4BB ; fully-qualified # 👨‍💻 E4.0 man technologist +1F468 1F3FB 200D 1F4BB ; fully-qualified # 👨🏻‍💻 E4.0 man technologist: light skin tone +1F468 1F3FC 200D 1F4BB ; fully-qualified # 👨🏼‍💻 E4.0 man technologist: medium-light skin tone +1F468 1F3FD 200D 1F4BB ; fully-qualified # 👨🏽‍💻 E4.0 man technologist: medium skin tone +1F468 1F3FE 200D 1F4BB ; fully-qualified # 👨🏾‍💻 E4.0 man technologist: medium-dark skin tone +1F468 1F3FF 200D 1F4BB ; fully-qualified # 👨🏿‍💻 E4.0 man technologist: dark skin tone +1F469 200D 1F4BB ; fully-qualified # 👩‍💻 E4.0 woman technologist +1F469 1F3FB 200D 1F4BB ; fully-qualified # 👩🏻‍💻 E4.0 woman technologist: light skin tone +1F469 1F3FC 200D 1F4BB ; fully-qualified # 👩🏼‍💻 E4.0 woman technologist: medium-light skin tone +1F469 1F3FD 200D 1F4BB ; fully-qualified # 👩🏽‍💻 E4.0 woman technologist: medium skin tone +1F469 1F3FE 200D 1F4BB ; fully-qualified # 👩🏾‍💻 E4.0 woman technologist: medium-dark skin tone +1F469 1F3FF 200D 1F4BB ; fully-qualified # 👩🏿‍💻 E4.0 woman technologist: dark skin tone +1F9D1 200D 1F3A4 ; fully-qualified # 🧑‍🎤 E12.1 singer +1F9D1 1F3FB 200D 1F3A4 ; fully-qualified # 🧑🏻‍🎤 E12.1 singer: light skin tone +1F9D1 1F3FC 200D 1F3A4 ; fully-qualified # 🧑🏼‍🎤 E12.1 singer: medium-light skin tone +1F9D1 1F3FD 200D 1F3A4 ; fully-qualified # 🧑🏽‍🎤 E12.1 singer: medium skin tone +1F9D1 1F3FE 200D 1F3A4 ; fully-qualified # 🧑🏾‍🎤 E12.1 singer: medium-dark skin tone +1F9D1 1F3FF 200D 1F3A4 ; fully-qualified # 🧑🏿‍🎤 E12.1 singer: dark skin tone +1F468 200D 1F3A4 ; fully-qualified # 👨‍🎤 E4.0 man singer +1F468 1F3FB 200D 1F3A4 ; fully-qualified # 👨🏻‍🎤 E4.0 man singer: light skin tone +1F468 1F3FC 200D 1F3A4 ; fully-qualified # 👨🏼‍🎤 E4.0 man singer: medium-light skin tone +1F468 1F3FD 200D 1F3A4 ; fully-qualified # 👨🏽‍🎤 E4.0 man singer: medium skin tone +1F468 1F3FE 200D 1F3A4 ; fully-qualified # 👨🏾‍🎤 E4.0 man singer: medium-dark skin tone +1F468 1F3FF 200D 1F3A4 ; fully-qualified # 👨🏿‍🎤 E4.0 man singer: dark skin tone +1F469 200D 1F3A4 ; fully-qualified # 👩‍🎤 E4.0 woman singer +1F469 1F3FB 200D 1F3A4 ; fully-qualified # 👩🏻‍🎤 E4.0 woman singer: light skin tone +1F469 1F3FC 200D 1F3A4 ; fully-qualified # 👩🏼‍🎤 E4.0 woman singer: medium-light skin tone +1F469 1F3FD 200D 1F3A4 ; fully-qualified # 👩🏽‍🎤 E4.0 woman singer: medium skin tone +1F469 1F3FE 200D 1F3A4 ; fully-qualified # 👩🏾‍🎤 E4.0 woman singer: medium-dark skin tone +1F469 1F3FF 200D 1F3A4 ; fully-qualified # 👩🏿‍🎤 E4.0 woman singer: dark skin tone +1F9D1 200D 1F3A8 ; fully-qualified # 🧑‍🎨 E12.1 artist +1F9D1 1F3FB 200D 1F3A8 ; fully-qualified # 🧑🏻‍🎨 E12.1 artist: light skin tone +1F9D1 1F3FC 200D 1F3A8 ; fully-qualified # 🧑🏼‍🎨 E12.1 artist: medium-light skin tone +1F9D1 1F3FD 200D 1F3A8 ; fully-qualified # 🧑🏽‍🎨 E12.1 artist: medium skin tone +1F9D1 1F3FE 200D 1F3A8 ; fully-qualified # 🧑🏾‍🎨 E12.1 artist: medium-dark skin tone +1F9D1 1F3FF 200D 1F3A8 ; fully-qualified # 🧑🏿‍🎨 E12.1 artist: dark skin tone +1F468 200D 1F3A8 ; fully-qualified # 👨‍🎨 E4.0 man artist +1F468 1F3FB 200D 1F3A8 ; fully-qualified # 👨🏻‍🎨 E4.0 man artist: light skin tone +1F468 1F3FC 200D 1F3A8 ; fully-qualified # 👨🏼‍🎨 E4.0 man artist: medium-light skin tone +1F468 1F3FD 200D 1F3A8 ; fully-qualified # 👨🏽‍🎨 E4.0 man artist: medium skin tone +1F468 1F3FE 200D 1F3A8 ; fully-qualified # 👨🏾‍🎨 E4.0 man artist: medium-dark skin tone +1F468 1F3FF 200D 1F3A8 ; fully-qualified # 👨🏿‍🎨 E4.0 man artist: dark skin tone +1F469 200D 1F3A8 ; fully-qualified # 👩‍🎨 E4.0 woman artist +1F469 1F3FB 200D 1F3A8 ; fully-qualified # 👩🏻‍🎨 E4.0 woman artist: light skin tone +1F469 1F3FC 200D 1F3A8 ; fully-qualified # 👩🏼‍🎨 E4.0 woman artist: medium-light skin tone +1F469 1F3FD 200D 1F3A8 ; fully-qualified # 👩🏽‍🎨 E4.0 woman artist: medium skin tone +1F469 1F3FE 200D 1F3A8 ; fully-qualified # 👩🏾‍🎨 E4.0 woman artist: medium-dark skin tone +1F469 1F3FF 200D 1F3A8 ; fully-qualified # 👩🏿‍🎨 E4.0 woman artist: dark skin tone +1F9D1 200D 2708 FE0F ; fully-qualified # 🧑‍✈️ E12.1 pilot +1F9D1 200D 2708 ; minimally-qualified # 🧑‍✈ E12.1 pilot +1F9D1 1F3FB 200D 2708 FE0F ; fully-qualified # 🧑🏻‍✈️ E12.1 pilot: light skin tone +1F9D1 1F3FB 200D 2708 ; minimally-qualified # 🧑🏻‍✈ E12.1 pilot: light skin tone +1F9D1 1F3FC 200D 2708 FE0F ; fully-qualified # 🧑🏼‍✈️ E12.1 pilot: medium-light skin tone +1F9D1 1F3FC 200D 2708 ; minimally-qualified # 🧑🏼‍✈ E12.1 pilot: medium-light skin tone +1F9D1 1F3FD 200D 2708 FE0F ; fully-qualified # 🧑🏽‍✈️ E12.1 pilot: medium skin tone +1F9D1 1F3FD 200D 2708 ; minimally-qualified # 🧑🏽‍✈ E12.1 pilot: medium skin tone +1F9D1 1F3FE 200D 2708 FE0F ; fully-qualified # 🧑🏾‍✈️ E12.1 pilot: medium-dark skin tone +1F9D1 1F3FE 200D 2708 ; minimally-qualified # 🧑🏾‍✈ E12.1 pilot: medium-dark skin tone +1F9D1 1F3FF 200D 2708 FE0F ; fully-qualified # 🧑🏿‍✈️ E12.1 pilot: dark skin tone +1F9D1 1F3FF 200D 2708 ; minimally-qualified # 🧑🏿‍✈ E12.1 pilot: dark skin tone +1F468 200D 2708 FE0F ; fully-qualified # 👨‍✈️ E4.0 man pilot +1F468 200D 2708 ; minimally-qualified # 👨‍✈ E4.0 man pilot +1F468 1F3FB 200D 2708 FE0F ; fully-qualified # 👨🏻‍✈️ E4.0 man pilot: light skin tone +1F468 1F3FB 200D 2708 ; minimally-qualified # 👨🏻‍✈ E4.0 man pilot: light skin tone +1F468 1F3FC 200D 2708 FE0F ; fully-qualified # 👨🏼‍✈️ E4.0 man pilot: medium-light skin tone +1F468 1F3FC 200D 2708 ; minimally-qualified # 👨🏼‍✈ E4.0 man pilot: medium-light skin tone +1F468 1F3FD 200D 2708 FE0F ; fully-qualified # 👨🏽‍✈️ E4.0 man pilot: medium skin tone +1F468 1F3FD 200D 2708 ; minimally-qualified # 👨🏽‍✈ E4.0 man pilot: medium skin tone +1F468 1F3FE 200D 2708 FE0F ; fully-qualified # 👨🏾‍✈️ E4.0 man pilot: medium-dark skin tone +1F468 1F3FE 200D 2708 ; minimally-qualified # 👨🏾‍✈ E4.0 man pilot: medium-dark skin tone +1F468 1F3FF 200D 2708 FE0F ; fully-qualified # 👨🏿‍✈️ E4.0 man pilot: dark skin tone +1F468 1F3FF 200D 2708 ; minimally-qualified # 👨🏿‍✈ E4.0 man pilot: dark skin tone +1F469 200D 2708 FE0F ; fully-qualified # 👩‍✈️ E4.0 woman pilot +1F469 200D 2708 ; minimally-qualified # 👩‍✈ E4.0 woman pilot +1F469 1F3FB 200D 2708 FE0F ; fully-qualified # 👩🏻‍✈️ E4.0 woman pilot: light skin tone +1F469 1F3FB 200D 2708 ; minimally-qualified # 👩🏻‍✈ E4.0 woman pilot: light skin tone +1F469 1F3FC 200D 2708 FE0F ; fully-qualified # 👩🏼‍✈️ E4.0 woman pilot: medium-light skin tone +1F469 1F3FC 200D 2708 ; minimally-qualified # 👩🏼‍✈ E4.0 woman pilot: medium-light skin tone +1F469 1F3FD 200D 2708 FE0F ; fully-qualified # 👩🏽‍✈️ E4.0 woman pilot: medium skin tone +1F469 1F3FD 200D 2708 ; minimally-qualified # 👩🏽‍✈ E4.0 woman pilot: medium skin tone +1F469 1F3FE 200D 2708 FE0F ; fully-qualified # 👩🏾‍✈️ E4.0 woman pilot: medium-dark skin tone +1F469 1F3FE 200D 2708 ; minimally-qualified # 👩🏾‍✈ E4.0 woman pilot: medium-dark skin tone +1F469 1F3FF 200D 2708 FE0F ; fully-qualified # 👩🏿‍✈️ E4.0 woman pilot: dark skin tone +1F469 1F3FF 200D 2708 ; minimally-qualified # 👩🏿‍✈ E4.0 woman pilot: dark skin tone +1F9D1 200D 1F680 ; fully-qualified # 🧑‍🚀 E12.1 astronaut +1F9D1 1F3FB 200D 1F680 ; fully-qualified # 🧑🏻‍🚀 E12.1 astronaut: light skin tone +1F9D1 1F3FC 200D 1F680 ; fully-qualified # 🧑🏼‍🚀 E12.1 astronaut: medium-light skin tone +1F9D1 1F3FD 200D 1F680 ; fully-qualified # 🧑🏽‍🚀 E12.1 astronaut: medium skin tone +1F9D1 1F3FE 200D 1F680 ; fully-qualified # 🧑🏾‍🚀 E12.1 astronaut: medium-dark skin tone +1F9D1 1F3FF 200D 1F680 ; fully-qualified # 🧑🏿‍🚀 E12.1 astronaut: dark skin tone +1F468 200D 1F680 ; fully-qualified # 👨‍🚀 E4.0 man astronaut +1F468 1F3FB 200D 1F680 ; fully-qualified # 👨🏻‍🚀 E4.0 man astronaut: light skin tone +1F468 1F3FC 200D 1F680 ; fully-qualified # 👨🏼‍🚀 E4.0 man astronaut: medium-light skin tone +1F468 1F3FD 200D 1F680 ; fully-qualified # 👨🏽‍🚀 E4.0 man astronaut: medium skin tone +1F468 1F3FE 200D 1F680 ; fully-qualified # 👨🏾‍🚀 E4.0 man astronaut: medium-dark skin tone +1F468 1F3FF 200D 1F680 ; fully-qualified # 👨🏿‍🚀 E4.0 man astronaut: dark skin tone +1F469 200D 1F680 ; fully-qualified # 👩‍🚀 E4.0 woman astronaut +1F469 1F3FB 200D 1F680 ; fully-qualified # 👩🏻‍🚀 E4.0 woman astronaut: light skin tone +1F469 1F3FC 200D 1F680 ; fully-qualified # 👩🏼‍🚀 E4.0 woman astronaut: medium-light skin tone +1F469 1F3FD 200D 1F680 ; fully-qualified # 👩🏽‍🚀 E4.0 woman astronaut: medium skin tone +1F469 1F3FE 200D 1F680 ; fully-qualified # 👩🏾‍🚀 E4.0 woman astronaut: medium-dark skin tone +1F469 1F3FF 200D 1F680 ; fully-qualified # 👩🏿‍🚀 E4.0 woman astronaut: dark skin tone +1F9D1 200D 1F692 ; fully-qualified # 🧑‍🚒 E12.1 firefighter +1F9D1 1F3FB 200D 1F692 ; fully-qualified # 🧑🏻‍🚒 E12.1 firefighter: light skin tone +1F9D1 1F3FC 200D 1F692 ; fully-qualified # 🧑🏼‍🚒 E12.1 firefighter: medium-light skin tone +1F9D1 1F3FD 200D 1F692 ; fully-qualified # 🧑🏽‍🚒 E12.1 firefighter: medium skin tone +1F9D1 1F3FE 200D 1F692 ; fully-qualified # 🧑🏾‍🚒 E12.1 firefighter: medium-dark skin tone +1F9D1 1F3FF 200D 1F692 ; fully-qualified # 🧑🏿‍🚒 E12.1 firefighter: dark skin tone +1F468 200D 1F692 ; fully-qualified # 👨‍🚒 E4.0 man firefighter +1F468 1F3FB 200D 1F692 ; fully-qualified # 👨🏻‍🚒 E4.0 man firefighter: light skin tone +1F468 1F3FC 200D 1F692 ; fully-qualified # 👨🏼‍🚒 E4.0 man firefighter: medium-light skin tone +1F468 1F3FD 200D 1F692 ; fully-qualified # 👨🏽‍🚒 E4.0 man firefighter: medium skin tone +1F468 1F3FE 200D 1F692 ; fully-qualified # 👨🏾‍🚒 E4.0 man firefighter: medium-dark skin tone +1F468 1F3FF 200D 1F692 ; fully-qualified # 👨🏿‍🚒 E4.0 man firefighter: dark skin tone +1F469 200D 1F692 ; fully-qualified # 👩‍🚒 E4.0 woman firefighter +1F469 1F3FB 200D 1F692 ; fully-qualified # 👩🏻‍🚒 E4.0 woman firefighter: light skin tone +1F469 1F3FC 200D 1F692 ; fully-qualified # 👩🏼‍🚒 E4.0 woman firefighter: medium-light skin tone +1F469 1F3FD 200D 1F692 ; fully-qualified # 👩🏽‍🚒 E4.0 woman firefighter: medium skin tone +1F469 1F3FE 200D 1F692 ; fully-qualified # 👩🏾‍🚒 E4.0 woman firefighter: medium-dark skin tone +1F469 1F3FF 200D 1F692 ; fully-qualified # 👩🏿‍🚒 E4.0 woman firefighter: dark skin tone +1F46E ; fully-qualified # 👮 E0.6 police officer +1F46E 1F3FB ; fully-qualified # 👮🏻 E1.0 police officer: light skin tone +1F46E 1F3FC ; fully-qualified # 👮🏼 E1.0 police officer: medium-light skin tone +1F46E 1F3FD ; fully-qualified # 👮🏽 E1.0 police officer: medium skin tone +1F46E 1F3FE ; fully-qualified # 👮🏾 E1.0 police officer: medium-dark skin tone +1F46E 1F3FF ; fully-qualified # 👮🏿 E1.0 police officer: dark skin tone +1F46E 200D 2642 FE0F ; fully-qualified # 👮‍♂️ E4.0 man police officer +1F46E 200D 2642 ; minimally-qualified # 👮‍♂ E4.0 man police officer +1F46E 1F3FB 200D 2642 FE0F ; fully-qualified # 👮🏻‍♂️ E4.0 man police officer: light skin tone +1F46E 1F3FB 200D 2642 ; minimally-qualified # 👮🏻‍♂ E4.0 man police officer: light skin tone +1F46E 1F3FC 200D 2642 FE0F ; fully-qualified # 👮🏼‍♂️ E4.0 man police officer: medium-light skin tone +1F46E 1F3FC 200D 2642 ; minimally-qualified # 👮🏼‍♂ E4.0 man police officer: medium-light skin tone +1F46E 1F3FD 200D 2642 FE0F ; fully-qualified # 👮🏽‍♂️ E4.0 man police officer: medium skin tone +1F46E 1F3FD 200D 2642 ; minimally-qualified # 👮🏽‍♂ E4.0 man police officer: medium skin tone +1F46E 1F3FE 200D 2642 FE0F ; fully-qualified # 👮🏾‍♂️ E4.0 man police officer: medium-dark skin tone +1F46E 1F3FE 200D 2642 ; minimally-qualified # 👮🏾‍♂ E4.0 man police officer: medium-dark skin tone +1F46E 1F3FF 200D 2642 FE0F ; fully-qualified # 👮🏿‍♂️ E4.0 man police officer: dark skin tone +1F46E 1F3FF 200D 2642 ; minimally-qualified # 👮🏿‍♂ E4.0 man police officer: dark skin tone +1F46E 200D 2640 FE0F ; fully-qualified # 👮‍♀️ E4.0 woman police officer +1F46E 200D 2640 ; minimally-qualified # 👮‍♀ E4.0 woman police officer +1F46E 1F3FB 200D 2640 FE0F ; fully-qualified # 👮🏻‍♀️ E4.0 woman police officer: light skin tone +1F46E 1F3FB 200D 2640 ; minimally-qualified # 👮🏻‍♀ E4.0 woman police officer: light skin tone +1F46E 1F3FC 200D 2640 FE0F ; fully-qualified # 👮🏼‍♀️ E4.0 woman police officer: medium-light skin tone +1F46E 1F3FC 200D 2640 ; minimally-qualified # 👮🏼‍♀ E4.0 woman police officer: medium-light skin tone +1F46E 1F3FD 200D 2640 FE0F ; fully-qualified # 👮🏽‍♀️ E4.0 woman police officer: medium skin tone +1F46E 1F3FD 200D 2640 ; minimally-qualified # 👮🏽‍♀ E4.0 woman police officer: medium skin tone +1F46E 1F3FE 200D 2640 FE0F ; fully-qualified # 👮🏾‍♀️ E4.0 woman police officer: medium-dark skin tone +1F46E 1F3FE 200D 2640 ; minimally-qualified # 👮🏾‍♀ E4.0 woman police officer: medium-dark skin tone +1F46E 1F3FF 200D 2640 FE0F ; fully-qualified # 👮🏿‍♀️ E4.0 woman police officer: dark skin tone +1F46E 1F3FF 200D 2640 ; minimally-qualified # 👮🏿‍♀ E4.0 woman police officer: dark skin tone +1F575 FE0F ; fully-qualified # 🕵️ E0.7 detective +1F575 ; unqualified # 🕵 E0.7 detective +1F575 1F3FB ; fully-qualified # 🕵🏻 E2.0 detective: light skin tone +1F575 1F3FC ; fully-qualified # 🕵🏼 E2.0 detective: medium-light skin tone +1F575 1F3FD ; fully-qualified # 🕵🏽 E2.0 detective: medium skin tone +1F575 1F3FE ; fully-qualified # 🕵🏾 E2.0 detective: medium-dark skin tone +1F575 1F3FF ; fully-qualified # 🕵🏿 E2.0 detective: dark skin tone +1F575 FE0F 200D 2642 FE0F ; fully-qualified # 🕵️‍♂️ E4.0 man detective +1F575 200D 2642 FE0F ; unqualified # 🕵‍♂️ E4.0 man detective +1F575 FE0F 200D 2642 ; minimally-qualified # 🕵️‍♂ E4.0 man detective +1F575 200D 2642 ; unqualified # 🕵‍♂ E4.0 man detective +1F575 1F3FB 200D 2642 FE0F ; fully-qualified # 🕵🏻‍♂️ E4.0 man detective: light skin tone +1F575 1F3FB 200D 2642 ; minimally-qualified # 🕵🏻‍♂ E4.0 man detective: light skin tone +1F575 1F3FC 200D 2642 FE0F ; fully-qualified # 🕵🏼‍♂️ E4.0 man detective: medium-light skin tone +1F575 1F3FC 200D 2642 ; minimally-qualified # 🕵🏼‍♂ E4.0 man detective: medium-light skin tone +1F575 1F3FD 200D 2642 FE0F ; fully-qualified # 🕵🏽‍♂️ E4.0 man detective: medium skin tone +1F575 1F3FD 200D 2642 ; minimally-qualified # 🕵🏽‍♂ E4.0 man detective: medium skin tone +1F575 1F3FE 200D 2642 FE0F ; fully-qualified # 🕵🏾‍♂️ E4.0 man detective: medium-dark skin tone +1F575 1F3FE 200D 2642 ; minimally-qualified # 🕵🏾‍♂ E4.0 man detective: medium-dark skin tone +1F575 1F3FF 200D 2642 FE0F ; fully-qualified # 🕵🏿‍♂️ E4.0 man detective: dark skin tone +1F575 1F3FF 200D 2642 ; minimally-qualified # 🕵🏿‍♂ E4.0 man detective: dark skin tone +1F575 FE0F 200D 2640 FE0F ; fully-qualified # 🕵️‍♀️ E4.0 woman detective +1F575 200D 2640 FE0F ; unqualified # 🕵‍♀️ E4.0 woman detective +1F575 FE0F 200D 2640 ; minimally-qualified # 🕵️‍♀ E4.0 woman detective +1F575 200D 2640 ; unqualified # 🕵‍♀ E4.0 woman detective +1F575 1F3FB 200D 2640 FE0F ; fully-qualified # 🕵🏻‍♀️ E4.0 woman detective: light skin tone +1F575 1F3FB 200D 2640 ; minimally-qualified # 🕵🏻‍♀ E4.0 woman detective: light skin tone +1F575 1F3FC 200D 2640 FE0F ; fully-qualified # 🕵🏼‍♀️ E4.0 woman detective: medium-light skin tone +1F575 1F3FC 200D 2640 ; minimally-qualified # 🕵🏼‍♀ E4.0 woman detective: medium-light skin tone +1F575 1F3FD 200D 2640 FE0F ; fully-qualified # 🕵🏽‍♀️ E4.0 woman detective: medium skin tone +1F575 1F3FD 200D 2640 ; minimally-qualified # 🕵🏽‍♀ E4.0 woman detective: medium skin tone +1F575 1F3FE 200D 2640 FE0F ; fully-qualified # 🕵🏾‍♀️ E4.0 woman detective: medium-dark skin tone +1F575 1F3FE 200D 2640 ; minimally-qualified # 🕵🏾‍♀ E4.0 woman detective: medium-dark skin tone +1F575 1F3FF 200D 2640 FE0F ; fully-qualified # 🕵🏿‍♀️ E4.0 woman detective: dark skin tone +1F575 1F3FF 200D 2640 ; minimally-qualified # 🕵🏿‍♀ E4.0 woman detective: dark skin tone +1F482 ; fully-qualified # 💂 E0.6 guard +1F482 1F3FB ; fully-qualified # 💂🏻 E1.0 guard: light skin tone +1F482 1F3FC ; fully-qualified # 💂🏼 E1.0 guard: medium-light skin tone +1F482 1F3FD ; fully-qualified # 💂🏽 E1.0 guard: medium skin tone +1F482 1F3FE ; fully-qualified # 💂🏾 E1.0 guard: medium-dark skin tone +1F482 1F3FF ; fully-qualified # 💂🏿 E1.0 guard: dark skin tone +1F482 200D 2642 FE0F ; fully-qualified # 💂‍♂️ E4.0 man guard +1F482 200D 2642 ; minimally-qualified # 💂‍♂ E4.0 man guard +1F482 1F3FB 200D 2642 FE0F ; fully-qualified # 💂🏻‍♂️ E4.0 man guard: light skin tone +1F482 1F3FB 200D 2642 ; minimally-qualified # 💂🏻‍♂ E4.0 man guard: light skin tone +1F482 1F3FC 200D 2642 FE0F ; fully-qualified # 💂🏼‍♂️ E4.0 man guard: medium-light skin tone +1F482 1F3FC 200D 2642 ; minimally-qualified # 💂🏼‍♂ E4.0 man guard: medium-light skin tone +1F482 1F3FD 200D 2642 FE0F ; fully-qualified # 💂🏽‍♂️ E4.0 man guard: medium skin tone +1F482 1F3FD 200D 2642 ; minimally-qualified # 💂🏽‍♂ E4.0 man guard: medium skin tone +1F482 1F3FE 200D 2642 FE0F ; fully-qualified # 💂🏾‍♂️ E4.0 man guard: medium-dark skin tone +1F482 1F3FE 200D 2642 ; minimally-qualified # 💂🏾‍♂ E4.0 man guard: medium-dark skin tone +1F482 1F3FF 200D 2642 FE0F ; fully-qualified # 💂🏿‍♂️ E4.0 man guard: dark skin tone +1F482 1F3FF 200D 2642 ; minimally-qualified # 💂🏿‍♂ E4.0 man guard: dark skin tone +1F482 200D 2640 FE0F ; fully-qualified # 💂‍♀️ E4.0 woman guard +1F482 200D 2640 ; minimally-qualified # 💂‍♀ E4.0 woman guard +1F482 1F3FB 200D 2640 FE0F ; fully-qualified # 💂🏻‍♀️ E4.0 woman guard: light skin tone +1F482 1F3FB 200D 2640 ; minimally-qualified # 💂🏻‍♀ E4.0 woman guard: light skin tone +1F482 1F3FC 200D 2640 FE0F ; fully-qualified # 💂🏼‍♀️ E4.0 woman guard: medium-light skin tone +1F482 1F3FC 200D 2640 ; minimally-qualified # 💂🏼‍♀ E4.0 woman guard: medium-light skin tone +1F482 1F3FD 200D 2640 FE0F ; fully-qualified # 💂🏽‍♀️ E4.0 woman guard: medium skin tone +1F482 1F3FD 200D 2640 ; minimally-qualified # 💂🏽‍♀ E4.0 woman guard: medium skin tone +1F482 1F3FE 200D 2640 FE0F ; fully-qualified # 💂🏾‍♀️ E4.0 woman guard: medium-dark skin tone +1F482 1F3FE 200D 2640 ; minimally-qualified # 💂🏾‍♀ E4.0 woman guard: medium-dark skin tone +1F482 1F3FF 200D 2640 FE0F ; fully-qualified # 💂🏿‍♀️ E4.0 woman guard: dark skin tone +1F482 1F3FF 200D 2640 ; minimally-qualified # 💂🏿‍♀ E4.0 woman guard: dark skin tone +1F977 ; fully-qualified # 🥷 E13.0 ninja +1F977 1F3FB ; fully-qualified # 🥷🏻 E13.0 ninja: light skin tone +1F977 1F3FC ; fully-qualified # 🥷🏼 E13.0 ninja: medium-light skin tone +1F977 1F3FD ; fully-qualified # 🥷🏽 E13.0 ninja: medium skin tone +1F977 1F3FE ; fully-qualified # 🥷🏾 E13.0 ninja: medium-dark skin tone +1F977 1F3FF ; fully-qualified # 🥷🏿 E13.0 ninja: dark skin tone +1F477 ; fully-qualified # 👷 E0.6 construction worker +1F477 1F3FB ; fully-qualified # 👷🏻 E1.0 construction worker: light skin tone +1F477 1F3FC ; fully-qualified # 👷🏼 E1.0 construction worker: medium-light skin tone +1F477 1F3FD ; fully-qualified # 👷🏽 E1.0 construction worker: medium skin tone +1F477 1F3FE ; fully-qualified # 👷🏾 E1.0 construction worker: medium-dark skin tone +1F477 1F3FF ; fully-qualified # 👷🏿 E1.0 construction worker: dark skin tone +1F477 200D 2642 FE0F ; fully-qualified # 👷‍♂️ E4.0 man construction worker +1F477 200D 2642 ; minimally-qualified # 👷‍♂ E4.0 man construction worker +1F477 1F3FB 200D 2642 FE0F ; fully-qualified # 👷🏻‍♂️ E4.0 man construction worker: light skin tone +1F477 1F3FB 200D 2642 ; minimally-qualified # 👷🏻‍♂ E4.0 man construction worker: light skin tone +1F477 1F3FC 200D 2642 FE0F ; fully-qualified # 👷🏼‍♂️ E4.0 man construction worker: medium-light skin tone +1F477 1F3FC 200D 2642 ; minimally-qualified # 👷🏼‍♂ E4.0 man construction worker: medium-light skin tone +1F477 1F3FD 200D 2642 FE0F ; fully-qualified # 👷🏽‍♂️ E4.0 man construction worker: medium skin tone +1F477 1F3FD 200D 2642 ; minimally-qualified # 👷🏽‍♂ E4.0 man construction worker: medium skin tone +1F477 1F3FE 200D 2642 FE0F ; fully-qualified # 👷🏾‍♂️ E4.0 man construction worker: medium-dark skin tone +1F477 1F3FE 200D 2642 ; minimally-qualified # 👷🏾‍♂ E4.0 man construction worker: medium-dark skin tone +1F477 1F3FF 200D 2642 FE0F ; fully-qualified # 👷🏿‍♂️ E4.0 man construction worker: dark skin tone +1F477 1F3FF 200D 2642 ; minimally-qualified # 👷🏿‍♂ E4.0 man construction worker: dark skin tone +1F477 200D 2640 FE0F ; fully-qualified # 👷‍♀️ E4.0 woman construction worker +1F477 200D 2640 ; minimally-qualified # 👷‍♀ E4.0 woman construction worker +1F477 1F3FB 200D 2640 FE0F ; fully-qualified # 👷🏻‍♀️ E4.0 woman construction worker: light skin tone +1F477 1F3FB 200D 2640 ; minimally-qualified # 👷🏻‍♀ E4.0 woman construction worker: light skin tone +1F477 1F3FC 200D 2640 FE0F ; fully-qualified # 👷🏼‍♀️ E4.0 woman construction worker: medium-light skin tone +1F477 1F3FC 200D 2640 ; minimally-qualified # 👷🏼‍♀ E4.0 woman construction worker: medium-light skin tone +1F477 1F3FD 200D 2640 FE0F ; fully-qualified # 👷🏽‍♀️ E4.0 woman construction worker: medium skin tone +1F477 1F3FD 200D 2640 ; minimally-qualified # 👷🏽‍♀ E4.0 woman construction worker: medium skin tone +1F477 1F3FE 200D 2640 FE0F ; fully-qualified # 👷🏾‍♀️ E4.0 woman construction worker: medium-dark skin tone +1F477 1F3FE 200D 2640 ; minimally-qualified # 👷🏾‍♀ E4.0 woman construction worker: medium-dark skin tone +1F477 1F3FF 200D 2640 FE0F ; fully-qualified # 👷🏿‍♀️ E4.0 woman construction worker: dark skin tone +1F477 1F3FF 200D 2640 ; minimally-qualified # 👷🏿‍♀ E4.0 woman construction worker: dark skin tone +1FAC5 ; fully-qualified # 🫅 E14.0 person with crown +1FAC5 1F3FB ; fully-qualified # 🫅🏻 E14.0 person with crown: light skin tone +1FAC5 1F3FC ; fully-qualified # 🫅🏼 E14.0 person with crown: medium-light skin tone +1FAC5 1F3FD ; fully-qualified # 🫅🏽 E14.0 person with crown: medium skin tone +1FAC5 1F3FE ; fully-qualified # 🫅🏾 E14.0 person with crown: medium-dark skin tone +1FAC5 1F3FF ; fully-qualified # 🫅🏿 E14.0 person with crown: dark skin tone +1F934 ; fully-qualified # 🤴 E3.0 prince +1F934 1F3FB ; fully-qualified # 🤴🏻 E3.0 prince: light skin tone +1F934 1F3FC ; fully-qualified # 🤴🏼 E3.0 prince: medium-light skin tone +1F934 1F3FD ; fully-qualified # 🤴🏽 E3.0 prince: medium skin tone +1F934 1F3FE ; fully-qualified # 🤴🏾 E3.0 prince: medium-dark skin tone +1F934 1F3FF ; fully-qualified # 🤴🏿 E3.0 prince: dark skin tone +1F478 ; fully-qualified # 👸 E0.6 princess +1F478 1F3FB ; fully-qualified # 👸🏻 E1.0 princess: light skin tone +1F478 1F3FC ; fully-qualified # 👸🏼 E1.0 princess: medium-light skin tone +1F478 1F3FD ; fully-qualified # 👸🏽 E1.0 princess: medium skin tone +1F478 1F3FE ; fully-qualified # 👸🏾 E1.0 princess: medium-dark skin tone +1F478 1F3FF ; fully-qualified # 👸🏿 E1.0 princess: dark skin tone +1F473 ; fully-qualified # 👳 E0.6 person wearing turban +1F473 1F3FB ; fully-qualified # 👳🏻 E1.0 person wearing turban: light skin tone +1F473 1F3FC ; fully-qualified # 👳🏼 E1.0 person wearing turban: medium-light skin tone +1F473 1F3FD ; fully-qualified # 👳🏽 E1.0 person wearing turban: medium skin tone +1F473 1F3FE ; fully-qualified # 👳🏾 E1.0 person wearing turban: medium-dark skin tone +1F473 1F3FF ; fully-qualified # 👳🏿 E1.0 person wearing turban: dark skin tone +1F473 200D 2642 FE0F ; fully-qualified # 👳‍♂️ E4.0 man wearing turban +1F473 200D 2642 ; minimally-qualified # 👳‍♂ E4.0 man wearing turban +1F473 1F3FB 200D 2642 FE0F ; fully-qualified # 👳🏻‍♂️ E4.0 man wearing turban: light skin tone +1F473 1F3FB 200D 2642 ; minimally-qualified # 👳🏻‍♂ E4.0 man wearing turban: light skin tone +1F473 1F3FC 200D 2642 FE0F ; fully-qualified # 👳🏼‍♂️ E4.0 man wearing turban: medium-light skin tone +1F473 1F3FC 200D 2642 ; minimally-qualified # 👳🏼‍♂ E4.0 man wearing turban: medium-light skin tone +1F473 1F3FD 200D 2642 FE0F ; fully-qualified # 👳🏽‍♂️ E4.0 man wearing turban: medium skin tone +1F473 1F3FD 200D 2642 ; minimally-qualified # 👳🏽‍♂ E4.0 man wearing turban: medium skin tone +1F473 1F3FE 200D 2642 FE0F ; fully-qualified # 👳🏾‍♂️ E4.0 man wearing turban: medium-dark skin tone +1F473 1F3FE 200D 2642 ; minimally-qualified # 👳🏾‍♂ E4.0 man wearing turban: medium-dark skin tone +1F473 1F3FF 200D 2642 FE0F ; fully-qualified # 👳🏿‍♂️ E4.0 man wearing turban: dark skin tone +1F473 1F3FF 200D 2642 ; minimally-qualified # 👳🏿‍♂ E4.0 man wearing turban: dark skin tone +1F473 200D 2640 FE0F ; fully-qualified # 👳‍♀️ E4.0 woman wearing turban +1F473 200D 2640 ; minimally-qualified # 👳‍♀ E4.0 woman wearing turban +1F473 1F3FB 200D 2640 FE0F ; fully-qualified # 👳🏻‍♀️ E4.0 woman wearing turban: light skin tone +1F473 1F3FB 200D 2640 ; minimally-qualified # 👳🏻‍♀ E4.0 woman wearing turban: light skin tone +1F473 1F3FC 200D 2640 FE0F ; fully-qualified # 👳🏼‍♀️ E4.0 woman wearing turban: medium-light skin tone +1F473 1F3FC 200D 2640 ; minimally-qualified # 👳🏼‍♀ E4.0 woman wearing turban: medium-light skin tone +1F473 1F3FD 200D 2640 FE0F ; fully-qualified # 👳🏽‍♀️ E4.0 woman wearing turban: medium skin tone +1F473 1F3FD 200D 2640 ; minimally-qualified # 👳🏽‍♀ E4.0 woman wearing turban: medium skin tone +1F473 1F3FE 200D 2640 FE0F ; fully-qualified # 👳🏾‍♀️ E4.0 woman wearing turban: medium-dark skin tone +1F473 1F3FE 200D 2640 ; minimally-qualified # 👳🏾‍♀ E4.0 woman wearing turban: medium-dark skin tone +1F473 1F3FF 200D 2640 FE0F ; fully-qualified # 👳🏿‍♀️ E4.0 woman wearing turban: dark skin tone +1F473 1F3FF 200D 2640 ; minimally-qualified # 👳🏿‍♀ E4.0 woman wearing turban: dark skin tone +1F472 ; fully-qualified # 👲 E0.6 person with skullcap +1F472 1F3FB ; fully-qualified # 👲🏻 E1.0 person with skullcap: light skin tone +1F472 1F3FC ; fully-qualified # 👲🏼 E1.0 person with skullcap: medium-light skin tone +1F472 1F3FD ; fully-qualified # 👲🏽 E1.0 person with skullcap: medium skin tone +1F472 1F3FE ; fully-qualified # 👲🏾 E1.0 person with skullcap: medium-dark skin tone +1F472 1F3FF ; fully-qualified # 👲🏿 E1.0 person with skullcap: dark skin tone +1F9D5 ; fully-qualified # 🧕 E5.0 woman with headscarf +1F9D5 1F3FB ; fully-qualified # 🧕🏻 E5.0 woman with headscarf: light skin tone +1F9D5 1F3FC ; fully-qualified # 🧕🏼 E5.0 woman with headscarf: medium-light skin tone +1F9D5 1F3FD ; fully-qualified # 🧕🏽 E5.0 woman with headscarf: medium skin tone +1F9D5 1F3FE ; fully-qualified # 🧕🏾 E5.0 woman with headscarf: medium-dark skin tone +1F9D5 1F3FF ; fully-qualified # 🧕🏿 E5.0 woman with headscarf: dark skin tone +1F935 ; fully-qualified # 🤵 E3.0 person in tuxedo +1F935 1F3FB ; fully-qualified # 🤵🏻 E3.0 person in tuxedo: light skin tone +1F935 1F3FC ; fully-qualified # 🤵🏼 E3.0 person in tuxedo: medium-light skin tone +1F935 1F3FD ; fully-qualified # 🤵🏽 E3.0 person in tuxedo: medium skin tone +1F935 1F3FE ; fully-qualified # 🤵🏾 E3.0 person in tuxedo: medium-dark skin tone +1F935 1F3FF ; fully-qualified # 🤵🏿 E3.0 person in tuxedo: dark skin tone +1F935 200D 2642 FE0F ; fully-qualified # 🤵‍♂️ E13.0 man in tuxedo +1F935 200D 2642 ; minimally-qualified # 🤵‍♂ E13.0 man in tuxedo +1F935 1F3FB 200D 2642 FE0F ; fully-qualified # 🤵🏻‍♂️ E13.0 man in tuxedo: light skin tone +1F935 1F3FB 200D 2642 ; minimally-qualified # 🤵🏻‍♂ E13.0 man in tuxedo: light skin tone +1F935 1F3FC 200D 2642 FE0F ; fully-qualified # 🤵🏼‍♂️ E13.0 man in tuxedo: medium-light skin tone +1F935 1F3FC 200D 2642 ; minimally-qualified # 🤵🏼‍♂ E13.0 man in tuxedo: medium-light skin tone +1F935 1F3FD 200D 2642 FE0F ; fully-qualified # 🤵🏽‍♂️ E13.0 man in tuxedo: medium skin tone +1F935 1F3FD 200D 2642 ; minimally-qualified # 🤵🏽‍♂ E13.0 man in tuxedo: medium skin tone +1F935 1F3FE 200D 2642 FE0F ; fully-qualified # 🤵🏾‍♂️ E13.0 man in tuxedo: medium-dark skin tone +1F935 1F3FE 200D 2642 ; minimally-qualified # 🤵🏾‍♂ E13.0 man in tuxedo: medium-dark skin tone +1F935 1F3FF 200D 2642 FE0F ; fully-qualified # 🤵🏿‍♂️ E13.0 man in tuxedo: dark skin tone +1F935 1F3FF 200D 2642 ; minimally-qualified # 🤵🏿‍♂ E13.0 man in tuxedo: dark skin tone +1F935 200D 2640 FE0F ; fully-qualified # 🤵‍♀️ E13.0 woman in tuxedo +1F935 200D 2640 ; minimally-qualified # 🤵‍♀ E13.0 woman in tuxedo +1F935 1F3FB 200D 2640 FE0F ; fully-qualified # 🤵🏻‍♀️ E13.0 woman in tuxedo: light skin tone +1F935 1F3FB 200D 2640 ; minimally-qualified # 🤵🏻‍♀ E13.0 woman in tuxedo: light skin tone +1F935 1F3FC 200D 2640 FE0F ; fully-qualified # 🤵🏼‍♀️ E13.0 woman in tuxedo: medium-light skin tone +1F935 1F3FC 200D 2640 ; minimally-qualified # 🤵🏼‍♀ E13.0 woman in tuxedo: medium-light skin tone +1F935 1F3FD 200D 2640 FE0F ; fully-qualified # 🤵🏽‍♀️ E13.0 woman in tuxedo: medium skin tone +1F935 1F3FD 200D 2640 ; minimally-qualified # 🤵🏽‍♀ E13.0 woman in tuxedo: medium skin tone +1F935 1F3FE 200D 2640 FE0F ; fully-qualified # 🤵🏾‍♀️ E13.0 woman in tuxedo: medium-dark skin tone +1F935 1F3FE 200D 2640 ; minimally-qualified # 🤵🏾‍♀ E13.0 woman in tuxedo: medium-dark skin tone +1F935 1F3FF 200D 2640 FE0F ; fully-qualified # 🤵🏿‍♀️ E13.0 woman in tuxedo: dark skin tone +1F935 1F3FF 200D 2640 ; minimally-qualified # 🤵🏿‍♀ E13.0 woman in tuxedo: dark skin tone +1F470 ; fully-qualified # 👰 E0.6 person with veil +1F470 1F3FB ; fully-qualified # 👰🏻 E1.0 person with veil: light skin tone +1F470 1F3FC ; fully-qualified # 👰🏼 E1.0 person with veil: medium-light skin tone +1F470 1F3FD ; fully-qualified # 👰🏽 E1.0 person with veil: medium skin tone +1F470 1F3FE ; fully-qualified # 👰🏾 E1.0 person with veil: medium-dark skin tone +1F470 1F3FF ; fully-qualified # 👰🏿 E1.0 person with veil: dark skin tone +1F470 200D 2642 FE0F ; fully-qualified # 👰‍♂️ E13.0 man with veil +1F470 200D 2642 ; minimally-qualified # 👰‍♂ E13.0 man with veil +1F470 1F3FB 200D 2642 FE0F ; fully-qualified # 👰🏻‍♂️ E13.0 man with veil: light skin tone +1F470 1F3FB 200D 2642 ; minimally-qualified # 👰🏻‍♂ E13.0 man with veil: light skin tone +1F470 1F3FC 200D 2642 FE0F ; fully-qualified # 👰🏼‍♂️ E13.0 man with veil: medium-light skin tone +1F470 1F3FC 200D 2642 ; minimally-qualified # 👰🏼‍♂ E13.0 man with veil: medium-light skin tone +1F470 1F3FD 200D 2642 FE0F ; fully-qualified # 👰🏽‍♂️ E13.0 man with veil: medium skin tone +1F470 1F3FD 200D 2642 ; minimally-qualified # 👰🏽‍♂ E13.0 man with veil: medium skin tone +1F470 1F3FE 200D 2642 FE0F ; fully-qualified # 👰🏾‍♂️ E13.0 man with veil: medium-dark skin tone +1F470 1F3FE 200D 2642 ; minimally-qualified # 👰🏾‍♂ E13.0 man with veil: medium-dark skin tone +1F470 1F3FF 200D 2642 FE0F ; fully-qualified # 👰🏿‍♂️ E13.0 man with veil: dark skin tone +1F470 1F3FF 200D 2642 ; minimally-qualified # 👰🏿‍♂ E13.0 man with veil: dark skin tone +1F470 200D 2640 FE0F ; fully-qualified # 👰‍♀️ E13.0 woman with veil +1F470 200D 2640 ; minimally-qualified # 👰‍♀ E13.0 woman with veil +1F470 1F3FB 200D 2640 FE0F ; fully-qualified # 👰🏻‍♀️ E13.0 woman with veil: light skin tone +1F470 1F3FB 200D 2640 ; minimally-qualified # 👰🏻‍♀ E13.0 woman with veil: light skin tone +1F470 1F3FC 200D 2640 FE0F ; fully-qualified # 👰🏼‍♀️ E13.0 woman with veil: medium-light skin tone +1F470 1F3FC 200D 2640 ; minimally-qualified # 👰🏼‍♀ E13.0 woman with veil: medium-light skin tone +1F470 1F3FD 200D 2640 FE0F ; fully-qualified # 👰🏽‍♀️ E13.0 woman with veil: medium skin tone +1F470 1F3FD 200D 2640 ; minimally-qualified # 👰🏽‍♀ E13.0 woman with veil: medium skin tone +1F470 1F3FE 200D 2640 FE0F ; fully-qualified # 👰🏾‍♀️ E13.0 woman with veil: medium-dark skin tone +1F470 1F3FE 200D 2640 ; minimally-qualified # 👰🏾‍♀ E13.0 woman with veil: medium-dark skin tone +1F470 1F3FF 200D 2640 FE0F ; fully-qualified # 👰🏿‍♀️ E13.0 woman with veil: dark skin tone +1F470 1F3FF 200D 2640 ; minimally-qualified # 👰🏿‍♀ E13.0 woman with veil: dark skin tone +1F930 ; fully-qualified # 🤰 E3.0 pregnant woman +1F930 1F3FB ; fully-qualified # 🤰🏻 E3.0 pregnant woman: light skin tone +1F930 1F3FC ; fully-qualified # 🤰🏼 E3.0 pregnant woman: medium-light skin tone +1F930 1F3FD ; fully-qualified # 🤰🏽 E3.0 pregnant woman: medium skin tone +1F930 1F3FE ; fully-qualified # 🤰🏾 E3.0 pregnant woman: medium-dark skin tone +1F930 1F3FF ; fully-qualified # 🤰🏿 E3.0 pregnant woman: dark skin tone +1FAC3 ; fully-qualified # 🫃 E14.0 pregnant man +1FAC3 1F3FB ; fully-qualified # 🫃🏻 E14.0 pregnant man: light skin tone +1FAC3 1F3FC ; fully-qualified # 🫃🏼 E14.0 pregnant man: medium-light skin tone +1FAC3 1F3FD ; fully-qualified # 🫃🏽 E14.0 pregnant man: medium skin tone +1FAC3 1F3FE ; fully-qualified # 🫃🏾 E14.0 pregnant man: medium-dark skin tone +1FAC3 1F3FF ; fully-qualified # 🫃🏿 E14.0 pregnant man: dark skin tone +1FAC4 ; fully-qualified # 🫄 E14.0 pregnant person +1FAC4 1F3FB ; fully-qualified # 🫄🏻 E14.0 pregnant person: light skin tone +1FAC4 1F3FC ; fully-qualified # 🫄🏼 E14.0 pregnant person: medium-light skin tone +1FAC4 1F3FD ; fully-qualified # 🫄🏽 E14.0 pregnant person: medium skin tone +1FAC4 1F3FE ; fully-qualified # 🫄🏾 E14.0 pregnant person: medium-dark skin tone +1FAC4 1F3FF ; fully-qualified # 🫄🏿 E14.0 pregnant person: dark skin tone +1F931 ; fully-qualified # 🤱 E5.0 breast-feeding +1F931 1F3FB ; fully-qualified # 🤱🏻 E5.0 breast-feeding: light skin tone +1F931 1F3FC ; fully-qualified # 🤱🏼 E5.0 breast-feeding: medium-light skin tone +1F931 1F3FD ; fully-qualified # 🤱🏽 E5.0 breast-feeding: medium skin tone +1F931 1F3FE ; fully-qualified # 🤱🏾 E5.0 breast-feeding: medium-dark skin tone +1F931 1F3FF ; fully-qualified # 🤱🏿 E5.0 breast-feeding: dark skin tone +1F469 200D 1F37C ; fully-qualified # 👩‍🍼 E13.0 woman feeding baby +1F469 1F3FB 200D 1F37C ; fully-qualified # 👩🏻‍🍼 E13.0 woman feeding baby: light skin tone +1F469 1F3FC 200D 1F37C ; fully-qualified # 👩🏼‍🍼 E13.0 woman feeding baby: medium-light skin tone +1F469 1F3FD 200D 1F37C ; fully-qualified # 👩🏽‍🍼 E13.0 woman feeding baby: medium skin tone +1F469 1F3FE 200D 1F37C ; fully-qualified # 👩🏾‍🍼 E13.0 woman feeding baby: medium-dark skin tone +1F469 1F3FF 200D 1F37C ; fully-qualified # 👩🏿‍🍼 E13.0 woman feeding baby: dark skin tone +1F468 200D 1F37C ; fully-qualified # 👨‍🍼 E13.0 man feeding baby +1F468 1F3FB 200D 1F37C ; fully-qualified # 👨🏻‍🍼 E13.0 man feeding baby: light skin tone +1F468 1F3FC 200D 1F37C ; fully-qualified # 👨🏼‍🍼 E13.0 man feeding baby: medium-light skin tone +1F468 1F3FD 200D 1F37C ; fully-qualified # 👨🏽‍🍼 E13.0 man feeding baby: medium skin tone +1F468 1F3FE 200D 1F37C ; fully-qualified # 👨🏾‍🍼 E13.0 man feeding baby: medium-dark skin tone +1F468 1F3FF 200D 1F37C ; fully-qualified # 👨🏿‍🍼 E13.0 man feeding baby: dark skin tone +1F9D1 200D 1F37C ; fully-qualified # 🧑‍🍼 E13.0 person feeding baby +1F9D1 1F3FB 200D 1F37C ; fully-qualified # 🧑🏻‍🍼 E13.0 person feeding baby: light skin tone +1F9D1 1F3FC 200D 1F37C ; fully-qualified # 🧑🏼‍🍼 E13.0 person feeding baby: medium-light skin tone +1F9D1 1F3FD 200D 1F37C ; fully-qualified # 🧑🏽‍🍼 E13.0 person feeding baby: medium skin tone +1F9D1 1F3FE 200D 1F37C ; fully-qualified # 🧑🏾‍🍼 E13.0 person feeding baby: medium-dark skin tone +1F9D1 1F3FF 200D 1F37C ; fully-qualified # 🧑🏿‍🍼 E13.0 person feeding baby: dark skin tone + +# subgroup: person-fantasy +1F47C ; fully-qualified # 👼 E0.6 baby angel +1F47C 1F3FB ; fully-qualified # 👼🏻 E1.0 baby angel: light skin tone +1F47C 1F3FC ; fully-qualified # 👼🏼 E1.0 baby angel: medium-light skin tone +1F47C 1F3FD ; fully-qualified # 👼🏽 E1.0 baby angel: medium skin tone +1F47C 1F3FE ; fully-qualified # 👼🏾 E1.0 baby angel: medium-dark skin tone +1F47C 1F3FF ; fully-qualified # 👼🏿 E1.0 baby angel: dark skin tone +1F385 ; fully-qualified # 🎅 E0.6 Santa Claus +1F385 1F3FB ; fully-qualified # 🎅🏻 E1.0 Santa Claus: light skin tone +1F385 1F3FC ; fully-qualified # 🎅🏼 E1.0 Santa Claus: medium-light skin tone +1F385 1F3FD ; fully-qualified # 🎅🏽 E1.0 Santa Claus: medium skin tone +1F385 1F3FE ; fully-qualified # 🎅🏾 E1.0 Santa Claus: medium-dark skin tone +1F385 1F3FF ; fully-qualified # 🎅🏿 E1.0 Santa Claus: dark skin tone +1F936 ; fully-qualified # 🤶 E3.0 Mrs. Claus +1F936 1F3FB ; fully-qualified # 🤶🏻 E3.0 Mrs. Claus: light skin tone +1F936 1F3FC ; fully-qualified # 🤶🏼 E3.0 Mrs. Claus: medium-light skin tone +1F936 1F3FD ; fully-qualified # 🤶🏽 E3.0 Mrs. Claus: medium skin tone +1F936 1F3FE ; fully-qualified # 🤶🏾 E3.0 Mrs. Claus: medium-dark skin tone +1F936 1F3FF ; fully-qualified # 🤶🏿 E3.0 Mrs. Claus: dark skin tone +1F9D1 200D 1F384 ; fully-qualified # 🧑‍🎄 E13.0 mx claus +1F9D1 1F3FB 200D 1F384 ; fully-qualified # 🧑🏻‍🎄 E13.0 mx claus: light skin tone +1F9D1 1F3FC 200D 1F384 ; fully-qualified # 🧑🏼‍🎄 E13.0 mx claus: medium-light skin tone +1F9D1 1F3FD 200D 1F384 ; fully-qualified # 🧑🏽‍🎄 E13.0 mx claus: medium skin tone +1F9D1 1F3FE 200D 1F384 ; fully-qualified # 🧑🏾‍🎄 E13.0 mx claus: medium-dark skin tone +1F9D1 1F3FF 200D 1F384 ; fully-qualified # 🧑🏿‍🎄 E13.0 mx claus: dark skin tone +1F9B8 ; fully-qualified # 🦸 E11.0 superhero +1F9B8 1F3FB ; fully-qualified # 🦸🏻 E11.0 superhero: light skin tone +1F9B8 1F3FC ; fully-qualified # 🦸🏼 E11.0 superhero: medium-light skin tone +1F9B8 1F3FD ; fully-qualified # 🦸🏽 E11.0 superhero: medium skin tone +1F9B8 1F3FE ; fully-qualified # 🦸🏾 E11.0 superhero: medium-dark skin tone +1F9B8 1F3FF ; fully-qualified # 🦸🏿 E11.0 superhero: dark skin tone +1F9B8 200D 2642 FE0F ; fully-qualified # 🦸‍♂️ E11.0 man superhero +1F9B8 200D 2642 ; minimally-qualified # 🦸‍♂ E11.0 man superhero +1F9B8 1F3FB 200D 2642 FE0F ; fully-qualified # 🦸🏻‍♂️ E11.0 man superhero: light skin tone +1F9B8 1F3FB 200D 2642 ; minimally-qualified # 🦸🏻‍♂ E11.0 man superhero: light skin tone +1F9B8 1F3FC 200D 2642 FE0F ; fully-qualified # 🦸🏼‍♂️ E11.0 man superhero: medium-light skin tone +1F9B8 1F3FC 200D 2642 ; minimally-qualified # 🦸🏼‍♂ E11.0 man superhero: medium-light skin tone +1F9B8 1F3FD 200D 2642 FE0F ; fully-qualified # 🦸🏽‍♂️ E11.0 man superhero: medium skin tone +1F9B8 1F3FD 200D 2642 ; minimally-qualified # 🦸🏽‍♂ E11.0 man superhero: medium skin tone +1F9B8 1F3FE 200D 2642 FE0F ; fully-qualified # 🦸🏾‍♂️ E11.0 man superhero: medium-dark skin tone +1F9B8 1F3FE 200D 2642 ; minimally-qualified # 🦸🏾‍♂ E11.0 man superhero: medium-dark skin tone +1F9B8 1F3FF 200D 2642 FE0F ; fully-qualified # 🦸🏿‍♂️ E11.0 man superhero: dark skin tone +1F9B8 1F3FF 200D 2642 ; minimally-qualified # 🦸🏿‍♂ E11.0 man superhero: dark skin tone +1F9B8 200D 2640 FE0F ; fully-qualified # 🦸‍♀️ E11.0 woman superhero +1F9B8 200D 2640 ; minimally-qualified # 🦸‍♀ E11.0 woman superhero +1F9B8 1F3FB 200D 2640 FE0F ; fully-qualified # 🦸🏻‍♀️ E11.0 woman superhero: light skin tone +1F9B8 1F3FB 200D 2640 ; minimally-qualified # 🦸🏻‍♀ E11.0 woman superhero: light skin tone +1F9B8 1F3FC 200D 2640 FE0F ; fully-qualified # 🦸🏼‍♀️ E11.0 woman superhero: medium-light skin tone +1F9B8 1F3FC 200D 2640 ; minimally-qualified # 🦸🏼‍♀ E11.0 woman superhero: medium-light skin tone +1F9B8 1F3FD 200D 2640 FE0F ; fully-qualified # 🦸🏽‍♀️ E11.0 woman superhero: medium skin tone +1F9B8 1F3FD 200D 2640 ; minimally-qualified # 🦸🏽‍♀ E11.0 woman superhero: medium skin tone +1F9B8 1F3FE 200D 2640 FE0F ; fully-qualified # 🦸🏾‍♀️ E11.0 woman superhero: medium-dark skin tone +1F9B8 1F3FE 200D 2640 ; minimally-qualified # 🦸🏾‍♀ E11.0 woman superhero: medium-dark skin tone +1F9B8 1F3FF 200D 2640 FE0F ; fully-qualified # 🦸🏿‍♀️ E11.0 woman superhero: dark skin tone +1F9B8 1F3FF 200D 2640 ; minimally-qualified # 🦸🏿‍♀ E11.0 woman superhero: dark skin tone +1F9B9 ; fully-qualified # 🦹 E11.0 supervillain +1F9B9 1F3FB ; fully-qualified # 🦹🏻 E11.0 supervillain: light skin tone +1F9B9 1F3FC ; fully-qualified # 🦹🏼 E11.0 supervillain: medium-light skin tone +1F9B9 1F3FD ; fully-qualified # 🦹🏽 E11.0 supervillain: medium skin tone +1F9B9 1F3FE ; fully-qualified # 🦹🏾 E11.0 supervillain: medium-dark skin tone +1F9B9 1F3FF ; fully-qualified # 🦹🏿 E11.0 supervillain: dark skin tone +1F9B9 200D 2642 FE0F ; fully-qualified # 🦹‍♂️ E11.0 man supervillain +1F9B9 200D 2642 ; minimally-qualified # 🦹‍♂ E11.0 man supervillain +1F9B9 1F3FB 200D 2642 FE0F ; fully-qualified # 🦹🏻‍♂️ E11.0 man supervillain: light skin tone +1F9B9 1F3FB 200D 2642 ; minimally-qualified # 🦹🏻‍♂ E11.0 man supervillain: light skin tone +1F9B9 1F3FC 200D 2642 FE0F ; fully-qualified # 🦹🏼‍♂️ E11.0 man supervillain: medium-light skin tone +1F9B9 1F3FC 200D 2642 ; minimally-qualified # 🦹🏼‍♂ E11.0 man supervillain: medium-light skin tone +1F9B9 1F3FD 200D 2642 FE0F ; fully-qualified # 🦹🏽‍♂️ E11.0 man supervillain: medium skin tone +1F9B9 1F3FD 200D 2642 ; minimally-qualified # 🦹🏽‍♂ E11.0 man supervillain: medium skin tone +1F9B9 1F3FE 200D 2642 FE0F ; fully-qualified # 🦹🏾‍♂️ E11.0 man supervillain: medium-dark skin tone +1F9B9 1F3FE 200D 2642 ; minimally-qualified # 🦹🏾‍♂ E11.0 man supervillain: medium-dark skin tone +1F9B9 1F3FF 200D 2642 FE0F ; fully-qualified # 🦹🏿‍♂️ E11.0 man supervillain: dark skin tone +1F9B9 1F3FF 200D 2642 ; minimally-qualified # 🦹🏿‍♂ E11.0 man supervillain: dark skin tone +1F9B9 200D 2640 FE0F ; fully-qualified # 🦹‍♀️ E11.0 woman supervillain +1F9B9 200D 2640 ; minimally-qualified # 🦹‍♀ E11.0 woman supervillain +1F9B9 1F3FB 200D 2640 FE0F ; fully-qualified # 🦹🏻‍♀️ E11.0 woman supervillain: light skin tone +1F9B9 1F3FB 200D 2640 ; minimally-qualified # 🦹🏻‍♀ E11.0 woman supervillain: light skin tone +1F9B9 1F3FC 200D 2640 FE0F ; fully-qualified # 🦹🏼‍♀️ E11.0 woman supervillain: medium-light skin tone +1F9B9 1F3FC 200D 2640 ; minimally-qualified # 🦹🏼‍♀ E11.0 woman supervillain: medium-light skin tone +1F9B9 1F3FD 200D 2640 FE0F ; fully-qualified # 🦹🏽‍♀️ E11.0 woman supervillain: medium skin tone +1F9B9 1F3FD 200D 2640 ; minimally-qualified # 🦹🏽‍♀ E11.0 woman supervillain: medium skin tone +1F9B9 1F3FE 200D 2640 FE0F ; fully-qualified # 🦹🏾‍♀️ E11.0 woman supervillain: medium-dark skin tone +1F9B9 1F3FE 200D 2640 ; minimally-qualified # 🦹🏾‍♀ E11.0 woman supervillain: medium-dark skin tone +1F9B9 1F3FF 200D 2640 FE0F ; fully-qualified # 🦹🏿‍♀️ E11.0 woman supervillain: dark skin tone +1F9B9 1F3FF 200D 2640 ; minimally-qualified # 🦹🏿‍♀ E11.0 woman supervillain: dark skin tone +1F9D9 ; fully-qualified # 🧙 E5.0 mage +1F9D9 1F3FB ; fully-qualified # 🧙🏻 E5.0 mage: light skin tone +1F9D9 1F3FC ; fully-qualified # 🧙🏼 E5.0 mage: medium-light skin tone +1F9D9 1F3FD ; fully-qualified # 🧙🏽 E5.0 mage: medium skin tone +1F9D9 1F3FE ; fully-qualified # 🧙🏾 E5.0 mage: medium-dark skin tone +1F9D9 1F3FF ; fully-qualified # 🧙🏿 E5.0 mage: dark skin tone +1F9D9 200D 2642 FE0F ; fully-qualified # 🧙‍♂️ E5.0 man mage +1F9D9 200D 2642 ; minimally-qualified # 🧙‍♂ E5.0 man mage +1F9D9 1F3FB 200D 2642 FE0F ; fully-qualified # 🧙🏻‍♂️ E5.0 man mage: light skin tone +1F9D9 1F3FB 200D 2642 ; minimally-qualified # 🧙🏻‍♂ E5.0 man mage: light skin tone +1F9D9 1F3FC 200D 2642 FE0F ; fully-qualified # 🧙🏼‍♂️ E5.0 man mage: medium-light skin tone +1F9D9 1F3FC 200D 2642 ; minimally-qualified # 🧙🏼‍♂ E5.0 man mage: medium-light skin tone +1F9D9 1F3FD 200D 2642 FE0F ; fully-qualified # 🧙🏽‍♂️ E5.0 man mage: medium skin tone +1F9D9 1F3FD 200D 2642 ; minimally-qualified # 🧙🏽‍♂ E5.0 man mage: medium skin tone +1F9D9 1F3FE 200D 2642 FE0F ; fully-qualified # 🧙🏾‍♂️ E5.0 man mage: medium-dark skin tone +1F9D9 1F3FE 200D 2642 ; minimally-qualified # 🧙🏾‍♂ E5.0 man mage: medium-dark skin tone +1F9D9 1F3FF 200D 2642 FE0F ; fully-qualified # 🧙🏿‍♂️ E5.0 man mage: dark skin tone +1F9D9 1F3FF 200D 2642 ; minimally-qualified # 🧙🏿‍♂ E5.0 man mage: dark skin tone +1F9D9 200D 2640 FE0F ; fully-qualified # 🧙‍♀️ E5.0 woman mage +1F9D9 200D 2640 ; minimally-qualified # 🧙‍♀ E5.0 woman mage +1F9D9 1F3FB 200D 2640 FE0F ; fully-qualified # 🧙🏻‍♀️ E5.0 woman mage: light skin tone +1F9D9 1F3FB 200D 2640 ; minimally-qualified # 🧙🏻‍♀ E5.0 woman mage: light skin tone +1F9D9 1F3FC 200D 2640 FE0F ; fully-qualified # 🧙🏼‍♀️ E5.0 woman mage: medium-light skin tone +1F9D9 1F3FC 200D 2640 ; minimally-qualified # 🧙🏼‍♀ E5.0 woman mage: medium-light skin tone +1F9D9 1F3FD 200D 2640 FE0F ; fully-qualified # 🧙🏽‍♀️ E5.0 woman mage: medium skin tone +1F9D9 1F3FD 200D 2640 ; minimally-qualified # 🧙🏽‍♀ E5.0 woman mage: medium skin tone +1F9D9 1F3FE 200D 2640 FE0F ; fully-qualified # 🧙🏾‍♀️ E5.0 woman mage: medium-dark skin tone +1F9D9 1F3FE 200D 2640 ; minimally-qualified # 🧙🏾‍♀ E5.0 woman mage: medium-dark skin tone +1F9D9 1F3FF 200D 2640 FE0F ; fully-qualified # 🧙🏿‍♀️ E5.0 woman mage: dark skin tone +1F9D9 1F3FF 200D 2640 ; minimally-qualified # 🧙🏿‍♀ E5.0 woman mage: dark skin tone +1F9DA ; fully-qualified # 🧚 E5.0 fairy +1F9DA 1F3FB ; fully-qualified # 🧚🏻 E5.0 fairy: light skin tone +1F9DA 1F3FC ; fully-qualified # 🧚🏼 E5.0 fairy: medium-light skin tone +1F9DA 1F3FD ; fully-qualified # 🧚🏽 E5.0 fairy: medium skin tone +1F9DA 1F3FE ; fully-qualified # 🧚🏾 E5.0 fairy: medium-dark skin tone +1F9DA 1F3FF ; fully-qualified # 🧚🏿 E5.0 fairy: dark skin tone +1F9DA 200D 2642 FE0F ; fully-qualified # 🧚‍♂️ E5.0 man fairy +1F9DA 200D 2642 ; minimally-qualified # 🧚‍♂ E5.0 man fairy +1F9DA 1F3FB 200D 2642 FE0F ; fully-qualified # 🧚🏻‍♂️ E5.0 man fairy: light skin tone +1F9DA 1F3FB 200D 2642 ; minimally-qualified # 🧚🏻‍♂ E5.0 man fairy: light skin tone +1F9DA 1F3FC 200D 2642 FE0F ; fully-qualified # 🧚🏼‍♂️ E5.0 man fairy: medium-light skin tone +1F9DA 1F3FC 200D 2642 ; minimally-qualified # 🧚🏼‍♂ E5.0 man fairy: medium-light skin tone +1F9DA 1F3FD 200D 2642 FE0F ; fully-qualified # 🧚🏽‍♂️ E5.0 man fairy: medium skin tone +1F9DA 1F3FD 200D 2642 ; minimally-qualified # 🧚🏽‍♂ E5.0 man fairy: medium skin tone +1F9DA 1F3FE 200D 2642 FE0F ; fully-qualified # 🧚🏾‍♂️ E5.0 man fairy: medium-dark skin tone +1F9DA 1F3FE 200D 2642 ; minimally-qualified # 🧚🏾‍♂ E5.0 man fairy: medium-dark skin tone +1F9DA 1F3FF 200D 2642 FE0F ; fully-qualified # 🧚🏿‍♂️ E5.0 man fairy: dark skin tone +1F9DA 1F3FF 200D 2642 ; minimally-qualified # 🧚🏿‍♂ E5.0 man fairy: dark skin tone +1F9DA 200D 2640 FE0F ; fully-qualified # 🧚‍♀️ E5.0 woman fairy +1F9DA 200D 2640 ; minimally-qualified # 🧚‍♀ E5.0 woman fairy +1F9DA 1F3FB 200D 2640 FE0F ; fully-qualified # 🧚🏻‍♀️ E5.0 woman fairy: light skin tone +1F9DA 1F3FB 200D 2640 ; minimally-qualified # 🧚🏻‍♀ E5.0 woman fairy: light skin tone +1F9DA 1F3FC 200D 2640 FE0F ; fully-qualified # 🧚🏼‍♀️ E5.0 woman fairy: medium-light skin tone +1F9DA 1F3FC 200D 2640 ; minimally-qualified # 🧚🏼‍♀ E5.0 woman fairy: medium-light skin tone +1F9DA 1F3FD 200D 2640 FE0F ; fully-qualified # 🧚🏽‍♀️ E5.0 woman fairy: medium skin tone +1F9DA 1F3FD 200D 2640 ; minimally-qualified # 🧚🏽‍♀ E5.0 woman fairy: medium skin tone +1F9DA 1F3FE 200D 2640 FE0F ; fully-qualified # 🧚🏾‍♀️ E5.0 woman fairy: medium-dark skin tone +1F9DA 1F3FE 200D 2640 ; minimally-qualified # 🧚🏾‍♀ E5.0 woman fairy: medium-dark skin tone +1F9DA 1F3FF 200D 2640 FE0F ; fully-qualified # 🧚🏿‍♀️ E5.0 woman fairy: dark skin tone +1F9DA 1F3FF 200D 2640 ; minimally-qualified # 🧚🏿‍♀ E5.0 woman fairy: dark skin tone +1F9DB ; fully-qualified # 🧛 E5.0 vampire +1F9DB 1F3FB ; fully-qualified # 🧛🏻 E5.0 vampire: light skin tone +1F9DB 1F3FC ; fully-qualified # 🧛🏼 E5.0 vampire: medium-light skin tone +1F9DB 1F3FD ; fully-qualified # 🧛🏽 E5.0 vampire: medium skin tone +1F9DB 1F3FE ; fully-qualified # 🧛🏾 E5.0 vampire: medium-dark skin tone +1F9DB 1F3FF ; fully-qualified # 🧛🏿 E5.0 vampire: dark skin tone +1F9DB 200D 2642 FE0F ; fully-qualified # 🧛‍♂️ E5.0 man vampire +1F9DB 200D 2642 ; minimally-qualified # 🧛‍♂ E5.0 man vampire +1F9DB 1F3FB 200D 2642 FE0F ; fully-qualified # 🧛🏻‍♂️ E5.0 man vampire: light skin tone +1F9DB 1F3FB 200D 2642 ; minimally-qualified # 🧛🏻‍♂ E5.0 man vampire: light skin tone +1F9DB 1F3FC 200D 2642 FE0F ; fully-qualified # 🧛🏼‍♂️ E5.0 man vampire: medium-light skin tone +1F9DB 1F3FC 200D 2642 ; minimally-qualified # 🧛🏼‍♂ E5.0 man vampire: medium-light skin tone +1F9DB 1F3FD 200D 2642 FE0F ; fully-qualified # 🧛🏽‍♂️ E5.0 man vampire: medium skin tone +1F9DB 1F3FD 200D 2642 ; minimally-qualified # 🧛🏽‍♂ E5.0 man vampire: medium skin tone +1F9DB 1F3FE 200D 2642 FE0F ; fully-qualified # 🧛🏾‍♂️ E5.0 man vampire: medium-dark skin tone +1F9DB 1F3FE 200D 2642 ; minimally-qualified # 🧛🏾‍♂ E5.0 man vampire: medium-dark skin tone +1F9DB 1F3FF 200D 2642 FE0F ; fully-qualified # 🧛🏿‍♂️ E5.0 man vampire: dark skin tone +1F9DB 1F3FF 200D 2642 ; minimally-qualified # 🧛🏿‍♂ E5.0 man vampire: dark skin tone +1F9DB 200D 2640 FE0F ; fully-qualified # 🧛‍♀️ E5.0 woman vampire +1F9DB 200D 2640 ; minimally-qualified # 🧛‍♀ E5.0 woman vampire +1F9DB 1F3FB 200D 2640 FE0F ; fully-qualified # 🧛🏻‍♀️ E5.0 woman vampire: light skin tone +1F9DB 1F3FB 200D 2640 ; minimally-qualified # 🧛🏻‍♀ E5.0 woman vampire: light skin tone +1F9DB 1F3FC 200D 2640 FE0F ; fully-qualified # 🧛🏼‍♀️ E5.0 woman vampire: medium-light skin tone +1F9DB 1F3FC 200D 2640 ; minimally-qualified # 🧛🏼‍♀ E5.0 woman vampire: medium-light skin tone +1F9DB 1F3FD 200D 2640 FE0F ; fully-qualified # 🧛🏽‍♀️ E5.0 woman vampire: medium skin tone +1F9DB 1F3FD 200D 2640 ; minimally-qualified # 🧛🏽‍♀ E5.0 woman vampire: medium skin tone +1F9DB 1F3FE 200D 2640 FE0F ; fully-qualified # 🧛🏾‍♀️ E5.0 woman vampire: medium-dark skin tone +1F9DB 1F3FE 200D 2640 ; minimally-qualified # 🧛🏾‍♀ E5.0 woman vampire: medium-dark skin tone +1F9DB 1F3FF 200D 2640 FE0F ; fully-qualified # 🧛🏿‍♀️ E5.0 woman vampire: dark skin tone +1F9DB 1F3FF 200D 2640 ; minimally-qualified # 🧛🏿‍♀ E5.0 woman vampire: dark skin tone +1F9DC ; fully-qualified # 🧜 E5.0 merperson +1F9DC 1F3FB ; fully-qualified # 🧜🏻 E5.0 merperson: light skin tone +1F9DC 1F3FC ; fully-qualified # 🧜🏼 E5.0 merperson: medium-light skin tone +1F9DC 1F3FD ; fully-qualified # 🧜🏽 E5.0 merperson: medium skin tone +1F9DC 1F3FE ; fully-qualified # 🧜🏾 E5.0 merperson: medium-dark skin tone +1F9DC 1F3FF ; fully-qualified # 🧜🏿 E5.0 merperson: dark skin tone +1F9DC 200D 2642 FE0F ; fully-qualified # 🧜‍♂️ E5.0 merman +1F9DC 200D 2642 ; minimally-qualified # 🧜‍♂ E5.0 merman +1F9DC 1F3FB 200D 2642 FE0F ; fully-qualified # 🧜🏻‍♂️ E5.0 merman: light skin tone +1F9DC 1F3FB 200D 2642 ; minimally-qualified # 🧜🏻‍♂ E5.0 merman: light skin tone +1F9DC 1F3FC 200D 2642 FE0F ; fully-qualified # 🧜🏼‍♂️ E5.0 merman: medium-light skin tone +1F9DC 1F3FC 200D 2642 ; minimally-qualified # 🧜🏼‍♂ E5.0 merman: medium-light skin tone +1F9DC 1F3FD 200D 2642 FE0F ; fully-qualified # 🧜🏽‍♂️ E5.0 merman: medium skin tone +1F9DC 1F3FD 200D 2642 ; minimally-qualified # 🧜🏽‍♂ E5.0 merman: medium skin tone +1F9DC 1F3FE 200D 2642 FE0F ; fully-qualified # 🧜🏾‍♂️ E5.0 merman: medium-dark skin tone +1F9DC 1F3FE 200D 2642 ; minimally-qualified # 🧜🏾‍♂ E5.0 merman: medium-dark skin tone +1F9DC 1F3FF 200D 2642 FE0F ; fully-qualified # 🧜🏿‍♂️ E5.0 merman: dark skin tone +1F9DC 1F3FF 200D 2642 ; minimally-qualified # 🧜🏿‍♂ E5.0 merman: dark skin tone +1F9DC 200D 2640 FE0F ; fully-qualified # 🧜‍♀️ E5.0 mermaid +1F9DC 200D 2640 ; minimally-qualified # 🧜‍♀ E5.0 mermaid +1F9DC 1F3FB 200D 2640 FE0F ; fully-qualified # 🧜🏻‍♀️ E5.0 mermaid: light skin tone +1F9DC 1F3FB 200D 2640 ; minimally-qualified # 🧜🏻‍♀ E5.0 mermaid: light skin tone +1F9DC 1F3FC 200D 2640 FE0F ; fully-qualified # 🧜🏼‍♀️ E5.0 mermaid: medium-light skin tone +1F9DC 1F3FC 200D 2640 ; minimally-qualified # 🧜🏼‍♀ E5.0 mermaid: medium-light skin tone +1F9DC 1F3FD 200D 2640 FE0F ; fully-qualified # 🧜🏽‍♀️ E5.0 mermaid: medium skin tone +1F9DC 1F3FD 200D 2640 ; minimally-qualified # 🧜🏽‍♀ E5.0 mermaid: medium skin tone +1F9DC 1F3FE 200D 2640 FE0F ; fully-qualified # 🧜🏾‍♀️ E5.0 mermaid: medium-dark skin tone +1F9DC 1F3FE 200D 2640 ; minimally-qualified # 🧜🏾‍♀ E5.0 mermaid: medium-dark skin tone +1F9DC 1F3FF 200D 2640 FE0F ; fully-qualified # 🧜🏿‍♀️ E5.0 mermaid: dark skin tone +1F9DC 1F3FF 200D 2640 ; minimally-qualified # 🧜🏿‍♀ E5.0 mermaid: dark skin tone +1F9DD ; fully-qualified # 🧝 E5.0 elf +1F9DD 1F3FB ; fully-qualified # 🧝🏻 E5.0 elf: light skin tone +1F9DD 1F3FC ; fully-qualified # 🧝🏼 E5.0 elf: medium-light skin tone +1F9DD 1F3FD ; fully-qualified # 🧝🏽 E5.0 elf: medium skin tone +1F9DD 1F3FE ; fully-qualified # 🧝🏾 E5.0 elf: medium-dark skin tone +1F9DD 1F3FF ; fully-qualified # 🧝🏿 E5.0 elf: dark skin tone +1F9DD 200D 2642 FE0F ; fully-qualified # 🧝‍♂️ E5.0 man elf +1F9DD 200D 2642 ; minimally-qualified # 🧝‍♂ E5.0 man elf +1F9DD 1F3FB 200D 2642 FE0F ; fully-qualified # 🧝🏻‍♂️ E5.0 man elf: light skin tone +1F9DD 1F3FB 200D 2642 ; minimally-qualified # 🧝🏻‍♂ E5.0 man elf: light skin tone +1F9DD 1F3FC 200D 2642 FE0F ; fully-qualified # 🧝🏼‍♂️ E5.0 man elf: medium-light skin tone +1F9DD 1F3FC 200D 2642 ; minimally-qualified # 🧝🏼‍♂ E5.0 man elf: medium-light skin tone +1F9DD 1F3FD 200D 2642 FE0F ; fully-qualified # 🧝🏽‍♂️ E5.0 man elf: medium skin tone +1F9DD 1F3FD 200D 2642 ; minimally-qualified # 🧝🏽‍♂ E5.0 man elf: medium skin tone +1F9DD 1F3FE 200D 2642 FE0F ; fully-qualified # 🧝🏾‍♂️ E5.0 man elf: medium-dark skin tone +1F9DD 1F3FE 200D 2642 ; minimally-qualified # 🧝🏾‍♂ E5.0 man elf: medium-dark skin tone +1F9DD 1F3FF 200D 2642 FE0F ; fully-qualified # 🧝🏿‍♂️ E5.0 man elf: dark skin tone +1F9DD 1F3FF 200D 2642 ; minimally-qualified # 🧝🏿‍♂ E5.0 man elf: dark skin tone +1F9DD 200D 2640 FE0F ; fully-qualified # 🧝‍♀️ E5.0 woman elf +1F9DD 200D 2640 ; minimally-qualified # 🧝‍♀ E5.0 woman elf +1F9DD 1F3FB 200D 2640 FE0F ; fully-qualified # 🧝🏻‍♀️ E5.0 woman elf: light skin tone +1F9DD 1F3FB 200D 2640 ; minimally-qualified # 🧝🏻‍♀ E5.0 woman elf: light skin tone +1F9DD 1F3FC 200D 2640 FE0F ; fully-qualified # 🧝🏼‍♀️ E5.0 woman elf: medium-light skin tone +1F9DD 1F3FC 200D 2640 ; minimally-qualified # 🧝🏼‍♀ E5.0 woman elf: medium-light skin tone +1F9DD 1F3FD 200D 2640 FE0F ; fully-qualified # 🧝🏽‍♀️ E5.0 woman elf: medium skin tone +1F9DD 1F3FD 200D 2640 ; minimally-qualified # 🧝🏽‍♀ E5.0 woman elf: medium skin tone +1F9DD 1F3FE 200D 2640 FE0F ; fully-qualified # 🧝🏾‍♀️ E5.0 woman elf: medium-dark skin tone +1F9DD 1F3FE 200D 2640 ; minimally-qualified # 🧝🏾‍♀ E5.0 woman elf: medium-dark skin tone +1F9DD 1F3FF 200D 2640 FE0F ; fully-qualified # 🧝🏿‍♀️ E5.0 woman elf: dark skin tone +1F9DD 1F3FF 200D 2640 ; minimally-qualified # 🧝🏿‍♀ E5.0 woman elf: dark skin tone +1F9DE ; fully-qualified # 🧞 E5.0 genie +1F9DE 200D 2642 FE0F ; fully-qualified # 🧞‍♂️ E5.0 man genie +1F9DE 200D 2642 ; minimally-qualified # 🧞‍♂ E5.0 man genie +1F9DE 200D 2640 FE0F ; fully-qualified # 🧞‍♀️ E5.0 woman genie +1F9DE 200D 2640 ; minimally-qualified # 🧞‍♀ E5.0 woman genie +1F9DF ; fully-qualified # 🧟 E5.0 zombie +1F9DF 200D 2642 FE0F ; fully-qualified # 🧟‍♂️ E5.0 man zombie +1F9DF 200D 2642 ; minimally-qualified # 🧟‍♂ E5.0 man zombie +1F9DF 200D 2640 FE0F ; fully-qualified # 🧟‍♀️ E5.0 woman zombie +1F9DF 200D 2640 ; minimally-qualified # 🧟‍♀ E5.0 woman zombie +1F9CC ; fully-qualified # 🧌 E14.0 troll + +# subgroup: person-activity +1F486 ; fully-qualified # 💆 E0.6 person getting massage +1F486 1F3FB ; fully-qualified # 💆🏻 E1.0 person getting massage: light skin tone +1F486 1F3FC ; fully-qualified # 💆🏼 E1.0 person getting massage: medium-light skin tone +1F486 1F3FD ; fully-qualified # 💆🏽 E1.0 person getting massage: medium skin tone +1F486 1F3FE ; fully-qualified # 💆🏾 E1.0 person getting massage: medium-dark skin tone +1F486 1F3FF ; fully-qualified # 💆🏿 E1.0 person getting massage: dark skin tone +1F486 200D 2642 FE0F ; fully-qualified # 💆‍♂️ E4.0 man getting massage +1F486 200D 2642 ; minimally-qualified # 💆‍♂ E4.0 man getting massage +1F486 1F3FB 200D 2642 FE0F ; fully-qualified # 💆🏻‍♂️ E4.0 man getting massage: light skin tone +1F486 1F3FB 200D 2642 ; minimally-qualified # 💆🏻‍♂ E4.0 man getting massage: light skin tone +1F486 1F3FC 200D 2642 FE0F ; fully-qualified # 💆🏼‍♂️ E4.0 man getting massage: medium-light skin tone +1F486 1F3FC 200D 2642 ; minimally-qualified # 💆🏼‍♂ E4.0 man getting massage: medium-light skin tone +1F486 1F3FD 200D 2642 FE0F ; fully-qualified # 💆🏽‍♂️ E4.0 man getting massage: medium skin tone +1F486 1F3FD 200D 2642 ; minimally-qualified # 💆🏽‍♂ E4.0 man getting massage: medium skin tone +1F486 1F3FE 200D 2642 FE0F ; fully-qualified # 💆🏾‍♂️ E4.0 man getting massage: medium-dark skin tone +1F486 1F3FE 200D 2642 ; minimally-qualified # 💆🏾‍♂ E4.0 man getting massage: medium-dark skin tone +1F486 1F3FF 200D 2642 FE0F ; fully-qualified # 💆🏿‍♂️ E4.0 man getting massage: dark skin tone +1F486 1F3FF 200D 2642 ; minimally-qualified # 💆🏿‍♂ E4.0 man getting massage: dark skin tone +1F486 200D 2640 FE0F ; fully-qualified # 💆‍♀️ E4.0 woman getting massage +1F486 200D 2640 ; minimally-qualified # 💆‍♀ E4.0 woman getting massage +1F486 1F3FB 200D 2640 FE0F ; fully-qualified # 💆🏻‍♀️ E4.0 woman getting massage: light skin tone +1F486 1F3FB 200D 2640 ; minimally-qualified # 💆🏻‍♀ E4.0 woman getting massage: light skin tone +1F486 1F3FC 200D 2640 FE0F ; fully-qualified # 💆🏼‍♀️ E4.0 woman getting massage: medium-light skin tone +1F486 1F3FC 200D 2640 ; minimally-qualified # 💆🏼‍♀ E4.0 woman getting massage: medium-light skin tone +1F486 1F3FD 200D 2640 FE0F ; fully-qualified # 💆🏽‍♀️ E4.0 woman getting massage: medium skin tone +1F486 1F3FD 200D 2640 ; minimally-qualified # 💆🏽‍♀ E4.0 woman getting massage: medium skin tone +1F486 1F3FE 200D 2640 FE0F ; fully-qualified # 💆🏾‍♀️ E4.0 woman getting massage: medium-dark skin tone +1F486 1F3FE 200D 2640 ; minimally-qualified # 💆🏾‍♀ E4.0 woman getting massage: medium-dark skin tone +1F486 1F3FF 200D 2640 FE0F ; fully-qualified # 💆🏿‍♀️ E4.0 woman getting massage: dark skin tone +1F486 1F3FF 200D 2640 ; minimally-qualified # 💆🏿‍♀ E4.0 woman getting massage: dark skin tone +1F487 ; fully-qualified # 💇 E0.6 person getting haircut +1F487 1F3FB ; fully-qualified # 💇🏻 E1.0 person getting haircut: light skin tone +1F487 1F3FC ; fully-qualified # 💇🏼 E1.0 person getting haircut: medium-light skin tone +1F487 1F3FD ; fully-qualified # 💇🏽 E1.0 person getting haircut: medium skin tone +1F487 1F3FE ; fully-qualified # 💇🏾 E1.0 person getting haircut: medium-dark skin tone +1F487 1F3FF ; fully-qualified # 💇🏿 E1.0 person getting haircut: dark skin tone +1F487 200D 2642 FE0F ; fully-qualified # 💇‍♂️ E4.0 man getting haircut +1F487 200D 2642 ; minimally-qualified # 💇‍♂ E4.0 man getting haircut +1F487 1F3FB 200D 2642 FE0F ; fully-qualified # 💇🏻‍♂️ E4.0 man getting haircut: light skin tone +1F487 1F3FB 200D 2642 ; minimally-qualified # 💇🏻‍♂ E4.0 man getting haircut: light skin tone +1F487 1F3FC 200D 2642 FE0F ; fully-qualified # 💇🏼‍♂️ E4.0 man getting haircut: medium-light skin tone +1F487 1F3FC 200D 2642 ; minimally-qualified # 💇🏼‍♂ E4.0 man getting haircut: medium-light skin tone +1F487 1F3FD 200D 2642 FE0F ; fully-qualified # 💇🏽‍♂️ E4.0 man getting haircut: medium skin tone +1F487 1F3FD 200D 2642 ; minimally-qualified # 💇🏽‍♂ E4.0 man getting haircut: medium skin tone +1F487 1F3FE 200D 2642 FE0F ; fully-qualified # 💇🏾‍♂️ E4.0 man getting haircut: medium-dark skin tone +1F487 1F3FE 200D 2642 ; minimally-qualified # 💇🏾‍♂ E4.0 man getting haircut: medium-dark skin tone +1F487 1F3FF 200D 2642 FE0F ; fully-qualified # 💇🏿‍♂️ E4.0 man getting haircut: dark skin tone +1F487 1F3FF 200D 2642 ; minimally-qualified # 💇🏿‍♂ E4.0 man getting haircut: dark skin tone +1F487 200D 2640 FE0F ; fully-qualified # 💇‍♀️ E4.0 woman getting haircut +1F487 200D 2640 ; minimally-qualified # 💇‍♀ E4.0 woman getting haircut +1F487 1F3FB 200D 2640 FE0F ; fully-qualified # 💇🏻‍♀️ E4.0 woman getting haircut: light skin tone +1F487 1F3FB 200D 2640 ; minimally-qualified # 💇🏻‍♀ E4.0 woman getting haircut: light skin tone +1F487 1F3FC 200D 2640 FE0F ; fully-qualified # 💇🏼‍♀️ E4.0 woman getting haircut: medium-light skin tone +1F487 1F3FC 200D 2640 ; minimally-qualified # 💇🏼‍♀ E4.0 woman getting haircut: medium-light skin tone +1F487 1F3FD 200D 2640 FE0F ; fully-qualified # 💇🏽‍♀️ E4.0 woman getting haircut: medium skin tone +1F487 1F3FD 200D 2640 ; minimally-qualified # 💇🏽‍♀ E4.0 woman getting haircut: medium skin tone +1F487 1F3FE 200D 2640 FE0F ; fully-qualified # 💇🏾‍♀️ E4.0 woman getting haircut: medium-dark skin tone +1F487 1F3FE 200D 2640 ; minimally-qualified # 💇🏾‍♀ E4.0 woman getting haircut: medium-dark skin tone +1F487 1F3FF 200D 2640 FE0F ; fully-qualified # 💇🏿‍♀️ E4.0 woman getting haircut: dark skin tone +1F487 1F3FF 200D 2640 ; minimally-qualified # 💇🏿‍♀ E4.0 woman getting haircut: dark skin tone +1F6B6 ; fully-qualified # 🚶 E0.6 person walking +1F6B6 1F3FB ; fully-qualified # 🚶🏻 E1.0 person walking: light skin tone +1F6B6 1F3FC ; fully-qualified # 🚶🏼 E1.0 person walking: medium-light skin tone +1F6B6 1F3FD ; fully-qualified # 🚶🏽 E1.0 person walking: medium skin tone +1F6B6 1F3FE ; fully-qualified # 🚶🏾 E1.0 person walking: medium-dark skin tone +1F6B6 1F3FF ; fully-qualified # 🚶🏿 E1.0 person walking: dark skin tone +1F6B6 200D 2642 FE0F ; fully-qualified # 🚶‍♂️ E4.0 man walking +1F6B6 200D 2642 ; minimally-qualified # 🚶‍♂ E4.0 man walking +1F6B6 1F3FB 200D 2642 FE0F ; fully-qualified # 🚶🏻‍♂️ E4.0 man walking: light skin tone +1F6B6 1F3FB 200D 2642 ; minimally-qualified # 🚶🏻‍♂ E4.0 man walking: light skin tone +1F6B6 1F3FC 200D 2642 FE0F ; fully-qualified # 🚶🏼‍♂️ E4.0 man walking: medium-light skin tone +1F6B6 1F3FC 200D 2642 ; minimally-qualified # 🚶🏼‍♂ E4.0 man walking: medium-light skin tone +1F6B6 1F3FD 200D 2642 FE0F ; fully-qualified # 🚶🏽‍♂️ E4.0 man walking: medium skin tone +1F6B6 1F3FD 200D 2642 ; minimally-qualified # 🚶🏽‍♂ E4.0 man walking: medium skin tone +1F6B6 1F3FE 200D 2642 FE0F ; fully-qualified # 🚶🏾‍♂️ E4.0 man walking: medium-dark skin tone +1F6B6 1F3FE 200D 2642 ; minimally-qualified # 🚶🏾‍♂ E4.0 man walking: medium-dark skin tone +1F6B6 1F3FF 200D 2642 FE0F ; fully-qualified # 🚶🏿‍♂️ E4.0 man walking: dark skin tone +1F6B6 1F3FF 200D 2642 ; minimally-qualified # 🚶🏿‍♂ E4.0 man walking: dark skin tone +1F6B6 200D 2640 FE0F ; fully-qualified # 🚶‍♀️ E4.0 woman walking +1F6B6 200D 2640 ; minimally-qualified # 🚶‍♀ E4.0 woman walking +1F6B6 1F3FB 200D 2640 FE0F ; fully-qualified # 🚶🏻‍♀️ E4.0 woman walking: light skin tone +1F6B6 1F3FB 200D 2640 ; minimally-qualified # 🚶🏻‍♀ E4.0 woman walking: light skin tone +1F6B6 1F3FC 200D 2640 FE0F ; fully-qualified # 🚶🏼‍♀️ E4.0 woman walking: medium-light skin tone +1F6B6 1F3FC 200D 2640 ; minimally-qualified # 🚶🏼‍♀ E4.0 woman walking: medium-light skin tone +1F6B6 1F3FD 200D 2640 FE0F ; fully-qualified # 🚶🏽‍♀️ E4.0 woman walking: medium skin tone +1F6B6 1F3FD 200D 2640 ; minimally-qualified # 🚶🏽‍♀ E4.0 woman walking: medium skin tone +1F6B6 1F3FE 200D 2640 FE0F ; fully-qualified # 🚶🏾‍♀️ E4.0 woman walking: medium-dark skin tone +1F6B6 1F3FE 200D 2640 ; minimally-qualified # 🚶🏾‍♀ E4.0 woman walking: medium-dark skin tone +1F6B6 1F3FF 200D 2640 FE0F ; fully-qualified # 🚶🏿‍♀️ E4.0 woman walking: dark skin tone +1F6B6 1F3FF 200D 2640 ; minimally-qualified # 🚶🏿‍♀ E4.0 woman walking: dark skin tone +1F9CD ; fully-qualified # 🧍 E12.0 person standing +1F9CD 1F3FB ; fully-qualified # 🧍🏻 E12.0 person standing: light skin tone +1F9CD 1F3FC ; fully-qualified # 🧍🏼 E12.0 person standing: medium-light skin tone +1F9CD 1F3FD ; fully-qualified # 🧍🏽 E12.0 person standing: medium skin tone +1F9CD 1F3FE ; fully-qualified # 🧍🏾 E12.0 person standing: medium-dark skin tone +1F9CD 1F3FF ; fully-qualified # 🧍🏿 E12.0 person standing: dark skin tone +1F9CD 200D 2642 FE0F ; fully-qualified # 🧍‍♂️ E12.0 man standing +1F9CD 200D 2642 ; minimally-qualified # 🧍‍♂ E12.0 man standing +1F9CD 1F3FB 200D 2642 FE0F ; fully-qualified # 🧍🏻‍♂️ E12.0 man standing: light skin tone +1F9CD 1F3FB 200D 2642 ; minimally-qualified # 🧍🏻‍♂ E12.0 man standing: light skin tone +1F9CD 1F3FC 200D 2642 FE0F ; fully-qualified # 🧍🏼‍♂️ E12.0 man standing: medium-light skin tone +1F9CD 1F3FC 200D 2642 ; minimally-qualified # 🧍🏼‍♂ E12.0 man standing: medium-light skin tone +1F9CD 1F3FD 200D 2642 FE0F ; fully-qualified # 🧍🏽‍♂️ E12.0 man standing: medium skin tone +1F9CD 1F3FD 200D 2642 ; minimally-qualified # 🧍🏽‍♂ E12.0 man standing: medium skin tone +1F9CD 1F3FE 200D 2642 FE0F ; fully-qualified # 🧍🏾‍♂️ E12.0 man standing: medium-dark skin tone +1F9CD 1F3FE 200D 2642 ; minimally-qualified # 🧍🏾‍♂ E12.0 man standing: medium-dark skin tone +1F9CD 1F3FF 200D 2642 FE0F ; fully-qualified # 🧍🏿‍♂️ E12.0 man standing: dark skin tone +1F9CD 1F3FF 200D 2642 ; minimally-qualified # 🧍🏿‍♂ E12.0 man standing: dark skin tone +1F9CD 200D 2640 FE0F ; fully-qualified # 🧍‍♀️ E12.0 woman standing +1F9CD 200D 2640 ; minimally-qualified # 🧍‍♀ E12.0 woman standing +1F9CD 1F3FB 200D 2640 FE0F ; fully-qualified # 🧍🏻‍♀️ E12.0 woman standing: light skin tone +1F9CD 1F3FB 200D 2640 ; minimally-qualified # 🧍🏻‍♀ E12.0 woman standing: light skin tone +1F9CD 1F3FC 200D 2640 FE0F ; fully-qualified # 🧍🏼‍♀️ E12.0 woman standing: medium-light skin tone +1F9CD 1F3FC 200D 2640 ; minimally-qualified # 🧍🏼‍♀ E12.0 woman standing: medium-light skin tone +1F9CD 1F3FD 200D 2640 FE0F ; fully-qualified # 🧍🏽‍♀️ E12.0 woman standing: medium skin tone +1F9CD 1F3FD 200D 2640 ; minimally-qualified # 🧍🏽‍♀ E12.0 woman standing: medium skin tone +1F9CD 1F3FE 200D 2640 FE0F ; fully-qualified # 🧍🏾‍♀️ E12.0 woman standing: medium-dark skin tone +1F9CD 1F3FE 200D 2640 ; minimally-qualified # 🧍🏾‍♀ E12.0 woman standing: medium-dark skin tone +1F9CD 1F3FF 200D 2640 FE0F ; fully-qualified # 🧍🏿‍♀️ E12.0 woman standing: dark skin tone +1F9CD 1F3FF 200D 2640 ; minimally-qualified # 🧍🏿‍♀ E12.0 woman standing: dark skin tone +1F9CE ; fully-qualified # 🧎 E12.0 person kneeling +1F9CE 1F3FB ; fully-qualified # 🧎🏻 E12.0 person kneeling: light skin tone +1F9CE 1F3FC ; fully-qualified # 🧎🏼 E12.0 person kneeling: medium-light skin tone +1F9CE 1F3FD ; fully-qualified # 🧎🏽 E12.0 person kneeling: medium skin tone +1F9CE 1F3FE ; fully-qualified # 🧎🏾 E12.0 person kneeling: medium-dark skin tone +1F9CE 1F3FF ; fully-qualified # 🧎🏿 E12.0 person kneeling: dark skin tone +1F9CE 200D 2642 FE0F ; fully-qualified # 🧎‍♂️ E12.0 man kneeling +1F9CE 200D 2642 ; minimally-qualified # 🧎‍♂ E12.0 man kneeling +1F9CE 1F3FB 200D 2642 FE0F ; fully-qualified # 🧎🏻‍♂️ E12.0 man kneeling: light skin tone +1F9CE 1F3FB 200D 2642 ; minimally-qualified # 🧎🏻‍♂ E12.0 man kneeling: light skin tone +1F9CE 1F3FC 200D 2642 FE0F ; fully-qualified # 🧎🏼‍♂️ E12.0 man kneeling: medium-light skin tone +1F9CE 1F3FC 200D 2642 ; minimally-qualified # 🧎🏼‍♂ E12.0 man kneeling: medium-light skin tone +1F9CE 1F3FD 200D 2642 FE0F ; fully-qualified # 🧎🏽‍♂️ E12.0 man kneeling: medium skin tone +1F9CE 1F3FD 200D 2642 ; minimally-qualified # 🧎🏽‍♂ E12.0 man kneeling: medium skin tone +1F9CE 1F3FE 200D 2642 FE0F ; fully-qualified # 🧎🏾‍♂️ E12.0 man kneeling: medium-dark skin tone +1F9CE 1F3FE 200D 2642 ; minimally-qualified # 🧎🏾‍♂ E12.0 man kneeling: medium-dark skin tone +1F9CE 1F3FF 200D 2642 FE0F ; fully-qualified # 🧎🏿‍♂️ E12.0 man kneeling: dark skin tone +1F9CE 1F3FF 200D 2642 ; minimally-qualified # 🧎🏿‍♂ E12.0 man kneeling: dark skin tone +1F9CE 200D 2640 FE0F ; fully-qualified # 🧎‍♀️ E12.0 woman kneeling +1F9CE 200D 2640 ; minimally-qualified # 🧎‍♀ E12.0 woman kneeling +1F9CE 1F3FB 200D 2640 FE0F ; fully-qualified # 🧎🏻‍♀️ E12.0 woman kneeling: light skin tone +1F9CE 1F3FB 200D 2640 ; minimally-qualified # 🧎🏻‍♀ E12.0 woman kneeling: light skin tone +1F9CE 1F3FC 200D 2640 FE0F ; fully-qualified # 🧎🏼‍♀️ E12.0 woman kneeling: medium-light skin tone +1F9CE 1F3FC 200D 2640 ; minimally-qualified # 🧎🏼‍♀ E12.0 woman kneeling: medium-light skin tone +1F9CE 1F3FD 200D 2640 FE0F ; fully-qualified # 🧎🏽‍♀️ E12.0 woman kneeling: medium skin tone +1F9CE 1F3FD 200D 2640 ; minimally-qualified # 🧎🏽‍♀ E12.0 woman kneeling: medium skin tone +1F9CE 1F3FE 200D 2640 FE0F ; fully-qualified # 🧎🏾‍♀️ E12.0 woman kneeling: medium-dark skin tone +1F9CE 1F3FE 200D 2640 ; minimally-qualified # 🧎🏾‍♀ E12.0 woman kneeling: medium-dark skin tone +1F9CE 1F3FF 200D 2640 FE0F ; fully-qualified # 🧎🏿‍♀️ E12.0 woman kneeling: dark skin tone +1F9CE 1F3FF 200D 2640 ; minimally-qualified # 🧎🏿‍♀ E12.0 woman kneeling: dark skin tone +1F9D1 200D 1F9AF ; fully-qualified # 🧑‍🦯 E12.1 person with white cane +1F9D1 1F3FB 200D 1F9AF ; fully-qualified # 🧑🏻‍🦯 E12.1 person with white cane: light skin tone +1F9D1 1F3FC 200D 1F9AF ; fully-qualified # 🧑🏼‍🦯 E12.1 person with white cane: medium-light skin tone +1F9D1 1F3FD 200D 1F9AF ; fully-qualified # 🧑🏽‍🦯 E12.1 person with white cane: medium skin tone +1F9D1 1F3FE 200D 1F9AF ; fully-qualified # 🧑🏾‍🦯 E12.1 person with white cane: medium-dark skin tone +1F9D1 1F3FF 200D 1F9AF ; fully-qualified # 🧑🏿‍🦯 E12.1 person with white cane: dark skin tone +1F468 200D 1F9AF ; fully-qualified # 👨‍🦯 E12.0 man with white cane +1F468 1F3FB 200D 1F9AF ; fully-qualified # 👨🏻‍🦯 E12.0 man with white cane: light skin tone +1F468 1F3FC 200D 1F9AF ; fully-qualified # 👨🏼‍🦯 E12.0 man with white cane: medium-light skin tone +1F468 1F3FD 200D 1F9AF ; fully-qualified # 👨🏽‍🦯 E12.0 man with white cane: medium skin tone +1F468 1F3FE 200D 1F9AF ; fully-qualified # 👨🏾‍🦯 E12.0 man with white cane: medium-dark skin tone +1F468 1F3FF 200D 1F9AF ; fully-qualified # 👨🏿‍🦯 E12.0 man with white cane: dark skin tone +1F469 200D 1F9AF ; fully-qualified # 👩‍🦯 E12.0 woman with white cane +1F469 1F3FB 200D 1F9AF ; fully-qualified # 👩🏻‍🦯 E12.0 woman with white cane: light skin tone +1F469 1F3FC 200D 1F9AF ; fully-qualified # 👩🏼‍🦯 E12.0 woman with white cane: medium-light skin tone +1F469 1F3FD 200D 1F9AF ; fully-qualified # 👩🏽‍🦯 E12.0 woman with white cane: medium skin tone +1F469 1F3FE 200D 1F9AF ; fully-qualified # 👩🏾‍🦯 E12.0 woman with white cane: medium-dark skin tone +1F469 1F3FF 200D 1F9AF ; fully-qualified # 👩🏿‍🦯 E12.0 woman with white cane: dark skin tone +1F9D1 200D 1F9BC ; fully-qualified # 🧑‍🦼 E12.1 person in motorized wheelchair +1F9D1 1F3FB 200D 1F9BC ; fully-qualified # 🧑🏻‍🦼 E12.1 person in motorized wheelchair: light skin tone +1F9D1 1F3FC 200D 1F9BC ; fully-qualified # 🧑🏼‍🦼 E12.1 person in motorized wheelchair: medium-light skin tone +1F9D1 1F3FD 200D 1F9BC ; fully-qualified # 🧑🏽‍🦼 E12.1 person in motorized wheelchair: medium skin tone +1F9D1 1F3FE 200D 1F9BC ; fully-qualified # 🧑🏾‍🦼 E12.1 person in motorized wheelchair: medium-dark skin tone +1F9D1 1F3FF 200D 1F9BC ; fully-qualified # 🧑🏿‍🦼 E12.1 person in motorized wheelchair: dark skin tone +1F468 200D 1F9BC ; fully-qualified # 👨‍🦼 E12.0 man in motorized wheelchair +1F468 1F3FB 200D 1F9BC ; fully-qualified # 👨🏻‍🦼 E12.0 man in motorized wheelchair: light skin tone +1F468 1F3FC 200D 1F9BC ; fully-qualified # 👨🏼‍🦼 E12.0 man in motorized wheelchair: medium-light skin tone +1F468 1F3FD 200D 1F9BC ; fully-qualified # 👨🏽‍🦼 E12.0 man in motorized wheelchair: medium skin tone +1F468 1F3FE 200D 1F9BC ; fully-qualified # 👨🏾‍🦼 E12.0 man in motorized wheelchair: medium-dark skin tone +1F468 1F3FF 200D 1F9BC ; fully-qualified # 👨🏿‍🦼 E12.0 man in motorized wheelchair: dark skin tone +1F469 200D 1F9BC ; fully-qualified # 👩‍🦼 E12.0 woman in motorized wheelchair +1F469 1F3FB 200D 1F9BC ; fully-qualified # 👩🏻‍🦼 E12.0 woman in motorized wheelchair: light skin tone +1F469 1F3FC 200D 1F9BC ; fully-qualified # 👩🏼‍🦼 E12.0 woman in motorized wheelchair: medium-light skin tone +1F469 1F3FD 200D 1F9BC ; fully-qualified # 👩🏽‍🦼 E12.0 woman in motorized wheelchair: medium skin tone +1F469 1F3FE 200D 1F9BC ; fully-qualified # 👩🏾‍🦼 E12.0 woman in motorized wheelchair: medium-dark skin tone +1F469 1F3FF 200D 1F9BC ; fully-qualified # 👩🏿‍🦼 E12.0 woman in motorized wheelchair: dark skin tone +1F9D1 200D 1F9BD ; fully-qualified # 🧑‍🦽 E12.1 person in manual wheelchair +1F9D1 1F3FB 200D 1F9BD ; fully-qualified # 🧑🏻‍🦽 E12.1 person in manual wheelchair: light skin tone +1F9D1 1F3FC 200D 1F9BD ; fully-qualified # 🧑🏼‍🦽 E12.1 person in manual wheelchair: medium-light skin tone +1F9D1 1F3FD 200D 1F9BD ; fully-qualified # 🧑🏽‍🦽 E12.1 person in manual wheelchair: medium skin tone +1F9D1 1F3FE 200D 1F9BD ; fully-qualified # 🧑🏾‍🦽 E12.1 person in manual wheelchair: medium-dark skin tone +1F9D1 1F3FF 200D 1F9BD ; fully-qualified # 🧑🏿‍🦽 E12.1 person in manual wheelchair: dark skin tone +1F468 200D 1F9BD ; fully-qualified # 👨‍🦽 E12.0 man in manual wheelchair +1F468 1F3FB 200D 1F9BD ; fully-qualified # 👨🏻‍🦽 E12.0 man in manual wheelchair: light skin tone +1F468 1F3FC 200D 1F9BD ; fully-qualified # 👨🏼‍🦽 E12.0 man in manual wheelchair: medium-light skin tone +1F468 1F3FD 200D 1F9BD ; fully-qualified # 👨🏽‍🦽 E12.0 man in manual wheelchair: medium skin tone +1F468 1F3FE 200D 1F9BD ; fully-qualified # 👨🏾‍🦽 E12.0 man in manual wheelchair: medium-dark skin tone +1F468 1F3FF 200D 1F9BD ; fully-qualified # 👨🏿‍🦽 E12.0 man in manual wheelchair: dark skin tone +1F469 200D 1F9BD ; fully-qualified # 👩‍🦽 E12.0 woman in manual wheelchair +1F469 1F3FB 200D 1F9BD ; fully-qualified # 👩🏻‍🦽 E12.0 woman in manual wheelchair: light skin tone +1F469 1F3FC 200D 1F9BD ; fully-qualified # 👩🏼‍🦽 E12.0 woman in manual wheelchair: medium-light skin tone +1F469 1F3FD 200D 1F9BD ; fully-qualified # 👩🏽‍🦽 E12.0 woman in manual wheelchair: medium skin tone +1F469 1F3FE 200D 1F9BD ; fully-qualified # 👩🏾‍🦽 E12.0 woman in manual wheelchair: medium-dark skin tone +1F469 1F3FF 200D 1F9BD ; fully-qualified # 👩🏿‍🦽 E12.0 woman in manual wheelchair: dark skin tone +1F3C3 ; fully-qualified # 🏃 E0.6 person running +1F3C3 1F3FB ; fully-qualified # 🏃🏻 E1.0 person running: light skin tone +1F3C3 1F3FC ; fully-qualified # 🏃🏼 E1.0 person running: medium-light skin tone +1F3C3 1F3FD ; fully-qualified # 🏃🏽 E1.0 person running: medium skin tone +1F3C3 1F3FE ; fully-qualified # 🏃🏾 E1.0 person running: medium-dark skin tone +1F3C3 1F3FF ; fully-qualified # 🏃🏿 E1.0 person running: dark skin tone +1F3C3 200D 2642 FE0F ; fully-qualified # 🏃‍♂️ E4.0 man running +1F3C3 200D 2642 ; minimally-qualified # 🏃‍♂ E4.0 man running +1F3C3 1F3FB 200D 2642 FE0F ; fully-qualified # 🏃🏻‍♂️ E4.0 man running: light skin tone +1F3C3 1F3FB 200D 2642 ; minimally-qualified # 🏃🏻‍♂ E4.0 man running: light skin tone +1F3C3 1F3FC 200D 2642 FE0F ; fully-qualified # 🏃🏼‍♂️ E4.0 man running: medium-light skin tone +1F3C3 1F3FC 200D 2642 ; minimally-qualified # 🏃🏼‍♂ E4.0 man running: medium-light skin tone +1F3C3 1F3FD 200D 2642 FE0F ; fully-qualified # 🏃🏽‍♂️ E4.0 man running: medium skin tone +1F3C3 1F3FD 200D 2642 ; minimally-qualified # 🏃🏽‍♂ E4.0 man running: medium skin tone +1F3C3 1F3FE 200D 2642 FE0F ; fully-qualified # 🏃🏾‍♂️ E4.0 man running: medium-dark skin tone +1F3C3 1F3FE 200D 2642 ; minimally-qualified # 🏃🏾‍♂ E4.0 man running: medium-dark skin tone +1F3C3 1F3FF 200D 2642 FE0F ; fully-qualified # 🏃🏿‍♂️ E4.0 man running: dark skin tone +1F3C3 1F3FF 200D 2642 ; minimally-qualified # 🏃🏿‍♂ E4.0 man running: dark skin tone +1F3C3 200D 2640 FE0F ; fully-qualified # 🏃‍♀️ E4.0 woman running +1F3C3 200D 2640 ; minimally-qualified # 🏃‍♀ E4.0 woman running +1F3C3 1F3FB 200D 2640 FE0F ; fully-qualified # 🏃🏻‍♀️ E4.0 woman running: light skin tone +1F3C3 1F3FB 200D 2640 ; minimally-qualified # 🏃🏻‍♀ E4.0 woman running: light skin tone +1F3C3 1F3FC 200D 2640 FE0F ; fully-qualified # 🏃🏼‍♀️ E4.0 woman running: medium-light skin tone +1F3C3 1F3FC 200D 2640 ; minimally-qualified # 🏃🏼‍♀ E4.0 woman running: medium-light skin tone +1F3C3 1F3FD 200D 2640 FE0F ; fully-qualified # 🏃🏽‍♀️ E4.0 woman running: medium skin tone +1F3C3 1F3FD 200D 2640 ; minimally-qualified # 🏃🏽‍♀ E4.0 woman running: medium skin tone +1F3C3 1F3FE 200D 2640 FE0F ; fully-qualified # 🏃🏾‍♀️ E4.0 woman running: medium-dark skin tone +1F3C3 1F3FE 200D 2640 ; minimally-qualified # 🏃🏾‍♀ E4.0 woman running: medium-dark skin tone +1F3C3 1F3FF 200D 2640 FE0F ; fully-qualified # 🏃🏿‍♀️ E4.0 woman running: dark skin tone +1F3C3 1F3FF 200D 2640 ; minimally-qualified # 🏃🏿‍♀ E4.0 woman running: dark skin tone +1F483 ; fully-qualified # 💃 E0.6 woman dancing +1F483 1F3FB ; fully-qualified # 💃🏻 E1.0 woman dancing: light skin tone +1F483 1F3FC ; fully-qualified # 💃🏼 E1.0 woman dancing: medium-light skin tone +1F483 1F3FD ; fully-qualified # 💃🏽 E1.0 woman dancing: medium skin tone +1F483 1F3FE ; fully-qualified # 💃🏾 E1.0 woman dancing: medium-dark skin tone +1F483 1F3FF ; fully-qualified # 💃🏿 E1.0 woman dancing: dark skin tone +1F57A ; fully-qualified # 🕺 E3.0 man dancing +1F57A 1F3FB ; fully-qualified # 🕺🏻 E3.0 man dancing: light skin tone +1F57A 1F3FC ; fully-qualified # 🕺🏼 E3.0 man dancing: medium-light skin tone +1F57A 1F3FD ; fully-qualified # 🕺🏽 E3.0 man dancing: medium skin tone +1F57A 1F3FE ; fully-qualified # 🕺🏾 E3.0 man dancing: medium-dark skin tone +1F57A 1F3FF ; fully-qualified # 🕺🏿 E3.0 man dancing: dark skin tone +1F574 FE0F ; fully-qualified # 🕴️ E0.7 person in suit levitating +1F574 ; unqualified # 🕴 E0.7 person in suit levitating +1F574 1F3FB ; fully-qualified # 🕴🏻 E4.0 person in suit levitating: light skin tone +1F574 1F3FC ; fully-qualified # 🕴🏼 E4.0 person in suit levitating: medium-light skin tone +1F574 1F3FD ; fully-qualified # 🕴🏽 E4.0 person in suit levitating: medium skin tone +1F574 1F3FE ; fully-qualified # 🕴🏾 E4.0 person in suit levitating: medium-dark skin tone +1F574 1F3FF ; fully-qualified # 🕴🏿 E4.0 person in suit levitating: dark skin tone +1F46F ; fully-qualified # 👯 E0.6 people with bunny ears +1F46F 200D 2642 FE0F ; fully-qualified # 👯‍♂️ E4.0 men with bunny ears +1F46F 200D 2642 ; minimally-qualified # 👯‍♂ E4.0 men with bunny ears +1F46F 200D 2640 FE0F ; fully-qualified # 👯‍♀️ E4.0 women with bunny ears +1F46F 200D 2640 ; minimally-qualified # 👯‍♀ E4.0 women with bunny ears +1F9D6 ; fully-qualified # 🧖 E5.0 person in steamy room +1F9D6 1F3FB ; fully-qualified # 🧖🏻 E5.0 person in steamy room: light skin tone +1F9D6 1F3FC ; fully-qualified # 🧖🏼 E5.0 person in steamy room: medium-light skin tone +1F9D6 1F3FD ; fully-qualified # 🧖🏽 E5.0 person in steamy room: medium skin tone +1F9D6 1F3FE ; fully-qualified # 🧖🏾 E5.0 person in steamy room: medium-dark skin tone +1F9D6 1F3FF ; fully-qualified # 🧖🏿 E5.0 person in steamy room: dark skin tone +1F9D6 200D 2642 FE0F ; fully-qualified # 🧖‍♂️ E5.0 man in steamy room +1F9D6 200D 2642 ; minimally-qualified # 🧖‍♂ E5.0 man in steamy room +1F9D6 1F3FB 200D 2642 FE0F ; fully-qualified # 🧖🏻‍♂️ E5.0 man in steamy room: light skin tone +1F9D6 1F3FB 200D 2642 ; minimally-qualified # 🧖🏻‍♂ E5.0 man in steamy room: light skin tone +1F9D6 1F3FC 200D 2642 FE0F ; fully-qualified # 🧖🏼‍♂️ E5.0 man in steamy room: medium-light skin tone +1F9D6 1F3FC 200D 2642 ; minimally-qualified # 🧖🏼‍♂ E5.0 man in steamy room: medium-light skin tone +1F9D6 1F3FD 200D 2642 FE0F ; fully-qualified # 🧖🏽‍♂️ E5.0 man in steamy room: medium skin tone +1F9D6 1F3FD 200D 2642 ; minimally-qualified # 🧖🏽‍♂ E5.0 man in steamy room: medium skin tone +1F9D6 1F3FE 200D 2642 FE0F ; fully-qualified # 🧖🏾‍♂️ E5.0 man in steamy room: medium-dark skin tone +1F9D6 1F3FE 200D 2642 ; minimally-qualified # 🧖🏾‍♂ E5.0 man in steamy room: medium-dark skin tone +1F9D6 1F3FF 200D 2642 FE0F ; fully-qualified # 🧖🏿‍♂️ E5.0 man in steamy room: dark skin tone +1F9D6 1F3FF 200D 2642 ; minimally-qualified # 🧖🏿‍♂ E5.0 man in steamy room: dark skin tone +1F9D6 200D 2640 FE0F ; fully-qualified # 🧖‍♀️ E5.0 woman in steamy room +1F9D6 200D 2640 ; minimally-qualified # 🧖‍♀ E5.0 woman in steamy room +1F9D6 1F3FB 200D 2640 FE0F ; fully-qualified # 🧖🏻‍♀️ E5.0 woman in steamy room: light skin tone +1F9D6 1F3FB 200D 2640 ; minimally-qualified # 🧖🏻‍♀ E5.0 woman in steamy room: light skin tone +1F9D6 1F3FC 200D 2640 FE0F ; fully-qualified # 🧖🏼‍♀️ E5.0 woman in steamy room: medium-light skin tone +1F9D6 1F3FC 200D 2640 ; minimally-qualified # 🧖🏼‍♀ E5.0 woman in steamy room: medium-light skin tone +1F9D6 1F3FD 200D 2640 FE0F ; fully-qualified # 🧖🏽‍♀️ E5.0 woman in steamy room: medium skin tone +1F9D6 1F3FD 200D 2640 ; minimally-qualified # 🧖🏽‍♀ E5.0 woman in steamy room: medium skin tone +1F9D6 1F3FE 200D 2640 FE0F ; fully-qualified # 🧖🏾‍♀️ E5.0 woman in steamy room: medium-dark skin tone +1F9D6 1F3FE 200D 2640 ; minimally-qualified # 🧖🏾‍♀ E5.0 woman in steamy room: medium-dark skin tone +1F9D6 1F3FF 200D 2640 FE0F ; fully-qualified # 🧖🏿‍♀️ E5.0 woman in steamy room: dark skin tone +1F9D6 1F3FF 200D 2640 ; minimally-qualified # 🧖🏿‍♀ E5.0 woman in steamy room: dark skin tone +1F9D7 ; fully-qualified # 🧗 E5.0 person climbing +1F9D7 1F3FB ; fully-qualified # 🧗🏻 E5.0 person climbing: light skin tone +1F9D7 1F3FC ; fully-qualified # 🧗🏼 E5.0 person climbing: medium-light skin tone +1F9D7 1F3FD ; fully-qualified # 🧗🏽 E5.0 person climbing: medium skin tone +1F9D7 1F3FE ; fully-qualified # 🧗🏾 E5.0 person climbing: medium-dark skin tone +1F9D7 1F3FF ; fully-qualified # 🧗🏿 E5.0 person climbing: dark skin tone +1F9D7 200D 2642 FE0F ; fully-qualified # 🧗‍♂️ E5.0 man climbing +1F9D7 200D 2642 ; minimally-qualified # 🧗‍♂ E5.0 man climbing +1F9D7 1F3FB 200D 2642 FE0F ; fully-qualified # 🧗🏻‍♂️ E5.0 man climbing: light skin tone +1F9D7 1F3FB 200D 2642 ; minimally-qualified # 🧗🏻‍♂ E5.0 man climbing: light skin tone +1F9D7 1F3FC 200D 2642 FE0F ; fully-qualified # 🧗🏼‍♂️ E5.0 man climbing: medium-light skin tone +1F9D7 1F3FC 200D 2642 ; minimally-qualified # 🧗🏼‍♂ E5.0 man climbing: medium-light skin tone +1F9D7 1F3FD 200D 2642 FE0F ; fully-qualified # 🧗🏽‍♂️ E5.0 man climbing: medium skin tone +1F9D7 1F3FD 200D 2642 ; minimally-qualified # 🧗🏽‍♂ E5.0 man climbing: medium skin tone +1F9D7 1F3FE 200D 2642 FE0F ; fully-qualified # 🧗🏾‍♂️ E5.0 man climbing: medium-dark skin tone +1F9D7 1F3FE 200D 2642 ; minimally-qualified # 🧗🏾‍♂ E5.0 man climbing: medium-dark skin tone +1F9D7 1F3FF 200D 2642 FE0F ; fully-qualified # 🧗🏿‍♂️ E5.0 man climbing: dark skin tone +1F9D7 1F3FF 200D 2642 ; minimally-qualified # 🧗🏿‍♂ E5.0 man climbing: dark skin tone +1F9D7 200D 2640 FE0F ; fully-qualified # 🧗‍♀️ E5.0 woman climbing +1F9D7 200D 2640 ; minimally-qualified # 🧗‍♀ E5.0 woman climbing +1F9D7 1F3FB 200D 2640 FE0F ; fully-qualified # 🧗🏻‍♀️ E5.0 woman climbing: light skin tone +1F9D7 1F3FB 200D 2640 ; minimally-qualified # 🧗🏻‍♀ E5.0 woman climbing: light skin tone +1F9D7 1F3FC 200D 2640 FE0F ; fully-qualified # 🧗🏼‍♀️ E5.0 woman climbing: medium-light skin tone +1F9D7 1F3FC 200D 2640 ; minimally-qualified # 🧗🏼‍♀ E5.0 woman climbing: medium-light skin tone +1F9D7 1F3FD 200D 2640 FE0F ; fully-qualified # 🧗🏽‍♀️ E5.0 woman climbing: medium skin tone +1F9D7 1F3FD 200D 2640 ; minimally-qualified # 🧗🏽‍♀ E5.0 woman climbing: medium skin tone +1F9D7 1F3FE 200D 2640 FE0F ; fully-qualified # 🧗🏾‍♀️ E5.0 woman climbing: medium-dark skin tone +1F9D7 1F3FE 200D 2640 ; minimally-qualified # 🧗🏾‍♀ E5.0 woman climbing: medium-dark skin tone +1F9D7 1F3FF 200D 2640 FE0F ; fully-qualified # 🧗🏿‍♀️ E5.0 woman climbing: dark skin tone +1F9D7 1F3FF 200D 2640 ; minimally-qualified # 🧗🏿‍♀ E5.0 woman climbing: dark skin tone + +# subgroup: person-sport +1F93A ; fully-qualified # 🤺 E3.0 person fencing +1F3C7 ; fully-qualified # 🏇 E1.0 horse racing +1F3C7 1F3FB ; fully-qualified # 🏇🏻 E1.0 horse racing: light skin tone +1F3C7 1F3FC ; fully-qualified # 🏇🏼 E1.0 horse racing: medium-light skin tone +1F3C7 1F3FD ; fully-qualified # 🏇🏽 E1.0 horse racing: medium skin tone +1F3C7 1F3FE ; fully-qualified # 🏇🏾 E1.0 horse racing: medium-dark skin tone +1F3C7 1F3FF ; fully-qualified # 🏇🏿 E1.0 horse racing: dark skin tone +26F7 FE0F ; fully-qualified # ⛷️ E0.7 skier +26F7 ; unqualified # ⛷ E0.7 skier +1F3C2 ; fully-qualified # 🏂 E0.6 snowboarder +1F3C2 1F3FB ; fully-qualified # 🏂🏻 E1.0 snowboarder: light skin tone +1F3C2 1F3FC ; fully-qualified # 🏂🏼 E1.0 snowboarder: medium-light skin tone +1F3C2 1F3FD ; fully-qualified # 🏂🏽 E1.0 snowboarder: medium skin tone +1F3C2 1F3FE ; fully-qualified # 🏂🏾 E1.0 snowboarder: medium-dark skin tone +1F3C2 1F3FF ; fully-qualified # 🏂🏿 E1.0 snowboarder: dark skin tone +1F3CC FE0F ; fully-qualified # 🏌️ E0.7 person golfing +1F3CC ; unqualified # 🏌 E0.7 person golfing +1F3CC 1F3FB ; fully-qualified # 🏌🏻 E4.0 person golfing: light skin tone +1F3CC 1F3FC ; fully-qualified # 🏌🏼 E4.0 person golfing: medium-light skin tone +1F3CC 1F3FD ; fully-qualified # 🏌🏽 E4.0 person golfing: medium skin tone +1F3CC 1F3FE ; fully-qualified # 🏌🏾 E4.0 person golfing: medium-dark skin tone +1F3CC 1F3FF ; fully-qualified # 🏌🏿 E4.0 person golfing: dark skin tone +1F3CC FE0F 200D 2642 FE0F ; fully-qualified # 🏌️‍♂️ E4.0 man golfing +1F3CC 200D 2642 FE0F ; unqualified # 🏌‍♂️ E4.0 man golfing +1F3CC FE0F 200D 2642 ; minimally-qualified # 🏌️‍♂ E4.0 man golfing +1F3CC 200D 2642 ; unqualified # 🏌‍♂ E4.0 man golfing +1F3CC 1F3FB 200D 2642 FE0F ; fully-qualified # 🏌🏻‍♂️ E4.0 man golfing: light skin tone +1F3CC 1F3FB 200D 2642 ; minimally-qualified # 🏌🏻‍♂ E4.0 man golfing: light skin tone +1F3CC 1F3FC 200D 2642 FE0F ; fully-qualified # 🏌🏼‍♂️ E4.0 man golfing: medium-light skin tone +1F3CC 1F3FC 200D 2642 ; minimally-qualified # 🏌🏼‍♂ E4.0 man golfing: medium-light skin tone +1F3CC 1F3FD 200D 2642 FE0F ; fully-qualified # 🏌🏽‍♂️ E4.0 man golfing: medium skin tone +1F3CC 1F3FD 200D 2642 ; minimally-qualified # 🏌🏽‍♂ E4.0 man golfing: medium skin tone +1F3CC 1F3FE 200D 2642 FE0F ; fully-qualified # 🏌🏾‍♂️ E4.0 man golfing: medium-dark skin tone +1F3CC 1F3FE 200D 2642 ; minimally-qualified # 🏌🏾‍♂ E4.0 man golfing: medium-dark skin tone +1F3CC 1F3FF 200D 2642 FE0F ; fully-qualified # 🏌🏿‍♂️ E4.0 man golfing: dark skin tone +1F3CC 1F3FF 200D 2642 ; minimally-qualified # 🏌🏿‍♂ E4.0 man golfing: dark skin tone +1F3CC FE0F 200D 2640 FE0F ; fully-qualified # 🏌️‍♀️ E4.0 woman golfing +1F3CC 200D 2640 FE0F ; unqualified # 🏌‍♀️ E4.0 woman golfing +1F3CC FE0F 200D 2640 ; minimally-qualified # 🏌️‍♀ E4.0 woman golfing +1F3CC 200D 2640 ; unqualified # 🏌‍♀ E4.0 woman golfing +1F3CC 1F3FB 200D 2640 FE0F ; fully-qualified # 🏌🏻‍♀️ E4.0 woman golfing: light skin tone +1F3CC 1F3FB 200D 2640 ; minimally-qualified # 🏌🏻‍♀ E4.0 woman golfing: light skin tone +1F3CC 1F3FC 200D 2640 FE0F ; fully-qualified # 🏌🏼‍♀️ E4.0 woman golfing: medium-light skin tone +1F3CC 1F3FC 200D 2640 ; minimally-qualified # 🏌🏼‍♀ E4.0 woman golfing: medium-light skin tone +1F3CC 1F3FD 200D 2640 FE0F ; fully-qualified # 🏌🏽‍♀️ E4.0 woman golfing: medium skin tone +1F3CC 1F3FD 200D 2640 ; minimally-qualified # 🏌🏽‍♀ E4.0 woman golfing: medium skin tone +1F3CC 1F3FE 200D 2640 FE0F ; fully-qualified # 🏌🏾‍♀️ E4.0 woman golfing: medium-dark skin tone +1F3CC 1F3FE 200D 2640 ; minimally-qualified # 🏌🏾‍♀ E4.0 woman golfing: medium-dark skin tone +1F3CC 1F3FF 200D 2640 FE0F ; fully-qualified # 🏌🏿‍♀️ E4.0 woman golfing: dark skin tone +1F3CC 1F3FF 200D 2640 ; minimally-qualified # 🏌🏿‍♀ E4.0 woman golfing: dark skin tone +1F3C4 ; fully-qualified # 🏄 E0.6 person surfing +1F3C4 1F3FB ; fully-qualified # 🏄🏻 E1.0 person surfing: light skin tone +1F3C4 1F3FC ; fully-qualified # 🏄🏼 E1.0 person surfing: medium-light skin tone +1F3C4 1F3FD ; fully-qualified # 🏄🏽 E1.0 person surfing: medium skin tone +1F3C4 1F3FE ; fully-qualified # 🏄🏾 E1.0 person surfing: medium-dark skin tone +1F3C4 1F3FF ; fully-qualified # 🏄🏿 E1.0 person surfing: dark skin tone +1F3C4 200D 2642 FE0F ; fully-qualified # 🏄‍♂️ E4.0 man surfing +1F3C4 200D 2642 ; minimally-qualified # 🏄‍♂ E4.0 man surfing +1F3C4 1F3FB 200D 2642 FE0F ; fully-qualified # 🏄🏻‍♂️ E4.0 man surfing: light skin tone +1F3C4 1F3FB 200D 2642 ; minimally-qualified # 🏄🏻‍♂ E4.0 man surfing: light skin tone +1F3C4 1F3FC 200D 2642 FE0F ; fully-qualified # 🏄🏼‍♂️ E4.0 man surfing: medium-light skin tone +1F3C4 1F3FC 200D 2642 ; minimally-qualified # 🏄🏼‍♂ E4.0 man surfing: medium-light skin tone +1F3C4 1F3FD 200D 2642 FE0F ; fully-qualified # 🏄🏽‍♂️ E4.0 man surfing: medium skin tone +1F3C4 1F3FD 200D 2642 ; minimally-qualified # 🏄🏽‍♂ E4.0 man surfing: medium skin tone +1F3C4 1F3FE 200D 2642 FE0F ; fully-qualified # 🏄🏾‍♂️ E4.0 man surfing: medium-dark skin tone +1F3C4 1F3FE 200D 2642 ; minimally-qualified # 🏄🏾‍♂ E4.0 man surfing: medium-dark skin tone +1F3C4 1F3FF 200D 2642 FE0F ; fully-qualified # 🏄🏿‍♂️ E4.0 man surfing: dark skin tone +1F3C4 1F3FF 200D 2642 ; minimally-qualified # 🏄🏿‍♂ E4.0 man surfing: dark skin tone +1F3C4 200D 2640 FE0F ; fully-qualified # 🏄‍♀️ E4.0 woman surfing +1F3C4 200D 2640 ; minimally-qualified # 🏄‍♀ E4.0 woman surfing +1F3C4 1F3FB 200D 2640 FE0F ; fully-qualified # 🏄🏻‍♀️ E4.0 woman surfing: light skin tone +1F3C4 1F3FB 200D 2640 ; minimally-qualified # 🏄🏻‍♀ E4.0 woman surfing: light skin tone +1F3C4 1F3FC 200D 2640 FE0F ; fully-qualified # 🏄🏼‍♀️ E4.0 woman surfing: medium-light skin tone +1F3C4 1F3FC 200D 2640 ; minimally-qualified # 🏄🏼‍♀ E4.0 woman surfing: medium-light skin tone +1F3C4 1F3FD 200D 2640 FE0F ; fully-qualified # 🏄🏽‍♀️ E4.0 woman surfing: medium skin tone +1F3C4 1F3FD 200D 2640 ; minimally-qualified # 🏄🏽‍♀ E4.0 woman surfing: medium skin tone +1F3C4 1F3FE 200D 2640 FE0F ; fully-qualified # 🏄🏾‍♀️ E4.0 woman surfing: medium-dark skin tone +1F3C4 1F3FE 200D 2640 ; minimally-qualified # 🏄🏾‍♀ E4.0 woman surfing: medium-dark skin tone +1F3C4 1F3FF 200D 2640 FE0F ; fully-qualified # 🏄🏿‍♀️ E4.0 woman surfing: dark skin tone +1F3C4 1F3FF 200D 2640 ; minimally-qualified # 🏄🏿‍♀ E4.0 woman surfing: dark skin tone +1F6A3 ; fully-qualified # 🚣 E1.0 person rowing boat +1F6A3 1F3FB ; fully-qualified # 🚣🏻 E1.0 person rowing boat: light skin tone +1F6A3 1F3FC ; fully-qualified # 🚣🏼 E1.0 person rowing boat: medium-light skin tone +1F6A3 1F3FD ; fully-qualified # 🚣🏽 E1.0 person rowing boat: medium skin tone +1F6A3 1F3FE ; fully-qualified # 🚣🏾 E1.0 person rowing boat: medium-dark skin tone +1F6A3 1F3FF ; fully-qualified # 🚣🏿 E1.0 person rowing boat: dark skin tone +1F6A3 200D 2642 FE0F ; fully-qualified # 🚣‍♂️ E4.0 man rowing boat +1F6A3 200D 2642 ; minimally-qualified # 🚣‍♂ E4.0 man rowing boat +1F6A3 1F3FB 200D 2642 FE0F ; fully-qualified # 🚣🏻‍♂️ E4.0 man rowing boat: light skin tone +1F6A3 1F3FB 200D 2642 ; minimally-qualified # 🚣🏻‍♂ E4.0 man rowing boat: light skin tone +1F6A3 1F3FC 200D 2642 FE0F ; fully-qualified # 🚣🏼‍♂️ E4.0 man rowing boat: medium-light skin tone +1F6A3 1F3FC 200D 2642 ; minimally-qualified # 🚣🏼‍♂ E4.0 man rowing boat: medium-light skin tone +1F6A3 1F3FD 200D 2642 FE0F ; fully-qualified # 🚣🏽‍♂️ E4.0 man rowing boat: medium skin tone +1F6A3 1F3FD 200D 2642 ; minimally-qualified # 🚣🏽‍♂ E4.0 man rowing boat: medium skin tone +1F6A3 1F3FE 200D 2642 FE0F ; fully-qualified # 🚣🏾‍♂️ E4.0 man rowing boat: medium-dark skin tone +1F6A3 1F3FE 200D 2642 ; minimally-qualified # 🚣🏾‍♂ E4.0 man rowing boat: medium-dark skin tone +1F6A3 1F3FF 200D 2642 FE0F ; fully-qualified # 🚣🏿‍♂️ E4.0 man rowing boat: dark skin tone +1F6A3 1F3FF 200D 2642 ; minimally-qualified # 🚣🏿‍♂ E4.0 man rowing boat: dark skin tone +1F6A3 200D 2640 FE0F ; fully-qualified # 🚣‍♀️ E4.0 woman rowing boat +1F6A3 200D 2640 ; minimally-qualified # 🚣‍♀ E4.0 woman rowing boat +1F6A3 1F3FB 200D 2640 FE0F ; fully-qualified # 🚣🏻‍♀️ E4.0 woman rowing boat: light skin tone +1F6A3 1F3FB 200D 2640 ; minimally-qualified # 🚣🏻‍♀ E4.0 woman rowing boat: light skin tone +1F6A3 1F3FC 200D 2640 FE0F ; fully-qualified # 🚣🏼‍♀️ E4.0 woman rowing boat: medium-light skin tone +1F6A3 1F3FC 200D 2640 ; minimally-qualified # 🚣🏼‍♀ E4.0 woman rowing boat: medium-light skin tone +1F6A3 1F3FD 200D 2640 FE0F ; fully-qualified # 🚣🏽‍♀️ E4.0 woman rowing boat: medium skin tone +1F6A3 1F3FD 200D 2640 ; minimally-qualified # 🚣🏽‍♀ E4.0 woman rowing boat: medium skin tone +1F6A3 1F3FE 200D 2640 FE0F ; fully-qualified # 🚣🏾‍♀️ E4.0 woman rowing boat: medium-dark skin tone +1F6A3 1F3FE 200D 2640 ; minimally-qualified # 🚣🏾‍♀ E4.0 woman rowing boat: medium-dark skin tone +1F6A3 1F3FF 200D 2640 FE0F ; fully-qualified # 🚣🏿‍♀️ E4.0 woman rowing boat: dark skin tone +1F6A3 1F3FF 200D 2640 ; minimally-qualified # 🚣🏿‍♀ E4.0 woman rowing boat: dark skin tone +1F3CA ; fully-qualified # 🏊 E0.6 person swimming +1F3CA 1F3FB ; fully-qualified # 🏊🏻 E1.0 person swimming: light skin tone +1F3CA 1F3FC ; fully-qualified # 🏊🏼 E1.0 person swimming: medium-light skin tone +1F3CA 1F3FD ; fully-qualified # 🏊🏽 E1.0 person swimming: medium skin tone +1F3CA 1F3FE ; fully-qualified # 🏊🏾 E1.0 person swimming: medium-dark skin tone +1F3CA 1F3FF ; fully-qualified # 🏊🏿 E1.0 person swimming: dark skin tone +1F3CA 200D 2642 FE0F ; fully-qualified # 🏊‍♂️ E4.0 man swimming +1F3CA 200D 2642 ; minimally-qualified # 🏊‍♂ E4.0 man swimming +1F3CA 1F3FB 200D 2642 FE0F ; fully-qualified # 🏊🏻‍♂️ E4.0 man swimming: light skin tone +1F3CA 1F3FB 200D 2642 ; minimally-qualified # 🏊🏻‍♂ E4.0 man swimming: light skin tone +1F3CA 1F3FC 200D 2642 FE0F ; fully-qualified # 🏊🏼‍♂️ E4.0 man swimming: medium-light skin tone +1F3CA 1F3FC 200D 2642 ; minimally-qualified # 🏊🏼‍♂ E4.0 man swimming: medium-light skin tone +1F3CA 1F3FD 200D 2642 FE0F ; fully-qualified # 🏊🏽‍♂️ E4.0 man swimming: medium skin tone +1F3CA 1F3FD 200D 2642 ; minimally-qualified # 🏊🏽‍♂ E4.0 man swimming: medium skin tone +1F3CA 1F3FE 200D 2642 FE0F ; fully-qualified # 🏊🏾‍♂️ E4.0 man swimming: medium-dark skin tone +1F3CA 1F3FE 200D 2642 ; minimally-qualified # 🏊🏾‍♂ E4.0 man swimming: medium-dark skin tone +1F3CA 1F3FF 200D 2642 FE0F ; fully-qualified # 🏊🏿‍♂️ E4.0 man swimming: dark skin tone +1F3CA 1F3FF 200D 2642 ; minimally-qualified # 🏊🏿‍♂ E4.0 man swimming: dark skin tone +1F3CA 200D 2640 FE0F ; fully-qualified # 🏊‍♀️ E4.0 woman swimming +1F3CA 200D 2640 ; minimally-qualified # 🏊‍♀ E4.0 woman swimming +1F3CA 1F3FB 200D 2640 FE0F ; fully-qualified # 🏊🏻‍♀️ E4.0 woman swimming: light skin tone +1F3CA 1F3FB 200D 2640 ; minimally-qualified # 🏊🏻‍♀ E4.0 woman swimming: light skin tone +1F3CA 1F3FC 200D 2640 FE0F ; fully-qualified # 🏊🏼‍♀️ E4.0 woman swimming: medium-light skin tone +1F3CA 1F3FC 200D 2640 ; minimally-qualified # 🏊🏼‍♀ E4.0 woman swimming: medium-light skin tone +1F3CA 1F3FD 200D 2640 FE0F ; fully-qualified # 🏊🏽‍♀️ E4.0 woman swimming: medium skin tone +1F3CA 1F3FD 200D 2640 ; minimally-qualified # 🏊🏽‍♀ E4.0 woman swimming: medium skin tone +1F3CA 1F3FE 200D 2640 FE0F ; fully-qualified # 🏊🏾‍♀️ E4.0 woman swimming: medium-dark skin tone +1F3CA 1F3FE 200D 2640 ; minimally-qualified # 🏊🏾‍♀ E4.0 woman swimming: medium-dark skin tone +1F3CA 1F3FF 200D 2640 FE0F ; fully-qualified # 🏊🏿‍♀️ E4.0 woman swimming: dark skin tone +1F3CA 1F3FF 200D 2640 ; minimally-qualified # 🏊🏿‍♀ E4.0 woman swimming: dark skin tone +26F9 FE0F ; fully-qualified # ⛹️ E0.7 person bouncing ball +26F9 ; unqualified # ⛹ E0.7 person bouncing ball +26F9 1F3FB ; fully-qualified # ⛹🏻 E2.0 person bouncing ball: light skin tone +26F9 1F3FC ; fully-qualified # ⛹🏼 E2.0 person bouncing ball: medium-light skin tone +26F9 1F3FD ; fully-qualified # ⛹🏽 E2.0 person bouncing ball: medium skin tone +26F9 1F3FE ; fully-qualified # ⛹🏾 E2.0 person bouncing ball: medium-dark skin tone +26F9 1F3FF ; fully-qualified # ⛹🏿 E2.0 person bouncing ball: dark skin tone +26F9 FE0F 200D 2642 FE0F ; fully-qualified # ⛹️‍♂️ E4.0 man bouncing ball +26F9 200D 2642 FE0F ; unqualified # ⛹‍♂️ E4.0 man bouncing ball +26F9 FE0F 200D 2642 ; minimally-qualified # ⛹️‍♂ E4.0 man bouncing ball +26F9 200D 2642 ; unqualified # ⛹‍♂ E4.0 man bouncing ball +26F9 1F3FB 200D 2642 FE0F ; fully-qualified # ⛹🏻‍♂️ E4.0 man bouncing ball: light skin tone +26F9 1F3FB 200D 2642 ; minimally-qualified # ⛹🏻‍♂ E4.0 man bouncing ball: light skin tone +26F9 1F3FC 200D 2642 FE0F ; fully-qualified # ⛹🏼‍♂️ E4.0 man bouncing ball: medium-light skin tone +26F9 1F3FC 200D 2642 ; minimally-qualified # ⛹🏼‍♂ E4.0 man bouncing ball: medium-light skin tone +26F9 1F3FD 200D 2642 FE0F ; fully-qualified # ⛹🏽‍♂️ E4.0 man bouncing ball: medium skin tone +26F9 1F3FD 200D 2642 ; minimally-qualified # ⛹🏽‍♂ E4.0 man bouncing ball: medium skin tone +26F9 1F3FE 200D 2642 FE0F ; fully-qualified # ⛹🏾‍♂️ E4.0 man bouncing ball: medium-dark skin tone +26F9 1F3FE 200D 2642 ; minimally-qualified # ⛹🏾‍♂ E4.0 man bouncing ball: medium-dark skin tone +26F9 1F3FF 200D 2642 FE0F ; fully-qualified # ⛹🏿‍♂️ E4.0 man bouncing ball: dark skin tone +26F9 1F3FF 200D 2642 ; minimally-qualified # ⛹🏿‍♂ E4.0 man bouncing ball: dark skin tone +26F9 FE0F 200D 2640 FE0F ; fully-qualified # ⛹️‍♀️ E4.0 woman bouncing ball +26F9 200D 2640 FE0F ; unqualified # ⛹‍♀️ E4.0 woman bouncing ball +26F9 FE0F 200D 2640 ; minimally-qualified # ⛹️‍♀ E4.0 woman bouncing ball +26F9 200D 2640 ; unqualified # ⛹‍♀ E4.0 woman bouncing ball +26F9 1F3FB 200D 2640 FE0F ; fully-qualified # ⛹🏻‍♀️ E4.0 woman bouncing ball: light skin tone +26F9 1F3FB 200D 2640 ; minimally-qualified # ⛹🏻‍♀ E4.0 woman bouncing ball: light skin tone +26F9 1F3FC 200D 2640 FE0F ; fully-qualified # ⛹🏼‍♀️ E4.0 woman bouncing ball: medium-light skin tone +26F9 1F3FC 200D 2640 ; minimally-qualified # ⛹🏼‍♀ E4.0 woman bouncing ball: medium-light skin tone +26F9 1F3FD 200D 2640 FE0F ; fully-qualified # ⛹🏽‍♀️ E4.0 woman bouncing ball: medium skin tone +26F9 1F3FD 200D 2640 ; minimally-qualified # ⛹🏽‍♀ E4.0 woman bouncing ball: medium skin tone +26F9 1F3FE 200D 2640 FE0F ; fully-qualified # ⛹🏾‍♀️ E4.0 woman bouncing ball: medium-dark skin tone +26F9 1F3FE 200D 2640 ; minimally-qualified # ⛹🏾‍♀ E4.0 woman bouncing ball: medium-dark skin tone +26F9 1F3FF 200D 2640 FE0F ; fully-qualified # ⛹🏿‍♀️ E4.0 woman bouncing ball: dark skin tone +26F9 1F3FF 200D 2640 ; minimally-qualified # ⛹🏿‍♀ E4.0 woman bouncing ball: dark skin tone +1F3CB FE0F ; fully-qualified # 🏋️ E0.7 person lifting weights +1F3CB ; unqualified # 🏋 E0.7 person lifting weights +1F3CB 1F3FB ; fully-qualified # 🏋🏻 E2.0 person lifting weights: light skin tone +1F3CB 1F3FC ; fully-qualified # 🏋🏼 E2.0 person lifting weights: medium-light skin tone +1F3CB 1F3FD ; fully-qualified # 🏋🏽 E2.0 person lifting weights: medium skin tone +1F3CB 1F3FE ; fully-qualified # 🏋🏾 E2.0 person lifting weights: medium-dark skin tone +1F3CB 1F3FF ; fully-qualified # 🏋🏿 E2.0 person lifting weights: dark skin tone +1F3CB FE0F 200D 2642 FE0F ; fully-qualified # 🏋️‍♂️ E4.0 man lifting weights +1F3CB 200D 2642 FE0F ; unqualified # 🏋‍♂️ E4.0 man lifting weights +1F3CB FE0F 200D 2642 ; minimally-qualified # 🏋️‍♂ E4.0 man lifting weights +1F3CB 200D 2642 ; unqualified # 🏋‍♂ E4.0 man lifting weights +1F3CB 1F3FB 200D 2642 FE0F ; fully-qualified # 🏋🏻‍♂️ E4.0 man lifting weights: light skin tone +1F3CB 1F3FB 200D 2642 ; minimally-qualified # 🏋🏻‍♂ E4.0 man lifting weights: light skin tone +1F3CB 1F3FC 200D 2642 FE0F ; fully-qualified # 🏋🏼‍♂️ E4.0 man lifting weights: medium-light skin tone +1F3CB 1F3FC 200D 2642 ; minimally-qualified # 🏋🏼‍♂ E4.0 man lifting weights: medium-light skin tone +1F3CB 1F3FD 200D 2642 FE0F ; fully-qualified # 🏋🏽‍♂️ E4.0 man lifting weights: medium skin tone +1F3CB 1F3FD 200D 2642 ; minimally-qualified # 🏋🏽‍♂ E4.0 man lifting weights: medium skin tone +1F3CB 1F3FE 200D 2642 FE0F ; fully-qualified # 🏋🏾‍♂️ E4.0 man lifting weights: medium-dark skin tone +1F3CB 1F3FE 200D 2642 ; minimally-qualified # 🏋🏾‍♂ E4.0 man lifting weights: medium-dark skin tone +1F3CB 1F3FF 200D 2642 FE0F ; fully-qualified # 🏋🏿‍♂️ E4.0 man lifting weights: dark skin tone +1F3CB 1F3FF 200D 2642 ; minimally-qualified # 🏋🏿‍♂ E4.0 man lifting weights: dark skin tone +1F3CB FE0F 200D 2640 FE0F ; fully-qualified # 🏋️‍♀️ E4.0 woman lifting weights +1F3CB 200D 2640 FE0F ; unqualified # 🏋‍♀️ E4.0 woman lifting weights +1F3CB FE0F 200D 2640 ; minimally-qualified # 🏋️‍♀ E4.0 woman lifting weights +1F3CB 200D 2640 ; unqualified # 🏋‍♀ E4.0 woman lifting weights +1F3CB 1F3FB 200D 2640 FE0F ; fully-qualified # 🏋🏻‍♀️ E4.0 woman lifting weights: light skin tone +1F3CB 1F3FB 200D 2640 ; minimally-qualified # 🏋🏻‍♀ E4.0 woman lifting weights: light skin tone +1F3CB 1F3FC 200D 2640 FE0F ; fully-qualified # 🏋🏼‍♀️ E4.0 woman lifting weights: medium-light skin tone +1F3CB 1F3FC 200D 2640 ; minimally-qualified # 🏋🏼‍♀ E4.0 woman lifting weights: medium-light skin tone +1F3CB 1F3FD 200D 2640 FE0F ; fully-qualified # 🏋🏽‍♀️ E4.0 woman lifting weights: medium skin tone +1F3CB 1F3FD 200D 2640 ; minimally-qualified # 🏋🏽‍♀ E4.0 woman lifting weights: medium skin tone +1F3CB 1F3FE 200D 2640 FE0F ; fully-qualified # 🏋🏾‍♀️ E4.0 woman lifting weights: medium-dark skin tone +1F3CB 1F3FE 200D 2640 ; minimally-qualified # 🏋🏾‍♀ E4.0 woman lifting weights: medium-dark skin tone +1F3CB 1F3FF 200D 2640 FE0F ; fully-qualified # 🏋🏿‍♀️ E4.0 woman lifting weights: dark skin tone +1F3CB 1F3FF 200D 2640 ; minimally-qualified # 🏋🏿‍♀ E4.0 woman lifting weights: dark skin tone +1F6B4 ; fully-qualified # 🚴 E1.0 person biking +1F6B4 1F3FB ; fully-qualified # 🚴🏻 E1.0 person biking: light skin tone +1F6B4 1F3FC ; fully-qualified # 🚴🏼 E1.0 person biking: medium-light skin tone +1F6B4 1F3FD ; fully-qualified # 🚴🏽 E1.0 person biking: medium skin tone +1F6B4 1F3FE ; fully-qualified # 🚴🏾 E1.0 person biking: medium-dark skin tone +1F6B4 1F3FF ; fully-qualified # 🚴🏿 E1.0 person biking: dark skin tone +1F6B4 200D 2642 FE0F ; fully-qualified # 🚴‍♂️ E4.0 man biking +1F6B4 200D 2642 ; minimally-qualified # 🚴‍♂ E4.0 man biking +1F6B4 1F3FB 200D 2642 FE0F ; fully-qualified # 🚴🏻‍♂️ E4.0 man biking: light skin tone +1F6B4 1F3FB 200D 2642 ; minimally-qualified # 🚴🏻‍♂ E4.0 man biking: light skin tone +1F6B4 1F3FC 200D 2642 FE0F ; fully-qualified # 🚴🏼‍♂️ E4.0 man biking: medium-light skin tone +1F6B4 1F3FC 200D 2642 ; minimally-qualified # 🚴🏼‍♂ E4.0 man biking: medium-light skin tone +1F6B4 1F3FD 200D 2642 FE0F ; fully-qualified # 🚴🏽‍♂️ E4.0 man biking: medium skin tone +1F6B4 1F3FD 200D 2642 ; minimally-qualified # 🚴🏽‍♂ E4.0 man biking: medium skin tone +1F6B4 1F3FE 200D 2642 FE0F ; fully-qualified # 🚴🏾‍♂️ E4.0 man biking: medium-dark skin tone +1F6B4 1F3FE 200D 2642 ; minimally-qualified # 🚴🏾‍♂ E4.0 man biking: medium-dark skin tone +1F6B4 1F3FF 200D 2642 FE0F ; fully-qualified # 🚴🏿‍♂️ E4.0 man biking: dark skin tone +1F6B4 1F3FF 200D 2642 ; minimally-qualified # 🚴🏿‍♂ E4.0 man biking: dark skin tone +1F6B4 200D 2640 FE0F ; fully-qualified # 🚴‍♀️ E4.0 woman biking +1F6B4 200D 2640 ; minimally-qualified # 🚴‍♀ E4.0 woman biking +1F6B4 1F3FB 200D 2640 FE0F ; fully-qualified # 🚴🏻‍♀️ E4.0 woman biking: light skin tone +1F6B4 1F3FB 200D 2640 ; minimally-qualified # 🚴🏻‍♀ E4.0 woman biking: light skin tone +1F6B4 1F3FC 200D 2640 FE0F ; fully-qualified # 🚴🏼‍♀️ E4.0 woman biking: medium-light skin tone +1F6B4 1F3FC 200D 2640 ; minimally-qualified # 🚴🏼‍♀ E4.0 woman biking: medium-light skin tone +1F6B4 1F3FD 200D 2640 FE0F ; fully-qualified # 🚴🏽‍♀️ E4.0 woman biking: medium skin tone +1F6B4 1F3FD 200D 2640 ; minimally-qualified # 🚴🏽‍♀ E4.0 woman biking: medium skin tone +1F6B4 1F3FE 200D 2640 FE0F ; fully-qualified # 🚴🏾‍♀️ E4.0 woman biking: medium-dark skin tone +1F6B4 1F3FE 200D 2640 ; minimally-qualified # 🚴🏾‍♀ E4.0 woman biking: medium-dark skin tone +1F6B4 1F3FF 200D 2640 FE0F ; fully-qualified # 🚴🏿‍♀️ E4.0 woman biking: dark skin tone +1F6B4 1F3FF 200D 2640 ; minimally-qualified # 🚴🏿‍♀ E4.0 woman biking: dark skin tone +1F6B5 ; fully-qualified # 🚵 E1.0 person mountain biking +1F6B5 1F3FB ; fully-qualified # 🚵🏻 E1.0 person mountain biking: light skin tone +1F6B5 1F3FC ; fully-qualified # 🚵🏼 E1.0 person mountain biking: medium-light skin tone +1F6B5 1F3FD ; fully-qualified # 🚵🏽 E1.0 person mountain biking: medium skin tone +1F6B5 1F3FE ; fully-qualified # 🚵🏾 E1.0 person mountain biking: medium-dark skin tone +1F6B5 1F3FF ; fully-qualified # 🚵🏿 E1.0 person mountain biking: dark skin tone +1F6B5 200D 2642 FE0F ; fully-qualified # 🚵‍♂️ E4.0 man mountain biking +1F6B5 200D 2642 ; minimally-qualified # 🚵‍♂ E4.0 man mountain biking +1F6B5 1F3FB 200D 2642 FE0F ; fully-qualified # 🚵🏻‍♂️ E4.0 man mountain biking: light skin tone +1F6B5 1F3FB 200D 2642 ; minimally-qualified # 🚵🏻‍♂ E4.0 man mountain biking: light skin tone +1F6B5 1F3FC 200D 2642 FE0F ; fully-qualified # 🚵🏼‍♂️ E4.0 man mountain biking: medium-light skin tone +1F6B5 1F3FC 200D 2642 ; minimally-qualified # 🚵🏼‍♂ E4.0 man mountain biking: medium-light skin tone +1F6B5 1F3FD 200D 2642 FE0F ; fully-qualified # 🚵🏽‍♂️ E4.0 man mountain biking: medium skin tone +1F6B5 1F3FD 200D 2642 ; minimally-qualified # 🚵🏽‍♂ E4.0 man mountain biking: medium skin tone +1F6B5 1F3FE 200D 2642 FE0F ; fully-qualified # 🚵🏾‍♂️ E4.0 man mountain biking: medium-dark skin tone +1F6B5 1F3FE 200D 2642 ; minimally-qualified # 🚵🏾‍♂ E4.0 man mountain biking: medium-dark skin tone +1F6B5 1F3FF 200D 2642 FE0F ; fully-qualified # 🚵🏿‍♂️ E4.0 man mountain biking: dark skin tone +1F6B5 1F3FF 200D 2642 ; minimally-qualified # 🚵🏿‍♂ E4.0 man mountain biking: dark skin tone +1F6B5 200D 2640 FE0F ; fully-qualified # 🚵‍♀️ E4.0 woman mountain biking +1F6B5 200D 2640 ; minimally-qualified # 🚵‍♀ E4.0 woman mountain biking +1F6B5 1F3FB 200D 2640 FE0F ; fully-qualified # 🚵🏻‍♀️ E4.0 woman mountain biking: light skin tone +1F6B5 1F3FB 200D 2640 ; minimally-qualified # 🚵🏻‍♀ E4.0 woman mountain biking: light skin tone +1F6B5 1F3FC 200D 2640 FE0F ; fully-qualified # 🚵🏼‍♀️ E4.0 woman mountain biking: medium-light skin tone +1F6B5 1F3FC 200D 2640 ; minimally-qualified # 🚵🏼‍♀ E4.0 woman mountain biking: medium-light skin tone +1F6B5 1F3FD 200D 2640 FE0F ; fully-qualified # 🚵🏽‍♀️ E4.0 woman mountain biking: medium skin tone +1F6B5 1F3FD 200D 2640 ; minimally-qualified # 🚵🏽‍♀ E4.0 woman mountain biking: medium skin tone +1F6B5 1F3FE 200D 2640 FE0F ; fully-qualified # 🚵🏾‍♀️ E4.0 woman mountain biking: medium-dark skin tone +1F6B5 1F3FE 200D 2640 ; minimally-qualified # 🚵🏾‍♀ E4.0 woman mountain biking: medium-dark skin tone +1F6B5 1F3FF 200D 2640 FE0F ; fully-qualified # 🚵🏿‍♀️ E4.0 woman mountain biking: dark skin tone +1F6B5 1F3FF 200D 2640 ; minimally-qualified # 🚵🏿‍♀ E4.0 woman mountain biking: dark skin tone +1F938 ; fully-qualified # 🤸 E3.0 person cartwheeling +1F938 1F3FB ; fully-qualified # 🤸🏻 E3.0 person cartwheeling: light skin tone +1F938 1F3FC ; fully-qualified # 🤸🏼 E3.0 person cartwheeling: medium-light skin tone +1F938 1F3FD ; fully-qualified # 🤸🏽 E3.0 person cartwheeling: medium skin tone +1F938 1F3FE ; fully-qualified # 🤸🏾 E3.0 person cartwheeling: medium-dark skin tone +1F938 1F3FF ; fully-qualified # 🤸🏿 E3.0 person cartwheeling: dark skin tone +1F938 200D 2642 FE0F ; fully-qualified # 🤸‍♂️ E4.0 man cartwheeling +1F938 200D 2642 ; minimally-qualified # 🤸‍♂ E4.0 man cartwheeling +1F938 1F3FB 200D 2642 FE0F ; fully-qualified # 🤸🏻‍♂️ E4.0 man cartwheeling: light skin tone +1F938 1F3FB 200D 2642 ; minimally-qualified # 🤸🏻‍♂ E4.0 man cartwheeling: light skin tone +1F938 1F3FC 200D 2642 FE0F ; fully-qualified # 🤸🏼‍♂️ E4.0 man cartwheeling: medium-light skin tone +1F938 1F3FC 200D 2642 ; minimally-qualified # 🤸🏼‍♂ E4.0 man cartwheeling: medium-light skin tone +1F938 1F3FD 200D 2642 FE0F ; fully-qualified # 🤸🏽‍♂️ E4.0 man cartwheeling: medium skin tone +1F938 1F3FD 200D 2642 ; minimally-qualified # 🤸🏽‍♂ E4.0 man cartwheeling: medium skin tone +1F938 1F3FE 200D 2642 FE0F ; fully-qualified # 🤸🏾‍♂️ E4.0 man cartwheeling: medium-dark skin tone +1F938 1F3FE 200D 2642 ; minimally-qualified # 🤸🏾‍♂ E4.0 man cartwheeling: medium-dark skin tone +1F938 1F3FF 200D 2642 FE0F ; fully-qualified # 🤸🏿‍♂️ E4.0 man cartwheeling: dark skin tone +1F938 1F3FF 200D 2642 ; minimally-qualified # 🤸🏿‍♂ E4.0 man cartwheeling: dark skin tone +1F938 200D 2640 FE0F ; fully-qualified # 🤸‍♀️ E4.0 woman cartwheeling +1F938 200D 2640 ; minimally-qualified # 🤸‍♀ E4.0 woman cartwheeling +1F938 1F3FB 200D 2640 FE0F ; fully-qualified # 🤸🏻‍♀️ E4.0 woman cartwheeling: light skin tone +1F938 1F3FB 200D 2640 ; minimally-qualified # 🤸🏻‍♀ E4.0 woman cartwheeling: light skin tone +1F938 1F3FC 200D 2640 FE0F ; fully-qualified # 🤸🏼‍♀️ E4.0 woman cartwheeling: medium-light skin tone +1F938 1F3FC 200D 2640 ; minimally-qualified # 🤸🏼‍♀ E4.0 woman cartwheeling: medium-light skin tone +1F938 1F3FD 200D 2640 FE0F ; fully-qualified # 🤸🏽‍♀️ E4.0 woman cartwheeling: medium skin tone +1F938 1F3FD 200D 2640 ; minimally-qualified # 🤸🏽‍♀ E4.0 woman cartwheeling: medium skin tone +1F938 1F3FE 200D 2640 FE0F ; fully-qualified # 🤸🏾‍♀️ E4.0 woman cartwheeling: medium-dark skin tone +1F938 1F3FE 200D 2640 ; minimally-qualified # 🤸🏾‍♀ E4.0 woman cartwheeling: medium-dark skin tone +1F938 1F3FF 200D 2640 FE0F ; fully-qualified # 🤸🏿‍♀️ E4.0 woman cartwheeling: dark skin tone +1F938 1F3FF 200D 2640 ; minimally-qualified # 🤸🏿‍♀ E4.0 woman cartwheeling: dark skin tone +1F93C ; fully-qualified # 🤼 E3.0 people wrestling +1F93C 200D 2642 FE0F ; fully-qualified # 🤼‍♂️ E4.0 men wrestling +1F93C 200D 2642 ; minimally-qualified # 🤼‍♂ E4.0 men wrestling +1F93C 200D 2640 FE0F ; fully-qualified # 🤼‍♀️ E4.0 women wrestling +1F93C 200D 2640 ; minimally-qualified # 🤼‍♀ E4.0 women wrestling +1F93D ; fully-qualified # 🤽 E3.0 person playing water polo +1F93D 1F3FB ; fully-qualified # 🤽🏻 E3.0 person playing water polo: light skin tone +1F93D 1F3FC ; fully-qualified # 🤽🏼 E3.0 person playing water polo: medium-light skin tone +1F93D 1F3FD ; fully-qualified # 🤽🏽 E3.0 person playing water polo: medium skin tone +1F93D 1F3FE ; fully-qualified # 🤽🏾 E3.0 person playing water polo: medium-dark skin tone +1F93D 1F3FF ; fully-qualified # 🤽🏿 E3.0 person playing water polo: dark skin tone +1F93D 200D 2642 FE0F ; fully-qualified # 🤽‍♂️ E4.0 man playing water polo +1F93D 200D 2642 ; minimally-qualified # 🤽‍♂ E4.0 man playing water polo +1F93D 1F3FB 200D 2642 FE0F ; fully-qualified # 🤽🏻‍♂️ E4.0 man playing water polo: light skin tone +1F93D 1F3FB 200D 2642 ; minimally-qualified # 🤽🏻‍♂ E4.0 man playing water polo: light skin tone +1F93D 1F3FC 200D 2642 FE0F ; fully-qualified # 🤽🏼‍♂️ E4.0 man playing water polo: medium-light skin tone +1F93D 1F3FC 200D 2642 ; minimally-qualified # 🤽🏼‍♂ E4.0 man playing water polo: medium-light skin tone +1F93D 1F3FD 200D 2642 FE0F ; fully-qualified # 🤽🏽‍♂️ E4.0 man playing water polo: medium skin tone +1F93D 1F3FD 200D 2642 ; minimally-qualified # 🤽🏽‍♂ E4.0 man playing water polo: medium skin tone +1F93D 1F3FE 200D 2642 FE0F ; fully-qualified # 🤽🏾‍♂️ E4.0 man playing water polo: medium-dark skin tone +1F93D 1F3FE 200D 2642 ; minimally-qualified # 🤽🏾‍♂ E4.0 man playing water polo: medium-dark skin tone +1F93D 1F3FF 200D 2642 FE0F ; fully-qualified # 🤽🏿‍♂️ E4.0 man playing water polo: dark skin tone +1F93D 1F3FF 200D 2642 ; minimally-qualified # 🤽🏿‍♂ E4.0 man playing water polo: dark skin tone +1F93D 200D 2640 FE0F ; fully-qualified # 🤽‍♀️ E4.0 woman playing water polo +1F93D 200D 2640 ; minimally-qualified # 🤽‍♀ E4.0 woman playing water polo +1F93D 1F3FB 200D 2640 FE0F ; fully-qualified # 🤽🏻‍♀️ E4.0 woman playing water polo: light skin tone +1F93D 1F3FB 200D 2640 ; minimally-qualified # 🤽🏻‍♀ E4.0 woman playing water polo: light skin tone +1F93D 1F3FC 200D 2640 FE0F ; fully-qualified # 🤽🏼‍♀️ E4.0 woman playing water polo: medium-light skin tone +1F93D 1F3FC 200D 2640 ; minimally-qualified # 🤽🏼‍♀ E4.0 woman playing water polo: medium-light skin tone +1F93D 1F3FD 200D 2640 FE0F ; fully-qualified # 🤽🏽‍♀️ E4.0 woman playing water polo: medium skin tone +1F93D 1F3FD 200D 2640 ; minimally-qualified # 🤽🏽‍♀ E4.0 woman playing water polo: medium skin tone +1F93D 1F3FE 200D 2640 FE0F ; fully-qualified # 🤽🏾‍♀️ E4.0 woman playing water polo: medium-dark skin tone +1F93D 1F3FE 200D 2640 ; minimally-qualified # 🤽🏾‍♀ E4.0 woman playing water polo: medium-dark skin tone +1F93D 1F3FF 200D 2640 FE0F ; fully-qualified # 🤽🏿‍♀️ E4.0 woman playing water polo: dark skin tone +1F93D 1F3FF 200D 2640 ; minimally-qualified # 🤽🏿‍♀ E4.0 woman playing water polo: dark skin tone +1F93E ; fully-qualified # 🤾 E3.0 person playing handball +1F93E 1F3FB ; fully-qualified # 🤾🏻 E3.0 person playing handball: light skin tone +1F93E 1F3FC ; fully-qualified # 🤾🏼 E3.0 person playing handball: medium-light skin tone +1F93E 1F3FD ; fully-qualified # 🤾🏽 E3.0 person playing handball: medium skin tone +1F93E 1F3FE ; fully-qualified # 🤾🏾 E3.0 person playing handball: medium-dark skin tone +1F93E 1F3FF ; fully-qualified # 🤾🏿 E3.0 person playing handball: dark skin tone +1F93E 200D 2642 FE0F ; fully-qualified # 🤾‍♂️ E4.0 man playing handball +1F93E 200D 2642 ; minimally-qualified # 🤾‍♂ E4.0 man playing handball +1F93E 1F3FB 200D 2642 FE0F ; fully-qualified # 🤾🏻‍♂️ E4.0 man playing handball: light skin tone +1F93E 1F3FB 200D 2642 ; minimally-qualified # 🤾🏻‍♂ E4.0 man playing handball: light skin tone +1F93E 1F3FC 200D 2642 FE0F ; fully-qualified # 🤾🏼‍♂️ E4.0 man playing handball: medium-light skin tone +1F93E 1F3FC 200D 2642 ; minimally-qualified # 🤾🏼‍♂ E4.0 man playing handball: medium-light skin tone +1F93E 1F3FD 200D 2642 FE0F ; fully-qualified # 🤾🏽‍♂️ E4.0 man playing handball: medium skin tone +1F93E 1F3FD 200D 2642 ; minimally-qualified # 🤾🏽‍♂ E4.0 man playing handball: medium skin tone +1F93E 1F3FE 200D 2642 FE0F ; fully-qualified # 🤾🏾‍♂️ E4.0 man playing handball: medium-dark skin tone +1F93E 1F3FE 200D 2642 ; minimally-qualified # 🤾🏾‍♂ E4.0 man playing handball: medium-dark skin tone +1F93E 1F3FF 200D 2642 FE0F ; fully-qualified # 🤾🏿‍♂️ E4.0 man playing handball: dark skin tone +1F93E 1F3FF 200D 2642 ; minimally-qualified # 🤾🏿‍♂ E4.0 man playing handball: dark skin tone +1F93E 200D 2640 FE0F ; fully-qualified # 🤾‍♀️ E4.0 woman playing handball +1F93E 200D 2640 ; minimally-qualified # 🤾‍♀ E4.0 woman playing handball +1F93E 1F3FB 200D 2640 FE0F ; fully-qualified # 🤾🏻‍♀️ E4.0 woman playing handball: light skin tone +1F93E 1F3FB 200D 2640 ; minimally-qualified # 🤾🏻‍♀ E4.0 woman playing handball: light skin tone +1F93E 1F3FC 200D 2640 FE0F ; fully-qualified # 🤾🏼‍♀️ E4.0 woman playing handball: medium-light skin tone +1F93E 1F3FC 200D 2640 ; minimally-qualified # 🤾🏼‍♀ E4.0 woman playing handball: medium-light skin tone +1F93E 1F3FD 200D 2640 FE0F ; fully-qualified # 🤾🏽‍♀️ E4.0 woman playing handball: medium skin tone +1F93E 1F3FD 200D 2640 ; minimally-qualified # 🤾🏽‍♀ E4.0 woman playing handball: medium skin tone +1F93E 1F3FE 200D 2640 FE0F ; fully-qualified # 🤾🏾‍♀️ E4.0 woman playing handball: medium-dark skin tone +1F93E 1F3FE 200D 2640 ; minimally-qualified # 🤾🏾‍♀ E4.0 woman playing handball: medium-dark skin tone +1F93E 1F3FF 200D 2640 FE0F ; fully-qualified # 🤾🏿‍♀️ E4.0 woman playing handball: dark skin tone +1F93E 1F3FF 200D 2640 ; minimally-qualified # 🤾🏿‍♀ E4.0 woman playing handball: dark skin tone +1F939 ; fully-qualified # 🤹 E3.0 person juggling +1F939 1F3FB ; fully-qualified # 🤹🏻 E3.0 person juggling: light skin tone +1F939 1F3FC ; fully-qualified # 🤹🏼 E3.0 person juggling: medium-light skin tone +1F939 1F3FD ; fully-qualified # 🤹🏽 E3.0 person juggling: medium skin tone +1F939 1F3FE ; fully-qualified # 🤹🏾 E3.0 person juggling: medium-dark skin tone +1F939 1F3FF ; fully-qualified # 🤹🏿 E3.0 person juggling: dark skin tone +1F939 200D 2642 FE0F ; fully-qualified # 🤹‍♂️ E4.0 man juggling +1F939 200D 2642 ; minimally-qualified # 🤹‍♂ E4.0 man juggling +1F939 1F3FB 200D 2642 FE0F ; fully-qualified # 🤹🏻‍♂️ E4.0 man juggling: light skin tone +1F939 1F3FB 200D 2642 ; minimally-qualified # 🤹🏻‍♂ E4.0 man juggling: light skin tone +1F939 1F3FC 200D 2642 FE0F ; fully-qualified # 🤹🏼‍♂️ E4.0 man juggling: medium-light skin tone +1F939 1F3FC 200D 2642 ; minimally-qualified # 🤹🏼‍♂ E4.0 man juggling: medium-light skin tone +1F939 1F3FD 200D 2642 FE0F ; fully-qualified # 🤹🏽‍♂️ E4.0 man juggling: medium skin tone +1F939 1F3FD 200D 2642 ; minimally-qualified # 🤹🏽‍♂ E4.0 man juggling: medium skin tone +1F939 1F3FE 200D 2642 FE0F ; fully-qualified # 🤹🏾‍♂️ E4.0 man juggling: medium-dark skin tone +1F939 1F3FE 200D 2642 ; minimally-qualified # 🤹🏾‍♂ E4.0 man juggling: medium-dark skin tone +1F939 1F3FF 200D 2642 FE0F ; fully-qualified # 🤹🏿‍♂️ E4.0 man juggling: dark skin tone +1F939 1F3FF 200D 2642 ; minimally-qualified # 🤹🏿‍♂ E4.0 man juggling: dark skin tone +1F939 200D 2640 FE0F ; fully-qualified # 🤹‍♀️ E4.0 woman juggling +1F939 200D 2640 ; minimally-qualified # 🤹‍♀ E4.0 woman juggling +1F939 1F3FB 200D 2640 FE0F ; fully-qualified # 🤹🏻‍♀️ E4.0 woman juggling: light skin tone +1F939 1F3FB 200D 2640 ; minimally-qualified # 🤹🏻‍♀ E4.0 woman juggling: light skin tone +1F939 1F3FC 200D 2640 FE0F ; fully-qualified # 🤹🏼‍♀️ E4.0 woman juggling: medium-light skin tone +1F939 1F3FC 200D 2640 ; minimally-qualified # 🤹🏼‍♀ E4.0 woman juggling: medium-light skin tone +1F939 1F3FD 200D 2640 FE0F ; fully-qualified # 🤹🏽‍♀️ E4.0 woman juggling: medium skin tone +1F939 1F3FD 200D 2640 ; minimally-qualified # 🤹🏽‍♀ E4.0 woman juggling: medium skin tone +1F939 1F3FE 200D 2640 FE0F ; fully-qualified # 🤹🏾‍♀️ E4.0 woman juggling: medium-dark skin tone +1F939 1F3FE 200D 2640 ; minimally-qualified # 🤹🏾‍♀ E4.0 woman juggling: medium-dark skin tone +1F939 1F3FF 200D 2640 FE0F ; fully-qualified # 🤹🏿‍♀️ E4.0 woman juggling: dark skin tone +1F939 1F3FF 200D 2640 ; minimally-qualified # 🤹🏿‍♀ E4.0 woman juggling: dark skin tone + +# subgroup: person-resting +1F9D8 ; fully-qualified # 🧘 E5.0 person in lotus position +1F9D8 1F3FB ; fully-qualified # 🧘🏻 E5.0 person in lotus position: light skin tone +1F9D8 1F3FC ; fully-qualified # 🧘🏼 E5.0 person in lotus position: medium-light skin tone +1F9D8 1F3FD ; fully-qualified # 🧘🏽 E5.0 person in lotus position: medium skin tone +1F9D8 1F3FE ; fully-qualified # 🧘🏾 E5.0 person in lotus position: medium-dark skin tone +1F9D8 1F3FF ; fully-qualified # 🧘🏿 E5.0 person in lotus position: dark skin tone +1F9D8 200D 2642 FE0F ; fully-qualified # 🧘‍♂️ E5.0 man in lotus position +1F9D8 200D 2642 ; minimally-qualified # 🧘‍♂ E5.0 man in lotus position +1F9D8 1F3FB 200D 2642 FE0F ; fully-qualified # 🧘🏻‍♂️ E5.0 man in lotus position: light skin tone +1F9D8 1F3FB 200D 2642 ; minimally-qualified # 🧘🏻‍♂ E5.0 man in lotus position: light skin tone +1F9D8 1F3FC 200D 2642 FE0F ; fully-qualified # 🧘🏼‍♂️ E5.0 man in lotus position: medium-light skin tone +1F9D8 1F3FC 200D 2642 ; minimally-qualified # 🧘🏼‍♂ E5.0 man in lotus position: medium-light skin tone +1F9D8 1F3FD 200D 2642 FE0F ; fully-qualified # 🧘🏽‍♂️ E5.0 man in lotus position: medium skin tone +1F9D8 1F3FD 200D 2642 ; minimally-qualified # 🧘🏽‍♂ E5.0 man in lotus position: medium skin tone +1F9D8 1F3FE 200D 2642 FE0F ; fully-qualified # 🧘🏾‍♂️ E5.0 man in lotus position: medium-dark skin tone +1F9D8 1F3FE 200D 2642 ; minimally-qualified # 🧘🏾‍♂ E5.0 man in lotus position: medium-dark skin tone +1F9D8 1F3FF 200D 2642 FE0F ; fully-qualified # 🧘🏿‍♂️ E5.0 man in lotus position: dark skin tone +1F9D8 1F3FF 200D 2642 ; minimally-qualified # 🧘🏿‍♂ E5.0 man in lotus position: dark skin tone +1F9D8 200D 2640 FE0F ; fully-qualified # 🧘‍♀️ E5.0 woman in lotus position +1F9D8 200D 2640 ; minimally-qualified # 🧘‍♀ E5.0 woman in lotus position +1F9D8 1F3FB 200D 2640 FE0F ; fully-qualified # 🧘🏻‍♀️ E5.0 woman in lotus position: light skin tone +1F9D8 1F3FB 200D 2640 ; minimally-qualified # 🧘🏻‍♀ E5.0 woman in lotus position: light skin tone +1F9D8 1F3FC 200D 2640 FE0F ; fully-qualified # 🧘🏼‍♀️ E5.0 woman in lotus position: medium-light skin tone +1F9D8 1F3FC 200D 2640 ; minimally-qualified # 🧘🏼‍♀ E5.0 woman in lotus position: medium-light skin tone +1F9D8 1F3FD 200D 2640 FE0F ; fully-qualified # 🧘🏽‍♀️ E5.0 woman in lotus position: medium skin tone +1F9D8 1F3FD 200D 2640 ; minimally-qualified # 🧘🏽‍♀ E5.0 woman in lotus position: medium skin tone +1F9D8 1F3FE 200D 2640 FE0F ; fully-qualified # 🧘🏾‍♀️ E5.0 woman in lotus position: medium-dark skin tone +1F9D8 1F3FE 200D 2640 ; minimally-qualified # 🧘🏾‍♀ E5.0 woman in lotus position: medium-dark skin tone +1F9D8 1F3FF 200D 2640 FE0F ; fully-qualified # 🧘🏿‍♀️ E5.0 woman in lotus position: dark skin tone +1F9D8 1F3FF 200D 2640 ; minimally-qualified # 🧘🏿‍♀ E5.0 woman in lotus position: dark skin tone +1F6C0 ; fully-qualified # 🛀 E0.6 person taking bath +1F6C0 1F3FB ; fully-qualified # 🛀🏻 E1.0 person taking bath: light skin tone +1F6C0 1F3FC ; fully-qualified # 🛀🏼 E1.0 person taking bath: medium-light skin tone +1F6C0 1F3FD ; fully-qualified # 🛀🏽 E1.0 person taking bath: medium skin tone +1F6C0 1F3FE ; fully-qualified # 🛀🏾 E1.0 person taking bath: medium-dark skin tone +1F6C0 1F3FF ; fully-qualified # 🛀🏿 E1.0 person taking bath: dark skin tone +1F6CC ; fully-qualified # 🛌 E1.0 person in bed +1F6CC 1F3FB ; fully-qualified # 🛌🏻 E4.0 person in bed: light skin tone +1F6CC 1F3FC ; fully-qualified # 🛌🏼 E4.0 person in bed: medium-light skin tone +1F6CC 1F3FD ; fully-qualified # 🛌🏽 E4.0 person in bed: medium skin tone +1F6CC 1F3FE ; fully-qualified # 🛌🏾 E4.0 person in bed: medium-dark skin tone +1F6CC 1F3FF ; fully-qualified # 🛌🏿 E4.0 person in bed: dark skin tone + +# subgroup: family +1F9D1 200D 1F91D 200D 1F9D1 ; fully-qualified # 🧑‍🤝‍🧑 E12.0 people holding hands +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏻‍🤝‍🧑🏻 E12.0 people holding hands: light skin tone +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻‍🤝‍🧑🏼 E12.1 people holding hands: light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻‍🤝‍🧑🏽 E12.1 people holding hands: light skin tone, medium skin tone +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻‍🤝‍🧑🏾 E12.1 people holding hands: light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻‍🤝‍🧑🏿 E12.1 people holding hands: light skin tone, dark skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼‍🤝‍🧑🏻 E12.0 people holding hands: medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏼‍🤝‍🧑🏼 E12.0 people holding hands: medium-light skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼‍🤝‍🧑🏽 E12.1 people holding hands: medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼‍🤝‍🧑🏾 E12.1 people holding hands: medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼‍🤝‍🧑🏿 E12.1 people holding hands: medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽‍🤝‍🧑🏻 E12.0 people holding hands: medium skin tone, light skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽‍🤝‍🧑🏼 E12.0 people holding hands: medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏽‍🤝‍🧑🏽 E12.0 people holding hands: medium skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽‍🤝‍🧑🏾 E12.1 people holding hands: medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽‍🤝‍🧑🏿 E12.1 people holding hands: medium skin tone, dark skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾‍🤝‍🧑🏻 E12.0 people holding hands: medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾‍🤝‍🧑🏼 E12.0 people holding hands: medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾‍🤝‍🧑🏽 E12.0 people holding hands: medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏾‍🤝‍🧑🏾 E12.0 people holding hands: medium-dark skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾‍🤝‍🧑🏿 E12.1 people holding hands: medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿‍🤝‍🧑🏻 E12.0 people holding hands: dark skin tone, light skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿‍🤝‍🧑🏼 E12.0 people holding hands: dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿‍🤝‍🧑🏽 E12.0 people holding hands: dark skin tone, medium skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿‍🤝‍🧑🏾 E12.0 people holding hands: dark skin tone, medium-dark skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏿‍🤝‍🧑🏿 E12.0 people holding hands: dark skin tone +1F46D ; fully-qualified # 👭 E1.0 women holding hands +1F46D 1F3FB ; fully-qualified # 👭🏻 E12.0 women holding hands: light skin tone +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC ; fully-qualified # 👩🏻‍🤝‍👩🏼 E12.1 women holding hands: light skin tone, medium-light skin tone +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD ; fully-qualified # 👩🏻‍🤝‍👩🏽 E12.1 women holding hands: light skin tone, medium skin tone +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE ; fully-qualified # 👩🏻‍🤝‍👩🏾 E12.1 women holding hands: light skin tone, medium-dark skin tone +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF ; fully-qualified # 👩🏻‍🤝‍👩🏿 E12.1 women holding hands: light skin tone, dark skin tone +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB ; fully-qualified # 👩🏼‍🤝‍👩🏻 E12.0 women holding hands: medium-light skin tone, light skin tone +1F46D 1F3FC ; fully-qualified # 👭🏼 E12.0 women holding hands: medium-light skin tone +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD ; fully-qualified # 👩🏼‍🤝‍👩🏽 E12.1 women holding hands: medium-light skin tone, medium skin tone +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE ; fully-qualified # 👩🏼‍🤝‍👩🏾 E12.1 women holding hands: medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF ; fully-qualified # 👩🏼‍🤝‍👩🏿 E12.1 women holding hands: medium-light skin tone, dark skin tone +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB ; fully-qualified # 👩🏽‍🤝‍👩🏻 E12.0 women holding hands: medium skin tone, light skin tone +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC ; fully-qualified # 👩🏽‍🤝‍👩🏼 E12.0 women holding hands: medium skin tone, medium-light skin tone +1F46D 1F3FD ; fully-qualified # 👭🏽 E12.0 women holding hands: medium skin tone +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE ; fully-qualified # 👩🏽‍🤝‍👩🏾 E12.1 women holding hands: medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF ; fully-qualified # 👩🏽‍🤝‍👩🏿 E12.1 women holding hands: medium skin tone, dark skin tone +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB ; fully-qualified # 👩🏾‍🤝‍👩🏻 E12.0 women holding hands: medium-dark skin tone, light skin tone +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC ; fully-qualified # 👩🏾‍🤝‍👩🏼 E12.0 women holding hands: medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD ; fully-qualified # 👩🏾‍🤝‍👩🏽 E12.0 women holding hands: medium-dark skin tone, medium skin tone +1F46D 1F3FE ; fully-qualified # 👭🏾 E12.0 women holding hands: medium-dark skin tone +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF ; fully-qualified # 👩🏾‍🤝‍👩🏿 E12.1 women holding hands: medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB ; fully-qualified # 👩🏿‍🤝‍👩🏻 E12.0 women holding hands: dark skin tone, light skin tone +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC ; fully-qualified # 👩🏿‍🤝‍👩🏼 E12.0 women holding hands: dark skin tone, medium-light skin tone +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD ; fully-qualified # 👩🏿‍🤝‍👩🏽 E12.0 women holding hands: dark skin tone, medium skin tone +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE ; fully-qualified # 👩🏿‍🤝‍👩🏾 E12.0 women holding hands: dark skin tone, medium-dark skin tone +1F46D 1F3FF ; fully-qualified # 👭🏿 E12.0 women holding hands: dark skin tone +1F46B ; fully-qualified # 👫 E0.6 woman and man holding hands +1F46B 1F3FB ; fully-qualified # 👫🏻 E12.0 woman and man holding hands: light skin tone +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👩🏻‍🤝‍👨🏼 E12.0 woman and man holding hands: light skin tone, medium-light skin tone +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👩🏻‍🤝‍👨🏽 E12.0 woman and man holding hands: light skin tone, medium skin tone +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👩🏻‍🤝‍👨🏾 E12.0 woman and man holding hands: light skin tone, medium-dark skin tone +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👩🏻‍🤝‍👨🏿 E12.0 woman and man holding hands: light skin tone, dark skin tone +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👩🏼‍🤝‍👨🏻 E12.0 woman and man holding hands: medium-light skin tone, light skin tone +1F46B 1F3FC ; fully-qualified # 👫🏼 E12.0 woman and man holding hands: medium-light skin tone +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👩🏼‍🤝‍👨🏽 E12.0 woman and man holding hands: medium-light skin tone, medium skin tone +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👩🏼‍🤝‍👨🏾 E12.0 woman and man holding hands: medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👩🏼‍🤝‍👨🏿 E12.0 woman and man holding hands: medium-light skin tone, dark skin tone +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👩🏽‍🤝‍👨🏻 E12.0 woman and man holding hands: medium skin tone, light skin tone +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👩🏽‍🤝‍👨🏼 E12.0 woman and man holding hands: medium skin tone, medium-light skin tone +1F46B 1F3FD ; fully-qualified # 👫🏽 E12.0 woman and man holding hands: medium skin tone +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👩🏽‍🤝‍👨🏾 E12.0 woman and man holding hands: medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👩🏽‍🤝‍👨🏿 E12.0 woman and man holding hands: medium skin tone, dark skin tone +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👩🏾‍🤝‍👨🏻 E12.0 woman and man holding hands: medium-dark skin tone, light skin tone +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👩🏾‍🤝‍👨🏼 E12.0 woman and man holding hands: medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👩🏾‍🤝‍👨🏽 E12.0 woman and man holding hands: medium-dark skin tone, medium skin tone +1F46B 1F3FE ; fully-qualified # 👫🏾 E12.0 woman and man holding hands: medium-dark skin tone +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👩🏾‍🤝‍👨🏿 E12.0 woman and man holding hands: medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👩🏿‍🤝‍👨🏻 E12.0 woman and man holding hands: dark skin tone, light skin tone +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👩🏿‍🤝‍👨🏼 E12.0 woman and man holding hands: dark skin tone, medium-light skin tone +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👩🏿‍🤝‍👨🏽 E12.0 woman and man holding hands: dark skin tone, medium skin tone +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👩🏿‍🤝‍👨🏾 E12.0 woman and man holding hands: dark skin tone, medium-dark skin tone +1F46B 1F3FF ; fully-qualified # 👫🏿 E12.0 woman and man holding hands: dark skin tone +1F46C ; fully-qualified # 👬 E1.0 men holding hands +1F46C 1F3FB ; fully-qualified # 👬🏻 E12.0 men holding hands: light skin tone +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👨🏻‍🤝‍👨🏼 E12.1 men holding hands: light skin tone, medium-light skin tone +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👨🏻‍🤝‍👨🏽 E12.1 men holding hands: light skin tone, medium skin tone +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👨🏻‍🤝‍👨🏾 E12.1 men holding hands: light skin tone, medium-dark skin tone +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👨🏻‍🤝‍👨🏿 E12.1 men holding hands: light skin tone, dark skin tone +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👨🏼‍🤝‍👨🏻 E12.0 men holding hands: medium-light skin tone, light skin tone +1F46C 1F3FC ; fully-qualified # 👬🏼 E12.0 men holding hands: medium-light skin tone +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👨🏼‍🤝‍👨🏽 E12.1 men holding hands: medium-light skin tone, medium skin tone +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👨🏼‍🤝‍👨🏾 E12.1 men holding hands: medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👨🏼‍🤝‍👨🏿 E12.1 men holding hands: medium-light skin tone, dark skin tone +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👨🏽‍🤝‍👨🏻 E12.0 men holding hands: medium skin tone, light skin tone +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👨🏽‍🤝‍👨🏼 E12.0 men holding hands: medium skin tone, medium-light skin tone +1F46C 1F3FD ; fully-qualified # 👬🏽 E12.0 men holding hands: medium skin tone +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👨🏽‍🤝‍👨🏾 E12.1 men holding hands: medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👨🏽‍🤝‍👨🏿 E12.1 men holding hands: medium skin tone, dark skin tone +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👨🏾‍🤝‍👨🏻 E12.0 men holding hands: medium-dark skin tone, light skin tone +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👨🏾‍🤝‍👨🏼 E12.0 men holding hands: medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👨🏾‍🤝‍👨🏽 E12.0 men holding hands: medium-dark skin tone, medium skin tone +1F46C 1F3FE ; fully-qualified # 👬🏾 E12.0 men holding hands: medium-dark skin tone +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👨🏾‍🤝‍👨🏿 E12.1 men holding hands: medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👨🏿‍🤝‍👨🏻 E12.0 men holding hands: dark skin tone, light skin tone +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👨🏿‍🤝‍👨🏼 E12.0 men holding hands: dark skin tone, medium-light skin tone +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👨🏿‍🤝‍👨🏽 E12.0 men holding hands: dark skin tone, medium skin tone +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👨🏿‍🤝‍👨🏾 E12.0 men holding hands: dark skin tone, medium-dark skin tone +1F46C 1F3FF ; fully-qualified # 👬🏿 E12.0 men holding hands: dark skin tone +1F48F ; fully-qualified # 💏 E0.6 kiss +1F48F 1F3FB ; fully-qualified # 💏🏻 E13.1 kiss: light skin tone +1F48F 1F3FC ; fully-qualified # 💏🏼 E13.1 kiss: medium-light skin tone +1F48F 1F3FD ; fully-qualified # 💏🏽 E13.1 kiss: medium skin tone +1F48F 1F3FE ; fully-qualified # 💏🏾 E13.1 kiss: medium-dark skin tone +1F48F 1F3FF ; fully-qualified # 💏🏿 E13.1 kiss: dark skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, light skin tone, medium skin tone +1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, light skin tone, medium skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, light skin tone, dark skin tone +1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, light skin tone, dark skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, medium-light skin tone, dark skin tone +1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, medium skin tone, light skin tone +1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, medium skin tone, light skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, medium skin tone, dark skin tone +1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, medium skin tone, dark skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, medium-dark skin tone, dark skin tone +1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, dark skin tone, light skin tone +1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, dark skin tone, light skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, dark skin tone, medium skin tone +1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, dark skin tone, medium skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, dark skin tone, medium-dark skin tone +1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, dark skin tone, medium-dark skin tone +1F469 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # 👩‍❤️‍💋‍👨 E2.0 kiss: woman, man +1F469 200D 2764 200D 1F48B 200D 1F468 ; minimally-qualified # 👩‍❤‍💋‍👨 E2.0 kiss: woman, man +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, light skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, light skin tone, dark skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, light skin tone, dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, medium-light skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, medium-light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, medium-light skin tone, dark skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, medium-light skin tone, dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, medium skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, medium skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, medium skin tone, dark skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, medium skin tone, dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, medium-dark skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, medium-dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, medium-dark skin tone, dark skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, dark skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, dark skin tone +1F468 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # 👨‍❤️‍💋‍👨 E2.0 kiss: man, man +1F468 200D 2764 200D 1F48B 200D 1F468 ; minimally-qualified # 👨‍❤‍💋‍👨 E2.0 kiss: man, man +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, light skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏻 E13.1 kiss: man, man, light skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, light skin tone, medium-light skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏼 E13.1 kiss: man, man, light skin tone, medium-light skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, light skin tone, medium skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏽 E13.1 kiss: man, man, light skin tone, medium skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, light skin tone, medium-dark skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏾 E13.1 kiss: man, man, light skin tone, medium-dark skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, light skin tone, dark skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏿 E13.1 kiss: man, man, light skin tone, dark skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, medium-light skin tone, light skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏻 E13.1 kiss: man, man, medium-light skin tone, light skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, medium-light skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏼 E13.1 kiss: man, man, medium-light skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, medium-light skin tone, medium skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏽 E13.1 kiss: man, man, medium-light skin tone, medium skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏾 E13.1 kiss: man, man, medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, medium-light skin tone, dark skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏿 E13.1 kiss: man, man, medium-light skin tone, dark skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, medium skin tone, light skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏻 E13.1 kiss: man, man, medium skin tone, light skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, medium skin tone, medium-light skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏼 E13.1 kiss: man, man, medium skin tone, medium-light skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, medium skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏽 E13.1 kiss: man, man, medium skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏾 E13.1 kiss: man, man, medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, medium skin tone, dark skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏿 E13.1 kiss: man, man, medium skin tone, dark skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, medium-dark skin tone, light skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏻 E13.1 kiss: man, man, medium-dark skin tone, light skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏼 E13.1 kiss: man, man, medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏽 E13.1 kiss: man, man, medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, medium-dark skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏾 E13.1 kiss: man, man, medium-dark skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, medium-dark skin tone, dark skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏿 E13.1 kiss: man, man, medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, dark skin tone, light skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏻 E13.1 kiss: man, man, dark skin tone, light skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, dark skin tone, medium-light skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏼 E13.1 kiss: man, man, dark skin tone, medium-light skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, dark skin tone, medium skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏽 E13.1 kiss: man, man, dark skin tone, medium skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, dark skin tone, medium-dark skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏾 E13.1 kiss: man, man, dark skin tone, medium-dark skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, dark skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏿 E13.1 kiss: man, man, dark skin tone +1F469 200D 2764 FE0F 200D 1F48B 200D 1F469 ; fully-qualified # 👩‍❤️‍💋‍👩 E2.0 kiss: woman, woman +1F469 200D 2764 200D 1F48B 200D 1F469 ; minimally-qualified # 👩‍❤‍💋‍👩 E2.0 kiss: woman, woman +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, light skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, light skin tone, dark skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, light skin tone, dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-light skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-light skin tone, dark skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-light skin tone, dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, medium skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, medium skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, medium skin tone, dark skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, medium skin tone, dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-dark skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-dark skin tone, dark skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, dark skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, dark skin tone +1F491 ; fully-qualified # 💑 E0.6 couple with heart +1F491 1F3FB ; fully-qualified # 💑🏻 E13.1 couple with heart: light skin tone +1F491 1F3FC ; fully-qualified # 💑🏼 E13.1 couple with heart: medium-light skin tone +1F491 1F3FD ; fully-qualified # 💑🏽 E13.1 couple with heart: medium skin tone +1F491 1F3FE ; fully-qualified # 💑🏾 E13.1 couple with heart: medium-dark skin tone +1F491 1F3FF ; fully-qualified # 💑🏿 E13.1 couple with heart: dark skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻‍❤️‍🧑🏼 E13.1 couple with heart: person, person, light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏻‍❤‍🧑🏼 E13.1 couple with heart: person, person, light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻‍❤️‍🧑🏽 E13.1 couple with heart: person, person, light skin tone, medium skin tone +1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏻‍❤‍🧑🏽 E13.1 couple with heart: person, person, light skin tone, medium skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻‍❤️‍🧑🏾 E13.1 couple with heart: person, person, light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏻‍❤‍🧑🏾 E13.1 couple with heart: person, person, light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻‍❤️‍🧑🏿 E13.1 couple with heart: person, person, light skin tone, dark skin tone +1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏻‍❤‍🧑🏿 E13.1 couple with heart: person, person, light skin tone, dark skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼‍❤️‍🧑🏻 E13.1 couple with heart: person, person, medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏼‍❤‍🧑🏻 E13.1 couple with heart: person, person, medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼‍❤️‍🧑🏽 E13.1 couple with heart: person, person, medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏼‍❤‍🧑🏽 E13.1 couple with heart: person, person, medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼‍❤️‍🧑🏾 E13.1 couple with heart: person, person, medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏼‍❤‍🧑🏾 E13.1 couple with heart: person, person, medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼‍❤️‍🧑🏿 E13.1 couple with heart: person, person, medium-light skin tone, dark skin tone +1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏼‍❤‍🧑🏿 E13.1 couple with heart: person, person, medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽‍❤️‍🧑🏻 E13.1 couple with heart: person, person, medium skin tone, light skin tone +1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏽‍❤‍🧑🏻 E13.1 couple with heart: person, person, medium skin tone, light skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽‍❤️‍🧑🏼 E13.1 couple with heart: person, person, medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏽‍❤‍🧑🏼 E13.1 couple with heart: person, person, medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽‍❤️‍🧑🏾 E13.1 couple with heart: person, person, medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏽‍❤‍🧑🏾 E13.1 couple with heart: person, person, medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽‍❤️‍🧑🏿 E13.1 couple with heart: person, person, medium skin tone, dark skin tone +1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏽‍❤‍🧑🏿 E13.1 couple with heart: person, person, medium skin tone, dark skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾‍❤️‍🧑🏻 E13.1 couple with heart: person, person, medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏾‍❤‍🧑🏻 E13.1 couple with heart: person, person, medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾‍❤️‍🧑🏼 E13.1 couple with heart: person, person, medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏾‍❤‍🧑🏼 E13.1 couple with heart: person, person, medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾‍❤️‍🧑🏽 E13.1 couple with heart: person, person, medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏾‍❤‍🧑🏽 E13.1 couple with heart: person, person, medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾‍❤️‍🧑🏿 E13.1 couple with heart: person, person, medium-dark skin tone, dark skin tone +1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏾‍❤‍🧑🏿 E13.1 couple with heart: person, person, medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿‍❤️‍🧑🏻 E13.1 couple with heart: person, person, dark skin tone, light skin tone +1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏿‍❤‍🧑🏻 E13.1 couple with heart: person, person, dark skin tone, light skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿‍❤️‍🧑🏼 E13.1 couple with heart: person, person, dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏿‍❤‍🧑🏼 E13.1 couple with heart: person, person, dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿‍❤️‍🧑🏽 E13.1 couple with heart: person, person, dark skin tone, medium skin tone +1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏿‍❤‍🧑🏽 E13.1 couple with heart: person, person, dark skin tone, medium skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿‍❤️‍🧑🏾 E13.1 couple with heart: person, person, dark skin tone, medium-dark skin tone +1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏿‍❤‍🧑🏾 E13.1 couple with heart: person, person, dark skin tone, medium-dark skin tone +1F469 200D 2764 FE0F 200D 1F468 ; fully-qualified # 👩‍❤️‍👨 E2.0 couple with heart: woman, man +1F469 200D 2764 200D 1F468 ; minimally-qualified # 👩‍❤‍👨 E2.0 couple with heart: woman, man +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏻‍❤️‍👨🏻 E13.1 couple with heart: woman, man, light skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏻‍❤‍👨🏻 E13.1 couple with heart: woman, man, light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏻‍❤️‍👨🏼 E13.1 couple with heart: woman, man, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏻‍❤‍👨🏼 E13.1 couple with heart: woman, man, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏻‍❤️‍👨🏽 E13.1 couple with heart: woman, man, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏻‍❤‍👨🏽 E13.1 couple with heart: woman, man, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏻‍❤️‍👨🏾 E13.1 couple with heart: woman, man, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏻‍❤‍👨🏾 E13.1 couple with heart: woman, man, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏻‍❤️‍👨🏿 E13.1 couple with heart: woman, man, light skin tone, dark skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏻‍❤‍👨🏿 E13.1 couple with heart: woman, man, light skin tone, dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏼‍❤️‍👨🏻 E13.1 couple with heart: woman, man, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏼‍❤‍👨🏻 E13.1 couple with heart: woman, man, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏼‍❤️‍👨🏼 E13.1 couple with heart: woman, man, medium-light skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏼‍❤‍👨🏼 E13.1 couple with heart: woman, man, medium-light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏼‍❤️‍👨🏽 E13.1 couple with heart: woman, man, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏼‍❤‍👨🏽 E13.1 couple with heart: woman, man, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏼‍❤️‍👨🏾 E13.1 couple with heart: woman, man, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏼‍❤‍👨🏾 E13.1 couple with heart: woman, man, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏼‍❤️‍👨🏿 E13.1 couple with heart: woman, man, medium-light skin tone, dark skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏼‍❤‍👨🏿 E13.1 couple with heart: woman, man, medium-light skin tone, dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏽‍❤️‍👨🏻 E13.1 couple with heart: woman, man, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏽‍❤‍👨🏻 E13.1 couple with heart: woman, man, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏽‍❤️‍👨🏼 E13.1 couple with heart: woman, man, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏽‍❤‍👨🏼 E13.1 couple with heart: woman, man, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏽‍❤️‍👨🏽 E13.1 couple with heart: woman, man, medium skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏽‍❤‍👨🏽 E13.1 couple with heart: woman, man, medium skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏽‍❤️‍👨🏾 E13.1 couple with heart: woman, man, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏽‍❤‍👨🏾 E13.1 couple with heart: woman, man, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏽‍❤️‍👨🏿 E13.1 couple with heart: woman, man, medium skin tone, dark skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏽‍❤‍👨🏿 E13.1 couple with heart: woman, man, medium skin tone, dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏾‍❤️‍👨🏻 E13.1 couple with heart: woman, man, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏾‍❤‍👨🏻 E13.1 couple with heart: woman, man, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏾‍❤️‍👨🏼 E13.1 couple with heart: woman, man, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏾‍❤‍👨🏼 E13.1 couple with heart: woman, man, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏾‍❤️‍👨🏽 E13.1 couple with heart: woman, man, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏾‍❤‍👨🏽 E13.1 couple with heart: woman, man, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏾‍❤️‍👨🏾 E13.1 couple with heart: woman, man, medium-dark skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏾‍❤‍👨🏾 E13.1 couple with heart: woman, man, medium-dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏾‍❤️‍👨🏿 E13.1 couple with heart: woman, man, medium-dark skin tone, dark skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏾‍❤‍👨🏿 E13.1 couple with heart: woman, man, medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏿‍❤️‍👨🏻 E13.1 couple with heart: woman, man, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏿‍❤‍👨🏻 E13.1 couple with heart: woman, man, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏿‍❤️‍👨🏼 E13.1 couple with heart: woman, man, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏿‍❤‍👨🏼 E13.1 couple with heart: woman, man, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏿‍❤️‍👨🏽 E13.1 couple with heart: woman, man, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏿‍❤‍👨🏽 E13.1 couple with heart: woman, man, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏿‍❤️‍👨🏾 E13.1 couple with heart: woman, man, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏿‍❤‍👨🏾 E13.1 couple with heart: woman, man, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏿‍❤️‍👨🏿 E13.1 couple with heart: woman, man, dark skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏿‍❤‍👨🏿 E13.1 couple with heart: woman, man, dark skin tone +1F468 200D 2764 FE0F 200D 1F468 ; fully-qualified # 👨‍❤️‍👨 E2.0 couple with heart: man, man +1F468 200D 2764 200D 1F468 ; minimally-qualified # 👨‍❤‍👨 E2.0 couple with heart: man, man +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏻‍❤️‍👨🏻 E13.1 couple with heart: man, man, light skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏻‍❤‍👨🏻 E13.1 couple with heart: man, man, light skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏻‍❤️‍👨🏼 E13.1 couple with heart: man, man, light skin tone, medium-light skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏻‍❤‍👨🏼 E13.1 couple with heart: man, man, light skin tone, medium-light skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏻‍❤️‍👨🏽 E13.1 couple with heart: man, man, light skin tone, medium skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏻‍❤‍👨🏽 E13.1 couple with heart: man, man, light skin tone, medium skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏻‍❤️‍👨🏾 E13.1 couple with heart: man, man, light skin tone, medium-dark skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏻‍❤‍👨🏾 E13.1 couple with heart: man, man, light skin tone, medium-dark skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏻‍❤️‍👨🏿 E13.1 couple with heart: man, man, light skin tone, dark skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏻‍❤‍👨🏿 E13.1 couple with heart: man, man, light skin tone, dark skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏼‍❤️‍👨🏻 E13.1 couple with heart: man, man, medium-light skin tone, light skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏼‍❤‍👨🏻 E13.1 couple with heart: man, man, medium-light skin tone, light skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏼‍❤️‍👨🏼 E13.1 couple with heart: man, man, medium-light skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏼‍❤‍👨🏼 E13.1 couple with heart: man, man, medium-light skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏼‍❤️‍👨🏽 E13.1 couple with heart: man, man, medium-light skin tone, medium skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏼‍❤‍👨🏽 E13.1 couple with heart: man, man, medium-light skin tone, medium skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏼‍❤️‍👨🏾 E13.1 couple with heart: man, man, medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏼‍❤‍👨🏾 E13.1 couple with heart: man, man, medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏼‍❤️‍👨🏿 E13.1 couple with heart: man, man, medium-light skin tone, dark skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏼‍❤‍👨🏿 E13.1 couple with heart: man, man, medium-light skin tone, dark skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏽‍❤️‍👨🏻 E13.1 couple with heart: man, man, medium skin tone, light skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏽‍❤‍👨🏻 E13.1 couple with heart: man, man, medium skin tone, light skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏽‍❤️‍👨🏼 E13.1 couple with heart: man, man, medium skin tone, medium-light skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏽‍❤‍👨🏼 E13.1 couple with heart: man, man, medium skin tone, medium-light skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏽‍❤️‍👨🏽 E13.1 couple with heart: man, man, medium skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏽‍❤‍👨🏽 E13.1 couple with heart: man, man, medium skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏽‍❤️‍👨🏾 E13.1 couple with heart: man, man, medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏽‍❤‍👨🏾 E13.1 couple with heart: man, man, medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏽‍❤️‍👨🏿 E13.1 couple with heart: man, man, medium skin tone, dark skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏽‍❤‍👨🏿 E13.1 couple with heart: man, man, medium skin tone, dark skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏾‍❤️‍👨🏻 E13.1 couple with heart: man, man, medium-dark skin tone, light skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏾‍❤‍👨🏻 E13.1 couple with heart: man, man, medium-dark skin tone, light skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏾‍❤️‍👨🏼 E13.1 couple with heart: man, man, medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏾‍❤‍👨🏼 E13.1 couple with heart: man, man, medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏾‍❤️‍👨🏽 E13.1 couple with heart: man, man, medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏾‍❤‍👨🏽 E13.1 couple with heart: man, man, medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏾‍❤️‍👨🏾 E13.1 couple with heart: man, man, medium-dark skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏾‍❤‍👨🏾 E13.1 couple with heart: man, man, medium-dark skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏾‍❤️‍👨🏿 E13.1 couple with heart: man, man, medium-dark skin tone, dark skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏾‍❤‍👨🏿 E13.1 couple with heart: man, man, medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏿‍❤️‍👨🏻 E13.1 couple with heart: man, man, dark skin tone, light skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏿‍❤‍👨🏻 E13.1 couple with heart: man, man, dark skin tone, light skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏿‍❤️‍👨🏼 E13.1 couple with heart: man, man, dark skin tone, medium-light skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏿‍❤‍👨🏼 E13.1 couple with heart: man, man, dark skin tone, medium-light skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏿‍❤️‍👨🏽 E13.1 couple with heart: man, man, dark skin tone, medium skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏿‍❤‍👨🏽 E13.1 couple with heart: man, man, dark skin tone, medium skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏿‍❤️‍👨🏾 E13.1 couple with heart: man, man, dark skin tone, medium-dark skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏿‍❤‍👨🏾 E13.1 couple with heart: man, man, dark skin tone, medium-dark skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏿‍❤️‍👨🏿 E13.1 couple with heart: man, man, dark skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏿‍❤‍👨🏿 E13.1 couple with heart: man, man, dark skin tone +1F469 200D 2764 FE0F 200D 1F469 ; fully-qualified # 👩‍❤️‍👩 E2.0 couple with heart: woman, woman +1F469 200D 2764 200D 1F469 ; minimally-qualified # 👩‍❤‍👩 E2.0 couple with heart: woman, woman +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏻‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, light skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏻‍❤‍👩🏻 E13.1 couple with heart: woman, woman, light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏻‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏻‍❤‍👩🏼 E13.1 couple with heart: woman, woman, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏻‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏻‍❤‍👩🏽 E13.1 couple with heart: woman, woman, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏻‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏻‍❤‍👩🏾 E13.1 couple with heart: woman, woman, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏻‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, light skin tone, dark skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏻‍❤‍👩🏿 E13.1 couple with heart: woman, woman, light skin tone, dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏼‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏼‍❤‍👩🏻 E13.1 couple with heart: woman, woman, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏼‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, medium-light skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏼‍❤‍👩🏼 E13.1 couple with heart: woman, woman, medium-light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏼‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏼‍❤‍👩🏽 E13.1 couple with heart: woman, woman, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏼‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏼‍❤‍👩🏾 E13.1 couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏼‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, medium-light skin tone, dark skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏼‍❤‍👩🏿 E13.1 couple with heart: woman, woman, medium-light skin tone, dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏽‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏽‍❤‍👩🏻 E13.1 couple with heart: woman, woman, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏽‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏽‍❤‍👩🏼 E13.1 couple with heart: woman, woman, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏽‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, medium skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏽‍❤‍👩🏽 E13.1 couple with heart: woman, woman, medium skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏽‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏽‍❤‍👩🏾 E13.1 couple with heart: woman, woman, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏽‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, medium skin tone, dark skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏽‍❤‍👩🏿 E13.1 couple with heart: woman, woman, medium skin tone, dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏾‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏾‍❤‍👩🏻 E13.1 couple with heart: woman, woman, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏾‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏾‍❤‍👩🏼 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏾‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏾‍❤‍👩🏽 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏾‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, medium-dark skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏾‍❤‍👩🏾 E13.1 couple with heart: woman, woman, medium-dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏾‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, medium-dark skin tone, dark skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏾‍❤‍👩🏿 E13.1 couple with heart: woman, woman, medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏿‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏿‍❤‍👩🏻 E13.1 couple with heart: woman, woman, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏿‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏿‍❤‍👩🏼 E13.1 couple with heart: woman, woman, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏿‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏿‍❤‍👩🏽 E13.1 couple with heart: woman, woman, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏿‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏿‍❤‍👩🏾 E13.1 couple with heart: woman, woman, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏿‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, dark skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏿‍❤‍👩🏿 E13.1 couple with heart: woman, woman, dark skin tone +1F46A ; fully-qualified # 👪 E0.6 family +1F468 200D 1F469 200D 1F466 ; fully-qualified # 👨‍👩‍👦 E2.0 family: man, woman, boy +1F468 200D 1F469 200D 1F467 ; fully-qualified # 👨‍👩‍👧 E2.0 family: man, woman, girl +1F468 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👩‍👧‍👦 E2.0 family: man, woman, girl, boy +1F468 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👩‍👦‍👦 E2.0 family: man, woman, boy, boy +1F468 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👩‍👧‍👧 E2.0 family: man, woman, girl, girl +1F468 200D 1F468 200D 1F466 ; fully-qualified # 👨‍👨‍👦 E2.0 family: man, man, boy +1F468 200D 1F468 200D 1F467 ; fully-qualified # 👨‍👨‍👧 E2.0 family: man, man, girl +1F468 200D 1F468 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👨‍👧‍👦 E2.0 family: man, man, girl, boy +1F468 200D 1F468 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👨‍👦‍👦 E2.0 family: man, man, boy, boy +1F468 200D 1F468 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👨‍👧‍👧 E2.0 family: man, man, girl, girl +1F469 200D 1F469 200D 1F466 ; fully-qualified # 👩‍👩‍👦 E2.0 family: woman, woman, boy +1F469 200D 1F469 200D 1F467 ; fully-qualified # 👩‍👩‍👧 E2.0 family: woman, woman, girl +1F469 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👩‍👩‍👧‍👦 E2.0 family: woman, woman, girl, boy +1F469 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # 👩‍👩‍👦‍👦 E2.0 family: woman, woman, boy, boy +1F469 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # 👩‍👩‍👧‍👧 E2.0 family: woman, woman, girl, girl +1F468 200D 1F466 ; fully-qualified # 👨‍👦 E4.0 family: man, boy +1F468 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👦‍👦 E4.0 family: man, boy, boy +1F468 200D 1F467 ; fully-qualified # 👨‍👧 E4.0 family: man, girl +1F468 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👧‍👦 E4.0 family: man, girl, boy +1F468 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👧‍👧 E4.0 family: man, girl, girl +1F469 200D 1F466 ; fully-qualified # 👩‍👦 E4.0 family: woman, boy +1F469 200D 1F466 200D 1F466 ; fully-qualified # 👩‍👦‍👦 E4.0 family: woman, boy, boy +1F469 200D 1F467 ; fully-qualified # 👩‍👧 E4.0 family: woman, girl +1F469 200D 1F467 200D 1F466 ; fully-qualified # 👩‍👧‍👦 E4.0 family: woman, girl, boy +1F469 200D 1F467 200D 1F467 ; fully-qualified # 👩‍👧‍👧 E4.0 family: woman, girl, girl + +# subgroup: person-symbol +1F5E3 FE0F ; fully-qualified # 🗣️ E0.7 speaking head +1F5E3 ; unqualified # 🗣 E0.7 speaking head +1F464 ; fully-qualified # 👤 E0.6 bust in silhouette +1F465 ; fully-qualified # 👥 E1.0 busts in silhouette +1FAC2 ; fully-qualified # 🫂 E13.0 people hugging +1F463 ; fully-qualified # 👣 E0.6 footprints + +# People & Body subtotal: 2998 +# People & Body subtotal: 508 w/o modifiers + +# group: Component + +# subgroup: skin-tone +1F3FB ; component # 🏻 E1.0 light skin tone +1F3FC ; component # 🏼 E1.0 medium-light skin tone +1F3FD ; component # 🏽 E1.0 medium skin tone +1F3FE ; component # 🏾 E1.0 medium-dark skin tone +1F3FF ; component # 🏿 E1.0 dark skin tone + +# subgroup: hair-style +1F9B0 ; component # 🦰 E11.0 red hair +1F9B1 ; component # 🦱 E11.0 curly hair +1F9B3 ; component # 🦳 E11.0 white hair +1F9B2 ; component # 🦲 E11.0 bald + +# Component subtotal: 9 +# Component subtotal: 4 w/o modifiers + +# group: Animals & Nature + +# subgroup: animal-mammal +1F435 ; fully-qualified # 🐵 E0.6 monkey face +1F412 ; fully-qualified # 🐒 E0.6 monkey +1F98D ; fully-qualified # 🦍 E3.0 gorilla +1F9A7 ; fully-qualified # 🦧 E12.0 orangutan +1F436 ; fully-qualified # 🐶 E0.6 dog face +1F415 ; fully-qualified # 🐕 E0.7 dog +1F9AE ; fully-qualified # 🦮 E12.0 guide dog +1F415 200D 1F9BA ; fully-qualified # 🐕‍🦺 E12.0 service dog +1F429 ; fully-qualified # 🐩 E0.6 poodle +1F43A ; fully-qualified # 🐺 E0.6 wolf +1F98A ; fully-qualified # 🦊 E3.0 fox +1F99D ; fully-qualified # 🦝 E11.0 raccoon +1F431 ; fully-qualified # 🐱 E0.6 cat face +1F408 ; fully-qualified # 🐈 E0.7 cat +1F408 200D 2B1B ; fully-qualified # 🐈‍⬛ E13.0 black cat +1F981 ; fully-qualified # 🦁 E1.0 lion +1F42F ; fully-qualified # 🐯 E0.6 tiger face +1F405 ; fully-qualified # 🐅 E1.0 tiger +1F406 ; fully-qualified # 🐆 E1.0 leopard +1F434 ; fully-qualified # 🐴 E0.6 horse face +1FACE ; fully-qualified # 🫎 E15.0 moose +1FACF ; fully-qualified # 🫏 E15.0 donkey +1F40E ; fully-qualified # 🐎 E0.6 horse +1F984 ; fully-qualified # 🦄 E1.0 unicorn +1F993 ; fully-qualified # 🦓 E5.0 zebra +1F98C ; fully-qualified # 🦌 E3.0 deer +1F9AC ; fully-qualified # 🦬 E13.0 bison +1F42E ; fully-qualified # 🐮 E0.6 cow face +1F402 ; fully-qualified # 🐂 E1.0 ox +1F403 ; fully-qualified # 🐃 E1.0 water buffalo +1F404 ; fully-qualified # 🐄 E1.0 cow +1F437 ; fully-qualified # 🐷 E0.6 pig face +1F416 ; fully-qualified # 🐖 E1.0 pig +1F417 ; fully-qualified # 🐗 E0.6 boar +1F43D ; fully-qualified # 🐽 E0.6 pig nose +1F40F ; fully-qualified # 🐏 E1.0 ram +1F411 ; fully-qualified # 🐑 E0.6 ewe +1F410 ; fully-qualified # 🐐 E1.0 goat +1F42A ; fully-qualified # 🐪 E1.0 camel +1F42B ; fully-qualified # 🐫 E0.6 two-hump camel +1F999 ; fully-qualified # 🦙 E11.0 llama +1F992 ; fully-qualified # 🦒 E5.0 giraffe +1F418 ; fully-qualified # 🐘 E0.6 elephant +1F9A3 ; fully-qualified # 🦣 E13.0 mammoth +1F98F ; fully-qualified # 🦏 E3.0 rhinoceros +1F99B ; fully-qualified # 🦛 E11.0 hippopotamus +1F42D ; fully-qualified # 🐭 E0.6 mouse face +1F401 ; fully-qualified # 🐁 E1.0 mouse +1F400 ; fully-qualified # 🐀 E1.0 rat +1F439 ; fully-qualified # 🐹 E0.6 hamster +1F430 ; fully-qualified # 🐰 E0.6 rabbit face +1F407 ; fully-qualified # 🐇 E1.0 rabbit +1F43F FE0F ; fully-qualified # 🐿️ E0.7 chipmunk +1F43F ; unqualified # 🐿 E0.7 chipmunk +1F9AB ; fully-qualified # 🦫 E13.0 beaver +1F994 ; fully-qualified # 🦔 E5.0 hedgehog +1F987 ; fully-qualified # 🦇 E3.0 bat +1F43B ; fully-qualified # 🐻 E0.6 bear +1F43B 200D 2744 FE0F ; fully-qualified # 🐻‍❄️ E13.0 polar bear +1F43B 200D 2744 ; minimally-qualified # 🐻‍❄ E13.0 polar bear +1F428 ; fully-qualified # 🐨 E0.6 koala +1F43C ; fully-qualified # 🐼 E0.6 panda +1F9A5 ; fully-qualified # 🦥 E12.0 sloth +1F9A6 ; fully-qualified # 🦦 E12.0 otter +1F9A8 ; fully-qualified # 🦨 E12.0 skunk +1F998 ; fully-qualified # 🦘 E11.0 kangaroo +1F9A1 ; fully-qualified # 🦡 E11.0 badger +1F43E ; fully-qualified # 🐾 E0.6 paw prints + +# subgroup: animal-bird +1F983 ; fully-qualified # 🦃 E1.0 turkey +1F414 ; fully-qualified # 🐔 E0.6 chicken +1F413 ; fully-qualified # 🐓 E1.0 rooster +1F423 ; fully-qualified # 🐣 E0.6 hatching chick +1F424 ; fully-qualified # 🐤 E0.6 baby chick +1F425 ; fully-qualified # 🐥 E0.6 front-facing baby chick +1F426 ; fully-qualified # 🐦 E0.6 bird +1F427 ; fully-qualified # 🐧 E0.6 penguin +1F54A FE0F ; fully-qualified # 🕊️ E0.7 dove +1F54A ; unqualified # 🕊 E0.7 dove +1F985 ; fully-qualified # 🦅 E3.0 eagle +1F986 ; fully-qualified # 🦆 E3.0 duck +1F9A2 ; fully-qualified # 🦢 E11.0 swan +1F989 ; fully-qualified # 🦉 E3.0 owl +1F9A4 ; fully-qualified # 🦤 E13.0 dodo +1FAB6 ; fully-qualified # 🪶 E13.0 feather +1F9A9 ; fully-qualified # 🦩 E12.0 flamingo +1F99A ; fully-qualified # 🦚 E11.0 peacock +1F99C ; fully-qualified # 🦜 E11.0 parrot +1FABD ; fully-qualified # 🪽 E15.0 wing +1F426 200D 2B1B ; fully-qualified # 🐦‍⬛ E15.0 black bird +1FABF ; fully-qualified # 🪿 E15.0 goose + +# subgroup: animal-amphibian +1F438 ; fully-qualified # 🐸 E0.6 frog + +# subgroup: animal-reptile +1F40A ; fully-qualified # 🐊 E1.0 crocodile +1F422 ; fully-qualified # 🐢 E0.6 turtle +1F98E ; fully-qualified # 🦎 E3.0 lizard +1F40D ; fully-qualified # 🐍 E0.6 snake +1F432 ; fully-qualified # 🐲 E0.6 dragon face +1F409 ; fully-qualified # 🐉 E1.0 dragon +1F995 ; fully-qualified # 🦕 E5.0 sauropod +1F996 ; fully-qualified # 🦖 E5.0 T-Rex + +# subgroup: animal-marine +1F433 ; fully-qualified # 🐳 E0.6 spouting whale +1F40B ; fully-qualified # 🐋 E1.0 whale +1F42C ; fully-qualified # 🐬 E0.6 dolphin +1F9AD ; fully-qualified # 🦭 E13.0 seal +1F41F ; fully-qualified # 🐟 E0.6 fish +1F420 ; fully-qualified # 🐠 E0.6 tropical fish +1F421 ; fully-qualified # 🐡 E0.6 blowfish +1F988 ; fully-qualified # 🦈 E3.0 shark +1F419 ; fully-qualified # 🐙 E0.6 octopus +1F41A ; fully-qualified # 🐚 E0.6 spiral shell +1FAB8 ; fully-qualified # 🪸 E14.0 coral +1FABC ; fully-qualified # 🪼 E15.0 jellyfish + +# subgroup: animal-bug +1F40C ; fully-qualified # 🐌 E0.6 snail +1F98B ; fully-qualified # 🦋 E3.0 butterfly +1F41B ; fully-qualified # 🐛 E0.6 bug +1F41C ; fully-qualified # 🐜 E0.6 ant +1F41D ; fully-qualified # 🐝 E0.6 honeybee +1FAB2 ; fully-qualified # 🪲 E13.0 beetle +1F41E ; fully-qualified # 🐞 E0.6 lady beetle +1F997 ; fully-qualified # 🦗 E5.0 cricket +1FAB3 ; fully-qualified # 🪳 E13.0 cockroach +1F577 FE0F ; fully-qualified # 🕷️ E0.7 spider +1F577 ; unqualified # 🕷 E0.7 spider +1F578 FE0F ; fully-qualified # 🕸️ E0.7 spider web +1F578 ; unqualified # 🕸 E0.7 spider web +1F982 ; fully-qualified # 🦂 E1.0 scorpion +1F99F ; fully-qualified # 🦟 E11.0 mosquito +1FAB0 ; fully-qualified # 🪰 E13.0 fly +1FAB1 ; fully-qualified # 🪱 E13.0 worm +1F9A0 ; fully-qualified # 🦠 E11.0 microbe + +# subgroup: plant-flower +1F490 ; fully-qualified # 💐 E0.6 bouquet +1F338 ; fully-qualified # 🌸 E0.6 cherry blossom +1F4AE ; fully-qualified # 💮 E0.6 white flower +1FAB7 ; fully-qualified # 🪷 E14.0 lotus +1F3F5 FE0F ; fully-qualified # 🏵️ E0.7 rosette +1F3F5 ; unqualified # 🏵 E0.7 rosette +1F339 ; fully-qualified # 🌹 E0.6 rose +1F940 ; fully-qualified # 🥀 E3.0 wilted flower +1F33A ; fully-qualified # 🌺 E0.6 hibiscus +1F33B ; fully-qualified # 🌻 E0.6 sunflower +1F33C ; fully-qualified # 🌼 E0.6 blossom +1F337 ; fully-qualified # 🌷 E0.6 tulip +1FABB ; fully-qualified # 🪻 E15.0 hyacinth + +# subgroup: plant-other +1F331 ; fully-qualified # 🌱 E0.6 seedling +1FAB4 ; fully-qualified # 🪴 E13.0 potted plant +1F332 ; fully-qualified # 🌲 E1.0 evergreen tree +1F333 ; fully-qualified # 🌳 E1.0 deciduous tree +1F334 ; fully-qualified # 🌴 E0.6 palm tree +1F335 ; fully-qualified # 🌵 E0.6 cactus +1F33E ; fully-qualified # 🌾 E0.6 sheaf of rice +1F33F ; fully-qualified # 🌿 E0.6 herb +2618 FE0F ; fully-qualified # ☘️ E1.0 shamrock +2618 ; unqualified # ☘ E1.0 shamrock +1F340 ; fully-qualified # 🍀 E0.6 four leaf clover +1F341 ; fully-qualified # 🍁 E0.6 maple leaf +1F342 ; fully-qualified # 🍂 E0.6 fallen leaf +1F343 ; fully-qualified # 🍃 E0.6 leaf fluttering in wind +1FAB9 ; fully-qualified # 🪹 E14.0 empty nest +1FABA ; fully-qualified # 🪺 E14.0 nest with eggs +1F344 ; fully-qualified # 🍄 E0.6 mushroom + +# Animals & Nature subtotal: 159 +# Animals & Nature subtotal: 159 w/o modifiers + +# group: Food & Drink + +# subgroup: food-fruit +1F347 ; fully-qualified # 🍇 E0.6 grapes +1F348 ; fully-qualified # 🍈 E0.6 melon +1F349 ; fully-qualified # 🍉 E0.6 watermelon +1F34A ; fully-qualified # 🍊 E0.6 tangerine +1F34B ; fully-qualified # 🍋 E1.0 lemon +1F34C ; fully-qualified # 🍌 E0.6 banana +1F34D ; fully-qualified # 🍍 E0.6 pineapple +1F96D ; fully-qualified # 🥭 E11.0 mango +1F34E ; fully-qualified # 🍎 E0.6 red apple +1F34F ; fully-qualified # 🍏 E0.6 green apple +1F350 ; fully-qualified # 🍐 E1.0 pear +1F351 ; fully-qualified # 🍑 E0.6 peach +1F352 ; fully-qualified # 🍒 E0.6 cherries +1F353 ; fully-qualified # 🍓 E0.6 strawberry +1FAD0 ; fully-qualified # 🫐 E13.0 blueberries +1F95D ; fully-qualified # 🥝 E3.0 kiwi fruit +1F345 ; fully-qualified # 🍅 E0.6 tomato +1FAD2 ; fully-qualified # 🫒 E13.0 olive +1F965 ; fully-qualified # 🥥 E5.0 coconut + +# subgroup: food-vegetable +1F951 ; fully-qualified # 🥑 E3.0 avocado +1F346 ; fully-qualified # 🍆 E0.6 eggplant +1F954 ; fully-qualified # 🥔 E3.0 potato +1F955 ; fully-qualified # 🥕 E3.0 carrot +1F33D ; fully-qualified # 🌽 E0.6 ear of corn +1F336 FE0F ; fully-qualified # 🌶️ E0.7 hot pepper +1F336 ; unqualified # 🌶 E0.7 hot pepper +1FAD1 ; fully-qualified # 🫑 E13.0 bell pepper +1F952 ; fully-qualified # 🥒 E3.0 cucumber +1F96C ; fully-qualified # 🥬 E11.0 leafy green +1F966 ; fully-qualified # 🥦 E5.0 broccoli +1F9C4 ; fully-qualified # 🧄 E12.0 garlic +1F9C5 ; fully-qualified # 🧅 E12.0 onion +1F95C ; fully-qualified # 🥜 E3.0 peanuts +1FAD8 ; fully-qualified # 🫘 E14.0 beans +1F330 ; fully-qualified # 🌰 E0.6 chestnut +1FADA ; fully-qualified # 🫚 E15.0 ginger root +1FADB ; fully-qualified # 🫛 E15.0 pea pod + +# subgroup: food-prepared +1F35E ; fully-qualified # 🍞 E0.6 bread +1F950 ; fully-qualified # 🥐 E3.0 croissant +1F956 ; fully-qualified # 🥖 E3.0 baguette bread +1FAD3 ; fully-qualified # 🫓 E13.0 flatbread +1F968 ; fully-qualified # 🥨 E5.0 pretzel +1F96F ; fully-qualified # 🥯 E11.0 bagel +1F95E ; fully-qualified # 🥞 E3.0 pancakes +1F9C7 ; fully-qualified # 🧇 E12.0 waffle +1F9C0 ; fully-qualified # 🧀 E1.0 cheese wedge +1F356 ; fully-qualified # 🍖 E0.6 meat on bone +1F357 ; fully-qualified # 🍗 E0.6 poultry leg +1F969 ; fully-qualified # 🥩 E5.0 cut of meat +1F953 ; fully-qualified # 🥓 E3.0 bacon +1F354 ; fully-qualified # 🍔 E0.6 hamburger +1F35F ; fully-qualified # 🍟 E0.6 french fries +1F355 ; fully-qualified # 🍕 E0.6 pizza +1F32D ; fully-qualified # 🌭 E1.0 hot dog +1F96A ; fully-qualified # 🥪 E5.0 sandwich +1F32E ; fully-qualified # 🌮 E1.0 taco +1F32F ; fully-qualified # 🌯 E1.0 burrito +1FAD4 ; fully-qualified # 🫔 E13.0 tamale +1F959 ; fully-qualified # 🥙 E3.0 stuffed flatbread +1F9C6 ; fully-qualified # 🧆 E12.0 falafel +1F95A ; fully-qualified # 🥚 E3.0 egg +1F373 ; fully-qualified # 🍳 E0.6 cooking +1F958 ; fully-qualified # 🥘 E3.0 shallow pan of food +1F372 ; fully-qualified # 🍲 E0.6 pot of food +1FAD5 ; fully-qualified # 🫕 E13.0 fondue +1F963 ; fully-qualified # 🥣 E5.0 bowl with spoon +1F957 ; fully-qualified # 🥗 E3.0 green salad +1F37F ; fully-qualified # 🍿 E1.0 popcorn +1F9C8 ; fully-qualified # 🧈 E12.0 butter +1F9C2 ; fully-qualified # 🧂 E11.0 salt +1F96B ; fully-qualified # 🥫 E5.0 canned food + +# subgroup: food-asian +1F371 ; fully-qualified # 🍱 E0.6 bento box +1F358 ; fully-qualified # 🍘 E0.6 rice cracker +1F359 ; fully-qualified # 🍙 E0.6 rice ball +1F35A ; fully-qualified # 🍚 E0.6 cooked rice +1F35B ; fully-qualified # 🍛 E0.6 curry rice +1F35C ; fully-qualified # 🍜 E0.6 steaming bowl +1F35D ; fully-qualified # 🍝 E0.6 spaghetti +1F360 ; fully-qualified # 🍠 E0.6 roasted sweet potato +1F362 ; fully-qualified # 🍢 E0.6 oden +1F363 ; fully-qualified # 🍣 E0.6 sushi +1F364 ; fully-qualified # 🍤 E0.6 fried shrimp +1F365 ; fully-qualified # 🍥 E0.6 fish cake with swirl +1F96E ; fully-qualified # 🥮 E11.0 moon cake +1F361 ; fully-qualified # 🍡 E0.6 dango +1F95F ; fully-qualified # 🥟 E5.0 dumpling +1F960 ; fully-qualified # 🥠 E5.0 fortune cookie +1F961 ; fully-qualified # 🥡 E5.0 takeout box + +# subgroup: food-marine +1F980 ; fully-qualified # 🦀 E1.0 crab +1F99E ; fully-qualified # 🦞 E11.0 lobster +1F990 ; fully-qualified # 🦐 E3.0 shrimp +1F991 ; fully-qualified # 🦑 E3.0 squid +1F9AA ; fully-qualified # 🦪 E12.0 oyster + +# subgroup: food-sweet +1F366 ; fully-qualified # 🍦 E0.6 soft ice cream +1F367 ; fully-qualified # 🍧 E0.6 shaved ice +1F368 ; fully-qualified # 🍨 E0.6 ice cream +1F369 ; fully-qualified # 🍩 E0.6 doughnut +1F36A ; fully-qualified # 🍪 E0.6 cookie +1F382 ; fully-qualified # 🎂 E0.6 birthday cake +1F370 ; fully-qualified # 🍰 E0.6 shortcake +1F9C1 ; fully-qualified # 🧁 E11.0 cupcake +1F967 ; fully-qualified # 🥧 E5.0 pie +1F36B ; fully-qualified # 🍫 E0.6 chocolate bar +1F36C ; fully-qualified # 🍬 E0.6 candy +1F36D ; fully-qualified # 🍭 E0.6 lollipop +1F36E ; fully-qualified # 🍮 E0.6 custard +1F36F ; fully-qualified # 🍯 E0.6 honey pot + +# subgroup: drink +1F37C ; fully-qualified # 🍼 E1.0 baby bottle +1F95B ; fully-qualified # 🥛 E3.0 glass of milk +2615 ; fully-qualified # ☕ E0.6 hot beverage +1FAD6 ; fully-qualified # 🫖 E13.0 teapot +1F375 ; fully-qualified # 🍵 E0.6 teacup without handle +1F376 ; fully-qualified # 🍶 E0.6 sake +1F37E ; fully-qualified # 🍾 E1.0 bottle with popping cork +1F377 ; fully-qualified # 🍷 E0.6 wine glass +1F378 ; fully-qualified # 🍸 E0.6 cocktail glass +1F379 ; fully-qualified # 🍹 E0.6 tropical drink +1F37A ; fully-qualified # 🍺 E0.6 beer mug +1F37B ; fully-qualified # 🍻 E0.6 clinking beer mugs +1F942 ; fully-qualified # 🥂 E3.0 clinking glasses +1F943 ; fully-qualified # 🥃 E3.0 tumbler glass +1FAD7 ; fully-qualified # 🫗 E14.0 pouring liquid +1F964 ; fully-qualified # 🥤 E5.0 cup with straw +1F9CB ; fully-qualified # 🧋 E13.0 bubble tea +1F9C3 ; fully-qualified # 🧃 E12.0 beverage box +1F9C9 ; fully-qualified # 🧉 E12.0 mate +1F9CA ; fully-qualified # 🧊 E12.0 ice + +# subgroup: dishware +1F962 ; fully-qualified # 🥢 E5.0 chopsticks +1F37D FE0F ; fully-qualified # 🍽️ E0.7 fork and knife with plate +1F37D ; unqualified # 🍽 E0.7 fork and knife with plate +1F374 ; fully-qualified # 🍴 E0.6 fork and knife +1F944 ; fully-qualified # 🥄 E3.0 spoon +1F52A ; fully-qualified # 🔪 E0.6 kitchen knife +1FAD9 ; fully-qualified # 🫙 E14.0 jar +1F3FA ; fully-qualified # 🏺 E1.0 amphora + +# Food & Drink subtotal: 135 +# Food & Drink subtotal: 135 w/o modifiers + +# group: Travel & Places + +# subgroup: place-map +1F30D ; fully-qualified # 🌍 E0.7 globe showing Europe-Africa +1F30E ; fully-qualified # 🌎 E0.7 globe showing Americas +1F30F ; fully-qualified # 🌏 E0.6 globe showing Asia-Australia +1F310 ; fully-qualified # 🌐 E1.0 globe with meridians +1F5FA FE0F ; fully-qualified # 🗺️ E0.7 world map +1F5FA ; unqualified # 🗺 E0.7 world map +1F5FE ; fully-qualified # 🗾 E0.6 map of Japan +1F9ED ; fully-qualified # 🧭 E11.0 compass + +# subgroup: place-geographic +1F3D4 FE0F ; fully-qualified # 🏔️ E0.7 snow-capped mountain +1F3D4 ; unqualified # 🏔 E0.7 snow-capped mountain +26F0 FE0F ; fully-qualified # ⛰️ E0.7 mountain +26F0 ; unqualified # ⛰ E0.7 mountain +1F30B ; fully-qualified # 🌋 E0.6 volcano +1F5FB ; fully-qualified # 🗻 E0.6 mount fuji +1F3D5 FE0F ; fully-qualified # 🏕️ E0.7 camping +1F3D5 ; unqualified # 🏕 E0.7 camping +1F3D6 FE0F ; fully-qualified # 🏖️ E0.7 beach with umbrella +1F3D6 ; unqualified # 🏖 E0.7 beach with umbrella +1F3DC FE0F ; fully-qualified # 🏜️ E0.7 desert +1F3DC ; unqualified # 🏜 E0.7 desert +1F3DD FE0F ; fully-qualified # 🏝️ E0.7 desert island +1F3DD ; unqualified # 🏝 E0.7 desert island +1F3DE FE0F ; fully-qualified # 🏞️ E0.7 national park +1F3DE ; unqualified # 🏞 E0.7 national park + +# subgroup: place-building +1F3DF FE0F ; fully-qualified # 🏟️ E0.7 stadium +1F3DF ; unqualified # 🏟 E0.7 stadium +1F3DB FE0F ; fully-qualified # 🏛️ E0.7 classical building +1F3DB ; unqualified # 🏛 E0.7 classical building +1F3D7 FE0F ; fully-qualified # 🏗️ E0.7 building construction +1F3D7 ; unqualified # 🏗 E0.7 building construction +1F9F1 ; fully-qualified # 🧱 E11.0 brick +1FAA8 ; fully-qualified # 🪨 E13.0 rock +1FAB5 ; fully-qualified # 🪵 E13.0 wood +1F6D6 ; fully-qualified # 🛖 E13.0 hut +1F3D8 FE0F ; fully-qualified # 🏘️ E0.7 houses +1F3D8 ; unqualified # 🏘 E0.7 houses +1F3DA FE0F ; fully-qualified # 🏚️ E0.7 derelict house +1F3DA ; unqualified # 🏚 E0.7 derelict house +1F3E0 ; fully-qualified # 🏠 E0.6 house +1F3E1 ; fully-qualified # 🏡 E0.6 house with garden +1F3E2 ; fully-qualified # 🏢 E0.6 office building +1F3E3 ; fully-qualified # 🏣 E0.6 Japanese post office +1F3E4 ; fully-qualified # 🏤 E1.0 post office +1F3E5 ; fully-qualified # 🏥 E0.6 hospital +1F3E6 ; fully-qualified # 🏦 E0.6 bank +1F3E8 ; fully-qualified # 🏨 E0.6 hotel +1F3E9 ; fully-qualified # 🏩 E0.6 love hotel +1F3EA ; fully-qualified # 🏪 E0.6 convenience store +1F3EB ; fully-qualified # 🏫 E0.6 school +1F3EC ; fully-qualified # 🏬 E0.6 department store +1F3ED ; fully-qualified # 🏭 E0.6 factory +1F3EF ; fully-qualified # 🏯 E0.6 Japanese castle +1F3F0 ; fully-qualified # 🏰 E0.6 castle +1F492 ; fully-qualified # 💒 E0.6 wedding +1F5FC ; fully-qualified # 🗼 E0.6 Tokyo tower +1F5FD ; fully-qualified # 🗽 E0.6 Statue of Liberty + +# subgroup: place-religious +26EA ; fully-qualified # ⛪ E0.6 church +1F54C ; fully-qualified # 🕌 E1.0 mosque +1F6D5 ; fully-qualified # 🛕 E12.0 hindu temple +1F54D ; fully-qualified # 🕍 E1.0 synagogue +26E9 FE0F ; fully-qualified # ⛩️ E0.7 shinto shrine +26E9 ; unqualified # ⛩ E0.7 shinto shrine +1F54B ; fully-qualified # 🕋 E1.0 kaaba + +# subgroup: place-other +26F2 ; fully-qualified # ⛲ E0.6 fountain +26FA ; fully-qualified # ⛺ E0.6 tent +1F301 ; fully-qualified # 🌁 E0.6 foggy +1F303 ; fully-qualified # 🌃 E0.6 night with stars +1F3D9 FE0F ; fully-qualified # 🏙️ E0.7 cityscape +1F3D9 ; unqualified # 🏙 E0.7 cityscape +1F304 ; fully-qualified # 🌄 E0.6 sunrise over mountains +1F305 ; fully-qualified # 🌅 E0.6 sunrise +1F306 ; fully-qualified # 🌆 E0.6 cityscape at dusk +1F307 ; fully-qualified # 🌇 E0.6 sunset +1F309 ; fully-qualified # 🌉 E0.6 bridge at night +2668 FE0F ; fully-qualified # ♨️ E0.6 hot springs +2668 ; unqualified # ♨ E0.6 hot springs +1F3A0 ; fully-qualified # 🎠 E0.6 carousel horse +1F6DD ; fully-qualified # 🛝 E14.0 playground slide +1F3A1 ; fully-qualified # 🎡 E0.6 ferris wheel +1F3A2 ; fully-qualified # 🎢 E0.6 roller coaster +1F488 ; fully-qualified # 💈 E0.6 barber pole +1F3AA ; fully-qualified # 🎪 E0.6 circus tent + +# subgroup: transport-ground +1F682 ; fully-qualified # 🚂 E1.0 locomotive +1F683 ; fully-qualified # 🚃 E0.6 railway car +1F684 ; fully-qualified # 🚄 E0.6 high-speed train +1F685 ; fully-qualified # 🚅 E0.6 bullet train +1F686 ; fully-qualified # 🚆 E1.0 train +1F687 ; fully-qualified # 🚇 E0.6 metro +1F688 ; fully-qualified # 🚈 E1.0 light rail +1F689 ; fully-qualified # 🚉 E0.6 station +1F68A ; fully-qualified # 🚊 E1.0 tram +1F69D ; fully-qualified # 🚝 E1.0 monorail +1F69E ; fully-qualified # 🚞 E1.0 mountain railway +1F68B ; fully-qualified # 🚋 E1.0 tram car +1F68C ; fully-qualified # 🚌 E0.6 bus +1F68D ; fully-qualified # 🚍 E0.7 oncoming bus +1F68E ; fully-qualified # 🚎 E1.0 trolleybus +1F690 ; fully-qualified # 🚐 E1.0 minibus +1F691 ; fully-qualified # 🚑 E0.6 ambulance +1F692 ; fully-qualified # 🚒 E0.6 fire engine +1F693 ; fully-qualified # 🚓 E0.6 police car +1F694 ; fully-qualified # 🚔 E0.7 oncoming police car +1F695 ; fully-qualified # 🚕 E0.6 taxi +1F696 ; fully-qualified # 🚖 E1.0 oncoming taxi +1F697 ; fully-qualified # 🚗 E0.6 automobile +1F698 ; fully-qualified # 🚘 E0.7 oncoming automobile +1F699 ; fully-qualified # 🚙 E0.6 sport utility vehicle +1F6FB ; fully-qualified # 🛻 E13.0 pickup truck +1F69A ; fully-qualified # 🚚 E0.6 delivery truck +1F69B ; fully-qualified # 🚛 E1.0 articulated lorry +1F69C ; fully-qualified # 🚜 E1.0 tractor +1F3CE FE0F ; fully-qualified # 🏎️ E0.7 racing car +1F3CE ; unqualified # 🏎 E0.7 racing car +1F3CD FE0F ; fully-qualified # 🏍️ E0.7 motorcycle +1F3CD ; unqualified # 🏍 E0.7 motorcycle +1F6F5 ; fully-qualified # 🛵 E3.0 motor scooter +1F9BD ; fully-qualified # 🦽 E12.0 manual wheelchair +1F9BC ; fully-qualified # 🦼 E12.0 motorized wheelchair +1F6FA ; fully-qualified # 🛺 E12.0 auto rickshaw +1F6B2 ; fully-qualified # 🚲 E0.6 bicycle +1F6F4 ; fully-qualified # 🛴 E3.0 kick scooter +1F6F9 ; fully-qualified # 🛹 E11.0 skateboard +1F6FC ; fully-qualified # 🛼 E13.0 roller skate +1F68F ; fully-qualified # 🚏 E0.6 bus stop +1F6E3 FE0F ; fully-qualified # 🛣️ E0.7 motorway +1F6E3 ; unqualified # 🛣 E0.7 motorway +1F6E4 FE0F ; fully-qualified # 🛤️ E0.7 railway track +1F6E4 ; unqualified # 🛤 E0.7 railway track +1F6E2 FE0F ; fully-qualified # 🛢️ E0.7 oil drum +1F6E2 ; unqualified # 🛢 E0.7 oil drum +26FD ; fully-qualified # ⛽ E0.6 fuel pump +1F6DE ; fully-qualified # 🛞 E14.0 wheel +1F6A8 ; fully-qualified # 🚨 E0.6 police car light +1F6A5 ; fully-qualified # 🚥 E0.6 horizontal traffic light +1F6A6 ; fully-qualified # 🚦 E1.0 vertical traffic light +1F6D1 ; fully-qualified # 🛑 E3.0 stop sign +1F6A7 ; fully-qualified # 🚧 E0.6 construction + +# subgroup: transport-water +2693 ; fully-qualified # ⚓ E0.6 anchor +1F6DF ; fully-qualified # 🛟 E14.0 ring buoy +26F5 ; fully-qualified # ⛵ E0.6 sailboat +1F6F6 ; fully-qualified # 🛶 E3.0 canoe +1F6A4 ; fully-qualified # 🚤 E0.6 speedboat +1F6F3 FE0F ; fully-qualified # 🛳️ E0.7 passenger ship +1F6F3 ; unqualified # 🛳 E0.7 passenger ship +26F4 FE0F ; fully-qualified # ⛴️ E0.7 ferry +26F4 ; unqualified # ⛴ E0.7 ferry +1F6E5 FE0F ; fully-qualified # 🛥️ E0.7 motor boat +1F6E5 ; unqualified # 🛥 E0.7 motor boat +1F6A2 ; fully-qualified # 🚢 E0.6 ship + +# subgroup: transport-air +2708 FE0F ; fully-qualified # ✈️ E0.6 airplane +2708 ; unqualified # ✈ E0.6 airplane +1F6E9 FE0F ; fully-qualified # 🛩️ E0.7 small airplane +1F6E9 ; unqualified # 🛩 E0.7 small airplane +1F6EB ; fully-qualified # 🛫 E1.0 airplane departure +1F6EC ; fully-qualified # 🛬 E1.0 airplane arrival +1FA82 ; fully-qualified # 🪂 E12.0 parachute +1F4BA ; fully-qualified # 💺 E0.6 seat +1F681 ; fully-qualified # 🚁 E1.0 helicopter +1F69F ; fully-qualified # 🚟 E1.0 suspension railway +1F6A0 ; fully-qualified # 🚠 E1.0 mountain cableway +1F6A1 ; fully-qualified # 🚡 E1.0 aerial tramway +1F6F0 FE0F ; fully-qualified # 🛰️ E0.7 satellite +1F6F0 ; unqualified # 🛰 E0.7 satellite +1F680 ; fully-qualified # 🚀 E0.6 rocket +1F6F8 ; fully-qualified # 🛸 E5.0 flying saucer + +# subgroup: hotel +1F6CE FE0F ; fully-qualified # 🛎️ E0.7 bellhop bell +1F6CE ; unqualified # 🛎 E0.7 bellhop bell +1F9F3 ; fully-qualified # 🧳 E11.0 luggage + +# subgroup: time +231B ; fully-qualified # ⌛ E0.6 hourglass done +23F3 ; fully-qualified # ⏳ E0.6 hourglass not done +231A ; fully-qualified # ⌚ E0.6 watch +23F0 ; fully-qualified # ⏰ E0.6 alarm clock +23F1 FE0F ; fully-qualified # ⏱️ E1.0 stopwatch +23F1 ; unqualified # ⏱ E1.0 stopwatch +23F2 FE0F ; fully-qualified # ⏲️ E1.0 timer clock +23F2 ; unqualified # ⏲ E1.0 timer clock +1F570 FE0F ; fully-qualified # 🕰️ E0.7 mantelpiece clock +1F570 ; unqualified # 🕰 E0.7 mantelpiece clock +1F55B ; fully-qualified # 🕛 E0.6 twelve o’clock +1F567 ; fully-qualified # 🕧 E0.7 twelve-thirty +1F550 ; fully-qualified # 🕐 E0.6 one o’clock +1F55C ; fully-qualified # 🕜 E0.7 one-thirty +1F551 ; fully-qualified # 🕑 E0.6 two o’clock +1F55D ; fully-qualified # 🕝 E0.7 two-thirty +1F552 ; fully-qualified # 🕒 E0.6 three o’clock +1F55E ; fully-qualified # 🕞 E0.7 three-thirty +1F553 ; fully-qualified # 🕓 E0.6 four o’clock +1F55F ; fully-qualified # 🕟 E0.7 four-thirty +1F554 ; fully-qualified # 🕔 E0.6 five o’clock +1F560 ; fully-qualified # 🕠 E0.7 five-thirty +1F555 ; fully-qualified # 🕕 E0.6 six o’clock +1F561 ; fully-qualified # 🕡 E0.7 six-thirty +1F556 ; fully-qualified # 🕖 E0.6 seven o’clock +1F562 ; fully-qualified # 🕢 E0.7 seven-thirty +1F557 ; fully-qualified # 🕗 E0.6 eight o’clock +1F563 ; fully-qualified # 🕣 E0.7 eight-thirty +1F558 ; fully-qualified # 🕘 E0.6 nine o’clock +1F564 ; fully-qualified # 🕤 E0.7 nine-thirty +1F559 ; fully-qualified # 🕙 E0.6 ten o’clock +1F565 ; fully-qualified # 🕥 E0.7 ten-thirty +1F55A ; fully-qualified # 🕚 E0.6 eleven o’clock +1F566 ; fully-qualified # 🕦 E0.7 eleven-thirty + +# subgroup: sky & weather +1F311 ; fully-qualified # 🌑 E0.6 new moon +1F312 ; fully-qualified # 🌒 E1.0 waxing crescent moon +1F313 ; fully-qualified # 🌓 E0.6 first quarter moon +1F314 ; fully-qualified # 🌔 E0.6 waxing gibbous moon +1F315 ; fully-qualified # 🌕 E0.6 full moon +1F316 ; fully-qualified # 🌖 E1.0 waning gibbous moon +1F317 ; fully-qualified # 🌗 E1.0 last quarter moon +1F318 ; fully-qualified # 🌘 E1.0 waning crescent moon +1F319 ; fully-qualified # 🌙 E0.6 crescent moon +1F31A ; fully-qualified # 🌚 E1.0 new moon face +1F31B ; fully-qualified # 🌛 E0.6 first quarter moon face +1F31C ; fully-qualified # 🌜 E0.7 last quarter moon face +1F321 FE0F ; fully-qualified # 🌡️ E0.7 thermometer +1F321 ; unqualified # 🌡 E0.7 thermometer +2600 FE0F ; fully-qualified # ☀️ E0.6 sun +2600 ; unqualified # ☀ E0.6 sun +1F31D ; fully-qualified # 🌝 E1.0 full moon face +1F31E ; fully-qualified # 🌞 E1.0 sun with face +1FA90 ; fully-qualified # 🪐 E12.0 ringed planet +2B50 ; fully-qualified # ⭐ E0.6 star +1F31F ; fully-qualified # 🌟 E0.6 glowing star +1F320 ; fully-qualified # 🌠 E0.6 shooting star +1F30C ; fully-qualified # 🌌 E0.6 milky way +2601 FE0F ; fully-qualified # ☁️ E0.6 cloud +2601 ; unqualified # ☁ E0.6 cloud +26C5 ; fully-qualified # ⛅ E0.6 sun behind cloud +26C8 FE0F ; fully-qualified # ⛈️ E0.7 cloud with lightning and rain +26C8 ; unqualified # ⛈ E0.7 cloud with lightning and rain +1F324 FE0F ; fully-qualified # 🌤️ E0.7 sun behind small cloud +1F324 ; unqualified # 🌤 E0.7 sun behind small cloud +1F325 FE0F ; fully-qualified # 🌥️ E0.7 sun behind large cloud +1F325 ; unqualified # 🌥 E0.7 sun behind large cloud +1F326 FE0F ; fully-qualified # 🌦️ E0.7 sun behind rain cloud +1F326 ; unqualified # 🌦 E0.7 sun behind rain cloud +1F327 FE0F ; fully-qualified # 🌧️ E0.7 cloud with rain +1F327 ; unqualified # 🌧 E0.7 cloud with rain +1F328 FE0F ; fully-qualified # 🌨️ E0.7 cloud with snow +1F328 ; unqualified # 🌨 E0.7 cloud with snow +1F329 FE0F ; fully-qualified # 🌩️ E0.7 cloud with lightning +1F329 ; unqualified # 🌩 E0.7 cloud with lightning +1F32A FE0F ; fully-qualified # 🌪️ E0.7 tornado +1F32A ; unqualified # 🌪 E0.7 tornado +1F32B FE0F ; fully-qualified # 🌫️ E0.7 fog +1F32B ; unqualified # 🌫 E0.7 fog +1F32C FE0F ; fully-qualified # 🌬️ E0.7 wind face +1F32C ; unqualified # 🌬 E0.7 wind face +1F300 ; fully-qualified # 🌀 E0.6 cyclone +1F308 ; fully-qualified # 🌈 E0.6 rainbow +1F302 ; fully-qualified # 🌂 E0.6 closed umbrella +2602 FE0F ; fully-qualified # ☂️ E0.7 umbrella +2602 ; unqualified # ☂ E0.7 umbrella +2614 ; fully-qualified # ☔ E0.6 umbrella with rain drops +26F1 FE0F ; fully-qualified # ⛱️ E0.7 umbrella on ground +26F1 ; unqualified # ⛱ E0.7 umbrella on ground +26A1 ; fully-qualified # ⚡ E0.6 high voltage +2744 FE0F ; fully-qualified # ❄️ E0.6 snowflake +2744 ; unqualified # ❄ E0.6 snowflake +2603 FE0F ; fully-qualified # ☃️ E0.7 snowman +2603 ; unqualified # ☃ E0.7 snowman +26C4 ; fully-qualified # ⛄ E0.6 snowman without snow +2604 FE0F ; fully-qualified # ☄️ E1.0 comet +2604 ; unqualified # ☄ E1.0 comet +1F525 ; fully-qualified # 🔥 E0.6 fire +1F4A7 ; fully-qualified # 💧 E0.6 droplet +1F30A ; fully-qualified # 🌊 E0.6 water wave + +# Travel & Places subtotal: 267 +# Travel & Places subtotal: 267 w/o modifiers + +# group: Activities + +# subgroup: event +1F383 ; fully-qualified # 🎃 E0.6 jack-o-lantern +1F384 ; fully-qualified # 🎄 E0.6 Christmas tree +1F386 ; fully-qualified # 🎆 E0.6 fireworks +1F387 ; fully-qualified # 🎇 E0.6 sparkler +1F9E8 ; fully-qualified # 🧨 E11.0 firecracker +2728 ; fully-qualified # ✨ E0.6 sparkles +1F388 ; fully-qualified # 🎈 E0.6 balloon +1F389 ; fully-qualified # 🎉 E0.6 party popper +1F38A ; fully-qualified # 🎊 E0.6 confetti ball +1F38B ; fully-qualified # 🎋 E0.6 tanabata tree +1F38D ; fully-qualified # 🎍 E0.6 pine decoration +1F38E ; fully-qualified # 🎎 E0.6 Japanese dolls +1F38F ; fully-qualified # 🎏 E0.6 carp streamer +1F390 ; fully-qualified # 🎐 E0.6 wind chime +1F391 ; fully-qualified # 🎑 E0.6 moon viewing ceremony +1F9E7 ; fully-qualified # 🧧 E11.0 red envelope +1F380 ; fully-qualified # 🎀 E0.6 ribbon +1F381 ; fully-qualified # 🎁 E0.6 wrapped gift +1F397 FE0F ; fully-qualified # 🎗️ E0.7 reminder ribbon +1F397 ; unqualified # 🎗 E0.7 reminder ribbon +1F39F FE0F ; fully-qualified # 🎟️ E0.7 admission tickets +1F39F ; unqualified # 🎟 E0.7 admission tickets +1F3AB ; fully-qualified # 🎫 E0.6 ticket + +# subgroup: award-medal +1F396 FE0F ; fully-qualified # 🎖️ E0.7 military medal +1F396 ; unqualified # 🎖 E0.7 military medal +1F3C6 ; fully-qualified # 🏆 E0.6 trophy +1F3C5 ; fully-qualified # 🏅 E1.0 sports medal +1F947 ; fully-qualified # 🥇 E3.0 1st place medal +1F948 ; fully-qualified # 🥈 E3.0 2nd place medal +1F949 ; fully-qualified # 🥉 E3.0 3rd place medal + +# subgroup: sport +26BD ; fully-qualified # ⚽ E0.6 soccer ball +26BE ; fully-qualified # ⚾ E0.6 baseball +1F94E ; fully-qualified # 🥎 E11.0 softball +1F3C0 ; fully-qualified # 🏀 E0.6 basketball +1F3D0 ; fully-qualified # 🏐 E1.0 volleyball +1F3C8 ; fully-qualified # 🏈 E0.6 american football +1F3C9 ; fully-qualified # 🏉 E1.0 rugby football +1F3BE ; fully-qualified # 🎾 E0.6 tennis +1F94F ; fully-qualified # 🥏 E11.0 flying disc +1F3B3 ; fully-qualified # 🎳 E0.6 bowling +1F3CF ; fully-qualified # 🏏 E1.0 cricket game +1F3D1 ; fully-qualified # 🏑 E1.0 field hockey +1F3D2 ; fully-qualified # 🏒 E1.0 ice hockey +1F94D ; fully-qualified # 🥍 E11.0 lacrosse +1F3D3 ; fully-qualified # 🏓 E1.0 ping pong +1F3F8 ; fully-qualified # 🏸 E1.0 badminton +1F94A ; fully-qualified # 🥊 E3.0 boxing glove +1F94B ; fully-qualified # 🥋 E3.0 martial arts uniform +1F945 ; fully-qualified # 🥅 E3.0 goal net +26F3 ; fully-qualified # ⛳ E0.6 flag in hole +26F8 FE0F ; fully-qualified # ⛸️ E0.7 ice skate +26F8 ; unqualified # ⛸ E0.7 ice skate +1F3A3 ; fully-qualified # 🎣 E0.6 fishing pole +1F93F ; fully-qualified # 🤿 E12.0 diving mask +1F3BD ; fully-qualified # 🎽 E0.6 running shirt +1F3BF ; fully-qualified # 🎿 E0.6 skis +1F6F7 ; fully-qualified # 🛷 E5.0 sled +1F94C ; fully-qualified # 🥌 E5.0 curling stone + +# subgroup: game +1F3AF ; fully-qualified # 🎯 E0.6 bullseye +1FA80 ; fully-qualified # 🪀 E12.0 yo-yo +1FA81 ; fully-qualified # 🪁 E12.0 kite +1F52B ; fully-qualified # 🔫 E0.6 water pistol +1F3B1 ; fully-qualified # 🎱 E0.6 pool 8 ball +1F52E ; fully-qualified # 🔮 E0.6 crystal ball +1FA84 ; fully-qualified # 🪄 E13.0 magic wand +1F3AE ; fully-qualified # 🎮 E0.6 video game +1F579 FE0F ; fully-qualified # 🕹️ E0.7 joystick +1F579 ; unqualified # 🕹 E0.7 joystick +1F3B0 ; fully-qualified # 🎰 E0.6 slot machine +1F3B2 ; fully-qualified # 🎲 E0.6 game die +1F9E9 ; fully-qualified # 🧩 E11.0 puzzle piece +1F9F8 ; fully-qualified # 🧸 E11.0 teddy bear +1FA85 ; fully-qualified # 🪅 E13.0 piñata +1FAA9 ; fully-qualified # 🪩 E14.0 mirror ball +1FA86 ; fully-qualified # 🪆 E13.0 nesting dolls +2660 FE0F ; fully-qualified # ♠️ E0.6 spade suit +2660 ; unqualified # ♠ E0.6 spade suit +2665 FE0F ; fully-qualified # ♥️ E0.6 heart suit +2665 ; unqualified # ♥ E0.6 heart suit +2666 FE0F ; fully-qualified # ♦️ E0.6 diamond suit +2666 ; unqualified # ♦ E0.6 diamond suit +2663 FE0F ; fully-qualified # ♣️ E0.6 club suit +2663 ; unqualified # ♣ E0.6 club suit +265F FE0F ; fully-qualified # ♟️ E11.0 chess pawn +265F ; unqualified # ♟ E11.0 chess pawn +1F0CF ; fully-qualified # 🃏 E0.6 joker +1F004 ; fully-qualified # 🀄 E0.6 mahjong red dragon +1F3B4 ; fully-qualified # 🎴 E0.6 flower playing cards + +# subgroup: arts & crafts +1F3AD ; fully-qualified # 🎭 E0.6 performing arts +1F5BC FE0F ; fully-qualified # 🖼️ E0.7 framed picture +1F5BC ; unqualified # 🖼 E0.7 framed picture +1F3A8 ; fully-qualified # 🎨 E0.6 artist palette +1F9F5 ; fully-qualified # 🧵 E11.0 thread +1FAA1 ; fully-qualified # 🪡 E13.0 sewing needle +1F9F6 ; fully-qualified # 🧶 E11.0 yarn +1FAA2 ; fully-qualified # 🪢 E13.0 knot + +# Activities subtotal: 96 +# Activities subtotal: 96 w/o modifiers + +# group: Objects + +# subgroup: clothing +1F453 ; fully-qualified # 👓 E0.6 glasses +1F576 FE0F ; fully-qualified # 🕶️ E0.7 sunglasses +1F576 ; unqualified # 🕶 E0.7 sunglasses +1F97D ; fully-qualified # 🥽 E11.0 goggles +1F97C ; fully-qualified # 🥼 E11.0 lab coat +1F9BA ; fully-qualified # 🦺 E12.0 safety vest +1F454 ; fully-qualified # 👔 E0.6 necktie +1F455 ; fully-qualified # 👕 E0.6 t-shirt +1F456 ; fully-qualified # 👖 E0.6 jeans +1F9E3 ; fully-qualified # 🧣 E5.0 scarf +1F9E4 ; fully-qualified # 🧤 E5.0 gloves +1F9E5 ; fully-qualified # 🧥 E5.0 coat +1F9E6 ; fully-qualified # 🧦 E5.0 socks +1F457 ; fully-qualified # 👗 E0.6 dress +1F458 ; fully-qualified # 👘 E0.6 kimono +1F97B ; fully-qualified # 🥻 E12.0 sari +1FA71 ; fully-qualified # 🩱 E12.0 one-piece swimsuit +1FA72 ; fully-qualified # 🩲 E12.0 briefs +1FA73 ; fully-qualified # 🩳 E12.0 shorts +1F459 ; fully-qualified # 👙 E0.6 bikini +1F45A ; fully-qualified # 👚 E0.6 woman’s clothes +1FAAD ; fully-qualified # 🪭 E15.0 folding hand fan +1F45B ; fully-qualified # 👛 E0.6 purse +1F45C ; fully-qualified # 👜 E0.6 handbag +1F45D ; fully-qualified # 👝 E0.6 clutch bag +1F6CD FE0F ; fully-qualified # 🛍️ E0.7 shopping bags +1F6CD ; unqualified # 🛍 E0.7 shopping bags +1F392 ; fully-qualified # 🎒 E0.6 backpack +1FA74 ; fully-qualified # 🩴 E13.0 thong sandal +1F45E ; fully-qualified # 👞 E0.6 man’s shoe +1F45F ; fully-qualified # 👟 E0.6 running shoe +1F97E ; fully-qualified # 🥾 E11.0 hiking boot +1F97F ; fully-qualified # 🥿 E11.0 flat shoe +1F460 ; fully-qualified # 👠 E0.6 high-heeled shoe +1F461 ; fully-qualified # 👡 E0.6 woman’s sandal +1FA70 ; fully-qualified # 🩰 E12.0 ballet shoes +1F462 ; fully-qualified # 👢 E0.6 woman’s boot +1FAAE ; fully-qualified # 🪮 E15.0 hair pick +1F451 ; fully-qualified # 👑 E0.6 crown +1F452 ; fully-qualified # 👒 E0.6 woman’s hat +1F3A9 ; fully-qualified # 🎩 E0.6 top hat +1F393 ; fully-qualified # 🎓 E0.6 graduation cap +1F9E2 ; fully-qualified # 🧢 E5.0 billed cap +1FA96 ; fully-qualified # 🪖 E13.0 military helmet +26D1 FE0F ; fully-qualified # ⛑️ E0.7 rescue worker’s helmet +26D1 ; unqualified # ⛑ E0.7 rescue worker’s helmet +1F4FF ; fully-qualified # 📿 E1.0 prayer beads +1F484 ; fully-qualified # 💄 E0.6 lipstick +1F48D ; fully-qualified # 💍 E0.6 ring +1F48E ; fully-qualified # 💎 E0.6 gem stone + +# subgroup: sound +1F507 ; fully-qualified # 🔇 E1.0 muted speaker +1F508 ; fully-qualified # 🔈 E0.7 speaker low volume +1F509 ; fully-qualified # 🔉 E1.0 speaker medium volume +1F50A ; fully-qualified # 🔊 E0.6 speaker high volume +1F4E2 ; fully-qualified # 📢 E0.6 loudspeaker +1F4E3 ; fully-qualified # 📣 E0.6 megaphone +1F4EF ; fully-qualified # 📯 E1.0 postal horn +1F514 ; fully-qualified # 🔔 E0.6 bell +1F515 ; fully-qualified # 🔕 E1.0 bell with slash + +# subgroup: music +1F3BC ; fully-qualified # 🎼 E0.6 musical score +1F3B5 ; fully-qualified # 🎵 E0.6 musical note +1F3B6 ; fully-qualified # 🎶 E0.6 musical notes +1F399 FE0F ; fully-qualified # 🎙️ E0.7 studio microphone +1F399 ; unqualified # 🎙 E0.7 studio microphone +1F39A FE0F ; fully-qualified # 🎚️ E0.7 level slider +1F39A ; unqualified # 🎚 E0.7 level slider +1F39B FE0F ; fully-qualified # 🎛️ E0.7 control knobs +1F39B ; unqualified # 🎛 E0.7 control knobs +1F3A4 ; fully-qualified # 🎤 E0.6 microphone +1F3A7 ; fully-qualified # 🎧 E0.6 headphone +1F4FB ; fully-qualified # 📻 E0.6 radio + +# subgroup: musical-instrument +1F3B7 ; fully-qualified # 🎷 E0.6 saxophone +1FA97 ; fully-qualified # 🪗 E13.0 accordion +1F3B8 ; fully-qualified # 🎸 E0.6 guitar +1F3B9 ; fully-qualified # 🎹 E0.6 musical keyboard +1F3BA ; fully-qualified # 🎺 E0.6 trumpet +1F3BB ; fully-qualified # 🎻 E0.6 violin +1FA95 ; fully-qualified # 🪕 E12.0 banjo +1F941 ; fully-qualified # 🥁 E3.0 drum +1FA98 ; fully-qualified # 🪘 E13.0 long drum +1FA87 ; fully-qualified # 🪇 E15.0 maracas +1FA88 ; fully-qualified # 🪈 E15.0 flute + +# subgroup: phone +1F4F1 ; fully-qualified # 📱 E0.6 mobile phone +1F4F2 ; fully-qualified # 📲 E0.6 mobile phone with arrow +260E FE0F ; fully-qualified # ☎️ E0.6 telephone +260E ; unqualified # ☎ E0.6 telephone +1F4DE ; fully-qualified # 📞 E0.6 telephone receiver +1F4DF ; fully-qualified # 📟 E0.6 pager +1F4E0 ; fully-qualified # 📠 E0.6 fax machine + +# subgroup: computer +1F50B ; fully-qualified # 🔋 E0.6 battery +1FAAB ; fully-qualified # 🪫 E14.0 low battery +1F50C ; fully-qualified # 🔌 E0.6 electric plug +1F4BB ; fully-qualified # 💻 E0.6 laptop +1F5A5 FE0F ; fully-qualified # 🖥️ E0.7 desktop computer +1F5A5 ; unqualified # 🖥 E0.7 desktop computer +1F5A8 FE0F ; fully-qualified # 🖨️ E0.7 printer +1F5A8 ; unqualified # 🖨 E0.7 printer +2328 FE0F ; fully-qualified # ⌨️ E1.0 keyboard +2328 ; unqualified # ⌨ E1.0 keyboard +1F5B1 FE0F ; fully-qualified # 🖱️ E0.7 computer mouse +1F5B1 ; unqualified # 🖱 E0.7 computer mouse +1F5B2 FE0F ; fully-qualified # 🖲️ E0.7 trackball +1F5B2 ; unqualified # 🖲 E0.7 trackball +1F4BD ; fully-qualified # 💽 E0.6 computer disk +1F4BE ; fully-qualified # 💾 E0.6 floppy disk +1F4BF ; fully-qualified # 💿 E0.6 optical disk +1F4C0 ; fully-qualified # 📀 E0.6 dvd +1F9EE ; fully-qualified # 🧮 E11.0 abacus + +# subgroup: light & video +1F3A5 ; fully-qualified # 🎥 E0.6 movie camera +1F39E FE0F ; fully-qualified # 🎞️ E0.7 film frames +1F39E ; unqualified # 🎞 E0.7 film frames +1F4FD FE0F ; fully-qualified # 📽️ E0.7 film projector +1F4FD ; unqualified # 📽 E0.7 film projector +1F3AC ; fully-qualified # 🎬 E0.6 clapper board +1F4FA ; fully-qualified # 📺 E0.6 television +1F4F7 ; fully-qualified # 📷 E0.6 camera +1F4F8 ; fully-qualified # 📸 E1.0 camera with flash +1F4F9 ; fully-qualified # 📹 E0.6 video camera +1F4FC ; fully-qualified # 📼 E0.6 videocassette +1F50D ; fully-qualified # 🔍 E0.6 magnifying glass tilted left +1F50E ; fully-qualified # 🔎 E0.6 magnifying glass tilted right +1F56F FE0F ; fully-qualified # 🕯️ E0.7 candle +1F56F ; unqualified # 🕯 E0.7 candle +1F4A1 ; fully-qualified # 💡 E0.6 light bulb +1F526 ; fully-qualified # 🔦 E0.6 flashlight +1F3EE ; fully-qualified # 🏮 E0.6 red paper lantern +1FA94 ; fully-qualified # 🪔 E12.0 diya lamp + +# subgroup: book-paper +1F4D4 ; fully-qualified # 📔 E0.6 notebook with decorative cover +1F4D5 ; fully-qualified # 📕 E0.6 closed book +1F4D6 ; fully-qualified # 📖 E0.6 open book +1F4D7 ; fully-qualified # 📗 E0.6 green book +1F4D8 ; fully-qualified # 📘 E0.6 blue book +1F4D9 ; fully-qualified # 📙 E0.6 orange book +1F4DA ; fully-qualified # 📚 E0.6 books +1F4D3 ; fully-qualified # 📓 E0.6 notebook +1F4D2 ; fully-qualified # 📒 E0.6 ledger +1F4C3 ; fully-qualified # 📃 E0.6 page with curl +1F4DC ; fully-qualified # 📜 E0.6 scroll +1F4C4 ; fully-qualified # 📄 E0.6 page facing up +1F4F0 ; fully-qualified # 📰 E0.6 newspaper +1F5DE FE0F ; fully-qualified # 🗞️ E0.7 rolled-up newspaper +1F5DE ; unqualified # 🗞 E0.7 rolled-up newspaper +1F4D1 ; fully-qualified # 📑 E0.6 bookmark tabs +1F516 ; fully-qualified # 🔖 E0.6 bookmark +1F3F7 FE0F ; fully-qualified # 🏷️ E0.7 label +1F3F7 ; unqualified # 🏷 E0.7 label + +# subgroup: money +1F4B0 ; fully-qualified # 💰 E0.6 money bag +1FA99 ; fully-qualified # 🪙 E13.0 coin +1F4B4 ; fully-qualified # 💴 E0.6 yen banknote +1F4B5 ; fully-qualified # 💵 E0.6 dollar banknote +1F4B6 ; fully-qualified # 💶 E1.0 euro banknote +1F4B7 ; fully-qualified # 💷 E1.0 pound banknote +1F4B8 ; fully-qualified # 💸 E0.6 money with wings +1F4B3 ; fully-qualified # 💳 E0.6 credit card +1F9FE ; fully-qualified # 🧾 E11.0 receipt +1F4B9 ; fully-qualified # 💹 E0.6 chart increasing with yen + +# subgroup: mail +2709 FE0F ; fully-qualified # ✉️ E0.6 envelope +2709 ; unqualified # ✉ E0.6 envelope +1F4E7 ; fully-qualified # 📧 E0.6 e-mail +1F4E8 ; fully-qualified # 📨 E0.6 incoming envelope +1F4E9 ; fully-qualified # 📩 E0.6 envelope with arrow +1F4E4 ; fully-qualified # 📤 E0.6 outbox tray +1F4E5 ; fully-qualified # 📥 E0.6 inbox tray +1F4E6 ; fully-qualified # 📦 E0.6 package +1F4EB ; fully-qualified # 📫 E0.6 closed mailbox with raised flag +1F4EA ; fully-qualified # 📪 E0.6 closed mailbox with lowered flag +1F4EC ; fully-qualified # 📬 E0.7 open mailbox with raised flag +1F4ED ; fully-qualified # 📭 E0.7 open mailbox with lowered flag +1F4EE ; fully-qualified # 📮 E0.6 postbox +1F5F3 FE0F ; fully-qualified # 🗳️ E0.7 ballot box with ballot +1F5F3 ; unqualified # 🗳 E0.7 ballot box with ballot + +# subgroup: writing +270F FE0F ; fully-qualified # ✏️ E0.6 pencil +270F ; unqualified # ✏ E0.6 pencil +2712 FE0F ; fully-qualified # ✒️ E0.6 black nib +2712 ; unqualified # ✒ E0.6 black nib +1F58B FE0F ; fully-qualified # 🖋️ E0.7 fountain pen +1F58B ; unqualified # 🖋 E0.7 fountain pen +1F58A FE0F ; fully-qualified # 🖊️ E0.7 pen +1F58A ; unqualified # 🖊 E0.7 pen +1F58C FE0F ; fully-qualified # 🖌️ E0.7 paintbrush +1F58C ; unqualified # 🖌 E0.7 paintbrush +1F58D FE0F ; fully-qualified # 🖍️ E0.7 crayon +1F58D ; unqualified # 🖍 E0.7 crayon +1F4DD ; fully-qualified # 📝 E0.6 memo + +# subgroup: office +1F4BC ; fully-qualified # 💼 E0.6 briefcase +1F4C1 ; fully-qualified # 📁 E0.6 file folder +1F4C2 ; fully-qualified # 📂 E0.6 open file folder +1F5C2 FE0F ; fully-qualified # 🗂️ E0.7 card index dividers +1F5C2 ; unqualified # 🗂 E0.7 card index dividers +1F4C5 ; fully-qualified # 📅 E0.6 calendar +1F4C6 ; fully-qualified # 📆 E0.6 tear-off calendar +1F5D2 FE0F ; fully-qualified # 🗒️ E0.7 spiral notepad +1F5D2 ; unqualified # 🗒 E0.7 spiral notepad +1F5D3 FE0F ; fully-qualified # 🗓️ E0.7 spiral calendar +1F5D3 ; unqualified # 🗓 E0.7 spiral calendar +1F4C7 ; fully-qualified # 📇 E0.6 card index +1F4C8 ; fully-qualified # 📈 E0.6 chart increasing +1F4C9 ; fully-qualified # 📉 E0.6 chart decreasing +1F4CA ; fully-qualified # 📊 E0.6 bar chart +1F4CB ; fully-qualified # 📋 E0.6 clipboard +1F4CC ; fully-qualified # 📌 E0.6 pushpin +1F4CD ; fully-qualified # 📍 E0.6 round pushpin +1F4CE ; fully-qualified # 📎 E0.6 paperclip +1F587 FE0F ; fully-qualified # 🖇️ E0.7 linked paperclips +1F587 ; unqualified # 🖇 E0.7 linked paperclips +1F4CF ; fully-qualified # 📏 E0.6 straight ruler +1F4D0 ; fully-qualified # 📐 E0.6 triangular ruler +2702 FE0F ; fully-qualified # ✂️ E0.6 scissors +2702 ; unqualified # ✂ E0.6 scissors +1F5C3 FE0F ; fully-qualified # 🗃️ E0.7 card file box +1F5C3 ; unqualified # 🗃 E0.7 card file box +1F5C4 FE0F ; fully-qualified # 🗄️ E0.7 file cabinet +1F5C4 ; unqualified # 🗄 E0.7 file cabinet +1F5D1 FE0F ; fully-qualified # 🗑️ E0.7 wastebasket +1F5D1 ; unqualified # 🗑 E0.7 wastebasket + +# subgroup: lock +1F512 ; fully-qualified # 🔒 E0.6 locked +1F513 ; fully-qualified # 🔓 E0.6 unlocked +1F50F ; fully-qualified # 🔏 E0.6 locked with pen +1F510 ; fully-qualified # 🔐 E0.6 locked with key +1F511 ; fully-qualified # 🔑 E0.6 key +1F5DD FE0F ; fully-qualified # 🗝️ E0.7 old key +1F5DD ; unqualified # 🗝 E0.7 old key + +# subgroup: tool +1F528 ; fully-qualified # 🔨 E0.6 hammer +1FA93 ; fully-qualified # 🪓 E12.0 axe +26CF FE0F ; fully-qualified # ⛏️ E0.7 pick +26CF ; unqualified # ⛏ E0.7 pick +2692 FE0F ; fully-qualified # ⚒️ E1.0 hammer and pick +2692 ; unqualified # ⚒ E1.0 hammer and pick +1F6E0 FE0F ; fully-qualified # 🛠️ E0.7 hammer and wrench +1F6E0 ; unqualified # 🛠 E0.7 hammer and wrench +1F5E1 FE0F ; fully-qualified # 🗡️ E0.7 dagger +1F5E1 ; unqualified # 🗡 E0.7 dagger +2694 FE0F ; fully-qualified # ⚔️ E1.0 crossed swords +2694 ; unqualified # ⚔ E1.0 crossed swords +1F4A3 ; fully-qualified # 💣 E0.6 bomb +1FA83 ; fully-qualified # 🪃 E13.0 boomerang +1F3F9 ; fully-qualified # 🏹 E1.0 bow and arrow +1F6E1 FE0F ; fully-qualified # 🛡️ E0.7 shield +1F6E1 ; unqualified # 🛡 E0.7 shield +1FA9A ; fully-qualified # 🪚 E13.0 carpentry saw +1F527 ; fully-qualified # 🔧 E0.6 wrench +1FA9B ; fully-qualified # 🪛 E13.0 screwdriver +1F529 ; fully-qualified # 🔩 E0.6 nut and bolt +2699 FE0F ; fully-qualified # ⚙️ E1.0 gear +2699 ; unqualified # ⚙ E1.0 gear +1F5DC FE0F ; fully-qualified # 🗜️ E0.7 clamp +1F5DC ; unqualified # 🗜 E0.7 clamp +2696 FE0F ; fully-qualified # ⚖️ E1.0 balance scale +2696 ; unqualified # ⚖ E1.0 balance scale +1F9AF ; fully-qualified # 🦯 E12.0 white cane +1F517 ; fully-qualified # 🔗 E0.6 link +26D3 FE0F ; fully-qualified # ⛓️ E0.7 chains +26D3 ; unqualified # ⛓ E0.7 chains +1FA9D ; fully-qualified # 🪝 E13.0 hook +1F9F0 ; fully-qualified # 🧰 E11.0 toolbox +1F9F2 ; fully-qualified # 🧲 E11.0 magnet +1FA9C ; fully-qualified # 🪜 E13.0 ladder + +# subgroup: science +2697 FE0F ; fully-qualified # ⚗️ E1.0 alembic +2697 ; unqualified # ⚗ E1.0 alembic +1F9EA ; fully-qualified # 🧪 E11.0 test tube +1F9EB ; fully-qualified # 🧫 E11.0 petri dish +1F9EC ; fully-qualified # 🧬 E11.0 dna +1F52C ; fully-qualified # 🔬 E1.0 microscope +1F52D ; fully-qualified # 🔭 E1.0 telescope +1F4E1 ; fully-qualified # 📡 E0.6 satellite antenna + +# subgroup: medical +1F489 ; fully-qualified # 💉 E0.6 syringe +1FA78 ; fully-qualified # 🩸 E12.0 drop of blood +1F48A ; fully-qualified # 💊 E0.6 pill +1FA79 ; fully-qualified # 🩹 E12.0 adhesive bandage +1FA7C ; fully-qualified # 🩼 E14.0 crutch +1FA7A ; fully-qualified # 🩺 E12.0 stethoscope +1FA7B ; fully-qualified # 🩻 E14.0 x-ray + +# subgroup: household +1F6AA ; fully-qualified # 🚪 E0.6 door +1F6D7 ; fully-qualified # 🛗 E13.0 elevator +1FA9E ; fully-qualified # 🪞 E13.0 mirror +1FA9F ; fully-qualified # 🪟 E13.0 window +1F6CF FE0F ; fully-qualified # 🛏️ E0.7 bed +1F6CF ; unqualified # 🛏 E0.7 bed +1F6CB FE0F ; fully-qualified # 🛋️ E0.7 couch and lamp +1F6CB ; unqualified # 🛋 E0.7 couch and lamp +1FA91 ; fully-qualified # 🪑 E12.0 chair +1F6BD ; fully-qualified # 🚽 E0.6 toilet +1FAA0 ; fully-qualified # 🪠 E13.0 plunger +1F6BF ; fully-qualified # 🚿 E1.0 shower +1F6C1 ; fully-qualified # 🛁 E1.0 bathtub +1FAA4 ; fully-qualified # 🪤 E13.0 mouse trap +1FA92 ; fully-qualified # 🪒 E12.0 razor +1F9F4 ; fully-qualified # 🧴 E11.0 lotion bottle +1F9F7 ; fully-qualified # 🧷 E11.0 safety pin +1F9F9 ; fully-qualified # 🧹 E11.0 broom +1F9FA ; fully-qualified # 🧺 E11.0 basket +1F9FB ; fully-qualified # 🧻 E11.0 roll of paper +1FAA3 ; fully-qualified # 🪣 E13.0 bucket +1F9FC ; fully-qualified # 🧼 E11.0 soap +1FAE7 ; fully-qualified # 🫧 E14.0 bubbles +1FAA5 ; fully-qualified # 🪥 E13.0 toothbrush +1F9FD ; fully-qualified # 🧽 E11.0 sponge +1F9EF ; fully-qualified # 🧯 E11.0 fire extinguisher +1F6D2 ; fully-qualified # 🛒 E3.0 shopping cart + +# subgroup: other-object +1F6AC ; fully-qualified # 🚬 E0.6 cigarette +26B0 FE0F ; fully-qualified # ⚰️ E1.0 coffin +26B0 ; unqualified # ⚰ E1.0 coffin +1FAA6 ; fully-qualified # 🪦 E13.0 headstone +26B1 FE0F ; fully-qualified # ⚱️ E1.0 funeral urn +26B1 ; unqualified # ⚱ E1.0 funeral urn +1F9FF ; fully-qualified # 🧿 E11.0 nazar amulet +1FAAC ; fully-qualified # 🪬 E14.0 hamsa +1F5FF ; fully-qualified # 🗿 E0.6 moai +1FAA7 ; fully-qualified # 🪧 E13.0 placard +1FAAA ; fully-qualified # 🪪 E14.0 identification card + +# Objects subtotal: 310 +# Objects subtotal: 310 w/o modifiers + +# group: Symbols + +# subgroup: transport-sign +1F3E7 ; fully-qualified # 🏧 E0.6 ATM sign +1F6AE ; fully-qualified # 🚮 E1.0 litter in bin sign +1F6B0 ; fully-qualified # 🚰 E1.0 potable water +267F ; fully-qualified # ♿ E0.6 wheelchair symbol +1F6B9 ; fully-qualified # 🚹 E0.6 men’s room +1F6BA ; fully-qualified # 🚺 E0.6 women’s room +1F6BB ; fully-qualified # 🚻 E0.6 restroom +1F6BC ; fully-qualified # 🚼 E0.6 baby symbol +1F6BE ; fully-qualified # 🚾 E0.6 water closet +1F6C2 ; fully-qualified # 🛂 E1.0 passport control +1F6C3 ; fully-qualified # 🛃 E1.0 customs +1F6C4 ; fully-qualified # 🛄 E1.0 baggage claim +1F6C5 ; fully-qualified # 🛅 E1.0 left luggage + +# subgroup: warning +26A0 FE0F ; fully-qualified # ⚠️ E0.6 warning +26A0 ; unqualified # ⚠ E0.6 warning +1F6B8 ; fully-qualified # 🚸 E1.0 children crossing +26D4 ; fully-qualified # ⛔ E0.6 no entry +1F6AB ; fully-qualified # 🚫 E0.6 prohibited +1F6B3 ; fully-qualified # 🚳 E1.0 no bicycles +1F6AD ; fully-qualified # 🚭 E0.6 no smoking +1F6AF ; fully-qualified # 🚯 E1.0 no littering +1F6B1 ; fully-qualified # 🚱 E1.0 non-potable water +1F6B7 ; fully-qualified # 🚷 E1.0 no pedestrians +1F4F5 ; fully-qualified # 📵 E1.0 no mobile phones +1F51E ; fully-qualified # 🔞 E0.6 no one under eighteen +2622 FE0F ; fully-qualified # ☢️ E1.0 radioactive +2622 ; unqualified # ☢ E1.0 radioactive +2623 FE0F ; fully-qualified # ☣️ E1.0 biohazard +2623 ; unqualified # ☣ E1.0 biohazard + +# subgroup: arrow +2B06 FE0F ; fully-qualified # ⬆️ E0.6 up arrow +2B06 ; unqualified # ⬆ E0.6 up arrow +2197 FE0F ; fully-qualified # ↗️ E0.6 up-right arrow +2197 ; unqualified # ↗ E0.6 up-right arrow +27A1 FE0F ; fully-qualified # ➡️ E0.6 right arrow +27A1 ; unqualified # ➡ E0.6 right arrow +2198 FE0F ; fully-qualified # ↘️ E0.6 down-right arrow +2198 ; unqualified # ↘ E0.6 down-right arrow +2B07 FE0F ; fully-qualified # ⬇️ E0.6 down arrow +2B07 ; unqualified # ⬇ E0.6 down arrow +2199 FE0F ; fully-qualified # ↙️ E0.6 down-left arrow +2199 ; unqualified # ↙ E0.6 down-left arrow +2B05 FE0F ; fully-qualified # ⬅️ E0.6 left arrow +2B05 ; unqualified # ⬅ E0.6 left arrow +2196 FE0F ; fully-qualified # ↖️ E0.6 up-left arrow +2196 ; unqualified # ↖ E0.6 up-left arrow +2195 FE0F ; fully-qualified # ↕️ E0.6 up-down arrow +2195 ; unqualified # ↕ E0.6 up-down arrow +2194 FE0F ; fully-qualified # ↔️ E0.6 left-right arrow +2194 ; unqualified # ↔ E0.6 left-right arrow +21A9 FE0F ; fully-qualified # ↩️ E0.6 right arrow curving left +21A9 ; unqualified # ↩ E0.6 right arrow curving left +21AA FE0F ; fully-qualified # ↪️ E0.6 left arrow curving right +21AA ; unqualified # ↪ E0.6 left arrow curving right +2934 FE0F ; fully-qualified # ⤴️ E0.6 right arrow curving up +2934 ; unqualified # ⤴ E0.6 right arrow curving up +2935 FE0F ; fully-qualified # ⤵️ E0.6 right arrow curving down +2935 ; unqualified # ⤵ E0.6 right arrow curving down +1F503 ; fully-qualified # 🔃 E0.6 clockwise vertical arrows +1F504 ; fully-qualified # 🔄 E1.0 counterclockwise arrows button +1F519 ; fully-qualified # 🔙 E0.6 BACK arrow +1F51A ; fully-qualified # 🔚 E0.6 END arrow +1F51B ; fully-qualified # 🔛 E0.6 ON! arrow +1F51C ; fully-qualified # 🔜 E0.6 SOON arrow +1F51D ; fully-qualified # 🔝 E0.6 TOP arrow + +# subgroup: religion +1F6D0 ; fully-qualified # 🛐 E1.0 place of worship +269B FE0F ; fully-qualified # ⚛️ E1.0 atom symbol +269B ; unqualified # ⚛ E1.0 atom symbol +1F549 FE0F ; fully-qualified # 🕉️ E0.7 om +1F549 ; unqualified # 🕉 E0.7 om +2721 FE0F ; fully-qualified # ✡️ E0.7 star of David +2721 ; unqualified # ✡ E0.7 star of David +2638 FE0F ; fully-qualified # ☸️ E0.7 wheel of dharma +2638 ; unqualified # ☸ E0.7 wheel of dharma +262F FE0F ; fully-qualified # ☯️ E0.7 yin yang +262F ; unqualified # ☯ E0.7 yin yang +271D FE0F ; fully-qualified # ✝️ E0.7 latin cross +271D ; unqualified # ✝ E0.7 latin cross +2626 FE0F ; fully-qualified # ☦️ E1.0 orthodox cross +2626 ; unqualified # ☦ E1.0 orthodox cross +262A FE0F ; fully-qualified # ☪️ E0.7 star and crescent +262A ; unqualified # ☪ E0.7 star and crescent +262E FE0F ; fully-qualified # ☮️ E1.0 peace symbol +262E ; unqualified # ☮ E1.0 peace symbol +1F54E ; fully-qualified # 🕎 E1.0 menorah +1F52F ; fully-qualified # 🔯 E0.6 dotted six-pointed star +1FAAF ; fully-qualified # 🪯 E15.0 khanda + +# subgroup: zodiac +2648 ; fully-qualified # ♈ E0.6 Aries +2649 ; fully-qualified # ♉ E0.6 Taurus +264A ; fully-qualified # ♊ E0.6 Gemini +264B ; fully-qualified # ♋ E0.6 Cancer +264C ; fully-qualified # ♌ E0.6 Leo +264D ; fully-qualified # ♍ E0.6 Virgo +264E ; fully-qualified # ♎ E0.6 Libra +264F ; fully-qualified # ♏ E0.6 Scorpio +2650 ; fully-qualified # ♐ E0.6 Sagittarius +2651 ; fully-qualified # ♑ E0.6 Capricorn +2652 ; fully-qualified # ♒ E0.6 Aquarius +2653 ; fully-qualified # ♓ E0.6 Pisces +26CE ; fully-qualified # ⛎ E0.6 Ophiuchus + +# subgroup: av-symbol +1F500 ; fully-qualified # 🔀 E1.0 shuffle tracks button +1F501 ; fully-qualified # 🔁 E1.0 repeat button +1F502 ; fully-qualified # 🔂 E1.0 repeat single button +25B6 FE0F ; fully-qualified # ▶️ E0.6 play button +25B6 ; unqualified # ▶ E0.6 play button +23E9 ; fully-qualified # ⏩ E0.6 fast-forward button +23ED FE0F ; fully-qualified # ⏭️ E0.7 next track button +23ED ; unqualified # ⏭ E0.7 next track button +23EF FE0F ; fully-qualified # ⏯️ E1.0 play or pause button +23EF ; unqualified # ⏯ E1.0 play or pause button +25C0 FE0F ; fully-qualified # ◀️ E0.6 reverse button +25C0 ; unqualified # ◀ E0.6 reverse button +23EA ; fully-qualified # ⏪ E0.6 fast reverse button +23EE FE0F ; fully-qualified # ⏮️ E0.7 last track button +23EE ; unqualified # ⏮ E0.7 last track button +1F53C ; fully-qualified # 🔼 E0.6 upwards button +23EB ; fully-qualified # ⏫ E0.6 fast up button +1F53D ; fully-qualified # 🔽 E0.6 downwards button +23EC ; fully-qualified # ⏬ E0.6 fast down button +23F8 FE0F ; fully-qualified # ⏸️ E0.7 pause button +23F8 ; unqualified # ⏸ E0.7 pause button +23F9 FE0F ; fully-qualified # ⏹️ E0.7 stop button +23F9 ; unqualified # ⏹ E0.7 stop button +23FA FE0F ; fully-qualified # ⏺️ E0.7 record button +23FA ; unqualified # ⏺ E0.7 record button +23CF FE0F ; fully-qualified # ⏏️ E1.0 eject button +23CF ; unqualified # ⏏ E1.0 eject button +1F3A6 ; fully-qualified # 🎦 E0.6 cinema +1F505 ; fully-qualified # 🔅 E1.0 dim button +1F506 ; fully-qualified # 🔆 E1.0 bright button +1F4F6 ; fully-qualified # 📶 E0.6 antenna bars +1F6DC ; fully-qualified # 🛜 E15.0 wireless +1F4F3 ; fully-qualified # 📳 E0.6 vibration mode +1F4F4 ; fully-qualified # 📴 E0.6 mobile phone off + +# subgroup: gender +2640 FE0F ; fully-qualified # ♀️ E4.0 female sign +2640 ; unqualified # ♀ E4.0 female sign +2642 FE0F ; fully-qualified # ♂️ E4.0 male sign +2642 ; unqualified # ♂ E4.0 male sign +26A7 FE0F ; fully-qualified # ⚧️ E13.0 transgender symbol +26A7 ; unqualified # ⚧ E13.0 transgender symbol + +# subgroup: math +2716 FE0F ; fully-qualified # ✖️ E0.6 multiply +2716 ; unqualified # ✖ E0.6 multiply +2795 ; fully-qualified # ➕ E0.6 plus +2796 ; fully-qualified # ➖ E0.6 minus +2797 ; fully-qualified # ➗ E0.6 divide +1F7F0 ; fully-qualified # 🟰 E14.0 heavy equals sign +267E FE0F ; fully-qualified # ♾️ E11.0 infinity +267E ; unqualified # ♾ E11.0 infinity + +# subgroup: punctuation +203C FE0F ; fully-qualified # ‼️ E0.6 double exclamation mark +203C ; unqualified # ‼ E0.6 double exclamation mark +2049 FE0F ; fully-qualified # ⁉️ E0.6 exclamation question mark +2049 ; unqualified # ⁉ E0.6 exclamation question mark +2753 ; fully-qualified # ❓ E0.6 red question mark +2754 ; fully-qualified # ❔ E0.6 white question mark +2755 ; fully-qualified # ❕ E0.6 white exclamation mark +2757 ; fully-qualified # ❗ E0.6 red exclamation mark +3030 FE0F ; fully-qualified # 〰️ E0.6 wavy dash +3030 ; unqualified # 〰 E0.6 wavy dash + +# subgroup: currency +1F4B1 ; fully-qualified # 💱 E0.6 currency exchange +1F4B2 ; fully-qualified # 💲 E0.6 heavy dollar sign + +# subgroup: other-symbol +2695 FE0F ; fully-qualified # ⚕️ E4.0 medical symbol +2695 ; unqualified # ⚕ E4.0 medical symbol +267B FE0F ; fully-qualified # ♻️ E0.6 recycling symbol +267B ; unqualified # ♻ E0.6 recycling symbol +269C FE0F ; fully-qualified # ⚜️ E1.0 fleur-de-lis +269C ; unqualified # ⚜ E1.0 fleur-de-lis +1F531 ; fully-qualified # 🔱 E0.6 trident emblem +1F4DB ; fully-qualified # 📛 E0.6 name badge +1F530 ; fully-qualified # 🔰 E0.6 Japanese symbol for beginner +2B55 ; fully-qualified # ⭕ E0.6 hollow red circle +2705 ; fully-qualified # ✅ E0.6 check mark button +2611 FE0F ; fully-qualified # ☑️ E0.6 check box with check +2611 ; unqualified # ☑ E0.6 check box with check +2714 FE0F ; fully-qualified # ✔️ E0.6 check mark +2714 ; unqualified # ✔ E0.6 check mark +274C ; fully-qualified # ❌ E0.6 cross mark +274E ; fully-qualified # ❎ E0.6 cross mark button +27B0 ; fully-qualified # ➰ E0.6 curly loop +27BF ; fully-qualified # ➿ E1.0 double curly loop +303D FE0F ; fully-qualified # 〽️ E0.6 part alternation mark +303D ; unqualified # 〽 E0.6 part alternation mark +2733 FE0F ; fully-qualified # ✳️ E0.6 eight-spoked asterisk +2733 ; unqualified # ✳ E0.6 eight-spoked asterisk +2734 FE0F ; fully-qualified # ✴️ E0.6 eight-pointed star +2734 ; unqualified # ✴ E0.6 eight-pointed star +2747 FE0F ; fully-qualified # ❇️ E0.6 sparkle +2747 ; unqualified # ❇ E0.6 sparkle +00A9 FE0F ; fully-qualified # ©️ E0.6 copyright +00A9 ; unqualified # © E0.6 copyright +00AE FE0F ; fully-qualified # ®️ E0.6 registered +00AE ; unqualified # ® E0.6 registered +2122 FE0F ; fully-qualified # ™️ E0.6 trade mark +2122 ; unqualified # ™ E0.6 trade mark + +# subgroup: keycap +0023 FE0F 20E3 ; fully-qualified # #️⃣ E0.6 keycap: # +0023 20E3 ; unqualified # #⃣ E0.6 keycap: # +002A FE0F 20E3 ; fully-qualified # *️⃣ E2.0 keycap: * +002A 20E3 ; unqualified # *⃣ E2.0 keycap: * +0030 FE0F 20E3 ; fully-qualified # 0️⃣ E0.6 keycap: 0 +0030 20E3 ; unqualified # 0⃣ E0.6 keycap: 0 +0031 FE0F 20E3 ; fully-qualified # 1️⃣ E0.6 keycap: 1 +0031 20E3 ; unqualified # 1⃣ E0.6 keycap: 1 +0032 FE0F 20E3 ; fully-qualified # 2️⃣ E0.6 keycap: 2 +0032 20E3 ; unqualified # 2⃣ E0.6 keycap: 2 +0033 FE0F 20E3 ; fully-qualified # 3️⃣ E0.6 keycap: 3 +0033 20E3 ; unqualified # 3⃣ E0.6 keycap: 3 +0034 FE0F 20E3 ; fully-qualified # 4️⃣ E0.6 keycap: 4 +0034 20E3 ; unqualified # 4⃣ E0.6 keycap: 4 +0035 FE0F 20E3 ; fully-qualified # 5️⃣ E0.6 keycap: 5 +0035 20E3 ; unqualified # 5⃣ E0.6 keycap: 5 +0036 FE0F 20E3 ; fully-qualified # 6️⃣ E0.6 keycap: 6 +0036 20E3 ; unqualified # 6⃣ E0.6 keycap: 6 +0037 FE0F 20E3 ; fully-qualified # 7️⃣ E0.6 keycap: 7 +0037 20E3 ; unqualified # 7⃣ E0.6 keycap: 7 +0038 FE0F 20E3 ; fully-qualified # 8️⃣ E0.6 keycap: 8 +0038 20E3 ; unqualified # 8⃣ E0.6 keycap: 8 +0039 FE0F 20E3 ; fully-qualified # 9️⃣ E0.6 keycap: 9 +0039 20E3 ; unqualified # 9⃣ E0.6 keycap: 9 +1F51F ; fully-qualified # 🔟 E0.6 keycap: 10 + +# subgroup: alphanum +1F520 ; fully-qualified # 🔠 E0.6 input latin uppercase +1F521 ; fully-qualified # 🔡 E0.6 input latin lowercase +1F522 ; fully-qualified # 🔢 E0.6 input numbers +1F523 ; fully-qualified # 🔣 E0.6 input symbols +1F524 ; fully-qualified # 🔤 E0.6 input latin letters +1F170 FE0F ; fully-qualified # 🅰️ E0.6 A button (blood type) +1F170 ; unqualified # 🅰 E0.6 A button (blood type) +1F18E ; fully-qualified # 🆎 E0.6 AB button (blood type) +1F171 FE0F ; fully-qualified # 🅱️ E0.6 B button (blood type) +1F171 ; unqualified # 🅱 E0.6 B button (blood type) +1F191 ; fully-qualified # 🆑 E0.6 CL button +1F192 ; fully-qualified # 🆒 E0.6 COOL button +1F193 ; fully-qualified # 🆓 E0.6 FREE button +2139 FE0F ; fully-qualified # ℹ️ E0.6 information +2139 ; unqualified # ℹ E0.6 information +1F194 ; fully-qualified # 🆔 E0.6 ID button +24C2 FE0F ; fully-qualified # Ⓜ️ E0.6 circled M +24C2 ; unqualified # Ⓜ E0.6 circled M +1F195 ; fully-qualified # 🆕 E0.6 NEW button +1F196 ; fully-qualified # 🆖 E0.6 NG button +1F17E FE0F ; fully-qualified # 🅾️ E0.6 O button (blood type) +1F17E ; unqualified # 🅾 E0.6 O button (blood type) +1F197 ; fully-qualified # 🆗 E0.6 OK button +1F17F FE0F ; fully-qualified # 🅿️ E0.6 P button +1F17F ; unqualified # 🅿 E0.6 P button +1F198 ; fully-qualified # 🆘 E0.6 SOS button +1F199 ; fully-qualified # 🆙 E0.6 UP! button +1F19A ; fully-qualified # 🆚 E0.6 VS button +1F201 ; fully-qualified # 🈁 E0.6 Japanese “here” button +1F202 FE0F ; fully-qualified # 🈂️ E0.6 Japanese “service charge” button +1F202 ; unqualified # 🈂 E0.6 Japanese “service charge” button +1F237 FE0F ; fully-qualified # 🈷️ E0.6 Japanese “monthly amount” button +1F237 ; unqualified # 🈷 E0.6 Japanese “monthly amount” button +1F236 ; fully-qualified # 🈶 E0.6 Japanese “not free of charge” button +1F22F ; fully-qualified # 🈯 E0.6 Japanese “reserved” button +1F250 ; fully-qualified # 🉐 E0.6 Japanese “bargain” button +1F239 ; fully-qualified # 🈹 E0.6 Japanese “discount” button +1F21A ; fully-qualified # 🈚 E0.6 Japanese “free of charge” button +1F232 ; fully-qualified # 🈲 E0.6 Japanese “prohibited” button +1F251 ; fully-qualified # 🉑 E0.6 Japanese “acceptable” button +1F238 ; fully-qualified # 🈸 E0.6 Japanese “application” button +1F234 ; fully-qualified # 🈴 E0.6 Japanese “passing grade” button +1F233 ; fully-qualified # 🈳 E0.6 Japanese “vacancy” button +3297 FE0F ; fully-qualified # ㊗️ E0.6 Japanese “congratulations” button +3297 ; unqualified # ㊗ E0.6 Japanese “congratulations” button +3299 FE0F ; fully-qualified # ㊙️ E0.6 Japanese “secret” button +3299 ; unqualified # ㊙ E0.6 Japanese “secret” button +1F23A ; fully-qualified # 🈺 E0.6 Japanese “open for business” button +1F235 ; fully-qualified # 🈵 E0.6 Japanese “no vacancy” button + +# subgroup: geometric +1F534 ; fully-qualified # 🔴 E0.6 red circle +1F7E0 ; fully-qualified # 🟠 E12.0 orange circle +1F7E1 ; fully-qualified # 🟡 E12.0 yellow circle +1F7E2 ; fully-qualified # 🟢 E12.0 green circle +1F535 ; fully-qualified # 🔵 E0.6 blue circle +1F7E3 ; fully-qualified # 🟣 E12.0 purple circle +1F7E4 ; fully-qualified # 🟤 E12.0 brown circle +26AB ; fully-qualified # ⚫ E0.6 black circle +26AA ; fully-qualified # ⚪ E0.6 white circle +1F7E5 ; fully-qualified # 🟥 E12.0 red square +1F7E7 ; fully-qualified # 🟧 E12.0 orange square +1F7E8 ; fully-qualified # 🟨 E12.0 yellow square +1F7E9 ; fully-qualified # 🟩 E12.0 green square +1F7E6 ; fully-qualified # 🟦 E12.0 blue square +1F7EA ; fully-qualified # 🟪 E12.0 purple square +1F7EB ; fully-qualified # 🟫 E12.0 brown square +2B1B ; fully-qualified # ⬛ E0.6 black large square +2B1C ; fully-qualified # ⬜ E0.6 white large square +25FC FE0F ; fully-qualified # ◼️ E0.6 black medium square +25FC ; unqualified # ◼ E0.6 black medium square +25FB FE0F ; fully-qualified # ◻️ E0.6 white medium square +25FB ; unqualified # ◻ E0.6 white medium square +25FE ; fully-qualified # ◾ E0.6 black medium-small square +25FD ; fully-qualified # ◽ E0.6 white medium-small square +25AA FE0F ; fully-qualified # ▪️ E0.6 black small square +25AA ; unqualified # ▪ E0.6 black small square +25AB FE0F ; fully-qualified # ▫️ E0.6 white small square +25AB ; unqualified # ▫ E0.6 white small square +1F536 ; fully-qualified # 🔶 E0.6 large orange diamond +1F537 ; fully-qualified # 🔷 E0.6 large blue diamond +1F538 ; fully-qualified # 🔸 E0.6 small orange diamond +1F539 ; fully-qualified # 🔹 E0.6 small blue diamond +1F53A ; fully-qualified # 🔺 E0.6 red triangle pointed up +1F53B ; fully-qualified # 🔻 E0.6 red triangle pointed down +1F4A0 ; fully-qualified # 💠 E0.6 diamond with a dot +1F518 ; fully-qualified # 🔘 E0.6 radio button +1F533 ; fully-qualified # 🔳 E0.6 white square button +1F532 ; fully-qualified # 🔲 E0.6 black square button + +# Symbols subtotal: 304 +# Symbols subtotal: 304 w/o modifiers + +# group: Flags + +# subgroup: flag +1F3C1 ; fully-qualified # 🏁 E0.6 chequered flag +1F6A9 ; fully-qualified # 🚩 E0.6 triangular flag +1F38C ; fully-qualified # 🎌 E0.6 crossed flags +1F3F4 ; fully-qualified # 🏴 E1.0 black flag +1F3F3 FE0F ; fully-qualified # 🏳️ E0.7 white flag +1F3F3 ; unqualified # 🏳 E0.7 white flag +1F3F3 FE0F 200D 1F308 ; fully-qualified # 🏳️‍🌈 E4.0 rainbow flag +1F3F3 200D 1F308 ; unqualified # 🏳‍🌈 E4.0 rainbow flag +1F3F3 FE0F 200D 26A7 FE0F ; fully-qualified # 🏳️‍⚧️ E13.0 transgender flag +1F3F3 200D 26A7 FE0F ; unqualified # 🏳‍⚧️ E13.0 transgender flag +1F3F3 FE0F 200D 26A7 ; minimally-qualified # 🏳️‍⚧ E13.0 transgender flag +1F3F3 200D 26A7 ; unqualified # 🏳‍⚧ E13.0 transgender flag +1F3F4 200D 2620 FE0F ; fully-qualified # 🏴‍☠️ E11.0 pirate flag +1F3F4 200D 2620 ; minimally-qualified # 🏴‍☠ E11.0 pirate flag + +# subgroup: country-flag +1F1E6 1F1E8 ; fully-qualified # 🇦🇨 E2.0 flag: Ascension Island +1F1E6 1F1E9 ; fully-qualified # 🇦🇩 E2.0 flag: Andorra +1F1E6 1F1EA ; fully-qualified # 🇦🇪 E2.0 flag: United Arab Emirates +1F1E6 1F1EB ; fully-qualified # 🇦🇫 E2.0 flag: Afghanistan +1F1E6 1F1EC ; fully-qualified # 🇦🇬 E2.0 flag: Antigua & Barbuda +1F1E6 1F1EE ; fully-qualified # 🇦🇮 E2.0 flag: Anguilla +1F1E6 1F1F1 ; fully-qualified # 🇦🇱 E2.0 flag: Albania +1F1E6 1F1F2 ; fully-qualified # 🇦🇲 E2.0 flag: Armenia +1F1E6 1F1F4 ; fully-qualified # 🇦🇴 E2.0 flag: Angola +1F1E6 1F1F6 ; fully-qualified # 🇦🇶 E2.0 flag: Antarctica +1F1E6 1F1F7 ; fully-qualified # 🇦🇷 E2.0 flag: Argentina +1F1E6 1F1F8 ; fully-qualified # 🇦🇸 E2.0 flag: American Samoa +1F1E6 1F1F9 ; fully-qualified # 🇦🇹 E2.0 flag: Austria +1F1E6 1F1FA ; fully-qualified # 🇦🇺 E2.0 flag: Australia +1F1E6 1F1FC ; fully-qualified # 🇦🇼 E2.0 flag: Aruba +1F1E6 1F1FD ; fully-qualified # 🇦🇽 E2.0 flag: Åland Islands +1F1E6 1F1FF ; fully-qualified # 🇦🇿 E2.0 flag: Azerbaijan +1F1E7 1F1E6 ; fully-qualified # 🇧🇦 E2.0 flag: Bosnia & Herzegovina +1F1E7 1F1E7 ; fully-qualified # 🇧🇧 E2.0 flag: Barbados +1F1E7 1F1E9 ; fully-qualified # 🇧🇩 E2.0 flag: Bangladesh +1F1E7 1F1EA ; fully-qualified # 🇧🇪 E2.0 flag: Belgium +1F1E7 1F1EB ; fully-qualified # 🇧🇫 E2.0 flag: Burkina Faso +1F1E7 1F1EC ; fully-qualified # 🇧🇬 E2.0 flag: Bulgaria +1F1E7 1F1ED ; fully-qualified # 🇧🇭 E2.0 flag: Bahrain +1F1E7 1F1EE ; fully-qualified # 🇧🇮 E2.0 flag: Burundi +1F1E7 1F1EF ; fully-qualified # 🇧🇯 E2.0 flag: Benin +1F1E7 1F1F1 ; fully-qualified # 🇧🇱 E2.0 flag: St. Barthélemy +1F1E7 1F1F2 ; fully-qualified # 🇧🇲 E2.0 flag: Bermuda +1F1E7 1F1F3 ; fully-qualified # 🇧🇳 E2.0 flag: Brunei +1F1E7 1F1F4 ; fully-qualified # 🇧🇴 E2.0 flag: Bolivia +1F1E7 1F1F6 ; fully-qualified # 🇧🇶 E2.0 flag: Caribbean Netherlands +1F1E7 1F1F7 ; fully-qualified # 🇧🇷 E2.0 flag: Brazil +1F1E7 1F1F8 ; fully-qualified # 🇧🇸 E2.0 flag: Bahamas +1F1E7 1F1F9 ; fully-qualified # 🇧🇹 E2.0 flag: Bhutan +1F1E7 1F1FB ; fully-qualified # 🇧🇻 E2.0 flag: Bouvet Island +1F1E7 1F1FC ; fully-qualified # 🇧🇼 E2.0 flag: Botswana +1F1E7 1F1FE ; fully-qualified # 🇧🇾 E2.0 flag: Belarus +1F1E7 1F1FF ; fully-qualified # 🇧🇿 E2.0 flag: Belize +1F1E8 1F1E6 ; fully-qualified # 🇨🇦 E2.0 flag: Canada +1F1E8 1F1E8 ; fully-qualified # 🇨🇨 E2.0 flag: Cocos (Keeling) Islands +1F1E8 1F1E9 ; fully-qualified # 🇨🇩 E2.0 flag: Congo - Kinshasa +1F1E8 1F1EB ; fully-qualified # 🇨🇫 E2.0 flag: Central African Republic +1F1E8 1F1EC ; fully-qualified # 🇨🇬 E2.0 flag: Congo - Brazzaville +1F1E8 1F1ED ; fully-qualified # 🇨🇭 E2.0 flag: Switzerland +1F1E8 1F1EE ; fully-qualified # 🇨🇮 E2.0 flag: Côte d’Ivoire +1F1E8 1F1F0 ; fully-qualified # 🇨🇰 E2.0 flag: Cook Islands +1F1E8 1F1F1 ; fully-qualified # 🇨🇱 E2.0 flag: Chile +1F1E8 1F1F2 ; fully-qualified # 🇨🇲 E2.0 flag: Cameroon +1F1E8 1F1F3 ; fully-qualified # 🇨🇳 E0.6 flag: China +1F1E8 1F1F4 ; fully-qualified # 🇨🇴 E2.0 flag: Colombia +1F1E8 1F1F5 ; fully-qualified # 🇨🇵 E2.0 flag: Clipperton Island +1F1E8 1F1F7 ; fully-qualified # 🇨🇷 E2.0 flag: Costa Rica +1F1E8 1F1FA ; fully-qualified # 🇨🇺 E2.0 flag: Cuba +1F1E8 1F1FB ; fully-qualified # 🇨🇻 E2.0 flag: Cape Verde +1F1E8 1F1FC ; fully-qualified # 🇨🇼 E2.0 flag: Curaçao +1F1E8 1F1FD ; fully-qualified # 🇨🇽 E2.0 flag: Christmas Island +1F1E8 1F1FE ; fully-qualified # 🇨🇾 E2.0 flag: Cyprus +1F1E8 1F1FF ; fully-qualified # 🇨🇿 E2.0 flag: Czechia +1F1E9 1F1EA ; fully-qualified # 🇩🇪 E0.6 flag: Germany +1F1E9 1F1EC ; fully-qualified # 🇩🇬 E2.0 flag: Diego Garcia +1F1E9 1F1EF ; fully-qualified # 🇩🇯 E2.0 flag: Djibouti +1F1E9 1F1F0 ; fully-qualified # 🇩🇰 E2.0 flag: Denmark +1F1E9 1F1F2 ; fully-qualified # 🇩🇲 E2.0 flag: Dominica +1F1E9 1F1F4 ; fully-qualified # 🇩🇴 E2.0 flag: Dominican Republic +1F1E9 1F1FF ; fully-qualified # 🇩🇿 E2.0 flag: Algeria +1F1EA 1F1E6 ; fully-qualified # 🇪🇦 E2.0 flag: Ceuta & Melilla +1F1EA 1F1E8 ; fully-qualified # 🇪🇨 E2.0 flag: Ecuador +1F1EA 1F1EA ; fully-qualified # 🇪🇪 E2.0 flag: Estonia +1F1EA 1F1EC ; fully-qualified # 🇪🇬 E2.0 flag: Egypt +1F1EA 1F1ED ; fully-qualified # 🇪🇭 E2.0 flag: Western Sahara +1F1EA 1F1F7 ; fully-qualified # 🇪🇷 E2.0 flag: Eritrea +1F1EA 1F1F8 ; fully-qualified # 🇪🇸 E0.6 flag: Spain +1F1EA 1F1F9 ; fully-qualified # 🇪🇹 E2.0 flag: Ethiopia +1F1EA 1F1FA ; fully-qualified # 🇪🇺 E2.0 flag: European Union +1F1EB 1F1EE ; fully-qualified # 🇫🇮 E2.0 flag: Finland +1F1EB 1F1EF ; fully-qualified # 🇫🇯 E2.0 flag: Fiji +1F1EB 1F1F0 ; fully-qualified # 🇫🇰 E2.0 flag: Falkland Islands +1F1EB 1F1F2 ; fully-qualified # 🇫🇲 E2.0 flag: Micronesia +1F1EB 1F1F4 ; fully-qualified # 🇫🇴 E2.0 flag: Faroe Islands +1F1EB 1F1F7 ; fully-qualified # 🇫🇷 E0.6 flag: France +1F1EC 1F1E6 ; fully-qualified # 🇬🇦 E2.0 flag: Gabon +1F1EC 1F1E7 ; fully-qualified # 🇬🇧 E0.6 flag: United Kingdom +1F1EC 1F1E9 ; fully-qualified # 🇬🇩 E2.0 flag: Grenada +1F1EC 1F1EA ; fully-qualified # 🇬🇪 E2.0 flag: Georgia +1F1EC 1F1EB ; fully-qualified # 🇬🇫 E2.0 flag: French Guiana +1F1EC 1F1EC ; fully-qualified # 🇬🇬 E2.0 flag: Guernsey +1F1EC 1F1ED ; fully-qualified # 🇬🇭 E2.0 flag: Ghana +1F1EC 1F1EE ; fully-qualified # 🇬🇮 E2.0 flag: Gibraltar +1F1EC 1F1F1 ; fully-qualified # 🇬🇱 E2.0 flag: Greenland +1F1EC 1F1F2 ; fully-qualified # 🇬🇲 E2.0 flag: Gambia +1F1EC 1F1F3 ; fully-qualified # 🇬🇳 E2.0 flag: Guinea +1F1EC 1F1F5 ; fully-qualified # 🇬🇵 E2.0 flag: Guadeloupe +1F1EC 1F1F6 ; fully-qualified # 🇬🇶 E2.0 flag: Equatorial Guinea +1F1EC 1F1F7 ; fully-qualified # 🇬🇷 E2.0 flag: Greece +1F1EC 1F1F8 ; fully-qualified # 🇬🇸 E2.0 flag: South Georgia & South Sandwich Islands +1F1EC 1F1F9 ; fully-qualified # 🇬🇹 E2.0 flag: Guatemala +1F1EC 1F1FA ; fully-qualified # 🇬🇺 E2.0 flag: Guam +1F1EC 1F1FC ; fully-qualified # 🇬🇼 E2.0 flag: Guinea-Bissau +1F1EC 1F1FE ; fully-qualified # 🇬🇾 E2.0 flag: Guyana +1F1ED 1F1F0 ; fully-qualified # 🇭🇰 E2.0 flag: Hong Kong SAR China +1F1ED 1F1F2 ; fully-qualified # 🇭🇲 E2.0 flag: Heard & McDonald Islands +1F1ED 1F1F3 ; fully-qualified # 🇭🇳 E2.0 flag: Honduras +1F1ED 1F1F7 ; fully-qualified # 🇭🇷 E2.0 flag: Croatia +1F1ED 1F1F9 ; fully-qualified # 🇭🇹 E2.0 flag: Haiti +1F1ED 1F1FA ; fully-qualified # 🇭🇺 E2.0 flag: Hungary +1F1EE 1F1E8 ; fully-qualified # 🇮🇨 E2.0 flag: Canary Islands +1F1EE 1F1E9 ; fully-qualified # 🇮🇩 E2.0 flag: Indonesia +1F1EE 1F1EA ; fully-qualified # 🇮🇪 E2.0 flag: Ireland +1F1EE 1F1F1 ; fully-qualified # 🇮🇱 E2.0 flag: Israel +1F1EE 1F1F2 ; fully-qualified # 🇮🇲 E2.0 flag: Isle of Man +1F1EE 1F1F3 ; fully-qualified # 🇮🇳 E2.0 flag: India +1F1EE 1F1F4 ; fully-qualified # 🇮🇴 E2.0 flag: British Indian Ocean Territory +1F1EE 1F1F6 ; fully-qualified # 🇮🇶 E2.0 flag: Iraq +1F1EE 1F1F7 ; fully-qualified # 🇮🇷 E2.0 flag: Iran +1F1EE 1F1F8 ; fully-qualified # 🇮🇸 E2.0 flag: Iceland +1F1EE 1F1F9 ; fully-qualified # 🇮🇹 E0.6 flag: Italy +1F1EF 1F1EA ; fully-qualified # 🇯🇪 E2.0 flag: Jersey +1F1EF 1F1F2 ; fully-qualified # 🇯🇲 E2.0 flag: Jamaica +1F1EF 1F1F4 ; fully-qualified # 🇯🇴 E2.0 flag: Jordan +1F1EF 1F1F5 ; fully-qualified # 🇯🇵 E0.6 flag: Japan +1F1F0 1F1EA ; fully-qualified # 🇰🇪 E2.0 flag: Kenya +1F1F0 1F1EC ; fully-qualified # 🇰🇬 E2.0 flag: Kyrgyzstan +1F1F0 1F1ED ; fully-qualified # 🇰🇭 E2.0 flag: Cambodia +1F1F0 1F1EE ; fully-qualified # 🇰🇮 E2.0 flag: Kiribati +1F1F0 1F1F2 ; fully-qualified # 🇰🇲 E2.0 flag: Comoros +1F1F0 1F1F3 ; fully-qualified # 🇰🇳 E2.0 flag: St. Kitts & Nevis +1F1F0 1F1F5 ; fully-qualified # 🇰🇵 E2.0 flag: North Korea +1F1F0 1F1F7 ; fully-qualified # 🇰🇷 E0.6 flag: South Korea +1F1F0 1F1FC ; fully-qualified # 🇰🇼 E2.0 flag: Kuwait +1F1F0 1F1FE ; fully-qualified # 🇰🇾 E2.0 flag: Cayman Islands +1F1F0 1F1FF ; fully-qualified # 🇰🇿 E2.0 flag: Kazakhstan +1F1F1 1F1E6 ; fully-qualified # 🇱🇦 E2.0 flag: Laos +1F1F1 1F1E7 ; fully-qualified # 🇱🇧 E2.0 flag: Lebanon +1F1F1 1F1E8 ; fully-qualified # 🇱🇨 E2.0 flag: St. Lucia +1F1F1 1F1EE ; fully-qualified # 🇱🇮 E2.0 flag: Liechtenstein +1F1F1 1F1F0 ; fully-qualified # 🇱🇰 E2.0 flag: Sri Lanka +1F1F1 1F1F7 ; fully-qualified # 🇱🇷 E2.0 flag: Liberia +1F1F1 1F1F8 ; fully-qualified # 🇱🇸 E2.0 flag: Lesotho +1F1F1 1F1F9 ; fully-qualified # 🇱🇹 E2.0 flag: Lithuania +1F1F1 1F1FA ; fully-qualified # 🇱🇺 E2.0 flag: Luxembourg +1F1F1 1F1FB ; fully-qualified # 🇱🇻 E2.0 flag: Latvia +1F1F1 1F1FE ; fully-qualified # 🇱🇾 E2.0 flag: Libya +1F1F2 1F1E6 ; fully-qualified # 🇲🇦 E2.0 flag: Morocco +1F1F2 1F1E8 ; fully-qualified # 🇲🇨 E2.0 flag: Monaco +1F1F2 1F1E9 ; fully-qualified # 🇲🇩 E2.0 flag: Moldova +1F1F2 1F1EA ; fully-qualified # 🇲🇪 E2.0 flag: Montenegro +1F1F2 1F1EB ; fully-qualified # 🇲🇫 E2.0 flag: St. Martin +1F1F2 1F1EC ; fully-qualified # 🇲🇬 E2.0 flag: Madagascar +1F1F2 1F1ED ; fully-qualified # 🇲🇭 E2.0 flag: Marshall Islands +1F1F2 1F1F0 ; fully-qualified # 🇲🇰 E2.0 flag: North Macedonia +1F1F2 1F1F1 ; fully-qualified # 🇲🇱 E2.0 flag: Mali +1F1F2 1F1F2 ; fully-qualified # 🇲🇲 E2.0 flag: Myanmar (Burma) +1F1F2 1F1F3 ; fully-qualified # 🇲🇳 E2.0 flag: Mongolia +1F1F2 1F1F4 ; fully-qualified # 🇲🇴 E2.0 flag: Macao SAR China +1F1F2 1F1F5 ; fully-qualified # 🇲🇵 E2.0 flag: Northern Mariana Islands +1F1F2 1F1F6 ; fully-qualified # 🇲🇶 E2.0 flag: Martinique +1F1F2 1F1F7 ; fully-qualified # 🇲🇷 E2.0 flag: Mauritania +1F1F2 1F1F8 ; fully-qualified # 🇲🇸 E2.0 flag: Montserrat +1F1F2 1F1F9 ; fully-qualified # 🇲🇹 E2.0 flag: Malta +1F1F2 1F1FA ; fully-qualified # 🇲🇺 E2.0 flag: Mauritius +1F1F2 1F1FB ; fully-qualified # 🇲🇻 E2.0 flag: Maldives +1F1F2 1F1FC ; fully-qualified # 🇲🇼 E2.0 flag: Malawi +1F1F2 1F1FD ; fully-qualified # 🇲🇽 E2.0 flag: Mexico +1F1F2 1F1FE ; fully-qualified # 🇲🇾 E2.0 flag: Malaysia +1F1F2 1F1FF ; fully-qualified # 🇲🇿 E2.0 flag: Mozambique +1F1F3 1F1E6 ; fully-qualified # 🇳🇦 E2.0 flag: Namibia +1F1F3 1F1E8 ; fully-qualified # 🇳🇨 E2.0 flag: New Caledonia +1F1F3 1F1EA ; fully-qualified # 🇳🇪 E2.0 flag: Niger +1F1F3 1F1EB ; fully-qualified # 🇳🇫 E2.0 flag: Norfolk Island +1F1F3 1F1EC ; fully-qualified # 🇳🇬 E2.0 flag: Nigeria +1F1F3 1F1EE ; fully-qualified # 🇳🇮 E2.0 flag: Nicaragua +1F1F3 1F1F1 ; fully-qualified # 🇳🇱 E2.0 flag: Netherlands +1F1F3 1F1F4 ; fully-qualified # 🇳🇴 E2.0 flag: Norway +1F1F3 1F1F5 ; fully-qualified # 🇳🇵 E2.0 flag: Nepal +1F1F3 1F1F7 ; fully-qualified # 🇳🇷 E2.0 flag: Nauru +1F1F3 1F1FA ; fully-qualified # 🇳🇺 E2.0 flag: Niue +1F1F3 1F1FF ; fully-qualified # 🇳🇿 E2.0 flag: New Zealand +1F1F4 1F1F2 ; fully-qualified # 🇴🇲 E2.0 flag: Oman +1F1F5 1F1E6 ; fully-qualified # 🇵🇦 E2.0 flag: Panama +1F1F5 1F1EA ; fully-qualified # 🇵🇪 E2.0 flag: Peru +1F1F5 1F1EB ; fully-qualified # 🇵🇫 E2.0 flag: French Polynesia +1F1F5 1F1EC ; fully-qualified # 🇵🇬 E2.0 flag: Papua New Guinea +1F1F5 1F1ED ; fully-qualified # 🇵🇭 E2.0 flag: Philippines +1F1F5 1F1F0 ; fully-qualified # 🇵🇰 E2.0 flag: Pakistan +1F1F5 1F1F1 ; fully-qualified # 🇵🇱 E2.0 flag: Poland +1F1F5 1F1F2 ; fully-qualified # 🇵🇲 E2.0 flag: St. Pierre & Miquelon +1F1F5 1F1F3 ; fully-qualified # 🇵🇳 E2.0 flag: Pitcairn Islands +1F1F5 1F1F7 ; fully-qualified # 🇵🇷 E2.0 flag: Puerto Rico +1F1F5 1F1F8 ; fully-qualified # 🇵🇸 E2.0 flag: Palestinian Territories +1F1F5 1F1F9 ; fully-qualified # 🇵🇹 E2.0 flag: Portugal +1F1F5 1F1FC ; fully-qualified # 🇵🇼 E2.0 flag: Palau +1F1F5 1F1FE ; fully-qualified # 🇵🇾 E2.0 flag: Paraguay +1F1F6 1F1E6 ; fully-qualified # 🇶🇦 E2.0 flag: Qatar +1F1F7 1F1EA ; fully-qualified # 🇷🇪 E2.0 flag: Réunion +1F1F7 1F1F4 ; fully-qualified # 🇷🇴 E2.0 flag: Romania +1F1F7 1F1F8 ; fully-qualified # 🇷🇸 E2.0 flag: Serbia +1F1F7 1F1FA ; fully-qualified # 🇷🇺 E0.6 flag: Russia +1F1F7 1F1FC ; fully-qualified # 🇷🇼 E2.0 flag: Rwanda +1F1F8 1F1E6 ; fully-qualified # 🇸🇦 E2.0 flag: Saudi Arabia +1F1F8 1F1E7 ; fully-qualified # 🇸🇧 E2.0 flag: Solomon Islands +1F1F8 1F1E8 ; fully-qualified # 🇸🇨 E2.0 flag: Seychelles +1F1F8 1F1E9 ; fully-qualified # 🇸🇩 E2.0 flag: Sudan +1F1F8 1F1EA ; fully-qualified # 🇸🇪 E2.0 flag: Sweden +1F1F8 1F1EC ; fully-qualified # 🇸🇬 E2.0 flag: Singapore +1F1F8 1F1ED ; fully-qualified # 🇸🇭 E2.0 flag: St. Helena +1F1F8 1F1EE ; fully-qualified # 🇸🇮 E2.0 flag: Slovenia +1F1F8 1F1EF ; fully-qualified # 🇸🇯 E2.0 flag: Svalbard & Jan Mayen +1F1F8 1F1F0 ; fully-qualified # 🇸🇰 E2.0 flag: Slovakia +1F1F8 1F1F1 ; fully-qualified # 🇸🇱 E2.0 flag: Sierra Leone +1F1F8 1F1F2 ; fully-qualified # 🇸🇲 E2.0 flag: San Marino +1F1F8 1F1F3 ; fully-qualified # 🇸🇳 E2.0 flag: Senegal +1F1F8 1F1F4 ; fully-qualified # 🇸🇴 E2.0 flag: Somalia +1F1F8 1F1F7 ; fully-qualified # 🇸🇷 E2.0 flag: Suriname +1F1F8 1F1F8 ; fully-qualified # 🇸🇸 E2.0 flag: South Sudan +1F1F8 1F1F9 ; fully-qualified # 🇸🇹 E2.0 flag: São Tomé & Príncipe +1F1F8 1F1FB ; fully-qualified # 🇸🇻 E2.0 flag: El Salvador +1F1F8 1F1FD ; fully-qualified # 🇸🇽 E2.0 flag: Sint Maarten +1F1F8 1F1FE ; fully-qualified # 🇸🇾 E2.0 flag: Syria +1F1F8 1F1FF ; fully-qualified # 🇸🇿 E2.0 flag: Eswatini +1F1F9 1F1E6 ; fully-qualified # 🇹🇦 E2.0 flag: Tristan da Cunha +1F1F9 1F1E8 ; fully-qualified # 🇹🇨 E2.0 flag: Turks & Caicos Islands +1F1F9 1F1E9 ; fully-qualified # 🇹🇩 E2.0 flag: Chad +1F1F9 1F1EB ; fully-qualified # 🇹🇫 E2.0 flag: French Southern Territories +1F1F9 1F1EC ; fully-qualified # 🇹🇬 E2.0 flag: Togo +1F1F9 1F1ED ; fully-qualified # 🇹🇭 E2.0 flag: Thailand +1F1F9 1F1EF ; fully-qualified # 🇹🇯 E2.0 flag: Tajikistan +1F1F9 1F1F0 ; fully-qualified # 🇹🇰 E2.0 flag: Tokelau +1F1F9 1F1F1 ; fully-qualified # 🇹🇱 E2.0 flag: Timor-Leste +1F1F9 1F1F2 ; fully-qualified # 🇹🇲 E2.0 flag: Turkmenistan +1F1F9 1F1F3 ; fully-qualified # 🇹🇳 E2.0 flag: Tunisia +1F1F9 1F1F4 ; fully-qualified # 🇹🇴 E2.0 flag: Tonga +1F1F9 1F1F7 ; fully-qualified # 🇹🇷 E2.0 flag: Turkey +1F1F9 1F1F9 ; fully-qualified # 🇹🇹 E2.0 flag: Trinidad & Tobago +1F1F9 1F1FB ; fully-qualified # 🇹🇻 E2.0 flag: Tuvalu +1F1F9 1F1FC ; fully-qualified # 🇹🇼 E2.0 flag: Taiwan +1F1F9 1F1FF ; fully-qualified # 🇹🇿 E2.0 flag: Tanzania +1F1FA 1F1E6 ; fully-qualified # 🇺🇦 E2.0 flag: Ukraine +1F1FA 1F1EC ; fully-qualified # 🇺🇬 E2.0 flag: Uganda +1F1FA 1F1F2 ; fully-qualified # 🇺🇲 E2.0 flag: U.S. Outlying Islands +1F1FA 1F1F3 ; fully-qualified # 🇺🇳 E4.0 flag: United Nations +1F1FA 1F1F8 ; fully-qualified # 🇺🇸 E0.6 flag: United States +1F1FA 1F1FE ; fully-qualified # 🇺🇾 E2.0 flag: Uruguay +1F1FA 1F1FF ; fully-qualified # 🇺🇿 E2.0 flag: Uzbekistan +1F1FB 1F1E6 ; fully-qualified # 🇻🇦 E2.0 flag: Vatican City +1F1FB 1F1E8 ; fully-qualified # 🇻🇨 E2.0 flag: St. Vincent & Grenadines +1F1FB 1F1EA ; fully-qualified # 🇻🇪 E2.0 flag: Venezuela +1F1FB 1F1EC ; fully-qualified # 🇻🇬 E2.0 flag: British Virgin Islands +1F1FB 1F1EE ; fully-qualified # 🇻🇮 E2.0 flag: U.S. Virgin Islands +1F1FB 1F1F3 ; fully-qualified # 🇻🇳 E2.0 flag: Vietnam +1F1FB 1F1FA ; fully-qualified # 🇻🇺 E2.0 flag: Vanuatu +1F1FC 1F1EB ; fully-qualified # 🇼🇫 E2.0 flag: Wallis & Futuna +1F1FC 1F1F8 ; fully-qualified # 🇼🇸 E2.0 flag: Samoa +1F1FD 1F1F0 ; fully-qualified # 🇽🇰 E2.0 flag: Kosovo +1F1FE 1F1EA ; fully-qualified # 🇾🇪 E2.0 flag: Yemen +1F1FE 1F1F9 ; fully-qualified # 🇾🇹 E2.0 flag: Mayotte +1F1FF 1F1E6 ; fully-qualified # 🇿🇦 E2.0 flag: South Africa +1F1FF 1F1F2 ; fully-qualified # 🇿🇲 E2.0 flag: Zambia +1F1FF 1F1FC ; fully-qualified # 🇿🇼 E2.0 flag: Zimbabwe + +# subgroup: subdivision-flag +1F3F4 E0067 E0062 E0065 E006E E0067 E007F ; fully-qualified # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 E5.0 flag: England +1F3F4 E0067 E0062 E0073 E0063 E0074 E007F ; fully-qualified # 🏴󠁧󠁢󠁳󠁣󠁴󠁿 E5.0 flag: Scotland +1F3F4 E0067 E0062 E0077 E006C E0073 E007F ; fully-qualified # 🏴󠁧󠁢󠁷󠁬󠁳󠁿 E5.0 flag: Wales + +# Flags subtotal: 275 +# Flags subtotal: 275 w/o modifiers + +# Status Counts +# fully-qualified : 3655 +# minimally-qualified : 827 +# unqualified : 242 +# component : 9 + +#EOF From a3ac443bf0fa830223bcd8a14f74fe08ac73287e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Feb 2023 09:06:06 -0800 Subject: [PATCH 53/82] Bump dart-lang/setup-dart from 1.3 to 1.4 (dart-lang/characters#74) Bumps [dart-lang/setup-dart](https://github.com/dart-lang/setup-dart) from 1.3 to 1.4. - [Release notes](https://github.com/dart-lang/setup-dart/releases) - [Changelog](https://github.com/dart-lang/setup-dart/blob/main/CHANGELOG.md) - [Commits](https://github.com/dart-lang/setup-dart/compare/6a218f2413a3e78e9087f638a238f6b40893203d...a57a6c04cf7d4840e88432aad6281d1e125f0d46) --- updated-dependencies: - dependency-name: dart-lang/setup-dart dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 5bcf6860..b67074d7 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -23,7 +23,7 @@ jobs: sdk: [dev, stable, 2.12.0] steps: - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d + - uses: dart-lang/setup-dart@a57a6c04cf7d4840e88432aad6281d1e125f0d46 with: sdk: ${{ matrix.sdk }} - id: install @@ -49,7 +49,7 @@ jobs: sdk: [dev, stable, 2.12.0] steps: - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d + - uses: dart-lang/setup-dart@a57a6c04cf7d4840e88432aad6281d1e125f0d46 with: sdk: ${{ matrix.sdk }} - id: install From ca35053ec5fe07c63eeef9e30ebe6e615bcf933f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Feb 2023 09:13:58 -0800 Subject: [PATCH 54/82] Bump actions/checkout from 3.2.0 to 3.3.0 (dart-lang/characters#73) Bumps [actions/checkout](https://github.com/actions/checkout) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/755da8c3cf115ac066823e79a1e1788f8940201b...ac593985615ec2ede58e132d2e21d2b1cbd6127c) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index b67074d7..99c013e3 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.12.0] steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - uses: dart-lang/setup-dart@a57a6c04cf7d4840e88432aad6281d1e125f0d46 with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.12.0] steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - uses: dart-lang/setup-dart@a57a6c04cf7d4840e88432aad6281d1e125f0d46 with: sdk: ${{ matrix.sdk }} From b715adb77bd58f57d399ccb32e257afb48e57db5 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Thu, 16 Feb 2023 16:55:45 -0800 Subject: [PATCH 55/82] blast_repo fixes (dart-lang/characters#75) * blast_repo fixes auto-publish * Update README.md --- pkgs/characters/.github/workflows/publish.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 pkgs/characters/.github/workflows/publish.yaml diff --git a/pkgs/characters/.github/workflows/publish.yaml b/pkgs/characters/.github/workflows/publish.yaml new file mode 100644 index 00000000..fcb7ccb8 --- /dev/null +++ b/pkgs/characters/.github/workflows/publish.yaml @@ -0,0 +1,14 @@ +# A CI configuration to auto-publish pub packages. + +name: Publish + +on: + pull_request: + branches: [ master ] + push: + tags: [ 'v[0-9]+.[0-9]+.[0-9]+*' ] + +jobs: + publish: + if: ${{ github.repository_owner == 'dart-lang' }} + uses: dart-lang/ecosystem/.github/workflows/publish.yaml@main From efeaf3d5124bbc3c1a3b937f4daf83bf54eca15f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 15:32:53 -0700 Subject: [PATCH 56/82] Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (dart-lang/characters#80) Bumps [dart-lang/setup-dart](https://github.com/dart-lang/setup-dart) from 1.4.0 to 1.5.0. - [Release notes](https://github.com/dart-lang/setup-dart/releases) - [Changelog](https://github.com/dart-lang/setup-dart/blob/main/CHANGELOG.md) - [Commits](https://github.com/dart-lang/setup-dart/compare/a57a6c04cf7d4840e88432aad6281d1e125f0d46...d6a63dab3335f427404425de0fbfed4686d93c4f) --- updated-dependencies: - dependency-name: dart-lang/setup-dart dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 99c013e3..b47ce0a5 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -23,7 +23,7 @@ jobs: sdk: [dev, stable, 2.12.0] steps: - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - uses: dart-lang/setup-dart@a57a6c04cf7d4840e88432aad6281d1e125f0d46 + - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} - id: install @@ -49,7 +49,7 @@ jobs: sdk: [dev, stable, 2.12.0] steps: - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - uses: dart-lang/setup-dart@a57a6c04cf7d4840e88432aad6281d1e125f0d46 + - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} - id: install From 80c89bb4ead14a380c752d811f986e028cb12ee9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 15:36:54 -0700 Subject: [PATCH 57/82] Bump actions/checkout from 3.3.0 to 3.5.0 (dart-lang/characters#79) Bumps [actions/checkout](https://github.com/actions/checkout) from 3.3.0 to 3.5.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/ac593985615ec2ede58e132d2e21d2b1cbd6127c...8f4b7f84864484a7bf31766abe9204da3cbe65b3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index b47ce0a5..ea45eac5 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.12.0] steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.12.0] steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} From 2f289c5c711bb45d09902d01186ed66af5460d5e Mon Sep 17 00:00:00 2001 From: "Lasse R.H. Nielsen" Date: Wed, 19 Apr 2023 14:17:47 +0200 Subject: [PATCH 58/82] Add tools to update and generate tables and tests. (dart-lang/characters#72) * Add tools to update and generate tables and tests. * Switch lower-bound to 2.19. Needs to be above 2.17 to allow using team-lints. * Includes low-level benchmark in tool/. Not intended as a goal by itself, just to compare performance of refactorings. Co-authored-by: Nate Bosch --- .../.github/workflows/test-package.yml | 8 +- pkgs/characters/analysis_options.yaml | 6 +- pkgs/characters/benchmark/benchmark.dart | 17 +- pkgs/characters/lib/src/characters_impl.dart | 2 +- .../lib/src/grapheme_clusters/constants.dart | 4 +- pkgs/characters/pubspec.yaml | 4 +- pkgs/characters/test/characters_test.dart | 6 +- pkgs/characters/test/src/text_samples.dart | 2 +- .../test/src/unicode_grapheme_tests.dart | 1 + pkgs/characters/test/src/unicode_tests.dart | 24 +- pkgs/characters/tool/README.txt | 11 + pkgs/characters/tool/benchmark.dart | 85 ++++ pkgs/characters/tool/bin/gentable.dart | 354 ++++++++++++++ pkgs/characters/tool/bin/gentest.dart | 131 +++++ pkgs/characters/tool/generate.dart | 26 + pkgs/characters/tool/src/args.dart | 70 +++ pkgs/characters/tool/src/atsp.dart | 240 ++++++++++ .../tool/src/automaton_builder.dart | 453 ++++++++++++++++++ pkgs/characters/tool/src/data_files.dart | 50 ++ .../tool/src/grapheme_category_loader.dart | 94 ++++ pkgs/characters/tool/src/indirect_table.dart | 54 +++ pkgs/characters/tool/src/list_overlap.dart | 86 ++++ pkgs/characters/tool/src/shared.dart | 94 ++++ .../tool/src/string_literal_writer.dart | 116 +++++ pkgs/characters/tool/src/table_builder.dart | 100 ++++ 25 files changed, 2011 insertions(+), 27 deletions(-) create mode 100644 pkgs/characters/tool/README.txt create mode 100644 pkgs/characters/tool/benchmark.dart create mode 100644 pkgs/characters/tool/bin/gentable.dart create mode 100644 pkgs/characters/tool/bin/gentest.dart create mode 100644 pkgs/characters/tool/generate.dart create mode 100644 pkgs/characters/tool/src/args.dart create mode 100644 pkgs/characters/tool/src/atsp.dart create mode 100644 pkgs/characters/tool/src/automaton_builder.dart create mode 100644 pkgs/characters/tool/src/data_files.dart create mode 100644 pkgs/characters/tool/src/grapheme_category_loader.dart create mode 100644 pkgs/characters/tool/src/indirect_table.dart create mode 100644 pkgs/characters/tool/src/list_overlap.dart create mode 100644 pkgs/characters/tool/src/shared.dart create mode 100644 pkgs/characters/tool/src/string_literal_writer.dart create mode 100644 pkgs/characters/tool/src/table_builder.dart diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index ea45eac5..38d65121 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -14,13 +14,13 @@ env: jobs: # Check code formatting and static analysis on a single OS (linux) - # against dev, stable, and 2.12.0 (the package's lower bound). + # against dev, stable, and 2.19.0 (the package's lower bound). analyze: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - sdk: [dev, stable, 2.12.0] + sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f @@ -38,7 +38,7 @@ jobs: # Run tests on a matrix consisting of two dimensions: # 1. OS: ubuntu-latest - # 2. Release channel: dev, stable, and 2.12.0 (the package's lower bound) + # 2. Release channel: dev, stable, and 2.19.0 (the package's lower bound) test: needs: analyze runs-on: ${{ matrix.os }} @@ -46,7 +46,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - sdk: [dev, stable, 2.12.0] + sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f diff --git a/pkgs/characters/analysis_options.yaml b/pkgs/characters/analysis_options.yaml index 572dd239..816c67f2 100644 --- a/pkgs/characters/analysis_options.yaml +++ b/pkgs/characters/analysis_options.yaml @@ -1 +1,5 @@ -include: package:lints/recommended.yaml +include: package:dart_flutter_team_lints/analysis_options.yaml + +analyzer: + errors: + prefer_single_quotes: ignore diff --git a/pkgs/characters/benchmark/benchmark.dart b/pkgs/characters/benchmark/benchmark.dart index 3d5dc29d..2ad31372 100644 --- a/pkgs/characters/benchmark/benchmark.dart +++ b/pkgs/characters/benchmark/benchmark.dart @@ -48,11 +48,14 @@ int iterateStrings() { int reverseStrings() { var revHangul = reverse(hangul); var rev2Hangul = reverse(revHangul); - if (hangul != rev2Hangul || hangul == revHangul) throw "Bad reverse"; - + if (hangul != rev2Hangul || hangul == revHangul) { + throw AssertionError("Bad reverse"); + } var revGenesis = reverse(genesis); var rev2Genesis = reverse(revGenesis); - if (genesis != rev2Genesis || genesis == revGenesis) throw "Bad reverse"; + if (genesis != rev2Genesis || genesis == revGenesis) { + throw AssertionError("Bad reverse"); + } return (hangul.length + genesis.length) * 2; } @@ -94,10 +97,10 @@ void main(List args) { bench(reverseStrings, 250); bench(replaceStrings, 250); - double bestIterateIndices = 0; - double bestIterateStrings = 0; - double bestReverseStrings = 0; - double bestReplaceStrings = 0; + var bestIterateIndices = 0.0; + var bestIterateStrings = 0.0; + var bestReverseStrings = 0.0; + var bestReplaceStrings = 0.0; String toDigits(double d) { const n = 5; diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index ebd8434d..e94b3d1c 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -5,8 +5,8 @@ import 'package:characters/src/grapheme_clusters/table.dart'; import "characters.dart"; -import "grapheme_clusters/constants.dart"; import "grapheme_clusters/breaks.dart"; +import "grapheme_clusters/constants.dart"; /// The grapheme clusters of a string. /// diff --git a/pkgs/characters/lib/src/grapheme_clusters/constants.dart b/pkgs/characters/lib/src/grapheme_clusters/constants.dart index ed3ad429..434e1f32 100644 --- a/pkgs/characters/lib/src/grapheme_clusters/constants.dart +++ b/pkgs/characters/lib/src/grapheme_clusters/constants.dart @@ -3,7 +3,7 @@ // BSD-style license that can be found in the LICENSE file. /// Unicode Grapheme Breaking Algorithm Character Categories. -/// (Order is irrelevent to correctness, so it is chosen +/// (Order is irrelevant to correctness, so it is chosen /// to minimize the size of the generated table strings /// by avoiding many bytes that need escapes). const int categoryCR = 0; @@ -49,7 +49,7 @@ const int categorySoT = 15; // Start of Text (synthetic input) const int stateEoT = 0; // Start of text (or grapheme). const int stateLF = 0x20; // Break unless prev is CR. const int stateExtend = 0x40; // Only break if prev is Control/CR/LF/sot. -const int stateZWJPictographic = 0x90; // Preceeded by Pic Ext*. +const int stateZWJPictographic = 0x90; // Preceded by Pic Ext*. const int stateEoTNoBreak = 0xB0; // As EoT but never cause break before. const int stateRegionalEven = 0xC0; // There is an even number of RIs before. const int stateRegionalOdd = diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index e0394167..bd4803b8 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -4,8 +4,8 @@ description: String replacement with operations that are Unicode/grapheme cluste repository: https://github.com/dart-lang/characters environment: - sdk: ">=2.12.0 <4.0.0" + sdk: ">=2.19.0 <4.0.0" dev_dependencies: - lints: ^1.0.0 + dart_flutter_team_lints: ^1.0.0 test: ^1.16.0 diff --git a/pkgs/characters/test/characters_test.dart b/pkgs/characters/test/characters_test.dart index 0b565bc6..2d17e5f9 100644 --- a/pkgs/characters/test/characters_test.dart +++ b/pkgs/characters/test/characters_test.dart @@ -2,6 +2,10 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +// Not all categories are currently used in tests. +// They're retained in case we add more tests. +// ignore_for_file: unreachable_from_main + import "dart:math"; import "package:characters/characters.dart"; @@ -231,7 +235,7 @@ void tests() { // Converts text with no multi-code-point grapheme clusters into // list of grapheme clusters. List charsOf(String text) => - text.runes.map((r) => String.fromCharCode(r)).toList(); + text.runes.map(String.fromCharCode).toList(); void expectGC(Characters actual, List expected) { var text = expected.join(); diff --git a/pkgs/characters/test/src/text_samples.dart b/pkgs/characters/test/src/text_samples.dart index 61385bd6..72f357b4 100644 --- a/pkgs/characters/test/src/text_samples.dart +++ b/pkgs/characters/test/src/text_samples.dart @@ -5,7 +5,7 @@ /// From: https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B8%80 /// text converted to Unicode NFD format. /// Text is available under the [Creative Commons Attribution-ShareAlike License](https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License). -var hangul = """ +const hangul = """ 한글 위키백과, 우리 모두의 백과사전. 둘러보기로 가기검색하러 가기 diff --git a/pkgs/characters/test/src/unicode_grapheme_tests.dart b/pkgs/characters/test/src/unicode_grapheme_tests.dart index 405544a9..1972884b 100644 --- a/pkgs/characters/test/src/unicode_grapheme_tests.dart +++ b/pkgs/characters/test/src/unicode_grapheme_tests.dart @@ -7,6 +7,7 @@ // and [https://www.unicode.org/Public/emoji/15.0/emoji-test.txt](../../third_party/Unicode_Consortium/emoji_test.txt). // Licensed under the Unicode Inc. License Agreement // (https://www.unicode.org/license.txt, ../../third_party/third_party/Unicode_Consortium/UNICODE_LICENSE.txt) +// ignore_for_file: lines_longer_than_80_chars // Grapheme cluster tests. const List> splitTests = [ diff --git a/pkgs/characters/test/src/unicode_tests.dart b/pkgs/characters/test/src/unicode_tests.dart index 23bc1ca7..01821375 100644 --- a/pkgs/characters/test/src/unicode_tests.dart +++ b/pkgs/characters/test/src/unicode_tests.dart @@ -6,17 +6,25 @@ import "package:characters/src/grapheme_clusters/constants.dart"; export "unicode_grapheme_tests.dart"; +/// Readable description of the [expected] grapheme clusters. +/// +/// The list of strings is the expected grapheme cluster separation +/// of the concatenation of those strings. +/// +/// The description converts each code unit to a 4-digit hex number, +/// puts ` × ` between the code units of the same grapheme cluster +/// and ` ÷ ` before, after and between the grapheme clusters. +/// (This is the format of the original Unicode test data, so it +/// can be compared to the original tests.) String testDescription(List expected) { - return "÷ " + - expected - .map((s) => s.runes - .map((x) => x.toRadixString(16).padLeft(4, "0")) - .join(" × ")) - .join(" ÷ ") + - " ÷"; + var expectedString = expected + .map((s) => + s.runes.map((x) => x.toRadixString(16).padLeft(4, "0")).join(" × ")) + .join(" ÷ "); + return "÷ $expectedString ÷"; } -var categoryName = List.filled(16, "") +final List categoryName = List.filled(16, "") ..[categoryOther] = "Other" ..[categoryCR] = "CR" ..[categoryLF] = "LF" diff --git a/pkgs/characters/tool/README.txt b/pkgs/characters/tool/README.txt new file mode 100644 index 00000000..9fbd204d --- /dev/null +++ b/pkgs/characters/tool/README.txt @@ -0,0 +1,11 @@ +To re-generate generated files run: +``` + dart tool/generate.dart +``` + +To update to new data files, update the paths in `tool/src/data_files` +if necessary, and run `dart tool.generate.dart -u -o`. +The `-u` means read new files from `https://unicode.org/Public`, +and `-o` means try to optimize table chunk sizes, +which is most important when using new data files. + diff --git a/pkgs/characters/tool/benchmark.dart b/pkgs/characters/tool/benchmark.dart new file mode 100644 index 00000000..bcdd3860 --- /dev/null +++ b/pkgs/characters/tool/benchmark.dart @@ -0,0 +1,85 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:characters/src/grapheme_clusters/breaks.dart"; +import "package:characters/src/grapheme_clusters/constants.dart"; + +import "../test/src/text_samples.dart"; +import "../test/src/unicode_grapheme_tests.dart"; +import "../test/src/various_tests.dart"; + +// Low-level benchmark of the grapheme cluster step functions. + +void main(List args) { + var count = 5; + if (args.isNotEmpty) { + count = int.parse(args[0]); + } + var gcsf = 0; + var gcsb = 0; + + var text = genesis + + hangul + + genesis + + diacretics + + recJoin(splitTests + emojis + zalgo); + var codeUnits = text.length; + var codePoints = text.runes.length; + for (var i = 0; i < count; i++) { + gcsf = benchForward(text, i, codePoints, codeUnits); + gcsb = benchBackward(text, i, codePoints, codeUnits); + } + print("gc: Grapheme Clusters, cp: Code Points, cu: Code Units."); + if (gcsf != gcsb) { + print("ERROR: Did not count the same number of grapheme clusters: " + "$gcsf forward vs. $gcsb backward."); + } else { + print("Total: $gcsf gc, $codePoints cp, $codeUnits cu"); + print("Avg ${(codePoints / gcsf).toStringAsFixed(3)} cp/gc"); + print("Avg ${(codeUnits / gcsf).toStringAsFixed(3)} cu/gc"); + } +} + +String recJoin(List> texts) => + texts.map((x) => x.join("")).join("\n"); + +int benchForward(String text, int i, int cp, int cu) { + var n = 0; + var gc = 0; + var e = 0; + var sw = Stopwatch()..start(); + do { + var breaks = Breaks(text, 0, text.length, stateSoTNoBreak); + while (breaks.nextBreak() >= 0) { + gc++; + } + e = sw.elapsedMilliseconds; + n++; + } while (e < 2000); + print("Forward #$i: ${(gc / e).round()} gc/ms, " + "${(n * cp / e).round()} cp/ms, " + "${(n * cu / e).round()} cu/ms, " + "$n rounds"); + return gc ~/ n; +} + +int benchBackward(String text, int i, int cp, int cu) { + var n = 0; + var gc = 0; + var e = 0; + var sw = Stopwatch()..start(); + do { + var breaks = BackBreaks(text, text.length, 0, stateEoTNoBreak); + while (breaks.nextBreak() >= 0) { + gc++; + } + e = sw.elapsedMilliseconds; + n++; + } while (e < 2000); + print("Backward #$i: ${(gc / e).round()} gc/ms, " + "${(n * cp / e).round()} cp/ms, " + "${(n * cu / e).round()} cu/ms, " + "$n rounds"); + return gc ~/ n; +} diff --git a/pkgs/characters/tool/bin/gentable.dart b/pkgs/characters/tool/bin/gentable.dart new file mode 100644 index 00000000..953fbe79 --- /dev/null +++ b/pkgs/characters/tool/bin/gentable.dart @@ -0,0 +1,354 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:io"; +import "dart:typed_data"; + +import "../src/args.dart"; +import "../src/automaton_builder.dart"; +import "../src/data_files.dart"; +import "../src/grapheme_category_loader.dart"; +import "../src/indirect_table.dart"; +import "../src/shared.dart"; +import "../src/string_literal_writer.dart"; +import "../src/table_builder.dart"; + +// Generates tables used by the grapheme cluster breaking algorithm +// and a state machine used to implement the algorithm. + +// The task of this tool is to take the complete table of +// grapheme cluster categories for every code point (U+0000 ... U+10FFFF) +// and build a smaller table with the same information. +// +// The approach taken is to split the large table into chunks, +// smaller chunks for data in the BMP (U+0000 ... U+FFFF) +// which have higher variation than later data, +// and larger chunks for non-BMP ("astral" planes) code points. +// This also corresponds to the split between one-UTF-16 code unit +// character and surrogate pairs, which gives us a natural +// branch in the string parsing code. +// +// Then a single table is built containing all these chunks, but where +// the chunks are allowed to overlap. +// An indirection table points to the start of each chunk +// in the larger table. +// +// Having many small chunks increases the size of the indirection table, +// and large chunks reduces the chance of chunks being completely +// equivalent. +// +// The state machines are based on the extended Grapheme Cluster breaking +// algorithm. The forward-scanning state machine is entirely regular. +// The backwards-scanning state machine needs to call out to do look-ahead +// in some cases (for example, how to combine a regional identifier +// depends on whether there is an odd or even number of +// previous regional identifiers.) + +/// Print more information to stderr while generating. +/// +/// Set while developing if you don't want to pass `-v` on the command line +/// every time. +/// Only affects this file when it's run directly. +const defaultVerbose = false; + +/// Default location for table file. +const tableFile = "lib/src/grapheme_clusters/table.dart"; + +// Best values found for current tables. +// Update if better value found when updating data files. +// (May consider benchmark performance as well as size.) + +// TODO: Write out best sizes to a file after an update, and read them back +// next time, instead of hardcoding in the source file. + +// Chunk sizes must be powers of 2. +const int defaultLowChunkSize = 64; + +// 512 gives best size by 431b and no discernible performance difference +// from 1024 in benchmark. +const int defaultHighChunkSize = 512; + +void main(List args) { + var flags = parseArgs(args, "gentable", allowOptimize: true); + var output = flags.dryrun + ? null + : flags.targetFile ?? File(path(packageRoot, tableFile)); + + if (output != null && !output.existsSync()) { + try { + output.createSync(recursive: true); + } catch (e) { + stderr.writeln("Cannot find or create file: ${output.path}"); + stderr.writeln("Writing to stdout"); + output = null; + } + } + generateTables(output, + update: flags.update, + dryrun: flags.dryrun, + verbose: flags.verbose, + optimize: flags.optimize); +} + +Future generateTables(File? output, + {bool update = false, + bool dryrun = false, + bool optimize = false, + bool verbose = defaultVerbose}) async { + // Generate the category mapping for all Unicode code points. + // This is the table we want to create an compressed version of. + var table = await loadGraphemeCategories(update: update, verbose: verbose); + if (update) { + // Force license file update. + await licenseFile.load(checkForUpdate: true); + } + + var lowChunkSize = defaultLowChunkSize; + var highChunkSize = defaultHighChunkSize; + + int optimizeTable( + IndirectTable chunkTable, int lowChunkSize, int highChunkSize) { + var index = 0; + do { + chunkTable.entries.add(TableEntry(0, index, lowChunkSize)); + index += lowChunkSize; + } while (index < 0x10000); + var lowChunkCount = chunkTable.entries.length; + do { + chunkTable.entries.add(TableEntry(0, index, highChunkSize)); + index += highChunkSize; + } while (index < 0x110000); + var highChunkCount = chunkTable.entries.length - lowChunkCount; + assert(lowChunkCount * lowChunkSize + highChunkCount * highChunkSize == + 0x110000); + assert(chunkTable.chunks.length == 1); + assert(_validate(table, chunkTable, lowChunkSize, highChunkSize, + verbose: false)); + + chunkifyTable(chunkTable); + assert(chunkTable.entries.length == lowChunkCount + highChunkCount); + assert(_validate(table, chunkTable, lowChunkSize, highChunkSize, + verbose: false)); + + combineChunkedTable(chunkTable); + assert(chunkTable.entries.length == lowChunkCount + highChunkCount); + assert(chunkTable.chunks.length == 1); + assert(_validate(table, chunkTable, lowChunkSize, highChunkSize, + verbose: false)); + + var size = chunkTable.chunks[0].length ~/ 2 + chunkTable.entries.length * 2; + return size; + } + + var chunkTable = IndirectTable([table.sublist(0, table.length)], []); + var size = optimizeTable(chunkTable, lowChunkSize, highChunkSize); + if (verbose) { + stderr.writeln("Default chunk size: $lowChunkSize/$highChunkSize: $size"); + } + if (optimize) { + // Chunk sizes must be powers of 2. + // Smaller chunk sizes gives more smaller chunks, + // with more chance of overlap, + // but each chunks adds an entry to the index table. + for (var low in [64, 128, 32, 256]) { + for (var high in [512, 1024, 256, 2048]) { + if (low == lowChunkSize && high == highChunkSize) continue; + var newChunk = IndirectTable([table.sublist(0, table.length)], []); + var newSize = optimizeTable(newChunk, low, high); + if (verbose) { + var delta = newSize - size; + stderr.writeln("${size < newSize ? "Worse" : "Better"}" + " chunk size: $low/$high: $newSize " + "(${delta > 0 ? "+$delta" : delta})"); + } + if (newSize < size) { + lowChunkSize = low; + highChunkSize = high; + chunkTable = newChunk; + size = newSize; + } + } + } + if (verbose) { + stderr.writeln("Best low chunk size: $lowChunkSize"); + stderr.writeln("Best high chunk size: $highChunkSize"); + stderr.writeln("Best table size: $size"); + } + } + + // Write the table and automaton to source. + var buffer = StringBuffer(copyright) + ..writeln("// Generated code. Do not edit.") + ..writeln("// Generated from [${graphemeBreakPropertyData.sourceLocation}]" + "(../../${graphemeBreakPropertyData.targetLocation})") + ..writeln("// and [${emojiData.sourceLocation}]" + "(../../${emojiData.targetLocation}).") + ..writeln("// Licensed under the Unicode Inc. License Agreement") + ..writeln("// (${licenseFile.sourceLocation}, " + "../../third_party/${licenseFile.targetLocation})") + ..writeln(); + + writeTables(buffer, chunkTable, lowChunkSize, highChunkSize, + verbose: verbose); + + writeForwardAutomaton(buffer, verbose: verbose); + buffer.writeln(); + writeBackwardAutomaton(buffer, verbose: verbose); + + if (output == null) { + stdout.write(buffer); + } else { + output.writeAsStringSync(buffer.toString()); + } +} + +// ----------------------------------------------------------------------------- +// Combined table writing. +void writeTables( + StringSink out, IndirectTable table, int lowChunkSize, int highChunkSize, + {required bool verbose}) { + _writeNybbles(out, "_data", table.chunks[0], verbose: verbose); + _writeStringLiteral(out, "_start", table.entries.map((e) => e.start).toList(), + verbose: verbose); + _writeLookupFunction(out, "_data", "_start", lowChunkSize); + out.writeln(); + _writeSurrogateLookupFunction( + out, "_data", "_start", 65536 ~/ lowChunkSize, highChunkSize); + out.writeln(); +} + +void _writeStringLiteral(StringSink out, String name, List data, + {required bool verbose}) { + if (verbose) { + stderr.writeln("Writing ${data.length} chars"); + } + var prefix = "const String $name = "; + out.write(prefix); + var writer = StringLiteralWriter(out, padding: 4, escape: _needsEscape); + writer.start(prefix.length); + for (var i = 0; i < data.length; i++) { + writer.add(data[i]); + } + writer.end(); + out.write(";\n"); +} + +void _writeNybbles(StringSink out, String name, List data, + {required bool verbose}) { + if (verbose) { + stderr.writeln("Writing ${data.length} nybbles"); + } + var prefix = "const String $name = "; + out.write(prefix); + var writer = StringLiteralWriter(out, padding: 4, escape: _needsEscape); + writer.start(prefix.length); + for (var i = 0; i < data.length - 1; i += 2) { + var n1 = data[i]; + var n2 = data[i + 1]; + assert(0 <= n1 && n1 <= 15); + assert(0 <= n2 && n2 <= 15); + writer.add(n1 + n2 * 16); + } + if (data.length.isOdd) writer.add(data.last); + writer.end(); + out.write(";\n"); +} + +bool _needsEscape(int codeUnit) => + codeUnit > 0xff || codeUnit == 0x7f || codeUnit & 0x60 == 0; + +void _writeLookupFunction( + StringSink out, String dataName, String startName, int chunkSize) { + out.write(_lookupMethod("low", dataName, startName, chunkSize)); +} + +void _writeSurrogateLookupFunction(StringSink out, String dataName, + String startName, int startOffset, int chunkSize) { + out.write(_lookupSurrogatesMethod( + "high", dataName, startName, startOffset, chunkSize)); +} + +String _lookupMethod( + String name, String dataName, String startName, int chunkSize) => + """ +int $name(int codeUnit) { + var chunkStart = $startName.codeUnitAt(codeUnit >> ${chunkSize.bitLength - 1}); + var index = chunkStart + (codeUnit & ${chunkSize - 1}); + var bit = index & 1; + var pair = $dataName.codeUnitAt(index >> 1); + return (pair >> 4) & -bit | (pair & 0xF) & (bit - 1); +} +"""; + +String _lookupSurrogatesMethod(String name, String dataName, String startName, + int startOffset, int chunkSize) => + chunkSize == 1024 + ? """ +int $name(int lead, int tail) { + var chunkStart = $startName.codeUnitAt($startOffset + (0x3ff & lead)); + var index = chunkStart + (0x3ff & tail); + var bit = index & 1; + var pair = $dataName.codeUnitAt(index >> 1); + return (pair >> 4) & -bit | (pair & 0xF) & (bit - 1); +} +""" + : """ +int $name(int lead, int tail) { + var offset = ((0x3ff & lead) << 10) | (0x3ff & tail); + var chunkStart = $startName.codeUnitAt($startOffset + (offset >> ${chunkSize.bitLength - 1})); + var index = chunkStart + (offset & ${chunkSize - 1}); + var bit = index & 1; + var pair = $dataName.codeUnitAt(index >> 1); + return (pair >> 4) & -bit | (pair & 0xF) & (bit - 1); +} +"""; + +// ----------------------------------------------------------------------------- +bool _validate(Uint8List table, IndirectTable indirectTable, int lowChunkSize, + int highChunkSize, + {required bool verbose}) { + var lowChunkCount = 65536 ~/ lowChunkSize; + var lowChunkShift = lowChunkSize.bitLength - 1; + var lowChunkMask = lowChunkSize - 1; + for (var i = 0; i < 65536; i++) { + var value = table[i]; + var entryIndex = i >> lowChunkShift; + var entry = indirectTable.entries[entryIndex]; + var indirectValue = indirectTable.chunks[entry.chunkNumber] + [entry.start + (i & lowChunkMask)]; + if (value != indirectValue) { + stderr.writeln("$entryIndex: $entry"); + stderr.writeln('Error: ${i.toRadixString(16)} -> Expected $value,' + ' was $indirectValue'); + printIndirectTable(indirectTable); + return false; + } + } + var highChunkShift = highChunkSize.bitLength - 1; + var highChunkMask = highChunkSize - 1; + for (var i = 0x10000; i < 0x110000; i++) { + var j = i - 0x10000; + var value = table[i]; + var entryIndex = lowChunkCount + (j >> highChunkShift); + var entry = indirectTable.entries[entryIndex]; + var indirectValue = indirectTable.chunks[entry.chunkNumber] + [entry.start + (j & highChunkMask)]; + if (value != indirectValue) { + stderr.writeln("$entryIndex: $entry"); + stderr.writeln('Error: ${i.toRadixString(16)} -> Expected $value,' + ' was $indirectValue'); + printIndirectTable(indirectTable); + return false; + } + } + if (verbose) { + stderr.writeln("Table validation success"); + } + return true; +} + +void printIndirectTable(IndirectTable table) { + stderr.writeln("IT(chunks: ${table.chunks.map((x) => "#${x.length}")}," + " entries: ${table.entries}"); +} diff --git a/pkgs/characters/tool/bin/gentest.dart b/pkgs/characters/tool/bin/gentest.dart new file mode 100644 index 00000000..39aee360 --- /dev/null +++ b/pkgs/characters/tool/bin/gentest.dart @@ -0,0 +1,131 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:io"; + +import "../src/args.dart"; +import "../src/data_files.dart"; +import "../src/shared.dart"; +import "../src/string_literal_writer.dart"; + +// Generates tests for grapheme cluster splitting from the Unicode +// GraphemeBreakTest.txt file. +// +// Fetches the data files from the Unicode web site. + +const defaultVerbose = false; + +const testFile = "test/src/unicode_grapheme_tests.dart"; + +void main(List args) async { + var flags = parseArgs(args, "gentest"); + + var output = flags.dryrun + ? null + : flags.targetFile ?? File(path(packageRoot, testFile)); + + if (output != null && !output.existsSync()) { + try { + output.createSync(recursive: true); + } catch (e) { + stderr.writeln("Cannot find or create file: ${output.path}"); + stderr.writeln("Writing to stdout"); + output = null; + } + } + + await generateTests(output, + update: flags.update, verbose: flags.verbose, dryrun: flags.dryrun); +} + +Future generateTests(File? output, + {bool update = false, + bool dryrun = false, + bool verbose = defaultVerbose}) async { + var buffer = StringBuffer(copyright) + ..writeln("// Generated code. Do not edit.") + ..writeln("// Generated from [${graphemeTestData.sourceLocation}]" + "(../../${graphemeTestData.targetLocation})") + ..writeln("// and [${emojiTestData.sourceLocation}]" + "(../../${emojiTestData.targetLocation}).") + ..writeln("// Licensed under the Unicode Inc. License Agreement") + ..writeln("// (${licenseFile.sourceLocation}, " + "../../third_party/${licenseFile.targetLocation})") + ..writeln("// ignore_for_file: lines_longer_than_80_chars") + ..writeln(); + + var texts = await Future.wait([ + graphemeTestData.load(checkForUpdate: update), + emojiTestData.load(checkForUpdate: update) + ]); + if (update) { + // Force license file update. + await licenseFile.load(checkForUpdate: true); + } + { + buffer + ..writeln("// Grapheme cluster tests.") + ..writeln("const List> splitTests = ["); + var test = texts[0]; + var lineRE = RegExp(r"^(÷.*?)#", multiLine: true); + var tokensRE = RegExp(r"[÷×]|[\dA-F]+"); + var writer = StringLiteralWriter(buffer, lineLength: 9999, escape: _escape); + for (var line in lineRE.allMatches(test)) { + var tokens = tokensRE.allMatches(line[0]!).map((x) => x[0]!).toList(); + assert(tokens.first == "÷"); + assert(tokens.last == "÷"); + + var parts = >[]; + var chars = []; + for (var i = 1; i < tokens.length; i += 2) { + var cp = int.parse(tokens[i], radix: 16); + chars.add(cp); + if (tokens[i + 1] == "÷") { + parts.add(chars); + chars = []; + } + } + buffer.write(" ["); + for (var i = 0; i < parts.length; i++) { + if (i > 0) buffer.write(", "); + writer.start(0); + parts[i].forEach(writer.add); + writer.end(); + } + buffer.writeln("],"); + } + buffer.writeln("];"); + } + { + buffer + ..writeln("// Emoji tests.") + ..writeln("const List> emojis = ["); + // Emojis + var emojis = texts[1]; + var lineRE = RegExp(r"^([ \dA-F]*?);", multiLine: true); + var tokensRE = RegExp(r"[\dA-F]+"); + var writer = StringLiteralWriter(buffer, lineLength: 9999, escape: _escape); + for (var line in lineRE.allMatches(emojis)) { + buffer.write(" ["); + writer.start(); + for (var token in tokensRE.allMatches(line[1]!)) { + var value = int.parse(token[0]!, radix: 16); + writer.add(value); + } + writer.end(); + buffer.writeln("],"); + } + buffer.writeln("];"); + } + if (dryrun || output == null) { + stdout.write(buffer); + } else { + if (verbose) { + stderr.writeln("Writing ${output.path}"); + } + output.writeAsStringSync(buffer.toString()); + } +} + +bool _escape(int cp) => cp > 0xff || cp & 0x60 == 0 || cp == 0x7f; diff --git a/pkgs/characters/tool/generate.dart b/pkgs/characters/tool/generate.dart new file mode 100644 index 00000000..ab40b683 --- /dev/null +++ b/pkgs/characters/tool/generate.dart @@ -0,0 +1,26 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:io" show File; + +import "bin/gentable.dart" show generateTables, tableFile; +import "bin/gentest.dart" show generateTests, testFile; +import "src/args.dart"; +import "src/shared.dart"; + +/// Generates both tests and tables. +/// +/// Use this tool for updates, and `bin/gentable.dart` and `bin/gentest.dart` +/// mainly during development. +void main(List args) async { + var flags = + parseArgs(args, "generate", allowOptimize: true, allowFile: false); + await generateTables(File(path(packageRoot, tableFile)), + optimize: flags.optimize, + update: flags.update, + dryrun: flags.dryrun, + verbose: flags.verbose); + await generateTests(File(path(packageRoot, testFile)), + update: flags.update, dryrun: flags.dryrun, verbose: flags.verbose); +} diff --git a/pkgs/characters/tool/src/args.dart b/pkgs/characters/tool/src/args.dart new file mode 100644 index 00000000..9a8ebb67 --- /dev/null +++ b/pkgs/characters/tool/src/args.dart @@ -0,0 +1,70 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Very primitive arguments parser for the generator commands. + +import "dart:io"; + +class Flags { + final bool verbose; + final bool update; + final bool dryrun; + final bool optimize; + final File? targetFile; + Flags(this.targetFile, + {required this.update, + required this.dryrun, + required this.verbose, + required this.optimize}); +} + +Flags parseArgs(List args, String toolName, + {bool allowOptimize = false, bool allowFile = true}) { + var update = false; + var dryrun = false; + var verbose = false; + var optimize = false; + File? output; + for (var arg in args) { + if (arg == "-h" || arg == "--help") { + stderr + ..writeln( + "Usage: $toolName.dart [-u] ${allowOptimize ? "[-i|-o] " : ""}[-n]" + "${allowFile ? " " : ""}") + ..writeln("-h | --help : Print this help and exit") + ..writeln("-u | --update : Fetch new data files") + ..writeln( + "-n | --dryrun : Write to stdout instead of target file"); + if (allowOptimize) { + stderr.writeln( + "-o | -i | --optimize : Optimize size parameters for tables"); + } + stderr.writeln("-v | --verbose : Print more information"); + if (allowFile) { + stderr.writeln("If no target file is given, writes to stdout."); + } + exit(0); + } else if (arg == "-u" || arg == "--update") { + update = true; + } else if (arg == "-n" || arg == "--dryrun") { + dryrun = true; + } else if (arg == "-v" || arg == "--verbose") { + verbose = true; + } else if (allowOptimize && arg == "-o" || + arg == "-i" || + arg.startsWith("--opt")) { + // Try to find a better size for the table. + // No need to do this unless the representation changes or + // the input tables are updated. + // The current value is optimal for the data and representation used. + optimize = true; + } else if (arg.startsWith("-") || !allowFile) { + stderr.writeln("Unrecognized flag: $arg"); + } else { + output = File(arg); + } + } + return Flags(output, + update: update, dryrun: dryrun, verbose: verbose, optimize: optimize); +} diff --git a/pkgs/characters/tool/src/atsp.dart b/pkgs/characters/tool/src/atsp.dart new file mode 100644 index 00000000..5ccd3333 --- /dev/null +++ b/pkgs/characters/tool/src/atsp.dart @@ -0,0 +1,240 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// See: Asymmetric Traveling Salesman Problem. + +// Strategy for finding optimal overlapping of chunks of a larger table, +// to save space. +// Does so by solving traveling salesman/hamiltonian cycle in a graph +// where the distance between chunks is how little they overlap +// (chunk length minus overlap size). + +/// An asymmetric weighted complete graph. +/// +/// The vertices are identified by numbers 0 through [vertices] - 1. +/// Edges are pairs of vertices. +class Graph { + /// Number of vertices. + final int vertexCount; + + /// Table of weights, a list of length `vertexCount`*`vertexCount`. + final List _table; + + /// Creates a new complete graph with [vertexCount] vertices. + /// + /// The initial weights on all edges are [initialWeight]. + Graph(this.vertexCount, [int initialWeight = 0]) + : _table = List.filled(vertexCount * vertexCount, initialWeight); + + /// Update the weight on the edges from [fromVertex] to [toVertex]. + void setWeight(int fromVertex, int toVertex, int newWeight) { + _table[fromVertex * vertexCount + toVertex] = newWeight; + } + + /// The weight of the edge from [fromVertex] to [toVertex]. + int weight(int fromVertex, int toVertex) => + _table[fromVertex * vertexCount + toVertex]; + + /// The cumulative weight of the (sub-)path from `path[from]` to `path[to]`. + /// + /// If [to] is less than [from], the sub-path is traversed in reverse. + /// The values in `path` should be vertices in this graph. + int pathWeight(List path, int from, int to) { + var weight = 0; + var cursor = path[from]; + var step = from <= to ? 1 : -1; + for (var i = from; i != to;) { + i += step; + var next = path[i]; + weight += this.weight(cursor, next); + cursor = next; + } + return weight; + } + + int get maxWeight => _table.reduce((a, b) => a >= b ? a : b); +} + +/// Optimize a cycle of a graph to minimize the edge weight. +/// +/// The [cycle] must have the same node as first and last element. +/// +/// This is an implementation of one step of 3-opt, a simple algorithm to +/// approximate an asymmetric traveling salesman problem (ATSP). +/// It splits the cycle into three parts and then find the best recombination +/// of the parts, each potentially reversed. +bool opt3(Graph graph, List cycle) { + // Perhaps optimize the weight computations by creating + // a single array of cumulative weights, so any range can be computed + // as a difference between two points in that array. + for (var i = 1; i < cycle.length; i++) { + // Find three cut points in the cycle, A|B, C|D, and E|F, + // then find the cumulative weights of each section + // B-C, C-D, and E-A, in both directions, as well as the + // weight between the end-points. + // + // with Z being used to represent the start/end of the list + // representation (so the A-F/F-A ranges cross over the cycle + // representation edges) + // Find the weights + var nodeA = cycle[i - 1]; + var nodeB = cycle[i]; + // Weight of one-step transition from A to B. + var wAB = graph.weight(nodeA, nodeB); + var wBA = graph.weight(nodeB, nodeA); + // Weight of entire path for start to A. + var pZA = graph.pathWeight(cycle, 0, i - 1); + var pAZ = graph.pathWeight(cycle, i - 1, 0); + for (var j = i + 1; j < cycle.length; j++) { + var nodeC = cycle[j - 1]; + var nodeD = cycle[j]; + var wAC = graph.weight(nodeA, nodeC); + var wCA = graph.weight(nodeC, nodeA); + var wAD = graph.weight(nodeA, nodeD); + var wDA = graph.weight(nodeD, nodeA); + var wBD = graph.weight(nodeB, nodeD); + var wDB = graph.weight(nodeD, nodeB); + var wCD = graph.weight(nodeC, nodeD); + var wDC = graph.weight(nodeD, nodeC); + var pBC = graph.pathWeight(cycle, i, j - 1); + var pCB = graph.pathWeight(cycle, j - 1, i); + for (var k = j + 1; k < cycle.length; k++) { + var nodeE = cycle[k - 1]; + var nodeF = cycle[k]; + var wAE = graph.weight(nodeA, nodeE); + var wEA = graph.weight(nodeE, nodeA); + var wBE = graph.weight(nodeB, nodeE); + var wEB = graph.weight(nodeE, nodeB); + var wCE = graph.weight(nodeC, nodeE); + var wEC = graph.weight(nodeE, nodeC); + var wBF = graph.weight(nodeB, nodeF); + var wFB = graph.weight(nodeF, nodeB); + var wCF = graph.weight(nodeC, nodeF); + var wFC = graph.weight(nodeF, nodeC); + var wEF = graph.weight(nodeE, nodeF); + var wFE = graph.weight(nodeF, nodeE); + var wDF = graph.weight(nodeD, nodeF); + var wFD = graph.weight(nodeF, nodeD); + var pDE = graph.pathWeight(cycle, j, k - 1); + var pED = graph.pathWeight(cycle, k - 1, j); + var pFA = graph.pathWeight(cycle, k, cycle.length - 1) + pZA; + var pAF = graph.pathWeight(cycle, cycle.length - 1, k) + pAZ; + + // Find best recombination of the three sections B-C, D-E, F-A, + // with each possibly reversed. + // Since there are only two ways to order three-element cycles, + // and three parts that can be reversed, this gives 16 combinations. + var wABCDEF = pFA + wAB + pBC + wCD + pDE + wEF; + var wACBDEF = pFA + wAC + pCB + wBD + pDE + wEF; + var wABCEDF = pFA + wAB + pBC + wCE + pED + wDF; + var wACBEDF = pFA + wAC + pCB + wBE + pED + wDF; + var wFBCDEA = pAF + wFB + pBC + wCD + pDE + wEA; + var wFCBDEA = pAF + wFC + pCB + wBD + pDE + wEA; + var wFBCEDA = pAF + wFB + pBC + wCE + pED + wDA; + var wFCBEDA = pAF + wFC + pCB + wBE + pED + wDA; + var wADEBCF = pFA + wAD + pDE + wEB + pBC + wCF; + var wADECBF = pFA + wAD + pDE + wEC + pCB + wBF; + var wAEDBCF = pFA + wAE + pED + wDB + pBC + wCF; + var wAEDCBF = pFA + wAE + pED + wDC + pCB + wBF; + var wFDEBCA = pAF + wFD + pDE + wEB + pBC + wCA; + var wFDECBA = pAF + wFD + pDE + wEC + pCB + wBA; + var wFEDBCA = pAF + wFE + pED + wDB + pBC + wCA; + var wFEDCBA = pAF + wFE + pED + wDC + pCB + wBA; + var best = min([ + wABCDEF, + wACBDEF, + wABCEDF, + wACBEDF, + wFBCDEA, + wFCBDEA, + wFBCEDA, + wFCBEDA, + wADEBCF, + wADECBF, + wAEDBCF, + wAEDCBF, + wFDEBCA, + wFDECBA, + wFEDBCA, + wFEDCBA + ]); + if (best < wABCDEF) { + // Reorder and reverse to match the (or a) best solution. + if (best == wACBDEF) { + _reverse(cycle, i, j - 1); + } else if (best == wABCEDF) { + _reverse(cycle, j, k - 1); + } else if (best == wACBEDF) { + _reverse(cycle, i, j - 1); + _reverse(cycle, j, k - 1); + } else if (best == wFBCDEA) { + _reverse(cycle, i, k - 1); + _reverse(cycle, 0, cycle.length - 1); + } else if (best == wFCBDEA) { + _reverse(cycle, i, j - 1); + _reverse(cycle, i, k - 1); + _reverse(cycle, 0, cycle.length - 1); + } else if (best == wFBCEDA) { + _reverse(cycle, j, k - 1); + _reverse(cycle, i, k - 1); + _reverse(cycle, 0, cycle.length - 1); + } else if (best == wFCBEDA) { + _reverse(cycle, i, j - 1); + _reverse(cycle, j, k - 1); + _reverse(cycle, i, k - 1); + _reverse(cycle, 0, cycle.length - 1); + } else if (best == wADEBCF) { + _reverse(cycle, i, j - 1); + _reverse(cycle, j, k - 1); + _reverse(cycle, i, k - 1); + } else if (best == wADECBF) { + _reverse(cycle, j, k - 1); + _reverse(cycle, i, k - 1); + } else if (best == wAEDBCF) { + _reverse(cycle, i, j - 1); + _reverse(cycle, i, k - 1); + } else if (best == wAEDCBF) { + _reverse(cycle, i, k - 1); + } else if (best == wFDEBCA) { + _reverse(cycle, i, j - 1); + _reverse(cycle, j, k - 1); + _reverse(cycle, 0, cycle.length - 1); + } else if (best == wFDECBA) { + _reverse(cycle, j, k - 1); + _reverse(cycle, 0, cycle.length - 1); + } else if (best == wFEDBCA) { + _reverse(cycle, i, j - 1); + _reverse(cycle, 0, cycle.length - 1); + } else if (best == wFEDCBA) { + _reverse(cycle, 0, cycle.length - 1); + } else { + throw AssertionError("Unreachable"); + } + return true; + } + } + } + } + return false; +} + +/// Reverses a slice of a list. +void _reverse(List list, int from, int to) { + while (from < to) { + var tmp = list[from]; + list[from] = list[to]; + list[to] = tmp; + from++; + to--; + } +} + +int min(List values) { + var result = values[0]; + for (var i = 1; i < values.length; i++) { + var value = values[i]; + if (value < result) result = value; + } + return result; +} diff --git a/pkgs/characters/tool/src/automaton_builder.dart b/pkgs/characters/tool/src/automaton_builder.dart new file mode 100644 index 00000000..e8bdcc5f --- /dev/null +++ b/pkgs/characters/tool/src/automaton_builder.dart @@ -0,0 +1,453 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:io"; +import "dart:typed_data"; + +import "package:characters/src/grapheme_clusters/constants.dart"; + +import "string_literal_writer.dart"; + +// Builder for state automata used to find +// next/previous grapheme cluster break. + +// The automaton states are described below, and the code builds tables +// for those automatons, then writes the table bytes as a string literal. + +////////////////////////////////////////////////////////////////////////////// +// Transition table for grapheme cluster break automaton. +// For each previous state and each input character category, +// emit a new state and whether to break before that input character. +// The table uses `!` to mark a break before the input character, +// and then the output state. +// +// We do not care that there is no break between a start-of-text and +// and end-of-text (and empty text). We could handle that with one extra +// state, but it will never matter for the code using this table. +// +// Cat : State +// : SoT Brk CR Otr Pre L V T Pic PicZ Reg SoTN : +// --------------------------------------------------------------------- +// Other: !Otr !Otr !Otr !Otr Otr !Otr !Otr !Otr !Otr !Otr !Otr Otr : +// CR : !CR !CR !CR !CR !CR !CR !CR !CR !CR !CR !CR CR : +// LF : !Brk !Brk Brk !Brk !Brk !Brk !Brk !Brk !Brk !Brk !Brk Brk : +// Ctrl : !Brk !Brk !Brk !Brk !Brk !Brk !Brk !Brk !Brk !Brk !Brk Brk : +// Ext : !Otr !Otr !Otr Otr Otr Otr Otr Otr Pic Otr Otr Otr : +// ZWJ : !Otr !Otr !Otr Otr Otr Otr Otr Otr PicZ Otr Otr Otr : +// Spac : !Otr !Otr !Otr Otr Otr Otr Otr Otr Otr Otr Otr Otr : +// Prep : !Pre !Pre !Pre !Pre Pre !Pre !Pre !Pre !Pre !Pre !Pre Pre : +// Reg : !Reg !Reg !Reg !Reg Reg !Reg !Reg !Reg !Reg !Reg Otr Reg : +// L : !L !L !L !L L L !L !L !L !L !L L : +// V : !V !V !V !V V V V !V !V !V !V V : +// T : !T !T !T !T T !T T T !T !T !T T : +// LV : !V !V !V !V V V !V !V !V !V !V V : +// LVT : !T !T !T !T T T !T !T !T !T !T T : +// Pic : !Pic !Pic !Pic !Pic Pic !Pic !Pic !Pic !Pic Pic !Pic Pic : +// EoT : - ! - ! - ! - ! - ! - ! - ! - ! - ! - ! - - : + +void writeForwardAutomaton(StringSink buffer, {required bool verbose}) { + assert(categories.length == 16); + var table = Uint8List(states.length * categories.length); + void transition(int state, int category, int newState, bool breakBefore) { + table[state + category] = newState | (breakBefore ? 0 : stateNoBreak); + } + + for (var state in states) { + transition(state, categoryOther, stateOther, + state != statePrepend && state != stateSoTNoBreak); + transition(state, categoryCR, stateCR, state != stateSoTNoBreak); + transition(state, categoryLF, stateBreak, + state != stateCR && state != stateSoTNoBreak); + transition(state, categoryControl, stateBreak, state != stateSoTNoBreak); + if (state != statePictographic) { + transition(state, categoryExtend, stateOther, state <= stateCR); + transition(state, categoryZWJ, stateOther, state <= stateCR); + } else { + transition(state, categoryExtend, statePictographic, false); + transition(state, categoryZWJ, statePictographicZWJ, false); + } + if (state != stateRegionalSingle) { + transition(state, categoryRegionalIndicator, stateRegionalSingle, + state != statePrepend && state != stateSoTNoBreak); + } else { + transition(state, categoryRegionalIndicator, stateOther, false); + } + transition(state, categoryPrepend, statePrepend, + state != statePrepend && state != stateSoTNoBreak); + transition(state, categorySpacingMark, stateOther, state <= stateCR); + transition(state, categoryL, stateL, + state != statePrepend && state != stateL && state != stateSoTNoBreak); + transition(state, categoryLV, stateV, + state != statePrepend && state != stateL && state != stateSoTNoBreak); + transition(state, categoryLVT, stateT, + state != statePrepend && state != stateL && state != stateSoTNoBreak); + transition( + state, + categoryV, + stateV, + state != statePrepend && + state != stateL && + state != stateV && + state != stateSoTNoBreak); + transition( + state, + categoryT, + stateT, + state != statePrepend && + state != stateV && + state != stateT && + state != stateSoTNoBreak); + transition( + state, + categoryPictographic, + statePictographic, + state != statePrepend && + state != statePictographicZWJ && + state != stateSoTNoBreak); + transition(state, categoryEoT, stateSoTNoBreak, + state != stateSoT && state != stateSoTNoBreak); + } + var stringWriter = StringLiteralWriter(buffer, padding: 4); + buffer.write("const _stateMachine = "); + stringWriter.start("const _stateMachine = ".length); + for (var i = 0; i < table.length; i++) { + stringWriter.add(table[i]); + } + stringWriter.end(); + buffer.write(";\n"); + buffer.write(_moveMethod); + + if (verbose) _writeForwardTable(table); +} + +const String _moveMethod = """ +int move(int state, int inputCategory) => + _stateMachine.codeUnitAt((state & 0xF0) | inputCategory); +"""; + +const String _moveBackMethod = """ +int moveBack(int state, int inputCategory) => + _backStateMachine.codeUnitAt((state & 0xF0) | inputCategory); +"""; + +const states = [ + stateSoT, + stateBreak, + stateCR, + stateOther, + statePrepend, + stateL, + stateV, + stateT, + statePictographic, + statePictographicZWJ, + stateRegionalSingle, + stateSoTNoBreak, +]; + +const categories = [ + categoryOther, + categoryCR, + categoryLF, + categoryControl, + categoryExtend, + categoryZWJ, + categoryRegionalIndicator, + categoryPrepend, + categorySpacingMark, + categoryL, + categoryV, + categoryT, + categoryLV, + categoryLVT, + categoryPictographic, + categoryEoT, +]; + +////////////////////////////////////////////////////////////////////////////// +// Transition table for *reverse* grapheme cluster break automaton. +// For each previous state and each previous input character category, +// emit a new state and whether to break after that input character. +// The table uses `!` to mark a break before the input character, +// and then the output state. +// Some breaks cannot be determined without look-ahead. Those return +// specially marked states, with `$` in the name. +// Those states will trigger a special code path which will then update +// the state and/or index as necessary. +// Cat : State: +// : EoT Brk LF Otr Ext L V T Pic LA Reg EoTN RegE : +// -------------------------------------------------------------------------- +// Other: !Otr !Otr !Otr !Otr Otr !Otr !Otr !Otr !Otr - !Otr Otr !Otr : +// LF : !LF !LF !LF !LF !LF !LF !LF !LF !LF - !LF LF !LF : +// CR : !Brk !Brk Brk !Brk !Brk !Brk !Brk !Brk !Brk - !Brk Brk !Brk : +// Ctrl : !Brk !Brk !Brk !Brk !Brk !Brk !Brk !Brk !Brk - !Brk Brk !Brk : +// Ext : !Ext !Ext !Ext !Ext Ext !Ext !Ext !Ext !Ext LA !Ext Ext !Ext : +// ZWJ : !Ext !Ext !Ext !Ext Ext !Ext !Ext !Ext $LAZP - !Ext Ext !Ext : +// Spac : !Ext !Ext !Ext !Ext Ext !Ext !Ext !Ext !Ext - !Ext Ext !Ext : +// Prep : !Otr !Otr !Otr Otr Otr Otr Otr Otr Otr - Otr Otr Otr : +// Reg : !Reg !Reg !Reg !Reg Reg !Reg !Reg !Reg !Reg RegE$LARe Reg !LA : +// L : !L !L !L !L L L L !L !L - !L L !L : +// V : !V !V !V !V V !V V V !V - !V V !V : +// T : !T !T !T !T T !T !T T !T - !T T !T : +// LV : !L !L !L !L L !L L L !L - !L L !L : +// LVT : !L !L !L !L L !L !L L !L - !L L !L : +// Pic : !Pic !Pic !Pic !Pic Pic !Pic !Pic !Pic !Pic Pic !Pic Pic !Pic : +// SoT : - ! - ! - ! - ! - ! - ! - ! - ! - - ! - - ! - : + +const backStates = [ + stateEoT, + stateBreak, + stateLF, + stateOther, + stateExtend, + stateL, + stateV, + stateT, + statePictographic, + stateZWJPictographic | stateRegionalOdd, // Known disjoint look-ahead. + stateRegionalSingle, + stateEoTNoBreak, + stateRegionalEven, +]; + +void writeBackwardAutomaton(StringSink buffer, {required bool verbose}) { + assert(categories.length == 16); + var table = Uint8List(backStates.length * categories.length); + void transition(int state, int category, int newState, bool breakBefore) { + table[state + category] = newState | (breakBefore ? 0 : stateNoBreak); + } + + for (var state in backStates) { + if (state == stateZWJPictographic | stateRegionalOdd) { + // Special state where we know the previous character + // to some degree. + // Most inputs are unreachable. Use EoT-nobreak as unreachable marker. + for (var i = 0; i <= categoryEoT; i++) { + transition(state, i, stateEoTNoBreak, false); + } + transition(state, categoryExtend, stateZWJPictographic, false); + transition(state, categoryPictographic, statePictographic, false); + transition(state, categoryRegionalIndicator, stateRegionalEven, false); + // Remaining inputs are unreachable. + continue; + } + transition(state, categoryOther, stateOther, + state != stateExtend && state != stateEoTNoBreak); + transition(state, categoryLF, stateLF, state != stateEoTNoBreak); + transition(state, categoryCR, stateBreak, + state != stateLF && state != stateEoTNoBreak); + transition(state, categoryControl, stateBreak, state != stateEoTNoBreak); + if (state != stateZWJPictographic) { + transition( + state, + categoryExtend, + stateExtend, + state != stateExtend && + state != stateZWJPictographic && + state != stateEoTNoBreak); + } + transition(state, categorySpacingMark, stateExtend, + state != stateExtend && state != stateEoTNoBreak); + if (state != statePictographic) { + transition(state, categoryZWJ, stateExtend, + state != stateExtend && state != stateEoTNoBreak); + } else { + transition(state, categoryZWJ, stateZWJPictographicLookahead, true); + } + if (state == stateRegionalEven) { + transition(state, categoryRegionalIndicator, stateRegionalOdd, true); + } else if (state == stateRegionalSingle) { + transition( + state, categoryRegionalIndicator, stateRegionalLookahead, true); + } else { + transition(state, categoryRegionalIndicator, stateRegionalSingle, + state != stateExtend && state != stateEoTNoBreak); + } + transition(state, categoryPrepend, stateOther, state <= stateLF); + transition( + state, + categoryL, + stateL, + state != stateExtend && + state != stateL && + state != stateV && + state != stateEoTNoBreak); + transition( + state, + categoryLV, + stateL, + state != stateExtend && + state != stateV && + state != stateT && + state != stateEoTNoBreak); + transition(state, categoryLVT, stateL, + state != stateExtend && state != stateT && state != stateEoTNoBreak); + transition( + state, + categoryV, + stateV, + state != stateExtend && + state != stateT && + state != stateV && + state != stateEoTNoBreak); + transition(state, categoryT, stateT, + state != stateExtend && state != stateT && state != stateEoTNoBreak); + transition( + state, + categoryPictographic, + statePictographic, + state != stateExtend && + state != stateZWJPictographic && + state != stateEoTNoBreak); + // Use EoT-NoBreak as maker for unreachable. + transition(state, categorySoT, stateEoTNoBreak, + state != stateEoT && state != stateEoTNoBreak); + } + var stringWriter = StringLiteralWriter(buffer, padding: 4); + buffer.write("const _backStateMachine = "); + stringWriter.start("const _backStateMachine = ".length); + for (var i = 0; i < table.length; i++) { + stringWriter.add(table[i]); + } + stringWriter.end(); + buffer.write(";\n"); + buffer.write(_moveBackMethod); + if (verbose) _writeBackTable(table); +} + +void _writeForwardTable(Uint8List table) { + _writeTable( + table, + const [ + "SoT", + "Brk", + "CR", + "Otr", + "Pre", + "L", + "V", + "T", + "Pic", + "PicZ", + "Reg", + "SoTN", + ], + const [ + "Other", + "CR", + "LF", + "Ctrl", + "Ext", + "ZWJ", + "Spac", + "Prep", + "Reg", + "L", + "V", + "T", + "LV", + "LVT", + "Pic", + "EoT", + ], + stateSoTNoBreak, + stateSoTNoBreak); +} + +void _writeBackTable(Uint8List table) { + _writeTable( + table, + const [ + "EoT", + "Brk", + "LF", + "Otr", + "Ext", + "L", + "V", + "T", + "Pic", + "LA", + "Reg", + "EoTN", + "RegE", + "LARe", + "LAZP", + ], + const [ + "Other", + "LF", + "CR", + "Ctrl", + "Ext", + "ZWJ", + "Spac", + "Prep", + "Reg", + "L", + "V", + "T", + "LV", + "LVT", + "Pic", + "SoT", + ], + stateEoTNoBreak, + stateRegionalEven); +} + +void _writeTable(Uint8List table, List stateNames, + List catNames, int ignoreState, int maxState) { + const catIndex = { + "Other": categoryOther, + "LF": categoryLF, + "CR": categoryCR, + "Ctrl": categoryControl, + "Ext": categoryExtend, + "ZWJ": categoryZWJ, + "Spac": categorySpacingMark, + "Prep": categoryPrepend, + "Reg": categoryRegionalIndicator, + "L": categoryL, + "V": categoryV, + "T": categoryT, + "LV": categoryLV, + "LVT": categoryLVT, + "Pic": categoryPictographic, + "SoT": categorySoT, + "EoT": categoryEoT, + }; + + var buf = StringBuffer(); + buf.write(" : "); + for (var i = 0; i <= maxState; i += 0x10) { + buf.write(stateNames[i >> 4].padRight(5, " ")); + } + buf.writeln(":"); + buf.writeln("-" * (buf.length - 1)); + for (var ci = 0; ci < catNames.length; ci++) { + var catName = catNames[ci]; + buf + ..write(catName.padRight(5)) + ..write(": "); + var cat = catIndex[catName]!; + for (var si = 0; si <= maxState; si += 0x10) { + var value = table[si + cat]; + var prefix = " "; + if (value & 0xF0 > maxState) { + prefix = r"$"; + } else if (value & stateNoBreak == 0) { + prefix = "!"; + } + var stateName = stateNames[value >> 4]; + // EoT is marker for unreachable states. + if ((value & 0xF0) == ignoreState) stateName = " - "; + buf + ..write(prefix) + ..write(stateName.padRight(4, " ")); + } + buf.writeln(" :"); + } + stderr.writeln(buf); +} diff --git a/pkgs/characters/tool/src/data_files.dart b/pkgs/characters/tool/src/data_files.dart new file mode 100644 index 00000000..2151aedb --- /dev/null +++ b/pkgs/characters/tool/src/data_files.dart @@ -0,0 +1,50 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:io"; +import "shared.dart"; + +// Abstraction over files fetched from the `unicode.org/Public` UCD repository. + +// TODO: Find way to detect newest Unicode version, +// and compute URIs from that. + +final graphemeBreakPropertyData = DataFile( + // "https://unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakProperty.txt", + "https://unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakProperty.txt", + "third_party/Unicode_Consortium/GraphemeBreakProperty.txt"); + +final emojiData = DataFile( + // "https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt", + "https://unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt", + "third_party/Unicode_Consortium/emoji_data.txt"); + +final graphemeTestData = DataFile( + // "https://unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakTest.txt", + "https://unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt", + "third_party/Unicode_Consortium/GraphemeBreakTest.txt"); + +final emojiTestData = DataFile( + // "https://www.unicode.org/Public/emoji/15.0/emoji-test.txt", + "https://unicode.org/Public/emoji/latest/emoji-test.txt", + "third_party/Unicode_Consortium/emoji_test.txt"); + +final licenseFile = DataFile("https://www.unicode.org/license.txt", + "third_party/Unicode_Consortium/UNICODE_LICENSE.txt"); + +class DataFile { + final String sourceLocation; + // Target location relative to package root. + final String targetLocation; + String? _contents; + DataFile(this.sourceLocation, this.targetLocation); + + Future get contents async => _contents ??= await load(); + + Future load({bool checkForUpdate = false}) async => + (checkForUpdate ? null : _contents) ?? + (_contents = await fetch(sourceLocation, + targetFile: File(path(packageRoot, targetLocation)), + forceLoad: checkForUpdate)); +} diff --git a/pkgs/characters/tool/src/grapheme_category_loader.dart b/pkgs/characters/tool/src/grapheme_category_loader.dart new file mode 100644 index 00000000..32fe76d4 --- /dev/null +++ b/pkgs/characters/tool/src/grapheme_category_loader.dart @@ -0,0 +1,94 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:async"; +import "dart:io" show stderr; +import "dart:typed_data"; + +import "package:characters/src/grapheme_clusters/constants.dart"; + +import "data_files.dart"; + +// Loads the grapheme breaking categories from Unicode data files. + +Future loadGraphemeCategories( + {bool update = false, bool verbose = false}) async { + var dataFiles = await Future.wait([ + graphemeBreakPropertyData.load(checkForUpdate: update), + emojiData.load(checkForUpdate: update), + // This data used to be in: + // https://www.unicode.org/Public/12.0.0/ucd/auxiliary/GraphemeBreakProperty-12.0.0d16.txt + // Make sure it's included. + Future.value( + "D800..DFFF ; Control # Cc ..\n"), + ]); + var table = _parseCategories(dataFiles, verbose: verbose); + return table; +} + +// ----------------------------------------------------------------------------- +// Unicode table parser. +final _tableRE = RegExp(r"^([\dA-F]{4,5})(?:..([\dA-F]{4,5}))?\s*;\s*(\w+)\s*#", + multiLine: true); + +// The relevant names that occur in the Unicode tables. +final categoryByName = { + "CR": categoryCR, + "LF": categoryLF, + "Control": categoryControl, + "Extend": categoryExtend, + "ZWJ": categoryZWJ, + "Regional_Indicator": categoryRegionalIndicator, + "Prepend": categoryPrepend, + "SpacingMark": categorySpacingMark, + "L": categoryL, + "V": categoryV, + "T": categoryT, + "LV": categoryLV, + "LVT": categoryLVT, + "Extended_Pictographic": categoryPictographic, +}; + +Uint8List _parseCategories(List files, {required bool verbose}) { + var result = Uint8List(0x110000); + result.fillRange(0, result.length, categoryOther); + var count = 0; + var categoryCount = {}; + var categoryMin = { + for (var category in categoryByName.keys) category: 0x10FFFF + }; + int min(int a, int b) => a < b ? a : b; + for (var file in files) { + for (var match in _tableRE.allMatches(file)) { + var from = int.parse(match[1]!, radix: 16); + var to = match[2] == null ? from : int.parse(match[2]!, radix: 16); + var category = match[3]!; + assert(from <= to); + var categoryCode = categoryByName[category]; + if (categoryCode != null) { + assert(result.getRange(from, to + 1).every((x) => x == categoryOther)); + result.fillRange(from, to + 1, categoryCode); + count += to + 1 - from; + categoryMin[category] = min(categoryMin[category]!, from); + categoryCount[category] = + (categoryCount[category] ?? 0) + (to + 1 - from); + } + } + } + if (verbose) { + stderr.writeln("Loaded $count entries"); + categoryCount.forEach((category, count) { + stderr.writeln(" $category: $count, min: U+" + "${categoryMin[category]!.toRadixString(16).padLeft(4, "0")}"); + }); + } + if (result[0xD800] != categoryControl) { + stderr.writeln("WARNING: Surrogates are not controls. Check inputs."); + } + if (categoryMin["Regional_Indicator"]! < 0x10000) { + stderr.writeln("WARNING: Regional Indicator in BMP. " + "Code assuming all RIs are non-BMP will fail"); + } + return result; +} diff --git a/pkgs/characters/tool/src/indirect_table.dart b/pkgs/characters/tool/src/indirect_table.dart new file mode 100644 index 00000000..fbc0d6f7 --- /dev/null +++ b/pkgs/characters/tool/src/indirect_table.dart @@ -0,0 +1,54 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:typed_data"; + +/// A table with chunks and indirections. +/// +/// Contains a number, one or more, of chunks, +/// and a list of entries which point to entire chunks or parts of chunks. +/// +/// The entries represent sequnences of values. +/// Each such sequence is stored in one of the chunks. +/// +/// The main goal of these tools are to go from an initial complete +/// table with one chunk and non-overlapping entries, +/// to a smaller table with one chunk where the entry sequences may overlap. +/// +/// Having multiple chunks is an intermediate step which allows the code +/// to keep the entries consistent during the transformations. +class IndirectTable { + /// Individual chunks. + List chunks; + + /// Position and length of each entry in one of the [chunks]. + List entries; + IndirectTable(this.chunks, this.entries); +} + +class TableEntry { + int chunkNumber; + int start; + int length; + TableEntry(this.chunkNumber, this.start, this.length); + int get end => start + length; + + void update(int chunkNumber, int start, int length) { + this.chunkNumber = chunkNumber; + this.start = start; + this.length = length; + } + + TableEntry copy() => TableEntry(chunkNumber, start, length); + + void copyFrom(TableEntry other) { + chunkNumber = other.chunkNumber; + start = other.start; + length = other.length; + } + + @override + String toString() => + "$chunkNumber[${start.toRadixString(16)}:${end.toRadixString(16)}]"; +} diff --git a/pkgs/characters/tool/src/list_overlap.dart b/pkgs/characters/tool/src/list_overlap.dart new file mode 100644 index 00000000..c823f225 --- /dev/null +++ b/pkgs/characters/tool/src/list_overlap.dart @@ -0,0 +1,86 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Given a list of lists of integers, figure out a good way to overlap +// these into a single list, with a list of indices telling where each +// original list started. + +import "dart:typed_data"; + +import "atsp.dart"; +import "indirect_table.dart"; + +/// Takes a set of distinct chunks, and finds a semi-optimal overlapping. +/// +/// The overlapping is a single chunk, of minimal length, containing all +/// the original chunk's contents, and an indirection entry pointing +/// to the position in the new table. +IndirectTable combineLists(List input) { + // See how much chunks are overlapping. + var chunkCount = input.length; + var graph = Graph(chunkCount + 1); + for (var i = 0; i < input.length; i++) { + var firstChunk = input[i]; + for (var j = 0; j < input.length; j++) { + if (i == j) continue; + var secondChunk = input[j]; + var overlap = _overlap(firstChunk, secondChunk); + graph.setWeight(i, j, secondChunk.length - overlap); + } + } + + // Find an optimal(ish) path. + + // First create a cycle through the one extra node (index `chunkCount`). + var path = List.filled(chunkCount + 2, chunkCount); + for (var i = 0; i <= chunkCount; i++) { + path[i + 1] = i; + } + + while (opt3(graph, path)) {} + // Then break the cycle at the extra node. + // The way we optimize, it's still first/last. + assert(path.last == chunkCount); + assert(path.first == chunkCount); + + var chunkLength = + input[path[1]].length + graph.pathWeight(path, 1, path.length - 2); + + var chunkData = Uint8List(chunkLength); + var entries = List.filled(input.length, TableEntry(0, 0, 0)); + { + // Handle path chunks. + var prevChunkNum = path[1]; + var firstChunk = input[prevChunkNum]; + chunkData.setRange(0, firstChunk.length, firstChunk); + entries[prevChunkNum] = TableEntry(0, 0, firstChunk.length); + var index = firstChunk.length; + for (var i = 2; i < path.length - 1; i++) { + var nextChunkNum = path[i]; + var chunk = input[nextChunkNum]; + var nonOverlap = graph.weight(prevChunkNum, nextChunkNum); + var overlap = chunk.length - nonOverlap; + entries[nextChunkNum] = TableEntry(0, index - overlap, chunk.length); + chunkData.setRange(index, index + nonOverlap, chunk, overlap); + index += nonOverlap; + prevChunkNum = nextChunkNum; + } + } + return IndirectTable([chunkData], entries); +} + +/// Finds how much overlap there is between [first] and [second] in that order. +int _overlap(Uint8List first, Uint8List second) { + var maxOverlap = + (first.length < second.length ? first.length : second.length) - 1; + outer: + for (var overlap = maxOverlap; overlap > 0; overlap--) { + var firstStart = first.length - overlap; + for (var j = 0; j < overlap; j++) { + if (first[firstStart + j] != second[j]) continue outer; + } + return overlap; + } + return 0; +} diff --git a/pkgs/characters/tool/src/shared.dart b/pkgs/characters/tool/src/shared.dart new file mode 100644 index 00000000..eff2413a --- /dev/null +++ b/pkgs/characters/tool/src/shared.dart @@ -0,0 +1,94 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:async"; +import "dart:convert"; +import "dart:io"; + +// Shared tools used by other libraries. + +/// Quick and dirty URI loader. +/// +/// Stashes copy in specified file, or in file in tmp directory. +Future fetch(String location, + {File? targetFile, bool forceLoad = false}) async { + if (targetFile == null) { + var safeLocation = location.replaceAll(RegExp(r'[^\w]+'), '-'); + targetFile = File(path(Directory.systemTemp.path, safeLocation)); + } + if (!forceLoad && targetFile.existsSync()) { + return targetFile.readAsString(); + } + var uri = Uri.parse(location); + String contents; + if (uri.isScheme("file")) { + contents = File.fromUri(uri).readAsStringSync(); + } else { + var client = HttpClient(); + var request = await client.getUrl(uri); + var response = await request.close(); + if (response.statusCode != HttpStatus.ok) { + throw HttpException(response.reasonPhrase, uri: uri); + } + contents = await utf8.decoder.bind(response).join(""); + client.close(); + } + targetFile.writeAsStringSync(contents); + return contents; +} + +const copyright = """ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +"""; + +/// Combines file paths into one path. +/// +/// No fancy stuff, just adds path separator between parts, +/// if previous part doesn't end with one. +/// (Don't let later parts start with a path separator!) +/// Converts forward slashes to backwards slashes in Windows. +/// +/// Empty parts are ignored. +String path(String path, [String path2 = "", String path3 = ""]) { + var separator = Platform.pathSeparator; + path = _windowize(path); + if (path2.isEmpty && path3.isEmpty) return path; + var buffer = StringBuffer(path); + var prev = path; + for (var part in [path2, path3]) { + if (part.isEmpty) continue; + part = _windowize(part); + if (!prev.endsWith(separator)) { + buffer.write(separator); + } + buffer.write(part); + prev = part; + } + return buffer.toString(); +} + +String _windowize(String path) => + Platform.isWindows ? path.replaceAll("/", r"\") : path; + +/// Package root directory. +String packageRoot = _findRootDir().path; + +/// Finds package root in the parent chain of the current directory. +/// +/// Recognizes package root by `pubspec.yaml` file. +Directory _findRootDir() { + var dir = Directory.current; + while (true) { + var pubspec = File("${dir.path}${Platform.pathSeparator}pubspec.yaml"); + if (pubspec.existsSync()) return dir; + var parent = dir.parent; + if (dir.path == parent.path) { + throw UnsupportedError( + "Cannot find package root directory. Run tools from inside package!"); + } + } +} diff --git a/pkgs/characters/tool/src/string_literal_writer.dart b/pkgs/characters/tool/src/string_literal_writer.dart new file mode 100644 index 00000000..0bdfaded --- /dev/null +++ b/pkgs/characters/tool/src/string_literal_writer.dart @@ -0,0 +1,116 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// Class to write string literals for bytes or words. +/// +/// The string will be `'` delimited. +/// Escapes as necessary, and performs line breaks to stay within 80 +/// characters. +class StringLiteralWriter { + final StringSink buffer; + final String _padding; + final int _lineLength; + final bool Function(int) _escape; + int _currentLineLength = 0; + + static final Map _escapeCache = {}; + + StringLiteralWriter(this.buffer, + {int padding = 0, int lineLength = 80, bool Function(int)? escape}) + : _padding = " " * padding, + _lineLength = lineLength, + _escape = escape ?? _defaultEscape; + + static bool _defaultEscape(int codeUnit) { + return codeUnit < 0x20 || codeUnit >= 0x7f && codeUnit <= 0xa0; + } + + void start([int initialOffset = 0]) { + if (initialOffset >= _lineLength - 2) { + buffer + ..write('\n') + ..write(_padding); + initialOffset = _padding.length; + } + buffer.write("'"); + _currentLineLength = initialOffset + 1; + } + + /// Adds a single UTF-16 code unit. + void add(int codeUnit) { + // Always escape: `\n`, `\r`, `'`, `$` and `\`, plus anything the user wants. + if (_escape(codeUnit) || + codeUnit == 0x24 || + codeUnit == 0x27 || + codeUnit == 0x5c || + codeUnit == 0x0a || + codeUnit == 0x0d) { + _writeEscape(codeUnit); + return; + } + if (_currentLineLength >= _lineLength - 1) { + _wrap(); + } + _currentLineLength++; + buffer.writeCharCode(codeUnit); + } + + void _writeEscape(int codeUnit) { + var replacement = _escapeCache[codeUnit]; + if (replacement == null) { + if (codeUnit < 0x10) { + if (codeUnit == "\b".codeUnitAt(0)) { + replacement = r"\b"; + } else if (codeUnit == "\t".codeUnitAt(0)) { + replacement = r"\t"; + } else if (codeUnit == "\n".codeUnitAt(0)) { + replacement = r"\n"; + } else if (codeUnit == "\v".codeUnitAt(0)) { + replacement = r"\v"; + } else if (codeUnit == "\f".codeUnitAt(0)) { + replacement = r"\f"; + } else if (codeUnit == "\r".codeUnitAt(0)) { + replacement = r"\r"; + } else { + replacement = r"\x0" + codeUnit.toRadixString(16); + } + } else if (codeUnit < 0x100) { + if (codeUnit == r"$".codeUnitAt(0)) { + replacement = r"\$"; + } else if (codeUnit == "'".codeUnitAt(0)) { + replacement = r"\'"; + } + if (codeUnit == r"\".codeUnitAt(0)) { + replacement = r"\\"; + } else { + replacement = r"\x" + codeUnit.toRadixString(16); + } + } else if (codeUnit < 0x1000) { + replacement = r"\u0" + codeUnit.toRadixString(16); + } else if (codeUnit < 0x10000) { + replacement = r"\u" + codeUnit.toRadixString(16); + } else { + replacement = "\\u{${codeUnit.toRadixString(16)}}"; + } + _escapeCache[codeUnit] = replacement; + } + if (_currentLineLength + replacement.length + 1 > _lineLength) { + _wrap(); + } + buffer.write(replacement); + _currentLineLength += replacement.length; + } + + void _wrap() { + buffer + ..write("'\n") + ..write(_padding) + ..write("'"); + _currentLineLength = _padding.length + 1; + } + + void end() { + buffer.write("'"); + } +} diff --git a/pkgs/characters/tool/src/table_builder.dart b/pkgs/characters/tool/src/table_builder.dart new file mode 100644 index 00000000..86a98bc3 --- /dev/null +++ b/pkgs/characters/tool/src/table_builder.dart @@ -0,0 +1,100 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "dart:collection"; +import "dart:typed_data"; + +import "indirect_table.dart"; +import "list_overlap.dart"; + +/// Splits an indirect table with one large chunk into separate smaller chunks. +/// +/// No new chunk is larger than the largest entry. +/// +/// Preserves the entries, but they now point into the new chunks. +/// All chunks are distinct, and no chunk is a sub-list of another chunk. +void chunkifyTable(IndirectTable table) { + if (table.chunks.length != 1) { + throw ArgumentError("Single chunk table required"); + } + var data = table.chunks[0]; + var entries = table.entries.toList(); + entries.sort((a, b) => b.length - a.length); + var uniqueChunks = []; + var duplicateDetector = + HashMap(equals: _equals, hashCode: _hash); + for (var entry in entries) { + var chunk = data.sublist(entry.start, entry.end); + var existingEntry = duplicateDetector[chunk]; + if (existingEntry != null) { + entry.copyFrom(existingEntry); + } else { + // Check if chunk is a sublist of any existing chunk. + var chunkNum = 0; + var indexOf = 0; + for (; chunkNum < uniqueChunks.length; chunkNum++) { + var existingChunk = uniqueChunks[chunkNum]; + if (existingChunk.length > chunk.length) { + var position = _indexOf(chunk, existingChunk); + if (position >= 0) { + indexOf = position; + break; + } + } + } + if (chunkNum == uniqueChunks.length) { + uniqueChunks.add(chunk); + } + entry.update(chunkNum, indexOf, entry.length); + duplicateDetector[chunk] = entry; + } + } + table.chunks = uniqueChunks; +} + +int _indexOf(Uint8List short, Uint8List long) { + var length = short.length; + var range = long.length - length; + outer: + for (var i = 0; i < range; i++) { + for (var j = 0; j < short.length; j++) { + if (short[j] != long[i + j]) continue outer; + } + return i; + } + return -1; +} + +/// Combines an indirect table with multiple chunks into only one chunk. +void combineChunkedTable(IndirectTable table) { + var overlapped = combineLists(table.chunks); + for (var entry in table.entries) { + var chunkEntry = overlapped.entries[entry.chunkNumber]; + entry.update(0, entry.start + chunkEntry.start, entry.length); + } + table.chunks = [overlapped.chunks[0]]; +} + +/// Hash on a list. +int _hash(Uint8List list) { + var view = list.buffer.asUint32List(); + var hash = 0; + for (var i = 0; i < view.length; i++) { + hash = (hash * 37 ^ view[i]) & 0xFFFFFFFF; + } + return hash; +} + +/// Equality of lists of equal length. +bool _equals(Uint8List a, Uint8List b) { + assert(a.length == b.length); + assert(a.length % 8 == 0); + // Compare 32 bits at a time. + var aView = a.buffer.asInt64List(); + var bView = b.buffer.asInt64List(); + for (var i = 0; i < aView.length; i++) { + if (aView[i] != bView[i]) return false; + } + return true; +} From f729e1cff3f5ac4dc327d2656cc12d10f50d11c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 May 2023 11:12:46 -0700 Subject: [PATCH 59/82] Bump actions/checkout from 3.5.0 to 3.5.2 (dart-lang/characters#81) Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.0 to 3.5.2. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/8f4b7f84864484a7bf31766abe9204da3cbe65b3...8e5e7e5ab8b370d6c329ec480221332ada57f0ab) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 38d65121..701cc697 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} From 589b8d66fb5519ea17517c1a45b475a05a7872f4 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Mon, 15 May 2023 14:35:26 -0700 Subject: [PATCH 60/82] blast_repo fixes (dart-lang/characters#82) dependabot --- pkgs/characters/.github/dependabot.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pkgs/characters/.github/dependabot.yml b/pkgs/characters/.github/dependabot.yml index 1603cdd9..725f03af 100644 --- a/pkgs/characters/.github/dependabot.yml +++ b/pkgs/characters/.github/dependabot.yml @@ -3,7 +3,9 @@ version: 2 updates: - - package-ecosystem: "github-actions" - directory: "/" + - package-ecosystem: github-actions + directory: / schedule: - interval: "monthly" + interval: monthly + labels: + - autosubmit From ef63e5bdf3266900edb4146ddb021763c6b00a1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Jul 2023 17:33:12 +0000 Subject: [PATCH 61/82] Bump actions/checkout from 3.5.2 to 3.5.3 (dart-lang/characters#84) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.2 to 3.5.3.
Release notes

Sourced from actions/checkout's releases.

v3.5.3

What's Changed

New Contributors

Full Changelog: https://github.com/actions/checkout/compare/v3...v3.5.3

Changelog

Sourced from actions/checkout's changelog.

Changelog

v3.5.3

v3.5.2

v3.5.1

v3.5.0

v3.4.0

v3.3.0

v3.2.0

v3.1.0

v3.0.2

v3.0.1

v3.0.0

v2.3.1

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=3.5.2&new-version=3.5.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 701cc697..7fa89719 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} From 6c7c759558043bdf64952bfb8307edf57e96c6d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Sep 2023 17:29:58 +0000 Subject: [PATCH 62/82] Bump actions/checkout from 3.5.3 to 3.6.0 (dart-lang/characters#86) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.3 to 3.6.0.
Release notes

Sourced from actions/checkout's releases.

v3.6.0

What's Changed

New Contributors

Full Changelog: https://github.com/actions/checkout/compare/v3.5.3...v3.6.0

Changelog

Sourced from actions/checkout's changelog.

Changelog

v3.6.0

v3.5.3

v3.5.2

v3.5.1

v3.5.0

v3.4.0

v3.3.0

v3.2.0

v3.1.0

v3.0.2

v3.0.1

v3.0.0

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=3.5.3&new-version=3.6.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 7fa89719..69289aee 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f with: sdk: ${{ matrix.sdk }} From 8e15caedf163ef2b478c55db36fc2b4d8f077922 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Oct 2023 17:30:23 +0000 Subject: [PATCH 63/82] Bump dart-lang/setup-dart from 1.5.0 to 1.5.1 (dart-lang/characters#88) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [dart-lang/setup-dart](https://github.com/dart-lang/setup-dart) from 1.5.0 to 1.5.1.
Release notes

Sourced from dart-lang/setup-dart's releases.

v1.5.1

  • No longer test the setup-dart action on pre-2.12 SDKs.
  • Upgrade JS interop code to use extension types (the new name for inline classes).
  • The upcoming rename of the be channel to main is now supported with forward compatibility that switches when the rename happens.
Changelog

Sourced from dart-lang/setup-dart's changelog.

v1.6.0

  • Enable provisioning of the latest Dart SDK patch release by specifying just the major and minor version (e.g. 3.2).

v1.5.1

  • No longer test the setup-dart action on pre-2.12 SDKs.
  • Upgrade JS interop code to use extension types (the new name for inline classes).
  • The upcoming rename of the be channel to main is now supported with forward compatibility that switches when the rename happens.

v1.5.0

  • Re-wrote the implementation of the action into Dart.
  • Auto-detect the platform architecture (x64, ia32, arm, arm64).
  • Improved the caching and download resilience of the sdk.
  • Added a new action output: dart-version - the installed version of the sdk.

v1.4.0

  • Automatically create OIDC token for pub.dev.
  • Add a reusable workflow for publishing.

v1.3.0

  • The install location of the Dart SDK is now available in an environment variable, DART_HOME (dart-lang/characters#43).
  • Fixed an issue where cached downloads could lead to unzip issues on self-hosted runners (dart-lang/characters#35).

v1.2.0

  • Fixed a path issue impacting git dependencies on Windows.

v1.1.0

  • Added a flavor option setup.sh to allow downloading unpublished builds.

v1.0.0

  • Promoted to 1.0 stable.

v0.5

  • Fixed a Windows pub global activate path issue.

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dart-lang/setup-dart&package-manager=github_actions&previous-version=1.5.0&new-version=1.5.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 69289aee..dc59ff27 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -23,7 +23,7 @@ jobs: sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 - - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f + - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1 with: sdk: ${{ matrix.sdk }} - id: install @@ -49,7 +49,7 @@ jobs: sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 - - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f + - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1 with: sdk: ${{ matrix.sdk }} - id: install From bf74e5edd7d08848e12e50f6ae7547c87b8a19d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Oct 2023 17:33:23 +0000 Subject: [PATCH 64/82] Bump actions/checkout from 3.6.0 to 4.1.0 (dart-lang/characters#87) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/checkout](https://github.com/actions/checkout) from 3.6.0 to 4.1.0.
Release notes

Sourced from actions/checkout's releases.

v4.1.0

What's Changed

New Contributors

Full Changelog: https://github.com/actions/checkout/compare/v4.0.0...v4.1.0

v4.0.0

What's Changed

New Contributors

Full Changelog: https://github.com/actions/checkout/compare/v3...v4.0.0

Changelog

Sourced from actions/checkout's changelog.

Changelog

v4.1.0

v4.0.0

v3.6.0

v3.5.3

v3.5.2

v3.5.1

v3.5.0

v3.4.0

v3.3.0

v3.2.0

v3.1.0

v3.0.2

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=3.6.0&new-version=4.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index dc59ff27..e297d833 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1 with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1 with: sdk: ${{ matrix.sdk }} From 06fc1a7284484d61fbdbe892ba8899901d8faf2f Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Fri, 13 Oct 2023 10:12:56 -0700 Subject: [PATCH 65/82] Fix broken comment references (dart-lang/characters#89) * Fix broken comment references * feedback --- pkgs/characters/.gitignore | 1 + pkgs/characters/lib/src/characters.dart | 9 ++++----- pkgs/characters/lib/src/characters_impl.dart | 6 +++--- pkgs/characters/tool/src/atsp.dart | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkgs/characters/.gitignore b/pkgs/characters/.gitignore index 49ce72d7..2d72f2ba 100644 --- a/pkgs/characters/.gitignore +++ b/pkgs/characters/.gitignore @@ -1,3 +1,4 @@ .dart_tool/ .packages pubspec.lock +doc/api/ diff --git a/pkgs/characters/lib/src/characters.dart b/pkgs/characters/lib/src/characters.dart index a0206741..4aa7d751 100644 --- a/pkgs/characters/lib/src/characters.dart +++ b/pkgs/characters/lib/src/characters.dart @@ -49,8 +49,8 @@ abstract class Characters implements Iterable { /// Returns [CharacterRange] positioned after the last character /// of this [Characters]. /// - /// Allows iterating the characters of [string] backwards - /// using [CharacterRange.movePrevious], + /// Allows iterating the characters of [string] backwards using + /// [CharacterRange.moveBack], /// as well as controlling the iteration in more detail. CharacterRange get iteratorAtEnd; @@ -62,7 +62,7 @@ abstract class Characters implements Iterable { /// and that character is one of the characters /// in this character sequence, and false otherwise. /// This behavior is inherited from `Iterable`, - /// which is why it is not [Character] based. + /// which is why it is not [Characters]-based. /// Use [containsAll] for a method which acts like /// [String.contains] for characters. @override @@ -390,8 +390,7 @@ abstract class CharacterRange implements Iterator { /// The copy is in the exact same state as this iterator. /// Can be used to iterate the following characters more than once /// at the same time. To simply rewind an iterator, remember the - /// [start] or [end] position and use [reset] to reset the iterator - /// to that position. + /// start or end position and use reset the iterator to that position. CharacterRange copy(); /// Whether the current range is empty. diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index e94b3d1c..eb8cef43 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -464,15 +464,15 @@ class StringCharacterRange implements CharacterRange { /// Creates a [Breaks] from [_end] to `_string.length`. /// - /// Uses information stored in [_state] for cases where the next - /// character has already been seen. + /// Uses information stored in the state for cases where the next character + /// has already been seen. Breaks _breaksFromEnd() { return Breaks(_string, _end, _string.length, stateSoTNoBreak); } /// Creates a [Breaks] from string start to [_start]. /// - /// Uses information stored in [_state] for cases where the previous + /// Uses information stored in the state for cases where the previous /// character has already been seen. BackBreaks _backBreaksFromStart() { return BackBreaks(_string, _start, 0, stateEoTNoBreak); diff --git a/pkgs/characters/tool/src/atsp.dart b/pkgs/characters/tool/src/atsp.dart index 5ccd3333..a62374d2 100644 --- a/pkgs/characters/tool/src/atsp.dart +++ b/pkgs/characters/tool/src/atsp.dart @@ -12,7 +12,7 @@ /// An asymmetric weighted complete graph. /// -/// The vertices are identified by numbers 0 through [vertices] - 1. +/// The vertices are identified by numbers 0 through [vertexCount] - 1. /// Edges are pairs of vertices. class Graph { /// Number of vertices. From 0bcc1deabe51728423d9f8b859545b7621a56471 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Nov 2023 18:01:14 +0000 Subject: [PATCH 66/82] Bump actions/checkout from 4.1.0 to 4.1.1 (dart-lang/characters#90) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.0 to 4.1.1.
Release notes

Sourced from actions/checkout's releases.

v4.1.1

What's Changed

New Contributors

Full Changelog: https://github.com/actions/checkout/compare/v4.1.0...v4.1.1

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=4.1.0&new-version=4.1.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index e297d833..482bcd91 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1 with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1 with: sdk: ${{ matrix.sdk }} From d062b28241ccab677d1cb0047d11dd37356dece2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Nov 2023 18:27:19 +0000 Subject: [PATCH 67/82] Bump dart-lang/setup-dart from 1.5.1 to 1.6.0 (dart-lang/characters#91) Bumps [dart-lang/setup-dart](https://github.com/dart-lang/setup-dart) from 1.5.1 to 1.6.0.
Release notes

Sourced from dart-lang/setup-dart's releases.

v1.6.0

  • Enable provisioning of the latest Dart SDK patch release by specifying just the major and minor version (e.g. 3.2).
Changelog

Sourced from dart-lang/setup-dart's changelog.

v1.6.0

  • Enable provisioning of the latest Dart SDK patch release by specifying just the major and minor version (e.g. 3.2).

v1.5.1

  • No longer test the setup-dart action on pre-2.12 SDKs.
  • Upgrade JS interop code to use extension types (the new name for inline classes).
  • The upcoming rename of the be channel to main is now supported with forward compatibility that switches when the rename happens.

v1.5.0

  • Re-wrote the implementation of the action into Dart.
  • Auto-detect the platform architecture (x64, ia32, arm, arm64).
  • Improved the caching and download resilience of the sdk.
  • Added a new action output: dart-version - the installed version of the sdk.

v1.4.0

  • Automatically create OIDC token for pub.dev.
  • Add a reusable workflow for publishing.

v1.3.0

  • The install location of the Dart SDK is now available in an environment variable, DART_HOME (dart-lang/characters#43).
  • Fixed an issue where cached downloads could lead to unzip issues on self-hosted runners (dart-lang/characters#35).

v1.2.0

  • Fixed a path issue impacting git dependencies on Windows.

v1.1.0

  • Added a flavor option setup.sh to allow downloading unpublished builds.

v1.0.0

  • Promoted to 1.0 stable.

v0.5

  • Fixed a Windows pub global activate path issue.

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dart-lang/setup-dart&package-manager=github_actions&previous-version=1.5.1&new-version=1.6.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 482bcd91..d7de4b61 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -23,7 +23,7 @@ jobs: sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1 + - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d with: sdk: ${{ matrix.sdk }} - id: install @@ -49,7 +49,7 @@ jobs: sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: dart-lang/setup-dart@8a4b97ea2017cc079571daec46542f76189836b1 + - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d with: sdk: ${{ matrix.sdk }} - id: install From ec59b4525cd1840007861ce7bfc98c0a2757e02d Mon Sep 17 00:00:00 2001 From: Parker Lougheed Date: Mon, 29 Jan 2024 14:23:12 -0600 Subject: [PATCH 68/82] Fix README formatting (dart-lang/characters#92) --- pkgs/characters/CHANGELOG.md | 4 ++++ pkgs/characters/README.md | 32 ++++++++++++++++---------------- pkgs/characters/pubspec.yaml | 5 +++-- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index c42f1bcb..28e51bca 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.1-wip + +* Fixed README rendering on pub.dev and API docs. + ## 1.3.0 * Updated to use Unicode 15.0.0. diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index e3bef5ca..38a2d3bb 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -77,7 +77,7 @@ so they cannot be used safely on a sequence of characters. Grapheme clusters have varying length in the underlying representation, so operations on a [`Characters`][Characters] sequence cannot be index based. -Instead the [`CharacterRange`][CharacterRange] *iterator* +Instead, the [`CharacterRange`][CharacterRange] *iterator* provided by [`Characters.iterator`][Characters.iterator] has been greatly enhanced. It can move both forwards and backwards, @@ -93,30 +93,30 @@ Example: ```dart // Using String indices. -String firstTagString(String source) { - var start = string.indexOf("<") + 1; +String? firstTagString(String source) { + var start = source.indexOf('<') + 1; if (start > 0) { - var end = string.indexOf(">", start); + var end = source.indexOf('>', start); if (end >= 0) { - return string.substring(start, end); + return source.substring(start, end); } } return null; } // Using CharacterRange operations. -Characters firstTagCharacters(Characters source) { - var range = source.findFirst("<".characters); - if (range != null && range.moveUntil(">".characters)) { +Characters? firstTagCharacters(Characters source) { + var range = source.findFirst('<'.characters); + if (range != null && range.moveUntil('>'.characters)) { return range.currentCharacters; } return null; } ``` -[ByteBuffer]: https://api.dart.dev/stable/2.0.0/dart-typed_data/ByteBuffer-class.html "ByteBuffer class" -[CharacterRange.moveNext]: https://pub.dev/documentation/characters/latest/characters/CharacterRange/moveNext.html "CharacterRange.moveNext" -[CharacterRange]: https://pub.dev/documentation/characters/latest/characters/CharacterRange-class.html "CharacterRange class" +[ByteBuffer]: https://api.dart.dev/dart-typed_data/ByteBuffer-class.html "ByteBuffer class" +[CharacterRange.moveNext]: https://pub.dev/documentation/characters/latest/characters/CharacterRange/moveNext.html "CharacterRange.moveNext" +[CharacterRange]: https://pub.dev/documentation/characters/latest/characters/CharacterRange-class.html "CharacterRange class" [Characters constructor]: https://pub.dev/documentation/characters/latest/characters/Characters/Characters.html "Characters constructor" [Characters.iterator]: https://pub.dev/documentation/characters/latest/characters/Characters/iterator.html "CharactersRange get iterator" [Characters.replaceAll]: https://pub.dev/documentation/characters/latest/characters/Characters/replaceAll.html "Characters.replaceAlle" @@ -126,8 +126,8 @@ Characters firstTagCharacters(Characters source) { [Code Units]: https://unicode.org/glossary/#code_unit "Unicode Code Units" [Glyphs]: https://unicode.org/glossary/#glyph "Unicode Glyphs" [Grapheme Clusters]: https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries "Unicode (Extended) Grapheme Cluster" -[Iterable]: https://api.dart.dev/stable/2.0.0/dart-core/Iterable-class.html "Iterable class" -[Runes]: https://api.dart.dev/stable/2.0.0/dart-core/Runes-class.html "Runes class" -[String]: https://api.dart.dev/stable/2.0.0/dart-core/String-class.html "String class" -[Uint16List]: https://api.dart.dev/stable/2.0.0/dart-typed_data/Uint16List-class.html "Uint16List class" -[Uint8List]: https://api.dart.dev/stable/2.0.0/dart-typed_data/Uint8List-class.html "Uint8List class" +[Iterable]: https://api.dart.dev/dart-core/Iterable-class.html "Iterable class" +[Runes]: https://api.dart.dev/dart-core/Runes-class.html "Runes class" +[String]: https://api.dart.dev/dart-core/String-class.html "String class" +[Uint16List]: https://api.dart.dev/dart-typed_data/Uint16List-class.html "Uint16List class" +[Uint8List]: https://api.dart.dev/dart-typed_data/Uint8List-class.html "Uint8List class" diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index bd4803b8..63928b9b 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,6 +1,7 @@ name: characters -version: 1.3.0 -description: String replacement with operations that are Unicode/grapheme cluster aware. +version: 1.3.1-wip +description: >- + String replacement with operations that are Unicode/grapheme cluster aware. repository: https://github.com/dart-lang/characters environment: From 1346dd2d00d0d6b39610d2463011bdda656496d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Feb 2024 17:47:00 +0000 Subject: [PATCH 69/82] Bump dart-lang/setup-dart from 1.6.0 to 1.6.2 (dart-lang/characters#94) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [dart-lang/setup-dart](https://github.com/dart-lang/setup-dart) from 1.6.0 to 1.6.2.
Release notes

Sourced from dart-lang/setup-dart's releases.

v1.6.2

v1.6.1

  • Updated the google storage url for main channel releases.
Changelog

Sourced from dart-lang/setup-dart's changelog.

v1.6.2

v1.6.1

  • Updated the google storage url for main channel releases.

v1.6.0

  • Enable provisioning of the latest Dart SDK patch release by specifying just the major and minor version (e.g. 3.2).

v1.5.1

  • No longer test the setup-dart action on pre-2.12 SDKs.
  • Upgrade JS interop code to use extension types (the new name for inline classes).
  • The upcoming rename of the be channel to main is now supported with forward compatibility that switches when the rename happens.

v1.5.0

  • Re-wrote the implementation of the action into Dart.
  • Auto-detect the platform architecture (x64, ia32, arm, arm64).
  • Improved the caching and download resilience of the sdk.
  • Added a new action output: dart-version - the installed version of the sdk.

v1.4.0

  • Automatically create OIDC token for pub.dev.
  • Add a reusable workflow for publishing.

v1.3.0

  • The install location of the Dart SDK is now available in an environment variable, DART_HOME (dart-lang/characters#43).
  • Fixed an issue where cached downloads could lead to unzip issues on self-hosted runners (dart-lang/characters#35).

v1.2.0

  • Fixed a path issue impacting git dependencies on Windows.

v1.1.0

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dart-lang/setup-dart&package-manager=github_actions&previous-version=1.6.0&new-version=1.6.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index d7de4b61..5b805d7b 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -23,7 +23,7 @@ jobs: sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d + - uses: dart-lang/setup-dart@fedb1266e91cf51be2fdb382869461a434b920a3 with: sdk: ${{ matrix.sdk }} - id: install @@ -49,7 +49,7 @@ jobs: sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d + - uses: dart-lang/setup-dart@fedb1266e91cf51be2fdb382869461a434b920a3 with: sdk: ${{ matrix.sdk }} - id: install From ec195e104fd59b4963c55f3107bf7ffc2cffa92e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 17:16:06 +0000 Subject: [PATCH 70/82] Bump actions/checkout from 4.1.1 to 4.1.2 (dart-lang/characters#96) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.1 to 4.1.2.
Release notes

Sourced from actions/checkout's releases.

v4.1.2

We are investigating the following issue with this release and have rolled-back the v4 tag to point to v4.1.1

What's Changed

New Contributors

Full Changelog: https://github.com/actions/checkout/compare/v4.1.1...v4.1.2

Changelog

Sourced from actions/checkout's changelog.

Changelog

v4.1.2

v4.1.1

v4.1.0

v4.0.0

v3.6.0

v3.5.3

v3.5.2

v3.5.1

v3.5.0

v3.4.0

v3.3.0

v3.2.0

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=4.1.1&new-version=4.1.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 5b805d7b..d18efa7c 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 - uses: dart-lang/setup-dart@fedb1266e91cf51be2fdb382869461a434b920a3 with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 - uses: dart-lang/setup-dart@fedb1266e91cf51be2fdb382869461a434b920a3 with: sdk: ${{ matrix.sdk }} From 5c7e0587840211e53b02b4b1450a6108cfeda620 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 17:46:45 +0000 Subject: [PATCH 71/82] Bump dart-lang/setup-dart from 1.6.2 to 1.6.4 (dart-lang/characters#97) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [dart-lang/setup-dart](https://github.com/dart-lang/setup-dart) from 1.6.2 to 1.6.4.
Release notes

Sourced from dart-lang/setup-dart's releases.

v1.6.4

  • Rebuild JS code to include changes from v1.6.3

v1.6.3

Changelog

Sourced from dart-lang/setup-dart's changelog.

v1.6.4

  • Rebuild JS code.

v1.6.3

v1.6.2

v1.6.1

  • Updated the google storage url for main channel releases.

v1.6.0

  • Enable provisioning of the latest Dart SDK patch release by specifying just the major and minor version (e.g. 3.2).

v1.5.1

  • No longer test the setup-dart action on pre-2.12 SDKs.
  • Upgrade JS interop code to use extension types (the new name for inline classes).
  • The upcoming rename of the be channel to main is now supported with forward compatibility that switches when the rename happens.

v1.5.0

  • Re-wrote the implementation of the action into Dart.
  • Auto-detect the platform architecture (x64, ia32, arm, arm64).
  • Improved the caching and download resilience of the sdk.
  • Added a new action output: dart-version - the installed version of the sdk.

v1.4.0

  • Automatically create OIDC token for pub.dev.
  • Add a reusable workflow for publishing.

v1.3.0

  • The install location of the Dart SDK is now available

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dart-lang/setup-dart&package-manager=github_actions&previous-version=1.6.2&new-version=1.6.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index d18efa7c..5552dd6d 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -23,7 +23,7 @@ jobs: sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 - - uses: dart-lang/setup-dart@fedb1266e91cf51be2fdb382869461a434b920a3 + - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 with: sdk: ${{ matrix.sdk }} - id: install @@ -49,7 +49,7 @@ jobs: sdk: [dev, stable, 2.19.0] steps: - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 - - uses: dart-lang/setup-dart@fedb1266e91cf51be2fdb382869461a434b920a3 + - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 with: sdk: ${{ matrix.sdk }} - id: install From ada4e69a402ba0d114c63c0e58eaea6b064cabcc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 17:50:47 +0000 Subject: [PATCH 72/82] Bump actions/checkout from 4.1.2 to 4.1.4 (dart-lang/characters#98) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.2 to 4.1.4.
Release notes

Sourced from actions/checkout's releases.

v4.1.4

What's Changed

Full Changelog: https://github.com/actions/checkout/compare/v4.1.3...v4.1.4

v4.1.3

What's Changed

Full Changelog: https://github.com/actions/checkout/compare/v4.1.2...v4.1.3

Changelog

Sourced from actions/checkout's changelog.

Changelog

v4.1.4

v4.1.3

v4.1.2

v4.1.1

v4.1.0

v4.0.0

v3.6.0

v3.5.3

v3.5.2

v3.5.1

v3.5.0

v3.4.0

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=4.1.2&new-version=4.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 5552dd6d..9a497603 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 with: sdk: ${{ matrix.sdk }} From 637f28206198253acd03d8742bf30f7471c5259a Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Fri, 3 May 2024 15:09:22 -0700 Subject: [PATCH 73/82] blast_repo fixes (dart-lang/characters#99) dependabot --- pkgs/characters/.github/dependabot.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/characters/.github/dependabot.yml b/pkgs/characters/.github/dependabot.yml index 725f03af..cde02ad6 100644 --- a/pkgs/characters/.github/dependabot.yml +++ b/pkgs/characters/.github/dependabot.yml @@ -9,3 +9,7 @@ updates: interval: monthly labels: - autosubmit + groups: + github-actions: + patterns: + - "*" From 59195df13169047d8f9ef7593ad4a44c15d8a87a Mon Sep 17 00:00:00 2001 From: Sarah Zakarias Date: Thu, 23 May 2024 10:54:02 +0200 Subject: [PATCH 74/82] Add `topics` to `pubspec.yaml` (dart-lang/characters#100) --- pkgs/characters/pubspec.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 63928b9b..7247d74d 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -4,6 +4,10 @@ description: >- String replacement with operations that are Unicode/grapheme cluster aware. repository: https://github.com/dart-lang/characters +topics: + - strings + - unicode + environment: sdk: ">=2.19.0 <4.0.0" From ed394deb9042e899b701f0dec211b778506ceb98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Jun 2024 17:26:22 +0000 Subject: [PATCH 75/82] Bump actions/checkout from 4.1.4 to 4.1.6 in the github-actions group (dart-lang/characters#101) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 4.1.4 to 4.1.6
Release notes

Sourced from actions/checkout's releases.

v4.1.6

What's Changed

Full Changelog: https://github.com/actions/checkout/compare/v4.1.5...v4.1.6

v4.1.5

What's Changed

Full Changelog: https://github.com/actions/checkout/compare/v4.1.4...v4.1.5

Changelog

Sourced from actions/checkout's changelog.

Changelog

v4.1.6

v4.1.5

v4.1.4

v4.1.3

v4.1.2

v4.1.1

v4.1.0

v4.0.0

v3.6.0

v3.5.3

v3.5.2

v3.5.1

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=4.1.4&new-version=4.1.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 9a497603..a41e4acf 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 2.19.0] steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 with: sdk: ${{ matrix.sdk }} From 57b6660c88176269b2f394e6486bc122db5d3da5 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Tue, 4 Jun 2024 16:20:19 -0700 Subject: [PATCH 76/82] Bump lints and min SDK (dart-lang/characters#102) --- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- pkgs/characters/CHANGELOG.md | 1 + pkgs/characters/lib/src/characters_impl.dart | 3 +-- pkgs/characters/pubspec.yaml | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index a41e4acf..e91044f6 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - sdk: [dev, stable, 2.19.0] + sdk: [dev, stable, 3.4] steps: - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 @@ -46,7 +46,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - sdk: [dev, stable, 2.19.0] + sdk: [dev, stable, 3.4] steps: - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 28e51bca..87d676c0 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,6 +1,7 @@ ## 1.3.1-wip * Fixed README rendering on pub.dev and API docs. +* Require Dart `^3.4.0` ## 1.3.0 diff --git a/pkgs/characters/lib/src/characters_impl.dart b/pkgs/characters/lib/src/characters_impl.dart index eb8cef43..f7084664 100644 --- a/pkgs/characters/lib/src/characters_impl.dart +++ b/pkgs/characters/lib/src/characters_impl.dart @@ -2,11 +2,10 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'package:characters/src/grapheme_clusters/table.dart'; - import "characters.dart"; import "grapheme_clusters/breaks.dart"; import "grapheme_clusters/constants.dart"; +import 'grapheme_clusters/table.dart'; /// The grapheme clusters of a string. /// diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 7247d74d..75073654 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -9,8 +9,8 @@ topics: - unicode environment: - sdk: ">=2.19.0 <4.0.0" + sdk: ^3.4.0 dev_dependencies: - dart_flutter_team_lints: ^1.0.0 - test: ^1.16.0 + dart_flutter_team_lints: ^2.0.0 + test: ^1.16.6 From 58c8b893ba38a473df3ce26f8d299d63991f6a49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 17:11:13 +0000 Subject: [PATCH 77/82] Bump the github-actions group with 2 updates (dart-lang/characters#103) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the github-actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [dart-lang/setup-dart](https://github.com/dart-lang/setup-dart). Updates `actions/checkout` from 4.1.6 to 4.1.7
Release notes

Sourced from actions/checkout's releases.

v4.1.7

What's Changed

New Contributors

Full Changelog: https://github.com/actions/checkout/compare/v4.1.6...v4.1.7

Changelog

Sourced from actions/checkout's changelog.

Changelog

v4.1.7

v4.1.6

v4.1.5

v4.1.4

v4.1.3

v4.1.2

v4.1.1

v4.1.0

v4.0.0

v3.6.0

v3.5.3

... (truncated)

Commits

Updates `dart-lang/setup-dart` from 1.6.4 to 1.6.5
Release notes

Sourced from dart-lang/setup-dart's releases.

v1.6.5

dart-lang/characters#118: dart-lang/setup-dartdart-lang/characters#118

Changelog

Sourced from dart-lang/setup-dart's changelog.

v1.6.5

dart-lang/characters#118: dart-lang/setup-dartdart-lang/characters#118

v1.6.4

  • Rebuild JS code.

v1.6.3

v1.6.2

v1.6.1

  • Updated the google storage url for main channel releases.

v1.6.0

  • Enable provisioning of the latest Dart SDK patch release by specifying just the major and minor version (e.g. 3.2).

v1.5.1

  • No longer test the setup-dart action on pre-2.12 SDKs.
  • Upgrade JS interop code to use extension types (the new name for inline classes).
  • The upcoming rename of the be channel to main is now supported with forward compatibility that switches when the rename happens.

v1.5.0

  • Re-wrote the implementation of the action into Dart.
  • Auto-detect the platform architecture (x64, ia32, arm, arm64).
  • Improved the caching and download resilience of the sdk.
  • Added a new action output: dart-version - the installed version of the sdk.

v1.4.0

... (truncated)

Commits

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
--- pkgs/characters/.github/workflows/test-package.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index e91044f6..1c2b1331 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,8 +22,8 @@ jobs: matrix: sdk: [dev, stable, 3.4] steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 - - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 with: sdk: ${{ matrix.sdk }} - id: install @@ -48,8 +48,8 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 3.4] steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 - - uses: dart-lang/setup-dart@f0ead981b4d9a35b37f30d36160575d60931ec30 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 with: sdk: ${{ matrix.sdk }} - id: install From c4509cc6a60ba234370a60bf3874d171a63202c5 Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Mon, 8 Jul 2024 10:41:52 -0700 Subject: [PATCH 78/82] update lints (dart-lang/characters#104) --- pkgs/characters/lib/characters.dart | 2 +- pkgs/characters/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/lib/characters.dart b/pkgs/characters/lib/characters.dart index d56d787f..549b86fd 100644 --- a/pkgs/characters/lib/characters.dart +++ b/pkgs/characters/lib/characters.dart @@ -3,7 +3,7 @@ // BSD-style license that can be found in the LICENSE file. /// String operations based on characters (Unicode grapheme clusters). -library characters; +library; export "src/characters.dart"; export "src/extensions.dart"; diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 75073654..8ad4579e 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -12,5 +12,5 @@ environment: sdk: ^3.4.0 dev_dependencies: - dart_flutter_team_lints: ^2.0.0 + dart_flutter_team_lints: ^3.0.0 test: ^1.16.6 From 9582360a5fa464624ee87445ae6a1b3095c9bddc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 17:54:06 +0000 Subject: [PATCH 79/82] Bump actions/checkout from 4.1.7 to 4.2.0 in the github-actions group (dart-lang/characters#105) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 4.1.7 to 4.2.0
Release notes

Sourced from actions/checkout's releases.

v4.2.0

What's Changed

New Contributors

Full Changelog: https://github.com/actions/checkout/compare/v4.1.7...v4.2.0

Changelog

Sourced from actions/checkout's changelog.

Changelog

v4.2.0

v4.1.7

v4.1.6

v4.1.5

v4.1.4

v4.1.3

v4.1.2

v4.1.1

v4.1.0

v4.0.0

v3.6.0

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=4.1.7&new-version=4.2.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
--- pkgs/characters/.github/workflows/test-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/characters/.github/workflows/test-package.yml b/pkgs/characters/.github/workflows/test-package.yml index 1c2b1331..811bef93 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/pkgs/characters/.github/workflows/test-package.yml @@ -22,7 +22,7 @@ jobs: matrix: sdk: [dev, stable, 3.4] steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 with: sdk: ${{ matrix.sdk }} @@ -48,7 +48,7 @@ jobs: os: [ubuntu-latest] sdk: [dev, stable, 3.4] steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 with: sdk: ${{ matrix.sdk }} From e309d4e8e3a1e32071d3fa4f5c5531723056d73c Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 14 Oct 2024 17:03:46 +0200 Subject: [PATCH 80/82] Moving fixes --- .github/labeler.yaml | 4 ++++ .../workflows/characters.yaml | 17 +++++++++++++---- README.md | 4 ++-- pkgs/characters/.github/dependabot.yml | 15 --------------- pkgs/characters/.github/workflows/publish.yaml | 14 -------------- pkgs/characters/CHANGELOG.md | 5 +++-- pkgs/characters/README.md | 2 +- pkgs/characters/pubspec.yaml | 4 ++-- 8 files changed, 25 insertions(+), 40 deletions(-) rename pkgs/characters/.github/workflows/test-package.yml => .github/workflows/characters.yaml (84%) delete mode 100644 pkgs/characters/.github/dependabot.yml delete mode 100644 pkgs/characters/.github/workflows/publish.yaml diff --git a/.github/labeler.yaml b/.github/labeler.yaml index 074dd1f4..d7eec377 100644 --- a/.github/labeler.yaml +++ b/.github/labeler.yaml @@ -3,3 +3,7 @@ "package-args": - changed-files: - any-glob-to-any-file: 'pkgs/args/**' + +"package-characters": + - changed-files: + - any-glob-to-any-file: 'pkgs/characters/**' diff --git a/pkgs/characters/.github/workflows/test-package.yml b/.github/workflows/characters.yaml similarity index 84% rename from pkgs/characters/.github/workflows/test-package.yml rename to .github/workflows/characters.yaml index 811bef93..d26d4162 100644 --- a/pkgs/characters/.github/workflows/test-package.yml +++ b/.github/workflows/characters.yaml @@ -1,17 +1,26 @@ name: Dart CI on: - # Run on PRs and pushes to the default branch. + # Run CI on pushes to the main branch, and on PRs against main. push: - branches: [ master ] + branches: [ main ] + paths: + - '.github/workflows/characters.yaml' + - 'pkgs/characters/**' pull_request: - branches: [ master ] + branches: [ main ] + paths: + - '.github/workflows/characters.yaml' + - 'pkgs/characters/**' schedule: - cron: "0 0 * * 0" - env: PUB_ENVIRONMENT: bot.github +defaults: + run: + working-directory: pkgs/characters/ + jobs: # Check code formatting and static analysis on a single OS (linux) # against dev, stable, and 2.19.0 (the package's lower bound). diff --git a/README.md b/README.md index 7b81d0b4..ab6d5143 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,8 @@ This repository is home to various Dart packages under the [dart.dev](https://pu | Package | Description | Version | |---|---|---| -| [args](pkgs/args/) | Library for defining parsers for parsing raw command-line arguments into a set - of options and values. | [![pub package](https://img.shields.io/pub/v/args.svg)](https://pub.dev/packages/args) | +| [args](pkgs/args/) | Library for defining parsers for parsing raw command-line arguments into a set of options and values. | [![pub package](https://img.shields.io/pub/v/args.svg)](https://pub.dev/packages/args) | +| [characters](pkgs/characters/) | String replacement with operations that are Unicode/grapheme cluster aware. | [![pub package](https://img.shields.io/pub/v/characters.svg)](https://pub.dev/packages/characters) | ## Publishing automation diff --git a/pkgs/characters/.github/dependabot.yml b/pkgs/characters/.github/dependabot.yml deleted file mode 100644 index cde02ad6..00000000 --- a/pkgs/characters/.github/dependabot.yml +++ /dev/null @@ -1,15 +0,0 @@ -# Dependabot configuration file. -# See https://docs.github.com/en/code-security/dependabot/dependabot-version-updates -version: 2 - -updates: - - package-ecosystem: github-actions - directory: / - schedule: - interval: monthly - labels: - - autosubmit - groups: - github-actions: - patterns: - - "*" diff --git a/pkgs/characters/.github/workflows/publish.yaml b/pkgs/characters/.github/workflows/publish.yaml deleted file mode 100644 index fcb7ccb8..00000000 --- a/pkgs/characters/.github/workflows/publish.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# A CI configuration to auto-publish pub packages. - -name: Publish - -on: - pull_request: - branches: [ master ] - push: - tags: [ 'v[0-9]+.[0-9]+.[0-9]+*' ] - -jobs: - publish: - if: ${{ github.repository_owner == 'dart-lang' }} - uses: dart-lang/ecosystem/.github/workflows/publish.yaml@main diff --git a/pkgs/characters/CHANGELOG.md b/pkgs/characters/CHANGELOG.md index 87d676c0..412b5a73 100644 --- a/pkgs/characters/CHANGELOG.md +++ b/pkgs/characters/CHANGELOG.md @@ -1,7 +1,8 @@ -## 1.3.1-wip +## 1.3.1 * Fixed README rendering on pub.dev and API docs. -* Require Dart `^3.4.0` +* Require Dart `^3.4.0`. +* Move to `dart-lang/core` monorepo. ## 1.3.0 diff --git a/pkgs/characters/README.md b/pkgs/characters/README.md index 38a2d3bb..6d2f76ea 100644 --- a/pkgs/characters/README.md +++ b/pkgs/characters/README.md @@ -1,4 +1,4 @@ -[![Build Status](https://github.com/dart-lang/characters/workflows/Dart%20CI/badge.svg)](https://github.com/dart-lang/characters/actions?query=workflow%3A"Dart+CI"+branch%3Amaster) +[![Build Status](https://github.com/dart-lang/core/actions/workflows/characters.yaml/badge.svg)](https://github.com/dart-lang/core/actions/workflows/characters.yaml) [![pub package](https://img.shields.io/pub/v/characters.svg)](https://pub.dev/packages/characters) [![package publisher](https://img.shields.io/pub/publisher/characters.svg)](https://pub.dev/packages/characters/publisher) diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index 8ad4579e..c5f46b94 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -1,8 +1,8 @@ name: characters -version: 1.3.1-wip +version: 1.3.1 description: >- String replacement with operations that are Unicode/grapheme cluster aware. -repository: https://github.com/dart-lang/characters +repository: https://github.com/dart-lang/core/main/pkgs/characters topics: - strings From 275919c98c9a125bff311b0e336b3dabce40abcd Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 15 Oct 2024 08:15:59 +0200 Subject: [PATCH 81/82] Rename labeler --- .github/{labeler.yaml => labeler.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{labeler.yaml => labeler.yml} (100%) diff --git a/.github/labeler.yaml b/.github/labeler.yml similarity index 100% rename from .github/labeler.yaml rename to .github/labeler.yml From 762195d409aa917f5701f3fde2a4ef30fe316ede Mon Sep 17 00:00:00 2001 From: Moritz Date: Wed, 16 Oct 2024 10:45:59 +0200 Subject: [PATCH 82/82] Changes as per review --- .github/labeler.yml | 2 +- .github/workflows/characters.yaml | 2 +- pkgs/characters/pubspec.yaml | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 07cf5394..3fcdb5c4 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -4,6 +4,6 @@ - changed-files: - any-glob-to-any-file: 'pkgs/args/**' -"package-characters": +"package:characters": - changed-files: - any-glob-to-any-file: 'pkgs/characters/**' diff --git a/.github/workflows/characters.yaml b/.github/workflows/characters.yaml index d26d4162..68b99c43 100644 --- a/.github/workflows/characters.yaml +++ b/.github/workflows/characters.yaml @@ -1,4 +1,4 @@ -name: Dart CI +name: package:characters on: # Run CI on pushes to the main branch, and on PRs against main. diff --git a/pkgs/characters/pubspec.yaml b/pkgs/characters/pubspec.yaml index c5f46b94..96563a53 100644 --- a/pkgs/characters/pubspec.yaml +++ b/pkgs/characters/pubspec.yaml @@ -2,11 +2,10 @@ name: characters version: 1.3.1 description: >- String replacement with operations that are Unicode/grapheme cluster aware. -repository: https://github.com/dart-lang/core/main/pkgs/characters - +repository: https://github.com/dart-lang/core/tree/main/pkgs/characters topics: - - strings - - unicode + - strings + - unicode environment: sdk: ^3.4.0