diff --git a/.drone.yml b/.drone.yml index d12e1bf1..3fb0f369 100644 --- a/.drone.yml +++ b/.drone.yml @@ -17,7 +17,7 @@ clone: steps: - name: compile - image: scireum/sirius-build-jdk23 + image: scireum/sirius-build-jdk24 commands: - mvn clean compile volumes: *scireum_volumes @@ -28,7 +28,7 @@ steps: - push - name: cron_unit_tests - image: scireum/sirius-build-jdk23 + image: scireum/sirius-build-jdk24 commands: - mvn clean test volumes: *scireum_volumes @@ -48,7 +48,7 @@ steps: - cron - name: test - image: scireum/sirius-build-jdk23 + image: scireum/sirius-build-jdk24 commands: - mvn clean test -Dtest.excluded.groups=nightly volumes: *scireum_volumes @@ -57,7 +57,7 @@ steps: - pull_request - name: deploy - image: scireum/sirius-build-jdk23 + image: scireum/sirius-build-jdk24 commands: - sed -i 's/DEVELOPMENT-SNAPSHOT/${DRONE_TAG}/g' pom.xml - mvn clean deploy -DskipTests @@ -77,7 +77,7 @@ steps: - tag - name: sonar - image: scireum/sirius-build-jdk23 + image: scireum/sirius-build-jdk24 commands: - sed -i 's/DEVELOPMENT-SNAPSHOT/${DRONE_TAG}/g' pom.xml - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent test org.jacoco:jacoco-maven-plugin:report sonar:sonar -Dsonar.projectKey=${DRONE_REPO_NAME} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 193dd207..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Automatic Releases - -on: - push: - branches: [ "develop" ] - tags: - - "dev-*.*.*" - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - if: startsWith(github.ref, 'refs/tags/') - - - name: Release - uses: softprops/action-gh-release@v0.1.14 - if: startsWith(github.ref, 'refs/tags/') - with: - prerelease: true - generate_release_notes: true diff --git a/.github/workflows/nightly-test.yml b/.github/workflows/nightly-test.yml new file mode 100644 index 00000000..f08e0c8e --- /dev/null +++ b/.github/workflows/nightly-test.yml @@ -0,0 +1,37 @@ +name: Nightly Tests +on: + schedule: + - cron: '0 0 * * *' + +jobs: + test: + runs-on: ubuntu-latest + container: + image: scireum/sirius-build-jdk24 + steps: + - name: Checkout project + uses: actions/checkout@v4 + + - name: Cache Maven dependencies + uses: actions/cache@v4 + with: + path: | + ~/.m2/repository + /root/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + + - name: Test project including nightly tests + run: mvn clean test + + notify: + if: failure() + runs-on: ubuntu-latest + steps: + - name: Send Slack notification + run: | + curl -X POST -H 'Content-type: application/json' --data '{ + "channel": "scireum-dev", + "text": "Nightly Tests failed for **${{ github.event.repository.name }}**: [Details](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" + }' ${{ secrets.MEMOIO_SCIREUM_DEV }} diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml new file mode 100644 index 00000000..50effa98 --- /dev/null +++ b/.github/workflows/pull-request.yml @@ -0,0 +1,25 @@ +name: Execute Tests on Pull Request +on: + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + container: + image: scireum/sirius-build-jdk24 + steps: + - name: Checkout project + uses: actions/checkout@v4 + + - name: Cache Maven dependencies + uses: actions/cache@v4 + with: + path: | + ~/.m2/repository + /root/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + + - name: Compile and test project without nightly tests + run: mvn clean compile test -Dtest.excluded.groups=nightly diff --git a/.github/workflows/push-master.yml b/.github/workflows/push-master.yml new file mode 100644 index 00000000..636ccb0c --- /dev/null +++ b/.github/workflows/push-master.yml @@ -0,0 +1,26 @@ +name: Compile on push to master branch +on: + push: + branches: + - master +jobs: + compile: + runs-on: ubuntu-latest + container: + image: scireum/sirius-build-jdk24 + steps: + - name: Checkout project + uses: actions/checkout@v4 + + - name: Cache Maven dependencies + uses: actions/cache@v4 + with: + path: | + ~/.m2/repository + /root/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + + - name: Compile project + run: mvn clean compile diff --git a/.github/workflows/release-on-tag.yml b/.github/workflows/release-on-tag.yml new file mode 100644 index 00000000..b9237254 --- /dev/null +++ b/.github/workflows/release-on-tag.yml @@ -0,0 +1,20 @@ +name: Automatic Release on dev-Tag + +on: + push: + tags: + - "dev-*.*.*" + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Release + uses: softprops/action-gh-release@v2.2.2 + with: + prerelease: true + generate_release_notes: true diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml new file mode 100644 index 00000000..001f56c2 --- /dev/null +++ b/.github/workflows/sonarqube.yml @@ -0,0 +1,28 @@ +name: SonarQube Analysis +on: + workflow_dispatch: + +jobs: + sonarqube: + runs-on: ubuntu-latest + container: + image: scireum/sirius-build-jdk24 + steps: + - name: Checkout project + uses: actions/checkout@v4 + + - name: Cache Maven dependencies + uses: actions/cache@v4 + with: + path: | + ~/.m2/repository + /root/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + + - name: Replace version in pom.xml + run: sed -i 's/DEVELOPMENT-SNAPSHOT/sonar-test/g' pom.xml + + - name: Analyze project with SonarQube + run: mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent test org.jacoco:jacoco-maven-plugin:report sonar:sonar -Dsonar.projectKey=scireum_sirius-kernel_81e9dc44-1749-4a49-a1f6-686fdb86bad3 -Dsonar.token=${{ secrets.SONAR_TOKEN }} -Dsonar.host.url=${{ secrets.SONAR_HOST_URL }} -Dsonar.organization=scireum diff --git a/pom.xml b/pom.xml index 1bf4e4b0..000e04f9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.scireum sirius-parent - 14.0.1 + 14.2.0 sirius-kernel SIRIUS kernel @@ -26,7 +26,7 @@ com.typesafe config - 1.4.3 + 1.4.5 @@ -34,7 +34,7 @@ com.google.guava guava - 33.4.0-jre + 33.5.0-jre @@ -42,7 +42,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.1 + 4.9.7 @@ -50,7 +50,7 @@ org.slf4j slf4j-jdk14 - 2.0.16 + 2.0.17 @@ -70,14 +70,15 @@ - + + commons-io commons-io - 2.18.0 + 2.20.0 - com.fasterxml.jackson.core @@ -87,5 +88,13 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 + + + org.apache.commons + commons-lang3 + 3.19.0 + + diff --git a/src/main/java/sirius/kernel/async/ParallelTaskExecutor.java b/src/main/java/sirius/kernel/async/ParallelTaskExecutor.java index df701b95..62ca1737 100644 --- a/src/main/java/sirius/kernel/async/ParallelTaskExecutor.java +++ b/src/main/java/sirius/kernel/async/ParallelTaskExecutor.java @@ -14,8 +14,10 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.Semaphore; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Supplier; /** * Executes tasks in parallel in the current node using virtual threads with a limit on concurrency. @@ -34,6 +36,7 @@ public class ParallelTaskExecutor { private final Semaphore semaphore; private final AtomicInteger taskCount; private final CallContext currentContext; + private Supplier isActiveSupplier; /** * Creates a new parallel task executor. @@ -46,9 +49,24 @@ public ParallelTaskExecutor(int maxConcurrentTasks) { this.taskQueue = new LinkedBlockingQueue<>(); this.semaphore = new Semaphore(maxConcurrentTasks); this.taskCount = new AtomicInteger(0); + this.isActiveSupplier = () -> TaskContext.get().isActive(); startProcessing(); } + /** + * Permits to override the active checker which is used to determine when to stop processing tasks. + *

+ * By default, the executor checks whether the current {@link TaskContext} is still active which is enough + * is most cases, but more complex scenarios might require a custom check. + * + * @param isActiveSupplier the supplier which determines whether the executor is still active + * @return the executor itself for fluent method calls + */ + public ParallelTaskExecutor withIsActiveSupplier(Supplier isActiveSupplier) { + this.isActiveSupplier = isActiveSupplier; + return this; + } + /** * Submits a task to be executed in parallel. * @@ -68,31 +86,41 @@ public boolean submitTask(Runnable task) { }); } + /** + * Determines whether the executor is still active. + * + * @return {@code true} if the executor is still active, {@code false} otherwise + */ + public boolean isActive() { + return Boolean.TRUE.equals(isActiveSupplier.get()); + } + /** * Waits for all tasks to complete and shuts down the executor. */ public void shutdownWhenDone() { - while (TaskContext.get().isActive()) { + while (isActive()) { if (taskQueue.isEmpty() && taskCount.get() == 0) { - executor.close(); break; } Wait.millis(500); } + executor.close(); } private void startProcessing() { Thread.startVirtualThread(() -> { - while (TaskContext.get().isActive()) { + while (isActive()) { try { Runnable task = taskQueue.take(); semaphore.acquire(); executor.submit(task); - } catch (InterruptedException exception) { + } catch (InterruptedException | RejectedExecutionException _) { Thread.currentThread().interrupt(); break; } } }); + taskQueue.clear(); } } diff --git a/src/main/java/sirius/kernel/commons/CSVWriter.java b/src/main/java/sirius/kernel/commons/CSVWriter.java index 05eb2cd7..6917707d 100644 --- a/src/main/java/sirius/kernel/commons/CSVWriter.java +++ b/src/main/java/sirius/kernel/commons/CSVWriter.java @@ -32,8 +32,9 @@ public class CSVWriter implements Closeable { private final Writer writer; private boolean firstLine = true; private char separator = ';'; - private String separatorString = String.valueOf(';'); + private String separatorString = String.valueOf(separator); private char quotation = '"'; + private String quotationString = String.valueOf(quotation); private boolean isQuotationEmpty = false; private boolean forceQuotation = false; private char escape = '\\'; @@ -90,6 +91,7 @@ public CSVWriter withSeparator(char separator) { */ public CSVWriter withQuotation(char quotation) { this.quotation = quotation; + this.quotationString = String.valueOf(quotation); this.isQuotationEmpty = quotation == '\0'; return this; } @@ -137,10 +139,10 @@ public CSVWriter withLineSeparator(String lineSeparator) { } /** - * Specifies wether or not all fields in the generated CSV should be enclosed with the specified quotation character. + * Specifies whether all fields in the generated CSV should be enclosed with the specified quotation character. *

- * By default this is false, which means only fields that require quotation because they contain - * the separator character or a line break are enclosed with quotations. + * By default, this is false, which means only fields that require quotation because they contain + * the separator character, the quotation character or a line break are enclosed with quotations. * * @param force if all fields should be quoted regardless of content or not * @return the writer itself for fluent method calls @@ -230,7 +232,8 @@ private boolean shouldQuote(String stringValue) { if (forceQuotation) { return true; } - return stringValue.contains(separatorString) || stringValue.contains("\n") || stringValue.contains("\r"); + return stringValue.contains(separatorString) || stringValue.contains(quotationString) || stringValue.contains( + "\n") || stringValue.contains("\r"); } /** diff --git a/src/main/java/sirius/kernel/xml/ContentDispositionParser.java b/src/main/java/sirius/kernel/commons/ContentDispositionParser.java similarity index 93% rename from src/main/java/sirius/kernel/xml/ContentDispositionParser.java rename to src/main/java/sirius/kernel/commons/ContentDispositionParser.java index 7c79ad09..98e93414 100644 --- a/src/main/java/sirius/kernel/xml/ContentDispositionParser.java +++ b/src/main/java/sirius/kernel/commons/ContentDispositionParser.java @@ -4,16 +4,10 @@ * * Copyright by scireum GmbH * http://www.scireum.de - info@scireum.de - * - * Based on DownloadUtils by mozilla-mobile/android-components - * https://github.com/mozilla-mobile/android-components/blob/main/components/support/utils/src/main/java/mozilla/components/support/utils/DownloadUtils.kt - * Right for use and modification was granted under the Mozilla Public License 2.0 , http://mozilla.org/MPL/2.0/ */ -package sirius.kernel.xml; +package sirius.kernel.commons; -import sirius.kernel.commons.Explain; -import sirius.kernel.commons.Strings; import sirius.kernel.health.Exceptions; import java.io.ByteArrayOutputStream; @@ -24,6 +18,12 @@ /** * Static helper class which helps to parse filenames from content disposition headers + *

+ * Based on DownloadUtils by mozilla-mobile/android-components + * DownloadUtils.kt on github.com/mozilla-mobile/android-components + *

+ * Right for use and modification was granted under the Mozilla Public License 2.0 , + * MPL 2.0 */ public class ContentDispositionParser { @@ -67,8 +67,8 @@ public class ContentDispositionParser { /** * Format as defined in RFC 2616 and RFC 5987 * Both inline and attachment types are supported. - * More details can be found - * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition + * More details can be found + * developer.mozilla.org: Content-Disposition *

* The first segment is the [contentDispositionType], there you can find the documentation, * Next, it's the filename segment, where we have a filename="filename.ext" @@ -154,7 +154,7 @@ private ContentDispositionParser() { /** * Tries to parse a file name from the given string which is from a content disposition header. *

- * The format of the header is defined here: http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html + * The format of the header is defined here: rfc2616-sec19 * This header provides a filename for content that is going to be downloaded to the file system. * * @param contentDisposition the content-disposition header as String diff --git a/src/main/java/sirius/kernel/commons/Emojis.java b/src/main/java/sirius/kernel/commons/Emojis.java index 5f2c8e12..bf3d61dd 100644 --- a/src/main/java/sirius/kernel/commons/Emojis.java +++ b/src/main/java/sirius/kernel/commons/Emojis.java @@ -20,5040 +20,5048 @@ public class Emojis { // https://github.com/scireum/scireum-scripts/blob/main/sirius/list_emojis_for_insertion_into_kernel.py // Emojis should be updated about once per year. - emojiTrie.put("😀", true); - emojiTrie.put("😃", true); - emojiTrie.put("😄", true); - emojiTrie.put("😁", true); - emojiTrie.put("😆", true); - emojiTrie.put("😅", true); - emojiTrie.put("🤣", true); - emojiTrie.put("😂", true); - emojiTrie.put("🙂", true); - emojiTrie.put("🙃", true); - emojiTrie.put("🫠", true); - emojiTrie.put("😉", true); - emojiTrie.put("😊", true); - emojiTrie.put("😇", true); - emojiTrie.put("🥰", true); - emojiTrie.put("😍", true); - emojiTrie.put("🤩", true); - emojiTrie.put("😘", true); - emojiTrie.put("😗", true); - emojiTrie.put("☺️", true); - emojiTrie.put("☺", true); - emojiTrie.put("😚", true); - emojiTrie.put("😙", true); - emojiTrie.put("🥲", true); - emojiTrie.put("😋", true); - emojiTrie.put("😛", true); - emojiTrie.put("😜", true); - emojiTrie.put("🤪", true); - emojiTrie.put("😝", true); - emojiTrie.put("🤑", true); - emojiTrie.put("🤗", true); - emojiTrie.put("🤭", true); - emojiTrie.put("🫢", true); - emojiTrie.put("🫣", true); - emojiTrie.put("🤫", true); - emojiTrie.put("🤔", true); - emojiTrie.put("🫡", true); - emojiTrie.put("🤐", true); - emojiTrie.put("🤨", true); - emojiTrie.put("😐", true); - emojiTrie.put("😑", true); - emojiTrie.put("😶", true); - emojiTrie.put("🫥", true); - emojiTrie.put("😶‍🌫️", true); - emojiTrie.put("😶‍🌫", true); - emojiTrie.put("😏", true); - emojiTrie.put("😒", true); - emojiTrie.put("🙄", true); - emojiTrie.put("😬", true); - emojiTrie.put("😮‍💨", true); - emojiTrie.put("🤥", true); - emojiTrie.put("🫨", true); - emojiTrie.put("🙂‍↔️", true); - emojiTrie.put("🙂‍↔", true); - emojiTrie.put("🙂‍↕️", true); - emojiTrie.put("🙂‍↕", true); - emojiTrie.put("😌", true); - emojiTrie.put("😔", true); - emojiTrie.put("😪", true); - emojiTrie.put("🤤", true); - emojiTrie.put("😴", true); - emojiTrie.put("😷", true); - emojiTrie.put("🤒", true); - emojiTrie.put("🤕", true); - emojiTrie.put("🤢", true); - emojiTrie.put("🤮", true); - emojiTrie.put("🤧", true); - emojiTrie.put("🥵", true); - emojiTrie.put("🥶", true); - emojiTrie.put("🥴", true); - emojiTrie.put("😵", true); - emojiTrie.put("😵‍💫", true); - emojiTrie.put("🤯", true); - emojiTrie.put("🤠", true); - emojiTrie.put("🥳", true); - emojiTrie.put("🥸", true); - emojiTrie.put("😎", true); - emojiTrie.put("🤓", true); - emojiTrie.put("🧐", true); - emojiTrie.put("😕", true); - emojiTrie.put("🫤", true); - emojiTrie.put("😟", true); - emojiTrie.put("🙁", true); - emojiTrie.put("☹️", true); - emojiTrie.put("☹", true); - emojiTrie.put("😮", true); - emojiTrie.put("😯", true); - emojiTrie.put("😲", true); - emojiTrie.put("😳", true); - emojiTrie.put("🥺", true); - emojiTrie.put("🥹", true); - emojiTrie.put("😦", true); - emojiTrie.put("😧", true); - emojiTrie.put("😨", true); - emojiTrie.put("😰", true); - emojiTrie.put("😥", true); - emojiTrie.put("😢", true); - emojiTrie.put("😭", true); - emojiTrie.put("😱", true); - emojiTrie.put("😖", true); - emojiTrie.put("😣", true); - emojiTrie.put("😞", true); - emojiTrie.put("😓", true); - emojiTrie.put("😩", true); - emojiTrie.put("😫", true); - emojiTrie.put("🥱", true); - emojiTrie.put("😤", true); - emojiTrie.put("😡", true); - emojiTrie.put("😠", true); - emojiTrie.put("🤬", true); - emojiTrie.put("😈", true); - emojiTrie.put("👿", true); - emojiTrie.put("💀", true); - emojiTrie.put("☠️", true); - emojiTrie.put("☠", true); - emojiTrie.put("💩", true); - emojiTrie.put("🤡", true); - emojiTrie.put("👹", true); - emojiTrie.put("👺", true); - emojiTrie.put("👻", true); - emojiTrie.put("👽", true); - emojiTrie.put("👾", true); - emojiTrie.put("🤖", true); - emojiTrie.put("😺", true); - emojiTrie.put("😸", true); - emojiTrie.put("😹", true); - emojiTrie.put("😻", true); - emojiTrie.put("😼", true); - emojiTrie.put("😽", true); - emojiTrie.put("🙀", true); - emojiTrie.put("😿", true); - emojiTrie.put("😾", true); - emojiTrie.put("🙈", true); - emojiTrie.put("🙉", true); - emojiTrie.put("🙊", true); - emojiTrie.put("💌", true); - emojiTrie.put("💘", true); - emojiTrie.put("💝", true); - emojiTrie.put("💖", true); - emojiTrie.put("💗", true); - emojiTrie.put("💓", true); - emojiTrie.put("💞", true); - emojiTrie.put("💕", true); - emojiTrie.put("💟", true); - emojiTrie.put("❣️", true); - emojiTrie.put("❣", true); - emojiTrie.put("💔", true); - emojiTrie.put("❤️‍🔥", true); - emojiTrie.put("❤‍🔥", true); - emojiTrie.put("❤️‍🩹", true); - emojiTrie.put("❤‍🩹", true); - emojiTrie.put("❤️", true); - emojiTrie.put("❤", true); - emojiTrie.put("🩷", true); - emojiTrie.put("🧡", true); - emojiTrie.put("💛", true); - emojiTrie.put("💚", true); - emojiTrie.put("💙", true); - emojiTrie.put("🩵", true); - emojiTrie.put("💜", true); - emojiTrie.put("🤎", true); - emojiTrie.put("🖤", true); - emojiTrie.put("🩶", true); - emojiTrie.put("🤍", true); - emojiTrie.put("💋", true); - emojiTrie.put("💯", true); - emojiTrie.put("💢", true); - emojiTrie.put("💥", true); - emojiTrie.put("💫", true); - emojiTrie.put("💦", true); - emojiTrie.put("💨", true); - emojiTrie.put("🕳️", true); - emojiTrie.put("🕳", true); - emojiTrie.put("💬", true); - emojiTrie.put("👁️‍🗨️", true); - emojiTrie.put("👁‍🗨️", true); - emojiTrie.put("👁️‍🗨", true); - emojiTrie.put("👁‍🗨", true); - emojiTrie.put("🗨️", true); - emojiTrie.put("🗨", true); - emojiTrie.put("🗯️", true); - emojiTrie.put("🗯", true); - emojiTrie.put("💭", true); - emojiTrie.put("💤", true); - emojiTrie.put("👋", true); - emojiTrie.put("👋🏻", true); - emojiTrie.put("👋🏼", true); - emojiTrie.put("👋🏽", true); - emojiTrie.put("👋🏾", true); - emojiTrie.put("👋🏿", true); - emojiTrie.put("🤚", true); - emojiTrie.put("🤚🏻", true); - emojiTrie.put("🤚🏼", true); - emojiTrie.put("🤚🏽", true); - emojiTrie.put("🤚🏾", true); - emojiTrie.put("🤚🏿", true); - emojiTrie.put("🖐️", true); - emojiTrie.put("🖐", true); - emojiTrie.put("🖐🏻", true); - emojiTrie.put("🖐🏼", true); - emojiTrie.put("🖐🏽", true); - emojiTrie.put("🖐🏾", true); - emojiTrie.put("🖐🏿", true); - emojiTrie.put("✋", true); - emojiTrie.put("✋🏻", true); - emojiTrie.put("✋🏼", true); - emojiTrie.put("✋🏽", true); - emojiTrie.put("✋🏾", true); - emojiTrie.put("✋🏿", true); - emojiTrie.put("🖖", true); - emojiTrie.put("🖖🏻", true); - emojiTrie.put("🖖🏼", true); - emojiTrie.put("🖖🏽", true); - emojiTrie.put("🖖🏾", true); - emojiTrie.put("🖖🏿", true); - emojiTrie.put("🫱", true); - emojiTrie.put("🫱🏻", true); - emojiTrie.put("🫱🏼", true); - emojiTrie.put("🫱🏽", true); - emojiTrie.put("🫱🏾", true); - emojiTrie.put("🫱🏿", true); - emojiTrie.put("🫲", true); - emojiTrie.put("🫲🏻", true); - emojiTrie.put("🫲🏼", true); - emojiTrie.put("🫲🏽", true); - emojiTrie.put("🫲🏾", true); - emojiTrie.put("🫲🏿", true); - emojiTrie.put("🫳", true); - emojiTrie.put("🫳🏻", true); - emojiTrie.put("🫳🏼", true); - emojiTrie.put("🫳🏽", true); - emojiTrie.put("🫳🏾", true); - emojiTrie.put("🫳🏿", true); - emojiTrie.put("🫴", true); - emojiTrie.put("🫴🏻", true); - emojiTrie.put("🫴🏼", true); - emojiTrie.put("🫴🏽", true); - emojiTrie.put("🫴🏾", true); - emojiTrie.put("🫴🏿", true); - emojiTrie.put("🫷", true); - emojiTrie.put("🫷🏻", true); - emojiTrie.put("🫷🏼", true); - emojiTrie.put("🫷🏽", true); - emojiTrie.put("🫷🏾", true); - emojiTrie.put("🫷🏿", true); - emojiTrie.put("🫸", true); - emojiTrie.put("🫸🏻", true); - emojiTrie.put("🫸🏼", true); - emojiTrie.put("🫸🏽", true); - emojiTrie.put("🫸🏾", true); - emojiTrie.put("🫸🏿", true); - emojiTrie.put("👌", true); - emojiTrie.put("👌🏻", true); - emojiTrie.put("👌🏼", true); - emojiTrie.put("👌🏽", true); - emojiTrie.put("👌🏾", true); - emojiTrie.put("👌🏿", true); - emojiTrie.put("🤌", true); - emojiTrie.put("🤌🏻", true); - emojiTrie.put("🤌🏼", true); - emojiTrie.put("🤌🏽", true); - emojiTrie.put("🤌🏾", true); - emojiTrie.put("🤌🏿", true); - emojiTrie.put("🤏", true); - emojiTrie.put("🤏🏻", true); - emojiTrie.put("🤏🏼", true); - emojiTrie.put("🤏🏽", true); - emojiTrie.put("🤏🏾", true); - emojiTrie.put("🤏🏿", true); - emojiTrie.put("✌️", true); - emojiTrie.put("✌", true); - emojiTrie.put("✌🏻", true); - emojiTrie.put("✌🏼", true); - emojiTrie.put("✌🏽", true); - emojiTrie.put("✌🏾", true); - emojiTrie.put("✌🏿", true); - emojiTrie.put("🤞", true); - emojiTrie.put("🤞🏻", true); - emojiTrie.put("🤞🏼", true); - emojiTrie.put("🤞🏽", true); - emojiTrie.put("🤞🏾", true); - emojiTrie.put("🤞🏿", true); - emojiTrie.put("🫰", true); - emojiTrie.put("🫰🏻", true); - emojiTrie.put("🫰🏼", true); - emojiTrie.put("🫰🏽", true); - emojiTrie.put("🫰🏾", true); - emojiTrie.put("🫰🏿", true); - emojiTrie.put("🤟", true); - emojiTrie.put("🤟🏻", true); - emojiTrie.put("🤟🏼", true); - emojiTrie.put("🤟🏽", true); - emojiTrie.put("🤟🏾", true); - emojiTrie.put("🤟🏿", true); - emojiTrie.put("🤘", true); - emojiTrie.put("🤘🏻", true); - emojiTrie.put("🤘🏼", true); - emojiTrie.put("🤘🏽", true); - emojiTrie.put("🤘🏾", true); - emojiTrie.put("🤘🏿", true); - emojiTrie.put("🤙", true); - emojiTrie.put("🤙🏻", true); - emojiTrie.put("🤙🏼", true); - emojiTrie.put("🤙🏽", true); - emojiTrie.put("🤙🏾", true); - emojiTrie.put("🤙🏿", true); - emojiTrie.put("👈", true); - emojiTrie.put("👈🏻", true); - emojiTrie.put("👈🏼", true); - emojiTrie.put("👈🏽", true); - emojiTrie.put("👈🏾", true); - emojiTrie.put("👈🏿", true); - emojiTrie.put("👉", true); - emojiTrie.put("👉🏻", true); - emojiTrie.put("👉🏼", true); - emojiTrie.put("👉🏽", true); - emojiTrie.put("👉🏾", true); - emojiTrie.put("👉🏿", true); - emojiTrie.put("👆", true); - emojiTrie.put("👆🏻", true); - emojiTrie.put("👆🏼", true); - emojiTrie.put("👆🏽", true); - emojiTrie.put("👆🏾", true); - emojiTrie.put("👆🏿", true); - emojiTrie.put("🖕", true); - emojiTrie.put("🖕🏻", true); - emojiTrie.put("🖕🏼", true); - emojiTrie.put("🖕🏽", true); - emojiTrie.put("🖕🏾", true); - emojiTrie.put("🖕🏿", true); - emojiTrie.put("👇", true); - emojiTrie.put("👇🏻", true); - emojiTrie.put("👇🏼", true); - emojiTrie.put("👇🏽", true); - emojiTrie.put("👇🏾", true); - emojiTrie.put("👇🏿", true); - emojiTrie.put("☝️", true); - emojiTrie.put("☝", true); - emojiTrie.put("☝🏻", true); - emojiTrie.put("☝🏼", true); - emojiTrie.put("☝🏽", true); - emojiTrie.put("☝🏾", true); - emojiTrie.put("☝🏿", true); - emojiTrie.put("🫵", true); - emojiTrie.put("🫵🏻", true); - emojiTrie.put("🫵🏼", true); - emojiTrie.put("🫵🏽", true); - emojiTrie.put("🫵🏾", true); - emojiTrie.put("🫵🏿", true); - emojiTrie.put("👍", true); - emojiTrie.put("👍🏻", true); - emojiTrie.put("👍🏼", true); - emojiTrie.put("👍🏽", true); - emojiTrie.put("👍🏾", true); - emojiTrie.put("👍🏿", true); - emojiTrie.put("👎", true); - emojiTrie.put("👎🏻", true); - emojiTrie.put("👎🏼", true); - emojiTrie.put("👎🏽", true); - emojiTrie.put("👎🏾", true); - emojiTrie.put("👎🏿", true); - emojiTrie.put("✊", true); - emojiTrie.put("✊🏻", true); - emojiTrie.put("✊🏼", true); - emojiTrie.put("✊🏽", true); - emojiTrie.put("✊🏾", true); - emojiTrie.put("✊🏿", true); - emojiTrie.put("👊", true); - emojiTrie.put("👊🏻", true); - emojiTrie.put("👊🏼", true); - emojiTrie.put("👊🏽", true); - emojiTrie.put("👊🏾", true); - emojiTrie.put("👊🏿", true); - emojiTrie.put("🤛", true); - emojiTrie.put("🤛🏻", true); - emojiTrie.put("🤛🏼", true); - emojiTrie.put("🤛🏽", true); - emojiTrie.put("🤛🏾", true); - emojiTrie.put("🤛🏿", true); - emojiTrie.put("🤜", true); - emojiTrie.put("🤜🏻", true); - emojiTrie.put("🤜🏼", true); - emojiTrie.put("🤜🏽", true); - emojiTrie.put("🤜🏾", true); - emojiTrie.put("🤜🏿", true); - emojiTrie.put("👏", true); - emojiTrie.put("👏🏻", true); - emojiTrie.put("👏🏼", true); - emojiTrie.put("👏🏽", true); - emojiTrie.put("👏🏾", true); - emojiTrie.put("👏🏿", true); - emojiTrie.put("🙌", true); - emojiTrie.put("🙌🏻", true); - emojiTrie.put("🙌🏼", true); - emojiTrie.put("🙌🏽", true); - emojiTrie.put("🙌🏾", true); - emojiTrie.put("🙌🏿", true); - emojiTrie.put("🫶", true); - emojiTrie.put("🫶🏻", true); - emojiTrie.put("🫶🏼", true); - emojiTrie.put("🫶🏽", true); - emojiTrie.put("🫶🏾", true); - emojiTrie.put("🫶🏿", true); - emojiTrie.put("👐", true); - emojiTrie.put("👐🏻", true); - emojiTrie.put("👐🏼", true); - emojiTrie.put("👐🏽", true); - emojiTrie.put("👐🏾", true); - emojiTrie.put("👐🏿", true); - emojiTrie.put("🤲", true); - emojiTrie.put("🤲🏻", true); - emojiTrie.put("🤲🏼", true); - emojiTrie.put("🤲🏽", true); - emojiTrie.put("🤲🏾", true); - emojiTrie.put("🤲🏿", true); - emojiTrie.put("🤝", true); - emojiTrie.put("🤝🏻", true); - emojiTrie.put("🤝🏼", true); - emojiTrie.put("🤝🏽", true); - emojiTrie.put("🤝🏾", true); - emojiTrie.put("🤝🏿", true); - emojiTrie.put("🫱🏻‍🫲🏼", true); - emojiTrie.put("🫱🏻‍🫲🏽", true); - emojiTrie.put("🫱🏻‍🫲🏾", true); - emojiTrie.put("🫱🏻‍🫲🏿", true); - emojiTrie.put("🫱🏼‍🫲🏻", true); - emojiTrie.put("🫱🏼‍🫲🏽", true); - emojiTrie.put("🫱🏼‍🫲🏾", true); - emojiTrie.put("🫱🏼‍🫲🏿", true); - emojiTrie.put("🫱🏽‍🫲🏻", true); - emojiTrie.put("🫱🏽‍🫲🏼", true); - emojiTrie.put("🫱🏽‍🫲🏾", true); - emojiTrie.put("🫱🏽‍🫲🏿", true); - emojiTrie.put("🫱🏾‍🫲🏻", true); - emojiTrie.put("🫱🏾‍🫲🏼", true); - emojiTrie.put("🫱🏾‍🫲🏽", true); - emojiTrie.put("🫱🏾‍🫲🏿", true); - emojiTrie.put("🫱🏿‍🫲🏻", true); - emojiTrie.put("🫱🏿‍🫲🏼", true); - emojiTrie.put("🫱🏿‍🫲🏽", true); - emojiTrie.put("🫱🏿‍🫲🏾", true); - emojiTrie.put("🙏", true); - emojiTrie.put("🙏🏻", true); - emojiTrie.put("🙏🏼", true); - emojiTrie.put("🙏🏽", true); - emojiTrie.put("🙏🏾", true); - emojiTrie.put("🙏🏿", true); - emojiTrie.put("✍️", true); - emojiTrie.put("✍", true); - emojiTrie.put("✍🏻", true); - emojiTrie.put("✍🏼", true); - emojiTrie.put("✍🏽", true); - emojiTrie.put("✍🏾", true); - emojiTrie.put("✍🏿", true); - emojiTrie.put("💅", true); - emojiTrie.put("💅🏻", true); - emojiTrie.put("💅🏼", true); - emojiTrie.put("💅🏽", true); - emojiTrie.put("💅🏾", true); - emojiTrie.put("💅🏿", true); - emojiTrie.put("🤳", true); - emojiTrie.put("🤳🏻", true); - emojiTrie.put("🤳🏼", true); - emojiTrie.put("🤳🏽", true); - emojiTrie.put("🤳🏾", true); - emojiTrie.put("🤳🏿", true); - emojiTrie.put("💪", true); - emojiTrie.put("💪🏻", true); - emojiTrie.put("💪🏼", true); - emojiTrie.put("💪🏽", true); - emojiTrie.put("💪🏾", true); - emojiTrie.put("💪🏿", true); - emojiTrie.put("🦾", true); - emojiTrie.put("🦿", true); - emojiTrie.put("🦵", true); - emojiTrie.put("🦵🏻", true); - emojiTrie.put("🦵🏼", true); - emojiTrie.put("🦵🏽", true); - emojiTrie.put("🦵🏾", true); - emojiTrie.put("🦵🏿", true); - emojiTrie.put("🦶", true); - emojiTrie.put("🦶🏻", true); - emojiTrie.put("🦶🏼", true); - emojiTrie.put("🦶🏽", true); - emojiTrie.put("🦶🏾", true); - emojiTrie.put("🦶🏿", true); - emojiTrie.put("👂", true); - emojiTrie.put("👂🏻", true); - emojiTrie.put("👂🏼", true); - emojiTrie.put("👂🏽", true); - emojiTrie.put("👂🏾", true); - emojiTrie.put("👂🏿", true); - emojiTrie.put("🦻", true); - emojiTrie.put("🦻🏻", true); - emojiTrie.put("🦻🏼", true); - emojiTrie.put("🦻🏽", true); - emojiTrie.put("🦻🏾", true); - emojiTrie.put("🦻🏿", true); - emojiTrie.put("👃", true); - emojiTrie.put("👃🏻", true); - emojiTrie.put("👃🏼", true); - emojiTrie.put("👃🏽", true); - emojiTrie.put("👃🏾", true); - emojiTrie.put("👃🏿", true); - emojiTrie.put("🧠", true); - emojiTrie.put("🫀", true); - emojiTrie.put("🫁", true); - emojiTrie.put("🦷", true); - emojiTrie.put("🦴", true); - emojiTrie.put("👀", true); - emojiTrie.put("👁️", true); - emojiTrie.put("👁", true); - emojiTrie.put("👅", true); - emojiTrie.put("👄", true); - emojiTrie.put("🫦", true); - emojiTrie.put("👶", true); - emojiTrie.put("👶🏻", true); - emojiTrie.put("👶🏼", true); - emojiTrie.put("👶🏽", true); - emojiTrie.put("👶🏾", true); - emojiTrie.put("👶🏿", true); - emojiTrie.put("🧒", true); - emojiTrie.put("🧒🏻", true); - emojiTrie.put("🧒🏼", true); - emojiTrie.put("🧒🏽", true); - emojiTrie.put("🧒🏾", true); - emojiTrie.put("🧒🏿", true); - emojiTrie.put("👦", true); - emojiTrie.put("👦🏻", true); - emojiTrie.put("👦🏼", true); - emojiTrie.put("👦🏽", true); - emojiTrie.put("👦🏾", true); - emojiTrie.put("👦🏿", true); - emojiTrie.put("👧", true); - emojiTrie.put("👧🏻", true); - emojiTrie.put("👧🏼", true); - emojiTrie.put("👧🏽", true); - emojiTrie.put("👧🏾", true); - emojiTrie.put("👧🏿", true); - emojiTrie.put("🧑", true); - emojiTrie.put("🧑🏻", true); - emojiTrie.put("🧑🏼", true); - emojiTrie.put("🧑🏽", true); - emojiTrie.put("🧑🏾", true); - emojiTrie.put("🧑🏿", true); - emojiTrie.put("👱", true); - emojiTrie.put("👱🏻", true); - emojiTrie.put("👱🏼", true); - emojiTrie.put("👱🏽", true); - emojiTrie.put("👱🏾", true); - emojiTrie.put("👱🏿", true); - emojiTrie.put("👨", true); - emojiTrie.put("👨🏻", true); - emojiTrie.put("👨🏼", true); - emojiTrie.put("👨🏽", true); - emojiTrie.put("👨🏾", true); - emojiTrie.put("👨🏿", true); - emojiTrie.put("🧔", true); - emojiTrie.put("🧔🏻", true); - emojiTrie.put("🧔🏼", true); - emojiTrie.put("🧔🏽", true); - emojiTrie.put("🧔🏾", true); - emojiTrie.put("🧔🏿", true); - emojiTrie.put("🧔‍♂️", true); - emojiTrie.put("🧔‍♂", true); - emojiTrie.put("🧔🏻‍♂️", true); - emojiTrie.put("🧔🏻‍♂", true); - emojiTrie.put("🧔🏼‍♂️", true); - emojiTrie.put("🧔🏼‍♂", true); - emojiTrie.put("🧔🏽‍♂️", true); - emojiTrie.put("🧔🏽‍♂", true); - emojiTrie.put("🧔🏾‍♂️", true); - emojiTrie.put("🧔🏾‍♂", true); - emojiTrie.put("🧔🏿‍♂️", true); - emojiTrie.put("🧔🏿‍♂", true); - emojiTrie.put("🧔‍♀️", true); - emojiTrie.put("🧔‍♀", true); - emojiTrie.put("🧔🏻‍♀️", true); - emojiTrie.put("🧔🏻‍♀", true); - emojiTrie.put("🧔🏼‍♀️", true); - emojiTrie.put("🧔🏼‍♀", true); - emojiTrie.put("🧔🏽‍♀️", true); - emojiTrie.put("🧔🏽‍♀", true); - emojiTrie.put("🧔🏾‍♀️", true); - emojiTrie.put("🧔🏾‍♀", true); - emojiTrie.put("🧔🏿‍♀️", true); - emojiTrie.put("🧔🏿‍♀", true); - emojiTrie.put("👨‍🦰", true); - emojiTrie.put("👨🏻‍🦰", true); - emojiTrie.put("👨🏼‍🦰", true); - emojiTrie.put("👨🏽‍🦰", true); - emojiTrie.put("👨🏾‍🦰", true); - emojiTrie.put("👨🏿‍🦰", true); - emojiTrie.put("👨‍🦱", true); - emojiTrie.put("👨🏻‍🦱", true); - emojiTrie.put("👨🏼‍🦱", true); - emojiTrie.put("👨🏽‍🦱", true); - emojiTrie.put("👨🏾‍🦱", true); - emojiTrie.put("👨🏿‍🦱", true); - emojiTrie.put("👨‍🦳", true); - emojiTrie.put("👨🏻‍🦳", true); - emojiTrie.put("👨🏼‍🦳", true); - emojiTrie.put("👨🏽‍🦳", true); - emojiTrie.put("👨🏾‍🦳", true); - emojiTrie.put("👨🏿‍🦳", true); - emojiTrie.put("👨‍🦲", true); - emojiTrie.put("👨🏻‍🦲", true); - emojiTrie.put("👨🏼‍🦲", true); - emojiTrie.put("👨🏽‍🦲", true); - emojiTrie.put("👨🏾‍🦲", true); - emojiTrie.put("👨🏿‍🦲", true); - emojiTrie.put("👩", true); - emojiTrie.put("👩🏻", true); - emojiTrie.put("👩🏼", true); - emojiTrie.put("👩🏽", true); - emojiTrie.put("👩🏾", true); - emojiTrie.put("👩🏿", true); - emojiTrie.put("👩‍🦰", true); - emojiTrie.put("👩🏻‍🦰", true); - emojiTrie.put("👩🏼‍🦰", true); - emojiTrie.put("👩🏽‍🦰", true); - emojiTrie.put("👩🏾‍🦰", true); - emojiTrie.put("👩🏿‍🦰", true); - emojiTrie.put("🧑‍🦰", true); - emojiTrie.put("🧑🏻‍🦰", true); - emojiTrie.put("🧑🏼‍🦰", true); - emojiTrie.put("🧑🏽‍🦰", true); - emojiTrie.put("🧑🏾‍🦰", true); - emojiTrie.put("🧑🏿‍🦰", true); - emojiTrie.put("👩‍🦱", true); - emojiTrie.put("👩🏻‍🦱", true); - emojiTrie.put("👩🏼‍🦱", true); - emojiTrie.put("👩🏽‍🦱", true); - emojiTrie.put("👩🏾‍🦱", true); - emojiTrie.put("👩🏿‍🦱", true); - emojiTrie.put("🧑‍🦱", true); - emojiTrie.put("🧑🏻‍🦱", true); - emojiTrie.put("🧑🏼‍🦱", true); - emojiTrie.put("🧑🏽‍🦱", true); - emojiTrie.put("🧑🏾‍🦱", true); - emojiTrie.put("🧑🏿‍🦱", true); - emojiTrie.put("👩‍🦳", true); - emojiTrie.put("👩🏻‍🦳", true); - emojiTrie.put("👩🏼‍🦳", true); - emojiTrie.put("👩🏽‍🦳", true); - emojiTrie.put("👩🏾‍🦳", true); - emojiTrie.put("👩🏿‍🦳", true); - emojiTrie.put("🧑‍🦳", true); - emojiTrie.put("🧑🏻‍🦳", true); - emojiTrie.put("🧑🏼‍🦳", true); - emojiTrie.put("🧑🏽‍🦳", true); - emojiTrie.put("🧑🏾‍🦳", true); - emojiTrie.put("🧑🏿‍🦳", true); - emojiTrie.put("👩‍🦲", true); - emojiTrie.put("👩🏻‍🦲", true); - emojiTrie.put("👩🏼‍🦲", true); - emojiTrie.put("👩🏽‍🦲", true); - emojiTrie.put("👩🏾‍🦲", true); - emojiTrie.put("👩🏿‍🦲", true); - emojiTrie.put("🧑‍🦲", true); - emojiTrie.put("🧑🏻‍🦲", true); - emojiTrie.put("🧑🏼‍🦲", true); - emojiTrie.put("🧑🏽‍🦲", true); - emojiTrie.put("🧑🏾‍🦲", true); - emojiTrie.put("🧑🏿‍🦲", true); - emojiTrie.put("👱‍♀️", true); - emojiTrie.put("👱‍♀", true); - emojiTrie.put("👱🏻‍♀️", true); - emojiTrie.put("👱🏻‍♀", true); - emojiTrie.put("👱🏼‍♀️", true); - emojiTrie.put("👱🏼‍♀", true); - emojiTrie.put("👱🏽‍♀️", true); - emojiTrie.put("👱🏽‍♀", true); - emojiTrie.put("👱🏾‍♀️", true); - emojiTrie.put("👱🏾‍♀", true); - emojiTrie.put("👱🏿‍♀️", true); - emojiTrie.put("👱🏿‍♀", true); - emojiTrie.put("👱‍♂️", true); - emojiTrie.put("👱‍♂", true); - emojiTrie.put("👱🏻‍♂️", true); - emojiTrie.put("👱🏻‍♂", true); - emojiTrie.put("👱🏼‍♂️", true); - emojiTrie.put("👱🏼‍♂", true); - emojiTrie.put("👱🏽‍♂️", true); - emojiTrie.put("👱🏽‍♂", true); - emojiTrie.put("👱🏾‍♂️", true); - emojiTrie.put("👱🏾‍♂", true); - emojiTrie.put("👱🏿‍♂️", true); - emojiTrie.put("👱🏿‍♂", true); - emojiTrie.put("🧓", true); - emojiTrie.put("🧓🏻", true); - emojiTrie.put("🧓🏼", true); - emojiTrie.put("🧓🏽", true); - emojiTrie.put("🧓🏾", true); - emojiTrie.put("🧓🏿", true); - emojiTrie.put("👴", true); - emojiTrie.put("👴🏻", true); - emojiTrie.put("👴🏼", true); - emojiTrie.put("👴🏽", true); - emojiTrie.put("👴🏾", true); - emojiTrie.put("👴🏿", true); - emojiTrie.put("👵", true); - emojiTrie.put("👵🏻", true); - emojiTrie.put("👵🏼", true); - emojiTrie.put("👵🏽", true); - emojiTrie.put("👵🏾", true); - emojiTrie.put("👵🏿", true); - emojiTrie.put("🙍", true); - emojiTrie.put("🙍🏻", true); - emojiTrie.put("🙍🏼", true); - emojiTrie.put("🙍🏽", true); - emojiTrie.put("🙍🏾", true); - emojiTrie.put("🙍🏿", true); - emojiTrie.put("🙍‍♂️", true); - emojiTrie.put("🙍‍♂", true); - emojiTrie.put("🙍🏻‍♂️", true); - emojiTrie.put("🙍🏻‍♂", true); - emojiTrie.put("🙍🏼‍♂️", true); - emojiTrie.put("🙍🏼‍♂", true); - emojiTrie.put("🙍🏽‍♂️", true); - emojiTrie.put("🙍🏽‍♂", true); - emojiTrie.put("🙍🏾‍♂️", true); - emojiTrie.put("🙍🏾‍♂", true); - emojiTrie.put("🙍🏿‍♂️", true); - emojiTrie.put("🙍🏿‍♂", true); - emojiTrie.put("🙍‍♀️", true); - emojiTrie.put("🙍‍♀", true); - emojiTrie.put("🙍🏻‍♀️", true); - emojiTrie.put("🙍🏻‍♀", true); - emojiTrie.put("🙍🏼‍♀️", true); - emojiTrie.put("🙍🏼‍♀", true); - emojiTrie.put("🙍🏽‍♀️", true); - emojiTrie.put("🙍🏽‍♀", true); - emojiTrie.put("🙍🏾‍♀️", true); - emojiTrie.put("🙍🏾‍♀", true); - emojiTrie.put("🙍🏿‍♀️", true); - emojiTrie.put("🙍🏿‍♀", true); - emojiTrie.put("🙎", true); - emojiTrie.put("🙎🏻", true); - emojiTrie.put("🙎🏼", true); - emojiTrie.put("🙎🏽", true); - emojiTrie.put("🙎🏾", true); - emojiTrie.put("🙎🏿", true); - emojiTrie.put("🙎‍♂️", true); - emojiTrie.put("🙎‍♂", true); - emojiTrie.put("🙎🏻‍♂️", true); - emojiTrie.put("🙎🏻‍♂", true); - emojiTrie.put("🙎🏼‍♂️", true); - emojiTrie.put("🙎🏼‍♂", true); - emojiTrie.put("🙎🏽‍♂️", true); - emojiTrie.put("🙎🏽‍♂", true); - emojiTrie.put("🙎🏾‍♂️", true); - emojiTrie.put("🙎🏾‍♂", true); - emojiTrie.put("🙎🏿‍♂️", true); - emojiTrie.put("🙎🏿‍♂", true); - emojiTrie.put("🙎‍♀️", true); - emojiTrie.put("🙎‍♀", true); - emojiTrie.put("🙎🏻‍♀️", true); - emojiTrie.put("🙎🏻‍♀", true); - emojiTrie.put("🙎🏼‍♀️", true); - emojiTrie.put("🙎🏼‍♀", true); - emojiTrie.put("🙎🏽‍♀️", true); - emojiTrie.put("🙎🏽‍♀", true); - emojiTrie.put("🙎🏾‍♀️", true); - emojiTrie.put("🙎🏾‍♀", true); - emojiTrie.put("🙎🏿‍♀️", true); - emojiTrie.put("🙎🏿‍♀", true); - emojiTrie.put("🙅", true); - emojiTrie.put("🙅🏻", true); - emojiTrie.put("🙅🏼", true); - emojiTrie.put("🙅🏽", true); - emojiTrie.put("🙅🏾", true); - emojiTrie.put("🙅🏿", true); - emojiTrie.put("🙅‍♂️", true); - emojiTrie.put("🙅‍♂", true); - emojiTrie.put("🙅🏻‍♂️", true); - emojiTrie.put("🙅🏻‍♂", true); - emojiTrie.put("🙅🏼‍♂️", true); - emojiTrie.put("🙅🏼‍♂", true); - emojiTrie.put("🙅🏽‍♂️", true); - emojiTrie.put("🙅🏽‍♂", true); - emojiTrie.put("🙅🏾‍♂️", true); - emojiTrie.put("🙅🏾‍♂", true); - emojiTrie.put("🙅🏿‍♂️", true); - emojiTrie.put("🙅🏿‍♂", true); - emojiTrie.put("🙅‍♀️", true); - emojiTrie.put("🙅‍♀", true); - emojiTrie.put("🙅🏻‍♀️", true); - emojiTrie.put("🙅🏻‍♀", true); - emojiTrie.put("🙅🏼‍♀️", true); - emojiTrie.put("🙅🏼‍♀", true); - emojiTrie.put("🙅🏽‍♀️", true); - emojiTrie.put("🙅🏽‍♀", true); - emojiTrie.put("🙅🏾‍♀️", true); - emojiTrie.put("🙅🏾‍♀", true); - emojiTrie.put("🙅🏿‍♀️", true); - emojiTrie.put("🙅🏿‍♀", true); - emojiTrie.put("🙆", true); - emojiTrie.put("🙆🏻", true); - emojiTrie.put("🙆🏼", true); - emojiTrie.put("🙆🏽", true); - emojiTrie.put("🙆🏾", true); - emojiTrie.put("🙆🏿", true); - emojiTrie.put("🙆‍♂️", true); - emojiTrie.put("🙆‍♂", true); - emojiTrie.put("🙆🏻‍♂️", true); - emojiTrie.put("🙆🏻‍♂", true); - emojiTrie.put("🙆🏼‍♂️", true); - emojiTrie.put("🙆🏼‍♂", true); - emojiTrie.put("🙆🏽‍♂️", true); - emojiTrie.put("🙆🏽‍♂", true); - emojiTrie.put("🙆🏾‍♂️", true); - emojiTrie.put("🙆🏾‍♂", true); - emojiTrie.put("🙆🏿‍♂️", true); - emojiTrie.put("🙆🏿‍♂", true); - emojiTrie.put("🙆‍♀️", true); - emojiTrie.put("🙆‍♀", true); - emojiTrie.put("🙆🏻‍♀️", true); - emojiTrie.put("🙆🏻‍♀", true); - emojiTrie.put("🙆🏼‍♀️", true); - emojiTrie.put("🙆🏼‍♀", true); - emojiTrie.put("🙆🏽‍♀️", true); - emojiTrie.put("🙆🏽‍♀", true); - emojiTrie.put("🙆🏾‍♀️", true); - emojiTrie.put("🙆🏾‍♀", true); - emojiTrie.put("🙆🏿‍♀️", true); - emojiTrie.put("🙆🏿‍♀", true); - emojiTrie.put("💁", true); - emojiTrie.put("💁🏻", true); - emojiTrie.put("💁🏼", true); - emojiTrie.put("💁🏽", true); - emojiTrie.put("💁🏾", true); - emojiTrie.put("💁🏿", true); - emojiTrie.put("💁‍♂️", true); - emojiTrie.put("💁‍♂", true); - emojiTrie.put("💁🏻‍♂️", true); - emojiTrie.put("💁🏻‍♂", true); - emojiTrie.put("💁🏼‍♂️", true); - emojiTrie.put("💁🏼‍♂", true); - emojiTrie.put("💁🏽‍♂️", true); - emojiTrie.put("💁🏽‍♂", true); - emojiTrie.put("💁🏾‍♂️", true); - emojiTrie.put("💁🏾‍♂", true); - emojiTrie.put("💁🏿‍♂️", true); - emojiTrie.put("💁🏿‍♂", true); - emojiTrie.put("💁‍♀️", true); - emojiTrie.put("💁‍♀", true); - emojiTrie.put("💁🏻‍♀️", true); - emojiTrie.put("💁🏻‍♀", true); - emojiTrie.put("💁🏼‍♀️", true); - emojiTrie.put("💁🏼‍♀", true); - emojiTrie.put("💁🏽‍♀️", true); - emojiTrie.put("💁🏽‍♀", true); - emojiTrie.put("💁🏾‍♀️", true); - emojiTrie.put("💁🏾‍♀", true); - emojiTrie.put("💁🏿‍♀️", true); - emojiTrie.put("💁🏿‍♀", true); - emojiTrie.put("🙋", true); - emojiTrie.put("🙋🏻", true); - emojiTrie.put("🙋🏼", true); - emojiTrie.put("🙋🏽", true); - emojiTrie.put("🙋🏾", true); - emojiTrie.put("🙋🏿", true); - emojiTrie.put("🙋‍♂️", true); - emojiTrie.put("🙋‍♂", true); - emojiTrie.put("🙋🏻‍♂️", true); - emojiTrie.put("🙋🏻‍♂", true); - emojiTrie.put("🙋🏼‍♂️", true); - emojiTrie.put("🙋🏼‍♂", true); - emojiTrie.put("🙋🏽‍♂️", true); - emojiTrie.put("🙋🏽‍♂", true); - emojiTrie.put("🙋🏾‍♂️", true); - emojiTrie.put("🙋🏾‍♂", true); - emojiTrie.put("🙋🏿‍♂️", true); - emojiTrie.put("🙋🏿‍♂", true); - emojiTrie.put("🙋‍♀️", true); - emojiTrie.put("🙋‍♀", true); - emojiTrie.put("🙋🏻‍♀️", true); - emojiTrie.put("🙋🏻‍♀", true); - emojiTrie.put("🙋🏼‍♀️", true); - emojiTrie.put("🙋🏼‍♀", true); - emojiTrie.put("🙋🏽‍♀️", true); - emojiTrie.put("🙋🏽‍♀", true); - emojiTrie.put("🙋🏾‍♀️", true); - emojiTrie.put("🙋🏾‍♀", true); - emojiTrie.put("🙋🏿‍♀️", true); - emojiTrie.put("🙋🏿‍♀", true); - emojiTrie.put("🧏", true); - emojiTrie.put("🧏🏻", true); - emojiTrie.put("🧏🏼", true); - emojiTrie.put("🧏🏽", true); - emojiTrie.put("🧏🏾", true); - emojiTrie.put("🧏🏿", true); - emojiTrie.put("🧏‍♂️", true); - emojiTrie.put("🧏‍♂", true); - emojiTrie.put("🧏🏻‍♂️", true); - emojiTrie.put("🧏🏻‍♂", true); - emojiTrie.put("🧏🏼‍♂️", true); - emojiTrie.put("🧏🏼‍♂", true); - emojiTrie.put("🧏🏽‍♂️", true); - emojiTrie.put("🧏🏽‍♂", true); - emojiTrie.put("🧏🏾‍♂️", true); - emojiTrie.put("🧏🏾‍♂", true); - emojiTrie.put("🧏🏿‍♂️", true); - emojiTrie.put("🧏🏿‍♂", true); - emojiTrie.put("🧏‍♀️", true); - emojiTrie.put("🧏‍♀", true); - emojiTrie.put("🧏🏻‍♀️", true); - emojiTrie.put("🧏🏻‍♀", true); - emojiTrie.put("🧏🏼‍♀️", true); - emojiTrie.put("🧏🏼‍♀", true); - emojiTrie.put("🧏🏽‍♀️", true); - emojiTrie.put("🧏🏽‍♀", true); - emojiTrie.put("🧏🏾‍♀️", true); - emojiTrie.put("🧏🏾‍♀", true); - emojiTrie.put("🧏🏿‍♀️", true); - emojiTrie.put("🧏🏿‍♀", true); - emojiTrie.put("🙇", true); - emojiTrie.put("🙇🏻", true); - emojiTrie.put("🙇🏼", true); - emojiTrie.put("🙇🏽", true); - emojiTrie.put("🙇🏾", true); - emojiTrie.put("🙇🏿", true); - emojiTrie.put("🙇‍♂️", true); - emojiTrie.put("🙇‍♂", true); - emojiTrie.put("🙇🏻‍♂️", true); - emojiTrie.put("🙇🏻‍♂", true); - emojiTrie.put("🙇🏼‍♂️", true); - emojiTrie.put("🙇🏼‍♂", true); - emojiTrie.put("🙇🏽‍♂️", true); - emojiTrie.put("🙇🏽‍♂", true); - emojiTrie.put("🙇🏾‍♂️", true); - emojiTrie.put("🙇🏾‍♂", true); - emojiTrie.put("🙇🏿‍♂️", true); - emojiTrie.put("🙇🏿‍♂", true); - emojiTrie.put("🙇‍♀️", true); - emojiTrie.put("🙇‍♀", true); - emojiTrie.put("🙇🏻‍♀️", true); - emojiTrie.put("🙇🏻‍♀", true); - emojiTrie.put("🙇🏼‍♀️", true); - emojiTrie.put("🙇🏼‍♀", true); - emojiTrie.put("🙇🏽‍♀️", true); - emojiTrie.put("🙇🏽‍♀", true); - emojiTrie.put("🙇🏾‍♀️", true); - emojiTrie.put("🙇🏾‍♀", true); - emojiTrie.put("🙇🏿‍♀️", true); - emojiTrie.put("🙇🏿‍♀", true); - emojiTrie.put("🤦", true); - emojiTrie.put("🤦🏻", true); - emojiTrie.put("🤦🏼", true); - emojiTrie.put("🤦🏽", true); - emojiTrie.put("🤦🏾", true); - emojiTrie.put("🤦🏿", true); - emojiTrie.put("🤦‍♂️", true); - emojiTrie.put("🤦‍♂", true); - emojiTrie.put("🤦🏻‍♂️", true); - emojiTrie.put("🤦🏻‍♂", true); - emojiTrie.put("🤦🏼‍♂️", true); - emojiTrie.put("🤦🏼‍♂", true); - emojiTrie.put("🤦🏽‍♂️", true); - emojiTrie.put("🤦🏽‍♂", true); - emojiTrie.put("🤦🏾‍♂️", true); - emojiTrie.put("🤦🏾‍♂", true); - emojiTrie.put("🤦🏿‍♂️", true); - emojiTrie.put("🤦🏿‍♂", true); - emojiTrie.put("🤦‍♀️", true); - emojiTrie.put("🤦‍♀", true); - emojiTrie.put("🤦🏻‍♀️", true); - emojiTrie.put("🤦🏻‍♀", true); - emojiTrie.put("🤦🏼‍♀️", true); - emojiTrie.put("🤦🏼‍♀", true); - emojiTrie.put("🤦🏽‍♀️", true); - emojiTrie.put("🤦🏽‍♀", true); - emojiTrie.put("🤦🏾‍♀️", true); - emojiTrie.put("🤦🏾‍♀", true); - emojiTrie.put("🤦🏿‍♀️", true); - emojiTrie.put("🤦🏿‍♀", true); - emojiTrie.put("🤷", true); - emojiTrie.put("🤷🏻", true); - emojiTrie.put("🤷🏼", true); - emojiTrie.put("🤷🏽", true); - emojiTrie.put("🤷🏾", true); - emojiTrie.put("🤷🏿", true); - emojiTrie.put("🤷‍♂️", true); - emojiTrie.put("🤷‍♂", true); - emojiTrie.put("🤷🏻‍♂️", true); - emojiTrie.put("🤷🏻‍♂", true); - emojiTrie.put("🤷🏼‍♂️", true); - emojiTrie.put("🤷🏼‍♂", true); - emojiTrie.put("🤷🏽‍♂️", true); - emojiTrie.put("🤷🏽‍♂", true); - emojiTrie.put("🤷🏾‍♂️", true); - emojiTrie.put("🤷🏾‍♂", true); - emojiTrie.put("🤷🏿‍♂️", true); - emojiTrie.put("🤷🏿‍♂", true); - emojiTrie.put("🤷‍♀️", true); - emojiTrie.put("🤷‍♀", true); - emojiTrie.put("🤷🏻‍♀️", true); - emojiTrie.put("🤷🏻‍♀", true); - emojiTrie.put("🤷🏼‍♀️", true); - emojiTrie.put("🤷🏼‍♀", true); - emojiTrie.put("🤷🏽‍♀️", true); - emojiTrie.put("🤷🏽‍♀", true); - emojiTrie.put("🤷🏾‍♀️", true); - emojiTrie.put("🤷🏾‍♀", true); - emojiTrie.put("🤷🏿‍♀️", true); - emojiTrie.put("🤷🏿‍♀", true); - emojiTrie.put("🧑‍⚕️", true); - emojiTrie.put("🧑‍⚕", true); - emojiTrie.put("🧑🏻‍⚕️", true); - emojiTrie.put("🧑🏻‍⚕", true); - emojiTrie.put("🧑🏼‍⚕️", true); - emojiTrie.put("🧑🏼‍⚕", true); - emojiTrie.put("🧑🏽‍⚕️", true); - emojiTrie.put("🧑🏽‍⚕", true); - emojiTrie.put("🧑🏾‍⚕️", true); - emojiTrie.put("🧑🏾‍⚕", true); - emojiTrie.put("🧑🏿‍⚕️", true); - emojiTrie.put("🧑🏿‍⚕", true); - emojiTrie.put("👨‍⚕️", true); - emojiTrie.put("👨‍⚕", true); - emojiTrie.put("👨🏻‍⚕️", true); - emojiTrie.put("👨🏻‍⚕", true); - emojiTrie.put("👨🏼‍⚕️", true); - emojiTrie.put("👨🏼‍⚕", true); - emojiTrie.put("👨🏽‍⚕️", true); - emojiTrie.put("👨🏽‍⚕", true); - emojiTrie.put("👨🏾‍⚕️", true); - emojiTrie.put("👨🏾‍⚕", true); - emojiTrie.put("👨🏿‍⚕️", true); - emojiTrie.put("👨🏿‍⚕", true); - emojiTrie.put("👩‍⚕️", true); - emojiTrie.put("👩‍⚕", true); - emojiTrie.put("👩🏻‍⚕️", true); - emojiTrie.put("👩🏻‍⚕", true); - emojiTrie.put("👩🏼‍⚕️", true); - emojiTrie.put("👩🏼‍⚕", true); - emojiTrie.put("👩🏽‍⚕️", true); - emojiTrie.put("👩🏽‍⚕", true); - emojiTrie.put("👩🏾‍⚕️", true); - emojiTrie.put("👩🏾‍⚕", true); - emojiTrie.put("👩🏿‍⚕️", true); - emojiTrie.put("👩🏿‍⚕", true); - emojiTrie.put("🧑‍🎓", true); - emojiTrie.put("🧑🏻‍🎓", true); - emojiTrie.put("🧑🏼‍🎓", true); - emojiTrie.put("🧑🏽‍🎓", true); - emojiTrie.put("🧑🏾‍🎓", true); - emojiTrie.put("🧑🏿‍🎓", true); - emojiTrie.put("👨‍🎓", true); - emojiTrie.put("👨🏻‍🎓", true); - emojiTrie.put("👨🏼‍🎓", true); - emojiTrie.put("👨🏽‍🎓", true); - emojiTrie.put("👨🏾‍🎓", true); - emojiTrie.put("👨🏿‍🎓", true); - emojiTrie.put("👩‍🎓", true); - emojiTrie.put("👩🏻‍🎓", true); - emojiTrie.put("👩🏼‍🎓", true); - emojiTrie.put("👩🏽‍🎓", true); - emojiTrie.put("👩🏾‍🎓", true); - emojiTrie.put("👩🏿‍🎓", true); - emojiTrie.put("🧑‍🏫", true); - emojiTrie.put("🧑🏻‍🏫", true); - emojiTrie.put("🧑🏼‍🏫", true); - emojiTrie.put("🧑🏽‍🏫", true); - emojiTrie.put("🧑🏾‍🏫", true); - emojiTrie.put("🧑🏿‍🏫", true); - emojiTrie.put("👨‍🏫", true); - emojiTrie.put("👨🏻‍🏫", true); - emojiTrie.put("👨🏼‍🏫", true); - emojiTrie.put("👨🏽‍🏫", true); - emojiTrie.put("👨🏾‍🏫", true); - emojiTrie.put("👨🏿‍🏫", true); - emojiTrie.put("👩‍🏫", true); - emojiTrie.put("👩🏻‍🏫", true); - emojiTrie.put("👩🏼‍🏫", true); - emojiTrie.put("👩🏽‍🏫", true); - emojiTrie.put("👩🏾‍🏫", true); - emojiTrie.put("👩🏿‍🏫", true); - emojiTrie.put("🧑‍⚖️", true); - emojiTrie.put("🧑‍⚖", true); - emojiTrie.put("🧑🏻‍⚖️", true); - emojiTrie.put("🧑🏻‍⚖", true); - emojiTrie.put("🧑🏼‍⚖️", true); - emojiTrie.put("🧑🏼‍⚖", true); - emojiTrie.put("🧑🏽‍⚖️", true); - emojiTrie.put("🧑🏽‍⚖", true); - emojiTrie.put("🧑🏾‍⚖️", true); - emojiTrie.put("🧑🏾‍⚖", true); - emojiTrie.put("🧑🏿‍⚖️", true); - emojiTrie.put("🧑🏿‍⚖", true); - emojiTrie.put("👨‍⚖️", true); - emojiTrie.put("👨‍⚖", true); - emojiTrie.put("👨🏻‍⚖️", true); - emojiTrie.put("👨🏻‍⚖", true); - emojiTrie.put("👨🏼‍⚖️", true); - emojiTrie.put("👨🏼‍⚖", true); - emojiTrie.put("👨🏽‍⚖️", true); - emojiTrie.put("👨🏽‍⚖", true); - emojiTrie.put("👨🏾‍⚖️", true); - emojiTrie.put("👨🏾‍⚖", true); - emojiTrie.put("👨🏿‍⚖️", true); - emojiTrie.put("👨🏿‍⚖", true); - emojiTrie.put("👩‍⚖️", true); - emojiTrie.put("👩‍⚖", true); - emojiTrie.put("👩🏻‍⚖️", true); - emojiTrie.put("👩🏻‍⚖", true); - emojiTrie.put("👩🏼‍⚖️", true); - emojiTrie.put("👩🏼‍⚖", true); - emojiTrie.put("👩🏽‍⚖️", true); - emojiTrie.put("👩🏽‍⚖", true); - emojiTrie.put("👩🏾‍⚖️", true); - emojiTrie.put("👩🏾‍⚖", true); - emojiTrie.put("👩🏿‍⚖️", true); - emojiTrie.put("👩🏿‍⚖", true); - emojiTrie.put("🧑‍🌾", true); - emojiTrie.put("🧑🏻‍🌾", true); - emojiTrie.put("🧑🏼‍🌾", true); - emojiTrie.put("🧑🏽‍🌾", true); - emojiTrie.put("🧑🏾‍🌾", true); - emojiTrie.put("🧑🏿‍🌾", true); - emojiTrie.put("👨‍🌾", true); - emojiTrie.put("👨🏻‍🌾", true); - emojiTrie.put("👨🏼‍🌾", true); - emojiTrie.put("👨🏽‍🌾", true); - emojiTrie.put("👨🏾‍🌾", true); - emojiTrie.put("👨🏿‍🌾", true); - emojiTrie.put("👩‍🌾", true); - emojiTrie.put("👩🏻‍🌾", true); - emojiTrie.put("👩🏼‍🌾", true); - emojiTrie.put("👩🏽‍🌾", true); - emojiTrie.put("👩🏾‍🌾", true); - emojiTrie.put("👩🏿‍🌾", true); - emojiTrie.put("🧑‍🍳", true); - emojiTrie.put("🧑🏻‍🍳", true); - emojiTrie.put("🧑🏼‍🍳", true); - emojiTrie.put("🧑🏽‍🍳", true); - emojiTrie.put("🧑🏾‍🍳", true); - emojiTrie.put("🧑🏿‍🍳", true); - emojiTrie.put("👨‍🍳", true); - emojiTrie.put("👨🏻‍🍳", true); - emojiTrie.put("👨🏼‍🍳", true); - emojiTrie.put("👨🏽‍🍳", true); - emojiTrie.put("👨🏾‍🍳", true); - emojiTrie.put("👨🏿‍🍳", true); - emojiTrie.put("👩‍🍳", true); - emojiTrie.put("👩🏻‍🍳", true); - emojiTrie.put("👩🏼‍🍳", true); - emojiTrie.put("👩🏽‍🍳", true); - emojiTrie.put("👩🏾‍🍳", true); - emojiTrie.put("👩🏿‍🍳", true); - emojiTrie.put("🧑‍🔧", true); - emojiTrie.put("🧑🏻‍🔧", true); - emojiTrie.put("🧑🏼‍🔧", true); - emojiTrie.put("🧑🏽‍🔧", true); - emojiTrie.put("🧑🏾‍🔧", true); - emojiTrie.put("🧑🏿‍🔧", true); - emojiTrie.put("👨‍🔧", true); - emojiTrie.put("👨🏻‍🔧", true); - emojiTrie.put("👨🏼‍🔧", true); - emojiTrie.put("👨🏽‍🔧", true); - emojiTrie.put("👨🏾‍🔧", true); - emojiTrie.put("👨🏿‍🔧", true); - emojiTrie.put("👩‍🔧", true); - emojiTrie.put("👩🏻‍🔧", true); - emojiTrie.put("👩🏼‍🔧", true); - emojiTrie.put("👩🏽‍🔧", true); - emojiTrie.put("👩🏾‍🔧", true); - emojiTrie.put("👩🏿‍🔧", true); - emojiTrie.put("🧑‍🏭", true); - emojiTrie.put("🧑🏻‍🏭", true); - emojiTrie.put("🧑🏼‍🏭", true); - emojiTrie.put("🧑🏽‍🏭", true); - emojiTrie.put("🧑🏾‍🏭", true); - emojiTrie.put("🧑🏿‍🏭", true); - emojiTrie.put("👨‍🏭", true); - emojiTrie.put("👨🏻‍🏭", true); - emojiTrie.put("👨🏼‍🏭", true); - emojiTrie.put("👨🏽‍🏭", true); - emojiTrie.put("👨🏾‍🏭", true); - emojiTrie.put("👨🏿‍🏭", true); - emojiTrie.put("👩‍🏭", true); - emojiTrie.put("👩🏻‍🏭", true); - emojiTrie.put("👩🏼‍🏭", true); - emojiTrie.put("👩🏽‍🏭", true); - emojiTrie.put("👩🏾‍🏭", true); - emojiTrie.put("👩🏿‍🏭", true); - emojiTrie.put("🧑‍💼", true); - emojiTrie.put("🧑🏻‍💼", true); - emojiTrie.put("🧑🏼‍💼", true); - emojiTrie.put("🧑🏽‍💼", true); - emojiTrie.put("🧑🏾‍💼", true); - emojiTrie.put("🧑🏿‍💼", true); - emojiTrie.put("👨‍💼", true); - emojiTrie.put("👨🏻‍💼", true); - emojiTrie.put("👨🏼‍💼", true); - emojiTrie.put("👨🏽‍💼", true); - emojiTrie.put("👨🏾‍💼", true); - emojiTrie.put("👨🏿‍💼", true); - emojiTrie.put("👩‍💼", true); - emojiTrie.put("👩🏻‍💼", true); - emojiTrie.put("👩🏼‍💼", true); - emojiTrie.put("👩🏽‍💼", true); - emojiTrie.put("👩🏾‍💼", true); - emojiTrie.put("👩🏿‍💼", true); - emojiTrie.put("🧑‍🔬", true); - emojiTrie.put("🧑🏻‍🔬", true); - emojiTrie.put("🧑🏼‍🔬", true); - emojiTrie.put("🧑🏽‍🔬", true); - emojiTrie.put("🧑🏾‍🔬", true); - emojiTrie.put("🧑🏿‍🔬", true); - emojiTrie.put("👨‍🔬", true); - emojiTrie.put("👨🏻‍🔬", true); - emojiTrie.put("👨🏼‍🔬", true); - emojiTrie.put("👨🏽‍🔬", true); - emojiTrie.put("👨🏾‍🔬", true); - emojiTrie.put("👨🏿‍🔬", true); - emojiTrie.put("👩‍🔬", true); - emojiTrie.put("👩🏻‍🔬", true); - emojiTrie.put("👩🏼‍🔬", true); - emojiTrie.put("👩🏽‍🔬", true); - emojiTrie.put("👩🏾‍🔬", true); - emojiTrie.put("👩🏿‍🔬", true); - emojiTrie.put("🧑‍💻", true); - emojiTrie.put("🧑🏻‍💻", true); - emojiTrie.put("🧑🏼‍💻", true); - emojiTrie.put("🧑🏽‍💻", true); - emojiTrie.put("🧑🏾‍💻", true); - emojiTrie.put("🧑🏿‍💻", true); - emojiTrie.put("👨‍💻", true); - emojiTrie.put("👨🏻‍💻", true); - emojiTrie.put("👨🏼‍💻", true); - emojiTrie.put("👨🏽‍💻", true); - emojiTrie.put("👨🏾‍💻", true); - emojiTrie.put("👨🏿‍💻", true); - emojiTrie.put("👩‍💻", true); - emojiTrie.put("👩🏻‍💻", true); - emojiTrie.put("👩🏼‍💻", true); - emojiTrie.put("👩🏽‍💻", true); - emojiTrie.put("👩🏾‍💻", true); - emojiTrie.put("👩🏿‍💻", true); - emojiTrie.put("🧑‍🎤", true); - emojiTrie.put("🧑🏻‍🎤", true); - emojiTrie.put("🧑🏼‍🎤", true); - emojiTrie.put("🧑🏽‍🎤", true); - emojiTrie.put("🧑🏾‍🎤", true); - emojiTrie.put("🧑🏿‍🎤", true); - emojiTrie.put("👨‍🎤", true); - emojiTrie.put("👨🏻‍🎤", true); - emojiTrie.put("👨🏼‍🎤", true); - emojiTrie.put("👨🏽‍🎤", true); - emojiTrie.put("👨🏾‍🎤", true); - emojiTrie.put("👨🏿‍🎤", true); - emojiTrie.put("👩‍🎤", true); - emojiTrie.put("👩🏻‍🎤", true); - emojiTrie.put("👩🏼‍🎤", true); - emojiTrie.put("👩🏽‍🎤", true); - emojiTrie.put("👩🏾‍🎤", true); - emojiTrie.put("👩🏿‍🎤", true); - emojiTrie.put("🧑‍🎨", true); - emojiTrie.put("🧑🏻‍🎨", true); - emojiTrie.put("🧑🏼‍🎨", true); - emojiTrie.put("🧑🏽‍🎨", true); - emojiTrie.put("🧑🏾‍🎨", true); - emojiTrie.put("🧑🏿‍🎨", true); - emojiTrie.put("👨‍🎨", true); - emojiTrie.put("👨🏻‍🎨", true); - emojiTrie.put("👨🏼‍🎨", true); - emojiTrie.put("👨🏽‍🎨", true); - emojiTrie.put("👨🏾‍🎨", true); - emojiTrie.put("👨🏿‍🎨", true); - emojiTrie.put("👩‍🎨", true); - emojiTrie.put("👩🏻‍🎨", true); - emojiTrie.put("👩🏼‍🎨", true); - emojiTrie.put("👩🏽‍🎨", true); - emojiTrie.put("👩🏾‍🎨", true); - emojiTrie.put("👩🏿‍🎨", true); - emojiTrie.put("🧑‍✈️", true); - emojiTrie.put("🧑‍✈", true); - emojiTrie.put("🧑🏻‍✈️", true); - emojiTrie.put("🧑🏻‍✈", true); - emojiTrie.put("🧑🏼‍✈️", true); - emojiTrie.put("🧑🏼‍✈", true); - emojiTrie.put("🧑🏽‍✈️", true); - emojiTrie.put("🧑🏽‍✈", true); - emojiTrie.put("🧑🏾‍✈️", true); - emojiTrie.put("🧑🏾‍✈", true); - emojiTrie.put("🧑🏿‍✈️", true); - emojiTrie.put("🧑🏿‍✈", true); - emojiTrie.put("👨‍✈️", true); - emojiTrie.put("👨‍✈", true); - emojiTrie.put("👨🏻‍✈️", true); - emojiTrie.put("👨🏻‍✈", true); - emojiTrie.put("👨🏼‍✈️", true); - emojiTrie.put("👨🏼‍✈", true); - emojiTrie.put("👨🏽‍✈️", true); - emojiTrie.put("👨🏽‍✈", true); - emojiTrie.put("👨🏾‍✈️", true); - emojiTrie.put("👨🏾‍✈", true); - emojiTrie.put("👨🏿‍✈️", true); - emojiTrie.put("👨🏿‍✈", true); - emojiTrie.put("👩‍✈️", true); - emojiTrie.put("👩‍✈", true); - emojiTrie.put("👩🏻‍✈️", true); - emojiTrie.put("👩🏻‍✈", true); - emojiTrie.put("👩🏼‍✈️", true); - emojiTrie.put("👩🏼‍✈", true); - emojiTrie.put("👩🏽‍✈️", true); - emojiTrie.put("👩🏽‍✈", true); - emojiTrie.put("👩🏾‍✈️", true); - emojiTrie.put("👩🏾‍✈", true); - emojiTrie.put("👩🏿‍✈️", true); - emojiTrie.put("👩🏿‍✈", true); - emojiTrie.put("🧑‍🚀", true); - emojiTrie.put("🧑🏻‍🚀", true); - emojiTrie.put("🧑🏼‍🚀", true); - emojiTrie.put("🧑🏽‍🚀", true); - emojiTrie.put("🧑🏾‍🚀", true); - emojiTrie.put("🧑🏿‍🚀", true); - emojiTrie.put("👨‍🚀", true); - emojiTrie.put("👨🏻‍🚀", true); - emojiTrie.put("👨🏼‍🚀", true); - emojiTrie.put("👨🏽‍🚀", true); - emojiTrie.put("👨🏾‍🚀", true); - emojiTrie.put("👨🏿‍🚀", true); - emojiTrie.put("👩‍🚀", true); - emojiTrie.put("👩🏻‍🚀", true); - emojiTrie.put("👩🏼‍🚀", true); - emojiTrie.put("👩🏽‍🚀", true); - emojiTrie.put("👩🏾‍🚀", true); - emojiTrie.put("👩🏿‍🚀", true); - emojiTrie.put("🧑‍🚒", true); - emojiTrie.put("🧑🏻‍🚒", true); - emojiTrie.put("🧑🏼‍🚒", true); - emojiTrie.put("🧑🏽‍🚒", true); - emojiTrie.put("🧑🏾‍🚒", true); - emojiTrie.put("🧑🏿‍🚒", true); - emojiTrie.put("👨‍🚒", true); - emojiTrie.put("👨🏻‍🚒", true); - emojiTrie.put("👨🏼‍🚒", true); - emojiTrie.put("👨🏽‍🚒", true); - emojiTrie.put("👨🏾‍🚒", true); - emojiTrie.put("👨🏿‍🚒", true); - emojiTrie.put("👩‍🚒", true); - emojiTrie.put("👩🏻‍🚒", true); - emojiTrie.put("👩🏼‍🚒", true); - emojiTrie.put("👩🏽‍🚒", true); - emojiTrie.put("👩🏾‍🚒", true); - emojiTrie.put("👩🏿‍🚒", true); - emojiTrie.put("👮", true); - emojiTrie.put("👮🏻", true); - emojiTrie.put("👮🏼", true); - emojiTrie.put("👮🏽", true); - emojiTrie.put("👮🏾", true); - emojiTrie.put("👮🏿", true); - emojiTrie.put("👮‍♂️", true); - emojiTrie.put("👮‍♂", true); - emojiTrie.put("👮🏻‍♂️", true); - emojiTrie.put("👮🏻‍♂", true); - emojiTrie.put("👮🏼‍♂️", true); - emojiTrie.put("👮🏼‍♂", true); - emojiTrie.put("👮🏽‍♂️", true); - emojiTrie.put("👮🏽‍♂", true); - emojiTrie.put("👮🏾‍♂️", true); - emojiTrie.put("👮🏾‍♂", true); - emojiTrie.put("👮🏿‍♂️", true); - emojiTrie.put("👮🏿‍♂", true); - emojiTrie.put("👮‍♀️", true); - emojiTrie.put("👮‍♀", true); - emojiTrie.put("👮🏻‍♀️", true); - emojiTrie.put("👮🏻‍♀", true); - emojiTrie.put("👮🏼‍♀️", true); - emojiTrie.put("👮🏼‍♀", true); - emojiTrie.put("👮🏽‍♀️", true); - emojiTrie.put("👮🏽‍♀", true); - emojiTrie.put("👮🏾‍♀️", true); - emojiTrie.put("👮🏾‍♀", true); - emojiTrie.put("👮🏿‍♀️", true); - emojiTrie.put("👮🏿‍♀", true); - emojiTrie.put("🕵️", true); - emojiTrie.put("🕵", true); - emojiTrie.put("🕵🏻", true); - emojiTrie.put("🕵🏼", true); - emojiTrie.put("🕵🏽", true); - emojiTrie.put("🕵🏾", true); - emojiTrie.put("🕵🏿", true); - emojiTrie.put("🕵️‍♂️", true); - emojiTrie.put("🕵‍♂️", true); - emojiTrie.put("🕵️‍♂", true); - emojiTrie.put("🕵‍♂", true); - emojiTrie.put("🕵🏻‍♂️", true); - emojiTrie.put("🕵🏻‍♂", true); - emojiTrie.put("🕵🏼‍♂️", true); - emojiTrie.put("🕵🏼‍♂", true); - emojiTrie.put("🕵🏽‍♂️", true); - emojiTrie.put("🕵🏽‍♂", true); - emojiTrie.put("🕵🏾‍♂️", true); - emojiTrie.put("🕵🏾‍♂", true); - emojiTrie.put("🕵🏿‍♂️", true); - emojiTrie.put("🕵🏿‍♂", true); - emojiTrie.put("🕵️‍♀️", true); - emojiTrie.put("🕵‍♀️", true); - emojiTrie.put("🕵️‍♀", true); - emojiTrie.put("🕵‍♀", true); - emojiTrie.put("🕵🏻‍♀️", true); - emojiTrie.put("🕵🏻‍♀", true); - emojiTrie.put("🕵🏼‍♀️", true); - emojiTrie.put("🕵🏼‍♀", true); - emojiTrie.put("🕵🏽‍♀️", true); - emojiTrie.put("🕵🏽‍♀", true); - emojiTrie.put("🕵🏾‍♀️", true); - emojiTrie.put("🕵🏾‍♀", true); - emojiTrie.put("🕵🏿‍♀️", true); - emojiTrie.put("🕵🏿‍♀", true); - emojiTrie.put("💂", true); - emojiTrie.put("💂🏻", true); - emojiTrie.put("💂🏼", true); - emojiTrie.put("💂🏽", true); - emojiTrie.put("💂🏾", true); - emojiTrie.put("💂🏿", true); - emojiTrie.put("💂‍♂️", true); - emojiTrie.put("💂‍♂", true); - emojiTrie.put("💂🏻‍♂️", true); - emojiTrie.put("💂🏻‍♂", true); - emojiTrie.put("💂🏼‍♂️", true); - emojiTrie.put("💂🏼‍♂", true); - emojiTrie.put("💂🏽‍♂️", true); - emojiTrie.put("💂🏽‍♂", true); - emojiTrie.put("💂🏾‍♂️", true); - emojiTrie.put("💂🏾‍♂", true); - emojiTrie.put("💂🏿‍♂️", true); - emojiTrie.put("💂🏿‍♂", true); - emojiTrie.put("💂‍♀️", true); - emojiTrie.put("💂‍♀", true); - emojiTrie.put("💂🏻‍♀️", true); - emojiTrie.put("💂🏻‍♀", true); - emojiTrie.put("💂🏼‍♀️", true); - emojiTrie.put("💂🏼‍♀", true); - emojiTrie.put("💂🏽‍♀️", true); - emojiTrie.put("💂🏽‍♀", true); - emojiTrie.put("💂🏾‍♀️", true); - emojiTrie.put("💂🏾‍♀", true); - emojiTrie.put("💂🏿‍♀️", true); - emojiTrie.put("💂🏿‍♀", true); - emojiTrie.put("🥷", true); - emojiTrie.put("🥷🏻", true); - emojiTrie.put("🥷🏼", true); - emojiTrie.put("🥷🏽", true); - emojiTrie.put("🥷🏾", true); - emojiTrie.put("🥷🏿", true); - emojiTrie.put("👷", true); - emojiTrie.put("👷🏻", true); - emojiTrie.put("👷🏼", true); - emojiTrie.put("👷🏽", true); - emojiTrie.put("👷🏾", true); - emojiTrie.put("👷🏿", true); - emojiTrie.put("👷‍♂️", true); - emojiTrie.put("👷‍♂", true); - emojiTrie.put("👷🏻‍♂️", true); - emojiTrie.put("👷🏻‍♂", true); - emojiTrie.put("👷🏼‍♂️", true); - emojiTrie.put("👷🏼‍♂", true); - emojiTrie.put("👷🏽‍♂️", true); - emojiTrie.put("👷🏽‍♂", true); - emojiTrie.put("👷🏾‍♂️", true); - emojiTrie.put("👷🏾‍♂", true); - emojiTrie.put("👷🏿‍♂️", true); - emojiTrie.put("👷🏿‍♂", true); - emojiTrie.put("👷‍♀️", true); - emojiTrie.put("👷‍♀", true); - emojiTrie.put("👷🏻‍♀️", true); - emojiTrie.put("👷🏻‍♀", true); - emojiTrie.put("👷🏼‍♀️", true); - emojiTrie.put("👷🏼‍♀", true); - emojiTrie.put("👷🏽‍♀️", true); - emojiTrie.put("👷🏽‍♀", true); - emojiTrie.put("👷🏾‍♀️", true); - emojiTrie.put("👷🏾‍♀", true); - emojiTrie.put("👷🏿‍♀️", true); - emojiTrie.put("👷🏿‍♀", true); - emojiTrie.put("🫅", true); - emojiTrie.put("🫅🏻", true); - emojiTrie.put("🫅🏼", true); - emojiTrie.put("🫅🏽", true); - emojiTrie.put("🫅🏾", true); - emojiTrie.put("🫅🏿", true); - emojiTrie.put("🤴", true); - emojiTrie.put("🤴🏻", true); - emojiTrie.put("🤴🏼", true); - emojiTrie.put("🤴🏽", true); - emojiTrie.put("🤴🏾", true); - emojiTrie.put("🤴🏿", true); - emojiTrie.put("👸", true); - emojiTrie.put("👸🏻", true); - emojiTrie.put("👸🏼", true); - emojiTrie.put("👸🏽", true); - emojiTrie.put("👸🏾", true); - emojiTrie.put("👸🏿", true); - emojiTrie.put("👳", true); - emojiTrie.put("👳🏻", true); - emojiTrie.put("👳🏼", true); - emojiTrie.put("👳🏽", true); - emojiTrie.put("👳🏾", true); - emojiTrie.put("👳🏿", true); - emojiTrie.put("👳‍♂️", true); - emojiTrie.put("👳‍♂", true); - emojiTrie.put("👳🏻‍♂️", true); - emojiTrie.put("👳🏻‍♂", true); - emojiTrie.put("👳🏼‍♂️", true); - emojiTrie.put("👳🏼‍♂", true); - emojiTrie.put("👳🏽‍♂️", true); - emojiTrie.put("👳🏽‍♂", true); - emojiTrie.put("👳🏾‍♂️", true); - emojiTrie.put("👳🏾‍♂", true); - emojiTrie.put("👳🏿‍♂️", true); - emojiTrie.put("👳🏿‍♂", true); - emojiTrie.put("👳‍♀️", true); - emojiTrie.put("👳‍♀", true); - emojiTrie.put("👳🏻‍♀️", true); - emojiTrie.put("👳🏻‍♀", true); - emojiTrie.put("👳🏼‍♀️", true); - emojiTrie.put("👳🏼‍♀", true); - emojiTrie.put("👳🏽‍♀️", true); - emojiTrie.put("👳🏽‍♀", true); - emojiTrie.put("👳🏾‍♀️", true); - emojiTrie.put("👳🏾‍♀", true); - emojiTrie.put("👳🏿‍♀️", true); - emojiTrie.put("👳🏿‍♀", true); - emojiTrie.put("👲", true); - emojiTrie.put("👲🏻", true); - emojiTrie.put("👲🏼", true); - emojiTrie.put("👲🏽", true); - emojiTrie.put("👲🏾", true); - emojiTrie.put("👲🏿", true); - emojiTrie.put("🧕", true); - emojiTrie.put("🧕🏻", true); - emojiTrie.put("🧕🏼", true); - emojiTrie.put("🧕🏽", true); - emojiTrie.put("🧕🏾", true); - emojiTrie.put("🧕🏿", true); - emojiTrie.put("🤵", true); - emojiTrie.put("🤵🏻", true); - emojiTrie.put("🤵🏼", true); - emojiTrie.put("🤵🏽", true); - emojiTrie.put("🤵🏾", true); - emojiTrie.put("🤵🏿", true); - emojiTrie.put("🤵‍♂️", true); - emojiTrie.put("🤵‍♂", true); - emojiTrie.put("🤵🏻‍♂️", true); - emojiTrie.put("🤵🏻‍♂", true); - emojiTrie.put("🤵🏼‍♂️", true); - emojiTrie.put("🤵🏼‍♂", true); - emojiTrie.put("🤵🏽‍♂️", true); - emojiTrie.put("🤵🏽‍♂", true); - emojiTrie.put("🤵🏾‍♂️", true); - emojiTrie.put("🤵🏾‍♂", true); - emojiTrie.put("🤵🏿‍♂️", true); - emojiTrie.put("🤵🏿‍♂", true); - emojiTrie.put("🤵‍♀️", true); - emojiTrie.put("🤵‍♀", true); - emojiTrie.put("🤵🏻‍♀️", true); - emojiTrie.put("🤵🏻‍♀", true); - emojiTrie.put("🤵🏼‍♀️", true); - emojiTrie.put("🤵🏼‍♀", true); - emojiTrie.put("🤵🏽‍♀️", true); - emojiTrie.put("🤵🏽‍♀", true); - emojiTrie.put("🤵🏾‍♀️", true); - emojiTrie.put("🤵🏾‍♀", true); - emojiTrie.put("🤵🏿‍♀️", true); - emojiTrie.put("🤵🏿‍♀", true); - emojiTrie.put("👰", true); - emojiTrie.put("👰🏻", true); - emojiTrie.put("👰🏼", true); - emojiTrie.put("👰🏽", true); - emojiTrie.put("👰🏾", true); - emojiTrie.put("👰🏿", true); - emojiTrie.put("👰‍♂️", true); - emojiTrie.put("👰‍♂", true); - emojiTrie.put("👰🏻‍♂️", true); - emojiTrie.put("👰🏻‍♂", true); - emojiTrie.put("👰🏼‍♂️", true); - emojiTrie.put("👰🏼‍♂", true); - emojiTrie.put("👰🏽‍♂️", true); - emojiTrie.put("👰🏽‍♂", true); - emojiTrie.put("👰🏾‍♂️", true); - emojiTrie.put("👰🏾‍♂", true); - emojiTrie.put("👰🏿‍♂️", true); - emojiTrie.put("👰🏿‍♂", true); - emojiTrie.put("👰‍♀️", true); - emojiTrie.put("👰‍♀", true); - emojiTrie.put("👰🏻‍♀️", true); - emojiTrie.put("👰🏻‍♀", true); - emojiTrie.put("👰🏼‍♀️", true); - emojiTrie.put("👰🏼‍♀", true); - emojiTrie.put("👰🏽‍♀️", true); - emojiTrie.put("👰🏽‍♀", true); - emojiTrie.put("👰🏾‍♀️", true); - emojiTrie.put("👰🏾‍♀", true); - emojiTrie.put("👰🏿‍♀️", true); - emojiTrie.put("👰🏿‍♀", true); - emojiTrie.put("🤰", true); - emojiTrie.put("🤰🏻", true); - emojiTrie.put("🤰🏼", true); - emojiTrie.put("🤰🏽", true); - emojiTrie.put("🤰🏾", true); - emojiTrie.put("🤰🏿", true); - emojiTrie.put("🫃", true); - emojiTrie.put("🫃🏻", true); - emojiTrie.put("🫃🏼", true); - emojiTrie.put("🫃🏽", true); - emojiTrie.put("🫃🏾", true); - emojiTrie.put("🫃🏿", true); - emojiTrie.put("🫄", true); - emojiTrie.put("🫄🏻", true); - emojiTrie.put("🫄🏼", true); - emojiTrie.put("🫄🏽", true); - emojiTrie.put("🫄🏾", true); - emojiTrie.put("🫄🏿", true); - emojiTrie.put("🤱", true); - emojiTrie.put("🤱🏻", true); - emojiTrie.put("🤱🏼", true); - emojiTrie.put("🤱🏽", true); - emojiTrie.put("🤱🏾", true); - emojiTrie.put("🤱🏿", true); - emojiTrie.put("👩‍🍼", true); - emojiTrie.put("👩🏻‍🍼", true); - emojiTrie.put("👩🏼‍🍼", true); - emojiTrie.put("👩🏽‍🍼", true); - emojiTrie.put("👩🏾‍🍼", true); - emojiTrie.put("👩🏿‍🍼", true); - emojiTrie.put("👨‍🍼", true); - emojiTrie.put("👨🏻‍🍼", true); - emojiTrie.put("👨🏼‍🍼", true); - emojiTrie.put("👨🏽‍🍼", true); - emojiTrie.put("👨🏾‍🍼", true); - emojiTrie.put("👨🏿‍🍼", true); - emojiTrie.put("🧑‍🍼", true); - emojiTrie.put("🧑🏻‍🍼", true); - emojiTrie.put("🧑🏼‍🍼", true); - emojiTrie.put("🧑🏽‍🍼", true); - emojiTrie.put("🧑🏾‍🍼", true); - emojiTrie.put("🧑🏿‍🍼", true); - emojiTrie.put("👼", true); - emojiTrie.put("👼🏻", true); - emojiTrie.put("👼🏼", true); - emojiTrie.put("👼🏽", true); - emojiTrie.put("👼🏾", true); - emojiTrie.put("👼🏿", true); - emojiTrie.put("🎅", true); - emojiTrie.put("🎅🏻", true); - emojiTrie.put("🎅🏼", true); - emojiTrie.put("🎅🏽", true); - emojiTrie.put("🎅🏾", true); - emojiTrie.put("🎅🏿", true); - emojiTrie.put("🤶", true); - emojiTrie.put("🤶🏻", true); - emojiTrie.put("🤶🏼", true); - emojiTrie.put("🤶🏽", true); - emojiTrie.put("🤶🏾", true); - emojiTrie.put("🤶🏿", true); - emojiTrie.put("🧑‍🎄", true); - emojiTrie.put("🧑🏻‍🎄", true); - emojiTrie.put("🧑🏼‍🎄", true); - emojiTrie.put("🧑🏽‍🎄", true); - emojiTrie.put("🧑🏾‍🎄", true); - emojiTrie.put("🧑🏿‍🎄", true); - emojiTrie.put("🦸", true); - emojiTrie.put("🦸🏻", true); - emojiTrie.put("🦸🏼", true); - emojiTrie.put("🦸🏽", true); - emojiTrie.put("🦸🏾", true); - emojiTrie.put("🦸🏿", true); - emojiTrie.put("🦸‍♂️", true); - emojiTrie.put("🦸‍♂", true); - emojiTrie.put("🦸🏻‍♂️", true); - emojiTrie.put("🦸🏻‍♂", true); - emojiTrie.put("🦸🏼‍♂️", true); - emojiTrie.put("🦸🏼‍♂", true); - emojiTrie.put("🦸🏽‍♂️", true); - emojiTrie.put("🦸🏽‍♂", true); - emojiTrie.put("🦸🏾‍♂️", true); - emojiTrie.put("🦸🏾‍♂", true); - emojiTrie.put("🦸🏿‍♂️", true); - emojiTrie.put("🦸🏿‍♂", true); - emojiTrie.put("🦸‍♀️", true); - emojiTrie.put("🦸‍♀", true); - emojiTrie.put("🦸🏻‍♀️", true); - emojiTrie.put("🦸🏻‍♀", true); - emojiTrie.put("🦸🏼‍♀️", true); - emojiTrie.put("🦸🏼‍♀", true); - emojiTrie.put("🦸🏽‍♀️", true); - emojiTrie.put("🦸🏽‍♀", true); - emojiTrie.put("🦸🏾‍♀️", true); - emojiTrie.put("🦸🏾‍♀", true); - emojiTrie.put("🦸🏿‍♀️", true); - emojiTrie.put("🦸🏿‍♀", true); - emojiTrie.put("🦹", true); - emojiTrie.put("🦹🏻", true); - emojiTrie.put("🦹🏼", true); - emojiTrie.put("🦹🏽", true); - emojiTrie.put("🦹🏾", true); - emojiTrie.put("🦹🏿", true); - emojiTrie.put("🦹‍♂️", true); - emojiTrie.put("🦹‍♂", true); - emojiTrie.put("🦹🏻‍♂️", true); - emojiTrie.put("🦹🏻‍♂", true); - emojiTrie.put("🦹🏼‍♂️", true); - emojiTrie.put("🦹🏼‍♂", true); - emojiTrie.put("🦹🏽‍♂️", true); - emojiTrie.put("🦹🏽‍♂", true); - emojiTrie.put("🦹🏾‍♂️", true); - emojiTrie.put("🦹🏾‍♂", true); - emojiTrie.put("🦹🏿‍♂️", true); - emojiTrie.put("🦹🏿‍♂", true); - emojiTrie.put("🦹‍♀️", true); - emojiTrie.put("🦹‍♀", true); - emojiTrie.put("🦹🏻‍♀️", true); - emojiTrie.put("🦹🏻‍♀", true); - emojiTrie.put("🦹🏼‍♀️", true); - emojiTrie.put("🦹🏼‍♀", true); - emojiTrie.put("🦹🏽‍♀️", true); - emojiTrie.put("🦹🏽‍♀", true); - emojiTrie.put("🦹🏾‍♀️", true); - emojiTrie.put("🦹🏾‍♀", true); - emojiTrie.put("🦹🏿‍♀️", true); - emojiTrie.put("🦹🏿‍♀", true); - emojiTrie.put("🧙", true); - emojiTrie.put("🧙🏻", true); - emojiTrie.put("🧙🏼", true); - emojiTrie.put("🧙🏽", true); - emojiTrie.put("🧙🏾", true); - emojiTrie.put("🧙🏿", true); - emojiTrie.put("🧙‍♂️", true); - emojiTrie.put("🧙‍♂", true); - emojiTrie.put("🧙🏻‍♂️", true); - emojiTrie.put("🧙🏻‍♂", true); - emojiTrie.put("🧙🏼‍♂️", true); - emojiTrie.put("🧙🏼‍♂", true); - emojiTrie.put("🧙🏽‍♂️", true); - emojiTrie.put("🧙🏽‍♂", true); - emojiTrie.put("🧙🏾‍♂️", true); - emojiTrie.put("🧙🏾‍♂", true); - emojiTrie.put("🧙🏿‍♂️", true); - emojiTrie.put("🧙🏿‍♂", true); - emojiTrie.put("🧙‍♀️", true); - emojiTrie.put("🧙‍♀", true); - emojiTrie.put("🧙🏻‍♀️", true); - emojiTrie.put("🧙🏻‍♀", true); - emojiTrie.put("🧙🏼‍♀️", true); - emojiTrie.put("🧙🏼‍♀", true); - emojiTrie.put("🧙🏽‍♀️", true); - emojiTrie.put("🧙🏽‍♀", true); - emojiTrie.put("🧙🏾‍♀️", true); - emojiTrie.put("🧙🏾‍♀", true); - emojiTrie.put("🧙🏿‍♀️", true); - emojiTrie.put("🧙🏿‍♀", true); - emojiTrie.put("🧚", true); - emojiTrie.put("🧚🏻", true); - emojiTrie.put("🧚🏼", true); - emojiTrie.put("🧚🏽", true); - emojiTrie.put("🧚🏾", true); - emojiTrie.put("🧚🏿", true); - emojiTrie.put("🧚‍♂️", true); - emojiTrie.put("🧚‍♂", true); - emojiTrie.put("🧚🏻‍♂️", true); - emojiTrie.put("🧚🏻‍♂", true); - emojiTrie.put("🧚🏼‍♂️", true); - emojiTrie.put("🧚🏼‍♂", true); - emojiTrie.put("🧚🏽‍♂️", true); - emojiTrie.put("🧚🏽‍♂", true); - emojiTrie.put("🧚🏾‍♂️", true); - emojiTrie.put("🧚🏾‍♂", true); - emojiTrie.put("🧚🏿‍♂️", true); - emojiTrie.put("🧚🏿‍♂", true); - emojiTrie.put("🧚‍♀️", true); - emojiTrie.put("🧚‍♀", true); - emojiTrie.put("🧚🏻‍♀️", true); - emojiTrie.put("🧚🏻‍♀", true); - emojiTrie.put("🧚🏼‍♀️", true); - emojiTrie.put("🧚🏼‍♀", true); - emojiTrie.put("🧚🏽‍♀️", true); - emojiTrie.put("🧚🏽‍♀", true); - emojiTrie.put("🧚🏾‍♀️", true); - emojiTrie.put("🧚🏾‍♀", true); - emojiTrie.put("🧚🏿‍♀️", true); - emojiTrie.put("🧚🏿‍♀", true); - emojiTrie.put("🧛", true); - emojiTrie.put("🧛🏻", true); - emojiTrie.put("🧛🏼", true); - emojiTrie.put("🧛🏽", true); - emojiTrie.put("🧛🏾", true); - emojiTrie.put("🧛🏿", true); - emojiTrie.put("🧛‍♂️", true); - emojiTrie.put("🧛‍♂", true); - emojiTrie.put("🧛🏻‍♂️", true); - emojiTrie.put("🧛🏻‍♂", true); - emojiTrie.put("🧛🏼‍♂️", true); - emojiTrie.put("🧛🏼‍♂", true); - emojiTrie.put("🧛🏽‍♂️", true); - emojiTrie.put("🧛🏽‍♂", true); - emojiTrie.put("🧛🏾‍♂️", true); - emojiTrie.put("🧛🏾‍♂", true); - emojiTrie.put("🧛🏿‍♂️", true); - emojiTrie.put("🧛🏿‍♂", true); - emojiTrie.put("🧛‍♀️", true); - emojiTrie.put("🧛‍♀", true); - emojiTrie.put("🧛🏻‍♀️", true); - emojiTrie.put("🧛🏻‍♀", true); - emojiTrie.put("🧛🏼‍♀️", true); - emojiTrie.put("🧛🏼‍♀", true); - emojiTrie.put("🧛🏽‍♀️", true); - emojiTrie.put("🧛🏽‍♀", true); - emojiTrie.put("🧛🏾‍♀️", true); - emojiTrie.put("🧛🏾‍♀", true); - emojiTrie.put("🧛🏿‍♀️", true); - emojiTrie.put("🧛🏿‍♀", true); - emojiTrie.put("🧜", true); - emojiTrie.put("🧜🏻", true); - emojiTrie.put("🧜🏼", true); - emojiTrie.put("🧜🏽", true); - emojiTrie.put("🧜🏾", true); - emojiTrie.put("🧜🏿", true); - emojiTrie.put("🧜‍♂️", true); - emojiTrie.put("🧜‍♂", true); - emojiTrie.put("🧜🏻‍♂️", true); - emojiTrie.put("🧜🏻‍♂", true); - emojiTrie.put("🧜🏼‍♂️", true); - emojiTrie.put("🧜🏼‍♂", true); - emojiTrie.put("🧜🏽‍♂️", true); - emojiTrie.put("🧜🏽‍♂", true); - emojiTrie.put("🧜🏾‍♂️", true); - emojiTrie.put("🧜🏾‍♂", true); - emojiTrie.put("🧜🏿‍♂️", true); - emojiTrie.put("🧜🏿‍♂", true); - emojiTrie.put("🧜‍♀️", true); - emojiTrie.put("🧜‍♀", true); - emojiTrie.put("🧜🏻‍♀️", true); - emojiTrie.put("🧜🏻‍♀", true); - emojiTrie.put("🧜🏼‍♀️", true); - emojiTrie.put("🧜🏼‍♀", true); - emojiTrie.put("🧜🏽‍♀️", true); - emojiTrie.put("🧜🏽‍♀", true); - emojiTrie.put("🧜🏾‍♀️", true); - emojiTrie.put("🧜🏾‍♀", true); - emojiTrie.put("🧜🏿‍♀️", true); - emojiTrie.put("🧜🏿‍♀", true); - emojiTrie.put("🧝", true); - emojiTrie.put("🧝🏻", true); - emojiTrie.put("🧝🏼", true); - emojiTrie.put("🧝🏽", true); - emojiTrie.put("🧝🏾", true); - emojiTrie.put("🧝🏿", true); - emojiTrie.put("🧝‍♂️", true); - emojiTrie.put("🧝‍♂", true); - emojiTrie.put("🧝🏻‍♂️", true); - emojiTrie.put("🧝🏻‍♂", true); - emojiTrie.put("🧝🏼‍♂️", true); - emojiTrie.put("🧝🏼‍♂", true); - emojiTrie.put("🧝🏽‍♂️", true); - emojiTrie.put("🧝🏽‍♂", true); - emojiTrie.put("🧝🏾‍♂️", true); - emojiTrie.put("🧝🏾‍♂", true); - emojiTrie.put("🧝🏿‍♂️", true); - emojiTrie.put("🧝🏿‍♂", true); - emojiTrie.put("🧝‍♀️", true); - emojiTrie.put("🧝‍♀", true); - emojiTrie.put("🧝🏻‍♀️", true); - emojiTrie.put("🧝🏻‍♀", true); - emojiTrie.put("🧝🏼‍♀️", true); - emojiTrie.put("🧝🏼‍♀", true); - emojiTrie.put("🧝🏽‍♀️", true); - emojiTrie.put("🧝🏽‍♀", true); - emojiTrie.put("🧝🏾‍♀️", true); - emojiTrie.put("🧝🏾‍♀", true); - emojiTrie.put("🧝🏿‍♀️", true); - emojiTrie.put("🧝🏿‍♀", true); - emojiTrie.put("🧞", true); - emojiTrie.put("🧞‍♂️", true); - emojiTrie.put("🧞‍♂", true); - emojiTrie.put("🧞‍♀️", true); - emojiTrie.put("🧞‍♀", true); - emojiTrie.put("🧟", true); - emojiTrie.put("🧟‍♂️", true); - emojiTrie.put("🧟‍♂", true); - emojiTrie.put("🧟‍♀️", true); - emojiTrie.put("🧟‍♀", true); - emojiTrie.put("🧌", true); - emojiTrie.put("💆", true); - emojiTrie.put("💆🏻", true); - emojiTrie.put("💆🏼", true); - emojiTrie.put("💆🏽", true); - emojiTrie.put("💆🏾", true); - emojiTrie.put("💆🏿", true); - emojiTrie.put("💆‍♂️", true); - emojiTrie.put("💆‍♂", true); - emojiTrie.put("💆🏻‍♂️", true); - emojiTrie.put("💆🏻‍♂", true); - emojiTrie.put("💆🏼‍♂️", true); - emojiTrie.put("💆🏼‍♂", true); - emojiTrie.put("💆🏽‍♂️", true); - emojiTrie.put("💆🏽‍♂", true); - emojiTrie.put("💆🏾‍♂️", true); - emojiTrie.put("💆🏾‍♂", true); - emojiTrie.put("💆🏿‍♂️", true); - emojiTrie.put("💆🏿‍♂", true); - emojiTrie.put("💆‍♀️", true); - emojiTrie.put("💆‍♀", true); - emojiTrie.put("💆🏻‍♀️", true); - emojiTrie.put("💆🏻‍♀", true); - emojiTrie.put("💆🏼‍♀️", true); - emojiTrie.put("💆🏼‍♀", true); - emojiTrie.put("💆🏽‍♀️", true); - emojiTrie.put("💆🏽‍♀", true); - emojiTrie.put("💆🏾‍♀️", true); - emojiTrie.put("💆🏾‍♀", true); - emojiTrie.put("💆🏿‍♀️", true); - emojiTrie.put("💆🏿‍♀", true); - emojiTrie.put("💇", true); - emojiTrie.put("💇🏻", true); - emojiTrie.put("💇🏼", true); - emojiTrie.put("💇🏽", true); - emojiTrie.put("💇🏾", true); - emojiTrie.put("💇🏿", true); - emojiTrie.put("💇‍♂️", true); - emojiTrie.put("💇‍♂", true); - emojiTrie.put("💇🏻‍♂️", true); - emojiTrie.put("💇🏻‍♂", true); - emojiTrie.put("💇🏼‍♂️", true); - emojiTrie.put("💇🏼‍♂", true); - emojiTrie.put("💇🏽‍♂️", true); - emojiTrie.put("💇🏽‍♂", true); - emojiTrie.put("💇🏾‍♂️", true); - emojiTrie.put("💇🏾‍♂", true); - emojiTrie.put("💇🏿‍♂️", true); - emojiTrie.put("💇🏿‍♂", true); - emojiTrie.put("💇‍♀️", true); - emojiTrie.put("💇‍♀", true); - emojiTrie.put("💇🏻‍♀️", true); - emojiTrie.put("💇🏻‍♀", true); - emojiTrie.put("💇🏼‍♀️", true); - emojiTrie.put("💇🏼‍♀", true); - emojiTrie.put("💇🏽‍♀️", true); - emojiTrie.put("💇🏽‍♀", true); - emojiTrie.put("💇🏾‍♀️", true); - emojiTrie.put("💇🏾‍♀", true); - emojiTrie.put("💇🏿‍♀️", true); - emojiTrie.put("💇🏿‍♀", true); - emojiTrie.put("🚶", true); - emojiTrie.put("🚶🏻", true); - emojiTrie.put("🚶🏼", true); - emojiTrie.put("🚶🏽", true); - emojiTrie.put("🚶🏾", true); - emojiTrie.put("🚶🏿", true); - emojiTrie.put("🚶‍♂️", true); - emojiTrie.put("🚶‍♂", true); - emojiTrie.put("🚶🏻‍♂️", true); - emojiTrie.put("🚶🏻‍♂", true); - emojiTrie.put("🚶🏼‍♂️", true); - emojiTrie.put("🚶🏼‍♂", true); - emojiTrie.put("🚶🏽‍♂️", true); - emojiTrie.put("🚶🏽‍♂", true); - emojiTrie.put("🚶🏾‍♂️", true); - emojiTrie.put("🚶🏾‍♂", true); - emojiTrie.put("🚶🏿‍♂️", true); - emojiTrie.put("🚶🏿‍♂", true); - emojiTrie.put("🚶‍♀️", true); - emojiTrie.put("🚶‍♀", true); - emojiTrie.put("🚶🏻‍♀️", true); - emojiTrie.put("🚶🏻‍♀", true); - emojiTrie.put("🚶🏼‍♀️", true); - emojiTrie.put("🚶🏼‍♀", true); - emojiTrie.put("🚶🏽‍♀️", true); - emojiTrie.put("🚶🏽‍♀", true); - emojiTrie.put("🚶🏾‍♀️", true); - emojiTrie.put("🚶🏾‍♀", true); - emojiTrie.put("🚶🏿‍♀️", true); - emojiTrie.put("🚶🏿‍♀", true); - emojiTrie.put("🚶‍➡️", true); - emojiTrie.put("🚶‍➡", true); - emojiTrie.put("🚶🏻‍➡️", true); - emojiTrie.put("🚶🏻‍➡", true); - emojiTrie.put("🚶🏼‍➡️", true); - emojiTrie.put("🚶🏼‍➡", true); - emojiTrie.put("🚶🏽‍➡️", true); - emojiTrie.put("🚶🏽‍➡", true); - emojiTrie.put("🚶🏾‍➡️", true); - emojiTrie.put("🚶🏾‍➡", true); - emojiTrie.put("🚶🏿‍➡️", true); - emojiTrie.put("🚶🏿‍➡", true); - emojiTrie.put("🚶‍♀️‍➡️", true); - emojiTrie.put("🚶‍♀‍➡️", true); - emojiTrie.put("🚶‍♀️‍➡", true); - emojiTrie.put("🚶‍♀‍➡", true); - emojiTrie.put("🚶🏻‍♀️‍➡️", true); - emojiTrie.put("🚶🏻‍♀‍➡️", true); - emojiTrie.put("🚶🏻‍♀️‍➡", true); - emojiTrie.put("🚶🏻‍♀‍➡", true); - emojiTrie.put("🚶🏼‍♀️‍➡️", true); - emojiTrie.put("🚶🏼‍♀‍➡️", true); - emojiTrie.put("🚶🏼‍♀️‍➡", true); - emojiTrie.put("🚶🏼‍♀‍➡", true); - emojiTrie.put("🚶🏽‍♀️‍➡️", true); - emojiTrie.put("🚶🏽‍♀‍➡️", true); - emojiTrie.put("🚶🏽‍♀️‍➡", true); - emojiTrie.put("🚶🏽‍♀‍➡", true); - emojiTrie.put("🚶🏾‍♀️‍➡️", true); - emojiTrie.put("🚶🏾‍♀‍➡️", true); - emojiTrie.put("🚶🏾‍♀️‍➡", true); - emojiTrie.put("🚶🏾‍♀‍➡", true); - emojiTrie.put("🚶🏿‍♀️‍➡️", true); - emojiTrie.put("🚶🏿‍♀‍➡️", true); - emojiTrie.put("🚶🏿‍♀️‍➡", true); - emojiTrie.put("🚶🏿‍♀‍➡", true); - emojiTrie.put("🚶‍♂️‍➡️", true); - emojiTrie.put("🚶‍♂‍➡️", true); - emojiTrie.put("🚶‍♂️‍➡", true); - emojiTrie.put("🚶‍♂‍➡", true); - emojiTrie.put("🚶🏻‍♂️‍➡️", true); - emojiTrie.put("🚶🏻‍♂‍➡️", true); - emojiTrie.put("🚶🏻‍♂️‍➡", true); - emojiTrie.put("🚶🏻‍♂‍➡", true); - emojiTrie.put("🚶🏼‍♂️‍➡️", true); - emojiTrie.put("🚶🏼‍♂‍➡️", true); - emojiTrie.put("🚶🏼‍♂️‍➡", true); - emojiTrie.put("🚶🏼‍♂‍➡", true); - emojiTrie.put("🚶🏽‍♂️‍➡️", true); - emojiTrie.put("🚶🏽‍♂‍➡️", true); - emojiTrie.put("🚶🏽‍♂️‍➡", true); - emojiTrie.put("🚶🏽‍♂‍➡", true); - emojiTrie.put("🚶🏾‍♂️‍➡️", true); - emojiTrie.put("🚶🏾‍♂‍➡️", true); - emojiTrie.put("🚶🏾‍♂️‍➡", true); - emojiTrie.put("🚶🏾‍♂‍➡", true); - emojiTrie.put("🚶🏿‍♂️‍➡️", true); - emojiTrie.put("🚶🏿‍♂‍➡️", true); - emojiTrie.put("🚶🏿‍♂️‍➡", true); - emojiTrie.put("🚶🏿‍♂‍➡", true); - emojiTrie.put("🧍", true); - emojiTrie.put("🧍🏻", true); - emojiTrie.put("🧍🏼", true); - emojiTrie.put("🧍🏽", true); - emojiTrie.put("🧍🏾", true); - emojiTrie.put("🧍🏿", true); - emojiTrie.put("🧍‍♂️", true); - emojiTrie.put("🧍‍♂", true); - emojiTrie.put("🧍🏻‍♂️", true); - emojiTrie.put("🧍🏻‍♂", true); - emojiTrie.put("🧍🏼‍♂️", true); - emojiTrie.put("🧍🏼‍♂", true); - emojiTrie.put("🧍🏽‍♂️", true); - emojiTrie.put("🧍🏽‍♂", true); - emojiTrie.put("🧍🏾‍♂️", true); - emojiTrie.put("🧍🏾‍♂", true); - emojiTrie.put("🧍🏿‍♂️", true); - emojiTrie.put("🧍🏿‍♂", true); - emojiTrie.put("🧍‍♀️", true); - emojiTrie.put("🧍‍♀", true); - emojiTrie.put("🧍🏻‍♀️", true); - emojiTrie.put("🧍🏻‍♀", true); - emojiTrie.put("🧍🏼‍♀️", true); - emojiTrie.put("🧍🏼‍♀", true); - emojiTrie.put("🧍🏽‍♀️", true); - emojiTrie.put("🧍🏽‍♀", true); - emojiTrie.put("🧍🏾‍♀️", true); - emojiTrie.put("🧍🏾‍♀", true); - emojiTrie.put("🧍🏿‍♀️", true); - emojiTrie.put("🧍🏿‍♀", true); - emojiTrie.put("🧎", true); - emojiTrie.put("🧎🏻", true); - emojiTrie.put("🧎🏼", true); - emojiTrie.put("🧎🏽", true); - emojiTrie.put("🧎🏾", true); - emojiTrie.put("🧎🏿", true); - emojiTrie.put("🧎‍♂️", true); - emojiTrie.put("🧎‍♂", true); - emojiTrie.put("🧎🏻‍♂️", true); - emojiTrie.put("🧎🏻‍♂", true); - emojiTrie.put("🧎🏼‍♂️", true); - emojiTrie.put("🧎🏼‍♂", true); - emojiTrie.put("🧎🏽‍♂️", true); - emojiTrie.put("🧎🏽‍♂", true); - emojiTrie.put("🧎🏾‍♂️", true); - emojiTrie.put("🧎🏾‍♂", true); - emojiTrie.put("🧎🏿‍♂️", true); - emojiTrie.put("🧎🏿‍♂", true); - emojiTrie.put("🧎‍♀️", true); - emojiTrie.put("🧎‍♀", true); - emojiTrie.put("🧎🏻‍♀️", true); - emojiTrie.put("🧎🏻‍♀", true); - emojiTrie.put("🧎🏼‍♀️", true); - emojiTrie.put("🧎🏼‍♀", true); - emojiTrie.put("🧎🏽‍♀️", true); - emojiTrie.put("🧎🏽‍♀", true); - emojiTrie.put("🧎🏾‍♀️", true); - emojiTrie.put("🧎🏾‍♀", true); - emojiTrie.put("🧎🏿‍♀️", true); - emojiTrie.put("🧎🏿‍♀", true); - emojiTrie.put("🧎‍➡️", true); - emojiTrie.put("🧎‍➡", true); - emojiTrie.put("🧎🏻‍➡️", true); - emojiTrie.put("🧎🏻‍➡", true); - emojiTrie.put("🧎🏼‍➡️", true); - emojiTrie.put("🧎🏼‍➡", true); - emojiTrie.put("🧎🏽‍➡️", true); - emojiTrie.put("🧎🏽‍➡", true); - emojiTrie.put("🧎🏾‍➡️", true); - emojiTrie.put("🧎🏾‍➡", true); - emojiTrie.put("🧎🏿‍➡️", true); - emojiTrie.put("🧎🏿‍➡", true); - emojiTrie.put("🧎‍♀️‍➡️", true); - emojiTrie.put("🧎‍♀‍➡️", true); - emojiTrie.put("🧎‍♀️‍➡", true); - emojiTrie.put("🧎‍♀‍➡", true); - emojiTrie.put("🧎🏻‍♀️‍➡️", true); - emojiTrie.put("🧎🏻‍♀‍➡️", true); - emojiTrie.put("🧎🏻‍♀️‍➡", true); - emojiTrie.put("🧎🏻‍♀‍➡", true); - emojiTrie.put("🧎🏼‍♀️‍➡️", true); - emojiTrie.put("🧎🏼‍♀‍➡️", true); - emojiTrie.put("🧎🏼‍♀️‍➡", true); - emojiTrie.put("🧎🏼‍♀‍➡", true); - emojiTrie.put("🧎🏽‍♀️‍➡️", true); - emojiTrie.put("🧎🏽‍♀‍➡️", true); - emojiTrie.put("🧎🏽‍♀️‍➡", true); - emojiTrie.put("🧎🏽‍♀‍➡", true); - emojiTrie.put("🧎🏾‍♀️‍➡️", true); - emojiTrie.put("🧎🏾‍♀‍➡️", true); - emojiTrie.put("🧎🏾‍♀️‍➡", true); - emojiTrie.put("🧎🏾‍♀‍➡", true); - emojiTrie.put("🧎🏿‍♀️‍➡️", true); - emojiTrie.put("🧎🏿‍♀‍➡️", true); - emojiTrie.put("🧎🏿‍♀️‍➡", true); - emojiTrie.put("🧎🏿‍♀‍➡", true); - emojiTrie.put("🧎‍♂️‍➡️", true); - emojiTrie.put("🧎‍♂‍➡️", true); - emojiTrie.put("🧎‍♂️‍➡", true); - emojiTrie.put("🧎‍♂‍➡", true); - emojiTrie.put("🧎🏻‍♂️‍➡️", true); - emojiTrie.put("🧎🏻‍♂‍➡️", true); - emojiTrie.put("🧎🏻‍♂️‍➡", true); - emojiTrie.put("🧎🏻‍♂‍➡", true); - emojiTrie.put("🧎🏼‍♂️‍➡️", true); - emojiTrie.put("🧎🏼‍♂‍➡️", true); - emojiTrie.put("🧎🏼‍♂️‍➡", true); - emojiTrie.put("🧎🏼‍♂‍➡", true); - emojiTrie.put("🧎🏽‍♂️‍➡️", true); - emojiTrie.put("🧎🏽‍♂‍➡️", true); - emojiTrie.put("🧎🏽‍♂️‍➡", true); - emojiTrie.put("🧎🏽‍♂‍➡", true); - emojiTrie.put("🧎🏾‍♂️‍➡️", true); - emojiTrie.put("🧎🏾‍♂‍➡️", true); - emojiTrie.put("🧎🏾‍♂️‍➡", true); - emojiTrie.put("🧎🏾‍♂‍➡", true); - emojiTrie.put("🧎🏿‍♂️‍➡️", true); - emojiTrie.put("🧎🏿‍♂‍➡️", true); - emojiTrie.put("🧎🏿‍♂️‍➡", true); - emojiTrie.put("🧎🏿‍♂‍➡", true); - emojiTrie.put("🧑‍🦯", true); - emojiTrie.put("🧑🏻‍🦯", true); - emojiTrie.put("🧑🏼‍🦯", true); - emojiTrie.put("🧑🏽‍🦯", true); - emojiTrie.put("🧑🏾‍🦯", true); - emojiTrie.put("🧑🏿‍🦯", true); - emojiTrie.put("🧑‍🦯‍➡️", true); - emojiTrie.put("🧑‍🦯‍➡", true); - emojiTrie.put("🧑🏻‍🦯‍➡️", true); - emojiTrie.put("🧑🏻‍🦯‍➡", true); - emojiTrie.put("🧑🏼‍🦯‍➡️", true); - emojiTrie.put("🧑🏼‍🦯‍➡", true); - emojiTrie.put("🧑🏽‍🦯‍➡️", true); - emojiTrie.put("🧑🏽‍🦯‍➡", true); - emojiTrie.put("🧑🏾‍🦯‍➡️", true); - emojiTrie.put("🧑🏾‍🦯‍➡", true); - emojiTrie.put("🧑🏿‍🦯‍➡️", true); - emojiTrie.put("🧑🏿‍🦯‍➡", true); - emojiTrie.put("👨‍🦯", true); - emojiTrie.put("👨🏻‍🦯", true); - emojiTrie.put("👨🏼‍🦯", true); - emojiTrie.put("👨🏽‍🦯", true); - emojiTrie.put("👨🏾‍🦯", true); - emojiTrie.put("👨🏿‍🦯", true); - emojiTrie.put("👨‍🦯‍➡️", true); - emojiTrie.put("👨‍🦯‍➡", true); - emojiTrie.put("👨🏻‍🦯‍➡️", true); - emojiTrie.put("👨🏻‍🦯‍➡", true); - emojiTrie.put("👨🏼‍🦯‍➡️", true); - emojiTrie.put("👨🏼‍🦯‍➡", true); - emojiTrie.put("👨🏽‍🦯‍➡️", true); - emojiTrie.put("👨🏽‍🦯‍➡", true); - emojiTrie.put("👨🏾‍🦯‍➡️", true); - emojiTrie.put("👨🏾‍🦯‍➡", true); - emojiTrie.put("👨🏿‍🦯‍➡️", true); - emojiTrie.put("👨🏿‍🦯‍➡", true); - emojiTrie.put("👩‍🦯", true); - emojiTrie.put("👩🏻‍🦯", true); - emojiTrie.put("👩🏼‍🦯", true); - emojiTrie.put("👩🏽‍🦯", true); - emojiTrie.put("👩🏾‍🦯", true); - emojiTrie.put("👩🏿‍🦯", true); - emojiTrie.put("👩‍🦯‍➡️", true); - emojiTrie.put("👩‍🦯‍➡", true); - emojiTrie.put("👩🏻‍🦯‍➡️", true); - emojiTrie.put("👩🏻‍🦯‍➡", true); - emojiTrie.put("👩🏼‍🦯‍➡️", true); - emojiTrie.put("👩🏼‍🦯‍➡", true); - emojiTrie.put("👩🏽‍🦯‍➡️", true); - emojiTrie.put("👩🏽‍🦯‍➡", true); - emojiTrie.put("👩🏾‍🦯‍➡️", true); - emojiTrie.put("👩🏾‍🦯‍➡", true); - emojiTrie.put("👩🏿‍🦯‍➡️", true); - emojiTrie.put("👩🏿‍🦯‍➡", true); - emojiTrie.put("🧑‍🦼", true); - emojiTrie.put("🧑🏻‍🦼", true); - emojiTrie.put("🧑🏼‍🦼", true); - emojiTrie.put("🧑🏽‍🦼", true); - emojiTrie.put("🧑🏾‍🦼", true); - emojiTrie.put("🧑🏿‍🦼", true); - emojiTrie.put("🧑‍🦼‍➡️", true); - emojiTrie.put("🧑‍🦼‍➡", true); - emojiTrie.put("🧑🏻‍🦼‍➡️", true); - emojiTrie.put("🧑🏻‍🦼‍➡", true); - emojiTrie.put("🧑🏼‍🦼‍➡️", true); - emojiTrie.put("🧑🏼‍🦼‍➡", true); - emojiTrie.put("🧑🏽‍🦼‍➡️", true); - emojiTrie.put("🧑🏽‍🦼‍➡", true); - emojiTrie.put("🧑🏾‍🦼‍➡️", true); - emojiTrie.put("🧑🏾‍🦼‍➡", true); - emojiTrie.put("🧑🏿‍🦼‍➡️", true); - emojiTrie.put("🧑🏿‍🦼‍➡", true); - emojiTrie.put("👨‍🦼", true); - emojiTrie.put("👨🏻‍🦼", true); - emojiTrie.put("👨🏼‍🦼", true); - emojiTrie.put("👨🏽‍🦼", true); - emojiTrie.put("👨🏾‍🦼", true); - emojiTrie.put("👨🏿‍🦼", true); - emojiTrie.put("👨‍🦼‍➡️", true); - emojiTrie.put("👨‍🦼‍➡", true); - emojiTrie.put("👨🏻‍🦼‍➡️", true); - emojiTrie.put("👨🏻‍🦼‍➡", true); - emojiTrie.put("👨🏼‍🦼‍➡️", true); - emojiTrie.put("👨🏼‍🦼‍➡", true); - emojiTrie.put("👨🏽‍🦼‍➡️", true); - emojiTrie.put("👨🏽‍🦼‍➡", true); - emojiTrie.put("👨🏾‍🦼‍➡️", true); - emojiTrie.put("👨🏾‍🦼‍➡", true); - emojiTrie.put("👨🏿‍🦼‍➡️", true); - emojiTrie.put("👨🏿‍🦼‍➡", true); - emojiTrie.put("👩‍🦼", true); - emojiTrie.put("👩🏻‍🦼", true); - emojiTrie.put("👩🏼‍🦼", true); - emojiTrie.put("👩🏽‍🦼", true); - emojiTrie.put("👩🏾‍🦼", true); - emojiTrie.put("👩🏿‍🦼", true); - emojiTrie.put("👩‍🦼‍➡️", true); - emojiTrie.put("👩‍🦼‍➡", true); - emojiTrie.put("👩🏻‍🦼‍➡️", true); - emojiTrie.put("👩🏻‍🦼‍➡", true); - emojiTrie.put("👩🏼‍🦼‍➡️", true); - emojiTrie.put("👩🏼‍🦼‍➡", true); - emojiTrie.put("👩🏽‍🦼‍➡️", true); - emojiTrie.put("👩🏽‍🦼‍➡", true); - emojiTrie.put("👩🏾‍🦼‍➡️", true); - emojiTrie.put("👩🏾‍🦼‍➡", true); - emojiTrie.put("👩🏿‍🦼‍➡️", true); - emojiTrie.put("👩🏿‍🦼‍➡", true); - emojiTrie.put("🧑‍🦽", true); - emojiTrie.put("🧑🏻‍🦽", true); - emojiTrie.put("🧑🏼‍🦽", true); - emojiTrie.put("🧑🏽‍🦽", true); - emojiTrie.put("🧑🏾‍🦽", true); - emojiTrie.put("🧑🏿‍🦽", true); - emojiTrie.put("🧑‍🦽‍➡️", true); - emojiTrie.put("🧑‍🦽‍➡", true); - emojiTrie.put("🧑🏻‍🦽‍➡️", true); - emojiTrie.put("🧑🏻‍🦽‍➡", true); - emojiTrie.put("🧑🏼‍🦽‍➡️", true); - emojiTrie.put("🧑🏼‍🦽‍➡", true); - emojiTrie.put("🧑🏽‍🦽‍➡️", true); - emojiTrie.put("🧑🏽‍🦽‍➡", true); - emojiTrie.put("🧑🏾‍🦽‍➡️", true); - emojiTrie.put("🧑🏾‍🦽‍➡", true); - emojiTrie.put("🧑🏿‍🦽‍➡️", true); - emojiTrie.put("🧑🏿‍🦽‍➡", true); - emojiTrie.put("👨‍🦽", true); - emojiTrie.put("👨🏻‍🦽", true); - emojiTrie.put("👨🏼‍🦽", true); - emojiTrie.put("👨🏽‍🦽", true); - emojiTrie.put("👨🏾‍🦽", true); - emojiTrie.put("👨🏿‍🦽", true); - emojiTrie.put("👨‍🦽‍➡️", true); - emojiTrie.put("👨‍🦽‍➡", true); - emojiTrie.put("👨🏻‍🦽‍➡️", true); - emojiTrie.put("👨🏻‍🦽‍➡", true); - emojiTrie.put("👨🏼‍🦽‍➡️", true); - emojiTrie.put("👨🏼‍🦽‍➡", true); - emojiTrie.put("👨🏽‍🦽‍➡️", true); - emojiTrie.put("👨🏽‍🦽‍➡", true); - emojiTrie.put("👨🏾‍🦽‍➡️", true); - emojiTrie.put("👨🏾‍🦽‍➡", true); - emojiTrie.put("👨🏿‍🦽‍➡️", true); - emojiTrie.put("👨🏿‍🦽‍➡", true); - emojiTrie.put("👩‍🦽", true); - emojiTrie.put("👩🏻‍🦽", true); - emojiTrie.put("👩🏼‍🦽", true); - emojiTrie.put("👩🏽‍🦽", true); - emojiTrie.put("👩🏾‍🦽", true); - emojiTrie.put("👩🏿‍🦽", true); - emojiTrie.put("👩‍🦽‍➡️", true); - emojiTrie.put("👩‍🦽‍➡", true); - emojiTrie.put("👩🏻‍🦽‍➡️", true); - emojiTrie.put("👩🏻‍🦽‍➡", true); - emojiTrie.put("👩🏼‍🦽‍➡️", true); - emojiTrie.put("👩🏼‍🦽‍➡", true); - emojiTrie.put("👩🏽‍🦽‍➡️", true); - emojiTrie.put("👩🏽‍🦽‍➡", true); - emojiTrie.put("👩🏾‍🦽‍➡️", true); - emojiTrie.put("👩🏾‍🦽‍➡", true); - emojiTrie.put("👩🏿‍🦽‍➡️", true); - emojiTrie.put("👩🏿‍🦽‍➡", true); - emojiTrie.put("🏃", true); - emojiTrie.put("🏃🏻", true); - emojiTrie.put("🏃🏼", true); - emojiTrie.put("🏃🏽", true); - emojiTrie.put("🏃🏾", true); - emojiTrie.put("🏃🏿", true); - emojiTrie.put("🏃‍♂️", true); - emojiTrie.put("🏃‍♂", true); - emojiTrie.put("🏃🏻‍♂️", true); - emojiTrie.put("🏃🏻‍♂", true); - emojiTrie.put("🏃🏼‍♂️", true); - emojiTrie.put("🏃🏼‍♂", true); - emojiTrie.put("🏃🏽‍♂️", true); - emojiTrie.put("🏃🏽‍♂", true); - emojiTrie.put("🏃🏾‍♂️", true); - emojiTrie.put("🏃🏾‍♂", true); - emojiTrie.put("🏃🏿‍♂️", true); - emojiTrie.put("🏃🏿‍♂", true); - emojiTrie.put("🏃‍♀️", true); - emojiTrie.put("🏃‍♀", true); - emojiTrie.put("🏃🏻‍♀️", true); - emojiTrie.put("🏃🏻‍♀", true); - emojiTrie.put("🏃🏼‍♀️", true); - emojiTrie.put("🏃🏼‍♀", true); - emojiTrie.put("🏃🏽‍♀️", true); - emojiTrie.put("🏃🏽‍♀", true); - emojiTrie.put("🏃🏾‍♀️", true); - emojiTrie.put("🏃🏾‍♀", true); - emojiTrie.put("🏃🏿‍♀️", true); - emojiTrie.put("🏃🏿‍♀", true); - emojiTrie.put("🏃‍➡️", true); - emojiTrie.put("🏃‍➡", true); - emojiTrie.put("🏃🏻‍➡️", true); - emojiTrie.put("🏃🏻‍➡", true); - emojiTrie.put("🏃🏼‍➡️", true); - emojiTrie.put("🏃🏼‍➡", true); - emojiTrie.put("🏃🏽‍➡️", true); - emojiTrie.put("🏃🏽‍➡", true); - emojiTrie.put("🏃🏾‍➡️", true); - emojiTrie.put("🏃🏾‍➡", true); - emojiTrie.put("🏃🏿‍➡️", true); - emojiTrie.put("🏃🏿‍➡", true); - emojiTrie.put("🏃‍♀️‍➡️", true); - emojiTrie.put("🏃‍♀‍➡️", true); - emojiTrie.put("🏃‍♀️‍➡", true); - emojiTrie.put("🏃‍♀‍➡", true); - emojiTrie.put("🏃🏻‍♀️‍➡️", true); - emojiTrie.put("🏃🏻‍♀‍➡️", true); - emojiTrie.put("🏃🏻‍♀️‍➡", true); - emojiTrie.put("🏃🏻‍♀‍➡", true); - emojiTrie.put("🏃🏼‍♀️‍➡️", true); - emojiTrie.put("🏃🏼‍♀‍➡️", true); - emojiTrie.put("🏃🏼‍♀️‍➡", true); - emojiTrie.put("🏃🏼‍♀‍➡", true); - emojiTrie.put("🏃🏽‍♀️‍➡️", true); - emojiTrie.put("🏃🏽‍♀‍➡️", true); - emojiTrie.put("🏃🏽‍♀️‍➡", true); - emojiTrie.put("🏃🏽‍♀‍➡", true); - emojiTrie.put("🏃🏾‍♀️‍➡️", true); - emojiTrie.put("🏃🏾‍♀‍➡️", true); - emojiTrie.put("🏃🏾‍♀️‍➡", true); - emojiTrie.put("🏃🏾‍♀‍➡", true); - emojiTrie.put("🏃🏿‍♀️‍➡️", true); - emojiTrie.put("🏃🏿‍♀‍➡️", true); - emojiTrie.put("🏃🏿‍♀️‍➡", true); - emojiTrie.put("🏃🏿‍♀‍➡", true); - emojiTrie.put("🏃‍♂️‍➡️", true); - emojiTrie.put("🏃‍♂‍➡️", true); - emojiTrie.put("🏃‍♂️‍➡", true); - emojiTrie.put("🏃‍♂‍➡", true); - emojiTrie.put("🏃🏻‍♂️‍➡️", true); - emojiTrie.put("🏃🏻‍♂‍➡️", true); - emojiTrie.put("🏃🏻‍♂️‍➡", true); - emojiTrie.put("🏃🏻‍♂‍➡", true); - emojiTrie.put("🏃🏼‍♂️‍➡️", true); - emojiTrie.put("🏃🏼‍♂‍➡️", true); - emojiTrie.put("🏃🏼‍♂️‍➡", true); - emojiTrie.put("🏃🏼‍♂‍➡", true); - emojiTrie.put("🏃🏽‍♂️‍➡️", true); - emojiTrie.put("🏃🏽‍♂‍➡️", true); - emojiTrie.put("🏃🏽‍♂️‍➡", true); - emojiTrie.put("🏃🏽‍♂‍➡", true); - emojiTrie.put("🏃🏾‍♂️‍➡️", true); - emojiTrie.put("🏃🏾‍♂‍➡️", true); - emojiTrie.put("🏃🏾‍♂️‍➡", true); - emojiTrie.put("🏃🏾‍♂‍➡", true); - emojiTrie.put("🏃🏿‍♂️‍➡️", true); - emojiTrie.put("🏃🏿‍♂‍➡️", true); - emojiTrie.put("🏃🏿‍♂️‍➡", true); - emojiTrie.put("🏃🏿‍♂‍➡", true); - emojiTrie.put("💃", true); - emojiTrie.put("💃🏻", true); - emojiTrie.put("💃🏼", true); - emojiTrie.put("💃🏽", true); - emojiTrie.put("💃🏾", true); - emojiTrie.put("💃🏿", true); - emojiTrie.put("🕺", true); - emojiTrie.put("🕺🏻", true); - emojiTrie.put("🕺🏼", true); - emojiTrie.put("🕺🏽", true); - emojiTrie.put("🕺🏾", true); - emojiTrie.put("🕺🏿", true); - emojiTrie.put("🕴️", true); - emojiTrie.put("🕴", true); - emojiTrie.put("🕴🏻", true); - emojiTrie.put("🕴🏼", true); - emojiTrie.put("🕴🏽", true); - emojiTrie.put("🕴🏾", true); - emojiTrie.put("🕴🏿", true); - emojiTrie.put("👯", true); - emojiTrie.put("👯‍♂️", true); - emojiTrie.put("👯‍♂", true); - emojiTrie.put("👯‍♀️", true); - emojiTrie.put("👯‍♀", true); - emojiTrie.put("🧖", true); - emojiTrie.put("🧖🏻", true); - emojiTrie.put("🧖🏼", true); - emojiTrie.put("🧖🏽", true); - emojiTrie.put("🧖🏾", true); - emojiTrie.put("🧖🏿", true); - emojiTrie.put("🧖‍♂️", true); - emojiTrie.put("🧖‍♂", true); - emojiTrie.put("🧖🏻‍♂️", true); - emojiTrie.put("🧖🏻‍♂", true); - emojiTrie.put("🧖🏼‍♂️", true); - emojiTrie.put("🧖🏼‍♂", true); - emojiTrie.put("🧖🏽‍♂️", true); - emojiTrie.put("🧖🏽‍♂", true); - emojiTrie.put("🧖🏾‍♂️", true); - emojiTrie.put("🧖🏾‍♂", true); - emojiTrie.put("🧖🏿‍♂️", true); - emojiTrie.put("🧖🏿‍♂", true); - emojiTrie.put("🧖‍♀️", true); - emojiTrie.put("🧖‍♀", true); - emojiTrie.put("🧖🏻‍♀️", true); - emojiTrie.put("🧖🏻‍♀", true); - emojiTrie.put("🧖🏼‍♀️", true); - emojiTrie.put("🧖🏼‍♀", true); - emojiTrie.put("🧖🏽‍♀️", true); - emojiTrie.put("🧖🏽‍♀", true); - emojiTrie.put("🧖🏾‍♀️", true); - emojiTrie.put("🧖🏾‍♀", true); - emojiTrie.put("🧖🏿‍♀️", true); - emojiTrie.put("🧖🏿‍♀", true); - emojiTrie.put("🧗", true); - emojiTrie.put("🧗🏻", true); - emojiTrie.put("🧗🏼", true); - emojiTrie.put("🧗🏽", true); - emojiTrie.put("🧗🏾", true); - emojiTrie.put("🧗🏿", true); - emojiTrie.put("🧗‍♂️", true); - emojiTrie.put("🧗‍♂", true); - emojiTrie.put("🧗🏻‍♂️", true); - emojiTrie.put("🧗🏻‍♂", true); - emojiTrie.put("🧗🏼‍♂️", true); - emojiTrie.put("🧗🏼‍♂", true); - emojiTrie.put("🧗🏽‍♂️", true); - emojiTrie.put("🧗🏽‍♂", true); - emojiTrie.put("🧗🏾‍♂️", true); - emojiTrie.put("🧗🏾‍♂", true); - emojiTrie.put("🧗🏿‍♂️", true); - emojiTrie.put("🧗🏿‍♂", true); - emojiTrie.put("🧗‍♀️", true); - emojiTrie.put("🧗‍♀", true); - emojiTrie.put("🧗🏻‍♀️", true); - emojiTrie.put("🧗🏻‍♀", true); - emojiTrie.put("🧗🏼‍♀️", true); - emojiTrie.put("🧗🏼‍♀", true); - emojiTrie.put("🧗🏽‍♀️", true); - emojiTrie.put("🧗🏽‍♀", true); - emojiTrie.put("🧗🏾‍♀️", true); - emojiTrie.put("🧗🏾‍♀", true); - emojiTrie.put("🧗🏿‍♀️", true); - emojiTrie.put("🧗🏿‍♀", true); - emojiTrie.put("🤺", true); - emojiTrie.put("🏇", true); - emojiTrie.put("🏇🏻", true); - emojiTrie.put("🏇🏼", true); - emojiTrie.put("🏇🏽", true); - emojiTrie.put("🏇🏾", true); - emojiTrie.put("🏇🏿", true); - emojiTrie.put("⛷️", true); - emojiTrie.put("⛷", true); - emojiTrie.put("🏂", true); - emojiTrie.put("🏂🏻", true); - emojiTrie.put("🏂🏼", true); - emojiTrie.put("🏂🏽", true); - emojiTrie.put("🏂🏾", true); - emojiTrie.put("🏂🏿", true); - emojiTrie.put("🏌️", true); - emojiTrie.put("🏌", true); - emojiTrie.put("🏌🏻", true); - emojiTrie.put("🏌🏼", true); - emojiTrie.put("🏌🏽", true); - emojiTrie.put("🏌🏾", true); - emojiTrie.put("🏌🏿", true); - emojiTrie.put("🏌️‍♂️", true); - emojiTrie.put("🏌‍♂️", true); - emojiTrie.put("🏌️‍♂", true); - emojiTrie.put("🏌‍♂", true); - emojiTrie.put("🏌🏻‍♂️", true); - emojiTrie.put("🏌🏻‍♂", true); - emojiTrie.put("🏌🏼‍♂️", true); - emojiTrie.put("🏌🏼‍♂", true); - emojiTrie.put("🏌🏽‍♂️", true); - emojiTrie.put("🏌🏽‍♂", true); - emojiTrie.put("🏌🏾‍♂️", true); - emojiTrie.put("🏌🏾‍♂", true); - emojiTrie.put("🏌🏿‍♂️", true); - emojiTrie.put("🏌🏿‍♂", true); - emojiTrie.put("🏌️‍♀️", true); - emojiTrie.put("🏌‍♀️", true); - emojiTrie.put("🏌️‍♀", true); - emojiTrie.put("🏌‍♀", true); - emojiTrie.put("🏌🏻‍♀️", true); - emojiTrie.put("🏌🏻‍♀", true); - emojiTrie.put("🏌🏼‍♀️", true); - emojiTrie.put("🏌🏼‍♀", true); - emojiTrie.put("🏌🏽‍♀️", true); - emojiTrie.put("🏌🏽‍♀", true); - emojiTrie.put("🏌🏾‍♀️", true); - emojiTrie.put("🏌🏾‍♀", true); - emojiTrie.put("🏌🏿‍♀️", true); - emojiTrie.put("🏌🏿‍♀", true); - emojiTrie.put("🏄", true); - emojiTrie.put("🏄🏻", true); - emojiTrie.put("🏄🏼", true); - emojiTrie.put("🏄🏽", true); - emojiTrie.put("🏄🏾", true); - emojiTrie.put("🏄🏿", true); - emojiTrie.put("🏄‍♂️", true); - emojiTrie.put("🏄‍♂", true); - emojiTrie.put("🏄🏻‍♂️", true); - emojiTrie.put("🏄🏻‍♂", true); - emojiTrie.put("🏄🏼‍♂️", true); - emojiTrie.put("🏄🏼‍♂", true); - emojiTrie.put("🏄🏽‍♂️", true); - emojiTrie.put("🏄🏽‍♂", true); - emojiTrie.put("🏄🏾‍♂️", true); - emojiTrie.put("🏄🏾‍♂", true); - emojiTrie.put("🏄🏿‍♂️", true); - emojiTrie.put("🏄🏿‍♂", true); - emojiTrie.put("🏄‍♀️", true); - emojiTrie.put("🏄‍♀", true); - emojiTrie.put("🏄🏻‍♀️", true); - emojiTrie.put("🏄🏻‍♀", true); - emojiTrie.put("🏄🏼‍♀️", true); - emojiTrie.put("🏄🏼‍♀", true); - emojiTrie.put("🏄🏽‍♀️", true); - emojiTrie.put("🏄🏽‍♀", true); - emojiTrie.put("🏄🏾‍♀️", true); - emojiTrie.put("🏄🏾‍♀", true); - emojiTrie.put("🏄🏿‍♀️", true); - emojiTrie.put("🏄🏿‍♀", true); - emojiTrie.put("🚣", true); - emojiTrie.put("🚣🏻", true); - emojiTrie.put("🚣🏼", true); - emojiTrie.put("🚣🏽", true); - emojiTrie.put("🚣🏾", true); - emojiTrie.put("🚣🏿", true); - emojiTrie.put("🚣‍♂️", true); - emojiTrie.put("🚣‍♂", true); - emojiTrie.put("🚣🏻‍♂️", true); - emojiTrie.put("🚣🏻‍♂", true); - emojiTrie.put("🚣🏼‍♂️", true); - emojiTrie.put("🚣🏼‍♂", true); - emojiTrie.put("🚣🏽‍♂️", true); - emojiTrie.put("🚣🏽‍♂", true); - emojiTrie.put("🚣🏾‍♂️", true); - emojiTrie.put("🚣🏾‍♂", true); - emojiTrie.put("🚣🏿‍♂️", true); - emojiTrie.put("🚣🏿‍♂", true); - emojiTrie.put("🚣‍♀️", true); - emojiTrie.put("🚣‍♀", true); - emojiTrie.put("🚣🏻‍♀️", true); - emojiTrie.put("🚣🏻‍♀", true); - emojiTrie.put("🚣🏼‍♀️", true); - emojiTrie.put("🚣🏼‍♀", true); - emojiTrie.put("🚣🏽‍♀️", true); - emojiTrie.put("🚣🏽‍♀", true); - emojiTrie.put("🚣🏾‍♀️", true); - emojiTrie.put("🚣🏾‍♀", true); - emojiTrie.put("🚣🏿‍♀️", true); - emojiTrie.put("🚣🏿‍♀", true); - emojiTrie.put("🏊", true); - emojiTrie.put("🏊🏻", true); - emojiTrie.put("🏊🏼", true); - emojiTrie.put("🏊🏽", true); - emojiTrie.put("🏊🏾", true); - emojiTrie.put("🏊🏿", true); - emojiTrie.put("🏊‍♂️", true); - emojiTrie.put("🏊‍♂", true); - emojiTrie.put("🏊🏻‍♂️", true); - emojiTrie.put("🏊🏻‍♂", true); - emojiTrie.put("🏊🏼‍♂️", true); - emojiTrie.put("🏊🏼‍♂", true); - emojiTrie.put("🏊🏽‍♂️", true); - emojiTrie.put("🏊🏽‍♂", true); - emojiTrie.put("🏊🏾‍♂️", true); - emojiTrie.put("🏊🏾‍♂", true); - emojiTrie.put("🏊🏿‍♂️", true); - emojiTrie.put("🏊🏿‍♂", true); - emojiTrie.put("🏊‍♀️", true); - emojiTrie.put("🏊‍♀", true); - emojiTrie.put("🏊🏻‍♀️", true); - emojiTrie.put("🏊🏻‍♀", true); - emojiTrie.put("🏊🏼‍♀️", true); - emojiTrie.put("🏊🏼‍♀", true); - emojiTrie.put("🏊🏽‍♀️", true); - emojiTrie.put("🏊🏽‍♀", true); - emojiTrie.put("🏊🏾‍♀️", true); - emojiTrie.put("🏊🏾‍♀", true); - emojiTrie.put("🏊🏿‍♀️", true); - emojiTrie.put("🏊🏿‍♀", true); - emojiTrie.put("⛹️", true); - emojiTrie.put("⛹", true); - emojiTrie.put("⛹🏻", true); - emojiTrie.put("⛹🏼", true); - emojiTrie.put("⛹🏽", true); - emojiTrie.put("⛹🏾", true); - emojiTrie.put("⛹🏿", true); - emojiTrie.put("⛹️‍♂️", true); - emojiTrie.put("⛹‍♂️", true); - emojiTrie.put("⛹️‍♂", true); - emojiTrie.put("⛹‍♂", true); - emojiTrie.put("⛹🏻‍♂️", true); - emojiTrie.put("⛹🏻‍♂", true); - emojiTrie.put("⛹🏼‍♂️", true); - emojiTrie.put("⛹🏼‍♂", true); - emojiTrie.put("⛹🏽‍♂️", true); - emojiTrie.put("⛹🏽‍♂", true); - emojiTrie.put("⛹🏾‍♂️", true); - emojiTrie.put("⛹🏾‍♂", true); - emojiTrie.put("⛹🏿‍♂️", true); - emojiTrie.put("⛹🏿‍♂", true); - emojiTrie.put("⛹️‍♀️", true); - emojiTrie.put("⛹‍♀️", true); - emojiTrie.put("⛹️‍♀", true); - emojiTrie.put("⛹‍♀", true); - emojiTrie.put("⛹🏻‍♀️", true); - emojiTrie.put("⛹🏻‍♀", true); - emojiTrie.put("⛹🏼‍♀️", true); - emojiTrie.put("⛹🏼‍♀", true); - emojiTrie.put("⛹🏽‍♀️", true); - emojiTrie.put("⛹🏽‍♀", true); - emojiTrie.put("⛹🏾‍♀️", true); - emojiTrie.put("⛹🏾‍♀", true); - emojiTrie.put("⛹🏿‍♀️", true); - emojiTrie.put("⛹🏿‍♀", true); - emojiTrie.put("🏋️", true); - emojiTrie.put("🏋", true); - emojiTrie.put("🏋🏻", true); - emojiTrie.put("🏋🏼", true); - emojiTrie.put("🏋🏽", true); - emojiTrie.put("🏋🏾", true); - emojiTrie.put("🏋🏿", true); - emojiTrie.put("🏋️‍♂️", true); - emojiTrie.put("🏋‍♂️", true); - emojiTrie.put("🏋️‍♂", true); - emojiTrie.put("🏋‍♂", true); - emojiTrie.put("🏋🏻‍♂️", true); - emojiTrie.put("🏋🏻‍♂", true); - emojiTrie.put("🏋🏼‍♂️", true); - emojiTrie.put("🏋🏼‍♂", true); - emojiTrie.put("🏋🏽‍♂️", true); - emojiTrie.put("🏋🏽‍♂", true); - emojiTrie.put("🏋🏾‍♂️", true); - emojiTrie.put("🏋🏾‍♂", true); - emojiTrie.put("🏋🏿‍♂️", true); - emojiTrie.put("🏋🏿‍♂", true); - emojiTrie.put("🏋️‍♀️", true); - emojiTrie.put("🏋‍♀️", true); - emojiTrie.put("🏋️‍♀", true); - emojiTrie.put("🏋‍♀", true); - emojiTrie.put("🏋🏻‍♀️", true); - emojiTrie.put("🏋🏻‍♀", true); - emojiTrie.put("🏋🏼‍♀️", true); - emojiTrie.put("🏋🏼‍♀", true); - emojiTrie.put("🏋🏽‍♀️", true); - emojiTrie.put("🏋🏽‍♀", true); - emojiTrie.put("🏋🏾‍♀️", true); - emojiTrie.put("🏋🏾‍♀", true); - emojiTrie.put("🏋🏿‍♀️", true); - emojiTrie.put("🏋🏿‍♀", true); - emojiTrie.put("🚴", true); - emojiTrie.put("🚴🏻", true); - emojiTrie.put("🚴🏼", true); - emojiTrie.put("🚴🏽", true); - emojiTrie.put("🚴🏾", true); - emojiTrie.put("🚴🏿", true); - emojiTrie.put("🚴‍♂️", true); - emojiTrie.put("🚴‍♂", true); - emojiTrie.put("🚴🏻‍♂️", true); - emojiTrie.put("🚴🏻‍♂", true); - emojiTrie.put("🚴🏼‍♂️", true); - emojiTrie.put("🚴🏼‍♂", true); - emojiTrie.put("🚴🏽‍♂️", true); - emojiTrie.put("🚴🏽‍♂", true); - emojiTrie.put("🚴🏾‍♂️", true); - emojiTrie.put("🚴🏾‍♂", true); - emojiTrie.put("🚴🏿‍♂️", true); - emojiTrie.put("🚴🏿‍♂", true); - emojiTrie.put("🚴‍♀️", true); - emojiTrie.put("🚴‍♀", true); - emojiTrie.put("🚴🏻‍♀️", true); - emojiTrie.put("🚴🏻‍♀", true); - emojiTrie.put("🚴🏼‍♀️", true); - emojiTrie.put("🚴🏼‍♀", true); - emojiTrie.put("🚴🏽‍♀️", true); - emojiTrie.put("🚴🏽‍♀", true); - emojiTrie.put("🚴🏾‍♀️", true); - emojiTrie.put("🚴🏾‍♀", true); - emojiTrie.put("🚴🏿‍♀️", true); - emojiTrie.put("🚴🏿‍♀", true); - emojiTrie.put("🚵", true); - emojiTrie.put("🚵🏻", true); - emojiTrie.put("🚵🏼", true); - emojiTrie.put("🚵🏽", true); - emojiTrie.put("🚵🏾", true); - emojiTrie.put("🚵🏿", true); - emojiTrie.put("🚵‍♂️", true); - emojiTrie.put("🚵‍♂", true); - emojiTrie.put("🚵🏻‍♂️", true); - emojiTrie.put("🚵🏻‍♂", true); - emojiTrie.put("🚵🏼‍♂️", true); - emojiTrie.put("🚵🏼‍♂", true); - emojiTrie.put("🚵🏽‍♂️", true); - emojiTrie.put("🚵🏽‍♂", true); - emojiTrie.put("🚵🏾‍♂️", true); - emojiTrie.put("🚵🏾‍♂", true); - emojiTrie.put("🚵🏿‍♂️", true); - emojiTrie.put("🚵🏿‍♂", true); - emojiTrie.put("🚵‍♀️", true); - emojiTrie.put("🚵‍♀", true); - emojiTrie.put("🚵🏻‍♀️", true); - emojiTrie.put("🚵🏻‍♀", true); - emojiTrie.put("🚵🏼‍♀️", true); - emojiTrie.put("🚵🏼‍♀", true); - emojiTrie.put("🚵🏽‍♀️", true); - emojiTrie.put("🚵🏽‍♀", true); - emojiTrie.put("🚵🏾‍♀️", true); - emojiTrie.put("🚵🏾‍♀", true); - emojiTrie.put("🚵🏿‍♀️", true); - emojiTrie.put("🚵🏿‍♀", true); - emojiTrie.put("🤸", true); - emojiTrie.put("🤸🏻", true); - emojiTrie.put("🤸🏼", true); - emojiTrie.put("🤸🏽", true); - emojiTrie.put("🤸🏾", true); - emojiTrie.put("🤸🏿", true); - emojiTrie.put("🤸‍♂️", true); - emojiTrie.put("🤸‍♂", true); - emojiTrie.put("🤸🏻‍♂️", true); - emojiTrie.put("🤸🏻‍♂", true); - emojiTrie.put("🤸🏼‍♂️", true); - emojiTrie.put("🤸🏼‍♂", true); - emojiTrie.put("🤸🏽‍♂️", true); - emojiTrie.put("🤸🏽‍♂", true); - emojiTrie.put("🤸🏾‍♂️", true); - emojiTrie.put("🤸🏾‍♂", true); - emojiTrie.put("🤸🏿‍♂️", true); - emojiTrie.put("🤸🏿‍♂", true); - emojiTrie.put("🤸‍♀️", true); - emojiTrie.put("🤸‍♀", true); - emojiTrie.put("🤸🏻‍♀️", true); - emojiTrie.put("🤸🏻‍♀", true); - emojiTrie.put("🤸🏼‍♀️", true); - emojiTrie.put("🤸🏼‍♀", true); - emojiTrie.put("🤸🏽‍♀️", true); - emojiTrie.put("🤸🏽‍♀", true); - emojiTrie.put("🤸🏾‍♀️", true); - emojiTrie.put("🤸🏾‍♀", true); - emojiTrie.put("🤸🏿‍♀️", true); - emojiTrie.put("🤸🏿‍♀", true); - emojiTrie.put("🤼", true); - emojiTrie.put("🤼‍♂️", true); - emojiTrie.put("🤼‍♂", true); - emojiTrie.put("🤼‍♀️", true); - emojiTrie.put("🤼‍♀", true); - emojiTrie.put("🤽", true); - emojiTrie.put("🤽🏻", true); - emojiTrie.put("🤽🏼", true); - emojiTrie.put("🤽🏽", true); - emojiTrie.put("🤽🏾", true); - emojiTrie.put("🤽🏿", true); - emojiTrie.put("🤽‍♂️", true); - emojiTrie.put("🤽‍♂", true); - emojiTrie.put("🤽🏻‍♂️", true); - emojiTrie.put("🤽🏻‍♂", true); - emojiTrie.put("🤽🏼‍♂️", true); - emojiTrie.put("🤽🏼‍♂", true); - emojiTrie.put("🤽🏽‍♂️", true); - emojiTrie.put("🤽🏽‍♂", true); - emojiTrie.put("🤽🏾‍♂️", true); - emojiTrie.put("🤽🏾‍♂", true); - emojiTrie.put("🤽🏿‍♂️", true); - emojiTrie.put("🤽🏿‍♂", true); - emojiTrie.put("🤽‍♀️", true); - emojiTrie.put("🤽‍♀", true); - emojiTrie.put("🤽🏻‍♀️", true); - emojiTrie.put("🤽🏻‍♀", true); - emojiTrie.put("🤽🏼‍♀️", true); - emojiTrie.put("🤽🏼‍♀", true); - emojiTrie.put("🤽🏽‍♀️", true); - emojiTrie.put("🤽🏽‍♀", true); - emojiTrie.put("🤽🏾‍♀️", true); - emojiTrie.put("🤽🏾‍♀", true); - emojiTrie.put("🤽🏿‍♀️", true); - emojiTrie.put("🤽🏿‍♀", true); - emojiTrie.put("🤾", true); - emojiTrie.put("🤾🏻", true); - emojiTrie.put("🤾🏼", true); - emojiTrie.put("🤾🏽", true); - emojiTrie.put("🤾🏾", true); - emojiTrie.put("🤾🏿", true); - emojiTrie.put("🤾‍♂️", true); - emojiTrie.put("🤾‍♂", true); - emojiTrie.put("🤾🏻‍♂️", true); - emojiTrie.put("🤾🏻‍♂", true); - emojiTrie.put("🤾🏼‍♂️", true); - emojiTrie.put("🤾🏼‍♂", true); - emojiTrie.put("🤾🏽‍♂️", true); - emojiTrie.put("🤾🏽‍♂", true); - emojiTrie.put("🤾🏾‍♂️", true); - emojiTrie.put("🤾🏾‍♂", true); - emojiTrie.put("🤾🏿‍♂️", true); - emojiTrie.put("🤾🏿‍♂", true); - emojiTrie.put("🤾‍♀️", true); - emojiTrie.put("🤾‍♀", true); - emojiTrie.put("🤾🏻‍♀️", true); - emojiTrie.put("🤾🏻‍♀", true); - emojiTrie.put("🤾🏼‍♀️", true); - emojiTrie.put("🤾🏼‍♀", true); - emojiTrie.put("🤾🏽‍♀️", true); - emojiTrie.put("🤾🏽‍♀", true); - emojiTrie.put("🤾🏾‍♀️", true); - emojiTrie.put("🤾🏾‍♀", true); - emojiTrie.put("🤾🏿‍♀️", true); - emojiTrie.put("🤾🏿‍♀", true); - emojiTrie.put("🤹", true); - emojiTrie.put("🤹🏻", true); - emojiTrie.put("🤹🏼", true); - emojiTrie.put("🤹🏽", true); - emojiTrie.put("🤹🏾", true); - emojiTrie.put("🤹🏿", true); - emojiTrie.put("🤹‍♂️", true); - emojiTrie.put("🤹‍♂", true); - emojiTrie.put("🤹🏻‍♂️", true); - emojiTrie.put("🤹🏻‍♂", true); - emojiTrie.put("🤹🏼‍♂️", true); - emojiTrie.put("🤹🏼‍♂", true); - emojiTrie.put("🤹🏽‍♂️", true); - emojiTrie.put("🤹🏽‍♂", true); - emojiTrie.put("🤹🏾‍♂️", true); - emojiTrie.put("🤹🏾‍♂", true); - emojiTrie.put("🤹🏿‍♂️", true); - emojiTrie.put("🤹🏿‍♂", true); - emojiTrie.put("🤹‍♀️", true); - emojiTrie.put("🤹‍♀", true); - emojiTrie.put("🤹🏻‍♀️", true); - emojiTrie.put("🤹🏻‍♀", true); - emojiTrie.put("🤹🏼‍♀️", true); - emojiTrie.put("🤹🏼‍♀", true); - emojiTrie.put("🤹🏽‍♀️", true); - emojiTrie.put("🤹🏽‍♀", true); - emojiTrie.put("🤹🏾‍♀️", true); - emojiTrie.put("🤹🏾‍♀", true); - emojiTrie.put("🤹🏿‍♀️", true); - emojiTrie.put("🤹🏿‍♀", true); - emojiTrie.put("🧘", true); - emojiTrie.put("🧘🏻", true); - emojiTrie.put("🧘🏼", true); - emojiTrie.put("🧘🏽", true); - emojiTrie.put("🧘🏾", true); - emojiTrie.put("🧘🏿", true); - emojiTrie.put("🧘‍♂️", true); - emojiTrie.put("🧘‍♂", true); - emojiTrie.put("🧘🏻‍♂️", true); - emojiTrie.put("🧘🏻‍♂", true); - emojiTrie.put("🧘🏼‍♂️", true); - emojiTrie.put("🧘🏼‍♂", true); - emojiTrie.put("🧘🏽‍♂️", true); - emojiTrie.put("🧘🏽‍♂", true); - emojiTrie.put("🧘🏾‍♂️", true); - emojiTrie.put("🧘🏾‍♂", true); - emojiTrie.put("🧘🏿‍♂️", true); - emojiTrie.put("🧘🏿‍♂", true); - emojiTrie.put("🧘‍♀️", true); - emojiTrie.put("🧘‍♀", true); - emojiTrie.put("🧘🏻‍♀️", true); - emojiTrie.put("🧘🏻‍♀", true); - emojiTrie.put("🧘🏼‍♀️", true); - emojiTrie.put("🧘🏼‍♀", true); - emojiTrie.put("🧘🏽‍♀️", true); - emojiTrie.put("🧘🏽‍♀", true); - emojiTrie.put("🧘🏾‍♀️", true); - emojiTrie.put("🧘🏾‍♀", true); - emojiTrie.put("🧘🏿‍♀️", true); - emojiTrie.put("🧘🏿‍♀", true); - emojiTrie.put("🛀", true); - emojiTrie.put("🛀🏻", true); - emojiTrie.put("🛀🏼", true); - emojiTrie.put("🛀🏽", true); - emojiTrie.put("🛀🏾", true); - emojiTrie.put("🛀🏿", true); - emojiTrie.put("🛌", true); - emojiTrie.put("🛌🏻", true); - emojiTrie.put("🛌🏼", true); - emojiTrie.put("🛌🏽", true); - emojiTrie.put("🛌🏾", true); - emojiTrie.put("🛌🏿", true); - emojiTrie.put("🧑‍🤝‍🧑", true); - emojiTrie.put("🧑🏻‍🤝‍🧑🏻", true); - emojiTrie.put("🧑🏻‍🤝‍🧑🏼", true); - emojiTrie.put("🧑🏻‍🤝‍🧑🏽", true); - emojiTrie.put("🧑🏻‍🤝‍🧑🏾", true); - emojiTrie.put("🧑🏻‍🤝‍🧑🏿", true); - emojiTrie.put("🧑🏼‍🤝‍🧑🏻", true); - emojiTrie.put("🧑🏼‍🤝‍🧑🏼", true); - emojiTrie.put("🧑🏼‍🤝‍🧑🏽", true); - emojiTrie.put("🧑🏼‍🤝‍🧑🏾", true); - emojiTrie.put("🧑🏼‍🤝‍🧑🏿", true); - emojiTrie.put("🧑🏽‍🤝‍🧑🏻", true); - emojiTrie.put("🧑🏽‍🤝‍🧑🏼", true); - emojiTrie.put("🧑🏽‍🤝‍🧑🏽", true); - emojiTrie.put("🧑🏽‍🤝‍🧑🏾", true); - emojiTrie.put("🧑🏽‍🤝‍🧑🏿", true); - emojiTrie.put("🧑🏾‍🤝‍🧑🏻", true); - emojiTrie.put("🧑🏾‍🤝‍🧑🏼", true); - emojiTrie.put("🧑🏾‍🤝‍🧑🏽", true); - emojiTrie.put("🧑🏾‍🤝‍🧑🏾", true); - emojiTrie.put("🧑🏾‍🤝‍🧑🏿", true); - emojiTrie.put("🧑🏿‍🤝‍🧑🏻", true); - emojiTrie.put("🧑🏿‍🤝‍🧑🏼", true); - emojiTrie.put("🧑🏿‍🤝‍🧑🏽", true); - emojiTrie.put("🧑🏿‍🤝‍🧑🏾", true); - emojiTrie.put("🧑🏿‍🤝‍🧑🏿", true); - emojiTrie.put("👭", true); - emojiTrie.put("👭🏻", true); - emojiTrie.put("👩🏻‍🤝‍👩🏼", true); - emojiTrie.put("👩🏻‍🤝‍👩🏽", true); - emojiTrie.put("👩🏻‍🤝‍👩🏾", true); - emojiTrie.put("👩🏻‍🤝‍👩🏿", true); - emojiTrie.put("👩🏼‍🤝‍👩🏻", true); - emojiTrie.put("👭🏼", true); - emojiTrie.put("👩🏼‍🤝‍👩🏽", true); - emojiTrie.put("👩🏼‍🤝‍👩🏾", true); - emojiTrie.put("👩🏼‍🤝‍👩🏿", true); - emojiTrie.put("👩🏽‍🤝‍👩🏻", true); - emojiTrie.put("👩🏽‍🤝‍👩🏼", true); - emojiTrie.put("👭🏽", true); - emojiTrie.put("👩🏽‍🤝‍👩🏾", true); - emojiTrie.put("👩🏽‍🤝‍👩🏿", true); - emojiTrie.put("👩🏾‍🤝‍👩🏻", true); - emojiTrie.put("👩🏾‍🤝‍👩🏼", true); - emojiTrie.put("👩🏾‍🤝‍👩🏽", true); - emojiTrie.put("👭🏾", true); - emojiTrie.put("👩🏾‍🤝‍👩🏿", true); - emojiTrie.put("👩🏿‍🤝‍👩🏻", true); - emojiTrie.put("👩🏿‍🤝‍👩🏼", true); - emojiTrie.put("👩🏿‍🤝‍👩🏽", true); - emojiTrie.put("👩🏿‍🤝‍👩🏾", true); - emojiTrie.put("👭🏿", true); - emojiTrie.put("👫", true); - emojiTrie.put("👫🏻", true); - emojiTrie.put("👩🏻‍🤝‍👨🏼", true); - emojiTrie.put("👩🏻‍🤝‍👨🏽", true); - emojiTrie.put("👩🏻‍🤝‍👨🏾", true); - emojiTrie.put("👩🏻‍🤝‍👨🏿", true); - emojiTrie.put("👩🏼‍🤝‍👨🏻", true); - emojiTrie.put("👫🏼", true); - emojiTrie.put("👩🏼‍🤝‍👨🏽", true); - emojiTrie.put("👩🏼‍🤝‍👨🏾", true); - emojiTrie.put("👩🏼‍🤝‍👨🏿", true); - emojiTrie.put("👩🏽‍🤝‍👨🏻", true); - emojiTrie.put("👩🏽‍🤝‍👨🏼", true); - emojiTrie.put("👫🏽", true); - emojiTrie.put("👩🏽‍🤝‍👨🏾", true); - emojiTrie.put("👩🏽‍🤝‍👨🏿", true); - emojiTrie.put("👩🏾‍🤝‍👨🏻", true); - emojiTrie.put("👩🏾‍🤝‍👨🏼", true); - emojiTrie.put("👩🏾‍🤝‍👨🏽", true); - emojiTrie.put("👫🏾", true); - emojiTrie.put("👩🏾‍🤝‍👨🏿", true); - emojiTrie.put("👩🏿‍🤝‍👨🏻", true); - emojiTrie.put("👩🏿‍🤝‍👨🏼", true); - emojiTrie.put("👩🏿‍🤝‍👨🏽", true); - emojiTrie.put("👩🏿‍🤝‍👨🏾", true); - emojiTrie.put("👫🏿", true); - emojiTrie.put("👬", true); - emojiTrie.put("👬🏻", true); - emojiTrie.put("👨🏻‍🤝‍👨🏼", true); - emojiTrie.put("👨🏻‍🤝‍👨🏽", true); - emojiTrie.put("👨🏻‍🤝‍👨🏾", true); - emojiTrie.put("👨🏻‍🤝‍👨🏿", true); - emojiTrie.put("👨🏼‍🤝‍👨🏻", true); - emojiTrie.put("👬🏼", true); - emojiTrie.put("👨🏼‍🤝‍👨🏽", true); - emojiTrie.put("👨🏼‍🤝‍👨🏾", true); - emojiTrie.put("👨🏼‍🤝‍👨🏿", true); - emojiTrie.put("👨🏽‍🤝‍👨🏻", true); - emojiTrie.put("👨🏽‍🤝‍👨🏼", true); - emojiTrie.put("👬🏽", true); - emojiTrie.put("👨🏽‍🤝‍👨🏾", true); - emojiTrie.put("👨🏽‍🤝‍👨🏿", true); - emojiTrie.put("👨🏾‍🤝‍👨🏻", true); - emojiTrie.put("👨🏾‍🤝‍👨🏼", true); - emojiTrie.put("👨🏾‍🤝‍👨🏽", true); - emojiTrie.put("👬🏾", true); - emojiTrie.put("👨🏾‍🤝‍👨🏿", true); - emojiTrie.put("👨🏿‍🤝‍👨🏻", true); - emojiTrie.put("👨🏿‍🤝‍👨🏼", true); - emojiTrie.put("👨🏿‍🤝‍👨🏽", true); - emojiTrie.put("👨🏿‍🤝‍👨🏾", true); - emojiTrie.put("👬🏿", true); - emojiTrie.put("💏", true); - emojiTrie.put("💏🏻", true); - emojiTrie.put("💏🏼", true); - emojiTrie.put("💏🏽", true); - emojiTrie.put("💏🏾", true); - emojiTrie.put("💏🏿", true); - emojiTrie.put("🧑🏻‍❤️‍💋‍🧑🏼", true); - emojiTrie.put("🧑🏻‍❤‍💋‍🧑🏼", true); - emojiTrie.put("🧑🏻‍❤️‍💋‍🧑🏽", true); - emojiTrie.put("🧑🏻‍❤‍💋‍🧑🏽", true); - emojiTrie.put("🧑🏻‍❤️‍💋‍🧑🏾", true); - emojiTrie.put("🧑🏻‍❤‍💋‍🧑🏾", true); - emojiTrie.put("🧑🏻‍❤️‍💋‍🧑🏿", true); - emojiTrie.put("🧑🏻‍❤‍💋‍🧑🏿", true); - emojiTrie.put("🧑🏼‍❤️‍💋‍🧑🏻", true); - emojiTrie.put("🧑🏼‍❤‍💋‍🧑🏻", true); - emojiTrie.put("🧑🏼‍❤️‍💋‍🧑🏽", true); - emojiTrie.put("🧑🏼‍❤‍💋‍🧑🏽", true); - emojiTrie.put("🧑🏼‍❤️‍💋‍🧑🏾", true); - emojiTrie.put("🧑🏼‍❤‍💋‍🧑🏾", true); - emojiTrie.put("🧑🏼‍❤️‍💋‍🧑🏿", true); - emojiTrie.put("🧑🏼‍❤‍💋‍🧑🏿", true); - emojiTrie.put("🧑🏽‍❤️‍💋‍🧑🏻", true); - emojiTrie.put("🧑🏽‍❤‍💋‍🧑🏻", true); - emojiTrie.put("🧑🏽‍❤️‍💋‍🧑🏼", true); - emojiTrie.put("🧑🏽‍❤‍💋‍🧑🏼", true); - emojiTrie.put("🧑🏽‍❤️‍💋‍🧑🏾", true); - emojiTrie.put("🧑🏽‍❤‍💋‍🧑🏾", true); - emojiTrie.put("🧑🏽‍❤️‍💋‍🧑🏿", true); - emojiTrie.put("🧑🏽‍❤‍💋‍🧑🏿", true); - emojiTrie.put("🧑🏾‍❤️‍💋‍🧑🏻", true); - emojiTrie.put("🧑🏾‍❤‍💋‍🧑🏻", true); - emojiTrie.put("🧑🏾‍❤️‍💋‍🧑🏼", true); - emojiTrie.put("🧑🏾‍❤‍💋‍🧑🏼", true); - emojiTrie.put("🧑🏾‍❤️‍💋‍🧑🏽", true); - emojiTrie.put("🧑🏾‍❤‍💋‍🧑🏽", true); - emojiTrie.put("🧑🏾‍❤️‍💋‍🧑🏿", true); - emojiTrie.put("🧑🏾‍❤‍💋‍🧑🏿", true); - emojiTrie.put("🧑🏿‍❤️‍💋‍🧑🏻", true); - emojiTrie.put("🧑🏿‍❤‍💋‍🧑🏻", true); - emojiTrie.put("🧑🏿‍❤️‍💋‍🧑🏼", true); - emojiTrie.put("🧑🏿‍❤‍💋‍🧑🏼", true); - emojiTrie.put("🧑🏿‍❤️‍💋‍🧑🏽", true); - emojiTrie.put("🧑🏿‍❤‍💋‍🧑🏽", true); - emojiTrie.put("🧑🏿‍❤️‍💋‍🧑🏾", true); - emojiTrie.put("🧑🏿‍❤‍💋‍🧑🏾", true); - emojiTrie.put("👩‍❤️‍💋‍👨", true); - emojiTrie.put("👩‍❤‍💋‍👨", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👩🏻‍❤‍💋‍👨🏻", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👩🏻‍❤‍💋‍👨🏼", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👩🏻‍❤‍💋‍👨🏽", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👩🏻‍❤‍💋‍👨🏾", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👩🏻‍❤‍💋‍👨🏿", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👩🏼‍❤‍💋‍👨🏻", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👩🏼‍❤‍💋‍👨🏼", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👩🏼‍❤‍💋‍👨🏽", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👩🏼‍❤‍💋‍👨🏾", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👩🏼‍❤‍💋‍👨🏿", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👩🏽‍❤‍💋‍👨🏻", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👩🏽‍❤‍💋‍👨🏼", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👩🏽‍❤‍💋‍👨🏽", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👩🏽‍❤‍💋‍👨🏾", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👩🏽‍❤‍💋‍👨🏿", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👩🏾‍❤‍💋‍👨🏻", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👩🏾‍❤‍💋‍👨🏼", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👩🏾‍❤‍💋‍👨🏽", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👩🏾‍❤‍💋‍👨🏾", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👩🏾‍❤‍💋‍👨🏿", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👩🏿‍❤‍💋‍👨🏻", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👩🏿‍❤‍💋‍👨🏼", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👩🏿‍❤‍💋‍👨🏽", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👩🏿‍❤‍💋‍👨🏾", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👩🏿‍❤‍💋‍👨🏿", true); - emojiTrie.put("👨‍❤️‍💋‍👨", true); - emojiTrie.put("👨‍❤‍💋‍👨", true); - emojiTrie.put("👨🏻‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👨🏻‍❤‍💋‍👨🏻", true); - emojiTrie.put("👨🏻‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👨🏻‍❤‍💋‍👨🏼", true); - emojiTrie.put("👨🏻‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👨🏻‍❤‍💋‍👨🏽", true); - emojiTrie.put("👨🏻‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👨🏻‍❤‍💋‍👨🏾", true); - emojiTrie.put("👨🏻‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👨🏻‍❤‍💋‍👨🏿", true); - emojiTrie.put("👨🏼‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👨🏼‍❤‍💋‍👨🏻", true); - emojiTrie.put("👨🏼‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👨🏼‍❤‍💋‍👨🏼", true); - emojiTrie.put("👨🏼‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👨🏼‍❤‍💋‍👨🏽", true); - emojiTrie.put("👨🏼‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👨🏼‍❤‍💋‍👨🏾", true); - emojiTrie.put("👨🏼‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👨🏼‍❤‍💋‍👨🏿", true); - emojiTrie.put("👨🏽‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👨🏽‍❤‍💋‍👨🏻", true); - emojiTrie.put("👨🏽‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👨🏽‍❤‍💋‍👨🏼", true); - emojiTrie.put("👨🏽‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👨🏽‍❤‍💋‍👨🏽", true); - emojiTrie.put("👨🏽‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👨🏽‍❤‍💋‍👨🏾", true); - emojiTrie.put("👨🏽‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👨🏽‍❤‍💋‍👨🏿", true); - emojiTrie.put("👨🏾‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👨🏾‍❤‍💋‍👨🏻", true); - emojiTrie.put("👨🏾‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👨🏾‍❤‍💋‍👨🏼", true); - emojiTrie.put("👨🏾‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👨🏾‍❤‍💋‍👨🏽", true); - emojiTrie.put("👨🏾‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👨🏾‍❤‍💋‍👨🏾", true); - emojiTrie.put("👨🏾‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👨🏾‍❤‍💋‍👨🏿", true); - emojiTrie.put("👨🏿‍❤️‍💋‍👨🏻", true); - emojiTrie.put("👨🏿‍❤‍💋‍👨🏻", true); - emojiTrie.put("👨🏿‍❤️‍💋‍👨🏼", true); - emojiTrie.put("👨🏿‍❤‍💋‍👨🏼", true); - emojiTrie.put("👨🏿‍❤️‍💋‍👨🏽", true); - emojiTrie.put("👨🏿‍❤‍💋‍👨🏽", true); - emojiTrie.put("👨🏿‍❤️‍💋‍👨🏾", true); - emojiTrie.put("👨🏿‍❤‍💋‍👨🏾", true); - emojiTrie.put("👨🏿‍❤️‍💋‍👨🏿", true); - emojiTrie.put("👨🏿‍❤‍💋‍👨🏿", true); - emojiTrie.put("👩‍❤️‍💋‍👩", true); - emojiTrie.put("👩‍❤‍💋‍👩", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👩🏻", true); - emojiTrie.put("👩🏻‍❤‍💋‍👩🏻", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👩🏼", true); - emojiTrie.put("👩🏻‍❤‍💋‍👩🏼", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👩🏽", true); - emojiTrie.put("👩🏻‍❤‍💋‍👩🏽", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👩🏾", true); - emojiTrie.put("👩🏻‍❤‍💋‍👩🏾", true); - emojiTrie.put("👩🏻‍❤️‍💋‍👩🏿", true); - emojiTrie.put("👩🏻‍❤‍💋‍👩🏿", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👩🏻", true); - emojiTrie.put("👩🏼‍❤‍💋‍👩🏻", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👩🏼", true); - emojiTrie.put("👩🏼‍❤‍💋‍👩🏼", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👩🏽", true); - emojiTrie.put("👩🏼‍❤‍💋‍👩🏽", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👩🏾", true); - emojiTrie.put("👩🏼‍❤‍💋‍👩🏾", true); - emojiTrie.put("👩🏼‍❤️‍💋‍👩🏿", true); - emojiTrie.put("👩🏼‍❤‍💋‍👩🏿", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👩🏻", true); - emojiTrie.put("👩🏽‍❤‍💋‍👩🏻", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👩🏼", true); - emojiTrie.put("👩🏽‍❤‍💋‍👩🏼", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👩🏽", true); - emojiTrie.put("👩🏽‍❤‍💋‍👩🏽", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👩🏾", true); - emojiTrie.put("👩🏽‍❤‍💋‍👩🏾", true); - emojiTrie.put("👩🏽‍❤️‍💋‍👩🏿", true); - emojiTrie.put("👩🏽‍❤‍💋‍👩🏿", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👩🏻", true); - emojiTrie.put("👩🏾‍❤‍💋‍👩🏻", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👩🏼", true); - emojiTrie.put("👩🏾‍❤‍💋‍👩🏼", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👩🏽", true); - emojiTrie.put("👩🏾‍❤‍💋‍👩🏽", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👩🏾", true); - emojiTrie.put("👩🏾‍❤‍💋‍👩🏾", true); - emojiTrie.put("👩🏾‍❤️‍💋‍👩🏿", true); - emojiTrie.put("👩🏾‍❤‍💋‍👩🏿", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👩🏻", true); - emojiTrie.put("👩🏿‍❤‍💋‍👩🏻", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👩🏼", true); - emojiTrie.put("👩🏿‍❤‍💋‍👩🏼", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👩🏽", true); - emojiTrie.put("👩🏿‍❤‍💋‍👩🏽", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👩🏾", true); - emojiTrie.put("👩🏿‍❤‍💋‍👩🏾", true); - emojiTrie.put("👩🏿‍❤️‍💋‍👩🏿", true); - emojiTrie.put("👩🏿‍❤‍💋‍👩🏿", true); - emojiTrie.put("💑", true); - emojiTrie.put("💑🏻", true); - emojiTrie.put("💑🏼", true); - emojiTrie.put("💑🏽", true); - emojiTrie.put("💑🏾", true); - emojiTrie.put("💑🏿", true); - emojiTrie.put("🧑🏻‍❤️‍🧑🏼", true); - emojiTrie.put("🧑🏻‍❤‍🧑🏼", true); - emojiTrie.put("🧑🏻‍❤️‍🧑🏽", true); - emojiTrie.put("🧑🏻‍❤‍🧑🏽", true); - emojiTrie.put("🧑🏻‍❤️‍🧑🏾", true); - emojiTrie.put("🧑🏻‍❤‍🧑🏾", true); - emojiTrie.put("🧑🏻‍❤️‍🧑🏿", true); - emojiTrie.put("🧑🏻‍❤‍🧑🏿", true); - emojiTrie.put("🧑🏼‍❤️‍🧑🏻", true); - emojiTrie.put("🧑🏼‍❤‍🧑🏻", true); - emojiTrie.put("🧑🏼‍❤️‍🧑🏽", true); - emojiTrie.put("🧑🏼‍❤‍🧑🏽", true); - emojiTrie.put("🧑🏼‍❤️‍🧑🏾", true); - emojiTrie.put("🧑🏼‍❤‍🧑🏾", true); - emojiTrie.put("🧑🏼‍❤️‍🧑🏿", true); - emojiTrie.put("🧑🏼‍❤‍🧑🏿", true); - emojiTrie.put("🧑🏽‍❤️‍🧑🏻", true); - emojiTrie.put("🧑🏽‍❤‍🧑🏻", true); - emojiTrie.put("🧑🏽‍❤️‍🧑🏼", true); - emojiTrie.put("🧑🏽‍❤‍🧑🏼", true); - emojiTrie.put("🧑🏽‍❤️‍🧑🏾", true); - emojiTrie.put("🧑🏽‍❤‍🧑🏾", true); - emojiTrie.put("🧑🏽‍❤️‍🧑🏿", true); - emojiTrie.put("🧑🏽‍❤‍🧑🏿", true); - emojiTrie.put("🧑🏾‍❤️‍🧑🏻", true); - emojiTrie.put("🧑🏾‍❤‍🧑🏻", true); - emojiTrie.put("🧑🏾‍❤️‍🧑🏼", true); - emojiTrie.put("🧑🏾‍❤‍🧑🏼", true); - emojiTrie.put("🧑🏾‍❤️‍🧑🏽", true); - emojiTrie.put("🧑🏾‍❤‍🧑🏽", true); - emojiTrie.put("🧑🏾‍❤️‍🧑🏿", true); - emojiTrie.put("🧑🏾‍❤‍🧑🏿", true); - emojiTrie.put("🧑🏿‍❤️‍🧑🏻", true); - emojiTrie.put("🧑🏿‍❤‍🧑🏻", true); - emojiTrie.put("🧑🏿‍❤️‍🧑🏼", true); - emojiTrie.put("🧑🏿‍❤‍🧑🏼", true); - emojiTrie.put("🧑🏿‍❤️‍🧑🏽", true); - emojiTrie.put("🧑🏿‍❤‍🧑🏽", true); - emojiTrie.put("🧑🏿‍❤️‍🧑🏾", true); - emojiTrie.put("🧑🏿‍❤‍🧑🏾", true); - emojiTrie.put("👩‍❤️‍👨", true); - emojiTrie.put("👩‍❤‍👨", true); - emojiTrie.put("👩🏻‍❤️‍👨🏻", true); - emojiTrie.put("👩🏻‍❤‍👨🏻", true); - emojiTrie.put("👩🏻‍❤️‍👨🏼", true); - emojiTrie.put("👩🏻‍❤‍👨🏼", true); - emojiTrie.put("👩🏻‍❤️‍👨🏽", true); - emojiTrie.put("👩🏻‍❤‍👨🏽", true); - emojiTrie.put("👩🏻‍❤️‍👨🏾", true); - emojiTrie.put("👩🏻‍❤‍👨🏾", true); - emojiTrie.put("👩🏻‍❤️‍👨🏿", true); - emojiTrie.put("👩🏻‍❤‍👨🏿", true); - emojiTrie.put("👩🏼‍❤️‍👨🏻", true); - emojiTrie.put("👩🏼‍❤‍👨🏻", true); - emojiTrie.put("👩🏼‍❤️‍👨🏼", true); - emojiTrie.put("👩🏼‍❤‍👨🏼", true); - emojiTrie.put("👩🏼‍❤️‍👨🏽", true); - emojiTrie.put("👩🏼‍❤‍👨🏽", true); - emojiTrie.put("👩🏼‍❤️‍👨🏾", true); - emojiTrie.put("👩🏼‍❤‍👨🏾", true); - emojiTrie.put("👩🏼‍❤️‍👨🏿", true); - emojiTrie.put("👩🏼‍❤‍👨🏿", true); - emojiTrie.put("👩🏽‍❤️‍👨🏻", true); - emojiTrie.put("👩🏽‍❤‍👨🏻", true); - emojiTrie.put("👩🏽‍❤️‍👨🏼", true); - emojiTrie.put("👩🏽‍❤‍👨🏼", true); - emojiTrie.put("👩🏽‍❤️‍👨🏽", true); - emojiTrie.put("👩🏽‍❤‍👨🏽", true); - emojiTrie.put("👩🏽‍❤️‍👨🏾", true); - emojiTrie.put("👩🏽‍❤‍👨🏾", true); - emojiTrie.put("👩🏽‍❤️‍👨🏿", true); - emojiTrie.put("👩🏽‍❤‍👨🏿", true); - emojiTrie.put("👩🏾‍❤️‍👨🏻", true); - emojiTrie.put("👩🏾‍❤‍👨🏻", true); - emojiTrie.put("👩🏾‍❤️‍👨🏼", true); - emojiTrie.put("👩🏾‍❤‍👨🏼", true); - emojiTrie.put("👩🏾‍❤️‍👨🏽", true); - emojiTrie.put("👩🏾‍❤‍👨🏽", true); - emojiTrie.put("👩🏾‍❤️‍👨🏾", true); - emojiTrie.put("👩🏾‍❤‍👨🏾", true); - emojiTrie.put("👩🏾‍❤️‍👨🏿", true); - emojiTrie.put("👩🏾‍❤‍👨🏿", true); - emojiTrie.put("👩🏿‍❤️‍👨🏻", true); - emojiTrie.put("👩🏿‍❤‍👨🏻", true); - emojiTrie.put("👩🏿‍❤️‍👨🏼", true); - emojiTrie.put("👩🏿‍❤‍👨🏼", true); - emojiTrie.put("👩🏿‍❤️‍👨🏽", true); - emojiTrie.put("👩🏿‍❤‍👨🏽", true); - emojiTrie.put("👩🏿‍❤️‍👨🏾", true); - emojiTrie.put("👩🏿‍❤‍👨🏾", true); - emojiTrie.put("👩🏿‍❤️‍👨🏿", true); - emojiTrie.put("👩🏿‍❤‍👨🏿", true); - emojiTrie.put("👨‍❤️‍👨", true); - emojiTrie.put("👨‍❤‍👨", true); - emojiTrie.put("👨🏻‍❤️‍👨🏻", true); - emojiTrie.put("👨🏻‍❤‍👨🏻", true); - emojiTrie.put("👨🏻‍❤️‍👨🏼", true); - emojiTrie.put("👨🏻‍❤‍👨🏼", true); - emojiTrie.put("👨🏻‍❤️‍👨🏽", true); - emojiTrie.put("👨🏻‍❤‍👨🏽", true); - emojiTrie.put("👨🏻‍❤️‍👨🏾", true); - emojiTrie.put("👨🏻‍❤‍👨🏾", true); - emojiTrie.put("👨🏻‍❤️‍👨🏿", true); - emojiTrie.put("👨🏻‍❤‍👨🏿", true); - emojiTrie.put("👨🏼‍❤️‍👨🏻", true); - emojiTrie.put("👨🏼‍❤‍👨🏻", true); - emojiTrie.put("👨🏼‍❤️‍👨🏼", true); - emojiTrie.put("👨🏼‍❤‍👨🏼", true); - emojiTrie.put("👨🏼‍❤️‍👨🏽", true); - emojiTrie.put("👨🏼‍❤‍👨🏽", true); - emojiTrie.put("👨🏼‍❤️‍👨🏾", true); - emojiTrie.put("👨🏼‍❤‍👨🏾", true); - emojiTrie.put("👨🏼‍❤️‍👨🏿", true); - emojiTrie.put("👨🏼‍❤‍👨🏿", true); - emojiTrie.put("👨🏽‍❤️‍👨🏻", true); - emojiTrie.put("👨🏽‍❤‍👨🏻", true); - emojiTrie.put("👨🏽‍❤️‍👨🏼", true); - emojiTrie.put("👨🏽‍❤‍👨🏼", true); - emojiTrie.put("👨🏽‍❤️‍👨🏽", true); - emojiTrie.put("👨🏽‍❤‍👨🏽", true); - emojiTrie.put("👨🏽‍❤️‍👨🏾", true); - emojiTrie.put("👨🏽‍❤‍👨🏾", true); - emojiTrie.put("👨🏽‍❤️‍👨🏿", true); - emojiTrie.put("👨🏽‍❤‍👨🏿", true); - emojiTrie.put("👨🏾‍❤️‍👨🏻", true); - emojiTrie.put("👨🏾‍❤‍👨🏻", true); - emojiTrie.put("👨🏾‍❤️‍👨🏼", true); - emojiTrie.put("👨🏾‍❤‍👨🏼", true); - emojiTrie.put("👨🏾‍❤️‍👨🏽", true); - emojiTrie.put("👨🏾‍❤‍👨🏽", true); - emojiTrie.put("👨🏾‍❤️‍👨🏾", true); - emojiTrie.put("👨🏾‍❤‍👨🏾", true); - emojiTrie.put("👨🏾‍❤️‍👨🏿", true); - emojiTrie.put("👨🏾‍❤‍👨🏿", true); - emojiTrie.put("👨🏿‍❤️‍👨🏻", true); - emojiTrie.put("👨🏿‍❤‍👨🏻", true); - emojiTrie.put("👨🏿‍❤️‍👨🏼", true); - emojiTrie.put("👨🏿‍❤‍👨🏼", true); - emojiTrie.put("👨🏿‍❤️‍👨🏽", true); - emojiTrie.put("👨🏿‍❤‍👨🏽", true); - emojiTrie.put("👨🏿‍❤️‍👨🏾", true); - emojiTrie.put("👨🏿‍❤‍👨🏾", true); - emojiTrie.put("👨🏿‍❤️‍👨🏿", true); - emojiTrie.put("👨🏿‍❤‍👨🏿", true); - emojiTrie.put("👩‍❤️‍👩", true); - emojiTrie.put("👩‍❤‍👩", true); - emojiTrie.put("👩🏻‍❤️‍👩🏻", true); - emojiTrie.put("👩🏻‍❤‍👩🏻", true); - emojiTrie.put("👩🏻‍❤️‍👩🏼", true); - emojiTrie.put("👩🏻‍❤‍👩🏼", true); - emojiTrie.put("👩🏻‍❤️‍👩🏽", true); - emojiTrie.put("👩🏻‍❤‍👩🏽", true); - emojiTrie.put("👩🏻‍❤️‍👩🏾", true); - emojiTrie.put("👩🏻‍❤‍👩🏾", true); - emojiTrie.put("👩🏻‍❤️‍👩🏿", true); - emojiTrie.put("👩🏻‍❤‍👩🏿", true); - emojiTrie.put("👩🏼‍❤️‍👩🏻", true); - emojiTrie.put("👩🏼‍❤‍👩🏻", true); - emojiTrie.put("👩🏼‍❤️‍👩🏼", true); - emojiTrie.put("👩🏼‍❤‍👩🏼", true); - emojiTrie.put("👩🏼‍❤️‍👩🏽", true); - emojiTrie.put("👩🏼‍❤‍👩🏽", true); - emojiTrie.put("👩🏼‍❤️‍👩🏾", true); - emojiTrie.put("👩🏼‍❤‍👩🏾", true); - emojiTrie.put("👩🏼‍❤️‍👩🏿", true); - emojiTrie.put("👩🏼‍❤‍👩🏿", true); - emojiTrie.put("👩🏽‍❤️‍👩🏻", true); - emojiTrie.put("👩🏽‍❤‍👩🏻", true); - emojiTrie.put("👩🏽‍❤️‍👩🏼", true); - emojiTrie.put("👩🏽‍❤‍👩🏼", true); - emojiTrie.put("👩🏽‍❤️‍👩🏽", true); - emojiTrie.put("👩🏽‍❤‍👩🏽", true); - emojiTrie.put("👩🏽‍❤️‍👩🏾", true); - emojiTrie.put("👩🏽‍❤‍👩🏾", true); - emojiTrie.put("👩🏽‍❤️‍👩🏿", true); - emojiTrie.put("👩🏽‍❤‍👩🏿", true); - emojiTrie.put("👩🏾‍❤️‍👩🏻", true); - emojiTrie.put("👩🏾‍❤‍👩🏻", true); - emojiTrie.put("👩🏾‍❤️‍👩🏼", true); - emojiTrie.put("👩🏾‍❤‍👩🏼", true); - emojiTrie.put("👩🏾‍❤️‍👩🏽", true); - emojiTrie.put("👩🏾‍❤‍👩🏽", true); - emojiTrie.put("👩🏾‍❤️‍👩🏾", true); - emojiTrie.put("👩🏾‍❤‍👩🏾", true); - emojiTrie.put("👩🏾‍❤️‍👩🏿", true); - emojiTrie.put("👩🏾‍❤‍👩🏿", true); - emojiTrie.put("👩🏿‍❤️‍👩🏻", true); - emojiTrie.put("👩🏿‍❤‍👩🏻", true); - emojiTrie.put("👩🏿‍❤️‍👩🏼", true); - emojiTrie.put("👩🏿‍❤‍👩🏼", true); - emojiTrie.put("👩🏿‍❤️‍👩🏽", true); - emojiTrie.put("👩🏿‍❤‍👩🏽", true); - emojiTrie.put("👩🏿‍❤️‍👩🏾", true); - emojiTrie.put("👩🏿‍❤‍👩🏾", true); - emojiTrie.put("👩🏿‍❤️‍👩🏿", true); - emojiTrie.put("👩🏿‍❤‍👩🏿", true); - emojiTrie.put("👨‍👩‍👦", true); - emojiTrie.put("👨‍👩‍👧", true); - emojiTrie.put("👨‍👩‍👧‍👦", true); - emojiTrie.put("👨‍👩‍👦‍👦", true); - emojiTrie.put("👨‍👩‍👧‍👧", true); - emojiTrie.put("👨‍👨‍👦", true); - emojiTrie.put("👨‍👨‍👧", true); - emojiTrie.put("👨‍👨‍👧‍👦", true); - emojiTrie.put("👨‍👨‍👦‍👦", true); - emojiTrie.put("👨‍👨‍👧‍👧", true); - emojiTrie.put("👩‍👩‍👦", true); - emojiTrie.put("👩‍👩‍👧", true); - emojiTrie.put("👩‍👩‍👧‍👦", true); - emojiTrie.put("👩‍👩‍👦‍👦", true); - emojiTrie.put("👩‍👩‍👧‍👧", true); - emojiTrie.put("👨‍👦", true); - emojiTrie.put("👨‍👦‍👦", true); - emojiTrie.put("👨‍👧", true); - emojiTrie.put("👨‍👧‍👦", true); - emojiTrie.put("👨‍👧‍👧", true); - emojiTrie.put("👩‍👦", true); - emojiTrie.put("👩‍👦‍👦", true); - emojiTrie.put("👩‍👧", true); - emojiTrie.put("👩‍👧‍👦", true); - emojiTrie.put("👩‍👧‍👧", true); - emojiTrie.put("🗣️", true); - emojiTrie.put("🗣", true); - emojiTrie.put("👤", true); - emojiTrie.put("👥", true); - emojiTrie.put("🫂", true); - emojiTrie.put("👪", true); - emojiTrie.put("🧑‍🧑‍🧒", true); - emojiTrie.put("🧑‍🧑‍🧒‍🧒", true); - emojiTrie.put("🧑‍🧒", true); - emojiTrie.put("🧑‍🧒‍🧒", true); - emojiTrie.put("👣", true); - emojiTrie.put("🏻", true); - emojiTrie.put("🏼", true); - emojiTrie.put("🏽", true); - emojiTrie.put("🏾", true); - emojiTrie.put("🏿", true); - emojiTrie.put("🦰", true); - emojiTrie.put("🦱", true); - emojiTrie.put("🦳", true); - emojiTrie.put("🦲", true); - emojiTrie.put("🐵", true); - emojiTrie.put("🐒", true); - emojiTrie.put("🦍", true); - emojiTrie.put("🦧", true); - emojiTrie.put("🐶", true); - emojiTrie.put("🐕", true); - emojiTrie.put("🦮", true); - emojiTrie.put("🐕‍🦺", true); - emojiTrie.put("🐩", true); - emojiTrie.put("🐺", true); - emojiTrie.put("🦊", true); - emojiTrie.put("🦝", true); - emojiTrie.put("🐱", true); - emojiTrie.put("🐈", true); - emojiTrie.put("🐈‍⬛", true); - emojiTrie.put("🦁", true); - emojiTrie.put("🐯", true); - emojiTrie.put("🐅", true); - emojiTrie.put("🐆", true); - emojiTrie.put("🐴", true); - emojiTrie.put("🫎", true); - emojiTrie.put("🫏", true); - emojiTrie.put("🐎", true); - emojiTrie.put("🦄", true); - emojiTrie.put("🦓", true); - emojiTrie.put("🦌", true); - emojiTrie.put("🦬", true); - emojiTrie.put("🐮", true); - emojiTrie.put("🐂", true); - emojiTrie.put("🐃", true); - emojiTrie.put("🐄", true); - emojiTrie.put("🐷", true); - emojiTrie.put("🐖", true); - emojiTrie.put("🐗", true); - emojiTrie.put("🐽", true); - emojiTrie.put("🐏", true); - emojiTrie.put("🐑", true); - emojiTrie.put("🐐", true); - emojiTrie.put("🐪", true); - emojiTrie.put("🐫", true); - emojiTrie.put("🦙", true); - emojiTrie.put("🦒", true); - emojiTrie.put("🐘", true); - emojiTrie.put("🦣", true); - emojiTrie.put("🦏", true); - emojiTrie.put("🦛", true); - emojiTrie.put("🐭", true); - emojiTrie.put("🐁", true); - emojiTrie.put("🐀", true); - emojiTrie.put("🐹", true); - emojiTrie.put("🐰", true); - emojiTrie.put("🐇", true); - emojiTrie.put("🐿️", true); - emojiTrie.put("🐿", true); - emojiTrie.put("🦫", true); - emojiTrie.put("🦔", true); - emojiTrie.put("🦇", true); - emojiTrie.put("🐻", true); - emojiTrie.put("🐻‍❄️", true); - emojiTrie.put("🐻‍❄", true); - emojiTrie.put("🐨", true); - emojiTrie.put("🐼", true); - emojiTrie.put("🦥", true); - emojiTrie.put("🦦", true); - emojiTrie.put("🦨", true); - emojiTrie.put("🦘", true); - emojiTrie.put("🦡", true); - emojiTrie.put("🐾", true); - emojiTrie.put("🦃", true); - emojiTrie.put("🐔", true); - emojiTrie.put("🐓", true); - emojiTrie.put("🐣", true); - emojiTrie.put("🐤", true); - emojiTrie.put("🐥", true); - emojiTrie.put("🐦", true); - emojiTrie.put("🐧", true); - emojiTrie.put("🕊️", true); - emojiTrie.put("🕊", true); - emojiTrie.put("🦅", true); - emojiTrie.put("🦆", true); - emojiTrie.put("🦢", true); - emojiTrie.put("🦉", true); - emojiTrie.put("🦤", true); - emojiTrie.put("🪶", true); - emojiTrie.put("🦩", true); - emojiTrie.put("🦚", true); - emojiTrie.put("🦜", true); - emojiTrie.put("🪽", true); - emojiTrie.put("🐦‍⬛", true); - emojiTrie.put("🪿", true); - emojiTrie.put("🐦‍🔥", true); - emojiTrie.put("🐸", true); - emojiTrie.put("🐊", true); - emojiTrie.put("🐢", true); - emojiTrie.put("🦎", true); - emojiTrie.put("🐍", true); - emojiTrie.put("🐲", true); - emojiTrie.put("🐉", true); - emojiTrie.put("🦕", true); - emojiTrie.put("🦖", true); - emojiTrie.put("🐳", true); - emojiTrie.put("🐋", true); - emojiTrie.put("🐬", true); - emojiTrie.put("🦭", true); - emojiTrie.put("🐟", true); - emojiTrie.put("🐠", true); - emojiTrie.put("🐡", true); - emojiTrie.put("🦈", true); - emojiTrie.put("🐙", true); - emojiTrie.put("🐚", true); - emojiTrie.put("🪸", true); - emojiTrie.put("🪼", true); - emojiTrie.put("🐌", true); - emojiTrie.put("🦋", true); - emojiTrie.put("🐛", true); - emojiTrie.put("🐜", true); - emojiTrie.put("🐝", true); - emojiTrie.put("🪲", true); - emojiTrie.put("🐞", true); - emojiTrie.put("🦗", true); - emojiTrie.put("🪳", true); - emojiTrie.put("🕷️", true); - emojiTrie.put("🕷", true); - emojiTrie.put("🕸️", true); - emojiTrie.put("🕸", true); - emojiTrie.put("🦂", true); - emojiTrie.put("🦟", true); - emojiTrie.put("🪰", true); - emojiTrie.put("🪱", true); - emojiTrie.put("🦠", true); - emojiTrie.put("💐", true); - emojiTrie.put("🌸", true); - emojiTrie.put("💮", true); - emojiTrie.put("🪷", true); - emojiTrie.put("🏵️", true); - emojiTrie.put("🏵", true); - emojiTrie.put("🌹", true); - emojiTrie.put("🥀", true); - emojiTrie.put("🌺", true); - emojiTrie.put("🌻", true); - emojiTrie.put("🌼", true); - emojiTrie.put("🌷", true); - emojiTrie.put("🪻", true); - emojiTrie.put("🌱", true); - emojiTrie.put("🪴", true); - emojiTrie.put("🌲", true); - emojiTrie.put("🌳", true); - emojiTrie.put("🌴", true); - emojiTrie.put("🌵", true); - emojiTrie.put("🌾", true); - emojiTrie.put("🌿", true); - emojiTrie.put("☘️", true); - emojiTrie.put("☘", true); - emojiTrie.put("🍀", true); - emojiTrie.put("🍁", true); - emojiTrie.put("🍂", true); - emojiTrie.put("🍃", true); - emojiTrie.put("🪹", true); - emojiTrie.put("🪺", true); - emojiTrie.put("🍄", true); - emojiTrie.put("🍇", true); - emojiTrie.put("🍈", true); - emojiTrie.put("🍉", true); - emojiTrie.put("🍊", true); - emojiTrie.put("🍋", true); - emojiTrie.put("🍋‍🟩", true); - emojiTrie.put("🍌", true); - emojiTrie.put("🍍", true); - emojiTrie.put("🥭", true); - emojiTrie.put("🍎", true); - emojiTrie.put("🍏", true); - emojiTrie.put("🍐", true); - emojiTrie.put("🍑", true); - emojiTrie.put("🍒", true); - emojiTrie.put("🍓", true); - emojiTrie.put("🫐", true); - emojiTrie.put("🥝", true); - emojiTrie.put("🍅", true); - emojiTrie.put("🫒", true); - emojiTrie.put("🥥", true); - emojiTrie.put("🥑", true); - emojiTrie.put("🍆", true); - emojiTrie.put("🥔", true); - emojiTrie.put("🥕", true); - emojiTrie.put("🌽", true); - emojiTrie.put("🌶️", true); - emojiTrie.put("🌶", true); - emojiTrie.put("🫑", true); - emojiTrie.put("🥒", true); - emojiTrie.put("🥬", true); - emojiTrie.put("🥦", true); - emojiTrie.put("🧄", true); - emojiTrie.put("🧅", true); - emojiTrie.put("🥜", true); - emojiTrie.put("🫘", true); - emojiTrie.put("🌰", true); - emojiTrie.put("🫚", true); - emojiTrie.put("🫛", true); - emojiTrie.put("🍄‍🟫", true); - emojiTrie.put("🍞", true); - emojiTrie.put("🥐", true); - emojiTrie.put("🥖", true); - emojiTrie.put("🫓", true); - emojiTrie.put("🥨", true); - emojiTrie.put("🥯", true); - emojiTrie.put("🥞", true); - emojiTrie.put("🧇", true); - emojiTrie.put("🧀", true); - emojiTrie.put("🍖", true); - emojiTrie.put("🍗", true); - emojiTrie.put("🥩", true); - emojiTrie.put("🥓", true); - emojiTrie.put("🍔", true); - emojiTrie.put("🍟", true); - emojiTrie.put("🍕", true); - emojiTrie.put("🌭", true); - emojiTrie.put("🥪", true); - emojiTrie.put("🌮", true); - emojiTrie.put("🌯", true); - emojiTrie.put("🫔", true); - emojiTrie.put("🥙", true); - emojiTrie.put("🧆", true); - emojiTrie.put("🥚", true); - emojiTrie.put("🍳", true); - emojiTrie.put("🥘", true); - emojiTrie.put("🍲", true); - emojiTrie.put("🫕", true); - emojiTrie.put("🥣", true); - emojiTrie.put("🥗", true); - emojiTrie.put("🍿", true); - emojiTrie.put("🧈", true); - emojiTrie.put("🧂", true); - emojiTrie.put("🥫", true); - emojiTrie.put("🍱", true); - emojiTrie.put("🍘", true); - emojiTrie.put("🍙", true); - emojiTrie.put("🍚", true); - emojiTrie.put("🍛", true); - emojiTrie.put("🍜", true); - emojiTrie.put("🍝", true); - emojiTrie.put("🍠", true); - emojiTrie.put("🍢", true); - emojiTrie.put("🍣", true); - emojiTrie.put("🍤", true); - emojiTrie.put("🍥", true); - emojiTrie.put("🥮", true); - emojiTrie.put("🍡", true); - emojiTrie.put("🥟", true); - emojiTrie.put("🥠", true); - emojiTrie.put("🥡", true); - emojiTrie.put("🦀", true); - emojiTrie.put("🦞", true); - emojiTrie.put("🦐", true); - emojiTrie.put("🦑", true); - emojiTrie.put("🦪", true); - emojiTrie.put("🍦", true); - emojiTrie.put("🍧", true); - emojiTrie.put("🍨", true); - emojiTrie.put("🍩", true); - emojiTrie.put("🍪", true); - emojiTrie.put("🎂", true); - emojiTrie.put("🍰", true); - emojiTrie.put("🧁", true); - emojiTrie.put("🥧", true); - emojiTrie.put("🍫", true); - emojiTrie.put("🍬", true); - emojiTrie.put("🍭", true); - emojiTrie.put("🍮", true); - emojiTrie.put("🍯", true); - emojiTrie.put("🍼", true); - emojiTrie.put("🥛", true); - emojiTrie.put("☕", true); - emojiTrie.put("🫖", true); - emojiTrie.put("🍵", true); - emojiTrie.put("🍶", true); - emojiTrie.put("🍾", true); - emojiTrie.put("🍷", true); - emojiTrie.put("🍸", true); - emojiTrie.put("🍹", true); - emojiTrie.put("🍺", true); - emojiTrie.put("🍻", true); - emojiTrie.put("🥂", true); - emojiTrie.put("🥃", true); - emojiTrie.put("🫗", true); - emojiTrie.put("🥤", true); - emojiTrie.put("🧋", true); - emojiTrie.put("🧃", true); - emojiTrie.put("🧉", true); - emojiTrie.put("🧊", true); - emojiTrie.put("🥢", true); - emojiTrie.put("🍽️", true); - emojiTrie.put("🍽", true); - emojiTrie.put("🍴", true); - emojiTrie.put("🥄", true); - emojiTrie.put("🔪", true); - emojiTrie.put("🫙", true); - emojiTrie.put("🏺", true); - emojiTrie.put("🌍", true); - emojiTrie.put("🌎", true); - emojiTrie.put("🌏", true); - emojiTrie.put("🌐", true); - emojiTrie.put("🗺️", true); - emojiTrie.put("🗺", true); - emojiTrie.put("🗾", true); - emojiTrie.put("🧭", true); - emojiTrie.put("🏔️", true); - emojiTrie.put("🏔", true); - emojiTrie.put("⛰️", true); - emojiTrie.put("⛰", true); - emojiTrie.put("🌋", true); - emojiTrie.put("🗻", true); - emojiTrie.put("🏕️", true); - emojiTrie.put("🏕", true); - emojiTrie.put("🏖️", true); - emojiTrie.put("🏖", true); - emojiTrie.put("🏜️", true); - emojiTrie.put("🏜", true); - emojiTrie.put("🏝️", true); - emojiTrie.put("🏝", true); - emojiTrie.put("🏞️", true); - emojiTrie.put("🏞", true); - emojiTrie.put("🏟️", true); - emojiTrie.put("🏟", true); - emojiTrie.put("🏛️", true); - emojiTrie.put("🏛", true); - emojiTrie.put("🏗️", true); - emojiTrie.put("🏗", true); - emojiTrie.put("🧱", true); - emojiTrie.put("🪨", true); - emojiTrie.put("🪵", true); - emojiTrie.put("🛖", true); - emojiTrie.put("🏘️", true); - emojiTrie.put("🏘", true); - emojiTrie.put("🏚️", true); - emojiTrie.put("🏚", true); - emojiTrie.put("🏠", true); - emojiTrie.put("🏡", true); - emojiTrie.put("🏢", true); - emojiTrie.put("🏣", true); - emojiTrie.put("🏤", true); - emojiTrie.put("🏥", true); - emojiTrie.put("🏦", true); - emojiTrie.put("🏨", true); - emojiTrie.put("🏩", true); - emojiTrie.put("🏪", true); - emojiTrie.put("🏫", true); - emojiTrie.put("🏬", true); - emojiTrie.put("🏭", true); - emojiTrie.put("🏯", true); - emojiTrie.put("🏰", true); - emojiTrie.put("💒", true); - emojiTrie.put("🗼", true); - emojiTrie.put("🗽", true); - emojiTrie.put("⛪", true); - emojiTrie.put("🕌", true); - emojiTrie.put("🛕", true); - emojiTrie.put("🕍", true); - emojiTrie.put("⛩️", true); - emojiTrie.put("⛩", true); - emojiTrie.put("🕋", true); - emojiTrie.put("⛲", true); - emojiTrie.put("⛺", true); - emojiTrie.put("🌁", true); - emojiTrie.put("🌃", true); - emojiTrie.put("🏙️", true); - emojiTrie.put("🏙", true); - emojiTrie.put("🌄", true); - emojiTrie.put("🌅", true); - emojiTrie.put("🌆", true); - emojiTrie.put("🌇", true); - emojiTrie.put("🌉", true); - emojiTrie.put("♨️", true); - emojiTrie.put("♨", true); - emojiTrie.put("🎠", true); - emojiTrie.put("🛝", true); - emojiTrie.put("🎡", true); - emojiTrie.put("🎢", true); - emojiTrie.put("💈", true); - emojiTrie.put("🎪", true); - emojiTrie.put("🚂", true); - emojiTrie.put("🚃", true); - emojiTrie.put("🚄", true); - emojiTrie.put("🚅", true); - emojiTrie.put("🚆", true); - emojiTrie.put("🚇", true); - emojiTrie.put("🚈", true); - emojiTrie.put("🚉", true); - emojiTrie.put("🚊", true); - emojiTrie.put("🚝", true); - emojiTrie.put("🚞", true); - emojiTrie.put("🚋", true); - emojiTrie.put("🚌", true); - emojiTrie.put("🚍", true); - emojiTrie.put("🚎", true); - emojiTrie.put("🚐", true); - emojiTrie.put("🚑", true); - emojiTrie.put("🚒", true); - emojiTrie.put("🚓", true); - emojiTrie.put("🚔", true); - emojiTrie.put("🚕", true); - emojiTrie.put("🚖", true); - emojiTrie.put("🚗", true); - emojiTrie.put("🚘", true); - emojiTrie.put("🚙", true); - emojiTrie.put("🛻", true); - emojiTrie.put("🚚", true); - emojiTrie.put("🚛", true); - emojiTrie.put("🚜", true); - emojiTrie.put("🏎️", true); - emojiTrie.put("🏎", true); - emojiTrie.put("🏍️", true); - emojiTrie.put("🏍", true); - emojiTrie.put("🛵", true); - emojiTrie.put("🦽", true); - emojiTrie.put("🦼", true); - emojiTrie.put("🛺", true); - emojiTrie.put("🚲", true); - emojiTrie.put("🛴", true); - emojiTrie.put("🛹", true); - emojiTrie.put("🛼", true); - emojiTrie.put("🚏", true); - emojiTrie.put("🛣️", true); - emojiTrie.put("🛣", true); - emojiTrie.put("🛤️", true); - emojiTrie.put("🛤", true); - emojiTrie.put("🛢️", true); - emojiTrie.put("🛢", true); - emojiTrie.put("⛽", true); - emojiTrie.put("🛞", true); - emojiTrie.put("🚨", true); - emojiTrie.put("🚥", true); - emojiTrie.put("🚦", true); - emojiTrie.put("🛑", true); - emojiTrie.put("🚧", true); - emojiTrie.put("⚓", true); - emojiTrie.put("🛟", true); - emojiTrie.put("⛵", true); - emojiTrie.put("🛶", true); - emojiTrie.put("🚤", true); - emojiTrie.put("🛳️", true); - emojiTrie.put("🛳", true); - emojiTrie.put("⛴️", true); - emojiTrie.put("⛴", true); - emojiTrie.put("🛥️", true); - emojiTrie.put("🛥", true); - emojiTrie.put("🚢", true); - emojiTrie.put("✈️", true); - emojiTrie.put("✈", true); - emojiTrie.put("🛩️", true); - emojiTrie.put("🛩", true); - emojiTrie.put("🛫", true); - emojiTrie.put("🛬", true); - emojiTrie.put("🪂", true); - emojiTrie.put("💺", true); - emojiTrie.put("🚁", true); - emojiTrie.put("🚟", true); - emojiTrie.put("🚠", true); - emojiTrie.put("🚡", true); - emojiTrie.put("🛰️", true); - emojiTrie.put("🛰", true); - emojiTrie.put("🚀", true); - emojiTrie.put("🛸", true); - emojiTrie.put("🛎️", true); - emojiTrie.put("🛎", true); - emojiTrie.put("🧳", true); - emojiTrie.put("⌛", true); - emojiTrie.put("⏳", true); - emojiTrie.put("⌚", true); - emojiTrie.put("⏰", true); - emojiTrie.put("⏱️", true); - emojiTrie.put("⏱", true); - emojiTrie.put("⏲️", true); - emojiTrie.put("⏲", true); - emojiTrie.put("🕰️", true); - emojiTrie.put("🕰", true); - emojiTrie.put("🕛", true); - emojiTrie.put("🕧", true); - emojiTrie.put("🕐", true); - emojiTrie.put("🕜", true); - emojiTrie.put("🕑", true); - emojiTrie.put("🕝", true); - emojiTrie.put("🕒", true); - emojiTrie.put("🕞", true); - emojiTrie.put("🕓", true); - emojiTrie.put("🕟", true); - emojiTrie.put("🕔", true); - emojiTrie.put("🕠", true); - emojiTrie.put("🕕", true); - emojiTrie.put("🕡", true); - emojiTrie.put("🕖", true); - emojiTrie.put("🕢", true); - emojiTrie.put("🕗", true); - emojiTrie.put("🕣", true); - emojiTrie.put("🕘", true); - emojiTrie.put("🕤", true); - emojiTrie.put("🕙", true); - emojiTrie.put("🕥", true); - emojiTrie.put("🕚", true); - emojiTrie.put("🕦", true); - emojiTrie.put("🌑", true); - emojiTrie.put("🌒", true); - emojiTrie.put("🌓", true); - emojiTrie.put("🌔", true); - emojiTrie.put("🌕", true); - emojiTrie.put("🌖", true); - emojiTrie.put("🌗", true); - emojiTrie.put("🌘", true); - emojiTrie.put("🌙", true); - emojiTrie.put("🌚", true); - emojiTrie.put("🌛", true); - emojiTrie.put("🌜", true); - emojiTrie.put("🌡️", true); - emojiTrie.put("🌡", true); - emojiTrie.put("☀️", true); - emojiTrie.put("☀", true); - emojiTrie.put("🌝", true); - emojiTrie.put("🌞", true); - emojiTrie.put("🪐", true); - emojiTrie.put("⭐", true); - emojiTrie.put("🌟", true); - emojiTrie.put("🌠", true); - emojiTrie.put("🌌", true); - emojiTrie.put("☁️", true); - emojiTrie.put("☁", true); - emojiTrie.put("⛅", true); - emojiTrie.put("⛈️", true); - emojiTrie.put("⛈", true); - emojiTrie.put("🌤️", true); - emojiTrie.put("🌤", true); - emojiTrie.put("🌥️", true); - emojiTrie.put("🌥", true); - emojiTrie.put("🌦️", true); - emojiTrie.put("🌦", true); - emojiTrie.put("🌧️", true); - emojiTrie.put("🌧", true); - emojiTrie.put("🌨️", true); - emojiTrie.put("🌨", true); - emojiTrie.put("🌩️", true); - emojiTrie.put("🌩", true); - emojiTrie.put("🌪️", true); - emojiTrie.put("🌪", true); - emojiTrie.put("🌫️", true); - emojiTrie.put("🌫", true); - emojiTrie.put("🌬️", true); - emojiTrie.put("🌬", true); - emojiTrie.put("🌀", true); - emojiTrie.put("🌈", true); - emojiTrie.put("🌂", true); - emojiTrie.put("☂️", true); - emojiTrie.put("☂", true); - emojiTrie.put("☔", true); - emojiTrie.put("⛱️", true); - emojiTrie.put("⛱", true); - emojiTrie.put("⚡", true); - emojiTrie.put("❄️", true); - emojiTrie.put("❄", true); - emojiTrie.put("☃️", true); - emojiTrie.put("☃", true); - emojiTrie.put("⛄", true); - emojiTrie.put("☄️", true); - emojiTrie.put("☄", true); - emojiTrie.put("🔥", true); - emojiTrie.put("💧", true); - emojiTrie.put("🌊", true); - emojiTrie.put("🎃", true); - emojiTrie.put("🎄", true); - emojiTrie.put("🎆", true); - emojiTrie.put("🎇", true); - emojiTrie.put("🧨", true); - emojiTrie.put("✨", true); - emojiTrie.put("🎈", true); - emojiTrie.put("🎉", true); - emojiTrie.put("🎊", true); - emojiTrie.put("🎋", true); - emojiTrie.put("🎍", true); - emojiTrie.put("🎎", true); - emojiTrie.put("🎏", true); - emojiTrie.put("🎐", true); - emojiTrie.put("🎑", true); - emojiTrie.put("🧧", true); - emojiTrie.put("🎀", true); - emojiTrie.put("🎁", true); - emojiTrie.put("🎗️", true); - emojiTrie.put("🎗", true); - emojiTrie.put("🎟️", true); - emojiTrie.put("🎟", true); - emojiTrie.put("🎫", true); - emojiTrie.put("🎖️", true); - emojiTrie.put("🎖", true); - emojiTrie.put("🏆", true); - emojiTrie.put("🏅", true); - emojiTrie.put("🥇", true); - emojiTrie.put("🥈", true); - emojiTrie.put("🥉", true); - emojiTrie.put("⚽", true); - emojiTrie.put("⚾", true); - emojiTrie.put("🥎", true); - emojiTrie.put("🏀", true); - emojiTrie.put("🏐", true); - emojiTrie.put("🏈", true); - emojiTrie.put("🏉", true); - emojiTrie.put("🎾", true); - emojiTrie.put("🥏", true); - emojiTrie.put("🎳", true); - emojiTrie.put("🏏", true); - emojiTrie.put("🏑", true); - emojiTrie.put("🏒", true); - emojiTrie.put("🥍", true); - emojiTrie.put("🏓", true); - emojiTrie.put("🏸", true); - emojiTrie.put("🥊", true); - emojiTrie.put("🥋", true); - emojiTrie.put("🥅", true); - emojiTrie.put("⛳", true); - emojiTrie.put("⛸️", true); - emojiTrie.put("⛸", true); - emojiTrie.put("🎣", true); - emojiTrie.put("🤿", true); - emojiTrie.put("🎽", true); - emojiTrie.put("🎿", true); - emojiTrie.put("🛷", true); - emojiTrie.put("🥌", true); - emojiTrie.put("🎯", true); - emojiTrie.put("🪀", true); - emojiTrie.put("🪁", true); - emojiTrie.put("🔫", true); - emojiTrie.put("🎱", true); - emojiTrie.put("🔮", true); - emojiTrie.put("🪄", true); - emojiTrie.put("🎮", true); - emojiTrie.put("🕹️", true); - emojiTrie.put("🕹", true); - emojiTrie.put("🎰", true); - emojiTrie.put("🎲", true); - emojiTrie.put("🧩", true); - emojiTrie.put("🧸", true); - emojiTrie.put("🪅", true); - emojiTrie.put("🪩", true); - emojiTrie.put("🪆", true); - emojiTrie.put("♠️", true); - emojiTrie.put("♠", true); - emojiTrie.put("♥️", true); - emojiTrie.put("♥", true); - emojiTrie.put("♦️", true); - emojiTrie.put("♦", true); - emojiTrie.put("♣️", true); - emojiTrie.put("♣", true); - emojiTrie.put("♟️", true); - emojiTrie.put("♟", true); - emojiTrie.put("🃏", true); - emojiTrie.put("🀄", true); - emojiTrie.put("🎴", true); - emojiTrie.put("🎭", true); - emojiTrie.put("🖼️", true); - emojiTrie.put("🖼", true); - emojiTrie.put("🎨", true); - emojiTrie.put("🧵", true); - emojiTrie.put("🪡", true); - emojiTrie.put("🧶", true); - emojiTrie.put("🪢", true); - emojiTrie.put("👓", true); - emojiTrie.put("🕶️", true); - emojiTrie.put("🕶", true); - emojiTrie.put("🥽", true); - emojiTrie.put("🥼", true); - emojiTrie.put("🦺", true); - emojiTrie.put("👔", true); - emojiTrie.put("👕", true); - emojiTrie.put("👖", true); - emojiTrie.put("🧣", true); - emojiTrie.put("🧤", true); - emojiTrie.put("🧥", true); - emojiTrie.put("🧦", true); - emojiTrie.put("👗", true); - emojiTrie.put("👘", true); - emojiTrie.put("🥻", true); - emojiTrie.put("🩱", true); - emojiTrie.put("🩲", true); - emojiTrie.put("🩳", true); - emojiTrie.put("👙", true); - emojiTrie.put("👚", true); - emojiTrie.put("🪭", true); - emojiTrie.put("👛", true); - emojiTrie.put("👜", true); - emojiTrie.put("👝", true); - emojiTrie.put("🛍️", true); - emojiTrie.put("🛍", true); - emojiTrie.put("🎒", true); - emojiTrie.put("🩴", true); - emojiTrie.put("👞", true); - emojiTrie.put("👟", true); - emojiTrie.put("🥾", true); - emojiTrie.put("🥿", true); - emojiTrie.put("👠", true); - emojiTrie.put("👡", true); - emojiTrie.put("🩰", true); - emojiTrie.put("👢", true); - emojiTrie.put("🪮", true); - emojiTrie.put("👑", true); - emojiTrie.put("👒", true); - emojiTrie.put("🎩", true); - emojiTrie.put("🎓", true); - emojiTrie.put("🧢", true); - emojiTrie.put("🪖", true); - emojiTrie.put("⛑️", true); - emojiTrie.put("⛑", true); - emojiTrie.put("📿", true); - emojiTrie.put("💄", true); - emojiTrie.put("💍", true); - emojiTrie.put("💎", true); - emojiTrie.put("🔇", true); - emojiTrie.put("🔈", true); - emojiTrie.put("🔉", true); - emojiTrie.put("🔊", true); - emojiTrie.put("📢", true); - emojiTrie.put("📣", true); - emojiTrie.put("📯", true); - emojiTrie.put("🔔", true); - emojiTrie.put("🔕", true); - emojiTrie.put("🎼", true); - emojiTrie.put("🎵", true); - emojiTrie.put("🎶", true); - emojiTrie.put("🎙️", true); - emojiTrie.put("🎙", true); - emojiTrie.put("🎚️", true); - emojiTrie.put("🎚", true); - emojiTrie.put("🎛️", true); - emojiTrie.put("🎛", true); - emojiTrie.put("🎤", true); - emojiTrie.put("🎧", true); - emojiTrie.put("📻", true); - emojiTrie.put("🎷", true); - emojiTrie.put("🪗", true); - emojiTrie.put("🎸", true); - emojiTrie.put("🎹", true); - emojiTrie.put("🎺", true); - emojiTrie.put("🎻", true); - emojiTrie.put("🪕", true); - emojiTrie.put("🥁", true); - emojiTrie.put("🪘", true); - emojiTrie.put("🪇", true); - emojiTrie.put("🪈", true); - emojiTrie.put("📱", true); - emojiTrie.put("📲", true); - emojiTrie.put("☎️", true); - emojiTrie.put("☎", true); - emojiTrie.put("📞", true); - emojiTrie.put("📟", true); - emojiTrie.put("📠", true); - emojiTrie.put("🔋", true); - emojiTrie.put("🪫", true); - emojiTrie.put("🔌", true); - emojiTrie.put("💻", true); - emojiTrie.put("🖥️", true); - emojiTrie.put("🖥", true); - emojiTrie.put("🖨️", true); - emojiTrie.put("🖨", true); - emojiTrie.put("⌨️", true); - emojiTrie.put("⌨", true); - emojiTrie.put("🖱️", true); - emojiTrie.put("🖱", true); - emojiTrie.put("🖲️", true); - emojiTrie.put("🖲", true); - emojiTrie.put("💽", true); - emojiTrie.put("💾", true); - emojiTrie.put("💿", true); - emojiTrie.put("📀", true); - emojiTrie.put("🧮", true); - emojiTrie.put("🎥", true); - emojiTrie.put("🎞️", true); - emojiTrie.put("🎞", true); - emojiTrie.put("📽️", true); - emojiTrie.put("📽", true); - emojiTrie.put("🎬", true); - emojiTrie.put("📺", true); - emojiTrie.put("📷", true); - emojiTrie.put("📸", true); - emojiTrie.put("📹", true); - emojiTrie.put("📼", true); - emojiTrie.put("🔍", true); - emojiTrie.put("🔎", true); - emojiTrie.put("🕯️", true); - emojiTrie.put("🕯", true); - emojiTrie.put("💡", true); - emojiTrie.put("🔦", true); - emojiTrie.put("🏮", true); - emojiTrie.put("🪔", true); - emojiTrie.put("📔", true); - emojiTrie.put("📕", true); - emojiTrie.put("📖", true); - emojiTrie.put("📗", true); - emojiTrie.put("📘", true); - emojiTrie.put("📙", true); - emojiTrie.put("📚", true); - emojiTrie.put("📓", true); - emojiTrie.put("📒", true); - emojiTrie.put("📃", true); - emojiTrie.put("📜", true); - emojiTrie.put("📄", true); - emojiTrie.put("📰", true); - emojiTrie.put("🗞️", true); - emojiTrie.put("🗞", true); - emojiTrie.put("📑", true); - emojiTrie.put("🔖", true); - emojiTrie.put("🏷️", true); - emojiTrie.put("🏷", true); - emojiTrie.put("💰", true); - emojiTrie.put("🪙", true); - emojiTrie.put("💴", true); - emojiTrie.put("💵", true); - emojiTrie.put("💶", true); - emojiTrie.put("💷", true); - emojiTrie.put("💸", true); - emojiTrie.put("💳", true); - emojiTrie.put("🧾", true); - emojiTrie.put("💹", true); - emojiTrie.put("✉️", true); - emojiTrie.put("✉", true); - emojiTrie.put("📧", true); - emojiTrie.put("📨", true); - emojiTrie.put("📩", true); - emojiTrie.put("📤", true); - emojiTrie.put("📥", true); - emojiTrie.put("📦", true); - emojiTrie.put("📫", true); - emojiTrie.put("📪", true); - emojiTrie.put("📬", true); - emojiTrie.put("📭", true); - emojiTrie.put("📮", true); - emojiTrie.put("🗳️", true); - emojiTrie.put("🗳", true); - emojiTrie.put("✏️", true); - emojiTrie.put("✏", true); - emojiTrie.put("✒️", true); - emojiTrie.put("✒", true); - emojiTrie.put("🖋️", true); - emojiTrie.put("🖋", true); - emojiTrie.put("🖊️", true); - emojiTrie.put("🖊", true); - emojiTrie.put("🖌️", true); - emojiTrie.put("🖌", true); - emojiTrie.put("🖍️", true); - emojiTrie.put("🖍", true); - emojiTrie.put("📝", true); - emojiTrie.put("💼", true); - emojiTrie.put("📁", true); - emojiTrie.put("📂", true); - emojiTrie.put("🗂️", true); - emojiTrie.put("🗂", true); - emojiTrie.put("📅", true); - emojiTrie.put("📆", true); - emojiTrie.put("🗒️", true); - emojiTrie.put("🗒", true); - emojiTrie.put("🗓️", true); - emojiTrie.put("🗓", true); - emojiTrie.put("📇", true); - emojiTrie.put("📈", true); - emojiTrie.put("📉", true); - emojiTrie.put("📊", true); - emojiTrie.put("📋", true); - emojiTrie.put("📌", true); - emojiTrie.put("📍", true); - emojiTrie.put("📎", true); - emojiTrie.put("🖇️", true); - emojiTrie.put("🖇", true); - emojiTrie.put("📏", true); - emojiTrie.put("📐", true); - emojiTrie.put("✂️", true); - emojiTrie.put("✂", true); - emojiTrie.put("🗃️", true); - emojiTrie.put("🗃", true); - emojiTrie.put("🗄️", true); - emojiTrie.put("🗄", true); - emojiTrie.put("🗑️", true); - emojiTrie.put("🗑", true); - emojiTrie.put("🔒", true); - emojiTrie.put("🔓", true); - emojiTrie.put("🔏", true); - emojiTrie.put("🔐", true); - emojiTrie.put("🔑", true); - emojiTrie.put("🗝️", true); - emojiTrie.put("🗝", true); - emojiTrie.put("🔨", true); - emojiTrie.put("🪓", true); - emojiTrie.put("⛏️", true); - emojiTrie.put("⛏", true); - emojiTrie.put("⚒️", true); - emojiTrie.put("⚒", true); - emojiTrie.put("🛠️", true); - emojiTrie.put("🛠", true); - emojiTrie.put("🗡️", true); - emojiTrie.put("🗡", true); - emojiTrie.put("⚔️", true); - emojiTrie.put("⚔", true); - emojiTrie.put("💣", true); - emojiTrie.put("🪃", true); - emojiTrie.put("🏹", true); - emojiTrie.put("🛡️", true); - emojiTrie.put("🛡", true); - emojiTrie.put("🪚", true); - emojiTrie.put("🔧", true); - emojiTrie.put("🪛", true); - emojiTrie.put("🔩", true); - emojiTrie.put("⚙️", true); - emojiTrie.put("⚙", true); - emojiTrie.put("🗜️", true); - emojiTrie.put("🗜", true); - emojiTrie.put("⚖️", true); - emojiTrie.put("⚖", true); - emojiTrie.put("🦯", true); - emojiTrie.put("🔗", true); - emojiTrie.put("⛓️‍💥", true); - emojiTrie.put("⛓‍💥", true); - emojiTrie.put("⛓️", true); - emojiTrie.put("⛓", true); - emojiTrie.put("🪝", true); - emojiTrie.put("🧰", true); - emojiTrie.put("🧲", true); - emojiTrie.put("🪜", true); - emojiTrie.put("⚗️", true); - emojiTrie.put("⚗", true); - emojiTrie.put("🧪", true); - emojiTrie.put("🧫", true); - emojiTrie.put("🧬", true); - emojiTrie.put("🔬", true); - emojiTrie.put("🔭", true); - emojiTrie.put("📡", true); - emojiTrie.put("💉", true); - emojiTrie.put("🩸", true); - emojiTrie.put("💊", true); - emojiTrie.put("🩹", true); - emojiTrie.put("🩼", true); - emojiTrie.put("🩺", true); - emojiTrie.put("🩻", true); - emojiTrie.put("🚪", true); - emojiTrie.put("🛗", true); - emojiTrie.put("🪞", true); - emojiTrie.put("🪟", true); - emojiTrie.put("🛏️", true); - emojiTrie.put("🛏", true); - emojiTrie.put("🛋️", true); - emojiTrie.put("🛋", true); - emojiTrie.put("🪑", true); - emojiTrie.put("🚽", true); - emojiTrie.put("🪠", true); - emojiTrie.put("🚿", true); - emojiTrie.put("🛁", true); - emojiTrie.put("🪤", true); - emojiTrie.put("🪒", true); - emojiTrie.put("🧴", true); - emojiTrie.put("🧷", true); - emojiTrie.put("🧹", true); - emojiTrie.put("🧺", true); - emojiTrie.put("🧻", true); - emojiTrie.put("🪣", true); - emojiTrie.put("🧼", true); - emojiTrie.put("🫧", true); - emojiTrie.put("🪥", true); - emojiTrie.put("🧽", true); - emojiTrie.put("🧯", true); - emojiTrie.put("🛒", true); - emojiTrie.put("🚬", true); - emojiTrie.put("⚰️", true); - emojiTrie.put("⚰", true); - emojiTrie.put("🪦", true); - emojiTrie.put("⚱️", true); - emojiTrie.put("⚱", true); - emojiTrie.put("🧿", true); - emojiTrie.put("🪬", true); - emojiTrie.put("🗿", true); - emojiTrie.put("🪧", true); - emojiTrie.put("🪪", true); - emojiTrie.put("🏧", true); - emojiTrie.put("🚮", true); - emojiTrie.put("🚰", true); - emojiTrie.put("♿", true); - emojiTrie.put("🚹", true); - emojiTrie.put("🚺", true); - emojiTrie.put("🚻", true); - emojiTrie.put("🚼", true); - emojiTrie.put("🚾", true); - emojiTrie.put("🛂", true); - emojiTrie.put("🛃", true); - emojiTrie.put("🛄", true); - emojiTrie.put("🛅", true); - emojiTrie.put("⚠️", true); - emojiTrie.put("⚠", true); - emojiTrie.put("🚸", true); - emojiTrie.put("⛔", true); - emojiTrie.put("🚫", true); - emojiTrie.put("🚳", true); - emojiTrie.put("🚭", true); - emojiTrie.put("🚯", true); - emojiTrie.put("🚱", true); - emojiTrie.put("🚷", true); - emojiTrie.put("📵", true); - emojiTrie.put("🔞", true); - emojiTrie.put("☢️", true); - emojiTrie.put("☢", true); - emojiTrie.put("☣️", true); - emojiTrie.put("☣", true); - emojiTrie.put("⬆️", true); - emojiTrie.put("⬆", true); - emojiTrie.put("↗️", true); - emojiTrie.put("↗", true); - emojiTrie.put("➡️", true); - emojiTrie.put("➡", true); - emojiTrie.put("↘️", true); - emojiTrie.put("↘", true); - emojiTrie.put("⬇️", true); - emojiTrie.put("⬇", true); - emojiTrie.put("↙️", true); - emojiTrie.put("↙", true); - emojiTrie.put("⬅️", true); - emojiTrie.put("⬅", true); - emojiTrie.put("↖️", true); - emojiTrie.put("↖", true); - emojiTrie.put("↕️", true); - emojiTrie.put("↕", true); - emojiTrie.put("↔️", true); - emojiTrie.put("↔", true); - emojiTrie.put("↩️", true); - emojiTrie.put("↩", true); - emojiTrie.put("↪️", true); - emojiTrie.put("↪", true); - emojiTrie.put("⤴️", true); - emojiTrie.put("⤴", true); - emojiTrie.put("⤵️", true); - emojiTrie.put("⤵", true); - emojiTrie.put("🔃", true); - emojiTrie.put("🔄", true); - emojiTrie.put("🔙", true); - emojiTrie.put("🔚", true); - emojiTrie.put("🔛", true); - emojiTrie.put("🔜", true); - emojiTrie.put("🔝", true); - emojiTrie.put("🛐", true); - emojiTrie.put("⚛️", true); - emojiTrie.put("⚛", true); - emojiTrie.put("🕉️", true); - emojiTrie.put("🕉", true); - emojiTrie.put("✡️", true); - emojiTrie.put("✡", true); - emojiTrie.put("☸️", true); - emojiTrie.put("☸", true); - emojiTrie.put("☯️", true); - emojiTrie.put("☯", true); - emojiTrie.put("✝️", true); - emojiTrie.put("✝", true); - emojiTrie.put("☦️", true); - emojiTrie.put("☦", true); - emojiTrie.put("☪️", true); - emojiTrie.put("☪", true); - emojiTrie.put("☮️", true); - emojiTrie.put("☮", true); - emojiTrie.put("🕎", true); - emojiTrie.put("🔯", true); - emojiTrie.put("🪯", true); - emojiTrie.put("♈", true); - emojiTrie.put("♉", true); - emojiTrie.put("♊", true); - emojiTrie.put("♋", true); - emojiTrie.put("♌", true); - emojiTrie.put("♍", true); - emojiTrie.put("♎", true); - emojiTrie.put("♏", true); - emojiTrie.put("♐", true); - emojiTrie.put("♑", true); - emojiTrie.put("♒", true); - emojiTrie.put("♓", true); - emojiTrie.put("⛎", true); - emojiTrie.put("🔀", true); - emojiTrie.put("🔁", true); - emojiTrie.put("🔂", true); - emojiTrie.put("▶️", true); - emojiTrie.put("▶", true); - emojiTrie.put("⏩", true); - emojiTrie.put("⏭️", true); - emojiTrie.put("⏭", true); - emojiTrie.put("⏯️", true); - emojiTrie.put("⏯", true); - emojiTrie.put("◀️", true); - emojiTrie.put("◀", true); - emojiTrie.put("⏪", true); - emojiTrie.put("⏮️", true); - emojiTrie.put("⏮", true); - emojiTrie.put("🔼", true); - emojiTrie.put("⏫", true); - emojiTrie.put("🔽", true); - emojiTrie.put("⏬", true); - emojiTrie.put("⏸️", true); - emojiTrie.put("⏸", true); - emojiTrie.put("⏹️", true); - emojiTrie.put("⏹", true); - emojiTrie.put("⏺️", true); - emojiTrie.put("⏺", true); - emojiTrie.put("⏏️", true); - emojiTrie.put("⏏", true); - emojiTrie.put("🎦", true); - emojiTrie.put("🔅", true); - emojiTrie.put("🔆", true); - emojiTrie.put("📶", true); - emojiTrie.put("🛜", true); - emojiTrie.put("📳", true); - emojiTrie.put("📴", true); - emojiTrie.put("♀️", true); - emojiTrie.put("♀", true); - emojiTrie.put("♂️", true); - emojiTrie.put("♂", true); - emojiTrie.put("⚧️", true); - emojiTrie.put("⚧", true); - emojiTrie.put("✖️", true); - emojiTrie.put("✖", true); - emojiTrie.put("➕", true); - emojiTrie.put("➖", true); - emojiTrie.put("➗", true); - emojiTrie.put("🟰", true); - emojiTrie.put("♾️", true); - emojiTrie.put("♾", true); - emojiTrie.put("‼️", true); - emojiTrie.put("‼", true); - emojiTrie.put("⁉️", true); - emojiTrie.put("⁉", true); - emojiTrie.put("❓", true); - emojiTrie.put("❔", true); - emojiTrie.put("❕", true); - emojiTrie.put("❗", true); - emojiTrie.put("〰️", true); - emojiTrie.put("〰", true); - emojiTrie.put("💱", true); - emojiTrie.put("💲", true); - emojiTrie.put("⚕️", true); - emojiTrie.put("⚕", true); - emojiTrie.put("♻️", true); - emojiTrie.put("♻", true); - emojiTrie.put("⚜️", true); - emojiTrie.put("⚜", true); - emojiTrie.put("🔱", true); - emojiTrie.put("📛", true); - emojiTrie.put("🔰", true); - emojiTrie.put("⭕", true); - emojiTrie.put("✅", true); - emojiTrie.put("☑️", true); - emojiTrie.put("☑", true); - emojiTrie.put("✔️", true); - emojiTrie.put("✔", true); - emojiTrie.put("❌", true); - emojiTrie.put("❎", true); - emojiTrie.put("➰", true); - emojiTrie.put("➿", true); - emojiTrie.put("〽️", true); - emojiTrie.put("〽", true); - emojiTrie.put("✳️", true); - emojiTrie.put("✳", true); - emojiTrie.put("✴️", true); - emojiTrie.put("✴", true); - emojiTrie.put("❇️", true); - emojiTrie.put("❇", true); - emojiTrie.put("©️", true); - emojiTrie.put("©", true); - emojiTrie.put("®️", true); - emojiTrie.put("®", true); - emojiTrie.put("™️", true); - emojiTrie.put("™", true); - emojiTrie.put("#️⃣", true); - emojiTrie.put("#⃣", true); - emojiTrie.put("*️⃣", true); - emojiTrie.put("*⃣", true); - emojiTrie.put("0️⃣", true); - emojiTrie.put("0⃣", true); - emojiTrie.put("1️⃣", true); - emojiTrie.put("1⃣", true); - emojiTrie.put("2️⃣", true); - emojiTrie.put("2⃣", true); - emojiTrie.put("3️⃣", true); - emojiTrie.put("3⃣", true); - emojiTrie.put("4️⃣", true); - emojiTrie.put("4⃣", true); - emojiTrie.put("5️⃣", true); - emojiTrie.put("5⃣", true); - emojiTrie.put("6️⃣", true); - emojiTrie.put("6⃣", true); - emojiTrie.put("7️⃣", true); - emojiTrie.put("7⃣", true); - emojiTrie.put("8️⃣", true); - emojiTrie.put("8⃣", true); - emojiTrie.put("9️⃣", true); - emojiTrie.put("9⃣", true); - emojiTrie.put("🔟", true); - emojiTrie.put("🔠", true); - emojiTrie.put("🔡", true); - emojiTrie.put("🔢", true); - emojiTrie.put("🔣", true); - emojiTrie.put("🔤", true); - emojiTrie.put("🅰️", true); - emojiTrie.put("🅰", true); - emojiTrie.put("🆎", true); - emojiTrie.put("🅱️", true); - emojiTrie.put("🅱", true); - emojiTrie.put("🆑", true); - emojiTrie.put("🆒", true); - emojiTrie.put("🆓", true); - emojiTrie.put("ℹ️", true); - emojiTrie.put("ℹ", true); - emojiTrie.put("🆔", true); - emojiTrie.put("Ⓜ️", true); - emojiTrie.put("Ⓜ", true); - emojiTrie.put("🆕", true); - emojiTrie.put("🆖", true); - emojiTrie.put("🅾️", true); - emojiTrie.put("🅾", true); - emojiTrie.put("🆗", true); - emojiTrie.put("🅿️", true); - emojiTrie.put("🅿", true); - emojiTrie.put("🆘", true); - emojiTrie.put("🆙", true); - emojiTrie.put("🆚", true); - emojiTrie.put("🈁", true); - emojiTrie.put("🈂️", true); - emojiTrie.put("🈂", true); - emojiTrie.put("🈷️", true); - emojiTrie.put("🈷", true); - emojiTrie.put("🈶", true); - emojiTrie.put("🈯", true); - emojiTrie.put("🉐", true); - emojiTrie.put("🈹", true); - emojiTrie.put("🈚", true); - emojiTrie.put("🈲", true); - emojiTrie.put("🉑", true); - emojiTrie.put("🈸", true); - emojiTrie.put("🈴", true); - emojiTrie.put("🈳", true); - emojiTrie.put("㊗️", true); - emojiTrie.put("㊗", true); - emojiTrie.put("㊙️", true); - emojiTrie.put("㊙", true); - emojiTrie.put("🈺", true); - emojiTrie.put("🈵", true); - emojiTrie.put("🔴", true); - emojiTrie.put("🟠", true); - emojiTrie.put("🟡", true); - emojiTrie.put("🟢", true); - emojiTrie.put("🔵", true); - emojiTrie.put("🟣", true); - emojiTrie.put("🟤", true); - emojiTrie.put("⚫", true); - emojiTrie.put("⚪", true); - emojiTrie.put("🟥", true); - emojiTrie.put("🟧", true); - emojiTrie.put("🟨", true); - emojiTrie.put("🟩", true); - emojiTrie.put("🟦", true); - emojiTrie.put("🟪", true); - emojiTrie.put("🟫", true); - emojiTrie.put("⬛", true); - emojiTrie.put("⬜", true); - emojiTrie.put("◼️", true); - emojiTrie.put("◼", true); - emojiTrie.put("◻️", true); - emojiTrie.put("◻", true); - emojiTrie.put("◾", true); - emojiTrie.put("◽", true); - emojiTrie.put("▪️", true); - emojiTrie.put("▪", true); - emojiTrie.put("▫️", true); - emojiTrie.put("▫", true); - emojiTrie.put("🔶", true); - emojiTrie.put("🔷", true); - emojiTrie.put("🔸", true); - emojiTrie.put("🔹", true); - emojiTrie.put("🔺", true); - emojiTrie.put("🔻", true); - emojiTrie.put("💠", true); - emojiTrie.put("🔘", true); - emojiTrie.put("🔳", true); - emojiTrie.put("🔲", true); - emojiTrie.put("🏁", true); - emojiTrie.put("🚩", true); - emojiTrie.put("🎌", true); - emojiTrie.put("🏴", true); - emojiTrie.put("🏳️", true); - emojiTrie.put("🏳", true); - emojiTrie.put("🏳️‍🌈", true); - emojiTrie.put("🏳‍🌈", true); - emojiTrie.put("🏳️‍⚧️", true); - emojiTrie.put("🏳‍⚧️", true); - emojiTrie.put("🏳️‍⚧", true); - emojiTrie.put("🏳‍⚧", true); - emojiTrie.put("🏴‍☠️", true); - emojiTrie.put("🏴‍☠", true); - emojiTrie.put("🇦🇨", true); - emojiTrie.put("🇦🇩", true); - emojiTrie.put("🇦🇪", true); - emojiTrie.put("🇦🇫", true); - emojiTrie.put("🇦🇬", true); - emojiTrie.put("🇦🇮", true); - emojiTrie.put("🇦🇱", true); - emojiTrie.put("🇦🇲", true); - emojiTrie.put("🇦🇴", true); - emojiTrie.put("🇦🇶", true); - emojiTrie.put("🇦🇷", true); - emojiTrie.put("🇦🇸", true); - emojiTrie.put("🇦🇹", true); - emojiTrie.put("🇦🇺", true); - emojiTrie.put("🇦🇼", true); - emojiTrie.put("🇦🇽", true); - emojiTrie.put("🇦🇿", true); - emojiTrie.put("🇧🇦", true); - emojiTrie.put("🇧🇧", true); - emojiTrie.put("🇧🇩", true); - emojiTrie.put("🇧🇪", true); - emojiTrie.put("🇧🇫", true); - emojiTrie.put("🇧🇬", true); - emojiTrie.put("🇧🇭", true); - emojiTrie.put("🇧🇮", true); - emojiTrie.put("🇧🇯", true); - emojiTrie.put("🇧🇱", true); - emojiTrie.put("🇧🇲", true); - emojiTrie.put("🇧🇳", true); - emojiTrie.put("🇧🇴", true); - emojiTrie.put("🇧🇶", true); - emojiTrie.put("🇧🇷", true); - emojiTrie.put("🇧🇸", true); - emojiTrie.put("🇧🇹", true); - emojiTrie.put("🇧🇻", true); - emojiTrie.put("🇧🇼", true); - emojiTrie.put("🇧🇾", true); - emojiTrie.put("🇧🇿", true); - emojiTrie.put("🇨🇦", true); - emojiTrie.put("🇨🇨", true); - emojiTrie.put("🇨🇩", true); - emojiTrie.put("🇨🇫", true); - emojiTrie.put("🇨🇬", true); - emojiTrie.put("🇨🇭", true); - emojiTrie.put("🇨🇮", true); - emojiTrie.put("🇨🇰", true); - emojiTrie.put("🇨🇱", true); - emojiTrie.put("🇨🇲", true); - emojiTrie.put("🇨🇳", true); - emojiTrie.put("🇨🇴", true); - emojiTrie.put("🇨🇵", true); - emojiTrie.put("🇨🇷", true); - emojiTrie.put("🇨🇺", true); - emojiTrie.put("🇨🇻", true); - emojiTrie.put("🇨🇼", true); - emojiTrie.put("🇨🇽", true); - emojiTrie.put("🇨🇾", true); - emojiTrie.put("🇨🇿", true); - emojiTrie.put("🇩🇪", true); - emojiTrie.put("🇩🇬", true); - emojiTrie.put("🇩🇯", true); - emojiTrie.put("🇩🇰", true); - emojiTrie.put("🇩🇲", true); - emojiTrie.put("🇩🇴", true); - emojiTrie.put("🇩🇿", true); - emojiTrie.put("🇪🇦", true); - emojiTrie.put("🇪🇨", true); - emojiTrie.put("🇪🇪", true); - emojiTrie.put("🇪🇬", true); - emojiTrie.put("🇪🇭", true); - emojiTrie.put("🇪🇷", true); - emojiTrie.put("🇪🇸", true); - emojiTrie.put("🇪🇹", true); - emojiTrie.put("🇪🇺", true); - emojiTrie.put("🇫🇮", true); - emojiTrie.put("🇫🇯", true); - emojiTrie.put("🇫🇰", true); - emojiTrie.put("🇫🇲", true); - emojiTrie.put("🇫🇴", true); - emojiTrie.put("🇫🇷", true); - emojiTrie.put("🇬🇦", true); - emojiTrie.put("🇬🇧", true); - emojiTrie.put("🇬🇩", true); - emojiTrie.put("🇬🇪", true); - emojiTrie.put("🇬🇫", true); - emojiTrie.put("🇬🇬", true); - emojiTrie.put("🇬🇭", true); - emojiTrie.put("🇬🇮", true); - emojiTrie.put("🇬🇱", true); - emojiTrie.put("🇬🇲", true); - emojiTrie.put("🇬🇳", true); - emojiTrie.put("🇬🇵", true); - emojiTrie.put("🇬🇶", true); - emojiTrie.put("🇬🇷", true); - emojiTrie.put("🇬🇸", true); - emojiTrie.put("🇬🇹", true); - emojiTrie.put("🇬🇺", true); - emojiTrie.put("🇬🇼", true); - emojiTrie.put("🇬🇾", true); - emojiTrie.put("🇭🇰", true); - emojiTrie.put("🇭🇲", true); - emojiTrie.put("🇭🇳", true); - emojiTrie.put("🇭🇷", true); - emojiTrie.put("🇭🇹", true); - emojiTrie.put("🇭🇺", true); - emojiTrie.put("🇮🇨", true); - emojiTrie.put("🇮🇩", true); - emojiTrie.put("🇮🇪", true); - emojiTrie.put("🇮🇱", true); - emojiTrie.put("🇮🇲", true); - emojiTrie.put("🇮🇳", true); - emojiTrie.put("🇮🇴", true); - emojiTrie.put("🇮🇶", true); - emojiTrie.put("🇮🇷", true); - emojiTrie.put("🇮🇸", true); - emojiTrie.put("🇮🇹", true); - emojiTrie.put("🇯🇪", true); - emojiTrie.put("🇯🇲", true); - emojiTrie.put("🇯🇴", true); - emojiTrie.put("🇯🇵", true); - emojiTrie.put("🇰🇪", true); - emojiTrie.put("🇰🇬", true); - emojiTrie.put("🇰🇭", true); - emojiTrie.put("🇰🇮", true); - emojiTrie.put("🇰🇲", true); - emojiTrie.put("🇰🇳", true); - emojiTrie.put("🇰🇵", true); - emojiTrie.put("🇰🇷", true); - emojiTrie.put("🇰🇼", true); - emojiTrie.put("🇰🇾", true); - emojiTrie.put("🇰🇿", true); - emojiTrie.put("🇱🇦", true); - emojiTrie.put("🇱🇧", true); - emojiTrie.put("🇱🇨", true); - emojiTrie.put("🇱🇮", true); - emojiTrie.put("🇱🇰", true); - emojiTrie.put("🇱🇷", true); - emojiTrie.put("🇱🇸", true); - emojiTrie.put("🇱🇹", true); - emojiTrie.put("🇱🇺", true); - emojiTrie.put("🇱🇻", true); - emojiTrie.put("🇱🇾", true); - emojiTrie.put("🇲🇦", true); - emojiTrie.put("🇲🇨", true); - emojiTrie.put("🇲🇩", true); - emojiTrie.put("🇲🇪", true); - emojiTrie.put("🇲🇫", true); - emojiTrie.put("🇲🇬", true); - emojiTrie.put("🇲🇭", true); - emojiTrie.put("🇲🇰", true); - emojiTrie.put("🇲🇱", true); - emojiTrie.put("🇲🇲", true); - emojiTrie.put("🇲🇳", true); - emojiTrie.put("🇲🇴", true); - emojiTrie.put("🇲🇵", true); - emojiTrie.put("🇲🇶", true); - emojiTrie.put("🇲🇷", true); - emojiTrie.put("🇲🇸", true); - emojiTrie.put("🇲🇹", true); - emojiTrie.put("🇲🇺", true); - emojiTrie.put("🇲🇻", true); - emojiTrie.put("🇲🇼", true); - emojiTrie.put("🇲🇽", true); - emojiTrie.put("🇲🇾", true); - emojiTrie.put("🇲🇿", true); - emojiTrie.put("🇳🇦", true); - emojiTrie.put("🇳🇨", true); - emojiTrie.put("🇳🇪", true); - emojiTrie.put("🇳🇫", true); - emojiTrie.put("🇳🇬", true); - emojiTrie.put("🇳🇮", true); - emojiTrie.put("🇳🇱", true); - emojiTrie.put("🇳🇴", true); - emojiTrie.put("🇳🇵", true); - emojiTrie.put("🇳🇷", true); - emojiTrie.put("🇳🇺", true); - emojiTrie.put("🇳🇿", true); - emojiTrie.put("🇴🇲", true); - emojiTrie.put("🇵🇦", true); - emojiTrie.put("🇵🇪", true); - emojiTrie.put("🇵🇫", true); - emojiTrie.put("🇵🇬", true); - emojiTrie.put("🇵🇭", true); - emojiTrie.put("🇵🇰", true); - emojiTrie.put("🇵🇱", true); - emojiTrie.put("🇵🇲", true); - emojiTrie.put("🇵🇳", true); - emojiTrie.put("🇵🇷", true); - emojiTrie.put("🇵🇸", true); - emojiTrie.put("🇵🇹", true); - emojiTrie.put("🇵🇼", true); - emojiTrie.put("🇵🇾", true); - emojiTrie.put("🇶🇦", true); - emojiTrie.put("🇷🇪", true); - emojiTrie.put("🇷🇴", true); - emojiTrie.put("🇷🇸", true); - emojiTrie.put("🇷🇺", true); - emojiTrie.put("🇷🇼", true); - emojiTrie.put("🇸🇦", true); - emojiTrie.put("🇸🇧", true); - emojiTrie.put("🇸🇨", true); - emojiTrie.put("🇸🇩", true); - emojiTrie.put("🇸🇪", true); - emojiTrie.put("🇸🇬", true); - emojiTrie.put("🇸🇭", true); - emojiTrie.put("🇸🇮", true); - emojiTrie.put("🇸🇯", true); - emojiTrie.put("🇸🇰", true); - emojiTrie.put("🇸🇱", true); - emojiTrie.put("🇸🇲", true); - emojiTrie.put("🇸🇳", true); - emojiTrie.put("🇸🇴", true); - emojiTrie.put("🇸🇷", true); - emojiTrie.put("🇸🇸", true); - emojiTrie.put("🇸🇹", true); - emojiTrie.put("🇸🇻", true); - emojiTrie.put("🇸🇽", true); - emojiTrie.put("🇸🇾", true); - emojiTrie.put("🇸🇿", true); - emojiTrie.put("🇹🇦", true); - emojiTrie.put("🇹🇨", true); - emojiTrie.put("🇹🇩", true); - emojiTrie.put("🇹🇫", true); - emojiTrie.put("🇹🇬", true); - emojiTrie.put("🇹🇭", true); - emojiTrie.put("🇹🇯", true); - emojiTrie.put("🇹🇰", true); - emojiTrie.put("🇹🇱", true); - emojiTrie.put("🇹🇲", true); - emojiTrie.put("🇹🇳", true); - emojiTrie.put("🇹🇴", true); - emojiTrie.put("🇹🇷", true); - emojiTrie.put("🇹🇹", true); - emojiTrie.put("🇹🇻", true); - emojiTrie.put("🇹🇼", true); - emojiTrie.put("🇹🇿", true); - emojiTrie.put("🇺🇦", true); - emojiTrie.put("🇺🇬", true); - emojiTrie.put("🇺🇲", true); - emojiTrie.put("🇺🇳", true); - emojiTrie.put("🇺🇸", true); - emojiTrie.put("🇺🇾", true); - emojiTrie.put("🇺🇿", true); - emojiTrie.put("🇻🇦", true); - emojiTrie.put("🇻🇨", true); - emojiTrie.put("🇻🇪", true); - emojiTrie.put("🇻🇬", true); - emojiTrie.put("🇻🇮", true); - emojiTrie.put("🇻🇳", true); - emojiTrie.put("🇻🇺", true); - emojiTrie.put("🇼🇫", true); - emojiTrie.put("🇼🇸", true); - emojiTrie.put("🇽🇰", true); - emojiTrie.put("🇾🇪", true); - emojiTrie.put("🇾🇹", true); - emojiTrie.put("🇿🇦", true); - emojiTrie.put("🇿🇲", true); - emojiTrie.put("🇿🇼", true); - emojiTrie.put("🏴󠁧󠁢󠁥󠁮󠁧󠁿", true); - emojiTrie.put("🏴󠁧󠁢󠁳󠁣󠁴󠁿", true); - emojiTrie.put("🏴󠁧󠁢󠁷󠁬󠁳󠁿", true); + emojiTrie.put("😀", Boolean.TRUE); + emojiTrie.put("😃", Boolean.TRUE); + emojiTrie.put("😄", Boolean.TRUE); + emojiTrie.put("😁", Boolean.TRUE); + emojiTrie.put("😆", Boolean.TRUE); + emojiTrie.put("😅", Boolean.TRUE); + emojiTrie.put("🤣", Boolean.TRUE); + emojiTrie.put("😂", Boolean.TRUE); + emojiTrie.put("🙂", Boolean.TRUE); + emojiTrie.put("🙃", Boolean.TRUE); + emojiTrie.put("🫠", Boolean.TRUE); + emojiTrie.put("😉", Boolean.TRUE); + emojiTrie.put("😊", Boolean.TRUE); + emojiTrie.put("😇", Boolean.TRUE); + emojiTrie.put("🥰", Boolean.TRUE); + emojiTrie.put("😍", Boolean.TRUE); + emojiTrie.put("🤩", Boolean.TRUE); + emojiTrie.put("😘", Boolean.TRUE); + emojiTrie.put("😗", Boolean.TRUE); + emojiTrie.put("☺️", Boolean.TRUE); + emojiTrie.put("☺", Boolean.TRUE); + emojiTrie.put("😚", Boolean.TRUE); + emojiTrie.put("😙", Boolean.TRUE); + emojiTrie.put("🥲", Boolean.TRUE); + emojiTrie.put("😋", Boolean.TRUE); + emojiTrie.put("😛", Boolean.TRUE); + emojiTrie.put("😜", Boolean.TRUE); + emojiTrie.put("🤪", Boolean.TRUE); + emojiTrie.put("😝", Boolean.TRUE); + emojiTrie.put("🤑", Boolean.TRUE); + emojiTrie.put("🤗", Boolean.TRUE); + emojiTrie.put("🤭", Boolean.TRUE); + emojiTrie.put("🫢", Boolean.TRUE); + emojiTrie.put("🫣", Boolean.TRUE); + emojiTrie.put("🤫", Boolean.TRUE); + emojiTrie.put("🤔", Boolean.TRUE); + emojiTrie.put("🫡", Boolean.TRUE); + emojiTrie.put("🤐", Boolean.TRUE); + emojiTrie.put("🤨", Boolean.TRUE); + emojiTrie.put("😐", Boolean.TRUE); + emojiTrie.put("😑", Boolean.TRUE); + emojiTrie.put("😶", Boolean.TRUE); + emojiTrie.put("🫥", Boolean.TRUE); + emojiTrie.put("😶‍🌫️", Boolean.TRUE); + emojiTrie.put("😶‍🌫", Boolean.TRUE); + emojiTrie.put("😏", Boolean.TRUE); + emojiTrie.put("😒", Boolean.TRUE); + emojiTrie.put("🙄", Boolean.TRUE); + emojiTrie.put("😬", Boolean.TRUE); + emojiTrie.put("😮‍💨", Boolean.TRUE); + emojiTrie.put("🤥", Boolean.TRUE); + emojiTrie.put("🫨", Boolean.TRUE); + emojiTrie.put("🙂‍↔️", Boolean.TRUE); + emojiTrie.put("🙂‍↔", Boolean.TRUE); + emojiTrie.put("🙂‍↕️", Boolean.TRUE); + emojiTrie.put("🙂‍↕", Boolean.TRUE); + emojiTrie.put("😌", Boolean.TRUE); + emojiTrie.put("😔", Boolean.TRUE); + emojiTrie.put("😪", Boolean.TRUE); + emojiTrie.put("🤤", Boolean.TRUE); + emojiTrie.put("😴", Boolean.TRUE); + emojiTrie.put("🫩", Boolean.TRUE); + emojiTrie.put("😷", Boolean.TRUE); + emojiTrie.put("🤒", Boolean.TRUE); + emojiTrie.put("🤕", Boolean.TRUE); + emojiTrie.put("🤢", Boolean.TRUE); + emojiTrie.put("🤮", Boolean.TRUE); + emojiTrie.put("🤧", Boolean.TRUE); + emojiTrie.put("🥵", Boolean.TRUE); + emojiTrie.put("🥶", Boolean.TRUE); + emojiTrie.put("🥴", Boolean.TRUE); + emojiTrie.put("😵", Boolean.TRUE); + emojiTrie.put("😵‍💫", Boolean.TRUE); + emojiTrie.put("🤯", Boolean.TRUE); + emojiTrie.put("🤠", Boolean.TRUE); + emojiTrie.put("🥳", Boolean.TRUE); + emojiTrie.put("🥸", Boolean.TRUE); + emojiTrie.put("😎", Boolean.TRUE); + emojiTrie.put("🤓", Boolean.TRUE); + emojiTrie.put("🧐", Boolean.TRUE); + emojiTrie.put("😕", Boolean.TRUE); + emojiTrie.put("🫤", Boolean.TRUE); + emojiTrie.put("😟", Boolean.TRUE); + emojiTrie.put("🙁", Boolean.TRUE); + emojiTrie.put("☹️", Boolean.TRUE); + emojiTrie.put("☹", Boolean.TRUE); + emojiTrie.put("😮", Boolean.TRUE); + emojiTrie.put("😯", Boolean.TRUE); + emojiTrie.put("😲", Boolean.TRUE); + emojiTrie.put("😳", Boolean.TRUE); + emojiTrie.put("🥺", Boolean.TRUE); + emojiTrie.put("🥹", Boolean.TRUE); + emojiTrie.put("😦", Boolean.TRUE); + emojiTrie.put("😧", Boolean.TRUE); + emojiTrie.put("😨", Boolean.TRUE); + emojiTrie.put("😰", Boolean.TRUE); + emojiTrie.put("😥", Boolean.TRUE); + emojiTrie.put("😢", Boolean.TRUE); + emojiTrie.put("😭", Boolean.TRUE); + emojiTrie.put("😱", Boolean.TRUE); + emojiTrie.put("😖", Boolean.TRUE); + emojiTrie.put("😣", Boolean.TRUE); + emojiTrie.put("😞", Boolean.TRUE); + emojiTrie.put("😓", Boolean.TRUE); + emojiTrie.put("😩", Boolean.TRUE); + emojiTrie.put("😫", Boolean.TRUE); + emojiTrie.put("🥱", Boolean.TRUE); + emojiTrie.put("😤", Boolean.TRUE); + emojiTrie.put("😡", Boolean.TRUE); + emojiTrie.put("😠", Boolean.TRUE); + emojiTrie.put("🤬", Boolean.TRUE); + emojiTrie.put("😈", Boolean.TRUE); + emojiTrie.put("👿", Boolean.TRUE); + emojiTrie.put("💀", Boolean.TRUE); + emojiTrie.put("☠️", Boolean.TRUE); + emojiTrie.put("☠", Boolean.TRUE); + emojiTrie.put("💩", Boolean.TRUE); + emojiTrie.put("🤡", Boolean.TRUE); + emojiTrie.put("👹", Boolean.TRUE); + emojiTrie.put("👺", Boolean.TRUE); + emojiTrie.put("👻", Boolean.TRUE); + emojiTrie.put("👽", Boolean.TRUE); + emojiTrie.put("👾", Boolean.TRUE); + emojiTrie.put("🤖", Boolean.TRUE); + emojiTrie.put("😺", Boolean.TRUE); + emojiTrie.put("😸", Boolean.TRUE); + emojiTrie.put("😹", Boolean.TRUE); + emojiTrie.put("😻", Boolean.TRUE); + emojiTrie.put("😼", Boolean.TRUE); + emojiTrie.put("😽", Boolean.TRUE); + emojiTrie.put("🙀", Boolean.TRUE); + emojiTrie.put("😿", Boolean.TRUE); + emojiTrie.put("😾", Boolean.TRUE); + emojiTrie.put("🙈", Boolean.TRUE); + emojiTrie.put("🙉", Boolean.TRUE); + emojiTrie.put("🙊", Boolean.TRUE); + emojiTrie.put("💌", Boolean.TRUE); + emojiTrie.put("💘", Boolean.TRUE); + emojiTrie.put("💝", Boolean.TRUE); + emojiTrie.put("💖", Boolean.TRUE); + emojiTrie.put("💗", Boolean.TRUE); + emojiTrie.put("💓", Boolean.TRUE); + emojiTrie.put("💞", Boolean.TRUE); + emojiTrie.put("💕", Boolean.TRUE); + emojiTrie.put("💟", Boolean.TRUE); + emojiTrie.put("❣️", Boolean.TRUE); + emojiTrie.put("❣", Boolean.TRUE); + emojiTrie.put("💔", Boolean.TRUE); + emojiTrie.put("❤️‍🔥", Boolean.TRUE); + emojiTrie.put("❤‍🔥", Boolean.TRUE); + emojiTrie.put("❤️‍🩹", Boolean.TRUE); + emojiTrie.put("❤‍🩹", Boolean.TRUE); + emojiTrie.put("❤️", Boolean.TRUE); + emojiTrie.put("❤", Boolean.TRUE); + emojiTrie.put("🩷", Boolean.TRUE); + emojiTrie.put("🧡", Boolean.TRUE); + emojiTrie.put("💛", Boolean.TRUE); + emojiTrie.put("💚", Boolean.TRUE); + emojiTrie.put("💙", Boolean.TRUE); + emojiTrie.put("🩵", Boolean.TRUE); + emojiTrie.put("💜", Boolean.TRUE); + emojiTrie.put("🤎", Boolean.TRUE); + emojiTrie.put("🖤", Boolean.TRUE); + emojiTrie.put("🩶", Boolean.TRUE); + emojiTrie.put("🤍", Boolean.TRUE); + emojiTrie.put("💋", Boolean.TRUE); + emojiTrie.put("💯", Boolean.TRUE); + emojiTrie.put("💢", Boolean.TRUE); + emojiTrie.put("💥", Boolean.TRUE); + emojiTrie.put("💫", Boolean.TRUE); + emojiTrie.put("💦", Boolean.TRUE); + emojiTrie.put("💨", Boolean.TRUE); + emojiTrie.put("🕳️", Boolean.TRUE); + emojiTrie.put("🕳", Boolean.TRUE); + emojiTrie.put("💬", Boolean.TRUE); + emojiTrie.put("👁️‍🗨️", Boolean.TRUE); + emojiTrie.put("👁‍🗨️", Boolean.TRUE); + emojiTrie.put("👁️‍🗨", Boolean.TRUE); + emojiTrie.put("👁‍🗨", Boolean.TRUE); + emojiTrie.put("🗨️", Boolean.TRUE); + emojiTrie.put("🗨", Boolean.TRUE); + emojiTrie.put("🗯️", Boolean.TRUE); + emojiTrie.put("🗯", Boolean.TRUE); + emojiTrie.put("💭", Boolean.TRUE); + emojiTrie.put("💤", Boolean.TRUE); + emojiTrie.put("👋", Boolean.TRUE); + emojiTrie.put("👋🏻", Boolean.TRUE); + emojiTrie.put("👋🏼", Boolean.TRUE); + emojiTrie.put("👋🏽", Boolean.TRUE); + emojiTrie.put("👋🏾", Boolean.TRUE); + emojiTrie.put("👋🏿", Boolean.TRUE); + emojiTrie.put("🤚", Boolean.TRUE); + emojiTrie.put("🤚🏻", Boolean.TRUE); + emojiTrie.put("🤚🏼", Boolean.TRUE); + emojiTrie.put("🤚🏽", Boolean.TRUE); + emojiTrie.put("🤚🏾", Boolean.TRUE); + emojiTrie.put("🤚🏿", Boolean.TRUE); + emojiTrie.put("🖐️", Boolean.TRUE); + emojiTrie.put("🖐", Boolean.TRUE); + emojiTrie.put("🖐🏻", Boolean.TRUE); + emojiTrie.put("🖐🏼", Boolean.TRUE); + emojiTrie.put("🖐🏽", Boolean.TRUE); + emojiTrie.put("🖐🏾", Boolean.TRUE); + emojiTrie.put("🖐🏿", Boolean.TRUE); + emojiTrie.put("✋", Boolean.TRUE); + emojiTrie.put("✋🏻", Boolean.TRUE); + emojiTrie.put("✋🏼", Boolean.TRUE); + emojiTrie.put("✋🏽", Boolean.TRUE); + emojiTrie.put("✋🏾", Boolean.TRUE); + emojiTrie.put("✋🏿", Boolean.TRUE); + emojiTrie.put("🖖", Boolean.TRUE); + emojiTrie.put("🖖🏻", Boolean.TRUE); + emojiTrie.put("🖖🏼", Boolean.TRUE); + emojiTrie.put("🖖🏽", Boolean.TRUE); + emojiTrie.put("🖖🏾", Boolean.TRUE); + emojiTrie.put("🖖🏿", Boolean.TRUE); + emojiTrie.put("🫱", Boolean.TRUE); + emojiTrie.put("🫱🏻", Boolean.TRUE); + emojiTrie.put("🫱🏼", Boolean.TRUE); + emojiTrie.put("🫱🏽", Boolean.TRUE); + emojiTrie.put("🫱🏾", Boolean.TRUE); + emojiTrie.put("🫱🏿", Boolean.TRUE); + emojiTrie.put("🫲", Boolean.TRUE); + emojiTrie.put("🫲🏻", Boolean.TRUE); + emojiTrie.put("🫲🏼", Boolean.TRUE); + emojiTrie.put("🫲🏽", Boolean.TRUE); + emojiTrie.put("🫲🏾", Boolean.TRUE); + emojiTrie.put("🫲🏿", Boolean.TRUE); + emojiTrie.put("🫳", Boolean.TRUE); + emojiTrie.put("🫳🏻", Boolean.TRUE); + emojiTrie.put("🫳🏼", Boolean.TRUE); + emojiTrie.put("🫳🏽", Boolean.TRUE); + emojiTrie.put("🫳🏾", Boolean.TRUE); + emojiTrie.put("🫳🏿", Boolean.TRUE); + emojiTrie.put("🫴", Boolean.TRUE); + emojiTrie.put("🫴🏻", Boolean.TRUE); + emojiTrie.put("🫴🏼", Boolean.TRUE); + emojiTrie.put("🫴🏽", Boolean.TRUE); + emojiTrie.put("🫴🏾", Boolean.TRUE); + emojiTrie.put("🫴🏿", Boolean.TRUE); + emojiTrie.put("🫷", Boolean.TRUE); + emojiTrie.put("🫷🏻", Boolean.TRUE); + emojiTrie.put("🫷🏼", Boolean.TRUE); + emojiTrie.put("🫷🏽", Boolean.TRUE); + emojiTrie.put("🫷🏾", Boolean.TRUE); + emojiTrie.put("🫷🏿", Boolean.TRUE); + emojiTrie.put("🫸", Boolean.TRUE); + emojiTrie.put("🫸🏻", Boolean.TRUE); + emojiTrie.put("🫸🏼", Boolean.TRUE); + emojiTrie.put("🫸🏽", Boolean.TRUE); + emojiTrie.put("🫸🏾", Boolean.TRUE); + emojiTrie.put("🫸🏿", Boolean.TRUE); + emojiTrie.put("👌", Boolean.TRUE); + emojiTrie.put("👌🏻", Boolean.TRUE); + emojiTrie.put("👌🏼", Boolean.TRUE); + emojiTrie.put("👌🏽", Boolean.TRUE); + emojiTrie.put("👌🏾", Boolean.TRUE); + emojiTrie.put("👌🏿", Boolean.TRUE); + emojiTrie.put("🤌", Boolean.TRUE); + emojiTrie.put("🤌🏻", Boolean.TRUE); + emojiTrie.put("🤌🏼", Boolean.TRUE); + emojiTrie.put("🤌🏽", Boolean.TRUE); + emojiTrie.put("🤌🏾", Boolean.TRUE); + emojiTrie.put("🤌🏿", Boolean.TRUE); + emojiTrie.put("🤏", Boolean.TRUE); + emojiTrie.put("🤏🏻", Boolean.TRUE); + emojiTrie.put("🤏🏼", Boolean.TRUE); + emojiTrie.put("🤏🏽", Boolean.TRUE); + emojiTrie.put("🤏🏾", Boolean.TRUE); + emojiTrie.put("🤏🏿", Boolean.TRUE); + emojiTrie.put("✌️", Boolean.TRUE); + emojiTrie.put("✌", Boolean.TRUE); + emojiTrie.put("✌🏻", Boolean.TRUE); + emojiTrie.put("✌🏼", Boolean.TRUE); + emojiTrie.put("✌🏽", Boolean.TRUE); + emojiTrie.put("✌🏾", Boolean.TRUE); + emojiTrie.put("✌🏿", Boolean.TRUE); + emojiTrie.put("🤞", Boolean.TRUE); + emojiTrie.put("🤞🏻", Boolean.TRUE); + emojiTrie.put("🤞🏼", Boolean.TRUE); + emojiTrie.put("🤞🏽", Boolean.TRUE); + emojiTrie.put("🤞🏾", Boolean.TRUE); + emojiTrie.put("🤞🏿", Boolean.TRUE); + emojiTrie.put("🫰", Boolean.TRUE); + emojiTrie.put("🫰🏻", Boolean.TRUE); + emojiTrie.put("🫰🏼", Boolean.TRUE); + emojiTrie.put("🫰🏽", Boolean.TRUE); + emojiTrie.put("🫰🏾", Boolean.TRUE); + emojiTrie.put("🫰🏿", Boolean.TRUE); + emojiTrie.put("🤟", Boolean.TRUE); + emojiTrie.put("🤟🏻", Boolean.TRUE); + emojiTrie.put("🤟🏼", Boolean.TRUE); + emojiTrie.put("🤟🏽", Boolean.TRUE); + emojiTrie.put("🤟🏾", Boolean.TRUE); + emojiTrie.put("🤟🏿", Boolean.TRUE); + emojiTrie.put("🤘", Boolean.TRUE); + emojiTrie.put("🤘🏻", Boolean.TRUE); + emojiTrie.put("🤘🏼", Boolean.TRUE); + emojiTrie.put("🤘🏽", Boolean.TRUE); + emojiTrie.put("🤘🏾", Boolean.TRUE); + emojiTrie.put("🤘🏿", Boolean.TRUE); + emojiTrie.put("🤙", Boolean.TRUE); + emojiTrie.put("🤙🏻", Boolean.TRUE); + emojiTrie.put("🤙🏼", Boolean.TRUE); + emojiTrie.put("🤙🏽", Boolean.TRUE); + emojiTrie.put("🤙🏾", Boolean.TRUE); + emojiTrie.put("🤙🏿", Boolean.TRUE); + emojiTrie.put("👈", Boolean.TRUE); + emojiTrie.put("👈🏻", Boolean.TRUE); + emojiTrie.put("👈🏼", Boolean.TRUE); + emojiTrie.put("👈🏽", Boolean.TRUE); + emojiTrie.put("👈🏾", Boolean.TRUE); + emojiTrie.put("👈🏿", Boolean.TRUE); + emojiTrie.put("👉", Boolean.TRUE); + emojiTrie.put("👉🏻", Boolean.TRUE); + emojiTrie.put("👉🏼", Boolean.TRUE); + emojiTrie.put("👉🏽", Boolean.TRUE); + emojiTrie.put("👉🏾", Boolean.TRUE); + emojiTrie.put("👉🏿", Boolean.TRUE); + emojiTrie.put("👆", Boolean.TRUE); + emojiTrie.put("👆🏻", Boolean.TRUE); + emojiTrie.put("👆🏼", Boolean.TRUE); + emojiTrie.put("👆🏽", Boolean.TRUE); + emojiTrie.put("👆🏾", Boolean.TRUE); + emojiTrie.put("👆🏿", Boolean.TRUE); + emojiTrie.put("🖕", Boolean.TRUE); + emojiTrie.put("🖕🏻", Boolean.TRUE); + emojiTrie.put("🖕🏼", Boolean.TRUE); + emojiTrie.put("🖕🏽", Boolean.TRUE); + emojiTrie.put("🖕🏾", Boolean.TRUE); + emojiTrie.put("🖕🏿", Boolean.TRUE); + emojiTrie.put("👇", Boolean.TRUE); + emojiTrie.put("👇🏻", Boolean.TRUE); + emojiTrie.put("👇🏼", Boolean.TRUE); + emojiTrie.put("👇🏽", Boolean.TRUE); + emojiTrie.put("👇🏾", Boolean.TRUE); + emojiTrie.put("👇🏿", Boolean.TRUE); + emojiTrie.put("☝️", Boolean.TRUE); + emojiTrie.put("☝", Boolean.TRUE); + emojiTrie.put("☝🏻", Boolean.TRUE); + emojiTrie.put("☝🏼", Boolean.TRUE); + emojiTrie.put("☝🏽", Boolean.TRUE); + emojiTrie.put("☝🏾", Boolean.TRUE); + emojiTrie.put("☝🏿", Boolean.TRUE); + emojiTrie.put("🫵", Boolean.TRUE); + emojiTrie.put("🫵🏻", Boolean.TRUE); + emojiTrie.put("🫵🏼", Boolean.TRUE); + emojiTrie.put("🫵🏽", Boolean.TRUE); + emojiTrie.put("🫵🏾", Boolean.TRUE); + emojiTrie.put("🫵🏿", Boolean.TRUE); + emojiTrie.put("👍", Boolean.TRUE); + emojiTrie.put("👍🏻", Boolean.TRUE); + emojiTrie.put("👍🏼", Boolean.TRUE); + emojiTrie.put("👍🏽", Boolean.TRUE); + emojiTrie.put("👍🏾", Boolean.TRUE); + emojiTrie.put("👍🏿", Boolean.TRUE); + emojiTrie.put("👎", Boolean.TRUE); + emojiTrie.put("👎🏻", Boolean.TRUE); + emojiTrie.put("👎🏼", Boolean.TRUE); + emojiTrie.put("👎🏽", Boolean.TRUE); + emojiTrie.put("👎🏾", Boolean.TRUE); + emojiTrie.put("👎🏿", Boolean.TRUE); + emojiTrie.put("✊", Boolean.TRUE); + emojiTrie.put("✊🏻", Boolean.TRUE); + emojiTrie.put("✊🏼", Boolean.TRUE); + emojiTrie.put("✊🏽", Boolean.TRUE); + emojiTrie.put("✊🏾", Boolean.TRUE); + emojiTrie.put("✊🏿", Boolean.TRUE); + emojiTrie.put("👊", Boolean.TRUE); + emojiTrie.put("👊🏻", Boolean.TRUE); + emojiTrie.put("👊🏼", Boolean.TRUE); + emojiTrie.put("👊🏽", Boolean.TRUE); + emojiTrie.put("👊🏾", Boolean.TRUE); + emojiTrie.put("👊🏿", Boolean.TRUE); + emojiTrie.put("🤛", Boolean.TRUE); + emojiTrie.put("🤛🏻", Boolean.TRUE); + emojiTrie.put("🤛🏼", Boolean.TRUE); + emojiTrie.put("🤛🏽", Boolean.TRUE); + emojiTrie.put("🤛🏾", Boolean.TRUE); + emojiTrie.put("🤛🏿", Boolean.TRUE); + emojiTrie.put("🤜", Boolean.TRUE); + emojiTrie.put("🤜🏻", Boolean.TRUE); + emojiTrie.put("🤜🏼", Boolean.TRUE); + emojiTrie.put("🤜🏽", Boolean.TRUE); + emojiTrie.put("🤜🏾", Boolean.TRUE); + emojiTrie.put("🤜🏿", Boolean.TRUE); + emojiTrie.put("👏", Boolean.TRUE); + emojiTrie.put("👏🏻", Boolean.TRUE); + emojiTrie.put("👏🏼", Boolean.TRUE); + emojiTrie.put("👏🏽", Boolean.TRUE); + emojiTrie.put("👏🏾", Boolean.TRUE); + emojiTrie.put("👏🏿", Boolean.TRUE); + emojiTrie.put("🙌", Boolean.TRUE); + emojiTrie.put("🙌🏻", Boolean.TRUE); + emojiTrie.put("🙌🏼", Boolean.TRUE); + emojiTrie.put("🙌🏽", Boolean.TRUE); + emojiTrie.put("🙌🏾", Boolean.TRUE); + emojiTrie.put("🙌🏿", Boolean.TRUE); + emojiTrie.put("🫶", Boolean.TRUE); + emojiTrie.put("🫶🏻", Boolean.TRUE); + emojiTrie.put("🫶🏼", Boolean.TRUE); + emojiTrie.put("🫶🏽", Boolean.TRUE); + emojiTrie.put("🫶🏾", Boolean.TRUE); + emojiTrie.put("🫶🏿", Boolean.TRUE); + emojiTrie.put("👐", Boolean.TRUE); + emojiTrie.put("👐🏻", Boolean.TRUE); + emojiTrie.put("👐🏼", Boolean.TRUE); + emojiTrie.put("👐🏽", Boolean.TRUE); + emojiTrie.put("👐🏾", Boolean.TRUE); + emojiTrie.put("👐🏿", Boolean.TRUE); + emojiTrie.put("🤲", Boolean.TRUE); + emojiTrie.put("🤲🏻", Boolean.TRUE); + emojiTrie.put("🤲🏼", Boolean.TRUE); + emojiTrie.put("🤲🏽", Boolean.TRUE); + emojiTrie.put("🤲🏾", Boolean.TRUE); + emojiTrie.put("🤲🏿", Boolean.TRUE); + emojiTrie.put("🤝", Boolean.TRUE); + emojiTrie.put("🤝🏻", Boolean.TRUE); + emojiTrie.put("🤝🏼", Boolean.TRUE); + emojiTrie.put("🤝🏽", Boolean.TRUE); + emojiTrie.put("🤝🏾", Boolean.TRUE); + emojiTrie.put("🤝🏿", Boolean.TRUE); + emojiTrie.put("🫱🏻‍🫲🏼", Boolean.TRUE); + emojiTrie.put("🫱🏻‍🫲🏽", Boolean.TRUE); + emojiTrie.put("🫱🏻‍🫲🏾", Boolean.TRUE); + emojiTrie.put("🫱🏻‍🫲🏿", Boolean.TRUE); + emojiTrie.put("🫱🏼‍🫲🏻", Boolean.TRUE); + emojiTrie.put("🫱🏼‍🫲🏽", Boolean.TRUE); + emojiTrie.put("🫱🏼‍🫲🏾", Boolean.TRUE); + emojiTrie.put("🫱🏼‍🫲🏿", Boolean.TRUE); + emojiTrie.put("🫱🏽‍🫲🏻", Boolean.TRUE); + emojiTrie.put("🫱🏽‍🫲🏼", Boolean.TRUE); + emojiTrie.put("🫱🏽‍🫲🏾", Boolean.TRUE); + emojiTrie.put("🫱🏽‍🫲🏿", Boolean.TRUE); + emojiTrie.put("🫱🏾‍🫲🏻", Boolean.TRUE); + emojiTrie.put("🫱🏾‍🫲🏼", Boolean.TRUE); + emojiTrie.put("🫱🏾‍🫲🏽", Boolean.TRUE); + emojiTrie.put("🫱🏾‍🫲🏿", Boolean.TRUE); + emojiTrie.put("🫱🏿‍🫲🏻", Boolean.TRUE); + emojiTrie.put("🫱🏿‍🫲🏼", Boolean.TRUE); + emojiTrie.put("🫱🏿‍🫲🏽", Boolean.TRUE); + emojiTrie.put("🫱🏿‍🫲🏾", Boolean.TRUE); + emojiTrie.put("🙏", Boolean.TRUE); + emojiTrie.put("🙏🏻", Boolean.TRUE); + emojiTrie.put("🙏🏼", Boolean.TRUE); + emojiTrie.put("🙏🏽", Boolean.TRUE); + emojiTrie.put("🙏🏾", Boolean.TRUE); + emojiTrie.put("🙏🏿", Boolean.TRUE); + emojiTrie.put("✍️", Boolean.TRUE); + emojiTrie.put("✍", Boolean.TRUE); + emojiTrie.put("✍🏻", Boolean.TRUE); + emojiTrie.put("✍🏼", Boolean.TRUE); + emojiTrie.put("✍🏽", Boolean.TRUE); + emojiTrie.put("✍🏾", Boolean.TRUE); + emojiTrie.put("✍🏿", Boolean.TRUE); + emojiTrie.put("💅", Boolean.TRUE); + emojiTrie.put("💅🏻", Boolean.TRUE); + emojiTrie.put("💅🏼", Boolean.TRUE); + emojiTrie.put("💅🏽", Boolean.TRUE); + emojiTrie.put("💅🏾", Boolean.TRUE); + emojiTrie.put("💅🏿", Boolean.TRUE); + emojiTrie.put("🤳", Boolean.TRUE); + emojiTrie.put("🤳🏻", Boolean.TRUE); + emojiTrie.put("🤳🏼", Boolean.TRUE); + emojiTrie.put("🤳🏽", Boolean.TRUE); + emojiTrie.put("🤳🏾", Boolean.TRUE); + emojiTrie.put("🤳🏿", Boolean.TRUE); + emojiTrie.put("💪", Boolean.TRUE); + emojiTrie.put("💪🏻", Boolean.TRUE); + emojiTrie.put("💪🏼", Boolean.TRUE); + emojiTrie.put("💪🏽", Boolean.TRUE); + emojiTrie.put("💪🏾", Boolean.TRUE); + emojiTrie.put("💪🏿", Boolean.TRUE); + emojiTrie.put("🦾", Boolean.TRUE); + emojiTrie.put("🦿", Boolean.TRUE); + emojiTrie.put("🦵", Boolean.TRUE); + emojiTrie.put("🦵🏻", Boolean.TRUE); + emojiTrie.put("🦵🏼", Boolean.TRUE); + emojiTrie.put("🦵🏽", Boolean.TRUE); + emojiTrie.put("🦵🏾", Boolean.TRUE); + emojiTrie.put("🦵🏿", Boolean.TRUE); + emojiTrie.put("🦶", Boolean.TRUE); + emojiTrie.put("🦶🏻", Boolean.TRUE); + emojiTrie.put("🦶🏼", Boolean.TRUE); + emojiTrie.put("🦶🏽", Boolean.TRUE); + emojiTrie.put("🦶🏾", Boolean.TRUE); + emojiTrie.put("🦶🏿", Boolean.TRUE); + emojiTrie.put("👂", Boolean.TRUE); + emojiTrie.put("👂🏻", Boolean.TRUE); + emojiTrie.put("👂🏼", Boolean.TRUE); + emojiTrie.put("👂🏽", Boolean.TRUE); + emojiTrie.put("👂🏾", Boolean.TRUE); + emojiTrie.put("👂🏿", Boolean.TRUE); + emojiTrie.put("🦻", Boolean.TRUE); + emojiTrie.put("🦻🏻", Boolean.TRUE); + emojiTrie.put("🦻🏼", Boolean.TRUE); + emojiTrie.put("🦻🏽", Boolean.TRUE); + emojiTrie.put("🦻🏾", Boolean.TRUE); + emojiTrie.put("🦻🏿", Boolean.TRUE); + emojiTrie.put("👃", Boolean.TRUE); + emojiTrie.put("👃🏻", Boolean.TRUE); + emojiTrie.put("👃🏼", Boolean.TRUE); + emojiTrie.put("👃🏽", Boolean.TRUE); + emojiTrie.put("👃🏾", Boolean.TRUE); + emojiTrie.put("👃🏿", Boolean.TRUE); + emojiTrie.put("🧠", Boolean.TRUE); + emojiTrie.put("🫀", Boolean.TRUE); + emojiTrie.put("🫁", Boolean.TRUE); + emojiTrie.put("🦷", Boolean.TRUE); + emojiTrie.put("🦴", Boolean.TRUE); + emojiTrie.put("👀", Boolean.TRUE); + emojiTrie.put("👁️", Boolean.TRUE); + emojiTrie.put("👁", Boolean.TRUE); + emojiTrie.put("👅", Boolean.TRUE); + emojiTrie.put("👄", Boolean.TRUE); + emojiTrie.put("🫦", Boolean.TRUE); + emojiTrie.put("👶", Boolean.TRUE); + emojiTrie.put("👶🏻", Boolean.TRUE); + emojiTrie.put("👶🏼", Boolean.TRUE); + emojiTrie.put("👶🏽", Boolean.TRUE); + emojiTrie.put("👶🏾", Boolean.TRUE); + emojiTrie.put("👶🏿", Boolean.TRUE); + emojiTrie.put("🧒", Boolean.TRUE); + emojiTrie.put("🧒🏻", Boolean.TRUE); + emojiTrie.put("🧒🏼", Boolean.TRUE); + emojiTrie.put("🧒🏽", Boolean.TRUE); + emojiTrie.put("🧒🏾", Boolean.TRUE); + emojiTrie.put("🧒🏿", Boolean.TRUE); + emojiTrie.put("👦", Boolean.TRUE); + emojiTrie.put("👦🏻", Boolean.TRUE); + emojiTrie.put("👦🏼", Boolean.TRUE); + emojiTrie.put("👦🏽", Boolean.TRUE); + emojiTrie.put("👦🏾", Boolean.TRUE); + emojiTrie.put("👦🏿", Boolean.TRUE); + emojiTrie.put("👧", Boolean.TRUE); + emojiTrie.put("👧🏻", Boolean.TRUE); + emojiTrie.put("👧🏼", Boolean.TRUE); + emojiTrie.put("👧🏽", Boolean.TRUE); + emojiTrie.put("👧🏾", Boolean.TRUE); + emojiTrie.put("👧🏿", Boolean.TRUE); + emojiTrie.put("🧑", Boolean.TRUE); + emojiTrie.put("🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏿", Boolean.TRUE); + emojiTrie.put("👱", Boolean.TRUE); + emojiTrie.put("👱🏻", Boolean.TRUE); + emojiTrie.put("👱🏼", Boolean.TRUE); + emojiTrie.put("👱🏽", Boolean.TRUE); + emojiTrie.put("👱🏾", Boolean.TRUE); + emojiTrie.put("👱🏿", Boolean.TRUE); + emojiTrie.put("👨", Boolean.TRUE); + emojiTrie.put("👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏿", Boolean.TRUE); + emojiTrie.put("🧔", Boolean.TRUE); + emojiTrie.put("🧔🏻", Boolean.TRUE); + emojiTrie.put("🧔🏼", Boolean.TRUE); + emojiTrie.put("🧔🏽", Boolean.TRUE); + emojiTrie.put("🧔🏾", Boolean.TRUE); + emojiTrie.put("🧔🏿", Boolean.TRUE); + emojiTrie.put("🧔‍♂️", Boolean.TRUE); + emojiTrie.put("🧔‍♂", Boolean.TRUE); + emojiTrie.put("🧔🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧔🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧔🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧔🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧔🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧔🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧔🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧔🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧔🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧔🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧔‍♀️", Boolean.TRUE); + emojiTrie.put("🧔‍♀", Boolean.TRUE); + emojiTrie.put("🧔🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧔🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧔🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧔🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧔🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧔🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧔🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧔🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧔🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧔🏿‍♀", Boolean.TRUE); + emojiTrie.put("👨‍🦰", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦰", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦰", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦰", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦰", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦰", Boolean.TRUE); + emojiTrie.put("👨‍🦱", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦱", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦱", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦱", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦱", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦱", Boolean.TRUE); + emojiTrie.put("👨‍🦳", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦳", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦳", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦳", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦳", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦳", Boolean.TRUE); + emojiTrie.put("👨‍🦲", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦲", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦲", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦲", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦲", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦲", Boolean.TRUE); + emojiTrie.put("👩", Boolean.TRUE); + emojiTrie.put("👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏿", Boolean.TRUE); + emojiTrie.put("👩‍🦰", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦰", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦰", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦰", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦰", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦰", Boolean.TRUE); + emojiTrie.put("🧑‍🦰", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦰", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦰", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦰", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦰", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦰", Boolean.TRUE); + emojiTrie.put("👩‍🦱", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦱", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦱", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦱", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦱", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦱", Boolean.TRUE); + emojiTrie.put("🧑‍🦱", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦱", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦱", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦱", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦱", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦱", Boolean.TRUE); + emojiTrie.put("👩‍🦳", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦳", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦳", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦳", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦳", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦳", Boolean.TRUE); + emojiTrie.put("🧑‍🦳", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦳", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦳", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦳", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦳", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦳", Boolean.TRUE); + emojiTrie.put("👩‍🦲", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦲", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦲", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦲", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦲", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦲", Boolean.TRUE); + emojiTrie.put("🧑‍🦲", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦲", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦲", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦲", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦲", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦲", Boolean.TRUE); + emojiTrie.put("👱‍♀️", Boolean.TRUE); + emojiTrie.put("👱‍♀", Boolean.TRUE); + emojiTrie.put("👱🏻‍♀️", Boolean.TRUE); + emojiTrie.put("👱🏻‍♀", Boolean.TRUE); + emojiTrie.put("👱🏼‍♀️", Boolean.TRUE); + emojiTrie.put("👱🏼‍♀", Boolean.TRUE); + emojiTrie.put("👱🏽‍♀️", Boolean.TRUE); + emojiTrie.put("👱🏽‍♀", Boolean.TRUE); + emojiTrie.put("👱🏾‍♀️", Boolean.TRUE); + emojiTrie.put("👱🏾‍♀", Boolean.TRUE); + emojiTrie.put("👱🏿‍♀️", Boolean.TRUE); + emojiTrie.put("👱🏿‍♀", Boolean.TRUE); + emojiTrie.put("👱‍♂️", Boolean.TRUE); + emojiTrie.put("👱‍♂", Boolean.TRUE); + emojiTrie.put("👱🏻‍♂️", Boolean.TRUE); + emojiTrie.put("👱🏻‍♂", Boolean.TRUE); + emojiTrie.put("👱🏼‍♂️", Boolean.TRUE); + emojiTrie.put("👱🏼‍♂", Boolean.TRUE); + emojiTrie.put("👱🏽‍♂️", Boolean.TRUE); + emojiTrie.put("👱🏽‍♂", Boolean.TRUE); + emojiTrie.put("👱🏾‍♂️", Boolean.TRUE); + emojiTrie.put("👱🏾‍♂", Boolean.TRUE); + emojiTrie.put("👱🏿‍♂️", Boolean.TRUE); + emojiTrie.put("👱🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧓", Boolean.TRUE); + emojiTrie.put("🧓🏻", Boolean.TRUE); + emojiTrie.put("🧓🏼", Boolean.TRUE); + emojiTrie.put("🧓🏽", Boolean.TRUE); + emojiTrie.put("🧓🏾", Boolean.TRUE); + emojiTrie.put("🧓🏿", Boolean.TRUE); + emojiTrie.put("👴", Boolean.TRUE); + emojiTrie.put("👴🏻", Boolean.TRUE); + emojiTrie.put("👴🏼", Boolean.TRUE); + emojiTrie.put("👴🏽", Boolean.TRUE); + emojiTrie.put("👴🏾", Boolean.TRUE); + emojiTrie.put("👴🏿", Boolean.TRUE); + emojiTrie.put("👵", Boolean.TRUE); + emojiTrie.put("👵🏻", Boolean.TRUE); + emojiTrie.put("👵🏼", Boolean.TRUE); + emojiTrie.put("👵🏽", Boolean.TRUE); + emojiTrie.put("👵🏾", Boolean.TRUE); + emojiTrie.put("👵🏿", Boolean.TRUE); + emojiTrie.put("🙍", Boolean.TRUE); + emojiTrie.put("🙍🏻", Boolean.TRUE); + emojiTrie.put("🙍🏼", Boolean.TRUE); + emojiTrie.put("🙍🏽", Boolean.TRUE); + emojiTrie.put("🙍🏾", Boolean.TRUE); + emojiTrie.put("🙍🏿", Boolean.TRUE); + emojiTrie.put("🙍‍♂️", Boolean.TRUE); + emojiTrie.put("🙍‍♂", Boolean.TRUE); + emojiTrie.put("🙍🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🙍🏻‍♂", Boolean.TRUE); + emojiTrie.put("🙍🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🙍🏼‍♂", Boolean.TRUE); + emojiTrie.put("🙍🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🙍🏽‍♂", Boolean.TRUE); + emojiTrie.put("🙍🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🙍🏾‍♂", Boolean.TRUE); + emojiTrie.put("🙍🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🙍🏿‍♂", Boolean.TRUE); + emojiTrie.put("🙍‍♀️", Boolean.TRUE); + emojiTrie.put("🙍‍♀", Boolean.TRUE); + emojiTrie.put("🙍🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🙍🏻‍♀", Boolean.TRUE); + emojiTrie.put("🙍🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🙍🏼‍♀", Boolean.TRUE); + emojiTrie.put("🙍🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🙍🏽‍♀", Boolean.TRUE); + emojiTrie.put("🙍🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🙍🏾‍♀", Boolean.TRUE); + emojiTrie.put("🙍🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🙍🏿‍♀", Boolean.TRUE); + emojiTrie.put("🙎", Boolean.TRUE); + emojiTrie.put("🙎🏻", Boolean.TRUE); + emojiTrie.put("🙎🏼", Boolean.TRUE); + emojiTrie.put("🙎🏽", Boolean.TRUE); + emojiTrie.put("🙎🏾", Boolean.TRUE); + emojiTrie.put("🙎🏿", Boolean.TRUE); + emojiTrie.put("🙎‍♂️", Boolean.TRUE); + emojiTrie.put("🙎‍♂", Boolean.TRUE); + emojiTrie.put("🙎🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🙎🏻‍♂", Boolean.TRUE); + emojiTrie.put("🙎🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🙎🏼‍♂", Boolean.TRUE); + emojiTrie.put("🙎🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🙎🏽‍♂", Boolean.TRUE); + emojiTrie.put("🙎🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🙎🏾‍♂", Boolean.TRUE); + emojiTrie.put("🙎🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🙎🏿‍♂", Boolean.TRUE); + emojiTrie.put("🙎‍♀️", Boolean.TRUE); + emojiTrie.put("🙎‍♀", Boolean.TRUE); + emojiTrie.put("🙎🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🙎🏻‍♀", Boolean.TRUE); + emojiTrie.put("🙎🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🙎🏼‍♀", Boolean.TRUE); + emojiTrie.put("🙎🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🙎🏽‍♀", Boolean.TRUE); + emojiTrie.put("🙎🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🙎🏾‍♀", Boolean.TRUE); + emojiTrie.put("🙎🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🙎🏿‍♀", Boolean.TRUE); + emojiTrie.put("🙅", Boolean.TRUE); + emojiTrie.put("🙅🏻", Boolean.TRUE); + emojiTrie.put("🙅🏼", Boolean.TRUE); + emojiTrie.put("🙅🏽", Boolean.TRUE); + emojiTrie.put("🙅🏾", Boolean.TRUE); + emojiTrie.put("🙅🏿", Boolean.TRUE); + emojiTrie.put("🙅‍♂️", Boolean.TRUE); + emojiTrie.put("🙅‍♂", Boolean.TRUE); + emojiTrie.put("🙅🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🙅🏻‍♂", Boolean.TRUE); + emojiTrie.put("🙅🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🙅🏼‍♂", Boolean.TRUE); + emojiTrie.put("🙅🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🙅🏽‍♂", Boolean.TRUE); + emojiTrie.put("🙅🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🙅🏾‍♂", Boolean.TRUE); + emojiTrie.put("🙅🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🙅🏿‍♂", Boolean.TRUE); + emojiTrie.put("🙅‍♀️", Boolean.TRUE); + emojiTrie.put("🙅‍♀", Boolean.TRUE); + emojiTrie.put("🙅🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🙅🏻‍♀", Boolean.TRUE); + emojiTrie.put("🙅🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🙅🏼‍♀", Boolean.TRUE); + emojiTrie.put("🙅🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🙅🏽‍♀", Boolean.TRUE); + emojiTrie.put("🙅🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🙅🏾‍♀", Boolean.TRUE); + emojiTrie.put("🙅🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🙅🏿‍♀", Boolean.TRUE); + emojiTrie.put("🙆", Boolean.TRUE); + emojiTrie.put("🙆🏻", Boolean.TRUE); + emojiTrie.put("🙆🏼", Boolean.TRUE); + emojiTrie.put("🙆🏽", Boolean.TRUE); + emojiTrie.put("🙆🏾", Boolean.TRUE); + emojiTrie.put("🙆🏿", Boolean.TRUE); + emojiTrie.put("🙆‍♂️", Boolean.TRUE); + emojiTrie.put("🙆‍♂", Boolean.TRUE); + emojiTrie.put("🙆🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🙆🏻‍♂", Boolean.TRUE); + emojiTrie.put("🙆🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🙆🏼‍♂", Boolean.TRUE); + emojiTrie.put("🙆🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🙆🏽‍♂", Boolean.TRUE); + emojiTrie.put("🙆🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🙆🏾‍♂", Boolean.TRUE); + emojiTrie.put("🙆🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🙆🏿‍♂", Boolean.TRUE); + emojiTrie.put("🙆‍♀️", Boolean.TRUE); + emojiTrie.put("🙆‍♀", Boolean.TRUE); + emojiTrie.put("🙆🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🙆🏻‍♀", Boolean.TRUE); + emojiTrie.put("🙆🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🙆🏼‍♀", Boolean.TRUE); + emojiTrie.put("🙆🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🙆🏽‍♀", Boolean.TRUE); + emojiTrie.put("🙆🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🙆🏾‍♀", Boolean.TRUE); + emojiTrie.put("🙆🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🙆🏿‍♀", Boolean.TRUE); + emojiTrie.put("💁", Boolean.TRUE); + emojiTrie.put("💁🏻", Boolean.TRUE); + emojiTrie.put("💁🏼", Boolean.TRUE); + emojiTrie.put("💁🏽", Boolean.TRUE); + emojiTrie.put("💁🏾", Boolean.TRUE); + emojiTrie.put("💁🏿", Boolean.TRUE); + emojiTrie.put("💁‍♂️", Boolean.TRUE); + emojiTrie.put("💁‍♂", Boolean.TRUE); + emojiTrie.put("💁🏻‍♂️", Boolean.TRUE); + emojiTrie.put("💁🏻‍♂", Boolean.TRUE); + emojiTrie.put("💁🏼‍♂️", Boolean.TRUE); + emojiTrie.put("💁🏼‍♂", Boolean.TRUE); + emojiTrie.put("💁🏽‍♂️", Boolean.TRUE); + emojiTrie.put("💁🏽‍♂", Boolean.TRUE); + emojiTrie.put("💁🏾‍♂️", Boolean.TRUE); + emojiTrie.put("💁🏾‍♂", Boolean.TRUE); + emojiTrie.put("💁🏿‍♂️", Boolean.TRUE); + emojiTrie.put("💁🏿‍♂", Boolean.TRUE); + emojiTrie.put("💁‍♀️", Boolean.TRUE); + emojiTrie.put("💁‍♀", Boolean.TRUE); + emojiTrie.put("💁🏻‍♀️", Boolean.TRUE); + emojiTrie.put("💁🏻‍♀", Boolean.TRUE); + emojiTrie.put("💁🏼‍♀️", Boolean.TRUE); + emojiTrie.put("💁🏼‍♀", Boolean.TRUE); + emojiTrie.put("💁🏽‍♀️", Boolean.TRUE); + emojiTrie.put("💁🏽‍♀", Boolean.TRUE); + emojiTrie.put("💁🏾‍♀️", Boolean.TRUE); + emojiTrie.put("💁🏾‍♀", Boolean.TRUE); + emojiTrie.put("💁🏿‍♀️", Boolean.TRUE); + emojiTrie.put("💁🏿‍♀", Boolean.TRUE); + emojiTrie.put("🙋", Boolean.TRUE); + emojiTrie.put("🙋🏻", Boolean.TRUE); + emojiTrie.put("🙋🏼", Boolean.TRUE); + emojiTrie.put("🙋🏽", Boolean.TRUE); + emojiTrie.put("🙋🏾", Boolean.TRUE); + emojiTrie.put("🙋🏿", Boolean.TRUE); + emojiTrie.put("🙋‍♂️", Boolean.TRUE); + emojiTrie.put("🙋‍♂", Boolean.TRUE); + emojiTrie.put("🙋🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🙋🏻‍♂", Boolean.TRUE); + emojiTrie.put("🙋🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🙋🏼‍♂", Boolean.TRUE); + emojiTrie.put("🙋🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🙋🏽‍♂", Boolean.TRUE); + emojiTrie.put("🙋🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🙋🏾‍♂", Boolean.TRUE); + emojiTrie.put("🙋🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🙋🏿‍♂", Boolean.TRUE); + emojiTrie.put("🙋‍♀️", Boolean.TRUE); + emojiTrie.put("🙋‍♀", Boolean.TRUE); + emojiTrie.put("🙋🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🙋🏻‍♀", Boolean.TRUE); + emojiTrie.put("🙋🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🙋🏼‍♀", Boolean.TRUE); + emojiTrie.put("🙋🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🙋🏽‍♀", Boolean.TRUE); + emojiTrie.put("🙋🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🙋🏾‍♀", Boolean.TRUE); + emojiTrie.put("🙋🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🙋🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧏", Boolean.TRUE); + emojiTrie.put("🧏🏻", Boolean.TRUE); + emojiTrie.put("🧏🏼", Boolean.TRUE); + emojiTrie.put("🧏🏽", Boolean.TRUE); + emojiTrie.put("🧏🏾", Boolean.TRUE); + emojiTrie.put("🧏🏿", Boolean.TRUE); + emojiTrie.put("🧏‍♂️", Boolean.TRUE); + emojiTrie.put("🧏‍♂", Boolean.TRUE); + emojiTrie.put("🧏🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧏🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧏🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧏🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧏🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧏🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧏🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧏🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧏🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧏🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧏‍♀️", Boolean.TRUE); + emojiTrie.put("🧏‍♀", Boolean.TRUE); + emojiTrie.put("🧏🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧏🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧏🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧏🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧏🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧏🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧏🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧏🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧏🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧏🏿‍♀", Boolean.TRUE); + emojiTrie.put("🙇", Boolean.TRUE); + emojiTrie.put("🙇🏻", Boolean.TRUE); + emojiTrie.put("🙇🏼", Boolean.TRUE); + emojiTrie.put("🙇🏽", Boolean.TRUE); + emojiTrie.put("🙇🏾", Boolean.TRUE); + emojiTrie.put("🙇🏿", Boolean.TRUE); + emojiTrie.put("🙇‍♂️", Boolean.TRUE); + emojiTrie.put("🙇‍♂", Boolean.TRUE); + emojiTrie.put("🙇🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🙇🏻‍♂", Boolean.TRUE); + emojiTrie.put("🙇🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🙇🏼‍♂", Boolean.TRUE); + emojiTrie.put("🙇🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🙇🏽‍♂", Boolean.TRUE); + emojiTrie.put("🙇🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🙇🏾‍♂", Boolean.TRUE); + emojiTrie.put("🙇🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🙇🏿‍♂", Boolean.TRUE); + emojiTrie.put("🙇‍♀️", Boolean.TRUE); + emojiTrie.put("🙇‍♀", Boolean.TRUE); + emojiTrie.put("🙇🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🙇🏻‍♀", Boolean.TRUE); + emojiTrie.put("🙇🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🙇🏼‍♀", Boolean.TRUE); + emojiTrie.put("🙇🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🙇🏽‍♀", Boolean.TRUE); + emojiTrie.put("🙇🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🙇🏾‍♀", Boolean.TRUE); + emojiTrie.put("🙇🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🙇🏿‍♀", Boolean.TRUE); + emojiTrie.put("🤦", Boolean.TRUE); + emojiTrie.put("🤦🏻", Boolean.TRUE); + emojiTrie.put("🤦🏼", Boolean.TRUE); + emojiTrie.put("🤦🏽", Boolean.TRUE); + emojiTrie.put("🤦🏾", Boolean.TRUE); + emojiTrie.put("🤦🏿", Boolean.TRUE); + emojiTrie.put("🤦‍♂️", Boolean.TRUE); + emojiTrie.put("🤦‍♂", Boolean.TRUE); + emojiTrie.put("🤦🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🤦🏻‍♂", Boolean.TRUE); + emojiTrie.put("🤦🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🤦🏼‍♂", Boolean.TRUE); + emojiTrie.put("🤦🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🤦🏽‍♂", Boolean.TRUE); + emojiTrie.put("🤦🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🤦🏾‍♂", Boolean.TRUE); + emojiTrie.put("🤦🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🤦🏿‍♂", Boolean.TRUE); + emojiTrie.put("🤦‍♀️", Boolean.TRUE); + emojiTrie.put("🤦‍♀", Boolean.TRUE); + emojiTrie.put("🤦🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🤦🏻‍♀", Boolean.TRUE); + emojiTrie.put("🤦🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🤦🏼‍♀", Boolean.TRUE); + emojiTrie.put("🤦🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🤦🏽‍♀", Boolean.TRUE); + emojiTrie.put("🤦🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🤦🏾‍♀", Boolean.TRUE); + emojiTrie.put("🤦🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🤦🏿‍♀", Boolean.TRUE); + emojiTrie.put("🤷", Boolean.TRUE); + emojiTrie.put("🤷🏻", Boolean.TRUE); + emojiTrie.put("🤷🏼", Boolean.TRUE); + emojiTrie.put("🤷🏽", Boolean.TRUE); + emojiTrie.put("🤷🏾", Boolean.TRUE); + emojiTrie.put("🤷🏿", Boolean.TRUE); + emojiTrie.put("🤷‍♂️", Boolean.TRUE); + emojiTrie.put("🤷‍♂", Boolean.TRUE); + emojiTrie.put("🤷🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🤷🏻‍♂", Boolean.TRUE); + emojiTrie.put("🤷🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🤷🏼‍♂", Boolean.TRUE); + emojiTrie.put("🤷🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🤷🏽‍♂", Boolean.TRUE); + emojiTrie.put("🤷🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🤷🏾‍♂", Boolean.TRUE); + emojiTrie.put("🤷🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🤷🏿‍♂", Boolean.TRUE); + emojiTrie.put("🤷‍♀️", Boolean.TRUE); + emojiTrie.put("🤷‍♀", Boolean.TRUE); + emojiTrie.put("🤷🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🤷🏻‍♀", Boolean.TRUE); + emojiTrie.put("🤷🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🤷🏼‍♀", Boolean.TRUE); + emojiTrie.put("🤷🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🤷🏽‍♀", Boolean.TRUE); + emojiTrie.put("🤷🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🤷🏾‍♀", Boolean.TRUE); + emojiTrie.put("🤷🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🤷🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧑‍⚕️", Boolean.TRUE); + emojiTrie.put("🧑‍⚕", Boolean.TRUE); + emojiTrie.put("🧑🏻‍⚕️", Boolean.TRUE); + emojiTrie.put("🧑🏻‍⚕", Boolean.TRUE); + emojiTrie.put("🧑🏼‍⚕️", Boolean.TRUE); + emojiTrie.put("🧑🏼‍⚕", Boolean.TRUE); + emojiTrie.put("🧑🏽‍⚕️", Boolean.TRUE); + emojiTrie.put("🧑🏽‍⚕", Boolean.TRUE); + emojiTrie.put("🧑🏾‍⚕️", Boolean.TRUE); + emojiTrie.put("🧑🏾‍⚕", Boolean.TRUE); + emojiTrie.put("🧑🏿‍⚕️", Boolean.TRUE); + emojiTrie.put("🧑🏿‍⚕", Boolean.TRUE); + emojiTrie.put("👨‍⚕️", Boolean.TRUE); + emojiTrie.put("👨‍⚕", Boolean.TRUE); + emojiTrie.put("👨🏻‍⚕️", Boolean.TRUE); + emojiTrie.put("👨🏻‍⚕", Boolean.TRUE); + emojiTrie.put("👨🏼‍⚕️", Boolean.TRUE); + emojiTrie.put("👨🏼‍⚕", Boolean.TRUE); + emojiTrie.put("👨🏽‍⚕️", Boolean.TRUE); + emojiTrie.put("👨🏽‍⚕", Boolean.TRUE); + emojiTrie.put("👨🏾‍⚕️", Boolean.TRUE); + emojiTrie.put("👨🏾‍⚕", Boolean.TRUE); + emojiTrie.put("👨🏿‍⚕️", Boolean.TRUE); + emojiTrie.put("👨🏿‍⚕", Boolean.TRUE); + emojiTrie.put("👩‍⚕️", Boolean.TRUE); + emojiTrie.put("👩‍⚕", Boolean.TRUE); + emojiTrie.put("👩🏻‍⚕️", Boolean.TRUE); + emojiTrie.put("👩🏻‍⚕", Boolean.TRUE); + emojiTrie.put("👩🏼‍⚕️", Boolean.TRUE); + emojiTrie.put("👩🏼‍⚕", Boolean.TRUE); + emojiTrie.put("👩🏽‍⚕️", Boolean.TRUE); + emojiTrie.put("👩🏽‍⚕", Boolean.TRUE); + emojiTrie.put("👩🏾‍⚕️", Boolean.TRUE); + emojiTrie.put("👩🏾‍⚕", Boolean.TRUE); + emojiTrie.put("👩🏿‍⚕️", Boolean.TRUE); + emojiTrie.put("👩🏿‍⚕", Boolean.TRUE); + emojiTrie.put("🧑‍🎓", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🎓", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🎓", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🎓", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🎓", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🎓", Boolean.TRUE); + emojiTrie.put("👨‍🎓", Boolean.TRUE); + emojiTrie.put("👨🏻‍🎓", Boolean.TRUE); + emojiTrie.put("👨🏼‍🎓", Boolean.TRUE); + emojiTrie.put("👨🏽‍🎓", Boolean.TRUE); + emojiTrie.put("👨🏾‍🎓", Boolean.TRUE); + emojiTrie.put("👨🏿‍🎓", Boolean.TRUE); + emojiTrie.put("👩‍🎓", Boolean.TRUE); + emojiTrie.put("👩🏻‍🎓", Boolean.TRUE); + emojiTrie.put("👩🏼‍🎓", Boolean.TRUE); + emojiTrie.put("👩🏽‍🎓", Boolean.TRUE); + emojiTrie.put("👩🏾‍🎓", Boolean.TRUE); + emojiTrie.put("👩🏿‍🎓", Boolean.TRUE); + emojiTrie.put("🧑‍🏫", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🏫", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🏫", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🏫", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🏫", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🏫", Boolean.TRUE); + emojiTrie.put("👨‍🏫", Boolean.TRUE); + emojiTrie.put("👨🏻‍🏫", Boolean.TRUE); + emojiTrie.put("👨🏼‍🏫", Boolean.TRUE); + emojiTrie.put("👨🏽‍🏫", Boolean.TRUE); + emojiTrie.put("👨🏾‍🏫", Boolean.TRUE); + emojiTrie.put("👨🏿‍🏫", Boolean.TRUE); + emojiTrie.put("👩‍🏫", Boolean.TRUE); + emojiTrie.put("👩🏻‍🏫", Boolean.TRUE); + emojiTrie.put("👩🏼‍🏫", Boolean.TRUE); + emojiTrie.put("👩🏽‍🏫", Boolean.TRUE); + emojiTrie.put("👩🏾‍🏫", Boolean.TRUE); + emojiTrie.put("👩🏿‍🏫", Boolean.TRUE); + emojiTrie.put("🧑‍⚖️", Boolean.TRUE); + emojiTrie.put("🧑‍⚖", Boolean.TRUE); + emojiTrie.put("🧑🏻‍⚖️", Boolean.TRUE); + emojiTrie.put("🧑🏻‍⚖", Boolean.TRUE); + emojiTrie.put("🧑🏼‍⚖️", Boolean.TRUE); + emojiTrie.put("🧑🏼‍⚖", Boolean.TRUE); + emojiTrie.put("🧑🏽‍⚖️", Boolean.TRUE); + emojiTrie.put("🧑🏽‍⚖", Boolean.TRUE); + emojiTrie.put("🧑🏾‍⚖️", Boolean.TRUE); + emojiTrie.put("🧑🏾‍⚖", Boolean.TRUE); + emojiTrie.put("🧑🏿‍⚖️", Boolean.TRUE); + emojiTrie.put("🧑🏿‍⚖", Boolean.TRUE); + emojiTrie.put("👨‍⚖️", Boolean.TRUE); + emojiTrie.put("👨‍⚖", Boolean.TRUE); + emojiTrie.put("👨🏻‍⚖️", Boolean.TRUE); + emojiTrie.put("👨🏻‍⚖", Boolean.TRUE); + emojiTrie.put("👨🏼‍⚖️", Boolean.TRUE); + emojiTrie.put("👨🏼‍⚖", Boolean.TRUE); + emojiTrie.put("👨🏽‍⚖️", Boolean.TRUE); + emojiTrie.put("👨🏽‍⚖", Boolean.TRUE); + emojiTrie.put("👨🏾‍⚖️", Boolean.TRUE); + emojiTrie.put("👨🏾‍⚖", Boolean.TRUE); + emojiTrie.put("👨🏿‍⚖️", Boolean.TRUE); + emojiTrie.put("👨🏿‍⚖", Boolean.TRUE); + emojiTrie.put("👩‍⚖️", Boolean.TRUE); + emojiTrie.put("👩‍⚖", Boolean.TRUE); + emojiTrie.put("👩🏻‍⚖️", Boolean.TRUE); + emojiTrie.put("👩🏻‍⚖", Boolean.TRUE); + emojiTrie.put("👩🏼‍⚖️", Boolean.TRUE); + emojiTrie.put("👩🏼‍⚖", Boolean.TRUE); + emojiTrie.put("👩🏽‍⚖️", Boolean.TRUE); + emojiTrie.put("👩🏽‍⚖", Boolean.TRUE); + emojiTrie.put("👩🏾‍⚖️", Boolean.TRUE); + emojiTrie.put("👩🏾‍⚖", Boolean.TRUE); + emojiTrie.put("👩🏿‍⚖️", Boolean.TRUE); + emojiTrie.put("👩🏿‍⚖", Boolean.TRUE); + emojiTrie.put("🧑‍🌾", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🌾", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🌾", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🌾", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🌾", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🌾", Boolean.TRUE); + emojiTrie.put("👨‍🌾", Boolean.TRUE); + emojiTrie.put("👨🏻‍🌾", Boolean.TRUE); + emojiTrie.put("👨🏼‍🌾", Boolean.TRUE); + emojiTrie.put("👨🏽‍🌾", Boolean.TRUE); + emojiTrie.put("👨🏾‍🌾", Boolean.TRUE); + emojiTrie.put("👨🏿‍🌾", Boolean.TRUE); + emojiTrie.put("👩‍🌾", Boolean.TRUE); + emojiTrie.put("👩🏻‍🌾", Boolean.TRUE); + emojiTrie.put("👩🏼‍🌾", Boolean.TRUE); + emojiTrie.put("👩🏽‍🌾", Boolean.TRUE); + emojiTrie.put("👩🏾‍🌾", Boolean.TRUE); + emojiTrie.put("👩🏿‍🌾", Boolean.TRUE); + emojiTrie.put("🧑‍🍳", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🍳", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🍳", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🍳", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🍳", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🍳", Boolean.TRUE); + emojiTrie.put("👨‍🍳", Boolean.TRUE); + emojiTrie.put("👨🏻‍🍳", Boolean.TRUE); + emojiTrie.put("👨🏼‍🍳", Boolean.TRUE); + emojiTrie.put("👨🏽‍🍳", Boolean.TRUE); + emojiTrie.put("👨🏾‍🍳", Boolean.TRUE); + emojiTrie.put("👨🏿‍🍳", Boolean.TRUE); + emojiTrie.put("👩‍🍳", Boolean.TRUE); + emojiTrie.put("👩🏻‍🍳", Boolean.TRUE); + emojiTrie.put("👩🏼‍🍳", Boolean.TRUE); + emojiTrie.put("👩🏽‍🍳", Boolean.TRUE); + emojiTrie.put("👩🏾‍🍳", Boolean.TRUE); + emojiTrie.put("👩🏿‍🍳", Boolean.TRUE); + emojiTrie.put("🧑‍🔧", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🔧", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🔧", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🔧", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🔧", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🔧", Boolean.TRUE); + emojiTrie.put("👨‍🔧", Boolean.TRUE); + emojiTrie.put("👨🏻‍🔧", Boolean.TRUE); + emojiTrie.put("👨🏼‍🔧", Boolean.TRUE); + emojiTrie.put("👨🏽‍🔧", Boolean.TRUE); + emojiTrie.put("👨🏾‍🔧", Boolean.TRUE); + emojiTrie.put("👨🏿‍🔧", Boolean.TRUE); + emojiTrie.put("👩‍🔧", Boolean.TRUE); + emojiTrie.put("👩🏻‍🔧", Boolean.TRUE); + emojiTrie.put("👩🏼‍🔧", Boolean.TRUE); + emojiTrie.put("👩🏽‍🔧", Boolean.TRUE); + emojiTrie.put("👩🏾‍🔧", Boolean.TRUE); + emojiTrie.put("👩🏿‍🔧", Boolean.TRUE); + emojiTrie.put("🧑‍🏭", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🏭", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🏭", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🏭", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🏭", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🏭", Boolean.TRUE); + emojiTrie.put("👨‍🏭", Boolean.TRUE); + emojiTrie.put("👨🏻‍🏭", Boolean.TRUE); + emojiTrie.put("👨🏼‍🏭", Boolean.TRUE); + emojiTrie.put("👨🏽‍🏭", Boolean.TRUE); + emojiTrie.put("👨🏾‍🏭", Boolean.TRUE); + emojiTrie.put("👨🏿‍🏭", Boolean.TRUE); + emojiTrie.put("👩‍🏭", Boolean.TRUE); + emojiTrie.put("👩🏻‍🏭", Boolean.TRUE); + emojiTrie.put("👩🏼‍🏭", Boolean.TRUE); + emojiTrie.put("👩🏽‍🏭", Boolean.TRUE); + emojiTrie.put("👩🏾‍🏭", Boolean.TRUE); + emojiTrie.put("👩🏿‍🏭", Boolean.TRUE); + emojiTrie.put("🧑‍💼", Boolean.TRUE); + emojiTrie.put("🧑🏻‍💼", Boolean.TRUE); + emojiTrie.put("🧑🏼‍💼", Boolean.TRUE); + emojiTrie.put("🧑🏽‍💼", Boolean.TRUE); + emojiTrie.put("🧑🏾‍💼", Boolean.TRUE); + emojiTrie.put("🧑🏿‍💼", Boolean.TRUE); + emojiTrie.put("👨‍💼", Boolean.TRUE); + emojiTrie.put("👨🏻‍💼", Boolean.TRUE); + emojiTrie.put("👨🏼‍💼", Boolean.TRUE); + emojiTrie.put("👨🏽‍💼", Boolean.TRUE); + emojiTrie.put("👨🏾‍💼", Boolean.TRUE); + emojiTrie.put("👨🏿‍💼", Boolean.TRUE); + emojiTrie.put("👩‍💼", Boolean.TRUE); + emojiTrie.put("👩🏻‍💼", Boolean.TRUE); + emojiTrie.put("👩🏼‍💼", Boolean.TRUE); + emojiTrie.put("👩🏽‍💼", Boolean.TRUE); + emojiTrie.put("👩🏾‍💼", Boolean.TRUE); + emojiTrie.put("👩🏿‍💼", Boolean.TRUE); + emojiTrie.put("🧑‍🔬", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🔬", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🔬", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🔬", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🔬", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🔬", Boolean.TRUE); + emojiTrie.put("👨‍🔬", Boolean.TRUE); + emojiTrie.put("👨🏻‍🔬", Boolean.TRUE); + emojiTrie.put("👨🏼‍🔬", Boolean.TRUE); + emojiTrie.put("👨🏽‍🔬", Boolean.TRUE); + emojiTrie.put("👨🏾‍🔬", Boolean.TRUE); + emojiTrie.put("👨🏿‍🔬", Boolean.TRUE); + emojiTrie.put("👩‍🔬", Boolean.TRUE); + emojiTrie.put("👩🏻‍🔬", Boolean.TRUE); + emojiTrie.put("👩🏼‍🔬", Boolean.TRUE); + emojiTrie.put("👩🏽‍🔬", Boolean.TRUE); + emojiTrie.put("👩🏾‍🔬", Boolean.TRUE); + emojiTrie.put("👩🏿‍🔬", Boolean.TRUE); + emojiTrie.put("🧑‍💻", Boolean.TRUE); + emojiTrie.put("🧑🏻‍💻", Boolean.TRUE); + emojiTrie.put("🧑🏼‍💻", Boolean.TRUE); + emojiTrie.put("🧑🏽‍💻", Boolean.TRUE); + emojiTrie.put("🧑🏾‍💻", Boolean.TRUE); + emojiTrie.put("🧑🏿‍💻", Boolean.TRUE); + emojiTrie.put("👨‍💻", Boolean.TRUE); + emojiTrie.put("👨🏻‍💻", Boolean.TRUE); + emojiTrie.put("👨🏼‍💻", Boolean.TRUE); + emojiTrie.put("👨🏽‍💻", Boolean.TRUE); + emojiTrie.put("👨🏾‍💻", Boolean.TRUE); + emojiTrie.put("👨🏿‍💻", Boolean.TRUE); + emojiTrie.put("👩‍💻", Boolean.TRUE); + emojiTrie.put("👩🏻‍💻", Boolean.TRUE); + emojiTrie.put("👩🏼‍💻", Boolean.TRUE); + emojiTrie.put("👩🏽‍💻", Boolean.TRUE); + emojiTrie.put("👩🏾‍💻", Boolean.TRUE); + emojiTrie.put("👩🏿‍💻", Boolean.TRUE); + emojiTrie.put("🧑‍🎤", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🎤", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🎤", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🎤", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🎤", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🎤", Boolean.TRUE); + emojiTrie.put("👨‍🎤", Boolean.TRUE); + emojiTrie.put("👨🏻‍🎤", Boolean.TRUE); + emojiTrie.put("👨🏼‍🎤", Boolean.TRUE); + emojiTrie.put("👨🏽‍🎤", Boolean.TRUE); + emojiTrie.put("👨🏾‍🎤", Boolean.TRUE); + emojiTrie.put("👨🏿‍🎤", Boolean.TRUE); + emojiTrie.put("👩‍🎤", Boolean.TRUE); + emojiTrie.put("👩🏻‍🎤", Boolean.TRUE); + emojiTrie.put("👩🏼‍🎤", Boolean.TRUE); + emojiTrie.put("👩🏽‍🎤", Boolean.TRUE); + emojiTrie.put("👩🏾‍🎤", Boolean.TRUE); + emojiTrie.put("👩🏿‍🎤", Boolean.TRUE); + emojiTrie.put("🧑‍🎨", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🎨", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🎨", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🎨", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🎨", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🎨", Boolean.TRUE); + emojiTrie.put("👨‍🎨", Boolean.TRUE); + emojiTrie.put("👨🏻‍🎨", Boolean.TRUE); + emojiTrie.put("👨🏼‍🎨", Boolean.TRUE); + emojiTrie.put("👨🏽‍🎨", Boolean.TRUE); + emojiTrie.put("👨🏾‍🎨", Boolean.TRUE); + emojiTrie.put("👨🏿‍🎨", Boolean.TRUE); + emojiTrie.put("👩‍🎨", Boolean.TRUE); + emojiTrie.put("👩🏻‍🎨", Boolean.TRUE); + emojiTrie.put("👩🏼‍🎨", Boolean.TRUE); + emojiTrie.put("👩🏽‍🎨", Boolean.TRUE); + emojiTrie.put("👩🏾‍🎨", Boolean.TRUE); + emojiTrie.put("👩🏿‍🎨", Boolean.TRUE); + emojiTrie.put("🧑‍✈️", Boolean.TRUE); + emojiTrie.put("🧑‍✈", Boolean.TRUE); + emojiTrie.put("🧑🏻‍✈️", Boolean.TRUE); + emojiTrie.put("🧑🏻‍✈", Boolean.TRUE); + emojiTrie.put("🧑🏼‍✈️", Boolean.TRUE); + emojiTrie.put("🧑🏼‍✈", Boolean.TRUE); + emojiTrie.put("🧑🏽‍✈️", Boolean.TRUE); + emojiTrie.put("🧑🏽‍✈", Boolean.TRUE); + emojiTrie.put("🧑🏾‍✈️", Boolean.TRUE); + emojiTrie.put("🧑🏾‍✈", Boolean.TRUE); + emojiTrie.put("🧑🏿‍✈️", Boolean.TRUE); + emojiTrie.put("🧑🏿‍✈", Boolean.TRUE); + emojiTrie.put("👨‍✈️", Boolean.TRUE); + emojiTrie.put("👨‍✈", Boolean.TRUE); + emojiTrie.put("👨🏻‍✈️", Boolean.TRUE); + emojiTrie.put("👨🏻‍✈", Boolean.TRUE); + emojiTrie.put("👨🏼‍✈️", Boolean.TRUE); + emojiTrie.put("👨🏼‍✈", Boolean.TRUE); + emojiTrie.put("👨🏽‍✈️", Boolean.TRUE); + emojiTrie.put("👨🏽‍✈", Boolean.TRUE); + emojiTrie.put("👨🏾‍✈️", Boolean.TRUE); + emojiTrie.put("👨🏾‍✈", Boolean.TRUE); + emojiTrie.put("👨🏿‍✈️", Boolean.TRUE); + emojiTrie.put("👨🏿‍✈", Boolean.TRUE); + emojiTrie.put("👩‍✈️", Boolean.TRUE); + emojiTrie.put("👩‍✈", Boolean.TRUE); + emojiTrie.put("👩🏻‍✈️", Boolean.TRUE); + emojiTrie.put("👩🏻‍✈", Boolean.TRUE); + emojiTrie.put("👩🏼‍✈️", Boolean.TRUE); + emojiTrie.put("👩🏼‍✈", Boolean.TRUE); + emojiTrie.put("👩🏽‍✈️", Boolean.TRUE); + emojiTrie.put("👩🏽‍✈", Boolean.TRUE); + emojiTrie.put("👩🏾‍✈️", Boolean.TRUE); + emojiTrie.put("👩🏾‍✈", Boolean.TRUE); + emojiTrie.put("👩🏿‍✈️", Boolean.TRUE); + emojiTrie.put("👩🏿‍✈", Boolean.TRUE); + emojiTrie.put("🧑‍🚀", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🚀", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🚀", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🚀", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🚀", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🚀", Boolean.TRUE); + emojiTrie.put("👨‍🚀", Boolean.TRUE); + emojiTrie.put("👨🏻‍🚀", Boolean.TRUE); + emojiTrie.put("👨🏼‍🚀", Boolean.TRUE); + emojiTrie.put("👨🏽‍🚀", Boolean.TRUE); + emojiTrie.put("👨🏾‍🚀", Boolean.TRUE); + emojiTrie.put("👨🏿‍🚀", Boolean.TRUE); + emojiTrie.put("👩‍🚀", Boolean.TRUE); + emojiTrie.put("👩🏻‍🚀", Boolean.TRUE); + emojiTrie.put("👩🏼‍🚀", Boolean.TRUE); + emojiTrie.put("👩🏽‍🚀", Boolean.TRUE); + emojiTrie.put("👩🏾‍🚀", Boolean.TRUE); + emojiTrie.put("👩🏿‍🚀", Boolean.TRUE); + emojiTrie.put("🧑‍🚒", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🚒", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🚒", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🚒", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🚒", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🚒", Boolean.TRUE); + emojiTrie.put("👨‍🚒", Boolean.TRUE); + emojiTrie.put("👨🏻‍🚒", Boolean.TRUE); + emojiTrie.put("👨🏼‍🚒", Boolean.TRUE); + emojiTrie.put("👨🏽‍🚒", Boolean.TRUE); + emojiTrie.put("👨🏾‍🚒", Boolean.TRUE); + emojiTrie.put("👨🏿‍🚒", Boolean.TRUE); + emojiTrie.put("👩‍🚒", Boolean.TRUE); + emojiTrie.put("👩🏻‍🚒", Boolean.TRUE); + emojiTrie.put("👩🏼‍🚒", Boolean.TRUE); + emojiTrie.put("👩🏽‍🚒", Boolean.TRUE); + emojiTrie.put("👩🏾‍🚒", Boolean.TRUE); + emojiTrie.put("👩🏿‍🚒", Boolean.TRUE); + emojiTrie.put("👮", Boolean.TRUE); + emojiTrie.put("👮🏻", Boolean.TRUE); + emojiTrie.put("👮🏼", Boolean.TRUE); + emojiTrie.put("👮🏽", Boolean.TRUE); + emojiTrie.put("👮🏾", Boolean.TRUE); + emojiTrie.put("👮🏿", Boolean.TRUE); + emojiTrie.put("👮‍♂️", Boolean.TRUE); + emojiTrie.put("👮‍♂", Boolean.TRUE); + emojiTrie.put("👮🏻‍♂️", Boolean.TRUE); + emojiTrie.put("👮🏻‍♂", Boolean.TRUE); + emojiTrie.put("👮🏼‍♂️", Boolean.TRUE); + emojiTrie.put("👮🏼‍♂", Boolean.TRUE); + emojiTrie.put("👮🏽‍♂️", Boolean.TRUE); + emojiTrie.put("👮🏽‍♂", Boolean.TRUE); + emojiTrie.put("👮🏾‍♂️", Boolean.TRUE); + emojiTrie.put("👮🏾‍♂", Boolean.TRUE); + emojiTrie.put("👮🏿‍♂️", Boolean.TRUE); + emojiTrie.put("👮🏿‍♂", Boolean.TRUE); + emojiTrie.put("👮‍♀️", Boolean.TRUE); + emojiTrie.put("👮‍♀", Boolean.TRUE); + emojiTrie.put("👮🏻‍♀️", Boolean.TRUE); + emojiTrie.put("👮🏻‍♀", Boolean.TRUE); + emojiTrie.put("👮🏼‍♀️", Boolean.TRUE); + emojiTrie.put("👮🏼‍♀", Boolean.TRUE); + emojiTrie.put("👮🏽‍♀️", Boolean.TRUE); + emojiTrie.put("👮🏽‍♀", Boolean.TRUE); + emojiTrie.put("👮🏾‍♀️", Boolean.TRUE); + emojiTrie.put("👮🏾‍♀", Boolean.TRUE); + emojiTrie.put("👮🏿‍♀️", Boolean.TRUE); + emojiTrie.put("👮🏿‍♀", Boolean.TRUE); + emojiTrie.put("🕵️", Boolean.TRUE); + emojiTrie.put("🕵", Boolean.TRUE); + emojiTrie.put("🕵🏻", Boolean.TRUE); + emojiTrie.put("🕵🏼", Boolean.TRUE); + emojiTrie.put("🕵🏽", Boolean.TRUE); + emojiTrie.put("🕵🏾", Boolean.TRUE); + emojiTrie.put("🕵🏿", Boolean.TRUE); + emojiTrie.put("🕵️‍♂️", Boolean.TRUE); + emojiTrie.put("🕵‍♂️", Boolean.TRUE); + emojiTrie.put("🕵️‍♂", Boolean.TRUE); + emojiTrie.put("🕵‍♂", Boolean.TRUE); + emojiTrie.put("🕵🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🕵🏻‍♂", Boolean.TRUE); + emojiTrie.put("🕵🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🕵🏼‍♂", Boolean.TRUE); + emojiTrie.put("🕵🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🕵🏽‍♂", Boolean.TRUE); + emojiTrie.put("🕵🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🕵🏾‍♂", Boolean.TRUE); + emojiTrie.put("🕵🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🕵🏿‍♂", Boolean.TRUE); + emojiTrie.put("🕵️‍♀️", Boolean.TRUE); + emojiTrie.put("🕵‍♀️", Boolean.TRUE); + emojiTrie.put("🕵️‍♀", Boolean.TRUE); + emojiTrie.put("🕵‍♀", Boolean.TRUE); + emojiTrie.put("🕵🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🕵🏻‍♀", Boolean.TRUE); + emojiTrie.put("🕵🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🕵🏼‍♀", Boolean.TRUE); + emojiTrie.put("🕵🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🕵🏽‍♀", Boolean.TRUE); + emojiTrie.put("🕵🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🕵🏾‍♀", Boolean.TRUE); + emojiTrie.put("🕵🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🕵🏿‍♀", Boolean.TRUE); + emojiTrie.put("💂", Boolean.TRUE); + emojiTrie.put("💂🏻", Boolean.TRUE); + emojiTrie.put("💂🏼", Boolean.TRUE); + emojiTrie.put("💂🏽", Boolean.TRUE); + emojiTrie.put("💂🏾", Boolean.TRUE); + emojiTrie.put("💂🏿", Boolean.TRUE); + emojiTrie.put("💂‍♂️", Boolean.TRUE); + emojiTrie.put("💂‍♂", Boolean.TRUE); + emojiTrie.put("💂🏻‍♂️", Boolean.TRUE); + emojiTrie.put("💂🏻‍♂", Boolean.TRUE); + emojiTrie.put("💂🏼‍♂️", Boolean.TRUE); + emojiTrie.put("💂🏼‍♂", Boolean.TRUE); + emojiTrie.put("💂🏽‍♂️", Boolean.TRUE); + emojiTrie.put("💂🏽‍♂", Boolean.TRUE); + emojiTrie.put("💂🏾‍♂️", Boolean.TRUE); + emojiTrie.put("💂🏾‍♂", Boolean.TRUE); + emojiTrie.put("💂🏿‍♂️", Boolean.TRUE); + emojiTrie.put("💂🏿‍♂", Boolean.TRUE); + emojiTrie.put("💂‍♀️", Boolean.TRUE); + emojiTrie.put("💂‍♀", Boolean.TRUE); + emojiTrie.put("💂🏻‍♀️", Boolean.TRUE); + emojiTrie.put("💂🏻‍♀", Boolean.TRUE); + emojiTrie.put("💂🏼‍♀️", Boolean.TRUE); + emojiTrie.put("💂🏼‍♀", Boolean.TRUE); + emojiTrie.put("💂🏽‍♀️", Boolean.TRUE); + emojiTrie.put("💂🏽‍♀", Boolean.TRUE); + emojiTrie.put("💂🏾‍♀️", Boolean.TRUE); + emojiTrie.put("💂🏾‍♀", Boolean.TRUE); + emojiTrie.put("💂🏿‍♀️", Boolean.TRUE); + emojiTrie.put("💂🏿‍♀", Boolean.TRUE); + emojiTrie.put("🥷", Boolean.TRUE); + emojiTrie.put("🥷🏻", Boolean.TRUE); + emojiTrie.put("🥷🏼", Boolean.TRUE); + emojiTrie.put("🥷🏽", Boolean.TRUE); + emojiTrie.put("🥷🏾", Boolean.TRUE); + emojiTrie.put("🥷🏿", Boolean.TRUE); + emojiTrie.put("👷", Boolean.TRUE); + emojiTrie.put("👷🏻", Boolean.TRUE); + emojiTrie.put("👷🏼", Boolean.TRUE); + emojiTrie.put("👷🏽", Boolean.TRUE); + emojiTrie.put("👷🏾", Boolean.TRUE); + emojiTrie.put("👷🏿", Boolean.TRUE); + emojiTrie.put("👷‍♂️", Boolean.TRUE); + emojiTrie.put("👷‍♂", Boolean.TRUE); + emojiTrie.put("👷🏻‍♂️", Boolean.TRUE); + emojiTrie.put("👷🏻‍♂", Boolean.TRUE); + emojiTrie.put("👷🏼‍♂️", Boolean.TRUE); + emojiTrie.put("👷🏼‍♂", Boolean.TRUE); + emojiTrie.put("👷🏽‍♂️", Boolean.TRUE); + emojiTrie.put("👷🏽‍♂", Boolean.TRUE); + emojiTrie.put("👷🏾‍♂️", Boolean.TRUE); + emojiTrie.put("👷🏾‍♂", Boolean.TRUE); + emojiTrie.put("👷🏿‍♂️", Boolean.TRUE); + emojiTrie.put("👷🏿‍♂", Boolean.TRUE); + emojiTrie.put("👷‍♀️", Boolean.TRUE); + emojiTrie.put("👷‍♀", Boolean.TRUE); + emojiTrie.put("👷🏻‍♀️", Boolean.TRUE); + emojiTrie.put("👷🏻‍♀", Boolean.TRUE); + emojiTrie.put("👷🏼‍♀️", Boolean.TRUE); + emojiTrie.put("👷🏼‍♀", Boolean.TRUE); + emojiTrie.put("👷🏽‍♀️", Boolean.TRUE); + emojiTrie.put("👷🏽‍♀", Boolean.TRUE); + emojiTrie.put("👷🏾‍♀️", Boolean.TRUE); + emojiTrie.put("👷🏾‍♀", Boolean.TRUE); + emojiTrie.put("👷🏿‍♀️", Boolean.TRUE); + emojiTrie.put("👷🏿‍♀", Boolean.TRUE); + emojiTrie.put("🫅", Boolean.TRUE); + emojiTrie.put("🫅🏻", Boolean.TRUE); + emojiTrie.put("🫅🏼", Boolean.TRUE); + emojiTrie.put("🫅🏽", Boolean.TRUE); + emojiTrie.put("🫅🏾", Boolean.TRUE); + emojiTrie.put("🫅🏿", Boolean.TRUE); + emojiTrie.put("🤴", Boolean.TRUE); + emojiTrie.put("🤴🏻", Boolean.TRUE); + emojiTrie.put("🤴🏼", Boolean.TRUE); + emojiTrie.put("🤴🏽", Boolean.TRUE); + emojiTrie.put("🤴🏾", Boolean.TRUE); + emojiTrie.put("🤴🏿", Boolean.TRUE); + emojiTrie.put("👸", Boolean.TRUE); + emojiTrie.put("👸🏻", Boolean.TRUE); + emojiTrie.put("👸🏼", Boolean.TRUE); + emojiTrie.put("👸🏽", Boolean.TRUE); + emojiTrie.put("👸🏾", Boolean.TRUE); + emojiTrie.put("👸🏿", Boolean.TRUE); + emojiTrie.put("👳", Boolean.TRUE); + emojiTrie.put("👳🏻", Boolean.TRUE); + emojiTrie.put("👳🏼", Boolean.TRUE); + emojiTrie.put("👳🏽", Boolean.TRUE); + emojiTrie.put("👳🏾", Boolean.TRUE); + emojiTrie.put("👳🏿", Boolean.TRUE); + emojiTrie.put("👳‍♂️", Boolean.TRUE); + emojiTrie.put("👳‍♂", Boolean.TRUE); + emojiTrie.put("👳🏻‍♂️", Boolean.TRUE); + emojiTrie.put("👳🏻‍♂", Boolean.TRUE); + emojiTrie.put("👳🏼‍♂️", Boolean.TRUE); + emojiTrie.put("👳🏼‍♂", Boolean.TRUE); + emojiTrie.put("👳🏽‍♂️", Boolean.TRUE); + emojiTrie.put("👳🏽‍♂", Boolean.TRUE); + emojiTrie.put("👳🏾‍♂️", Boolean.TRUE); + emojiTrie.put("👳🏾‍♂", Boolean.TRUE); + emojiTrie.put("👳🏿‍♂️", Boolean.TRUE); + emojiTrie.put("👳🏿‍♂", Boolean.TRUE); + emojiTrie.put("👳‍♀️", Boolean.TRUE); + emojiTrie.put("👳‍♀", Boolean.TRUE); + emojiTrie.put("👳🏻‍♀️", Boolean.TRUE); + emojiTrie.put("👳🏻‍♀", Boolean.TRUE); + emojiTrie.put("👳🏼‍♀️", Boolean.TRUE); + emojiTrie.put("👳🏼‍♀", Boolean.TRUE); + emojiTrie.put("👳🏽‍♀️", Boolean.TRUE); + emojiTrie.put("👳🏽‍♀", Boolean.TRUE); + emojiTrie.put("👳🏾‍♀️", Boolean.TRUE); + emojiTrie.put("👳🏾‍♀", Boolean.TRUE); + emojiTrie.put("👳🏿‍♀️", Boolean.TRUE); + emojiTrie.put("👳🏿‍♀", Boolean.TRUE); + emojiTrie.put("👲", Boolean.TRUE); + emojiTrie.put("👲🏻", Boolean.TRUE); + emojiTrie.put("👲🏼", Boolean.TRUE); + emojiTrie.put("👲🏽", Boolean.TRUE); + emojiTrie.put("👲🏾", Boolean.TRUE); + emojiTrie.put("👲🏿", Boolean.TRUE); + emojiTrie.put("🧕", Boolean.TRUE); + emojiTrie.put("🧕🏻", Boolean.TRUE); + emojiTrie.put("🧕🏼", Boolean.TRUE); + emojiTrie.put("🧕🏽", Boolean.TRUE); + emojiTrie.put("🧕🏾", Boolean.TRUE); + emojiTrie.put("🧕🏿", Boolean.TRUE); + emojiTrie.put("🤵", Boolean.TRUE); + emojiTrie.put("🤵🏻", Boolean.TRUE); + emojiTrie.put("🤵🏼", Boolean.TRUE); + emojiTrie.put("🤵🏽", Boolean.TRUE); + emojiTrie.put("🤵🏾", Boolean.TRUE); + emojiTrie.put("🤵🏿", Boolean.TRUE); + emojiTrie.put("🤵‍♂️", Boolean.TRUE); + emojiTrie.put("🤵‍♂", Boolean.TRUE); + emojiTrie.put("🤵🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🤵🏻‍♂", Boolean.TRUE); + emojiTrie.put("🤵🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🤵🏼‍♂", Boolean.TRUE); + emojiTrie.put("🤵🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🤵🏽‍♂", Boolean.TRUE); + emojiTrie.put("🤵🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🤵🏾‍♂", Boolean.TRUE); + emojiTrie.put("🤵🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🤵🏿‍♂", Boolean.TRUE); + emojiTrie.put("🤵‍♀️", Boolean.TRUE); + emojiTrie.put("🤵‍♀", Boolean.TRUE); + emojiTrie.put("🤵🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🤵🏻‍♀", Boolean.TRUE); + emojiTrie.put("🤵🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🤵🏼‍♀", Boolean.TRUE); + emojiTrie.put("🤵🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🤵🏽‍♀", Boolean.TRUE); + emojiTrie.put("🤵🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🤵🏾‍♀", Boolean.TRUE); + emojiTrie.put("🤵🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🤵🏿‍♀", Boolean.TRUE); + emojiTrie.put("👰", Boolean.TRUE); + emojiTrie.put("👰🏻", Boolean.TRUE); + emojiTrie.put("👰🏼", Boolean.TRUE); + emojiTrie.put("👰🏽", Boolean.TRUE); + emojiTrie.put("👰🏾", Boolean.TRUE); + emojiTrie.put("👰🏿", Boolean.TRUE); + emojiTrie.put("👰‍♂️", Boolean.TRUE); + emojiTrie.put("👰‍♂", Boolean.TRUE); + emojiTrie.put("👰🏻‍♂️", Boolean.TRUE); + emojiTrie.put("👰🏻‍♂", Boolean.TRUE); + emojiTrie.put("👰🏼‍♂️", Boolean.TRUE); + emojiTrie.put("👰🏼‍♂", Boolean.TRUE); + emojiTrie.put("👰🏽‍♂️", Boolean.TRUE); + emojiTrie.put("👰🏽‍♂", Boolean.TRUE); + emojiTrie.put("👰🏾‍♂️", Boolean.TRUE); + emojiTrie.put("👰🏾‍♂", Boolean.TRUE); + emojiTrie.put("👰🏿‍♂️", Boolean.TRUE); + emojiTrie.put("👰🏿‍♂", Boolean.TRUE); + emojiTrie.put("👰‍♀️", Boolean.TRUE); + emojiTrie.put("👰‍♀", Boolean.TRUE); + emojiTrie.put("👰🏻‍♀️", Boolean.TRUE); + emojiTrie.put("👰🏻‍♀", Boolean.TRUE); + emojiTrie.put("👰🏼‍♀️", Boolean.TRUE); + emojiTrie.put("👰🏼‍♀", Boolean.TRUE); + emojiTrie.put("👰🏽‍♀️", Boolean.TRUE); + emojiTrie.put("👰🏽‍♀", Boolean.TRUE); + emojiTrie.put("👰🏾‍♀️", Boolean.TRUE); + emojiTrie.put("👰🏾‍♀", Boolean.TRUE); + emojiTrie.put("👰🏿‍♀️", Boolean.TRUE); + emojiTrie.put("👰🏿‍♀", Boolean.TRUE); + emojiTrie.put("🤰", Boolean.TRUE); + emojiTrie.put("🤰🏻", Boolean.TRUE); + emojiTrie.put("🤰🏼", Boolean.TRUE); + emojiTrie.put("🤰🏽", Boolean.TRUE); + emojiTrie.put("🤰🏾", Boolean.TRUE); + emojiTrie.put("🤰🏿", Boolean.TRUE); + emojiTrie.put("🫃", Boolean.TRUE); + emojiTrie.put("🫃🏻", Boolean.TRUE); + emojiTrie.put("🫃🏼", Boolean.TRUE); + emojiTrie.put("🫃🏽", Boolean.TRUE); + emojiTrie.put("🫃🏾", Boolean.TRUE); + emojiTrie.put("🫃🏿", Boolean.TRUE); + emojiTrie.put("🫄", Boolean.TRUE); + emojiTrie.put("🫄🏻", Boolean.TRUE); + emojiTrie.put("🫄🏼", Boolean.TRUE); + emojiTrie.put("🫄🏽", Boolean.TRUE); + emojiTrie.put("🫄🏾", Boolean.TRUE); + emojiTrie.put("🫄🏿", Boolean.TRUE); + emojiTrie.put("🤱", Boolean.TRUE); + emojiTrie.put("🤱🏻", Boolean.TRUE); + emojiTrie.put("🤱🏼", Boolean.TRUE); + emojiTrie.put("🤱🏽", Boolean.TRUE); + emojiTrie.put("🤱🏾", Boolean.TRUE); + emojiTrie.put("🤱🏿", Boolean.TRUE); + emojiTrie.put("👩‍🍼", Boolean.TRUE); + emojiTrie.put("👩🏻‍🍼", Boolean.TRUE); + emojiTrie.put("👩🏼‍🍼", Boolean.TRUE); + emojiTrie.put("👩🏽‍🍼", Boolean.TRUE); + emojiTrie.put("👩🏾‍🍼", Boolean.TRUE); + emojiTrie.put("👩🏿‍🍼", Boolean.TRUE); + emojiTrie.put("👨‍🍼", Boolean.TRUE); + emojiTrie.put("👨🏻‍🍼", Boolean.TRUE); + emojiTrie.put("👨🏼‍🍼", Boolean.TRUE); + emojiTrie.put("👨🏽‍🍼", Boolean.TRUE); + emojiTrie.put("👨🏾‍🍼", Boolean.TRUE); + emojiTrie.put("👨🏿‍🍼", Boolean.TRUE); + emojiTrie.put("🧑‍🍼", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🍼", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🍼", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🍼", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🍼", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🍼", Boolean.TRUE); + emojiTrie.put("👼", Boolean.TRUE); + emojiTrie.put("👼🏻", Boolean.TRUE); + emojiTrie.put("👼🏼", Boolean.TRUE); + emojiTrie.put("👼🏽", Boolean.TRUE); + emojiTrie.put("👼🏾", Boolean.TRUE); + emojiTrie.put("👼🏿", Boolean.TRUE); + emojiTrie.put("🎅", Boolean.TRUE); + emojiTrie.put("🎅🏻", Boolean.TRUE); + emojiTrie.put("🎅🏼", Boolean.TRUE); + emojiTrie.put("🎅🏽", Boolean.TRUE); + emojiTrie.put("🎅🏾", Boolean.TRUE); + emojiTrie.put("🎅🏿", Boolean.TRUE); + emojiTrie.put("🤶", Boolean.TRUE); + emojiTrie.put("🤶🏻", Boolean.TRUE); + emojiTrie.put("🤶🏼", Boolean.TRUE); + emojiTrie.put("🤶🏽", Boolean.TRUE); + emojiTrie.put("🤶🏾", Boolean.TRUE); + emojiTrie.put("🤶🏿", Boolean.TRUE); + emojiTrie.put("🧑‍🎄", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🎄", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🎄", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🎄", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🎄", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🎄", Boolean.TRUE); + emojiTrie.put("🦸", Boolean.TRUE); + emojiTrie.put("🦸🏻", Boolean.TRUE); + emojiTrie.put("🦸🏼", Boolean.TRUE); + emojiTrie.put("🦸🏽", Boolean.TRUE); + emojiTrie.put("🦸🏾", Boolean.TRUE); + emojiTrie.put("🦸🏿", Boolean.TRUE); + emojiTrie.put("🦸‍♂️", Boolean.TRUE); + emojiTrie.put("🦸‍♂", Boolean.TRUE); + emojiTrie.put("🦸🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🦸🏻‍♂", Boolean.TRUE); + emojiTrie.put("🦸🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🦸🏼‍♂", Boolean.TRUE); + emojiTrie.put("🦸🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🦸🏽‍♂", Boolean.TRUE); + emojiTrie.put("🦸🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🦸🏾‍♂", Boolean.TRUE); + emojiTrie.put("🦸🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🦸🏿‍♂", Boolean.TRUE); + emojiTrie.put("🦸‍♀️", Boolean.TRUE); + emojiTrie.put("🦸‍♀", Boolean.TRUE); + emojiTrie.put("🦸🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🦸🏻‍♀", Boolean.TRUE); + emojiTrie.put("🦸🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🦸🏼‍♀", Boolean.TRUE); + emojiTrie.put("🦸🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🦸🏽‍♀", Boolean.TRUE); + emojiTrie.put("🦸🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🦸🏾‍♀", Boolean.TRUE); + emojiTrie.put("🦸🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🦸🏿‍♀", Boolean.TRUE); + emojiTrie.put("🦹", Boolean.TRUE); + emojiTrie.put("🦹🏻", Boolean.TRUE); + emojiTrie.put("🦹🏼", Boolean.TRUE); + emojiTrie.put("🦹🏽", Boolean.TRUE); + emojiTrie.put("🦹🏾", Boolean.TRUE); + emojiTrie.put("🦹🏿", Boolean.TRUE); + emojiTrie.put("🦹‍♂️", Boolean.TRUE); + emojiTrie.put("🦹‍♂", Boolean.TRUE); + emojiTrie.put("🦹🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🦹🏻‍♂", Boolean.TRUE); + emojiTrie.put("🦹🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🦹🏼‍♂", Boolean.TRUE); + emojiTrie.put("🦹🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🦹🏽‍♂", Boolean.TRUE); + emojiTrie.put("🦹🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🦹🏾‍♂", Boolean.TRUE); + emojiTrie.put("🦹🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🦹🏿‍♂", Boolean.TRUE); + emojiTrie.put("🦹‍♀️", Boolean.TRUE); + emojiTrie.put("🦹‍♀", Boolean.TRUE); + emojiTrie.put("🦹🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🦹🏻‍♀", Boolean.TRUE); + emojiTrie.put("🦹🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🦹🏼‍♀", Boolean.TRUE); + emojiTrie.put("🦹🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🦹🏽‍♀", Boolean.TRUE); + emojiTrie.put("🦹🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🦹🏾‍♀", Boolean.TRUE); + emojiTrie.put("🦹🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🦹🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧙", Boolean.TRUE); + emojiTrie.put("🧙🏻", Boolean.TRUE); + emojiTrie.put("🧙🏼", Boolean.TRUE); + emojiTrie.put("🧙🏽", Boolean.TRUE); + emojiTrie.put("🧙🏾", Boolean.TRUE); + emojiTrie.put("🧙🏿", Boolean.TRUE); + emojiTrie.put("🧙‍♂️", Boolean.TRUE); + emojiTrie.put("🧙‍♂", Boolean.TRUE); + emojiTrie.put("🧙🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧙🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧙🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧙🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧙🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧙🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧙🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧙🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧙🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧙🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧙‍♀️", Boolean.TRUE); + emojiTrie.put("🧙‍♀", Boolean.TRUE); + emojiTrie.put("🧙🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧙🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧙🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧙🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧙🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧙🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧙🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧙🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧙🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧙🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧚", Boolean.TRUE); + emojiTrie.put("🧚🏻", Boolean.TRUE); + emojiTrie.put("🧚🏼", Boolean.TRUE); + emojiTrie.put("🧚🏽", Boolean.TRUE); + emojiTrie.put("🧚🏾", Boolean.TRUE); + emojiTrie.put("🧚🏿", Boolean.TRUE); + emojiTrie.put("🧚‍♂️", Boolean.TRUE); + emojiTrie.put("🧚‍♂", Boolean.TRUE); + emojiTrie.put("🧚🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧚🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧚🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧚🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧚🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧚🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧚🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧚🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧚🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧚🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧚‍♀️", Boolean.TRUE); + emojiTrie.put("🧚‍♀", Boolean.TRUE); + emojiTrie.put("🧚🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧚🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧚🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧚🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧚🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧚🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧚🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧚🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧚🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧚🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧛", Boolean.TRUE); + emojiTrie.put("🧛🏻", Boolean.TRUE); + emojiTrie.put("🧛🏼", Boolean.TRUE); + emojiTrie.put("🧛🏽", Boolean.TRUE); + emojiTrie.put("🧛🏾", Boolean.TRUE); + emojiTrie.put("🧛🏿", Boolean.TRUE); + emojiTrie.put("🧛‍♂️", Boolean.TRUE); + emojiTrie.put("🧛‍♂", Boolean.TRUE); + emojiTrie.put("🧛🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧛🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧛🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧛🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧛🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧛🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧛🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧛🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧛🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧛🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧛‍♀️", Boolean.TRUE); + emojiTrie.put("🧛‍♀", Boolean.TRUE); + emojiTrie.put("🧛🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧛🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧛🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧛🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧛🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧛🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧛🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧛🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧛🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧛🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧜", Boolean.TRUE); + emojiTrie.put("🧜🏻", Boolean.TRUE); + emojiTrie.put("🧜🏼", Boolean.TRUE); + emojiTrie.put("🧜🏽", Boolean.TRUE); + emojiTrie.put("🧜🏾", Boolean.TRUE); + emojiTrie.put("🧜🏿", Boolean.TRUE); + emojiTrie.put("🧜‍♂️", Boolean.TRUE); + emojiTrie.put("🧜‍♂", Boolean.TRUE); + emojiTrie.put("🧜🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧜🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧜🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧜🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧜🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧜🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧜🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧜🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧜🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧜🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧜‍♀️", Boolean.TRUE); + emojiTrie.put("🧜‍♀", Boolean.TRUE); + emojiTrie.put("🧜🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧜🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧜🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧜🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧜🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧜🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧜🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧜🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧜🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧜🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧝", Boolean.TRUE); + emojiTrie.put("🧝🏻", Boolean.TRUE); + emojiTrie.put("🧝🏼", Boolean.TRUE); + emojiTrie.put("🧝🏽", Boolean.TRUE); + emojiTrie.put("🧝🏾", Boolean.TRUE); + emojiTrie.put("🧝🏿", Boolean.TRUE); + emojiTrie.put("🧝‍♂️", Boolean.TRUE); + emojiTrie.put("🧝‍♂", Boolean.TRUE); + emojiTrie.put("🧝🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧝🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧝🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧝🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧝🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧝🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧝🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧝🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧝🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧝🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧝‍♀️", Boolean.TRUE); + emojiTrie.put("🧝‍♀", Boolean.TRUE); + emojiTrie.put("🧝🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧝🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧝🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧝🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧝🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧝🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧝🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧝🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧝🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧝🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧞", Boolean.TRUE); + emojiTrie.put("🧞‍♂️", Boolean.TRUE); + emojiTrie.put("🧞‍♂", Boolean.TRUE); + emojiTrie.put("🧞‍♀️", Boolean.TRUE); + emojiTrie.put("🧞‍♀", Boolean.TRUE); + emojiTrie.put("🧟", Boolean.TRUE); + emojiTrie.put("🧟‍♂️", Boolean.TRUE); + emojiTrie.put("🧟‍♂", Boolean.TRUE); + emojiTrie.put("🧟‍♀️", Boolean.TRUE); + emojiTrie.put("🧟‍♀", Boolean.TRUE); + emojiTrie.put("🧌", Boolean.TRUE); + emojiTrie.put("💆", Boolean.TRUE); + emojiTrie.put("💆🏻", Boolean.TRUE); + emojiTrie.put("💆🏼", Boolean.TRUE); + emojiTrie.put("💆🏽", Boolean.TRUE); + emojiTrie.put("💆🏾", Boolean.TRUE); + emojiTrie.put("💆🏿", Boolean.TRUE); + emojiTrie.put("💆‍♂️", Boolean.TRUE); + emojiTrie.put("💆‍♂", Boolean.TRUE); + emojiTrie.put("💆🏻‍♂️", Boolean.TRUE); + emojiTrie.put("💆🏻‍♂", Boolean.TRUE); + emojiTrie.put("💆🏼‍♂️", Boolean.TRUE); + emojiTrie.put("💆🏼‍♂", Boolean.TRUE); + emojiTrie.put("💆🏽‍♂️", Boolean.TRUE); + emojiTrie.put("💆🏽‍♂", Boolean.TRUE); + emojiTrie.put("💆🏾‍♂️", Boolean.TRUE); + emojiTrie.put("💆🏾‍♂", Boolean.TRUE); + emojiTrie.put("💆🏿‍♂️", Boolean.TRUE); + emojiTrie.put("💆🏿‍♂", Boolean.TRUE); + emojiTrie.put("💆‍♀️", Boolean.TRUE); + emojiTrie.put("💆‍♀", Boolean.TRUE); + emojiTrie.put("💆🏻‍♀️", Boolean.TRUE); + emojiTrie.put("💆🏻‍♀", Boolean.TRUE); + emojiTrie.put("💆🏼‍♀️", Boolean.TRUE); + emojiTrie.put("💆🏼‍♀", Boolean.TRUE); + emojiTrie.put("💆🏽‍♀️", Boolean.TRUE); + emojiTrie.put("💆🏽‍♀", Boolean.TRUE); + emojiTrie.put("💆🏾‍♀️", Boolean.TRUE); + emojiTrie.put("💆🏾‍♀", Boolean.TRUE); + emojiTrie.put("💆🏿‍♀️", Boolean.TRUE); + emojiTrie.put("💆🏿‍♀", Boolean.TRUE); + emojiTrie.put("💇", Boolean.TRUE); + emojiTrie.put("💇🏻", Boolean.TRUE); + emojiTrie.put("💇🏼", Boolean.TRUE); + emojiTrie.put("💇🏽", Boolean.TRUE); + emojiTrie.put("💇🏾", Boolean.TRUE); + emojiTrie.put("💇🏿", Boolean.TRUE); + emojiTrie.put("💇‍♂️", Boolean.TRUE); + emojiTrie.put("💇‍♂", Boolean.TRUE); + emojiTrie.put("💇🏻‍♂️", Boolean.TRUE); + emojiTrie.put("💇🏻‍♂", Boolean.TRUE); + emojiTrie.put("💇🏼‍♂️", Boolean.TRUE); + emojiTrie.put("💇🏼‍♂", Boolean.TRUE); + emojiTrie.put("💇🏽‍♂️", Boolean.TRUE); + emojiTrie.put("💇🏽‍♂", Boolean.TRUE); + emojiTrie.put("💇🏾‍♂️", Boolean.TRUE); + emojiTrie.put("💇🏾‍♂", Boolean.TRUE); + emojiTrie.put("💇🏿‍♂️", Boolean.TRUE); + emojiTrie.put("💇🏿‍♂", Boolean.TRUE); + emojiTrie.put("💇‍♀️", Boolean.TRUE); + emojiTrie.put("💇‍♀", Boolean.TRUE); + emojiTrie.put("💇🏻‍♀️", Boolean.TRUE); + emojiTrie.put("💇🏻‍♀", Boolean.TRUE); + emojiTrie.put("💇🏼‍♀️", Boolean.TRUE); + emojiTrie.put("💇🏼‍♀", Boolean.TRUE); + emojiTrie.put("💇🏽‍♀️", Boolean.TRUE); + emojiTrie.put("💇🏽‍♀", Boolean.TRUE); + emojiTrie.put("💇🏾‍♀️", Boolean.TRUE); + emojiTrie.put("💇🏾‍♀", Boolean.TRUE); + emojiTrie.put("💇🏿‍♀️", Boolean.TRUE); + emojiTrie.put("💇🏿‍♀", Boolean.TRUE); + emojiTrie.put("🚶", Boolean.TRUE); + emojiTrie.put("🚶🏻", Boolean.TRUE); + emojiTrie.put("🚶🏼", Boolean.TRUE); + emojiTrie.put("🚶🏽", Boolean.TRUE); + emojiTrie.put("🚶🏾", Boolean.TRUE); + emojiTrie.put("🚶🏿", Boolean.TRUE); + emojiTrie.put("🚶‍♂️", Boolean.TRUE); + emojiTrie.put("🚶‍♂", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♂", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♂", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♂", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♂", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♂", Boolean.TRUE); + emojiTrie.put("🚶‍♀️", Boolean.TRUE); + emojiTrie.put("🚶‍♀", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♀", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♀", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♀", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♀", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♀", Boolean.TRUE); + emojiTrie.put("🚶‍➡️", Boolean.TRUE); + emojiTrie.put("🚶‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏻‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏻‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏼‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏼‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏽‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏽‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏾‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏾‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏿‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏿‍➡", Boolean.TRUE); + emojiTrie.put("🚶‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🚶‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🚶‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🚶‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🚶‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🚶‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏻‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏼‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏽‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏾‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🚶🏿‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🧍", Boolean.TRUE); + emojiTrie.put("🧍🏻", Boolean.TRUE); + emojiTrie.put("🧍🏼", Boolean.TRUE); + emojiTrie.put("🧍🏽", Boolean.TRUE); + emojiTrie.put("🧍🏾", Boolean.TRUE); + emojiTrie.put("🧍🏿", Boolean.TRUE); + emojiTrie.put("🧍‍♂️", Boolean.TRUE); + emojiTrie.put("🧍‍♂", Boolean.TRUE); + emojiTrie.put("🧍🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧍🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧍🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧍🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧍🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧍🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧍🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧍🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧍🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧍🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧍‍♀️", Boolean.TRUE); + emojiTrie.put("🧍‍♀", Boolean.TRUE); + emojiTrie.put("🧍🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧍🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧍🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧍🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧍🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧍🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧍🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧍🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧍🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧍🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧎", Boolean.TRUE); + emojiTrie.put("🧎🏻", Boolean.TRUE); + emojiTrie.put("🧎🏼", Boolean.TRUE); + emojiTrie.put("🧎🏽", Boolean.TRUE); + emojiTrie.put("🧎🏾", Boolean.TRUE); + emojiTrie.put("🧎🏿", Boolean.TRUE); + emojiTrie.put("🧎‍♂️", Boolean.TRUE); + emojiTrie.put("🧎‍♂", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧎‍♀️", Boolean.TRUE); + emojiTrie.put("🧎‍♀", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧎‍➡️", Boolean.TRUE); + emojiTrie.put("🧎‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏻‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏻‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏼‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏼‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏽‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏽‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏾‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏾‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏿‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏿‍➡", Boolean.TRUE); + emojiTrie.put("🧎‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🧎‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🧎‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🧎‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🧎‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🧎‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏻‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏼‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏽‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏾‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🧎🏿‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🧑‍🦯", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦯", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦯", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦯", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦯", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦯", Boolean.TRUE); + emojiTrie.put("🧑‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("🧑‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👨‍🦯", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦯", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦯", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦯", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦯", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦯", Boolean.TRUE); + emojiTrie.put("👨‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👨‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👩‍🦯", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦯", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦯", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦯", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦯", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦯", Boolean.TRUE); + emojiTrie.put("👩‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👩‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦯‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦯‍➡", Boolean.TRUE); + emojiTrie.put("🧑‍🦼", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦼", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦼", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦼", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦼", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦼", Boolean.TRUE); + emojiTrie.put("🧑‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("🧑‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👨‍🦼", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦼", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦼", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦼", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦼", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦼", Boolean.TRUE); + emojiTrie.put("👨‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👨‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👩‍🦼", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦼", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦼", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦼", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦼", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦼", Boolean.TRUE); + emojiTrie.put("👩‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👩‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦼‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦼‍➡", Boolean.TRUE); + emojiTrie.put("🧑‍🦽", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦽", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦽", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦽", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦽", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦽", Boolean.TRUE); + emojiTrie.put("🧑‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("🧑‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👨‍🦽", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦽", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦽", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦽", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦽", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦽", Boolean.TRUE); + emojiTrie.put("👨‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👨‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏻‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏼‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏽‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏾‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👨🏿‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👩‍🦽", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦽", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦽", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦽", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦽", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦽", Boolean.TRUE); + emojiTrie.put("👩‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👩‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏻‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏼‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏽‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏾‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦽‍➡️", Boolean.TRUE); + emojiTrie.put("👩🏿‍🦽‍➡", Boolean.TRUE); + emojiTrie.put("🏃", Boolean.TRUE); + emojiTrie.put("🏃🏻", Boolean.TRUE); + emojiTrie.put("🏃🏼", Boolean.TRUE); + emojiTrie.put("🏃🏽", Boolean.TRUE); + emojiTrie.put("🏃🏾", Boolean.TRUE); + emojiTrie.put("🏃🏿", Boolean.TRUE); + emojiTrie.put("🏃‍♂️", Boolean.TRUE); + emojiTrie.put("🏃‍♂", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♂", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♂", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♂", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♂", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♂", Boolean.TRUE); + emojiTrie.put("🏃‍♀️", Boolean.TRUE); + emojiTrie.put("🏃‍♀", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♀", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♀", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♀", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♀", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♀", Boolean.TRUE); + emojiTrie.put("🏃‍➡️", Boolean.TRUE); + emojiTrie.put("🏃‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏻‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏻‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏼‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏼‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏽‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏽‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏾‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏾‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏿‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏿‍➡", Boolean.TRUE); + emojiTrie.put("🏃‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🏃‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🏃‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♀️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♀‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♀️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♀‍➡", Boolean.TRUE); + emojiTrie.put("🏃‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🏃‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🏃‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏻‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏼‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏽‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏾‍♂‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♂️‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♂‍➡️", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♂️‍➡", Boolean.TRUE); + emojiTrie.put("🏃🏿‍♂‍➡", Boolean.TRUE); + emojiTrie.put("💃", Boolean.TRUE); + emojiTrie.put("💃🏻", Boolean.TRUE); + emojiTrie.put("💃🏼", Boolean.TRUE); + emojiTrie.put("💃🏽", Boolean.TRUE); + emojiTrie.put("💃🏾", Boolean.TRUE); + emojiTrie.put("💃🏿", Boolean.TRUE); + emojiTrie.put("🕺", Boolean.TRUE); + emojiTrie.put("🕺🏻", Boolean.TRUE); + emojiTrie.put("🕺🏼", Boolean.TRUE); + emojiTrie.put("🕺🏽", Boolean.TRUE); + emojiTrie.put("🕺🏾", Boolean.TRUE); + emojiTrie.put("🕺🏿", Boolean.TRUE); + emojiTrie.put("🕴️", Boolean.TRUE); + emojiTrie.put("🕴", Boolean.TRUE); + emojiTrie.put("🕴🏻", Boolean.TRUE); + emojiTrie.put("🕴🏼", Boolean.TRUE); + emojiTrie.put("🕴🏽", Boolean.TRUE); + emojiTrie.put("🕴🏾", Boolean.TRUE); + emojiTrie.put("🕴🏿", Boolean.TRUE); + emojiTrie.put("👯", Boolean.TRUE); + emojiTrie.put("👯‍♂️", Boolean.TRUE); + emojiTrie.put("👯‍♂", Boolean.TRUE); + emojiTrie.put("👯‍♀️", Boolean.TRUE); + emojiTrie.put("👯‍♀", Boolean.TRUE); + emojiTrie.put("🧖", Boolean.TRUE); + emojiTrie.put("🧖🏻", Boolean.TRUE); + emojiTrie.put("🧖🏼", Boolean.TRUE); + emojiTrie.put("🧖🏽", Boolean.TRUE); + emojiTrie.put("🧖🏾", Boolean.TRUE); + emojiTrie.put("🧖🏿", Boolean.TRUE); + emojiTrie.put("🧖‍♂️", Boolean.TRUE); + emojiTrie.put("🧖‍♂", Boolean.TRUE); + emojiTrie.put("🧖🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧖🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧖🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧖🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧖🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧖🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧖🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧖🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧖🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧖🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧖‍♀️", Boolean.TRUE); + emojiTrie.put("🧖‍♀", Boolean.TRUE); + emojiTrie.put("🧖🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧖🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧖🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧖🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧖🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧖🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧖🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧖🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧖🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧖🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧗", Boolean.TRUE); + emojiTrie.put("🧗🏻", Boolean.TRUE); + emojiTrie.put("🧗🏼", Boolean.TRUE); + emojiTrie.put("🧗🏽", Boolean.TRUE); + emojiTrie.put("🧗🏾", Boolean.TRUE); + emojiTrie.put("🧗🏿", Boolean.TRUE); + emojiTrie.put("🧗‍♂️", Boolean.TRUE); + emojiTrie.put("🧗‍♂", Boolean.TRUE); + emojiTrie.put("🧗🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧗🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧗🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧗🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧗🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧗🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧗🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧗🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧗🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧗🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧗‍♀️", Boolean.TRUE); + emojiTrie.put("🧗‍♀", Boolean.TRUE); + emojiTrie.put("🧗🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧗🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧗🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧗🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧗🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧗🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧗🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧗🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧗🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧗🏿‍♀", Boolean.TRUE); + emojiTrie.put("🤺", Boolean.TRUE); + emojiTrie.put("🏇", Boolean.TRUE); + emojiTrie.put("🏇🏻", Boolean.TRUE); + emojiTrie.put("🏇🏼", Boolean.TRUE); + emojiTrie.put("🏇🏽", Boolean.TRUE); + emojiTrie.put("🏇🏾", Boolean.TRUE); + emojiTrie.put("🏇🏿", Boolean.TRUE); + emojiTrie.put("⛷️", Boolean.TRUE); + emojiTrie.put("⛷", Boolean.TRUE); + emojiTrie.put("🏂", Boolean.TRUE); + emojiTrie.put("🏂🏻", Boolean.TRUE); + emojiTrie.put("🏂🏼", Boolean.TRUE); + emojiTrie.put("🏂🏽", Boolean.TRUE); + emojiTrie.put("🏂🏾", Boolean.TRUE); + emojiTrie.put("🏂🏿", Boolean.TRUE); + emojiTrie.put("🏌️", Boolean.TRUE); + emojiTrie.put("🏌", Boolean.TRUE); + emojiTrie.put("🏌🏻", Boolean.TRUE); + emojiTrie.put("🏌🏼", Boolean.TRUE); + emojiTrie.put("🏌🏽", Boolean.TRUE); + emojiTrie.put("🏌🏾", Boolean.TRUE); + emojiTrie.put("🏌🏿", Boolean.TRUE); + emojiTrie.put("🏌️‍♂️", Boolean.TRUE); + emojiTrie.put("🏌‍♂️", Boolean.TRUE); + emojiTrie.put("🏌️‍♂", Boolean.TRUE); + emojiTrie.put("🏌‍♂", Boolean.TRUE); + emojiTrie.put("🏌🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🏌🏻‍♂", Boolean.TRUE); + emojiTrie.put("🏌🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🏌🏼‍♂", Boolean.TRUE); + emojiTrie.put("🏌🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🏌🏽‍♂", Boolean.TRUE); + emojiTrie.put("🏌🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🏌🏾‍♂", Boolean.TRUE); + emojiTrie.put("🏌🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🏌🏿‍♂", Boolean.TRUE); + emojiTrie.put("🏌️‍♀️", Boolean.TRUE); + emojiTrie.put("🏌‍♀️", Boolean.TRUE); + emojiTrie.put("🏌️‍♀", Boolean.TRUE); + emojiTrie.put("🏌‍♀", Boolean.TRUE); + emojiTrie.put("🏌🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🏌🏻‍♀", Boolean.TRUE); + emojiTrie.put("🏌🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🏌🏼‍♀", Boolean.TRUE); + emojiTrie.put("🏌🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🏌🏽‍♀", Boolean.TRUE); + emojiTrie.put("🏌🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🏌🏾‍♀", Boolean.TRUE); + emojiTrie.put("🏌🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🏌🏿‍♀", Boolean.TRUE); + emojiTrie.put("🏄", Boolean.TRUE); + emojiTrie.put("🏄🏻", Boolean.TRUE); + emojiTrie.put("🏄🏼", Boolean.TRUE); + emojiTrie.put("🏄🏽", Boolean.TRUE); + emojiTrie.put("🏄🏾", Boolean.TRUE); + emojiTrie.put("🏄🏿", Boolean.TRUE); + emojiTrie.put("🏄‍♂️", Boolean.TRUE); + emojiTrie.put("🏄‍♂", Boolean.TRUE); + emojiTrie.put("🏄🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🏄🏻‍♂", Boolean.TRUE); + emojiTrie.put("🏄🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🏄🏼‍♂", Boolean.TRUE); + emojiTrie.put("🏄🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🏄🏽‍♂", Boolean.TRUE); + emojiTrie.put("🏄🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🏄🏾‍♂", Boolean.TRUE); + emojiTrie.put("🏄🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🏄🏿‍♂", Boolean.TRUE); + emojiTrie.put("🏄‍♀️", Boolean.TRUE); + emojiTrie.put("🏄‍♀", Boolean.TRUE); + emojiTrie.put("🏄🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🏄🏻‍♀", Boolean.TRUE); + emojiTrie.put("🏄🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🏄🏼‍♀", Boolean.TRUE); + emojiTrie.put("🏄🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🏄🏽‍♀", Boolean.TRUE); + emojiTrie.put("🏄🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🏄🏾‍♀", Boolean.TRUE); + emojiTrie.put("🏄🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🏄🏿‍♀", Boolean.TRUE); + emojiTrie.put("🚣", Boolean.TRUE); + emojiTrie.put("🚣🏻", Boolean.TRUE); + emojiTrie.put("🚣🏼", Boolean.TRUE); + emojiTrie.put("🚣🏽", Boolean.TRUE); + emojiTrie.put("🚣🏾", Boolean.TRUE); + emojiTrie.put("🚣🏿", Boolean.TRUE); + emojiTrie.put("🚣‍♂️", Boolean.TRUE); + emojiTrie.put("🚣‍♂", Boolean.TRUE); + emojiTrie.put("🚣🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🚣🏻‍♂", Boolean.TRUE); + emojiTrie.put("🚣🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🚣🏼‍♂", Boolean.TRUE); + emojiTrie.put("🚣🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🚣🏽‍♂", Boolean.TRUE); + emojiTrie.put("🚣🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🚣🏾‍♂", Boolean.TRUE); + emojiTrie.put("🚣🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🚣🏿‍♂", Boolean.TRUE); + emojiTrie.put("🚣‍♀️", Boolean.TRUE); + emojiTrie.put("🚣‍♀", Boolean.TRUE); + emojiTrie.put("🚣🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🚣🏻‍♀", Boolean.TRUE); + emojiTrie.put("🚣🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🚣🏼‍♀", Boolean.TRUE); + emojiTrie.put("🚣🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🚣🏽‍♀", Boolean.TRUE); + emojiTrie.put("🚣🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🚣🏾‍♀", Boolean.TRUE); + emojiTrie.put("🚣🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🚣🏿‍♀", Boolean.TRUE); + emojiTrie.put("🏊", Boolean.TRUE); + emojiTrie.put("🏊🏻", Boolean.TRUE); + emojiTrie.put("🏊🏼", Boolean.TRUE); + emojiTrie.put("🏊🏽", Boolean.TRUE); + emojiTrie.put("🏊🏾", Boolean.TRUE); + emojiTrie.put("🏊🏿", Boolean.TRUE); + emojiTrie.put("🏊‍♂️", Boolean.TRUE); + emojiTrie.put("🏊‍♂", Boolean.TRUE); + emojiTrie.put("🏊🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🏊🏻‍♂", Boolean.TRUE); + emojiTrie.put("🏊🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🏊🏼‍♂", Boolean.TRUE); + emojiTrie.put("🏊🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🏊🏽‍♂", Boolean.TRUE); + emojiTrie.put("🏊🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🏊🏾‍♂", Boolean.TRUE); + emojiTrie.put("🏊🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🏊🏿‍♂", Boolean.TRUE); + emojiTrie.put("🏊‍♀️", Boolean.TRUE); + emojiTrie.put("🏊‍♀", Boolean.TRUE); + emojiTrie.put("🏊🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🏊🏻‍♀", Boolean.TRUE); + emojiTrie.put("🏊🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🏊🏼‍♀", Boolean.TRUE); + emojiTrie.put("🏊🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🏊🏽‍♀", Boolean.TRUE); + emojiTrie.put("🏊🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🏊🏾‍♀", Boolean.TRUE); + emojiTrie.put("🏊🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🏊🏿‍♀", Boolean.TRUE); + emojiTrie.put("⛹️", Boolean.TRUE); + emojiTrie.put("⛹", Boolean.TRUE); + emojiTrie.put("⛹🏻", Boolean.TRUE); + emojiTrie.put("⛹🏼", Boolean.TRUE); + emojiTrie.put("⛹🏽", Boolean.TRUE); + emojiTrie.put("⛹🏾", Boolean.TRUE); + emojiTrie.put("⛹🏿", Boolean.TRUE); + emojiTrie.put("⛹️‍♂️", Boolean.TRUE); + emojiTrie.put("⛹‍♂️", Boolean.TRUE); + emojiTrie.put("⛹️‍♂", Boolean.TRUE); + emojiTrie.put("⛹‍♂", Boolean.TRUE); + emojiTrie.put("⛹🏻‍♂️", Boolean.TRUE); + emojiTrie.put("⛹🏻‍♂", Boolean.TRUE); + emojiTrie.put("⛹🏼‍♂️", Boolean.TRUE); + emojiTrie.put("⛹🏼‍♂", Boolean.TRUE); + emojiTrie.put("⛹🏽‍♂️", Boolean.TRUE); + emojiTrie.put("⛹🏽‍♂", Boolean.TRUE); + emojiTrie.put("⛹🏾‍♂️", Boolean.TRUE); + emojiTrie.put("⛹🏾‍♂", Boolean.TRUE); + emojiTrie.put("⛹🏿‍♂️", Boolean.TRUE); + emojiTrie.put("⛹🏿‍♂", Boolean.TRUE); + emojiTrie.put("⛹️‍♀️", Boolean.TRUE); + emojiTrie.put("⛹‍♀️", Boolean.TRUE); + emojiTrie.put("⛹️‍♀", Boolean.TRUE); + emojiTrie.put("⛹‍♀", Boolean.TRUE); + emojiTrie.put("⛹🏻‍♀️", Boolean.TRUE); + emojiTrie.put("⛹🏻‍♀", Boolean.TRUE); + emojiTrie.put("⛹🏼‍♀️", Boolean.TRUE); + emojiTrie.put("⛹🏼‍♀", Boolean.TRUE); + emojiTrie.put("⛹🏽‍♀️", Boolean.TRUE); + emojiTrie.put("⛹🏽‍♀", Boolean.TRUE); + emojiTrie.put("⛹🏾‍♀️", Boolean.TRUE); + emojiTrie.put("⛹🏾‍♀", Boolean.TRUE); + emojiTrie.put("⛹🏿‍♀️", Boolean.TRUE); + emojiTrie.put("⛹🏿‍♀", Boolean.TRUE); + emojiTrie.put("🏋️", Boolean.TRUE); + emojiTrie.put("🏋", Boolean.TRUE); + emojiTrie.put("🏋🏻", Boolean.TRUE); + emojiTrie.put("🏋🏼", Boolean.TRUE); + emojiTrie.put("🏋🏽", Boolean.TRUE); + emojiTrie.put("🏋🏾", Boolean.TRUE); + emojiTrie.put("🏋🏿", Boolean.TRUE); + emojiTrie.put("🏋️‍♂️", Boolean.TRUE); + emojiTrie.put("🏋‍♂️", Boolean.TRUE); + emojiTrie.put("🏋️‍♂", Boolean.TRUE); + emojiTrie.put("🏋‍♂", Boolean.TRUE); + emojiTrie.put("🏋🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🏋🏻‍♂", Boolean.TRUE); + emojiTrie.put("🏋🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🏋🏼‍♂", Boolean.TRUE); + emojiTrie.put("🏋🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🏋🏽‍♂", Boolean.TRUE); + emojiTrie.put("🏋🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🏋🏾‍♂", Boolean.TRUE); + emojiTrie.put("🏋🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🏋🏿‍♂", Boolean.TRUE); + emojiTrie.put("🏋️‍♀️", Boolean.TRUE); + emojiTrie.put("🏋‍♀️", Boolean.TRUE); + emojiTrie.put("🏋️‍♀", Boolean.TRUE); + emojiTrie.put("🏋‍♀", Boolean.TRUE); + emojiTrie.put("🏋🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🏋🏻‍♀", Boolean.TRUE); + emojiTrie.put("🏋🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🏋🏼‍♀", Boolean.TRUE); + emojiTrie.put("🏋🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🏋🏽‍♀", Boolean.TRUE); + emojiTrie.put("🏋🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🏋🏾‍♀", Boolean.TRUE); + emojiTrie.put("🏋🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🏋🏿‍♀", Boolean.TRUE); + emojiTrie.put("🚴", Boolean.TRUE); + emojiTrie.put("🚴🏻", Boolean.TRUE); + emojiTrie.put("🚴🏼", Boolean.TRUE); + emojiTrie.put("🚴🏽", Boolean.TRUE); + emojiTrie.put("🚴🏾", Boolean.TRUE); + emojiTrie.put("🚴🏿", Boolean.TRUE); + emojiTrie.put("🚴‍♂️", Boolean.TRUE); + emojiTrie.put("🚴‍♂", Boolean.TRUE); + emojiTrie.put("🚴🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🚴🏻‍♂", Boolean.TRUE); + emojiTrie.put("🚴🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🚴🏼‍♂", Boolean.TRUE); + emojiTrie.put("🚴🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🚴🏽‍♂", Boolean.TRUE); + emojiTrie.put("🚴🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🚴🏾‍♂", Boolean.TRUE); + emojiTrie.put("🚴🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🚴🏿‍♂", Boolean.TRUE); + emojiTrie.put("🚴‍♀️", Boolean.TRUE); + emojiTrie.put("🚴‍♀", Boolean.TRUE); + emojiTrie.put("🚴🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🚴🏻‍♀", Boolean.TRUE); + emojiTrie.put("🚴🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🚴🏼‍♀", Boolean.TRUE); + emojiTrie.put("🚴🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🚴🏽‍♀", Boolean.TRUE); + emojiTrie.put("🚴🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🚴🏾‍♀", Boolean.TRUE); + emojiTrie.put("🚴🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🚴🏿‍♀", Boolean.TRUE); + emojiTrie.put("🚵", Boolean.TRUE); + emojiTrie.put("🚵🏻", Boolean.TRUE); + emojiTrie.put("🚵🏼", Boolean.TRUE); + emojiTrie.put("🚵🏽", Boolean.TRUE); + emojiTrie.put("🚵🏾", Boolean.TRUE); + emojiTrie.put("🚵🏿", Boolean.TRUE); + emojiTrie.put("🚵‍♂️", Boolean.TRUE); + emojiTrie.put("🚵‍♂", Boolean.TRUE); + emojiTrie.put("🚵🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🚵🏻‍♂", Boolean.TRUE); + emojiTrie.put("🚵🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🚵🏼‍♂", Boolean.TRUE); + emojiTrie.put("🚵🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🚵🏽‍♂", Boolean.TRUE); + emojiTrie.put("🚵🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🚵🏾‍♂", Boolean.TRUE); + emojiTrie.put("🚵🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🚵🏿‍♂", Boolean.TRUE); + emojiTrie.put("🚵‍♀️", Boolean.TRUE); + emojiTrie.put("🚵‍♀", Boolean.TRUE); + emojiTrie.put("🚵🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🚵🏻‍♀", Boolean.TRUE); + emojiTrie.put("🚵🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🚵🏼‍♀", Boolean.TRUE); + emojiTrie.put("🚵🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🚵🏽‍♀", Boolean.TRUE); + emojiTrie.put("🚵🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🚵🏾‍♀", Boolean.TRUE); + emojiTrie.put("🚵🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🚵🏿‍♀", Boolean.TRUE); + emojiTrie.put("🤸", Boolean.TRUE); + emojiTrie.put("🤸🏻", Boolean.TRUE); + emojiTrie.put("🤸🏼", Boolean.TRUE); + emojiTrie.put("🤸🏽", Boolean.TRUE); + emojiTrie.put("🤸🏾", Boolean.TRUE); + emojiTrie.put("🤸🏿", Boolean.TRUE); + emojiTrie.put("🤸‍♂️", Boolean.TRUE); + emojiTrie.put("🤸‍♂", Boolean.TRUE); + emojiTrie.put("🤸🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🤸🏻‍♂", Boolean.TRUE); + emojiTrie.put("🤸🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🤸🏼‍♂", Boolean.TRUE); + emojiTrie.put("🤸🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🤸🏽‍♂", Boolean.TRUE); + emojiTrie.put("🤸🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🤸🏾‍♂", Boolean.TRUE); + emojiTrie.put("🤸🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🤸🏿‍♂", Boolean.TRUE); + emojiTrie.put("🤸‍♀️", Boolean.TRUE); + emojiTrie.put("🤸‍♀", Boolean.TRUE); + emojiTrie.put("🤸🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🤸🏻‍♀", Boolean.TRUE); + emojiTrie.put("🤸🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🤸🏼‍♀", Boolean.TRUE); + emojiTrie.put("🤸🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🤸🏽‍♀", Boolean.TRUE); + emojiTrie.put("🤸🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🤸🏾‍♀", Boolean.TRUE); + emojiTrie.put("🤸🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🤸🏿‍♀", Boolean.TRUE); + emojiTrie.put("🤼", Boolean.TRUE); + emojiTrie.put("🤼‍♂️", Boolean.TRUE); + emojiTrie.put("🤼‍♂", Boolean.TRUE); + emojiTrie.put("🤼‍♀️", Boolean.TRUE); + emojiTrie.put("🤼‍♀", Boolean.TRUE); + emojiTrie.put("🤽", Boolean.TRUE); + emojiTrie.put("🤽🏻", Boolean.TRUE); + emojiTrie.put("🤽🏼", Boolean.TRUE); + emojiTrie.put("🤽🏽", Boolean.TRUE); + emojiTrie.put("🤽🏾", Boolean.TRUE); + emojiTrie.put("🤽🏿", Boolean.TRUE); + emojiTrie.put("🤽‍♂️", Boolean.TRUE); + emojiTrie.put("🤽‍♂", Boolean.TRUE); + emojiTrie.put("🤽🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🤽🏻‍♂", Boolean.TRUE); + emojiTrie.put("🤽🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🤽🏼‍♂", Boolean.TRUE); + emojiTrie.put("🤽🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🤽🏽‍♂", Boolean.TRUE); + emojiTrie.put("🤽🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🤽🏾‍♂", Boolean.TRUE); + emojiTrie.put("🤽🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🤽🏿‍♂", Boolean.TRUE); + emojiTrie.put("🤽‍♀️", Boolean.TRUE); + emojiTrie.put("🤽‍♀", Boolean.TRUE); + emojiTrie.put("🤽🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🤽🏻‍♀", Boolean.TRUE); + emojiTrie.put("🤽🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🤽🏼‍♀", Boolean.TRUE); + emojiTrie.put("🤽🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🤽🏽‍♀", Boolean.TRUE); + emojiTrie.put("🤽🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🤽🏾‍♀", Boolean.TRUE); + emojiTrie.put("🤽🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🤽🏿‍♀", Boolean.TRUE); + emojiTrie.put("🤾", Boolean.TRUE); + emojiTrie.put("🤾🏻", Boolean.TRUE); + emojiTrie.put("🤾🏼", Boolean.TRUE); + emojiTrie.put("🤾🏽", Boolean.TRUE); + emojiTrie.put("🤾🏾", Boolean.TRUE); + emojiTrie.put("🤾🏿", Boolean.TRUE); + emojiTrie.put("🤾‍♂️", Boolean.TRUE); + emojiTrie.put("🤾‍♂", Boolean.TRUE); + emojiTrie.put("🤾🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🤾🏻‍♂", Boolean.TRUE); + emojiTrie.put("🤾🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🤾🏼‍♂", Boolean.TRUE); + emojiTrie.put("🤾🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🤾🏽‍♂", Boolean.TRUE); + emojiTrie.put("🤾🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🤾🏾‍♂", Boolean.TRUE); + emojiTrie.put("🤾🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🤾🏿‍♂", Boolean.TRUE); + emojiTrie.put("🤾‍♀️", Boolean.TRUE); + emojiTrie.put("🤾‍♀", Boolean.TRUE); + emojiTrie.put("🤾🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🤾🏻‍♀", Boolean.TRUE); + emojiTrie.put("🤾🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🤾🏼‍♀", Boolean.TRUE); + emojiTrie.put("🤾🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🤾🏽‍♀", Boolean.TRUE); + emojiTrie.put("🤾🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🤾🏾‍♀", Boolean.TRUE); + emojiTrie.put("🤾🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🤾🏿‍♀", Boolean.TRUE); + emojiTrie.put("🤹", Boolean.TRUE); + emojiTrie.put("🤹🏻", Boolean.TRUE); + emojiTrie.put("🤹🏼", Boolean.TRUE); + emojiTrie.put("🤹🏽", Boolean.TRUE); + emojiTrie.put("🤹🏾", Boolean.TRUE); + emojiTrie.put("🤹🏿", Boolean.TRUE); + emojiTrie.put("🤹‍♂️", Boolean.TRUE); + emojiTrie.put("🤹‍♂", Boolean.TRUE); + emojiTrie.put("🤹🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🤹🏻‍♂", Boolean.TRUE); + emojiTrie.put("🤹🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🤹🏼‍♂", Boolean.TRUE); + emojiTrie.put("🤹🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🤹🏽‍♂", Boolean.TRUE); + emojiTrie.put("🤹🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🤹🏾‍♂", Boolean.TRUE); + emojiTrie.put("🤹🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🤹🏿‍♂", Boolean.TRUE); + emojiTrie.put("🤹‍♀️", Boolean.TRUE); + emojiTrie.put("🤹‍♀", Boolean.TRUE); + emojiTrie.put("🤹🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🤹🏻‍♀", Boolean.TRUE); + emojiTrie.put("🤹🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🤹🏼‍♀", Boolean.TRUE); + emojiTrie.put("🤹🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🤹🏽‍♀", Boolean.TRUE); + emojiTrie.put("🤹🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🤹🏾‍♀", Boolean.TRUE); + emojiTrie.put("🤹🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🤹🏿‍♀", Boolean.TRUE); + emojiTrie.put("🧘", Boolean.TRUE); + emojiTrie.put("🧘🏻", Boolean.TRUE); + emojiTrie.put("🧘🏼", Boolean.TRUE); + emojiTrie.put("🧘🏽", Boolean.TRUE); + emojiTrie.put("🧘🏾", Boolean.TRUE); + emojiTrie.put("🧘🏿", Boolean.TRUE); + emojiTrie.put("🧘‍♂️", Boolean.TRUE); + emojiTrie.put("🧘‍♂", Boolean.TRUE); + emojiTrie.put("🧘🏻‍♂️", Boolean.TRUE); + emojiTrie.put("🧘🏻‍♂", Boolean.TRUE); + emojiTrie.put("🧘🏼‍♂️", Boolean.TRUE); + emojiTrie.put("🧘🏼‍♂", Boolean.TRUE); + emojiTrie.put("🧘🏽‍♂️", Boolean.TRUE); + emojiTrie.put("🧘🏽‍♂", Boolean.TRUE); + emojiTrie.put("🧘🏾‍♂️", Boolean.TRUE); + emojiTrie.put("🧘🏾‍♂", Boolean.TRUE); + emojiTrie.put("🧘🏿‍♂️", Boolean.TRUE); + emojiTrie.put("🧘🏿‍♂", Boolean.TRUE); + emojiTrie.put("🧘‍♀️", Boolean.TRUE); + emojiTrie.put("🧘‍♀", Boolean.TRUE); + emojiTrie.put("🧘🏻‍♀️", Boolean.TRUE); + emojiTrie.put("🧘🏻‍♀", Boolean.TRUE); + emojiTrie.put("🧘🏼‍♀️", Boolean.TRUE); + emojiTrie.put("🧘🏼‍♀", Boolean.TRUE); + emojiTrie.put("🧘🏽‍♀️", Boolean.TRUE); + emojiTrie.put("🧘🏽‍♀", Boolean.TRUE); + emojiTrie.put("🧘🏾‍♀️", Boolean.TRUE); + emojiTrie.put("🧘🏾‍♀", Boolean.TRUE); + emojiTrie.put("🧘🏿‍♀️", Boolean.TRUE); + emojiTrie.put("🧘🏿‍♀", Boolean.TRUE); + emojiTrie.put("🛀", Boolean.TRUE); + emojiTrie.put("🛀🏻", Boolean.TRUE); + emojiTrie.put("🛀🏼", Boolean.TRUE); + emojiTrie.put("🛀🏽", Boolean.TRUE); + emojiTrie.put("🛀🏾", Boolean.TRUE); + emojiTrie.put("🛀🏿", Boolean.TRUE); + emojiTrie.put("🛌", Boolean.TRUE); + emojiTrie.put("🛌🏻", Boolean.TRUE); + emojiTrie.put("🛌🏼", Boolean.TRUE); + emojiTrie.put("🛌🏽", Boolean.TRUE); + emojiTrie.put("🛌🏾", Boolean.TRUE); + emojiTrie.put("🛌🏿", Boolean.TRUE); + emojiTrie.put("🧑‍🤝‍🧑", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🤝‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🤝‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🤝‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🤝‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏻‍🤝‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🤝‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🤝‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🤝‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🤝‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏼‍🤝‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🤝‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🤝‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🤝‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🤝‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏽‍🤝‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🤝‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🤝‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🤝‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🤝‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏾‍🤝‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🤝‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🤝‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🤝‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🤝‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏿‍🤝‍🧑🏿", Boolean.TRUE); + emojiTrie.put("👭", Boolean.TRUE); + emojiTrie.put("👭🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍🤝‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍🤝‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍🤝‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍🤝‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍🤝‍👩🏻", Boolean.TRUE); + emojiTrie.put("👭🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍🤝‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍🤝‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍🤝‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍🤝‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍🤝‍👩🏼", Boolean.TRUE); + emojiTrie.put("👭🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍🤝‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍🤝‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍🤝‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍🤝‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍🤝‍👩🏽", Boolean.TRUE); + emojiTrie.put("👭🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍🤝‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍🤝‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍🤝‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍🤝‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍🤝‍👩🏾", Boolean.TRUE); + emojiTrie.put("👭🏿", Boolean.TRUE); + emojiTrie.put("👫", Boolean.TRUE); + emojiTrie.put("👫🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍🤝‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍🤝‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍🤝‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍🤝‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍🤝‍👨🏻", Boolean.TRUE); + emojiTrie.put("👫🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍🤝‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍🤝‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍🤝‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍🤝‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍🤝‍👨🏼", Boolean.TRUE); + emojiTrie.put("👫🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍🤝‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍🤝‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍🤝‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍🤝‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍🤝‍👨🏽", Boolean.TRUE); + emojiTrie.put("👫🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍🤝‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍🤝‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍🤝‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍🤝‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍🤝‍👨🏾", Boolean.TRUE); + emojiTrie.put("👫🏿", Boolean.TRUE); + emojiTrie.put("👬", Boolean.TRUE); + emojiTrie.put("👬🏻", Boolean.TRUE); + emojiTrie.put("👨🏻‍🤝‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏻‍🤝‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏻‍🤝‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏻‍🤝‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏼‍🤝‍👨🏻", Boolean.TRUE); + emojiTrie.put("👬🏼", Boolean.TRUE); + emojiTrie.put("👨🏼‍🤝‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏼‍🤝‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏼‍🤝‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏽‍🤝‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏽‍🤝‍👨🏼", Boolean.TRUE); + emojiTrie.put("👬🏽", Boolean.TRUE); + emojiTrie.put("👨🏽‍🤝‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏽‍🤝‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏾‍🤝‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏾‍🤝‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏾‍🤝‍👨🏽", Boolean.TRUE); + emojiTrie.put("👬🏾", Boolean.TRUE); + emojiTrie.put("👨🏾‍🤝‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏿‍🤝‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏿‍🤝‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏿‍🤝‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏿‍🤝‍👨🏾", Boolean.TRUE); + emojiTrie.put("👬🏿", Boolean.TRUE); + emojiTrie.put("💏", Boolean.TRUE); + emojiTrie.put("💏🏻", Boolean.TRUE); + emojiTrie.put("💏🏼", Boolean.TRUE); + emojiTrie.put("💏🏽", Boolean.TRUE); + emojiTrie.put("💏🏾", Boolean.TRUE); + emojiTrie.put("💏🏿", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤️‍💋‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤‍💋‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤️‍💋‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤‍💋‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤️‍💋‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤‍💋‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤️‍💋‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤‍💋‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤️‍💋‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤‍💋‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤️‍💋‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤‍💋‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤️‍💋‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤‍💋‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤️‍💋‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤‍💋‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤️‍💋‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤‍💋‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤️‍💋‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤‍💋‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤️‍💋‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤‍💋‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤️‍💋‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤‍💋‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤️‍💋‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤‍💋‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤️‍💋‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤‍💋‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤️‍💋‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤‍💋‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤️‍💋‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤‍💋‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤️‍💋‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤‍💋‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤️‍💋‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤‍💋‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤️‍💋‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤‍💋‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤️‍💋‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤‍💋‍🧑🏾", Boolean.TRUE); + emojiTrie.put("👩‍❤️‍💋‍👨", Boolean.TRUE); + emojiTrie.put("👩‍❤‍💋‍👨", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨‍❤️‍💋‍👨", Boolean.TRUE); + emojiTrie.put("👨‍❤‍💋‍👨", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍💋‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍💋‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍💋‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍💋‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍💋‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩‍❤️‍💋‍👩", Boolean.TRUE); + emojiTrie.put("👩‍❤‍💋‍👩", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍💋‍👩🏿", Boolean.TRUE); + emojiTrie.put("💑", Boolean.TRUE); + emojiTrie.put("💑🏻", Boolean.TRUE); + emojiTrie.put("💑🏼", Boolean.TRUE); + emojiTrie.put("💑🏽", Boolean.TRUE); + emojiTrie.put("💑🏾", Boolean.TRUE); + emojiTrie.put("💑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤️‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤️‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤️‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤️‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏻‍❤‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤️‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤️‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤️‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤️‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏼‍❤‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤️‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤️‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤️‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤️‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏽‍❤‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤️‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤️‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤️‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤️‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏾‍❤‍🧑🏿", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤️‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤‍🧑🏻", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤️‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤‍🧑🏼", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤️‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤‍🧑🏽", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤️‍🧑🏾", Boolean.TRUE); + emojiTrie.put("🧑🏿‍❤‍🧑🏾", Boolean.TRUE); + emojiTrie.put("👩‍❤️‍👨", Boolean.TRUE); + emojiTrie.put("👩‍❤‍👨", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨‍❤️‍👨", Boolean.TRUE); + emojiTrie.put("👨‍❤‍👨", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏻‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏼‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏽‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏾‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍👨🏻", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍👨🏼", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍👨🏽", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍👨🏾", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤️‍👨🏿", Boolean.TRUE); + emojiTrie.put("👨🏿‍❤‍👨🏿", Boolean.TRUE); + emojiTrie.put("👩‍❤️‍👩", Boolean.TRUE); + emojiTrie.put("👩‍❤‍👩", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤️‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏻‍❤‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤️‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏼‍❤‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤️‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏽‍❤‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤️‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏾‍❤‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👩🏻", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👩🏼", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👩🏽", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👩🏾", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤️‍👩🏿", Boolean.TRUE); + emojiTrie.put("👩🏿‍❤‍👩🏿", Boolean.TRUE); + emojiTrie.put("👨‍👩‍👦", Boolean.TRUE); + emojiTrie.put("👨‍👩‍👧", Boolean.TRUE); + emojiTrie.put("👨‍👩‍👧‍👦", Boolean.TRUE); + emojiTrie.put("👨‍👩‍👦‍👦", Boolean.TRUE); + emojiTrie.put("👨‍👩‍👧‍👧", Boolean.TRUE); + emojiTrie.put("👨‍👨‍👦", Boolean.TRUE); + emojiTrie.put("👨‍👨‍👧", Boolean.TRUE); + emojiTrie.put("👨‍👨‍👧‍👦", Boolean.TRUE); + emojiTrie.put("👨‍👨‍👦‍👦", Boolean.TRUE); + emojiTrie.put("👨‍👨‍👧‍👧", Boolean.TRUE); + emojiTrie.put("👩‍👩‍👦", Boolean.TRUE); + emojiTrie.put("👩‍👩‍👧", Boolean.TRUE); + emojiTrie.put("👩‍👩‍👧‍👦", Boolean.TRUE); + emojiTrie.put("👩‍👩‍👦‍👦", Boolean.TRUE); + emojiTrie.put("👩‍👩‍👧‍👧", Boolean.TRUE); + emojiTrie.put("👨‍👦", Boolean.TRUE); + emojiTrie.put("👨‍👦‍👦", Boolean.TRUE); + emojiTrie.put("👨‍👧", Boolean.TRUE); + emojiTrie.put("👨‍👧‍👦", Boolean.TRUE); + emojiTrie.put("👨‍👧‍👧", Boolean.TRUE); + emojiTrie.put("👩‍👦", Boolean.TRUE); + emojiTrie.put("👩‍👦‍👦", Boolean.TRUE); + emojiTrie.put("👩‍👧", Boolean.TRUE); + emojiTrie.put("👩‍👧‍👦", Boolean.TRUE); + emojiTrie.put("👩‍👧‍👧", Boolean.TRUE); + emojiTrie.put("🗣️", Boolean.TRUE); + emojiTrie.put("🗣", Boolean.TRUE); + emojiTrie.put("👤", Boolean.TRUE); + emojiTrie.put("👥", Boolean.TRUE); + emojiTrie.put("🫂", Boolean.TRUE); + emojiTrie.put("👪", Boolean.TRUE); + emojiTrie.put("🧑‍🧑‍🧒", Boolean.TRUE); + emojiTrie.put("🧑‍🧑‍🧒‍🧒", Boolean.TRUE); + emojiTrie.put("🧑‍🧒", Boolean.TRUE); + emojiTrie.put("🧑‍🧒‍🧒", Boolean.TRUE); + emojiTrie.put("👣", Boolean.TRUE); + emojiTrie.put("🫆", Boolean.TRUE); + emojiTrie.put("🏻", Boolean.TRUE); + emojiTrie.put("🏼", Boolean.TRUE); + emojiTrie.put("🏽", Boolean.TRUE); + emojiTrie.put("🏾", Boolean.TRUE); + emojiTrie.put("🏿", Boolean.TRUE); + emojiTrie.put("🦰", Boolean.TRUE); + emojiTrie.put("🦱", Boolean.TRUE); + emojiTrie.put("🦳", Boolean.TRUE); + emojiTrie.put("🦲", Boolean.TRUE); + emojiTrie.put("🐵", Boolean.TRUE); + emojiTrie.put("🐒", Boolean.TRUE); + emojiTrie.put("🦍", Boolean.TRUE); + emojiTrie.put("🦧", Boolean.TRUE); + emojiTrie.put("🐶", Boolean.TRUE); + emojiTrie.put("🐕", Boolean.TRUE); + emojiTrie.put("🦮", Boolean.TRUE); + emojiTrie.put("🐕‍🦺", Boolean.TRUE); + emojiTrie.put("🐩", Boolean.TRUE); + emojiTrie.put("🐺", Boolean.TRUE); + emojiTrie.put("🦊", Boolean.TRUE); + emojiTrie.put("🦝", Boolean.TRUE); + emojiTrie.put("🐱", Boolean.TRUE); + emojiTrie.put("🐈", Boolean.TRUE); + emojiTrie.put("🐈‍⬛", Boolean.TRUE); + emojiTrie.put("🦁", Boolean.TRUE); + emojiTrie.put("🐯", Boolean.TRUE); + emojiTrie.put("🐅", Boolean.TRUE); + emojiTrie.put("🐆", Boolean.TRUE); + emojiTrie.put("🐴", Boolean.TRUE); + emojiTrie.put("🫎", Boolean.TRUE); + emojiTrie.put("🫏", Boolean.TRUE); + emojiTrie.put("🐎", Boolean.TRUE); + emojiTrie.put("🦄", Boolean.TRUE); + emojiTrie.put("🦓", Boolean.TRUE); + emojiTrie.put("🦌", Boolean.TRUE); + emojiTrie.put("🦬", Boolean.TRUE); + emojiTrie.put("🐮", Boolean.TRUE); + emojiTrie.put("🐂", Boolean.TRUE); + emojiTrie.put("🐃", Boolean.TRUE); + emojiTrie.put("🐄", Boolean.TRUE); + emojiTrie.put("🐷", Boolean.TRUE); + emojiTrie.put("🐖", Boolean.TRUE); + emojiTrie.put("🐗", Boolean.TRUE); + emojiTrie.put("🐽", Boolean.TRUE); + emojiTrie.put("🐏", Boolean.TRUE); + emojiTrie.put("🐑", Boolean.TRUE); + emojiTrie.put("🐐", Boolean.TRUE); + emojiTrie.put("🐪", Boolean.TRUE); + emojiTrie.put("🐫", Boolean.TRUE); + emojiTrie.put("🦙", Boolean.TRUE); + emojiTrie.put("🦒", Boolean.TRUE); + emojiTrie.put("🐘", Boolean.TRUE); + emojiTrie.put("🦣", Boolean.TRUE); + emojiTrie.put("🦏", Boolean.TRUE); + emojiTrie.put("🦛", Boolean.TRUE); + emojiTrie.put("🐭", Boolean.TRUE); + emojiTrie.put("🐁", Boolean.TRUE); + emojiTrie.put("🐀", Boolean.TRUE); + emojiTrie.put("🐹", Boolean.TRUE); + emojiTrie.put("🐰", Boolean.TRUE); + emojiTrie.put("🐇", Boolean.TRUE); + emojiTrie.put("🐿️", Boolean.TRUE); + emojiTrie.put("🐿", Boolean.TRUE); + emojiTrie.put("🦫", Boolean.TRUE); + emojiTrie.put("🦔", Boolean.TRUE); + emojiTrie.put("🦇", Boolean.TRUE); + emojiTrie.put("🐻", Boolean.TRUE); + emojiTrie.put("🐻‍❄️", Boolean.TRUE); + emojiTrie.put("🐻‍❄", Boolean.TRUE); + emojiTrie.put("🐨", Boolean.TRUE); + emojiTrie.put("🐼", Boolean.TRUE); + emojiTrie.put("🦥", Boolean.TRUE); + emojiTrie.put("🦦", Boolean.TRUE); + emojiTrie.put("🦨", Boolean.TRUE); + emojiTrie.put("🦘", Boolean.TRUE); + emojiTrie.put("🦡", Boolean.TRUE); + emojiTrie.put("🐾", Boolean.TRUE); + emojiTrie.put("🦃", Boolean.TRUE); + emojiTrie.put("🐔", Boolean.TRUE); + emojiTrie.put("🐓", Boolean.TRUE); + emojiTrie.put("🐣", Boolean.TRUE); + emojiTrie.put("🐤", Boolean.TRUE); + emojiTrie.put("🐥", Boolean.TRUE); + emojiTrie.put("🐦", Boolean.TRUE); + emojiTrie.put("🐧", Boolean.TRUE); + emojiTrie.put("🕊️", Boolean.TRUE); + emojiTrie.put("🕊", Boolean.TRUE); + emojiTrie.put("🦅", Boolean.TRUE); + emojiTrie.put("🦆", Boolean.TRUE); + emojiTrie.put("🦢", Boolean.TRUE); + emojiTrie.put("🦉", Boolean.TRUE); + emojiTrie.put("🦤", Boolean.TRUE); + emojiTrie.put("🪶", Boolean.TRUE); + emojiTrie.put("🦩", Boolean.TRUE); + emojiTrie.put("🦚", Boolean.TRUE); + emojiTrie.put("🦜", Boolean.TRUE); + emojiTrie.put("🪽", Boolean.TRUE); + emojiTrie.put("🐦‍⬛", Boolean.TRUE); + emojiTrie.put("🪿", Boolean.TRUE); + emojiTrie.put("🐦‍🔥", Boolean.TRUE); + emojiTrie.put("🐸", Boolean.TRUE); + emojiTrie.put("🐊", Boolean.TRUE); + emojiTrie.put("🐢", Boolean.TRUE); + emojiTrie.put("🦎", Boolean.TRUE); + emojiTrie.put("🐍", Boolean.TRUE); + emojiTrie.put("🐲", Boolean.TRUE); + emojiTrie.put("🐉", Boolean.TRUE); + emojiTrie.put("🦕", Boolean.TRUE); + emojiTrie.put("🦖", Boolean.TRUE); + emojiTrie.put("🐳", Boolean.TRUE); + emojiTrie.put("🐋", Boolean.TRUE); + emojiTrie.put("🐬", Boolean.TRUE); + emojiTrie.put("🦭", Boolean.TRUE); + emojiTrie.put("🐟", Boolean.TRUE); + emojiTrie.put("🐠", Boolean.TRUE); + emojiTrie.put("🐡", Boolean.TRUE); + emojiTrie.put("🦈", Boolean.TRUE); + emojiTrie.put("🐙", Boolean.TRUE); + emojiTrie.put("🐚", Boolean.TRUE); + emojiTrie.put("🪸", Boolean.TRUE); + emojiTrie.put("🪼", Boolean.TRUE); + emojiTrie.put("🦀", Boolean.TRUE); + emojiTrie.put("🦞", Boolean.TRUE); + emojiTrie.put("🦐", Boolean.TRUE); + emojiTrie.put("🦑", Boolean.TRUE); + emojiTrie.put("🦪", Boolean.TRUE); + emojiTrie.put("🐌", Boolean.TRUE); + emojiTrie.put("🦋", Boolean.TRUE); + emojiTrie.put("🐛", Boolean.TRUE); + emojiTrie.put("🐜", Boolean.TRUE); + emojiTrie.put("🐝", Boolean.TRUE); + emojiTrie.put("🪲", Boolean.TRUE); + emojiTrie.put("🐞", Boolean.TRUE); + emojiTrie.put("🦗", Boolean.TRUE); + emojiTrie.put("🪳", Boolean.TRUE); + emojiTrie.put("🕷️", Boolean.TRUE); + emojiTrie.put("🕷", Boolean.TRUE); + emojiTrie.put("🕸️", Boolean.TRUE); + emojiTrie.put("🕸", Boolean.TRUE); + emojiTrie.put("🦂", Boolean.TRUE); + emojiTrie.put("🦟", Boolean.TRUE); + emojiTrie.put("🪰", Boolean.TRUE); + emojiTrie.put("🪱", Boolean.TRUE); + emojiTrie.put("🦠", Boolean.TRUE); + emojiTrie.put("💐", Boolean.TRUE); + emojiTrie.put("🌸", Boolean.TRUE); + emojiTrie.put("💮", Boolean.TRUE); + emojiTrie.put("🪷", Boolean.TRUE); + emojiTrie.put("🏵️", Boolean.TRUE); + emojiTrie.put("🏵", Boolean.TRUE); + emojiTrie.put("🌹", Boolean.TRUE); + emojiTrie.put("🥀", Boolean.TRUE); + emojiTrie.put("🌺", Boolean.TRUE); + emojiTrie.put("🌻", Boolean.TRUE); + emojiTrie.put("🌼", Boolean.TRUE); + emojiTrie.put("🌷", Boolean.TRUE); + emojiTrie.put("🪻", Boolean.TRUE); + emojiTrie.put("🌱", Boolean.TRUE); + emojiTrie.put("🪴", Boolean.TRUE); + emojiTrie.put("🌲", Boolean.TRUE); + emojiTrie.put("🌳", Boolean.TRUE); + emojiTrie.put("🌴", Boolean.TRUE); + emojiTrie.put("🌵", Boolean.TRUE); + emojiTrie.put("🌾", Boolean.TRUE); + emojiTrie.put("🌿", Boolean.TRUE); + emojiTrie.put("☘️", Boolean.TRUE); + emojiTrie.put("☘", Boolean.TRUE); + emojiTrie.put("🍀", Boolean.TRUE); + emojiTrie.put("🍁", Boolean.TRUE); + emojiTrie.put("🍂", Boolean.TRUE); + emojiTrie.put("🍃", Boolean.TRUE); + emojiTrie.put("🪹", Boolean.TRUE); + emojiTrie.put("🪺", Boolean.TRUE); + emojiTrie.put("🍄", Boolean.TRUE); + emojiTrie.put("🪾", Boolean.TRUE); + emojiTrie.put("🍇", Boolean.TRUE); + emojiTrie.put("🍈", Boolean.TRUE); + emojiTrie.put("🍉", Boolean.TRUE); + emojiTrie.put("🍊", Boolean.TRUE); + emojiTrie.put("🍋", Boolean.TRUE); + emojiTrie.put("🍋‍🟩", Boolean.TRUE); + emojiTrie.put("🍌", Boolean.TRUE); + emojiTrie.put("🍍", Boolean.TRUE); + emojiTrie.put("🥭", Boolean.TRUE); + emojiTrie.put("🍎", Boolean.TRUE); + emojiTrie.put("🍏", Boolean.TRUE); + emojiTrie.put("🍐", Boolean.TRUE); + emojiTrie.put("🍑", Boolean.TRUE); + emojiTrie.put("🍒", Boolean.TRUE); + emojiTrie.put("🍓", Boolean.TRUE); + emojiTrie.put("🫐", Boolean.TRUE); + emojiTrie.put("🥝", Boolean.TRUE); + emojiTrie.put("🍅", Boolean.TRUE); + emojiTrie.put("🫒", Boolean.TRUE); + emojiTrie.put("🥥", Boolean.TRUE); + emojiTrie.put("🥑", Boolean.TRUE); + emojiTrie.put("🍆", Boolean.TRUE); + emojiTrie.put("🥔", Boolean.TRUE); + emojiTrie.put("🥕", Boolean.TRUE); + emojiTrie.put("🌽", Boolean.TRUE); + emojiTrie.put("🌶️", Boolean.TRUE); + emojiTrie.put("🌶", Boolean.TRUE); + emojiTrie.put("🫑", Boolean.TRUE); + emojiTrie.put("🥒", Boolean.TRUE); + emojiTrie.put("🥬", Boolean.TRUE); + emojiTrie.put("🥦", Boolean.TRUE); + emojiTrie.put("🧄", Boolean.TRUE); + emojiTrie.put("🧅", Boolean.TRUE); + emojiTrie.put("🥜", Boolean.TRUE); + emojiTrie.put("🫘", Boolean.TRUE); + emojiTrie.put("🌰", Boolean.TRUE); + emojiTrie.put("🫚", Boolean.TRUE); + emojiTrie.put("🫛", Boolean.TRUE); + emojiTrie.put("🍄‍🟫", Boolean.TRUE); + emojiTrie.put("🫜", Boolean.TRUE); + emojiTrie.put("🍞", Boolean.TRUE); + emojiTrie.put("🥐", Boolean.TRUE); + emojiTrie.put("🥖", Boolean.TRUE); + emojiTrie.put("🫓", Boolean.TRUE); + emojiTrie.put("🥨", Boolean.TRUE); + emojiTrie.put("🥯", Boolean.TRUE); + emojiTrie.put("🥞", Boolean.TRUE); + emojiTrie.put("🧇", Boolean.TRUE); + emojiTrie.put("🧀", Boolean.TRUE); + emojiTrie.put("🍖", Boolean.TRUE); + emojiTrie.put("🍗", Boolean.TRUE); + emojiTrie.put("🥩", Boolean.TRUE); + emojiTrie.put("🥓", Boolean.TRUE); + emojiTrie.put("🍔", Boolean.TRUE); + emojiTrie.put("🍟", Boolean.TRUE); + emojiTrie.put("🍕", Boolean.TRUE); + emojiTrie.put("🌭", Boolean.TRUE); + emojiTrie.put("🥪", Boolean.TRUE); + emojiTrie.put("🌮", Boolean.TRUE); + emojiTrie.put("🌯", Boolean.TRUE); + emojiTrie.put("🫔", Boolean.TRUE); + emojiTrie.put("🥙", Boolean.TRUE); + emojiTrie.put("🧆", Boolean.TRUE); + emojiTrie.put("🥚", Boolean.TRUE); + emojiTrie.put("🍳", Boolean.TRUE); + emojiTrie.put("🥘", Boolean.TRUE); + emojiTrie.put("🍲", Boolean.TRUE); + emojiTrie.put("🫕", Boolean.TRUE); + emojiTrie.put("🥣", Boolean.TRUE); + emojiTrie.put("🥗", Boolean.TRUE); + emojiTrie.put("🍿", Boolean.TRUE); + emojiTrie.put("🧈", Boolean.TRUE); + emojiTrie.put("🧂", Boolean.TRUE); + emojiTrie.put("🥫", Boolean.TRUE); + emojiTrie.put("🍱", Boolean.TRUE); + emojiTrie.put("🍘", Boolean.TRUE); + emojiTrie.put("🍙", Boolean.TRUE); + emojiTrie.put("🍚", Boolean.TRUE); + emojiTrie.put("🍛", Boolean.TRUE); + emojiTrie.put("🍜", Boolean.TRUE); + emojiTrie.put("🍝", Boolean.TRUE); + emojiTrie.put("🍠", Boolean.TRUE); + emojiTrie.put("🍢", Boolean.TRUE); + emojiTrie.put("🍣", Boolean.TRUE); + emojiTrie.put("🍤", Boolean.TRUE); + emojiTrie.put("🍥", Boolean.TRUE); + emojiTrie.put("🥮", Boolean.TRUE); + emojiTrie.put("🍡", Boolean.TRUE); + emojiTrie.put("🥟", Boolean.TRUE); + emojiTrie.put("🥠", Boolean.TRUE); + emojiTrie.put("🥡", Boolean.TRUE); + emojiTrie.put("🍦", Boolean.TRUE); + emojiTrie.put("🍧", Boolean.TRUE); + emojiTrie.put("🍨", Boolean.TRUE); + emojiTrie.put("🍩", Boolean.TRUE); + emojiTrie.put("🍪", Boolean.TRUE); + emojiTrie.put("🎂", Boolean.TRUE); + emojiTrie.put("🍰", Boolean.TRUE); + emojiTrie.put("🧁", Boolean.TRUE); + emojiTrie.put("🥧", Boolean.TRUE); + emojiTrie.put("🍫", Boolean.TRUE); + emojiTrie.put("🍬", Boolean.TRUE); + emojiTrie.put("🍭", Boolean.TRUE); + emojiTrie.put("🍮", Boolean.TRUE); + emojiTrie.put("🍯", Boolean.TRUE); + emojiTrie.put("🍼", Boolean.TRUE); + emojiTrie.put("🥛", Boolean.TRUE); + emojiTrie.put("☕", Boolean.TRUE); + emojiTrie.put("🫖", Boolean.TRUE); + emojiTrie.put("🍵", Boolean.TRUE); + emojiTrie.put("🍶", Boolean.TRUE); + emojiTrie.put("🍾", Boolean.TRUE); + emojiTrie.put("🍷", Boolean.TRUE); + emojiTrie.put("🍸", Boolean.TRUE); + emojiTrie.put("🍹", Boolean.TRUE); + emojiTrie.put("🍺", Boolean.TRUE); + emojiTrie.put("🍻", Boolean.TRUE); + emojiTrie.put("🥂", Boolean.TRUE); + emojiTrie.put("🥃", Boolean.TRUE); + emojiTrie.put("🫗", Boolean.TRUE); + emojiTrie.put("🥤", Boolean.TRUE); + emojiTrie.put("🧋", Boolean.TRUE); + emojiTrie.put("🧃", Boolean.TRUE); + emojiTrie.put("🧉", Boolean.TRUE); + emojiTrie.put("🧊", Boolean.TRUE); + emojiTrie.put("🥢", Boolean.TRUE); + emojiTrie.put("🍽️", Boolean.TRUE); + emojiTrie.put("🍽", Boolean.TRUE); + emojiTrie.put("🍴", Boolean.TRUE); + emojiTrie.put("🥄", Boolean.TRUE); + emojiTrie.put("🔪", Boolean.TRUE); + emojiTrie.put("🫙", Boolean.TRUE); + emojiTrie.put("🏺", Boolean.TRUE); + emojiTrie.put("🌍", Boolean.TRUE); + emojiTrie.put("🌎", Boolean.TRUE); + emojiTrie.put("🌏", Boolean.TRUE); + emojiTrie.put("🌐", Boolean.TRUE); + emojiTrie.put("🗺️", Boolean.TRUE); + emojiTrie.put("🗺", Boolean.TRUE); + emojiTrie.put("🗾", Boolean.TRUE); + emojiTrie.put("🧭", Boolean.TRUE); + emojiTrie.put("🏔️", Boolean.TRUE); + emojiTrie.put("🏔", Boolean.TRUE); + emojiTrie.put("⛰️", Boolean.TRUE); + emojiTrie.put("⛰", Boolean.TRUE); + emojiTrie.put("🌋", Boolean.TRUE); + emojiTrie.put("🗻", Boolean.TRUE); + emojiTrie.put("🏕️", Boolean.TRUE); + emojiTrie.put("🏕", Boolean.TRUE); + emojiTrie.put("🏖️", Boolean.TRUE); + emojiTrie.put("🏖", Boolean.TRUE); + emojiTrie.put("🏜️", Boolean.TRUE); + emojiTrie.put("🏜", Boolean.TRUE); + emojiTrie.put("🏝️", Boolean.TRUE); + emojiTrie.put("🏝", Boolean.TRUE); + emojiTrie.put("🏞️", Boolean.TRUE); + emojiTrie.put("🏞", Boolean.TRUE); + emojiTrie.put("🏟️", Boolean.TRUE); + emojiTrie.put("🏟", Boolean.TRUE); + emojiTrie.put("🏛️", Boolean.TRUE); + emojiTrie.put("🏛", Boolean.TRUE); + emojiTrie.put("🏗️", Boolean.TRUE); + emojiTrie.put("🏗", Boolean.TRUE); + emojiTrie.put("🧱", Boolean.TRUE); + emojiTrie.put("🪨", Boolean.TRUE); + emojiTrie.put("🪵", Boolean.TRUE); + emojiTrie.put("🛖", Boolean.TRUE); + emojiTrie.put("🏘️", Boolean.TRUE); + emojiTrie.put("🏘", Boolean.TRUE); + emojiTrie.put("🏚️", Boolean.TRUE); + emojiTrie.put("🏚", Boolean.TRUE); + emojiTrie.put("🏠", Boolean.TRUE); + emojiTrie.put("🏡", Boolean.TRUE); + emojiTrie.put("🏢", Boolean.TRUE); + emojiTrie.put("🏣", Boolean.TRUE); + emojiTrie.put("🏤", Boolean.TRUE); + emojiTrie.put("🏥", Boolean.TRUE); + emojiTrie.put("🏦", Boolean.TRUE); + emojiTrie.put("🏨", Boolean.TRUE); + emojiTrie.put("🏩", Boolean.TRUE); + emojiTrie.put("🏪", Boolean.TRUE); + emojiTrie.put("🏫", Boolean.TRUE); + emojiTrie.put("🏬", Boolean.TRUE); + emojiTrie.put("🏭", Boolean.TRUE); + emojiTrie.put("🏯", Boolean.TRUE); + emojiTrie.put("🏰", Boolean.TRUE); + emojiTrie.put("💒", Boolean.TRUE); + emojiTrie.put("🗼", Boolean.TRUE); + emojiTrie.put("🗽", Boolean.TRUE); + emojiTrie.put("⛪", Boolean.TRUE); + emojiTrie.put("🕌", Boolean.TRUE); + emojiTrie.put("🛕", Boolean.TRUE); + emojiTrie.put("🕍", Boolean.TRUE); + emojiTrie.put("⛩️", Boolean.TRUE); + emojiTrie.put("⛩", Boolean.TRUE); + emojiTrie.put("🕋", Boolean.TRUE); + emojiTrie.put("⛲", Boolean.TRUE); + emojiTrie.put("⛺", Boolean.TRUE); + emojiTrie.put("🌁", Boolean.TRUE); + emojiTrie.put("🌃", Boolean.TRUE); + emojiTrie.put("🏙️", Boolean.TRUE); + emojiTrie.put("🏙", Boolean.TRUE); + emojiTrie.put("🌄", Boolean.TRUE); + emojiTrie.put("🌅", Boolean.TRUE); + emojiTrie.put("🌆", Boolean.TRUE); + emojiTrie.put("🌇", Boolean.TRUE); + emojiTrie.put("🌉", Boolean.TRUE); + emojiTrie.put("♨️", Boolean.TRUE); + emojiTrie.put("♨", Boolean.TRUE); + emojiTrie.put("🎠", Boolean.TRUE); + emojiTrie.put("🛝", Boolean.TRUE); + emojiTrie.put("🎡", Boolean.TRUE); + emojiTrie.put("🎢", Boolean.TRUE); + emojiTrie.put("💈", Boolean.TRUE); + emojiTrie.put("🎪", Boolean.TRUE); + emojiTrie.put("🚂", Boolean.TRUE); + emojiTrie.put("🚃", Boolean.TRUE); + emojiTrie.put("🚄", Boolean.TRUE); + emojiTrie.put("🚅", Boolean.TRUE); + emojiTrie.put("🚆", Boolean.TRUE); + emojiTrie.put("🚇", Boolean.TRUE); + emojiTrie.put("🚈", Boolean.TRUE); + emojiTrie.put("🚉", Boolean.TRUE); + emojiTrie.put("🚊", Boolean.TRUE); + emojiTrie.put("🚝", Boolean.TRUE); + emojiTrie.put("🚞", Boolean.TRUE); + emojiTrie.put("🚋", Boolean.TRUE); + emojiTrie.put("🚌", Boolean.TRUE); + emojiTrie.put("🚍", Boolean.TRUE); + emojiTrie.put("🚎", Boolean.TRUE); + emojiTrie.put("🚐", Boolean.TRUE); + emojiTrie.put("🚑", Boolean.TRUE); + emojiTrie.put("🚒", Boolean.TRUE); + emojiTrie.put("🚓", Boolean.TRUE); + emojiTrie.put("🚔", Boolean.TRUE); + emojiTrie.put("🚕", Boolean.TRUE); + emojiTrie.put("🚖", Boolean.TRUE); + emojiTrie.put("🚗", Boolean.TRUE); + emojiTrie.put("🚘", Boolean.TRUE); + emojiTrie.put("🚙", Boolean.TRUE); + emojiTrie.put("🛻", Boolean.TRUE); + emojiTrie.put("🚚", Boolean.TRUE); + emojiTrie.put("🚛", Boolean.TRUE); + emojiTrie.put("🚜", Boolean.TRUE); + emojiTrie.put("🏎️", Boolean.TRUE); + emojiTrie.put("🏎", Boolean.TRUE); + emojiTrie.put("🏍️", Boolean.TRUE); + emojiTrie.put("🏍", Boolean.TRUE); + emojiTrie.put("🛵", Boolean.TRUE); + emojiTrie.put("🦽", Boolean.TRUE); + emojiTrie.put("🦼", Boolean.TRUE); + emojiTrie.put("🛺", Boolean.TRUE); + emojiTrie.put("🚲", Boolean.TRUE); + emojiTrie.put("🛴", Boolean.TRUE); + emojiTrie.put("🛹", Boolean.TRUE); + emojiTrie.put("🛼", Boolean.TRUE); + emojiTrie.put("🚏", Boolean.TRUE); + emojiTrie.put("🛣️", Boolean.TRUE); + emojiTrie.put("🛣", Boolean.TRUE); + emojiTrie.put("🛤️", Boolean.TRUE); + emojiTrie.put("🛤", Boolean.TRUE); + emojiTrie.put("🛢️", Boolean.TRUE); + emojiTrie.put("🛢", Boolean.TRUE); + emojiTrie.put("⛽", Boolean.TRUE); + emojiTrie.put("🛞", Boolean.TRUE); + emojiTrie.put("🚨", Boolean.TRUE); + emojiTrie.put("🚥", Boolean.TRUE); + emojiTrie.put("🚦", Boolean.TRUE); + emojiTrie.put("🛑", Boolean.TRUE); + emojiTrie.put("🚧", Boolean.TRUE); + emojiTrie.put("⚓", Boolean.TRUE); + emojiTrie.put("🛟", Boolean.TRUE); + emojiTrie.put("⛵", Boolean.TRUE); + emojiTrie.put("🛶", Boolean.TRUE); + emojiTrie.put("🚤", Boolean.TRUE); + emojiTrie.put("🛳️", Boolean.TRUE); + emojiTrie.put("🛳", Boolean.TRUE); + emojiTrie.put("⛴️", Boolean.TRUE); + emojiTrie.put("⛴", Boolean.TRUE); + emojiTrie.put("🛥️", Boolean.TRUE); + emojiTrie.put("🛥", Boolean.TRUE); + emojiTrie.put("🚢", Boolean.TRUE); + emojiTrie.put("✈️", Boolean.TRUE); + emojiTrie.put("✈", Boolean.TRUE); + emojiTrie.put("🛩️", Boolean.TRUE); + emojiTrie.put("🛩", Boolean.TRUE); + emojiTrie.put("🛫", Boolean.TRUE); + emojiTrie.put("🛬", Boolean.TRUE); + emojiTrie.put("🪂", Boolean.TRUE); + emojiTrie.put("💺", Boolean.TRUE); + emojiTrie.put("🚁", Boolean.TRUE); + emojiTrie.put("🚟", Boolean.TRUE); + emojiTrie.put("🚠", Boolean.TRUE); + emojiTrie.put("🚡", Boolean.TRUE); + emojiTrie.put("🛰️", Boolean.TRUE); + emojiTrie.put("🛰", Boolean.TRUE); + emojiTrie.put("🚀", Boolean.TRUE); + emojiTrie.put("🛸", Boolean.TRUE); + emojiTrie.put("🛎️", Boolean.TRUE); + emojiTrie.put("🛎", Boolean.TRUE); + emojiTrie.put("🧳", Boolean.TRUE); + emojiTrie.put("⌛", Boolean.TRUE); + emojiTrie.put("⏳", Boolean.TRUE); + emojiTrie.put("⌚", Boolean.TRUE); + emojiTrie.put("⏰", Boolean.TRUE); + emojiTrie.put("⏱️", Boolean.TRUE); + emojiTrie.put("⏱", Boolean.TRUE); + emojiTrie.put("⏲️", Boolean.TRUE); + emojiTrie.put("⏲", Boolean.TRUE); + emojiTrie.put("🕰️", Boolean.TRUE); + emojiTrie.put("🕰", Boolean.TRUE); + emojiTrie.put("🕛", Boolean.TRUE); + emojiTrie.put("🕧", Boolean.TRUE); + emojiTrie.put("🕐", Boolean.TRUE); + emojiTrie.put("🕜", Boolean.TRUE); + emojiTrie.put("🕑", Boolean.TRUE); + emojiTrie.put("🕝", Boolean.TRUE); + emojiTrie.put("🕒", Boolean.TRUE); + emojiTrie.put("🕞", Boolean.TRUE); + emojiTrie.put("🕓", Boolean.TRUE); + emojiTrie.put("🕟", Boolean.TRUE); + emojiTrie.put("🕔", Boolean.TRUE); + emojiTrie.put("🕠", Boolean.TRUE); + emojiTrie.put("🕕", Boolean.TRUE); + emojiTrie.put("🕡", Boolean.TRUE); + emojiTrie.put("🕖", Boolean.TRUE); + emojiTrie.put("🕢", Boolean.TRUE); + emojiTrie.put("🕗", Boolean.TRUE); + emojiTrie.put("🕣", Boolean.TRUE); + emojiTrie.put("🕘", Boolean.TRUE); + emojiTrie.put("🕤", Boolean.TRUE); + emojiTrie.put("🕙", Boolean.TRUE); + emojiTrie.put("🕥", Boolean.TRUE); + emojiTrie.put("🕚", Boolean.TRUE); + emojiTrie.put("🕦", Boolean.TRUE); + emojiTrie.put("🌑", Boolean.TRUE); + emojiTrie.put("🌒", Boolean.TRUE); + emojiTrie.put("🌓", Boolean.TRUE); + emojiTrie.put("🌔", Boolean.TRUE); + emojiTrie.put("🌕", Boolean.TRUE); + emojiTrie.put("🌖", Boolean.TRUE); + emojiTrie.put("🌗", Boolean.TRUE); + emojiTrie.put("🌘", Boolean.TRUE); + emojiTrie.put("🌙", Boolean.TRUE); + emojiTrie.put("🌚", Boolean.TRUE); + emojiTrie.put("🌛", Boolean.TRUE); + emojiTrie.put("🌜", Boolean.TRUE); + emojiTrie.put("🌡️", Boolean.TRUE); + emojiTrie.put("🌡", Boolean.TRUE); + emojiTrie.put("☀️", Boolean.TRUE); + emojiTrie.put("☀", Boolean.TRUE); + emojiTrie.put("🌝", Boolean.TRUE); + emojiTrie.put("🌞", Boolean.TRUE); + emojiTrie.put("🪐", Boolean.TRUE); + emojiTrie.put("⭐", Boolean.TRUE); + emojiTrie.put("🌟", Boolean.TRUE); + emojiTrie.put("🌠", Boolean.TRUE); + emojiTrie.put("🌌", Boolean.TRUE); + emojiTrie.put("☁️", Boolean.TRUE); + emojiTrie.put("☁", Boolean.TRUE); + emojiTrie.put("⛅", Boolean.TRUE); + emojiTrie.put("⛈️", Boolean.TRUE); + emojiTrie.put("⛈", Boolean.TRUE); + emojiTrie.put("🌤️", Boolean.TRUE); + emojiTrie.put("🌤", Boolean.TRUE); + emojiTrie.put("🌥️", Boolean.TRUE); + emojiTrie.put("🌥", Boolean.TRUE); + emojiTrie.put("🌦️", Boolean.TRUE); + emojiTrie.put("🌦", Boolean.TRUE); + emojiTrie.put("🌧️", Boolean.TRUE); + emojiTrie.put("🌧", Boolean.TRUE); + emojiTrie.put("🌨️", Boolean.TRUE); + emojiTrie.put("🌨", Boolean.TRUE); + emojiTrie.put("🌩️", Boolean.TRUE); + emojiTrie.put("🌩", Boolean.TRUE); + emojiTrie.put("🌪️", Boolean.TRUE); + emojiTrie.put("🌪", Boolean.TRUE); + emojiTrie.put("🌫️", Boolean.TRUE); + emojiTrie.put("🌫", Boolean.TRUE); + emojiTrie.put("🌬️", Boolean.TRUE); + emojiTrie.put("🌬", Boolean.TRUE); + emojiTrie.put("🌀", Boolean.TRUE); + emojiTrie.put("🌈", Boolean.TRUE); + emojiTrie.put("🌂", Boolean.TRUE); + emojiTrie.put("☂️", Boolean.TRUE); + emojiTrie.put("☂", Boolean.TRUE); + emojiTrie.put("☔", Boolean.TRUE); + emojiTrie.put("⛱️", Boolean.TRUE); + emojiTrie.put("⛱", Boolean.TRUE); + emojiTrie.put("⚡", Boolean.TRUE); + emojiTrie.put("❄️", Boolean.TRUE); + emojiTrie.put("❄", Boolean.TRUE); + emojiTrie.put("☃️", Boolean.TRUE); + emojiTrie.put("☃", Boolean.TRUE); + emojiTrie.put("⛄", Boolean.TRUE); + emojiTrie.put("☄️", Boolean.TRUE); + emojiTrie.put("☄", Boolean.TRUE); + emojiTrie.put("🔥", Boolean.TRUE); + emojiTrie.put("💧", Boolean.TRUE); + emojiTrie.put("🌊", Boolean.TRUE); + emojiTrie.put("🎃", Boolean.TRUE); + emojiTrie.put("🎄", Boolean.TRUE); + emojiTrie.put("🎆", Boolean.TRUE); + emojiTrie.put("🎇", Boolean.TRUE); + emojiTrie.put("🧨", Boolean.TRUE); + emojiTrie.put("✨", Boolean.TRUE); + emojiTrie.put("🎈", Boolean.TRUE); + emojiTrie.put("🎉", Boolean.TRUE); + emojiTrie.put("🎊", Boolean.TRUE); + emojiTrie.put("🎋", Boolean.TRUE); + emojiTrie.put("🎍", Boolean.TRUE); + emojiTrie.put("🎎", Boolean.TRUE); + emojiTrie.put("🎏", Boolean.TRUE); + emojiTrie.put("🎐", Boolean.TRUE); + emojiTrie.put("🎑", Boolean.TRUE); + emojiTrie.put("🧧", Boolean.TRUE); + emojiTrie.put("🎀", Boolean.TRUE); + emojiTrie.put("🎁", Boolean.TRUE); + emojiTrie.put("🎗️", Boolean.TRUE); + emojiTrie.put("🎗", Boolean.TRUE); + emojiTrie.put("🎟️", Boolean.TRUE); + emojiTrie.put("🎟", Boolean.TRUE); + emojiTrie.put("🎫", Boolean.TRUE); + emojiTrie.put("🎖️", Boolean.TRUE); + emojiTrie.put("🎖", Boolean.TRUE); + emojiTrie.put("🏆", Boolean.TRUE); + emojiTrie.put("🏅", Boolean.TRUE); + emojiTrie.put("🥇", Boolean.TRUE); + emojiTrie.put("🥈", Boolean.TRUE); + emojiTrie.put("🥉", Boolean.TRUE); + emojiTrie.put("⚽", Boolean.TRUE); + emojiTrie.put("⚾", Boolean.TRUE); + emojiTrie.put("🥎", Boolean.TRUE); + emojiTrie.put("🏀", Boolean.TRUE); + emojiTrie.put("🏐", Boolean.TRUE); + emojiTrie.put("🏈", Boolean.TRUE); + emojiTrie.put("🏉", Boolean.TRUE); + emojiTrie.put("🎾", Boolean.TRUE); + emojiTrie.put("🥏", Boolean.TRUE); + emojiTrie.put("🎳", Boolean.TRUE); + emojiTrie.put("🏏", Boolean.TRUE); + emojiTrie.put("🏑", Boolean.TRUE); + emojiTrie.put("🏒", Boolean.TRUE); + emojiTrie.put("🥍", Boolean.TRUE); + emojiTrie.put("🏓", Boolean.TRUE); + emojiTrie.put("🏸", Boolean.TRUE); + emojiTrie.put("🥊", Boolean.TRUE); + emojiTrie.put("🥋", Boolean.TRUE); + emojiTrie.put("🥅", Boolean.TRUE); + emojiTrie.put("⛳", Boolean.TRUE); + emojiTrie.put("⛸️", Boolean.TRUE); + emojiTrie.put("⛸", Boolean.TRUE); + emojiTrie.put("🎣", Boolean.TRUE); + emojiTrie.put("🤿", Boolean.TRUE); + emojiTrie.put("🎽", Boolean.TRUE); + emojiTrie.put("🎿", Boolean.TRUE); + emojiTrie.put("🛷", Boolean.TRUE); + emojiTrie.put("🥌", Boolean.TRUE); + emojiTrie.put("🎯", Boolean.TRUE); + emojiTrie.put("🪀", Boolean.TRUE); + emojiTrie.put("🪁", Boolean.TRUE); + emojiTrie.put("🔫", Boolean.TRUE); + emojiTrie.put("🎱", Boolean.TRUE); + emojiTrie.put("🔮", Boolean.TRUE); + emojiTrie.put("🪄", Boolean.TRUE); + emojiTrie.put("🎮", Boolean.TRUE); + emojiTrie.put("🕹️", Boolean.TRUE); + emojiTrie.put("🕹", Boolean.TRUE); + emojiTrie.put("🎰", Boolean.TRUE); + emojiTrie.put("🎲", Boolean.TRUE); + emojiTrie.put("🧩", Boolean.TRUE); + emojiTrie.put("🧸", Boolean.TRUE); + emojiTrie.put("🪅", Boolean.TRUE); + emojiTrie.put("🪩", Boolean.TRUE); + emojiTrie.put("🪆", Boolean.TRUE); + emojiTrie.put("♠️", Boolean.TRUE); + emojiTrie.put("♠", Boolean.TRUE); + emojiTrie.put("♥️", Boolean.TRUE); + emojiTrie.put("♥", Boolean.TRUE); + emojiTrie.put("♦️", Boolean.TRUE); + emojiTrie.put("♦", Boolean.TRUE); + emojiTrie.put("♣️", Boolean.TRUE); + emojiTrie.put("♣", Boolean.TRUE); + emojiTrie.put("♟️", Boolean.TRUE); + emojiTrie.put("♟", Boolean.TRUE); + emojiTrie.put("🃏", Boolean.TRUE); + emojiTrie.put("🀄", Boolean.TRUE); + emojiTrie.put("🎴", Boolean.TRUE); + emojiTrie.put("🎭", Boolean.TRUE); + emojiTrie.put("🖼️", Boolean.TRUE); + emojiTrie.put("🖼", Boolean.TRUE); + emojiTrie.put("🎨", Boolean.TRUE); + emojiTrie.put("🧵", Boolean.TRUE); + emojiTrie.put("🪡", Boolean.TRUE); + emojiTrie.put("🧶", Boolean.TRUE); + emojiTrie.put("🪢", Boolean.TRUE); + emojiTrie.put("👓", Boolean.TRUE); + emojiTrie.put("🕶️", Boolean.TRUE); + emojiTrie.put("🕶", Boolean.TRUE); + emojiTrie.put("🥽", Boolean.TRUE); + emojiTrie.put("🥼", Boolean.TRUE); + emojiTrie.put("🦺", Boolean.TRUE); + emojiTrie.put("👔", Boolean.TRUE); + emojiTrie.put("👕", Boolean.TRUE); + emojiTrie.put("👖", Boolean.TRUE); + emojiTrie.put("🧣", Boolean.TRUE); + emojiTrie.put("🧤", Boolean.TRUE); + emojiTrie.put("🧥", Boolean.TRUE); + emojiTrie.put("🧦", Boolean.TRUE); + emojiTrie.put("👗", Boolean.TRUE); + emojiTrie.put("👘", Boolean.TRUE); + emojiTrie.put("🥻", Boolean.TRUE); + emojiTrie.put("🩱", Boolean.TRUE); + emojiTrie.put("🩲", Boolean.TRUE); + emojiTrie.put("🩳", Boolean.TRUE); + emojiTrie.put("👙", Boolean.TRUE); + emojiTrie.put("👚", Boolean.TRUE); + emojiTrie.put("🪭", Boolean.TRUE); + emojiTrie.put("👛", Boolean.TRUE); + emojiTrie.put("👜", Boolean.TRUE); + emojiTrie.put("👝", Boolean.TRUE); + emojiTrie.put("🛍️", Boolean.TRUE); + emojiTrie.put("🛍", Boolean.TRUE); + emojiTrie.put("🎒", Boolean.TRUE); + emojiTrie.put("🩴", Boolean.TRUE); + emojiTrie.put("👞", Boolean.TRUE); + emojiTrie.put("👟", Boolean.TRUE); + emojiTrie.put("🥾", Boolean.TRUE); + emojiTrie.put("🥿", Boolean.TRUE); + emojiTrie.put("👠", Boolean.TRUE); + emojiTrie.put("👡", Boolean.TRUE); + emojiTrie.put("🩰", Boolean.TRUE); + emojiTrie.put("👢", Boolean.TRUE); + emojiTrie.put("🪮", Boolean.TRUE); + emojiTrie.put("👑", Boolean.TRUE); + emojiTrie.put("👒", Boolean.TRUE); + emojiTrie.put("🎩", Boolean.TRUE); + emojiTrie.put("🎓", Boolean.TRUE); + emojiTrie.put("🧢", Boolean.TRUE); + emojiTrie.put("🪖", Boolean.TRUE); + emojiTrie.put("⛑️", Boolean.TRUE); + emojiTrie.put("⛑", Boolean.TRUE); + emojiTrie.put("📿", Boolean.TRUE); + emojiTrie.put("💄", Boolean.TRUE); + emojiTrie.put("💍", Boolean.TRUE); + emojiTrie.put("💎", Boolean.TRUE); + emojiTrie.put("🔇", Boolean.TRUE); + emojiTrie.put("🔈", Boolean.TRUE); + emojiTrie.put("🔉", Boolean.TRUE); + emojiTrie.put("🔊", Boolean.TRUE); + emojiTrie.put("📢", Boolean.TRUE); + emojiTrie.put("📣", Boolean.TRUE); + emojiTrie.put("📯", Boolean.TRUE); + emojiTrie.put("🔔", Boolean.TRUE); + emojiTrie.put("🔕", Boolean.TRUE); + emojiTrie.put("🎼", Boolean.TRUE); + emojiTrie.put("🎵", Boolean.TRUE); + emojiTrie.put("🎶", Boolean.TRUE); + emojiTrie.put("🎙️", Boolean.TRUE); + emojiTrie.put("🎙", Boolean.TRUE); + emojiTrie.put("🎚️", Boolean.TRUE); + emojiTrie.put("🎚", Boolean.TRUE); + emojiTrie.put("🎛️", Boolean.TRUE); + emojiTrie.put("🎛", Boolean.TRUE); + emojiTrie.put("🎤", Boolean.TRUE); + emojiTrie.put("🎧", Boolean.TRUE); + emojiTrie.put("📻", Boolean.TRUE); + emojiTrie.put("🎷", Boolean.TRUE); + emojiTrie.put("🪗", Boolean.TRUE); + emojiTrie.put("🎸", Boolean.TRUE); + emojiTrie.put("🎹", Boolean.TRUE); + emojiTrie.put("🎺", Boolean.TRUE); + emojiTrie.put("🎻", Boolean.TRUE); + emojiTrie.put("🪕", Boolean.TRUE); + emojiTrie.put("🥁", Boolean.TRUE); + emojiTrie.put("🪘", Boolean.TRUE); + emojiTrie.put("🪇", Boolean.TRUE); + emojiTrie.put("🪈", Boolean.TRUE); + emojiTrie.put("🪉", Boolean.TRUE); + emojiTrie.put("📱", Boolean.TRUE); + emojiTrie.put("📲", Boolean.TRUE); + emojiTrie.put("☎️", Boolean.TRUE); + emojiTrie.put("☎", Boolean.TRUE); + emojiTrie.put("📞", Boolean.TRUE); + emojiTrie.put("📟", Boolean.TRUE); + emojiTrie.put("📠", Boolean.TRUE); + emojiTrie.put("🔋", Boolean.TRUE); + emojiTrie.put("🪫", Boolean.TRUE); + emojiTrie.put("🔌", Boolean.TRUE); + emojiTrie.put("💻", Boolean.TRUE); + emojiTrie.put("🖥️", Boolean.TRUE); + emojiTrie.put("🖥", Boolean.TRUE); + emojiTrie.put("🖨️", Boolean.TRUE); + emojiTrie.put("🖨", Boolean.TRUE); + emojiTrie.put("⌨️", Boolean.TRUE); + emojiTrie.put("⌨", Boolean.TRUE); + emojiTrie.put("🖱️", Boolean.TRUE); + emojiTrie.put("🖱", Boolean.TRUE); + emojiTrie.put("🖲️", Boolean.TRUE); + emojiTrie.put("🖲", Boolean.TRUE); + emojiTrie.put("💽", Boolean.TRUE); + emojiTrie.put("💾", Boolean.TRUE); + emojiTrie.put("💿", Boolean.TRUE); + emojiTrie.put("📀", Boolean.TRUE); + emojiTrie.put("🧮", Boolean.TRUE); + emojiTrie.put("🎥", Boolean.TRUE); + emojiTrie.put("🎞️", Boolean.TRUE); + emojiTrie.put("🎞", Boolean.TRUE); + emojiTrie.put("📽️", Boolean.TRUE); + emojiTrie.put("📽", Boolean.TRUE); + emojiTrie.put("🎬", Boolean.TRUE); + emojiTrie.put("📺", Boolean.TRUE); + emojiTrie.put("📷", Boolean.TRUE); + emojiTrie.put("📸", Boolean.TRUE); + emojiTrie.put("📹", Boolean.TRUE); + emojiTrie.put("📼", Boolean.TRUE); + emojiTrie.put("🔍", Boolean.TRUE); + emojiTrie.put("🔎", Boolean.TRUE); + emojiTrie.put("🕯️", Boolean.TRUE); + emojiTrie.put("🕯", Boolean.TRUE); + emojiTrie.put("💡", Boolean.TRUE); + emojiTrie.put("🔦", Boolean.TRUE); + emojiTrie.put("🏮", Boolean.TRUE); + emojiTrie.put("🪔", Boolean.TRUE); + emojiTrie.put("📔", Boolean.TRUE); + emojiTrie.put("📕", Boolean.TRUE); + emojiTrie.put("📖", Boolean.TRUE); + emojiTrie.put("📗", Boolean.TRUE); + emojiTrie.put("📘", Boolean.TRUE); + emojiTrie.put("📙", Boolean.TRUE); + emojiTrie.put("📚", Boolean.TRUE); + emojiTrie.put("📓", Boolean.TRUE); + emojiTrie.put("📒", Boolean.TRUE); + emojiTrie.put("📃", Boolean.TRUE); + emojiTrie.put("📜", Boolean.TRUE); + emojiTrie.put("📄", Boolean.TRUE); + emojiTrie.put("📰", Boolean.TRUE); + emojiTrie.put("🗞️", Boolean.TRUE); + emojiTrie.put("🗞", Boolean.TRUE); + emojiTrie.put("📑", Boolean.TRUE); + emojiTrie.put("🔖", Boolean.TRUE); + emojiTrie.put("🏷️", Boolean.TRUE); + emojiTrie.put("🏷", Boolean.TRUE); + emojiTrie.put("💰", Boolean.TRUE); + emojiTrie.put("🪙", Boolean.TRUE); + emojiTrie.put("💴", Boolean.TRUE); + emojiTrie.put("💵", Boolean.TRUE); + emojiTrie.put("💶", Boolean.TRUE); + emojiTrie.put("💷", Boolean.TRUE); + emojiTrie.put("💸", Boolean.TRUE); + emojiTrie.put("💳", Boolean.TRUE); + emojiTrie.put("🧾", Boolean.TRUE); + emojiTrie.put("💹", Boolean.TRUE); + emojiTrie.put("✉️", Boolean.TRUE); + emojiTrie.put("✉", Boolean.TRUE); + emojiTrie.put("📧", Boolean.TRUE); + emojiTrie.put("📨", Boolean.TRUE); + emojiTrie.put("📩", Boolean.TRUE); + emojiTrie.put("📤", Boolean.TRUE); + emojiTrie.put("📥", Boolean.TRUE); + emojiTrie.put("📦", Boolean.TRUE); + emojiTrie.put("📫", Boolean.TRUE); + emojiTrie.put("📪", Boolean.TRUE); + emojiTrie.put("📬", Boolean.TRUE); + emojiTrie.put("📭", Boolean.TRUE); + emojiTrie.put("📮", Boolean.TRUE); + emojiTrie.put("🗳️", Boolean.TRUE); + emojiTrie.put("🗳", Boolean.TRUE); + emojiTrie.put("✏️", Boolean.TRUE); + emojiTrie.put("✏", Boolean.TRUE); + emojiTrie.put("✒️", Boolean.TRUE); + emojiTrie.put("✒", Boolean.TRUE); + emojiTrie.put("🖋️", Boolean.TRUE); + emojiTrie.put("🖋", Boolean.TRUE); + emojiTrie.put("🖊️", Boolean.TRUE); + emojiTrie.put("🖊", Boolean.TRUE); + emojiTrie.put("🖌️", Boolean.TRUE); + emojiTrie.put("🖌", Boolean.TRUE); + emojiTrie.put("🖍️", Boolean.TRUE); + emojiTrie.put("🖍", Boolean.TRUE); + emojiTrie.put("📝", Boolean.TRUE); + emojiTrie.put("💼", Boolean.TRUE); + emojiTrie.put("📁", Boolean.TRUE); + emojiTrie.put("📂", Boolean.TRUE); + emojiTrie.put("🗂️", Boolean.TRUE); + emojiTrie.put("🗂", Boolean.TRUE); + emojiTrie.put("📅", Boolean.TRUE); + emojiTrie.put("📆", Boolean.TRUE); + emojiTrie.put("🗒️", Boolean.TRUE); + emojiTrie.put("🗒", Boolean.TRUE); + emojiTrie.put("🗓️", Boolean.TRUE); + emojiTrie.put("🗓", Boolean.TRUE); + emojiTrie.put("📇", Boolean.TRUE); + emojiTrie.put("📈", Boolean.TRUE); + emojiTrie.put("📉", Boolean.TRUE); + emojiTrie.put("📊", Boolean.TRUE); + emojiTrie.put("📋", Boolean.TRUE); + emojiTrie.put("📌", Boolean.TRUE); + emojiTrie.put("📍", Boolean.TRUE); + emojiTrie.put("📎", Boolean.TRUE); + emojiTrie.put("🖇️", Boolean.TRUE); + emojiTrie.put("🖇", Boolean.TRUE); + emojiTrie.put("📏", Boolean.TRUE); + emojiTrie.put("📐", Boolean.TRUE); + emojiTrie.put("✂️", Boolean.TRUE); + emojiTrie.put("✂", Boolean.TRUE); + emojiTrie.put("🗃️", Boolean.TRUE); + emojiTrie.put("🗃", Boolean.TRUE); + emojiTrie.put("🗄️", Boolean.TRUE); + emojiTrie.put("🗄", Boolean.TRUE); + emojiTrie.put("🗑️", Boolean.TRUE); + emojiTrie.put("🗑", Boolean.TRUE); + emojiTrie.put("🔒", Boolean.TRUE); + emojiTrie.put("🔓", Boolean.TRUE); + emojiTrie.put("🔏", Boolean.TRUE); + emojiTrie.put("🔐", Boolean.TRUE); + emojiTrie.put("🔑", Boolean.TRUE); + emojiTrie.put("🗝️", Boolean.TRUE); + emojiTrie.put("🗝", Boolean.TRUE); + emojiTrie.put("🔨", Boolean.TRUE); + emojiTrie.put("🪓", Boolean.TRUE); + emojiTrie.put("⛏️", Boolean.TRUE); + emojiTrie.put("⛏", Boolean.TRUE); + emojiTrie.put("⚒️", Boolean.TRUE); + emojiTrie.put("⚒", Boolean.TRUE); + emojiTrie.put("🛠️", Boolean.TRUE); + emojiTrie.put("🛠", Boolean.TRUE); + emojiTrie.put("🗡️", Boolean.TRUE); + emojiTrie.put("🗡", Boolean.TRUE); + emojiTrie.put("⚔️", Boolean.TRUE); + emojiTrie.put("⚔", Boolean.TRUE); + emojiTrie.put("💣", Boolean.TRUE); + emojiTrie.put("🪃", Boolean.TRUE); + emojiTrie.put("🏹", Boolean.TRUE); + emojiTrie.put("🛡️", Boolean.TRUE); + emojiTrie.put("🛡", Boolean.TRUE); + emojiTrie.put("🪚", Boolean.TRUE); + emojiTrie.put("🔧", Boolean.TRUE); + emojiTrie.put("🪛", Boolean.TRUE); + emojiTrie.put("🔩", Boolean.TRUE); + emojiTrie.put("⚙️", Boolean.TRUE); + emojiTrie.put("⚙", Boolean.TRUE); + emojiTrie.put("🗜️", Boolean.TRUE); + emojiTrie.put("🗜", Boolean.TRUE); + emojiTrie.put("⚖️", Boolean.TRUE); + emojiTrie.put("⚖", Boolean.TRUE); + emojiTrie.put("🦯", Boolean.TRUE); + emojiTrie.put("🔗", Boolean.TRUE); + emojiTrie.put("⛓️‍💥", Boolean.TRUE); + emojiTrie.put("⛓‍💥", Boolean.TRUE); + emojiTrie.put("⛓️", Boolean.TRUE); + emojiTrie.put("⛓", Boolean.TRUE); + emojiTrie.put("🪝", Boolean.TRUE); + emojiTrie.put("🧰", Boolean.TRUE); + emojiTrie.put("🧲", Boolean.TRUE); + emojiTrie.put("🪜", Boolean.TRUE); + emojiTrie.put("🪏", Boolean.TRUE); + emojiTrie.put("⚗️", Boolean.TRUE); + emojiTrie.put("⚗", Boolean.TRUE); + emojiTrie.put("🧪", Boolean.TRUE); + emojiTrie.put("🧫", Boolean.TRUE); + emojiTrie.put("🧬", Boolean.TRUE); + emojiTrie.put("🔬", Boolean.TRUE); + emojiTrie.put("🔭", Boolean.TRUE); + emojiTrie.put("📡", Boolean.TRUE); + emojiTrie.put("💉", Boolean.TRUE); + emojiTrie.put("🩸", Boolean.TRUE); + emojiTrie.put("💊", Boolean.TRUE); + emojiTrie.put("🩹", Boolean.TRUE); + emojiTrie.put("🩼", Boolean.TRUE); + emojiTrie.put("🩺", Boolean.TRUE); + emojiTrie.put("🩻", Boolean.TRUE); + emojiTrie.put("🚪", Boolean.TRUE); + emojiTrie.put("🛗", Boolean.TRUE); + emojiTrie.put("🪞", Boolean.TRUE); + emojiTrie.put("🪟", Boolean.TRUE); + emojiTrie.put("🛏️", Boolean.TRUE); + emojiTrie.put("🛏", Boolean.TRUE); + emojiTrie.put("🛋️", Boolean.TRUE); + emojiTrie.put("🛋", Boolean.TRUE); + emojiTrie.put("🪑", Boolean.TRUE); + emojiTrie.put("🚽", Boolean.TRUE); + emojiTrie.put("🪠", Boolean.TRUE); + emojiTrie.put("🚿", Boolean.TRUE); + emojiTrie.put("🛁", Boolean.TRUE); + emojiTrie.put("🪤", Boolean.TRUE); + emojiTrie.put("🪒", Boolean.TRUE); + emojiTrie.put("🧴", Boolean.TRUE); + emojiTrie.put("🧷", Boolean.TRUE); + emojiTrie.put("🧹", Boolean.TRUE); + emojiTrie.put("🧺", Boolean.TRUE); + emojiTrie.put("🧻", Boolean.TRUE); + emojiTrie.put("🪣", Boolean.TRUE); + emojiTrie.put("🧼", Boolean.TRUE); + emojiTrie.put("🫧", Boolean.TRUE); + emojiTrie.put("🪥", Boolean.TRUE); + emojiTrie.put("🧽", Boolean.TRUE); + emojiTrie.put("🧯", Boolean.TRUE); + emojiTrie.put("🛒", Boolean.TRUE); + emojiTrie.put("🚬", Boolean.TRUE); + emojiTrie.put("⚰️", Boolean.TRUE); + emojiTrie.put("⚰", Boolean.TRUE); + emojiTrie.put("🪦", Boolean.TRUE); + emojiTrie.put("⚱️", Boolean.TRUE); + emojiTrie.put("⚱", Boolean.TRUE); + emojiTrie.put("🧿", Boolean.TRUE); + emojiTrie.put("🪬", Boolean.TRUE); + emojiTrie.put("🗿", Boolean.TRUE); + emojiTrie.put("🪧", Boolean.TRUE); + emojiTrie.put("🪪", Boolean.TRUE); + emojiTrie.put("🏧", Boolean.TRUE); + emojiTrie.put("🚮", Boolean.TRUE); + emojiTrie.put("🚰", Boolean.TRUE); + emojiTrie.put("♿", Boolean.TRUE); + emojiTrie.put("🚹", Boolean.TRUE); + emojiTrie.put("🚺", Boolean.TRUE); + emojiTrie.put("🚻", Boolean.TRUE); + emojiTrie.put("🚼", Boolean.TRUE); + emojiTrie.put("🚾", Boolean.TRUE); + emojiTrie.put("🛂", Boolean.TRUE); + emojiTrie.put("🛃", Boolean.TRUE); + emojiTrie.put("🛄", Boolean.TRUE); + emojiTrie.put("🛅", Boolean.TRUE); + emojiTrie.put("⚠️", Boolean.TRUE); + emojiTrie.put("⚠", Boolean.TRUE); + emojiTrie.put("🚸", Boolean.TRUE); + emojiTrie.put("⛔", Boolean.TRUE); + emojiTrie.put("🚫", Boolean.TRUE); + emojiTrie.put("🚳", Boolean.TRUE); + emojiTrie.put("🚭", Boolean.TRUE); + emojiTrie.put("🚯", Boolean.TRUE); + emojiTrie.put("🚱", Boolean.TRUE); + emojiTrie.put("🚷", Boolean.TRUE); + emojiTrie.put("📵", Boolean.TRUE); + emojiTrie.put("🔞", Boolean.TRUE); + emojiTrie.put("☢️", Boolean.TRUE); + emojiTrie.put("☢", Boolean.TRUE); + emojiTrie.put("☣️", Boolean.TRUE); + emojiTrie.put("☣", Boolean.TRUE); + emojiTrie.put("⬆️", Boolean.TRUE); + emojiTrie.put("⬆", Boolean.TRUE); + emojiTrie.put("↗️", Boolean.TRUE); + emojiTrie.put("↗", Boolean.TRUE); + emojiTrie.put("➡️", Boolean.TRUE); + emojiTrie.put("➡", Boolean.TRUE); + emojiTrie.put("↘️", Boolean.TRUE); + emojiTrie.put("↘", Boolean.TRUE); + emojiTrie.put("⬇️", Boolean.TRUE); + emojiTrie.put("⬇", Boolean.TRUE); + emojiTrie.put("↙️", Boolean.TRUE); + emojiTrie.put("↙", Boolean.TRUE); + emojiTrie.put("⬅️", Boolean.TRUE); + emojiTrie.put("⬅", Boolean.TRUE); + emojiTrie.put("↖️", Boolean.TRUE); + emojiTrie.put("↖", Boolean.TRUE); + emojiTrie.put("↕️", Boolean.TRUE); + emojiTrie.put("↕", Boolean.TRUE); + emojiTrie.put("↔️", Boolean.TRUE); + emojiTrie.put("↔", Boolean.TRUE); + emojiTrie.put("↩️", Boolean.TRUE); + emojiTrie.put("↩", Boolean.TRUE); + emojiTrie.put("↪️", Boolean.TRUE); + emojiTrie.put("↪", Boolean.TRUE); + emojiTrie.put("⤴️", Boolean.TRUE); + emojiTrie.put("⤴", Boolean.TRUE); + emojiTrie.put("⤵️", Boolean.TRUE); + emojiTrie.put("⤵", Boolean.TRUE); + emojiTrie.put("🔃", Boolean.TRUE); + emojiTrie.put("🔄", Boolean.TRUE); + emojiTrie.put("🔙", Boolean.TRUE); + emojiTrie.put("🔚", Boolean.TRUE); + emojiTrie.put("🔛", Boolean.TRUE); + emojiTrie.put("🔜", Boolean.TRUE); + emojiTrie.put("🔝", Boolean.TRUE); + emojiTrie.put("🛐", Boolean.TRUE); + emojiTrie.put("⚛️", Boolean.TRUE); + emojiTrie.put("⚛", Boolean.TRUE); + emojiTrie.put("🕉️", Boolean.TRUE); + emojiTrie.put("🕉", Boolean.TRUE); + emojiTrie.put("✡️", Boolean.TRUE); + emojiTrie.put("✡", Boolean.TRUE); + emojiTrie.put("☸️", Boolean.TRUE); + emojiTrie.put("☸", Boolean.TRUE); + emojiTrie.put("☯️", Boolean.TRUE); + emojiTrie.put("☯", Boolean.TRUE); + emojiTrie.put("✝️", Boolean.TRUE); + emojiTrie.put("✝", Boolean.TRUE); + emojiTrie.put("☦️", Boolean.TRUE); + emojiTrie.put("☦", Boolean.TRUE); + emojiTrie.put("☪️", Boolean.TRUE); + emojiTrie.put("☪", Boolean.TRUE); + emojiTrie.put("☮️", Boolean.TRUE); + emojiTrie.put("☮", Boolean.TRUE); + emojiTrie.put("🕎", Boolean.TRUE); + emojiTrie.put("🔯", Boolean.TRUE); + emojiTrie.put("🪯", Boolean.TRUE); + emojiTrie.put("♈", Boolean.TRUE); + emojiTrie.put("♉", Boolean.TRUE); + emojiTrie.put("♊", Boolean.TRUE); + emojiTrie.put("♋", Boolean.TRUE); + emojiTrie.put("♌", Boolean.TRUE); + emojiTrie.put("♍", Boolean.TRUE); + emojiTrie.put("♎", Boolean.TRUE); + emojiTrie.put("♏", Boolean.TRUE); + emojiTrie.put("♐", Boolean.TRUE); + emojiTrie.put("♑", Boolean.TRUE); + emojiTrie.put("♒", Boolean.TRUE); + emojiTrie.put("♓", Boolean.TRUE); + emojiTrie.put("⛎", Boolean.TRUE); + emojiTrie.put("🔀", Boolean.TRUE); + emojiTrie.put("🔁", Boolean.TRUE); + emojiTrie.put("🔂", Boolean.TRUE); + emojiTrie.put("▶️", Boolean.TRUE); + emojiTrie.put("▶", Boolean.TRUE); + emojiTrie.put("⏩", Boolean.TRUE); + emojiTrie.put("⏭️", Boolean.TRUE); + emojiTrie.put("⏭", Boolean.TRUE); + emojiTrie.put("⏯️", Boolean.TRUE); + emojiTrie.put("⏯", Boolean.TRUE); + emojiTrie.put("◀️", Boolean.TRUE); + emojiTrie.put("◀", Boolean.TRUE); + emojiTrie.put("⏪", Boolean.TRUE); + emojiTrie.put("⏮️", Boolean.TRUE); + emojiTrie.put("⏮", Boolean.TRUE); + emojiTrie.put("🔼", Boolean.TRUE); + emojiTrie.put("⏫", Boolean.TRUE); + emojiTrie.put("🔽", Boolean.TRUE); + emojiTrie.put("⏬", Boolean.TRUE); + emojiTrie.put("⏸️", Boolean.TRUE); + emojiTrie.put("⏸", Boolean.TRUE); + emojiTrie.put("⏹️", Boolean.TRUE); + emojiTrie.put("⏹", Boolean.TRUE); + emojiTrie.put("⏺️", Boolean.TRUE); + emojiTrie.put("⏺", Boolean.TRUE); + emojiTrie.put("⏏️", Boolean.TRUE); + emojiTrie.put("⏏", Boolean.TRUE); + emojiTrie.put("🎦", Boolean.TRUE); + emojiTrie.put("🔅", Boolean.TRUE); + emojiTrie.put("🔆", Boolean.TRUE); + emojiTrie.put("📶", Boolean.TRUE); + emojiTrie.put("🛜", Boolean.TRUE); + emojiTrie.put("📳", Boolean.TRUE); + emojiTrie.put("📴", Boolean.TRUE); + emojiTrie.put("♀️", Boolean.TRUE); + emojiTrie.put("♀", Boolean.TRUE); + emojiTrie.put("♂️", Boolean.TRUE); + emojiTrie.put("♂", Boolean.TRUE); + emojiTrie.put("⚧️", Boolean.TRUE); + emojiTrie.put("⚧", Boolean.TRUE); + emojiTrie.put("✖️", Boolean.TRUE); + emojiTrie.put("✖", Boolean.TRUE); + emojiTrie.put("➕", Boolean.TRUE); + emojiTrie.put("➖", Boolean.TRUE); + emojiTrie.put("➗", Boolean.TRUE); + emojiTrie.put("🟰", Boolean.TRUE); + emojiTrie.put("♾️", Boolean.TRUE); + emojiTrie.put("♾", Boolean.TRUE); + emojiTrie.put("‼️", Boolean.TRUE); + emojiTrie.put("‼", Boolean.TRUE); + emojiTrie.put("⁉️", Boolean.TRUE); + emojiTrie.put("⁉", Boolean.TRUE); + emojiTrie.put("❓", Boolean.TRUE); + emojiTrie.put("❔", Boolean.TRUE); + emojiTrie.put("❕", Boolean.TRUE); + emojiTrie.put("❗", Boolean.TRUE); + emojiTrie.put("〰️", Boolean.TRUE); + emojiTrie.put("〰", Boolean.TRUE); + emojiTrie.put("💱", Boolean.TRUE); + emojiTrie.put("💲", Boolean.TRUE); + emojiTrie.put("⚕️", Boolean.TRUE); + emojiTrie.put("⚕", Boolean.TRUE); + emojiTrie.put("♻️", Boolean.TRUE); + emojiTrie.put("♻", Boolean.TRUE); + emojiTrie.put("⚜️", Boolean.TRUE); + emojiTrie.put("⚜", Boolean.TRUE); + emojiTrie.put("🔱", Boolean.TRUE); + emojiTrie.put("📛", Boolean.TRUE); + emojiTrie.put("🔰", Boolean.TRUE); + emojiTrie.put("⭕", Boolean.TRUE); + emojiTrie.put("✅", Boolean.TRUE); + emojiTrie.put("☑️", Boolean.TRUE); + emojiTrie.put("☑", Boolean.TRUE); + emojiTrie.put("✔️", Boolean.TRUE); + emojiTrie.put("✔", Boolean.TRUE); + emojiTrie.put("❌", Boolean.TRUE); + emojiTrie.put("❎", Boolean.TRUE); + emojiTrie.put("➰", Boolean.TRUE); + emojiTrie.put("➿", Boolean.TRUE); + emojiTrie.put("〽️", Boolean.TRUE); + emojiTrie.put("〽", Boolean.TRUE); + emojiTrie.put("✳️", Boolean.TRUE); + emojiTrie.put("✳", Boolean.TRUE); + emojiTrie.put("✴️", Boolean.TRUE); + emojiTrie.put("✴", Boolean.TRUE); + emojiTrie.put("❇️", Boolean.TRUE); + emojiTrie.put("❇", Boolean.TRUE); + emojiTrie.put("©️", Boolean.TRUE); + emojiTrie.put("©", Boolean.TRUE); + emojiTrie.put("®️", Boolean.TRUE); + emojiTrie.put("®", Boolean.TRUE); + emojiTrie.put("™️", Boolean.TRUE); + emojiTrie.put("™", Boolean.TRUE); + emojiTrie.put("🫟", Boolean.TRUE); + emojiTrie.put("#️⃣", Boolean.TRUE); + emojiTrie.put("#⃣", Boolean.TRUE); + emojiTrie.put("*️⃣", Boolean.TRUE); + emojiTrie.put("*⃣", Boolean.TRUE); + emojiTrie.put("0️⃣", Boolean.TRUE); + emojiTrie.put("0⃣", Boolean.TRUE); + emojiTrie.put("1️⃣", Boolean.TRUE); + emojiTrie.put("1⃣", Boolean.TRUE); + emojiTrie.put("2️⃣", Boolean.TRUE); + emojiTrie.put("2⃣", Boolean.TRUE); + emojiTrie.put("3️⃣", Boolean.TRUE); + emojiTrie.put("3⃣", Boolean.TRUE); + emojiTrie.put("4️⃣", Boolean.TRUE); + emojiTrie.put("4⃣", Boolean.TRUE); + emojiTrie.put("5️⃣", Boolean.TRUE); + emojiTrie.put("5⃣", Boolean.TRUE); + emojiTrie.put("6️⃣", Boolean.TRUE); + emojiTrie.put("6⃣", Boolean.TRUE); + emojiTrie.put("7️⃣", Boolean.TRUE); + emojiTrie.put("7⃣", Boolean.TRUE); + emojiTrie.put("8️⃣", Boolean.TRUE); + emojiTrie.put("8⃣", Boolean.TRUE); + emojiTrie.put("9️⃣", Boolean.TRUE); + emojiTrie.put("9⃣", Boolean.TRUE); + emojiTrie.put("🔟", Boolean.TRUE); + emojiTrie.put("🔠", Boolean.TRUE); + emojiTrie.put("🔡", Boolean.TRUE); + emojiTrie.put("🔢", Boolean.TRUE); + emojiTrie.put("🔣", Boolean.TRUE); + emojiTrie.put("🔤", Boolean.TRUE); + emojiTrie.put("🅰️", Boolean.TRUE); + emojiTrie.put("🅰", Boolean.TRUE); + emojiTrie.put("🆎", Boolean.TRUE); + emojiTrie.put("🅱️", Boolean.TRUE); + emojiTrie.put("🅱", Boolean.TRUE); + emojiTrie.put("🆑", Boolean.TRUE); + emojiTrie.put("🆒", Boolean.TRUE); + emojiTrie.put("🆓", Boolean.TRUE); + emojiTrie.put("ℹ️", Boolean.TRUE); + emojiTrie.put("ℹ", Boolean.TRUE); + emojiTrie.put("🆔", Boolean.TRUE); + emojiTrie.put("Ⓜ️", Boolean.TRUE); + emojiTrie.put("Ⓜ", Boolean.TRUE); + emojiTrie.put("🆕", Boolean.TRUE); + emojiTrie.put("🆖", Boolean.TRUE); + emojiTrie.put("🅾️", Boolean.TRUE); + emojiTrie.put("🅾", Boolean.TRUE); + emojiTrie.put("🆗", Boolean.TRUE); + emojiTrie.put("🅿️", Boolean.TRUE); + emojiTrie.put("🅿", Boolean.TRUE); + emojiTrie.put("🆘", Boolean.TRUE); + emojiTrie.put("🆙", Boolean.TRUE); + emojiTrie.put("🆚", Boolean.TRUE); + emojiTrie.put("🈁", Boolean.TRUE); + emojiTrie.put("🈂️", Boolean.TRUE); + emojiTrie.put("🈂", Boolean.TRUE); + emojiTrie.put("🈷️", Boolean.TRUE); + emojiTrie.put("🈷", Boolean.TRUE); + emojiTrie.put("🈶", Boolean.TRUE); + emojiTrie.put("🈯", Boolean.TRUE); + emojiTrie.put("🉐", Boolean.TRUE); + emojiTrie.put("🈹", Boolean.TRUE); + emojiTrie.put("🈚", Boolean.TRUE); + emojiTrie.put("🈲", Boolean.TRUE); + emojiTrie.put("🉑", Boolean.TRUE); + emojiTrie.put("🈸", Boolean.TRUE); + emojiTrie.put("🈴", Boolean.TRUE); + emojiTrie.put("🈳", Boolean.TRUE); + emojiTrie.put("㊗️", Boolean.TRUE); + emojiTrie.put("㊗", Boolean.TRUE); + emojiTrie.put("㊙️", Boolean.TRUE); + emojiTrie.put("㊙", Boolean.TRUE); + emojiTrie.put("🈺", Boolean.TRUE); + emojiTrie.put("🈵", Boolean.TRUE); + emojiTrie.put("🔴", Boolean.TRUE); + emojiTrie.put("🟠", Boolean.TRUE); + emojiTrie.put("🟡", Boolean.TRUE); + emojiTrie.put("🟢", Boolean.TRUE); + emojiTrie.put("🔵", Boolean.TRUE); + emojiTrie.put("🟣", Boolean.TRUE); + emojiTrie.put("🟤", Boolean.TRUE); + emojiTrie.put("⚫", Boolean.TRUE); + emojiTrie.put("⚪", Boolean.TRUE); + emojiTrie.put("🟥", Boolean.TRUE); + emojiTrie.put("🟧", Boolean.TRUE); + emojiTrie.put("🟨", Boolean.TRUE); + emojiTrie.put("🟩", Boolean.TRUE); + emojiTrie.put("🟦", Boolean.TRUE); + emojiTrie.put("🟪", Boolean.TRUE); + emojiTrie.put("🟫", Boolean.TRUE); + emojiTrie.put("⬛", Boolean.TRUE); + emojiTrie.put("⬜", Boolean.TRUE); + emojiTrie.put("◼️", Boolean.TRUE); + emojiTrie.put("◼", Boolean.TRUE); + emojiTrie.put("◻️", Boolean.TRUE); + emojiTrie.put("◻", Boolean.TRUE); + emojiTrie.put("◾", Boolean.TRUE); + emojiTrie.put("◽", Boolean.TRUE); + emojiTrie.put("▪️", Boolean.TRUE); + emojiTrie.put("▪", Boolean.TRUE); + emojiTrie.put("▫️", Boolean.TRUE); + emojiTrie.put("▫", Boolean.TRUE); + emojiTrie.put("🔶", Boolean.TRUE); + emojiTrie.put("🔷", Boolean.TRUE); + emojiTrie.put("🔸", Boolean.TRUE); + emojiTrie.put("🔹", Boolean.TRUE); + emojiTrie.put("🔺", Boolean.TRUE); + emojiTrie.put("🔻", Boolean.TRUE); + emojiTrie.put("💠", Boolean.TRUE); + emojiTrie.put("🔘", Boolean.TRUE); + emojiTrie.put("🔳", Boolean.TRUE); + emojiTrie.put("🔲", Boolean.TRUE); + emojiTrie.put("🏁", Boolean.TRUE); + emojiTrie.put("🚩", Boolean.TRUE); + emojiTrie.put("🎌", Boolean.TRUE); + emojiTrie.put("🏴", Boolean.TRUE); + emojiTrie.put("🏳️", Boolean.TRUE); + emojiTrie.put("🏳", Boolean.TRUE); + emojiTrie.put("🏳️‍🌈", Boolean.TRUE); + emojiTrie.put("🏳‍🌈", Boolean.TRUE); + emojiTrie.put("🏳️‍⚧️", Boolean.TRUE); + emojiTrie.put("🏳‍⚧️", Boolean.TRUE); + emojiTrie.put("🏳️‍⚧", Boolean.TRUE); + emojiTrie.put("🏳‍⚧", Boolean.TRUE); + emojiTrie.put("🏴‍☠️", Boolean.TRUE); + emojiTrie.put("🏴‍☠", Boolean.TRUE); + emojiTrie.put("🇦🇨", Boolean.TRUE); + emojiTrie.put("🇦🇩", Boolean.TRUE); + emojiTrie.put("🇦🇪", Boolean.TRUE); + emojiTrie.put("🇦🇫", Boolean.TRUE); + emojiTrie.put("🇦🇬", Boolean.TRUE); + emojiTrie.put("🇦🇮", Boolean.TRUE); + emojiTrie.put("🇦🇱", Boolean.TRUE); + emojiTrie.put("🇦🇲", Boolean.TRUE); + emojiTrie.put("🇦🇴", Boolean.TRUE); + emojiTrie.put("🇦🇶", Boolean.TRUE); + emojiTrie.put("🇦🇷", Boolean.TRUE); + emojiTrie.put("🇦🇸", Boolean.TRUE); + emojiTrie.put("🇦🇹", Boolean.TRUE); + emojiTrie.put("🇦🇺", Boolean.TRUE); + emojiTrie.put("🇦🇼", Boolean.TRUE); + emojiTrie.put("🇦🇽", Boolean.TRUE); + emojiTrie.put("🇦🇿", Boolean.TRUE); + emojiTrie.put("🇧🇦", Boolean.TRUE); + emojiTrie.put("🇧🇧", Boolean.TRUE); + emojiTrie.put("🇧🇩", Boolean.TRUE); + emojiTrie.put("🇧🇪", Boolean.TRUE); + emojiTrie.put("🇧🇫", Boolean.TRUE); + emojiTrie.put("🇧🇬", Boolean.TRUE); + emojiTrie.put("🇧🇭", Boolean.TRUE); + emojiTrie.put("🇧🇮", Boolean.TRUE); + emojiTrie.put("🇧🇯", Boolean.TRUE); + emojiTrie.put("🇧🇱", Boolean.TRUE); + emojiTrie.put("🇧🇲", Boolean.TRUE); + emojiTrie.put("🇧🇳", Boolean.TRUE); + emojiTrie.put("🇧🇴", Boolean.TRUE); + emojiTrie.put("🇧🇶", Boolean.TRUE); + emojiTrie.put("🇧🇷", Boolean.TRUE); + emojiTrie.put("🇧🇸", Boolean.TRUE); + emojiTrie.put("🇧🇹", Boolean.TRUE); + emojiTrie.put("🇧🇻", Boolean.TRUE); + emojiTrie.put("🇧🇼", Boolean.TRUE); + emojiTrie.put("🇧🇾", Boolean.TRUE); + emojiTrie.put("🇧🇿", Boolean.TRUE); + emojiTrie.put("🇨🇦", Boolean.TRUE); + emojiTrie.put("🇨🇨", Boolean.TRUE); + emojiTrie.put("🇨🇩", Boolean.TRUE); + emojiTrie.put("🇨🇫", Boolean.TRUE); + emojiTrie.put("🇨🇬", Boolean.TRUE); + emojiTrie.put("🇨🇭", Boolean.TRUE); + emojiTrie.put("🇨🇮", Boolean.TRUE); + emojiTrie.put("🇨🇰", Boolean.TRUE); + emojiTrie.put("🇨🇱", Boolean.TRUE); + emojiTrie.put("🇨🇲", Boolean.TRUE); + emojiTrie.put("🇨🇳", Boolean.TRUE); + emojiTrie.put("🇨🇴", Boolean.TRUE); + emojiTrie.put("🇨🇵", Boolean.TRUE); + emojiTrie.put("🇨🇶", Boolean.TRUE); + emojiTrie.put("🇨🇷", Boolean.TRUE); + emojiTrie.put("🇨🇺", Boolean.TRUE); + emojiTrie.put("🇨🇻", Boolean.TRUE); + emojiTrie.put("🇨🇼", Boolean.TRUE); + emojiTrie.put("🇨🇽", Boolean.TRUE); + emojiTrie.put("🇨🇾", Boolean.TRUE); + emojiTrie.put("🇨🇿", Boolean.TRUE); + emojiTrie.put("🇩🇪", Boolean.TRUE); + emojiTrie.put("🇩🇬", Boolean.TRUE); + emojiTrie.put("🇩🇯", Boolean.TRUE); + emojiTrie.put("🇩🇰", Boolean.TRUE); + emojiTrie.put("🇩🇲", Boolean.TRUE); + emojiTrie.put("🇩🇴", Boolean.TRUE); + emojiTrie.put("🇩🇿", Boolean.TRUE); + emojiTrie.put("🇪🇦", Boolean.TRUE); + emojiTrie.put("🇪🇨", Boolean.TRUE); + emojiTrie.put("🇪🇪", Boolean.TRUE); + emojiTrie.put("🇪🇬", Boolean.TRUE); + emojiTrie.put("🇪🇭", Boolean.TRUE); + emojiTrie.put("🇪🇷", Boolean.TRUE); + emojiTrie.put("🇪🇸", Boolean.TRUE); + emojiTrie.put("🇪🇹", Boolean.TRUE); + emojiTrie.put("🇪🇺", Boolean.TRUE); + emojiTrie.put("🇫🇮", Boolean.TRUE); + emojiTrie.put("🇫🇯", Boolean.TRUE); + emojiTrie.put("🇫🇰", Boolean.TRUE); + emojiTrie.put("🇫🇲", Boolean.TRUE); + emojiTrie.put("🇫🇴", Boolean.TRUE); + emojiTrie.put("🇫🇷", Boolean.TRUE); + emojiTrie.put("🇬🇦", Boolean.TRUE); + emojiTrie.put("🇬🇧", Boolean.TRUE); + emojiTrie.put("🇬🇩", Boolean.TRUE); + emojiTrie.put("🇬🇪", Boolean.TRUE); + emojiTrie.put("🇬🇫", Boolean.TRUE); + emojiTrie.put("🇬🇬", Boolean.TRUE); + emojiTrie.put("🇬🇭", Boolean.TRUE); + emojiTrie.put("🇬🇮", Boolean.TRUE); + emojiTrie.put("🇬🇱", Boolean.TRUE); + emojiTrie.put("🇬🇲", Boolean.TRUE); + emojiTrie.put("🇬🇳", Boolean.TRUE); + emojiTrie.put("🇬🇵", Boolean.TRUE); + emojiTrie.put("🇬🇶", Boolean.TRUE); + emojiTrie.put("🇬🇷", Boolean.TRUE); + emojiTrie.put("🇬🇸", Boolean.TRUE); + emojiTrie.put("🇬🇹", Boolean.TRUE); + emojiTrie.put("🇬🇺", Boolean.TRUE); + emojiTrie.put("🇬🇼", Boolean.TRUE); + emojiTrie.put("🇬🇾", Boolean.TRUE); + emojiTrie.put("🇭🇰", Boolean.TRUE); + emojiTrie.put("🇭🇲", Boolean.TRUE); + emojiTrie.put("🇭🇳", Boolean.TRUE); + emojiTrie.put("🇭🇷", Boolean.TRUE); + emojiTrie.put("🇭🇹", Boolean.TRUE); + emojiTrie.put("🇭🇺", Boolean.TRUE); + emojiTrie.put("🇮🇨", Boolean.TRUE); + emojiTrie.put("🇮🇩", Boolean.TRUE); + emojiTrie.put("🇮🇪", Boolean.TRUE); + emojiTrie.put("🇮🇱", Boolean.TRUE); + emojiTrie.put("🇮🇲", Boolean.TRUE); + emojiTrie.put("🇮🇳", Boolean.TRUE); + emojiTrie.put("🇮🇴", Boolean.TRUE); + emojiTrie.put("🇮🇶", Boolean.TRUE); + emojiTrie.put("🇮🇷", Boolean.TRUE); + emojiTrie.put("🇮🇸", Boolean.TRUE); + emojiTrie.put("🇮🇹", Boolean.TRUE); + emojiTrie.put("🇯🇪", Boolean.TRUE); + emojiTrie.put("🇯🇲", Boolean.TRUE); + emojiTrie.put("🇯🇴", Boolean.TRUE); + emojiTrie.put("🇯🇵", Boolean.TRUE); + emojiTrie.put("🇰🇪", Boolean.TRUE); + emojiTrie.put("🇰🇬", Boolean.TRUE); + emojiTrie.put("🇰🇭", Boolean.TRUE); + emojiTrie.put("🇰🇮", Boolean.TRUE); + emojiTrie.put("🇰🇲", Boolean.TRUE); + emojiTrie.put("🇰🇳", Boolean.TRUE); + emojiTrie.put("🇰🇵", Boolean.TRUE); + emojiTrie.put("🇰🇷", Boolean.TRUE); + emojiTrie.put("🇰🇼", Boolean.TRUE); + emojiTrie.put("🇰🇾", Boolean.TRUE); + emojiTrie.put("🇰🇿", Boolean.TRUE); + emojiTrie.put("🇱🇦", Boolean.TRUE); + emojiTrie.put("🇱🇧", Boolean.TRUE); + emojiTrie.put("🇱🇨", Boolean.TRUE); + emojiTrie.put("🇱🇮", Boolean.TRUE); + emojiTrie.put("🇱🇰", Boolean.TRUE); + emojiTrie.put("🇱🇷", Boolean.TRUE); + emojiTrie.put("🇱🇸", Boolean.TRUE); + emojiTrie.put("🇱🇹", Boolean.TRUE); + emojiTrie.put("🇱🇺", Boolean.TRUE); + emojiTrie.put("🇱🇻", Boolean.TRUE); + emojiTrie.put("🇱🇾", Boolean.TRUE); + emojiTrie.put("🇲🇦", Boolean.TRUE); + emojiTrie.put("🇲🇨", Boolean.TRUE); + emojiTrie.put("🇲🇩", Boolean.TRUE); + emojiTrie.put("🇲🇪", Boolean.TRUE); + emojiTrie.put("🇲🇫", Boolean.TRUE); + emojiTrie.put("🇲🇬", Boolean.TRUE); + emojiTrie.put("🇲🇭", Boolean.TRUE); + emojiTrie.put("🇲🇰", Boolean.TRUE); + emojiTrie.put("🇲🇱", Boolean.TRUE); + emojiTrie.put("🇲🇲", Boolean.TRUE); + emojiTrie.put("🇲🇳", Boolean.TRUE); + emojiTrie.put("🇲🇴", Boolean.TRUE); + emojiTrie.put("🇲🇵", Boolean.TRUE); + emojiTrie.put("🇲🇶", Boolean.TRUE); + emojiTrie.put("🇲🇷", Boolean.TRUE); + emojiTrie.put("🇲🇸", Boolean.TRUE); + emojiTrie.put("🇲🇹", Boolean.TRUE); + emojiTrie.put("🇲🇺", Boolean.TRUE); + emojiTrie.put("🇲🇻", Boolean.TRUE); + emojiTrie.put("🇲🇼", Boolean.TRUE); + emojiTrie.put("🇲🇽", Boolean.TRUE); + emojiTrie.put("🇲🇾", Boolean.TRUE); + emojiTrie.put("🇲🇿", Boolean.TRUE); + emojiTrie.put("🇳🇦", Boolean.TRUE); + emojiTrie.put("🇳🇨", Boolean.TRUE); + emojiTrie.put("🇳🇪", Boolean.TRUE); + emojiTrie.put("🇳🇫", Boolean.TRUE); + emojiTrie.put("🇳🇬", Boolean.TRUE); + emojiTrie.put("🇳🇮", Boolean.TRUE); + emojiTrie.put("🇳🇱", Boolean.TRUE); + emojiTrie.put("🇳🇴", Boolean.TRUE); + emojiTrie.put("🇳🇵", Boolean.TRUE); + emojiTrie.put("🇳🇷", Boolean.TRUE); + emojiTrie.put("🇳🇺", Boolean.TRUE); + emojiTrie.put("🇳🇿", Boolean.TRUE); + emojiTrie.put("🇴🇲", Boolean.TRUE); + emojiTrie.put("🇵🇦", Boolean.TRUE); + emojiTrie.put("🇵🇪", Boolean.TRUE); + emojiTrie.put("🇵🇫", Boolean.TRUE); + emojiTrie.put("🇵🇬", Boolean.TRUE); + emojiTrie.put("🇵🇭", Boolean.TRUE); + emojiTrie.put("🇵🇰", Boolean.TRUE); + emojiTrie.put("🇵🇱", Boolean.TRUE); + emojiTrie.put("🇵🇲", Boolean.TRUE); + emojiTrie.put("🇵🇳", Boolean.TRUE); + emojiTrie.put("🇵🇷", Boolean.TRUE); + emojiTrie.put("🇵🇸", Boolean.TRUE); + emojiTrie.put("🇵🇹", Boolean.TRUE); + emojiTrie.put("🇵🇼", Boolean.TRUE); + emojiTrie.put("🇵🇾", Boolean.TRUE); + emojiTrie.put("🇶🇦", Boolean.TRUE); + emojiTrie.put("🇷🇪", Boolean.TRUE); + emojiTrie.put("🇷🇴", Boolean.TRUE); + emojiTrie.put("🇷🇸", Boolean.TRUE); + emojiTrie.put("🇷🇺", Boolean.TRUE); + emojiTrie.put("🇷🇼", Boolean.TRUE); + emojiTrie.put("🇸🇦", Boolean.TRUE); + emojiTrie.put("🇸🇧", Boolean.TRUE); + emojiTrie.put("🇸🇨", Boolean.TRUE); + emojiTrie.put("🇸🇩", Boolean.TRUE); + emojiTrie.put("🇸🇪", Boolean.TRUE); + emojiTrie.put("🇸🇬", Boolean.TRUE); + emojiTrie.put("🇸🇭", Boolean.TRUE); + emojiTrie.put("🇸🇮", Boolean.TRUE); + emojiTrie.put("🇸🇯", Boolean.TRUE); + emojiTrie.put("🇸🇰", Boolean.TRUE); + emojiTrie.put("🇸🇱", Boolean.TRUE); + emojiTrie.put("🇸🇲", Boolean.TRUE); + emojiTrie.put("🇸🇳", Boolean.TRUE); + emojiTrie.put("🇸🇴", Boolean.TRUE); + emojiTrie.put("🇸🇷", Boolean.TRUE); + emojiTrie.put("🇸🇸", Boolean.TRUE); + emojiTrie.put("🇸🇹", Boolean.TRUE); + emojiTrie.put("🇸🇻", Boolean.TRUE); + emojiTrie.put("🇸🇽", Boolean.TRUE); + emojiTrie.put("🇸🇾", Boolean.TRUE); + emojiTrie.put("🇸🇿", Boolean.TRUE); + emojiTrie.put("🇹🇦", Boolean.TRUE); + emojiTrie.put("🇹🇨", Boolean.TRUE); + emojiTrie.put("🇹🇩", Boolean.TRUE); + emojiTrie.put("🇹🇫", Boolean.TRUE); + emojiTrie.put("🇹🇬", Boolean.TRUE); + emojiTrie.put("🇹🇭", Boolean.TRUE); + emojiTrie.put("🇹🇯", Boolean.TRUE); + emojiTrie.put("🇹🇰", Boolean.TRUE); + emojiTrie.put("🇹🇱", Boolean.TRUE); + emojiTrie.put("🇹🇲", Boolean.TRUE); + emojiTrie.put("🇹🇳", Boolean.TRUE); + emojiTrie.put("🇹🇴", Boolean.TRUE); + emojiTrie.put("🇹🇷", Boolean.TRUE); + emojiTrie.put("🇹🇹", Boolean.TRUE); + emojiTrie.put("🇹🇻", Boolean.TRUE); + emojiTrie.put("🇹🇼", Boolean.TRUE); + emojiTrie.put("🇹🇿", Boolean.TRUE); + emojiTrie.put("🇺🇦", Boolean.TRUE); + emojiTrie.put("🇺🇬", Boolean.TRUE); + emojiTrie.put("🇺🇲", Boolean.TRUE); + emojiTrie.put("🇺🇳", Boolean.TRUE); + emojiTrie.put("🇺🇸", Boolean.TRUE); + emojiTrie.put("🇺🇾", Boolean.TRUE); + emojiTrie.put("🇺🇿", Boolean.TRUE); + emojiTrie.put("🇻🇦", Boolean.TRUE); + emojiTrie.put("🇻🇨", Boolean.TRUE); + emojiTrie.put("🇻🇪", Boolean.TRUE); + emojiTrie.put("🇻🇬", Boolean.TRUE); + emojiTrie.put("🇻🇮", Boolean.TRUE); + emojiTrie.put("🇻🇳", Boolean.TRUE); + emojiTrie.put("🇻🇺", Boolean.TRUE); + emojiTrie.put("🇼🇫", Boolean.TRUE); + emojiTrie.put("🇼🇸", Boolean.TRUE); + emojiTrie.put("🇽🇰", Boolean.TRUE); + emojiTrie.put("🇾🇪", Boolean.TRUE); + emojiTrie.put("🇾🇹", Boolean.TRUE); + emojiTrie.put("🇿🇦", Boolean.TRUE); + emojiTrie.put("🇿🇲", Boolean.TRUE); + emojiTrie.put("🇿🇼", Boolean.TRUE); + emojiTrie.put("🏴󠁧󠁢󠁥󠁮󠁧󠁿", Boolean.TRUE); + emojiTrie.put("🏴󠁧󠁢󠁳󠁣󠁴󠁿", Boolean.TRUE); + emojiTrie.put("🏴󠁧󠁢󠁷󠁬󠁳󠁿", Boolean.TRUE); } private Emojis() { diff --git a/src/main/java/sirius/kernel/commons/Files.java b/src/main/java/sirius/kernel/commons/Files.java index 88ba06a2..f3889dde 100644 --- a/src/main/java/sirius/kernel/commons/Files.java +++ b/src/main/java/sirius/kernel/commons/Files.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.Optional; import java.util.regex.Pattern; -import java.util.stream.Stream; /** * Helperclass for handling files in Java 8. @@ -87,7 +86,7 @@ public static String getFileExtension(@Nullable String path) { * Returns the basepath of the given path to a file. *

* The basepath is everything but the filename of the given path. So /foo/bar/test.txt - * will yield /foo/bar as as path. text.txt will yield null. + * will yield /foo/bar as the path. text.txt will yield null. *

* Note that both / and \ are accepted as path separators and are preserved in the output. * @@ -251,27 +250,4 @@ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOEx } }); } - - /** - * Returns a stream of all parts of the given path. - *

- * The stream will contain the filename, the parent directory, the parent of the parent and so on. - * - * @param path the path to split - * @return a stream of all parts of the given path - */ - public static Stream streamPath(String path) { - if (Strings.isEmpty(path)) { - return Stream.empty(); - } - - Stream.Builder builder = Stream.builder(); - builder.add(Files.getFilenameAndExtension(path)); - String parent = Files.getBasepath(path); - while (Strings.isFilled(parent)) { - builder.add(Files.getFilenameAndExtension(parent)); - parent = Files.getBasepath(parent); - } - return builder.build(); - } } diff --git a/src/main/java/sirius/kernel/commons/Json.java b/src/main/java/sirius/kernel/commons/Json.java index 09db0df4..df7d4554 100644 --- a/src/main/java/sirius/kernel/commons/Json.java +++ b/src/main/java/sirius/kernel/commons/Json.java @@ -34,9 +34,9 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; -import java.util.stream.StreamSupport; /** * Provides a simple wrapper for Jackson to provide a more fluent API with some additional functions that provide useful @@ -64,7 +64,8 @@ public class Json { .registerModule(new JavaTimeModule()); static { - MAPPER.getFactory().setStreamReadConstraints(StreamReadConstraints.builder().maxStringLength(25_000_000).build()); + MAPPER.getFactory() + .setStreamReadConstraints(StreamReadConstraints.builder().maxStringLength(25_000_000).build()); } private Json() { @@ -285,10 +286,12 @@ public static Value convertToValue(@Nullable JsonNode node) { * * @param arrayNode the node to stream * @return a stream of the entries of the given node + * @deprecated since 2025/07/11, use {@link ArrayNode#valueStream()} instead. */ + @Deprecated(since = "2025/07/11", forRemoval = true) @Nonnull public static Stream streamEntries(@Nonnull ArrayNode arrayNode) { - return StreamSupport.stream(arrayNode.spliterator(), false); + return arrayNode.valueStream(); } /** @@ -325,11 +328,7 @@ public static ObjectNode getObjectAtIndex(@Nonnull ArrayNode arrayNode, int inde */ @Nonnull public static Optional tryGetObjectAtIndex(@Nonnull ArrayNode arrayNode, int index) { - JsonNode node = arrayNode.get(index); - if (node == null || !node.isObject()) { - return Optional.empty(); - } - return Optional.of((ObjectNode) node); + return arrayNode.optional(index).filter(JsonNode::isObject).map(ObjectNode.class::cast); } /** @@ -355,11 +354,7 @@ public static ObjectNode getObject(@Nonnull ObjectNode objectNode, String fieldN */ @Nonnull public static Optional tryGetObject(@Nonnull ObjectNode objectNode, String fieldName) { - JsonNode node = objectNode.get(fieldName); - if (node == null || !node.isObject()) { - return Optional.empty(); - } - return Optional.of((ObjectNode) node); + return objectNode.optional(fieldName).filter(JsonNode::isObject).map(ObjectNode.class::cast); } /** @@ -490,11 +485,7 @@ private static Optional tryNodeAsArray(JsonNode node) { */ @Nonnull public static Optional tryGetAtIndex(@Nonnull ArrayNode arrayNode, int index) { - JsonNode node = arrayNode.get(index); - if (node == null || node.isNull()) { - return Optional.empty(); - } - return Optional.of(node); + return arrayNode.optional(index).filter(Predicate.not(JsonNode::isNull)); } /** @@ -506,11 +497,7 @@ public static Optional tryGetAtIndex(@Nonnull ArrayNode arrayNode, int */ @Nonnull public static Optional tryGet(@Nonnull ObjectNode objectNode, String fieldName) { - JsonNode node = objectNode.get(fieldName); - if (node == null || node.isNull()) { - return Optional.empty(); - } - return Optional.of(node); + return objectNode.optional(fieldName).filter(Predicate.not(JsonNode::isNull)); } /** @@ -573,6 +560,9 @@ public static Amount getValueAmount(@Nonnull JsonNode jsonNode, String fieldName if (node.isTextual()) { return Amount.ofMachineString(node.textValue()); } + if (node.isPojo()) { + return tryGetFromPojoNode(node, Amount.class).orElse(Amount.NOTHING); + } return Amount.NOTHING; } @@ -587,6 +577,9 @@ public static Amount getValueAmount(@Nonnull JsonNode jsonNode, String fieldName @Nonnull public static Optional tryValueDate(@Nonnull JsonNode jsonNode, String fieldName) { JsonNode node = jsonNode.get(fieldName); + if (node != null && node.isPojo()) { + return tryGetFromPojoNode(node, LocalDate.class); + } if (node == null || node.isNull() || !node.isTextual()) { return Optional.empty(); } @@ -609,6 +602,9 @@ public static Optional tryValueDate(@Nonnull JsonNode jsonNode, Strin @Nonnull public static Optional tryValueDateTime(@Nonnull JsonNode jsonNode, String fieldName) { JsonNode node = jsonNode.get(fieldName); + if (node != null && node.isPojo()) { + return tryGetFromPojoNode(node, LocalDateTime.class); + } if (node == null || node.isNull() || !node.isTextual()) { return Optional.empty(); } @@ -618,4 +614,12 @@ public static Optional tryValueDateTime(@Nonnull JsonNode jsonNod return Optional.empty(); } } + + private static Optional tryGetFromPojoNode(JsonNode node, Class targetClass) { + if (node.isPojo() && node instanceof POJONode pojoNode && targetClass.isInstance(pojoNode.getPojo())) { + return Optional.of(targetClass.cast(pojoNode.getPojo())); + } + + return Optional.empty(); + } } diff --git a/src/main/java/sirius/kernel/xml/Outcall.java b/src/main/java/sirius/kernel/commons/Outcall.java similarity index 72% rename from src/main/java/sirius/kernel/xml/Outcall.java rename to src/main/java/sirius/kernel/commons/Outcall.java index 5398f734..9f73c31b 100644 --- a/src/main/java/sirius/kernel/xml/Outcall.java +++ b/src/main/java/sirius/kernel/commons/Outcall.java @@ -6,21 +6,16 @@ * http://www.scireum.de - info@scireum.de */ -package sirius.kernel.xml; +package sirius.kernel.commons; +import com.google.common.net.HttpHeaders; import sirius.kernel.Sirius; import sirius.kernel.async.Operation; -import sirius.kernel.commons.Context; -import sirius.kernel.commons.Explain; -import sirius.kernel.commons.Monoflop; -import sirius.kernel.commons.Streams; -import sirius.kernel.commons.Strings; -import sirius.kernel.commons.Tuple; -import sirius.kernel.commons.Watch; import sirius.kernel.di.std.ConfigValue; import sirius.kernel.health.Average; import sirius.kernel.health.Exceptions; import sirius.kernel.health.Microtiming; +import sirius.kernel.io.IOExceptionSkipLog; import sirius.kernel.nls.NLS; import sirius.kernel.settings.Extension; @@ -35,6 +30,7 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; +import java.net.CookieManager; import java.net.MalformedURLException; import java.net.SocketTimeoutException; import java.net.URI; @@ -42,7 +38,6 @@ import java.net.URL; import java.net.URLEncoder; import java.net.http.HttpClient; -import java.net.http.HttpHeaders; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpTimeoutException; @@ -78,10 +73,6 @@ */ public class Outcall { - public static final String HEADER_USER_AGENT = "User-Agent"; - public static final String HEADER_ACCEPT = "Accept"; - public static final String HEADER_ACCEPT_DEFAULT_VALUE = "*/*"; - /** * Date time formatter as per * RFC 2616 section 3.3.1 @@ -96,15 +87,37 @@ public class Outcall { .withChronology(IsoChronology.INSTANCE) .withZone(ZoneOffset.UTC); - private static final String REQUEST_METHOD_HEAD = "HEAD"; - private static final String HEADER_CONTENT_TYPE = "Content-Type"; - private static final String HEADER_LOCATION = "Location"; - private static final String HEADER_CONTENT_DISPOSITION = "Content-Disposition"; - private static final String HEADER_IF_MODIFIED_SINCE = "If-Modified-Since"; - private static final String CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded; charset=utf-8"; + /** + * Default Accept header value allowing any media type. + */ + public static final String HEADER_ACCEPT_DEFAULT_VALUE = "*/*"; + + /** + * HTTP HEAD request method (requests headers only, no body). + */ + public static final String REQUEST_METHOD_HEAD = "HEAD"; + + /** + * Content type for URL-encoded form data with UTF-8 encoding. + */ + public static final String CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded; charset=utf-8"; + + /** + * Prefix for Bearer token authorization scheme. + */ + public static final String PREFIX_BEARER = "Bearer "; + + private static final String PREFIX_BASIC = "Basic "; + private static final Pattern CHARSET_PATTERN = Pattern.compile("(?i)\\bcharset=\\s*\"?([^\\s;\"]*)"); - private static final X509TrustManager TRUST_SELF_SIGNED_CERTS = new TrustingSelfSignedTrustManager(); - private static final int MAX_REDIRECTS = 5; + + /** + * Provides a constant for {@link #modifyClient(String)} to signal that the generated client must not be re-used or + * cached. + */ + public static final String CLIENT_SELECTOR_NO_CACHE = null; + + private static final String DEFAULT_CLIENT_SELECTOR = "_default_"; /** * Keeps track of hosts for which we ran into a connect-timeout. @@ -124,8 +137,6 @@ public class Outcall { */ private static final int TIMEOUT_BLACKLIST_HIGH_WATERMARK = 100; - private static final String HEADER_AUTHORIZATION = "Authorization"; - @ConfigValue("http.outcall.timeouts.default.connectTimeout") private static Duration defaultConnectTimeout; @@ -135,24 +146,35 @@ public class Outcall { @ConfigValue("http.outcall.connectTimeoutBlacklistDuration") private static Duration connectTimeoutBlacklistDuration; + private static String defaultUserAgent; + + private static final X509TrustManager trustManagerForSelfSignedCerts = new TrustingSelfSignedTrustManager(); + + private static final Average timeToFirstByte = new Average(); + + /** + * Contains a cache of re-usable clients based on their clientSelector. + */ + private static final Map cachedHttpClients = new ConcurrentHashMap<>(); + + private static final int MAX_REDIRECTS = 5; + + private String clientSelector = DEFAULT_CLIENT_SELECTOR; private HttpClient client; private HttpRequest request; private String blacklistId; - private final HttpClient.Builder clientBuilder; + private HttpClient.Builder clientBuilder; private final HttpRequest.Builder requestBuilder; private HttpResponse response; private HttpClient.Redirect redirectPolicy = HttpClient.Redirect.NORMAL; private Charset charset = StandardCharsets.UTF_8; + private Supplier oAuthAccessToken; + private Runnable oAuthTokenRefresher; // Provide an output stream for old apis private final ByteArrayOutputStream out = new ByteArrayOutputStream(); private boolean postFromOutput = false; - private static String defaultUserAgent; - private static final Average timeToFirstByte = new Average(); - private Supplier oAuthAccessToken; - private Runnable oAuthTokenRefresher; - /** * Builds the default user agent string as 'product.name/product.version (+product.baseUrl)', where version or * baseUrl could be empty. This is attached to every outgoing request (see {@link Outcall#Outcall(java.net.URI)}). @@ -174,16 +196,16 @@ public static String buildDefaultUserAgent() { /** * Creates a new Outcall to the given URL. + *

* Uses the uri's host as blacklist id. * * @param uri the url to call */ public Outcall(URI uri) { this.blacklistId = uri.getHost(); - clientBuilder = HttpClient.newBuilder().connectTimeout(defaultConnectTimeout); requestBuilder = HttpRequest.newBuilder(uri) - .header(HEADER_USER_AGENT, buildDefaultUserAgent()) - .header(HEADER_ACCEPT, HEADER_ACCEPT_DEFAULT_VALUE) + .header(HttpHeaders.USER_AGENT, buildDefaultUserAgent()) + .header(HttpHeaders.ACCEPT, HEADER_ACCEPT_DEFAULT_VALUE) .timeout(defaultReadTimeout); } @@ -191,11 +213,41 @@ public Outcall(URI uri) { * Allows to modify the client before the request is sent by returning the builder that is used to create it. * * @return the underlying {@link HttpClient.Builder} + * @deprecated Use {@link #modifyClient(String)} */ + @Deprecated public HttpClient.Builder modifyClient() { + return modifyClient(null); + } + + /** + * Allows to modify the client before the request is sent by returning the builder that is used to create it. + *

+ * Note that if a non-null clientSelector is given, the resulting {@link HttpClient} created by the + * modified builder is cached and re-used with the benefit of having a connection pool to re-use connections + * across multiple requests. + * + * @param clientSelector a unique string for all occasions where the builder is customized the same way and thus + * the cached client can be re-used once it has been created. + * Use {@link #CLIENT_SELECTOR_NO_CACHE} to signal that the created client should not be + * re-used (e.g. if a {@link java.net.CookieManager} is used). + * @return the underlying {@link HttpClient.Builder} + */ + public HttpClient.Builder modifyClient(@Nullable String clientSelector) { if (client != null) { throw new IllegalStateException("Can no longer modify client, request has already been sent!"); } + + if (!DEFAULT_CLIENT_SELECTOR.equals(this.clientSelector) + && this.clientSelector != null + && !this.clientSelector.equals(clientSelector)) { + throw new IllegalStateException("Client selector cannot be changed"); + } + this.clientSelector = clientSelector; + if (this.clientBuilder == null) { + this.clientBuilder = HttpClient.newBuilder().connectTimeout(defaultConnectTimeout); + } + return clientBuilder; } @@ -254,7 +306,7 @@ public Outcall setRequestProperty(String name, String value) { * @throws IllegalStateException if already connected */ public Outcall setIfModifiedSince(LocalDateTime ifModifiedSince) { - setRequestProperty(HEADER_IF_MODIFIED_SINCE, + setRequestProperty(HttpHeaders.IF_MODIFIED_SINCE, ifModifiedSince.atZone(ZoneId.systemDefault()).format(RFC2616_INSTANT)); return this; } @@ -273,7 +325,7 @@ public Outcall setAuthParams(String user, String password) { String userAndPassword = user + ":" + password; String encodedAuthorization = Base64.getEncoder().encodeToString(userAndPassword.getBytes(charset)); - setRequestProperty(HEADER_AUTHORIZATION, "Basic " + encodedAuthorization); + setRequestProperty(HttpHeaders.AUTHORIZATION, PREFIX_BASIC + encodedAuthorization); return this; } @@ -283,12 +335,28 @@ public Outcall setAuthParams(String user, String password) { * This will make the connection trust only self-signed certificates! * * @return the outcall itself for fluent method calls + * @deprecated Use {@link #trustSelfSignedCertificates(String)} */ + @Deprecated public Outcall trustSelfSignedCertificates() { + return trustSelfSignedCertificates(null); + } + + /** + * Makes the underlying connection trust self-signed certs. + *

+ * This will make the connection trust only self-signed certificates! + * + * @param clientSelector the selector used to cache the underlying {@link HttpClient} to facilitate connection pooling + * See {@link #modifyClient(String)}. + * @return the outcall itself for fluent method calls + */ + + public Outcall trustSelfSignedCertificates(@Nullable String clientSelector) { try { SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, new TrustManager[]{TRUST_SELF_SIGNED_CERTS}, new SecureRandom()); - modifyClient().sslContext(sslContext); + sslContext.init(null, new TrustManager[]{trustManagerForSelfSignedCerts}, new SecureRandom()); + modifyClient(clientSelector).sslContext(sslContext); } catch (NoSuchAlgorithmException | KeyManagementException exception) { throw Exceptions.handle(exception); } @@ -299,45 +367,85 @@ public Outcall trustSelfSignedCertificates() { /** * Sets a specified timeout value, in milliseconds, to be used * when opening a communications link to the resource referenced - * by this outcall. If the timeout expires before the - * connection can be established, a + * by this outcall. If the timeout expires before the connection can be established, a * {@link java.net.http.HttpConnectTimeoutException} is raised. A timeout of zero is * interpreted as an infinite timeout. * * @param timeoutMillis specifies the connect-timeout value in milliseconds + * @deprecated Use {@code modifyClient().connectTimeout(Duration.ofMillis(timeoutMillis))} or + * {@link #withConfiguredTimeout(String, String)} */ + @Deprecated public void setConnectTimeout(int timeoutMillis) { modifyClient().connectTimeout(Duration.ofMillis(timeoutMillis)); } /** - * Sets the read timeout to a specified timeout, in - * milliseconds. A non-zero value specifies the timeout when - * reading from Input stream when a connection is established to a - * resource. If the timeout expires before there is data available - * for read, a {@link java.net.http.HttpTimeoutException} is raised. A - * timeout of zero is interpreted as an infinite timeout. + * Sets the read timeout to a specified timeout, in milliseconds. + *

+ * Specifies the timeout when reading from Input stream when a connection is established to a + * resource. If the timeout expires before there is data available for read, a + * {@link java.net.http.HttpTimeoutException} is raised. * * @param timeoutMillis specifies the timeout value to be used in milliseconds + * @deprecated Use {@link #setReadTimeout(Duration)} */ + @Deprecated public void setReadTimeout(int timeoutMillis) { modifyRequest().timeout(Duration.ofMillis(timeoutMillis)); } + /** + * Sets the read timeout to a specified timeout. + *

+ * Specifies the timeout when reading from Input stream when a connection is established to a + * resource. If the timeout expires before there is data available for read, a + * {@link java.net.http.HttpTimeoutException} is raised. + * + * @param readTimeout specifies the timeout value to be used + * @see #withConfiguredTimeout(String, String) + */ + public void setReadTimeout(Duration readTimeout) { + modifyRequest().timeout(readTimeout); + } + /** * Sets the connect-timeout and read-timeout to the values specified in the config block http.outcall.timeouts.* * where * equals the configKey parameter. *

- * See the http.outcall.timeouts.soap block in component-050-kernel.conf for reference. + * See the http.outcall.timeouts block in component-050-kernel.conf for reference. * * @param configKey the config key of the timeout configuration block * @return this for fluent method calls + * @deprecated Use {@link #withConfiguredTimeout(String, String)} */ + @Deprecated public Outcall withConfiguredTimeout(@Nonnull String configKey) { + return withConfiguredTimeout(null, configKey); + } + + /** + * Sets the connect-timeout and read-timeout to the values specified in the config block http.outcall.timeouts.* + * where * equals the configKey parameter. + *

+ * See the http.outcall.timeouts block in component-050-kernel.conf for reference. + * + * @param clientSelector the selector used to cache the underlying {@link HttpClient} to facilitate connection pooling + * See {@link #modifyClient(String)}. + * @param configKey the config key of the timeout configuration block + * @return this for fluent method calls + */ + public Outcall withConfiguredTimeout(@Nullable String clientSelector, @Nonnull String configKey) { Extension extension = Sirius.getSettings().getExtension("http.outcall.timeouts", configKey); - setConnectTimeout((int) extension.getConfig().getDuration("connectTimeout").toMillis()); - setReadTimeout((int) extension.getConfig().getDuration("readTimeout").toMillis()); + Duration connectTimeout = extension.getConfig().getDuration("connectTimeout"); + if (!Duration.ZERO.equals(connectTimeout)) { + modifyClient(clientSelector).connectTimeout(connectTimeout); + } + Duration readTimeout = extension.getConfig().getDuration("readTimeout"); + if (!Duration.ZERO.equals(readTimeout)) { + setReadTimeout(readTimeout); + } return this; } @@ -362,7 +470,7 @@ public Outcall postData(Context params, Charset charset) { parameterString.append("="); parameterString.append(URLEncoder.encode(NLS.toMachineString(entry.getValue()), charset)); } - modifyRequest().setHeader(HEADER_CONTENT_TYPE, CONTENT_TYPE_FORM_URLENCODED) + modifyRequest().setHeader(HttpHeaders.CONTENT_TYPE, CONTENT_TYPE_FORM_URLENCODED) .POST(HttpRequest.BodyPublishers.ofString(parameterString.toString(), charset)); return this; @@ -439,11 +547,11 @@ private void connect() throws IOException { checkTimeoutBlacklist(); if (oAuthAccessToken != null) { - setRequestProperty(HEADER_AUTHORIZATION, oAuthAccessToken.get()); + setRequestProperty(HttpHeaders.AUTHORIZATION, oAuthAccessToken.get()); } if (client == null) { - client = clientBuilder.build(); + this.client = setupClient(); } if (request == null) { if (postFromOutput) { @@ -463,6 +571,23 @@ private void connect() throws IOException { } } + private HttpClient setupClient() { + if (clientSelector != null) { + HttpClient cachedClient = cachedHttpClients.get(clientSelector); + if (cachedClient != null) { + return cachedClient; + } + } + + HttpClient.Builder builder = + clientBuilder != null ? clientBuilder : HttpClient.newBuilder().connectTimeout(defaultConnectTimeout); + HttpClient result = builder.build(); + if (clientSelector != null) { + cachedHttpClients.put(clientSelector, result); + } + return result; + } + private void performRequest() throws IOException { Watch watch = Watch.start(); try (Operation operation = new Operation(() -> "Outcall to " + request.uri().getHost() + request.uri() @@ -475,11 +600,11 @@ private void performRequest() throws IOException { oAuthTokenRefresher.run(); oAuthTokenRefresher = null; - requestBuilder.setHeader(HEADER_AUTHORIZATION, oAuthAccessToken.get()); + requestBuilder.setHeader(HttpHeaders.AUTHORIZATION, oAuthAccessToken.get()); request = requestBuilder.build(); performRequest(); } - } catch (InterruptedException exception) { + } catch (InterruptedException _) { Thread.currentThread().interrupt(); throw new IOException("Thread was interrupted!"); } catch (HttpTimeoutException | ConnectException | SocketTimeoutException exception) { @@ -512,9 +637,13 @@ private void checkTimeoutBlacklist() throws IOException { if (Boolean.FALSE.equals(blacklistedHostInformation.getSecond())) { blacklistedHostInformation.setSecond(true); throw new IOException(Strings.apply( - "Connections with blacklist identifier %s are currently rejected due to connectivity issues.", - blacklistId)); + "Connections with blacklist identifier %s get rejected until %s due to connectivity issues.", + blacklistId, + LocalDateTime.ofEpochSecond(timeout / 1000, 0, ZoneOffset.UTC))); } + throw new IOExceptionSkipLog(Strings.apply( + "Connections with blacklist identifier %s are currently rejected due to connectivity issues.", + blacklistId)); } else { timeoutBlacklist.remove(blacklistId); } @@ -599,7 +728,7 @@ public Optional getHeaderFieldDate(String name) { * @return an Optional containing the file name given by the header, or {@link Optional#empty()} if no file name is given */ public Optional parseFileNameFromContentDisposition() { - return ContentDispositionParser.parseFileName(getHeaderField(HEADER_CONTENT_DISPOSITION)); + return ContentDispositionParser.parseFileName(getHeaderField(HttpHeaders.CONTENT_DISPOSITION)); } /** @@ -695,6 +824,8 @@ public static Average getTimeToFirstByte() { /** * Enables OAuth token support for this outcall. + *

+ * Note that this cannot be used alongside {@link #withBearerToken(String)} as these overwrite each other. * * @param accessTokenSupplier supplies the access token to be used for OAuth. It must contain the proper * authorization type, e.g. 'Bearer ' @@ -702,6 +833,7 @@ public static Average getTimeToFirstByte() { * perform the refresh of the token using OAuth refresh token flow. The token * must contain the proper authorization type, e.g. 'Bearer <token>' * @return the current instance for fluent method calls + * @see #PREFIX_BEARER */ public Outcall withOAuth(Supplier accessTokenSupplier, Runnable tokenRefresher) { this.oAuthAccessToken = accessTokenSupplier; @@ -709,6 +841,21 @@ public Outcall withOAuth(Supplier accessTokenSupplier, Runnable tokenRef return this; } + /** + * Adds an externally computed or supplied bearer token, like a JWT. + *

+ * Note that this cannot be used alongside {@link #withOAuth(Supplier, Runnable)} as these overwrite each other. + *

+ * Also note that the "Bearer " prefix is applied automatically. + * + * @param bearerToken the token to add as Authorization header. + * @return the current instance for fluent method calls + */ + public Outcall withBearerToken(String bearerToken) { + this.oAuthAccessToken = () -> PREFIX_BEARER + bearerToken; + return this; + } + private void installRedirectRequest(URI redirectedURI) { HttpRequest.Builder redirectBuilder = requestBuilder.copy(); redirectBuilder.uri(redirectedURI); @@ -771,9 +918,9 @@ private boolean shouldSwitchToGet(int statusCode, String originalMethod) { }; } - private URI makeRedirectedURI(HttpHeaders headers) throws IOException { + private URI makeRedirectedURI(java.net.http.HttpHeaders headers) throws IOException { String locationHeader = - headers.firstValue(HEADER_LOCATION).orElseThrow(() -> new ConnectException("Invalid redirection")); + headers.firstValue(HttpHeaders.LOCATION).orElseThrow(() -> new ConnectException("Invalid redirection")); return request.uri().resolve(makeURIFromLocation(locationHeader)); } @@ -808,6 +955,55 @@ private boolean canRedirect(URI redirectedURI) { }; } + private static final int DEFAULT_ATTEMPTS = 3; + private static final int DEFAULT_RETRY_DELAY_MILLIS = 250; + + /** + * Executes the given task and returns its result while retrying the operation in case of an {@link IOException}. + *

+ * Executes the task and retries (up to two additional attempts) in case of an IO error like a connection + * exception. Note that the task should be idempotent as it might be executed several times. If a non IO error + * occurs of the retries run out, the appropriate exception is re-thrown + *

+ * Note that this applies a simple backoff strategy to wait a show amount of time before a retry. + * + * @param task the task to execute + * @param the type returned by the task + * @return the return value generated by the task + * @throws Exception any exception thrown by the task + */ + public static T ioRetry(Producer task) throws Exception { + int attempts = DEFAULT_ATTEMPTS; + while (true) { + attempts--; + try { + return task.create(); + } catch (Exception exception) { + if (attempts == 0 || (!(exception instanceof IOException) + && !(exception.getCause() instanceof IOException))) { + throw exception; + } + Wait.randomMillis((DEFAULT_ATTEMPTS - attempts) * DEFAULT_RETRY_DELAY_MILLIS, + (1 + DEFAULT_ATTEMPTS - attempts) * DEFAULT_RETRY_DELAY_MILLIS); + } + } + } + + /** + * Executes the given unit of work and retries in case of an IO error. + *

+ * For details, see {@link #ioRetry(Producer)}. + * + * @param unit the unit of work to execute. This should be idempotent as it might be invoked several times + * @throws Exception any exception thrown by the unit of work + */ + public static void ioRetry(UnitOfWork unit) throws Exception { + ioRetry(() -> { + unit.execute(); + return true; + }); + } + public static Duration getDefaultConnectTimeout() { return defaultConnectTimeout; } diff --git a/src/main/java/sirius/kernel/commons/StringCleanup.java b/src/main/java/sirius/kernel/commons/StringCleanup.java index 3995d52b..d5639246 100644 --- a/src/main/java/sirius/kernel/commons/StringCleanup.java +++ b/src/main/java/sirius/kernel/commons/StringCleanup.java @@ -38,9 +38,9 @@ public class StringCleanup { private static final Pattern PATTERN_NON_ALPHA_NUMERIC = Pattern.compile("([^\\p{L}\\d])"); private static final Pattern PATTERN_NON_LETTER = Pattern.compile("\\P{L}"); private static final Pattern PATTERN_NON_DIGIT = Pattern.compile("\\D"); - private static final Pattern PATTERN_DECIMAL_ENTITY = Pattern.compile("&(\\d+);"); - private static final Pattern PATTERN_HEX_ENTITY = Pattern.compile("&x0*([0-9a-fA-F]+);"); - private static final Pattern PATTERN_BR_TAG = Pattern.compile("<(br|BR) */? *>"); + private static final Pattern PATTERN_DECIMAL_ENTITY = Pattern.compile("&#(\\d+);"); + private static final Pattern PATTERN_HEX_ENTITY = Pattern.compile("&#x([0-9a-fA-F]+);"); + private static final Pattern PATTERN_BR_TAG = Pattern.compile("<(br|BR) *+/? *+>"); private static final Pattern PATTERN_LILI_TAG = Pattern.compile("<(/li|/LI)>\\r?\\n?\\t?<(li|LI)>"); private static final Pattern PATTERN_LI_TAG = Pattern.compile("<(/?li|/?LI)>"); private static final Pattern PATTERN_PP_TAG = Pattern.compile("<(/p|/P)>\\r?\\n?\\t?<([pP])>"); diff --git a/src/main/java/sirius/kernel/commons/Strings.java b/src/main/java/sirius/kernel/commons/Strings.java index efa17b90..e0908d3a 100644 --- a/src/main/java/sirius/kernel/commons/Strings.java +++ b/src/main/java/sirius/kernel/commons/Strings.java @@ -12,18 +12,12 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.net.URI; -import java.net.URL; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.security.SecureRandom; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.function.Predicate; import java.util.function.UnaryOperator; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -139,6 +133,25 @@ public static boolean areAllEmpty(Object first, Object second, Object... further return true; } + /** + * Checks if the string representations of the given objects are not "" or null. + * + * @param first the first object which is to be checked + * @param second the second object which is to be checked + * @param further additional objects to be checked + * @return true if all strings are not null or "", false if one of them is empty + * @see #isFilled(Object) + */ + public static boolean areAllFilled(Object first, Object second, Object... further) { + if (Strings.isEmpty(first) || Strings.isEmpty(second)) { + return false; + } + if (further != null) { + return Stream.of(further).allMatch(Strings::isFilled); + } + return true; + } + /** * Compares the given Strings while treating upper- and lowercase characters as equal. *

@@ -271,10 +284,11 @@ public static String firstFilled(String... values) { * * @param value the string to check * @return true if the given string is an HTTP(S) URL, false otherwise + * @deprecated use {@link Urls#isHttpUrl(String)} instead. */ + @Deprecated(since = "2025-06-11", forRemoval = true) public static boolean isHttpUrl(@Nullable String value) { - return isUrl(value, - url -> "http".equalsIgnoreCase(url.getProtocol()) || "https".equalsIgnoreCase(url.getProtocol())); + return Urls.isHttpUrl(value); } /** @@ -282,21 +296,11 @@ public static boolean isHttpUrl(@Nullable String value) { * * @param value the string to check * @return true if the given string is an HTTPS URL, false otherwise + * @deprecated use {@link Urls#isHttpsUrl(String)} instead. */ + @Deprecated(since = "2025-06-11", forRemoval = true) public static boolean isHttpsUrl(@Nullable String value) { - return isUrl(value, url -> "https".equalsIgnoreCase(url.getProtocol())); - } - - protected static boolean isUrl(@Nullable String value, Predicate checker) { - if (isEmpty(value)) { - return false; - } - - try { - return checker.test(URI.create(value).toURL()); - } catch (Exception exception) { - return false; - } + return Urls.isHttpsUrl(value); } /** @@ -304,13 +308,12 @@ protected static boolean isUrl(@Nullable String value, Predicate checker) { * * @param value the value to be encoded. * @return an url encoded representation of value, using UTF-8 as character encoding. + * @deprecated use {@link Urls#encode(String)} instead. */ @Nullable + @Deprecated(since = "2025-06-11", forRemoval = true) public static String urlEncode(@Nullable String value) { - if (isFilled(value)) { - return URLEncoder.encode(value, StandardCharsets.UTF_8); - } - return value; + return Urls.encode(value); } /** @@ -318,13 +321,12 @@ public static String urlEncode(@Nullable String value) { * * @param value the value to be decoded. * @return an url decoded representation of value, using UTF-8 as character encoding. + * @deprecated use {@link Urls#decode(String)} instead. */ @Nullable + @Deprecated(since = "2025-06-11", forRemoval = true) public static String urlDecode(@Nullable String value) { - if (isFilled(value)) { - return URLDecoder.decode(value, StandardCharsets.UTF_8); - } - return value; + return Urls.decode(value); } /** @@ -716,19 +718,6 @@ public static boolean containsAllowedHtml(@Nullable String content) { return DETECT_ALLOWED_HTML_REGEX.matcher(content).find(); } - /** - * Removes all umlauts and other decorated latin characters. - * - * @param input the term to reduce characters in - * @return the term with all decorated latin characters replaced - * @deprecated Use {@link StringCleanup#reduceCharacters(String)} or - * * {@code Strings.cleanup(input, Cleanup::reduceCharacters)} instead - */ - @Deprecated - public static String reduceCharacters(String input) { - return StringCleanup.reduceCharacters(input); - } - /** * Shortens a string to the given number of chars, * cutting of at most half of the string and adding ... if something has been cut of. diff --git a/src/main/java/sirius/kernel/xml/TrustingSelfSignedTrustManager.java b/src/main/java/sirius/kernel/commons/TrustingSelfSignedTrustManager.java similarity index 97% rename from src/main/java/sirius/kernel/xml/TrustingSelfSignedTrustManager.java rename to src/main/java/sirius/kernel/commons/TrustingSelfSignedTrustManager.java index 55c4b59d..b8d83947 100644 --- a/src/main/java/sirius/kernel/xml/TrustingSelfSignedTrustManager.java +++ b/src/main/java/sirius/kernel/commons/TrustingSelfSignedTrustManager.java @@ -6,7 +6,7 @@ * http://www.scireum.de - info@scireum.de */ -package sirius.kernel.xml; +package sirius.kernel.commons; import javax.net.ssl.X509TrustManager; import java.security.cert.CertificateException; diff --git a/src/main/java/sirius/kernel/commons/URLBuilder.java b/src/main/java/sirius/kernel/commons/URLBuilder.java index 89ac917e..5242aa1f 100644 --- a/src/main/java/sirius/kernel/commons/URLBuilder.java +++ b/src/main/java/sirius/kernel/commons/URLBuilder.java @@ -187,7 +187,7 @@ public URLBuilder addParameter(@Nonnull String key, @Nullable Object value, bool url.append("="); String stringValue = value == null ? "" : value.toString(); if (urlEncode) { - stringValue = Strings.urlEncode(stringValue); + stringValue = Urls.encode(stringValue); } url.append(stringValue); diff --git a/src/main/java/sirius/kernel/commons/Urls.java b/src/main/java/sirius/kernel/commons/Urls.java new file mode 100644 index 00000000..30383b28 --- /dev/null +++ b/src/main/java/sirius/kernel/commons/Urls.java @@ -0,0 +1,103 @@ +/* + * Made with all the love in the world + * by scireum in Remshalden, Germany + * + * Copyright by scireum GmbH + * http://www.scireum.de - info@scireum.de + */ + +package sirius.kernel.commons; + +import javax.annotation.Nullable; +import java.net.URI; +import java.net.URL; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.function.Predicate; + +/** + * Provides various helper methods for working with {@linkplain java.net.URI URIs} and {@linkplain java.net.URL URLs}. + *

+ * This class can and should not be instantiated, as all methods are static. + */ +public class Urls { + + private Urls() { + // prevent instantiation + } + + /** + * Returns if the given string is an HTTP(S) URL. + * + * @param value the string to check + * @return true if the given string is an HTTP(S) URL, false otherwise + */ + public static boolean isHttpUrl(@Nullable String value) { + return isUrl(value, + url -> "http".equalsIgnoreCase(url.getProtocol()) || "https".equalsIgnoreCase(url.getProtocol())); + } + + /** + * Returns if the given string is an HTTPS URL, explicitly excluding unencrypted HTTP URLs. + * + * @param value the string to check + * @return true if the given string is an HTTPS URL, false otherwise + */ + public static boolean isHttpsUrl(@Nullable String value) { + return isUrl(value, url -> "https".equalsIgnoreCase(url.getProtocol())); + } + + private static boolean isUrl(@Nullable String value, Predicate checker) { + if (Strings.isEmpty(value)) { + return false; + } + + try { + return checker.test(URI.create(value).toURL()); + } catch (Exception exception) { + return false; + } + } + + /** + * Returns a URL-encoded representation of the given value with UTF-8 as character encoding. + * + * @param value the value to be encoded. + * @return a URL-encoded representation of value, using UTF-8 as character encoding. + */ + @Nullable + public static String encode(@Nullable String value) { + if (Strings.isFilled(value)) { + return URLEncoder.encode(value, StandardCharsets.UTF_8); + } + return value; + } + + /** + * Returns a URL-decoded representation of the given value with UTF-8 as character encoding. + * + * @param value the value to be decoded. + * @return a URL-decoded representation of value, using UTF-8 as character encoding. + */ + @Nullable + public static String decode(@Nullable String value) { + if (Strings.isFilled(value)) { + return URLDecoder.decode(value, StandardCharsets.UTF_8); + } + return value; + } + + /** + * Tries to fix the given URL by replacing spaces with "%20". + * + * @param url the URL to fix + * @return the fixed URL with spaces replaced by "%20", or the original URL if it was null or empty + */ + public static String quoteSpaces(String url) { + if (Strings.isEmpty(url)) { + return url; + } + return url.replace(" ", "%20"); + } +} diff --git a/src/main/java/sirius/kernel/health/console/TimerCommand.java b/src/main/java/sirius/kernel/health/console/TimerCommand.java index 84bc89b9..e69a2669 100644 --- a/src/main/java/sirius/kernel/health/console/TimerCommand.java +++ b/src/main/java/sirius/kernel/health/console/TimerCommand.java @@ -9,6 +9,7 @@ package sirius.kernel.health.console; import sirius.kernel.Sirius; +import sirius.kernel.commons.Strings; import sirius.kernel.commons.Tuple; import sirius.kernel.commons.Values; import sirius.kernel.di.std.Part; @@ -53,7 +54,7 @@ public void execute(Output output, String... parameters) throws Exception { boolean forced = extractForceParameter(parameterList); String scope = extractScope(parameterList); - if (parameterList.isEmpty()) { + if (Strings.isEmpty(scope)) { output.line(USAGE); } else if (!ACCEPTED_PARAMS.contains(scope.toLowerCase())) { output.apply("'%s' is not an accepted parameter!", scope); diff --git a/src/main/java/sirius/kernel/health/metrics/SystemMetricProvider.java b/src/main/java/sirius/kernel/health/metrics/SystemMetricProvider.java index 4956adc3..11786c5a 100644 --- a/src/main/java/sirius/kernel/health/metrics/SystemMetricProvider.java +++ b/src/main/java/sirius/kernel/health/metrics/SystemMetricProvider.java @@ -17,7 +17,7 @@ import sirius.kernel.health.Log; import sirius.kernel.health.MemoryBasedHealthMonitor; import sirius.kernel.nls.NLS; -import sirius.kernel.xml.Outcall; +import sirius.kernel.commons.Outcall; import sirius.kernel.xml.SOAPClient; import java.lang.management.GarbageCollectorMXBean; diff --git a/src/main/java/sirius/kernel/io/IOExceptionSkipLog.java b/src/main/java/sirius/kernel/io/IOExceptionSkipLog.java new file mode 100644 index 00000000..9a6cda37 --- /dev/null +++ b/src/main/java/sirius/kernel/io/IOExceptionSkipLog.java @@ -0,0 +1,31 @@ +/* + * Made with all the love in the world + * by scireum in Stuttgart, Germany + * + * Copyright by scireum GmbH + * https://www.scireum.de - info@scireum.de + */ + +package sirius.kernel.io; + +import sirius.kernel.commons.Outcall; + +import java.io.IOException; +import java.io.Serial; + +/** + * This class gets used as a special kind of {@linkplain IOException} to mark that a failed IO operation + * should not be logged. + *

+ * Possible, to be skipped log messages are those, that contain no information and only spoil the log file, like + * error from requests that not get executed due to the blacklisting feature of {@linkplain Outcall outcall}. + */ +public class IOExceptionSkipLog extends IOException { + + @Serial + private static final long serialVersionUID = 4787224866678714833L; + + public IOExceptionSkipLog(String message) { + super(message); + } +} diff --git a/src/main/java/sirius/kernel/nls/Formatter.java b/src/main/java/sirius/kernel/nls/Formatter.java index 83eeae5e..e92a8259 100644 --- a/src/main/java/sirius/kernel/nls/Formatter.java +++ b/src/main/java/sirius/kernel/nls/Formatter.java @@ -9,6 +9,7 @@ package sirius.kernel.nls; import sirius.kernel.commons.Strings; +import sirius.kernel.commons.Urls; import java.util.ArrayList; import java.util.List; @@ -233,7 +234,7 @@ public Formatter setDirect(String property, String value) { } if (urlEncode) { - replacement.put(property, Strings.urlEncode(value)); + replacement.put(property, Urls.encode(value)); return this; } diff --git a/src/main/java/sirius/kernel/nls/NLS.java b/src/main/java/sirius/kernel/nls/NLS.java index eedfe8c1..519024e2 100644 --- a/src/main/java/sirius/kernel/nls/NLS.java +++ b/src/main/java/sirius/kernel/nls/NLS.java @@ -460,7 +460,7 @@ public static String safeGet(@Nonnull String property, @Nonnull String fallback) * @return the translated string or the original string if it doesn't start with a $ sign or if no matching * translation was found */ - public static String smartGet(@Nonnull String keyOrString) { + public static String smartGet(String keyOrString) { return smartGet(keyOrString, null); } @@ -474,7 +474,7 @@ public static String smartGet(@Nonnull String keyOrString) { */ @SuppressWarnings("squid:S2583") @Explain("Duplicate null check as predicate is not enforced by the compiler") - public static String smartGet(@Nonnull String keyOrString, @Nullable String language) { + public static String smartGet(String keyOrString, @Nullable String language) { if (keyOrString == null) { return keyOrString; } @@ -487,9 +487,9 @@ public static String smartGet(@Nonnull String keyOrString, @Nullable String lang } /** - * Creates a formatted using the pattern supplied by the translation value for the given property. + * Creates a formatter using the pattern supplied by the translation value for the given property. * - * @param property the property to used to retrieve a translated pattern + * @param property the property to use for retrieving a translated pattern * @return a Formatter initialized with the translated text of the given property */ public static Formatter fmtr(@Nonnull String property) { @@ -497,9 +497,9 @@ public static Formatter fmtr(@Nonnull String property) { } /** - * Creates a formatted using the pattern supplied by the translation value for the given property. + * Creates a formatter using the pattern supplied by the translation value for the given property. * - * @param property the property to used to retrieve a translated pattern + * @param property the property to use for retrieving a translated pattern * @param language a two-letter language code for which the translation is requested * @return a Formatter initialized with the translated text of the given property */ @@ -1454,4 +1454,50 @@ public static String formatSize(long size) { + " " + UNITS[index]; } + + /** + * Quotes the given string using localized primary quotation marks. In English, for instance, a string will be + * wrapped into “…”. + * + * @param value the string to be quoted + * @return the quoted string + */ + public static String quote(String value) { + return NLS.fmtr("NLS.quoted.primary").set("value", value).format(); + } + + /** + * Quotes the given string using localized primary quotation marks. In English, for instance, a string will be + * wrapped into “…”. + * + * @param value the string to be quoted + * @param language a two-letter language code for which quoting is requested + * @return the quoted string + */ + public static String quote(String value, String language) { + return NLS.fmtr("NLS.quoted.primary", language).set("value", value).format(); + } + + /** + * Quotes the given string using localized secondary quotation marks. In English, for instance, a string will be + * wrapped into ‘…’. + * + * @param value the string to be quoted + * @return the quoted string + */ + public static String quoteSecondary(String value) { + return NLS.fmtr("NLS.quoted.secondary").set("value", value).format(); + } + + /** + * Quotes the given string using localized secondary quotation marks. In English, for instance, a string will be + * wrapped into ‘…’. + * + * @param value the string to be quoted + * @param language a two-letter language code for which quoting is requested + * @return the quoted string + */ + public static String quoteSecondary(String value, String language) { + return NLS.fmtr("NLS.quoted.secondary", language).set("value", value).format(); + } } diff --git a/src/main/java/sirius/kernel/settings/ExtendedSettings.java b/src/main/java/sirius/kernel/settings/ExtendedSettings.java index 2183c022..a6e8cce9 100644 --- a/src/main/java/sirius/kernel/settings/ExtendedSettings.java +++ b/src/main/java/sirius/kernel/settings/ExtendedSettings.java @@ -128,9 +128,9 @@ protected Extension getDefault(String type) { } ConfigObject cfg = getConfig().getConfig(type).root(); - ConfigObject def = (ConfigObject) cfg.get(Extension.DEFAULT); if (cfg.containsKey(Extension.DEFAULT)) { + ConfigObject def = (ConfigObject) cfg.get(Extension.DEFAULT); result = new Extension(type, Extension.DEFAULT, def, null); defaultsCache.put(type, result); return result; diff --git a/src/main/java/sirius/kernel/settings/Extension.java b/src/main/java/sirius/kernel/settings/Extension.java index cec402bb..e1267b22 100644 --- a/src/main/java/sirius/kernel/settings/Extension.java +++ b/src/main/java/sirius/kernel/settings/Extension.java @@ -12,6 +12,7 @@ import sirius.kernel.Sirius; import sirius.kernel.async.ExecutionPoint; import sirius.kernel.commons.Context; +import sirius.kernel.commons.Explain; import sirius.kernel.commons.PriorityCollector; import sirius.kernel.commons.Strings; import sirius.kernel.commons.Value; @@ -41,6 +42,8 @@ public class Extension extends Settings implements Comparable { protected final String id; private final ConfigObject configObject; + @SuppressWarnings("java:S2259") + @Explain("There is a check for null in the withFallback method, so this is safe.") protected Extension(String type, String id, ConfigObject configObject, ConfigObject defaultConfig) { super(withFallback(configObject, defaultConfig).toConfig(), false); this.configObject = withFallback(configObject, defaultConfig); @@ -50,6 +53,12 @@ protected Extension(String type, String id, ConfigObject configObject, ConfigObj } private static ConfigObject withFallback(@Nullable ConfigObject config, @Nullable ConfigObject fallback) { + if (config == null && fallback == null) { + throw Exceptions.handle() + .to(LOG) + .withSystemErrorMessage("Cannot create an extension without a config and fallback") + .handle(); + } if (config == null || config.isEmpty()) { return fallback; } else if (fallback == null || fallback.isEmpty()) { diff --git a/src/main/java/sirius/kernel/xml/SOAPClient.java b/src/main/java/sirius/kernel/xml/SOAPClient.java index b8348333..ab09a1a6 100644 --- a/src/main/java/sirius/kernel/xml/SOAPClient.java +++ b/src/main/java/sirius/kernel/xml/SOAPClient.java @@ -9,18 +9,21 @@ package sirius.kernel.xml; import sirius.kernel.async.Operation; +import sirius.kernel.commons.Outcall; import sirius.kernel.commons.Strings; import sirius.kernel.commons.Watch; import sirius.kernel.health.Average; import sirius.kernel.health.Exceptions; import sirius.kernel.health.HandledException; import sirius.kernel.health.Log; +import sirius.kernel.io.IOExceptionSkipLog; import javax.annotation.CheckReturnValue; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.IOException; import java.net.URL; +import java.net.http.HttpClient; import java.time.Duration; import java.util.HashMap; import java.util.LinkedHashMap; @@ -100,6 +103,7 @@ public class SOAPClient { private static final String DEFAULT_CONTENT_TYPE_HEADER = "text/xml"; + private final String clientSelector; private final URL endpoint; private final BasicNamespaceContext namespaceContext = new BasicNamespaceContext(); private List namespaceDefinitions; @@ -124,13 +128,31 @@ public class SOAPClient { * Note that if the actual endpoint depends on the action of the call, use * {@link #withCustomEndpoint(String, URL)}. * - * @param endpoint the default endpoint to talk to + * @param clientSelector the selector used to cache the underlying {@link HttpClient} to facilitate connection pooling + * See {@link Outcall#modifyClient(String)}. + * @param endpoint the default endpoint to talk to */ - public SOAPClient(@Nonnull URL endpoint) { + public SOAPClient(@Nullable String clientSelector, @Nonnull URL endpoint) { + this.clientSelector = clientSelector; this.endpoint = endpoint; this.withNamespace(SOAP_NAMESPACE, SOAP_NAMESPACE_URI); } + /** + * Creates a new client which talks to the given endpoint. + *

+ * Note that if the actual endpoint depends on the action of the call, use + * {@link #withCustomEndpoint(String, URL)}. + * + * @param endpoint the default endpoint to talk to + * @deprecated Use {@link SOAPClient#SOAPClient(String, URL)} instead and provide a proper client selector or + * choose null explicitly. + */ + @Deprecated + public SOAPClient(@Nonnull URL endpoint) { + this(null, endpoint); + } + /** * Returns the average response time across all SOAP calls. * @@ -328,14 +350,14 @@ public StructuredNode call(@Nonnull String action, Duration.ofSeconds(15))) { XMLCall call = XMLCall.to(effectiveEndpoint.toURI(), contentTypeHeader).withFineLogger(LOG, isDebugLogActive); - call.getOutcall().withConfiguredTimeout(SOAP_TIMEOUT_CONFIG_KEY); + call.getOutcall().withConfiguredTimeout(clientSelector, SOAP_TIMEOUT_CONFIG_KEY); call.withNamespaceContext(namespaceContext); if (callEnhancer != null) { callEnhancer.accept(call); } if (trustSelfSignedCertificates) { - call.getOutcall().trustSelfSignedCertificates(); + call.getOutcall().trustSelfSignedCertificates(clientSelector); } String soapAction = actionPrefix + action; @@ -362,6 +384,8 @@ public StructuredNode call(@Nonnull String action, return handleResult(watch, action, effectiveEndpoint, result); } catch (SOAPFaultException | HandledException exception) { throw exception; + } catch (IOExceptionSkipLog exception) { + return handleIOExceptionSkipLog(watch, action, effectiveEndpoint, exception); } catch (Exception exception) { return handleGeneralFault(watch, action, effectiveEndpoint, exception); } @@ -444,7 +468,7 @@ protected StructuredNode handleSOAPFault(Watch watch, * Processes a successfully received SOAP result. *

* By default, this simply invokes the resultTransformer, but it can be overwritten by subclasses for - * additional logging / tracing. This can also modify the result being returned or throw an exception in stead. + * additional logging / tracing. This can also modify the result being returned or throw an exception instead. * * @param watch the watch which record the total duration of the SOAP call * @param action the action which was invoked @@ -483,6 +507,20 @@ protected StructuredNode handleGeneralFault(Watch watch, .handle()); } + private StructuredNode handleIOExceptionSkipLog(Watch watch, + String action, + URL effectiveEndpoint, + IOExceptionSkipLog exception) { + throw exceptionFilter.apply(Exceptions.createHandled() + .to(LOG) + .error(exception) + .withSystemErrorMessage( + "An error occurred when executing '%s' against '%s': %s (%s)", + action, + effectiveEndpoint) + .handle()); + } + /** * Invokes the given action with a plain request object. *

@@ -505,7 +543,12 @@ public CallBuilder call(@Nonnull String action, @Nonnull String parameterNodeNam return new CallBuilder(action, parameterNodeName); } - private class CallBuilder { + /** + * Used to build a simple and straight forward SOAP call. + * + * @see #call(String, String) + */ + public class CallBuilder { private final String action; private final String method; diff --git a/src/main/java/sirius/kernel/xml/XMLCall.java b/src/main/java/sirius/kernel/xml/XMLCall.java index 9350d4df..f749aeef 100644 --- a/src/main/java/sirius/kernel/xml/XMLCall.java +++ b/src/main/java/sirius/kernel/xml/XMLCall.java @@ -8,6 +8,8 @@ package sirius.kernel.xml; +import com.google.common.net.HttpHeaders; +import sirius.kernel.commons.Outcall; import sirius.kernel.commons.Strings; import sirius.kernel.health.Exceptions; import sirius.kernel.health.Log; @@ -41,7 +43,7 @@ public class XMLCall { */ protected XMLCall(URI uri, String contentType) { this.outcall = new Outcall(uri); - this.outcall.setRequestProperty("Content-Type", contentType); + this.outcall.setRequestProperty(HttpHeaders.CONTENT_TYPE, contentType); } /** @@ -181,7 +183,7 @@ public XMLStructuredOutput getOutput() throws IOException { public XMLStructuredInput getInput() throws IOException { // call #getInputStream() before checking for errors, as #getInputStream may log the request/response try (InputStream body = getInputStream()) { - String contentType = outcall.getHeaderField("content-type"); + String contentType = outcall.getHeaderField(HttpHeaders.CONTENT_TYPE); if (!outcall.isErroneous() || (contentType != null && contentType.toLowerCase().contains("xml"))) { return new XMLStructuredInput(body, namespaceContext); } diff --git a/src/main/resources/component-050-kernel.conf b/src/main/resources/component-050-kernel.conf index e51c4935..41aae09b 100644 --- a/src/main/resources/component-050-kernel.conf +++ b/src/main/resources/component-050-kernel.conf @@ -128,7 +128,7 @@ http.outcall { # Contains the default timeouts. "default" will take effect in every call in which no other timeout is specified. # # This timeouts can be expanded by new blocks in dependant projects. For the configuration to take effect, on an - # outcall the sirius.kernel.xml.Outcall.withConfiguredTimeout needs to be called with the defined block + # outcall the sirius.kernel.commons.Outcall.withConfiguredTimeout needs to be called with the defined block # key as parameter. timeouts { diff --git a/src/main/resources/kernel_cs.properties b/src/main/resources/kernel_cs.properties index 2fe5e9dc..f6f2503d 100644 --- a/src/main/resources/kernel_cs.properties +++ b/src/main/resources/kernel_cs.properties @@ -57,7 +57,7 @@ NLS.may = Květen NLS.millisecond = Mmilisekundu NLS.milliseconds = 1 milisekundu | ${count} milisekund NLS.minute = Minuta -NLS.minutes = 1 Minuta | ${count} minut +NLS.minutes = 1 minuta | ${count} minut NLS.monday = Pondělí NLS.month = Měsíc NLS.more = více @@ -80,6 +80,8 @@ NLS.patternFullTime = HH:mm:ss NLS.patternParseTime = H[:mm[:ss]] NLS.patternShortDate = dd.MM.yy NLS.patternTime = HH:mm +NLS.quoted.primary = „${value}“ +NLS.quoted.secondary = ‚${value}‘ NLS.refresh = Aktualizovat NLS.saturday = Sobota NLS.save = Uložit @@ -97,5 +99,5 @@ NLS.tomorrow = zítra NLS.tuesday = Úterý NLS.wednesday = Středa NLS.year = Rok -NLS.yes = Jo +NLS.yes = Ano NLS.yesterday = včera diff --git a/src/main/resources/kernel_de.properties b/src/main/resources/kernel_de.properties index 2e0c5e7a..ff3ca3bf 100644 --- a/src/main/resources/kernel_de.properties +++ b/src/main/resources/kernel_de.properties @@ -80,6 +80,8 @@ NLS.patternFullTime = HH:mm:ss NLS.patternParseTime = H[:mm[:ss]] NLS.patternShortDate = dd.MM.yy NLS.patternTime = HH:mm +NLS.quoted.primary = „${value}“ +NLS.quoted.secondary = ‚${value}‘ NLS.refresh = Aktualisieren NLS.saturday = Samstag NLS.save = Speichern diff --git a/src/main/resources/kernel_en.properties b/src/main/resources/kernel_en.properties index 864c456e..d8710111 100644 --- a/src/main/resources/kernel_en.properties +++ b/src/main/resources/kernel_en.properties @@ -32,7 +32,7 @@ NLS.back = Back NLS.cancel = Cancel NLS.close = Close NLS.day = Day -NLS.days = 1 Day | ${count} Days +NLS.days = 1 day | ${count} days NLS.december = December NLS.decimalSeparator = . NLS.delete = Delete @@ -47,7 +47,7 @@ NLS.filter = Filter NLS.friday = Friday NLS.groupingSeparator = , NLS.hour = Hour -NLS.hours = 1 Hour | ${count} Hours +NLS.hours = 1 hour | ${count} hours NLS.inNHours = in ${hours} hours NLS.january = January NLS.july = July @@ -55,9 +55,9 @@ NLS.june = June NLS.march = March NLS.may = May NLS.millisecond = Millisecond -NLS.milliseconds = 1 Millisecond | ${count} Milliseconds +NLS.milliseconds = 1 millisecond | ${count} milliseconds NLS.minute = Minute -NLS.minutes = 1 Minute | ${count} Minutes +NLS.minutes = 1 minute | ${count} minutes NLS.monday = Monday NLS.month = Month NLS.more = more @@ -80,6 +80,8 @@ NLS.patternFullTime = hh:mm:ss a NLS.patternParseTime = h[:mm[:ss]] a NLS.patternShortDate = MM/dd/yy NLS.patternTime = hh:mm a +NLS.quoted.primary = “${value}” +NLS.quoted.secondary = ‘${value}’ NLS.refresh = Refresh NLS.saturday = Saturday NLS.save = Save @@ -87,7 +89,7 @@ NLS.search = Search NLS.searchResult = Search result NLS.searchkey = Search... NLS.second = Second -NLS.seconds = 1 Second | ${count} Seconds +NLS.seconds = 1 second | ${count} seconds NLS.september = September NLS.someMinutesAgo = some minutes ago NLS.sunday = Sunday diff --git a/src/main/resources/kernel_es.properties b/src/main/resources/kernel_es.properties index 06391095..9879a175 100644 --- a/src/main/resources/kernel_es.properties +++ b/src/main/resources/kernel_es.properties @@ -32,37 +32,37 @@ NLS.back = Volver NLS.cancel = Cancelar NLS.close = Cerrar NLS.day = Día -NLS.days = 1 Día | ${count} Días +NLS.days = 1 día | ${count} días NLS.december = Diciembre NLS.decimalSeparator = , NLS.delete = Borrar NLS.description = Descripción NLS.edit = Editar NLS.errInvalidDate = Introduzca una fecha válida con el formato '${format}'. '${value}' no es válido. -NLS.errInvalidDecimalNumber = Introduzca un número decimal válido. '${valor}' no es válido. -NLS.errInvalidIntegerNumber = Introduzca un número entero válido. '${valor}' no es válido. -NLS.errInvalidTime = Introduzca una hora válida en formato 'HH:MM'. '${valor}' no es válido. +NLS.errInvalidDecimalNumber = Introduzca un número decimal válido. '${value}' no es válido. +NLS.errInvalidIntegerNumber = Introduzca un número entero válido. '${value}' no es válido. +NLS.errInvalidTime = Introduzca una hora válida en formato 'HH:MM'. '${value}' no es válido. NLS.february = Febrero NLS.filter = Filtro NLS.friday = Viernes NLS.groupingSeparator = , NLS.hour = Hora -NLS.hours = 1 Hora | ${count} Horas -NLS.inNHours = en ${horas} horas +NLS.hours = 1 hora | ${count} horas +NLS.inNHours = en ${hours} horas NLS.january = Enero NLS.july = Julio NLS.june = Junio NLS.march = Marzo NLS.may = Mayo NLS.millisecond = Milisegundo -NLS.milliseconds = 1 Milisegundo | ${count} Milisegundos +NLS.milliseconds = 1 milisegundo | ${count} milisegundos NLS.minute = Minuto -NLS.minutes = 1 Minuto | ${count} Minutos +NLS.minutes = 1 minuto | ${count} minutos NLS.monday = Lunes NLS.month = Mes NLS.more = más -NLS.nHoursAgo = hace ${horas} horas -NLS.nMinutesAgo = hace ${minutos} minutos +NLS.nHoursAgo = hace ${hours} horas +NLS.nMinutesAgo = hace ${minutes} minutos NLS.name = Nombre NLS.new = Nuevo NLS.nextHour = en la próxima hora @@ -80,6 +80,8 @@ NLS.patternFullTime = HH:mm:ss NLS.patternParseTime = H[:mm[:ss]] NLS.patternShortDate = dd/MM/yy NLS.patternTime = HH:mm +NLS.quoted.primary = «${value}» +NLS.quoted.secondary = ‘${value}’ NLS.refresh = Actualizar NLS.saturday = Sábado NLS.save = Guardar @@ -87,7 +89,7 @@ NLS.search = Buscar en NLS.searchResult = Resultado de la búsqueda NLS.searchkey = Término de búsqueda... NLS.second = Segundo -NLS.seconds = 1 Segundo | ${count} Segundos +NLS.seconds = 1 segundo | ${count} segundos NLS.september = Septiembre NLS.someMinutesAgo = hace unos minutos NLS.sunday = Domingo diff --git a/src/main/resources/kernel_et.properties b/src/main/resources/kernel_et.properties new file mode 100644 index 00000000..3b923460 --- /dev/null +++ b/src/main/resources/kernel_et.properties @@ -0,0 +1,103 @@ +AdvancedDateParser.calendarWeek = nädal +AdvancedDateParser.day = päev +AdvancedDateParser.days = päev,päevad +AdvancedDateParser.end = lõpp +AdvancedDateParser.errInvalidDay = Määratud kuu jaoks on vale päev (${dayOfMonth}). +AdvancedDateParser.errInvalidHour = Invaliidne tund (${hourOfDay}) ajaformaadis. +AdvancedDateParser.errInvalidMinute = Invaliidne minutit (${minuteOfHour}) ajaformaadis. +AdvancedDateParser.errInvalidMonth = Lubamatu kuu (${monthOfYear}) kuupäeva formaadis. +AdvancedDateParser.errInvalidSecond = Vale sekundid (${secondOfMinute}) ajaformaadis. +AdvancedDateParser.errInvalidToken = Sisend on vale: ${token}. Oodati numbrit. +AdvancedDateParser.errInvalidYear = Lubamatu aasta (${year}) kuupäeva formaadis. +AdvancedDateParser.errUnexpectedKeyword = Sisend on vale: ${token}. Oodatud on üks järgmistest: ${keywords}. +AdvancedDateParser.hours = tund,tundi +AdvancedDateParser.minutes = minut,minutid +AdvancedDateParser.month = kuu +AdvancedDateParser.months = kuu,kuud +AdvancedDateParser.now = nüüd, täna +AdvancedDateParser.of = aadressilt +AdvancedDateParser.seconds = sekund,sekundid +AdvancedDateParser.start = alustada +AdvancedDateParser.tokenizerMessage = Sümbol '${nextToken}' (Märk: ${tokenStart} kuni: ${tokenEnd}) +AdvancedDateParser.week = nädal +AdvancedDateParser.weeks = nädal,nädalad +AdvancedDateParser.year = aasta +AdvancedDateParser.years = aasta,aastat +HandledException.exception = On ilmnenud ootamatu viga: ${errorMessage} (${errorClass}) +HandledException.systemError = Tekkis viga: ${error} +HandledException.unknownError = Üksikasjalik sõnum puudub +NLS.april = Aprill +NLS.august = August +NLS.back = Tagasi +NLS.cancel = Tühista +NLS.close = Sulge +NLS.day = Päev +NLS.days = 1 päev | ${count} päeva +NLS.december = Detsember +NLS.decimalSeparator = , +NLS.delete = Kustuta +NLS.description = Kirjeldus +NLS.edit = Muuda +NLS.errInvalidDate = Palun sisestage kehtiv kuupäev kujul '${format}'. '${value}' on kehtetu. +NLS.errInvalidDecimalNumber = Palun sisestage kehtiv kümnendarv. '${value}' on kehtetu. +NLS.errInvalidIntegerNumber = Palun sisestage kehtiv täisarv. '${value}' on kehtetu. +NLS.errInvalidTime = Palun sisestage kehtiv kellaaeg kujul 'HH:MM'. '${value}' on kehtetu. +NLS.february = Veebruar +NLS.filter = Filter +NLS.friday = Reede +NLS.groupingSeparator = . +NLS.hour = Tund +NLS.hours = 1 tund | ${count} tundi +NLS.inNHours = ${hours} tundides +NLS.january = Jaanuar +NLS.july = Juuli +NLS.june = Juuni +NLS.march = Märts +NLS.may = Mai +NLS.millisecond = Millisekundiline +NLS.milliseconds = 1 millisekund | ${count} millisekundid +NLS.minute = Hetk +NLS.minutes = 1 minut | ${count} minutit +NLS.monday = Esmaspäev +NLS.month = Kuu +NLS.more = rohkem +NLS.nHoursAgo = ${hours} tundi tagasi +NLS.nMinutesAgo = ${minutes} minuti eest +NLS.name = Nimi +NLS.new = Uus +NLS.nextHour = järgmise tunni jooksul +NLS.no = Ei +NLS.november = November +NLS.october = Oktoober +NLS.ok = Ok +NLS.oneHourAgo = üks tund tagasi +NLS.parseError = Tüüpi '${type}' objekte ei saa töödelda. +NLS.patternDate = dd.MM.yyyy +NLS.patternDateTime = dd.MM.yyyy HH:mm:ss +NLS.patternDateTime.withoutSeconds = dd.MM.yyyy HH:mm +NLS.patternDecimal = #,##0.00 +NLS.patternFullTime = HH:mm:ss +NLS.patternParseTime = H[:mm[:ss]] +NLS.patternShortDate = dd.MM.yy +NLS.patternTime = HH:mm +NLS.quoted.primary = "${value}" +NLS.quoted.secondary = '${value}' +NLS.refresh = Värskenda +NLS.saturday = Laupäev +NLS.save = Salvesta +NLS.search = Otsi +NLS.searchResult = Otsingu tulemus +NLS.searchkey = Otsi... +NLS.second = Teine +NLS.seconds = 1 sekund | ${count} sekundit +NLS.september = September +NLS.someMinutesAgo = mõned minutid tagasi +NLS.sunday = Pühapäev +NLS.thursday = Neljapäev +NLS.today = täna +NLS.tomorrow = homme +NLS.tuesday = Teisipäev +NLS.wednesday = Kolmapäev +NLS.year = Aasta +NLS.yes = Jah +NLS.yesterday = eile diff --git a/src/main/resources/kernel_fr.properties b/src/main/resources/kernel_fr.properties index 32f33c08..2bd55423 100644 --- a/src/main/resources/kernel_fr.properties +++ b/src/main/resources/kernel_fr.properties @@ -32,7 +32,7 @@ NLS.back = Retour NLS.cancel = Annuler NLS.close = Fermer NLS.day = Jour -NLS.days = 1 Jour | ${count} jours +NLS.days = 1 jour | ${count} jours NLS.december = Décembre NLS.decimalSeparator = , NLS.delete = Supprimer @@ -62,7 +62,7 @@ NLS.monday = Lundi NLS.month = Mois NLS.more = plus NLS.nHoursAgo = il y a ${hours} heures -NLS.nMinutesAgo = Il y a ${minutes} minutes +NLS.nMinutesAgo = il y a ${minutes} minutes NLS.name = Nom NLS.new = Nouveau NLS.nextHour = dans l'heure qui suit @@ -80,6 +80,8 @@ NLS.patternFullTime = HH:mm:ss NLS.patternParseTime = H[:mm[:ss]] NLS.patternShortDate = dd.MM.yy NLS.patternTime = HH:mm +NLS.quoted.primary = « ${value} » +NLS.quoted.secondary = ‹ ${value} › NLS.refresh = Mise à jour NLS.saturday = Samedi NLS.save = Sauvegarder diff --git a/src/main/resources/kernel_hu.properties b/src/main/resources/kernel_hu.properties new file mode 100644 index 00000000..7a6c7cda --- /dev/null +++ b/src/main/resources/kernel_hu.properties @@ -0,0 +1,103 @@ +AdvancedDateParser.calendarWeek = hét +AdvancedDateParser.day = nap +AdvancedDateParser.days = nap,napok +AdvancedDateParser.end = vége +AdvancedDateParser.errInvalidDay = Érvénytelen nap (${dayOfMonth}) a megadott hónaphoz. +AdvancedDateParser.errInvalidHour = Érvénytelen óra (${hourOfDay}) az idő formátumban. +AdvancedDateParser.errInvalidMinute = Érvénytelen percek (${minuteOfHour}) az idő formátumban. +AdvancedDateParser.errInvalidMonth = Érvénytelen hónap (${monthOfYear}) a dátumformátumban. +AdvancedDateParser.errInvalidSecond = Érvénytelen másodpercek (${secondOfMinute}) az idő formátumban. +AdvancedDateParser.errInvalidToken = Érvénytelen bemenet: ${token}. Számot várt. +AdvancedDateParser.errInvalidYear = Érvénytelen évszám (${year}) a dátumformátumban. +AdvancedDateParser.errUnexpectedKeyword = Érvénytelen bemeneti szimbólum: ${token}. A következők valamelyikét várták: ${keywords}. +AdvancedDateParser.hours = óra,óra +AdvancedDateParser.minutes = perc,perc +AdvancedDateParser.month = hónap +AdvancedDateParser.months = hónap,hónapok +AdvancedDateParser.now = most, ma +AdvancedDateParser.of = a +AdvancedDateParser.seconds = másodperc,másodperc +AdvancedDateParser.start = begin +AdvancedDateParser.tokenizerMessage = Symbol '${nextToken}' (karakter: ${tokenStart} to: ${tokenEnd}) +AdvancedDateParser.week = hét +AdvancedDateParser.weeks = hét,hetek +AdvancedDateParser.year = év +AdvancedDateParser.years = év,év +HandledException.exception = Váratlan hiba történt: ${errorMessage} (${errorClass}) +HandledException.systemError = Hiba történt: ${error} +HandledException.unknownError = Nincs részletes üzenet +NLS.april = Április +NLS.august = Augusztus +NLS.back = Vissza +NLS.cancel = Törölje +NLS.close = Zárja be a +NLS.day = Nap +NLS.days = 1 nap | ${count} napok +NLS.december = December +NLS.decimalSeparator = , +NLS.delete = Törölje a címet +NLS.description = Leírás +NLS.edit = Szerkesztés +NLS.errInvalidDate = Kérjük, adjon meg egy érvényes dátumot '${format}' formátumban. '${value}' érvénytelen. +NLS.errInvalidDecimalNumber = Kérjük, adjon meg egy érvényes tizedes számot. '${value}' érvénytelen. +NLS.errInvalidIntegerNumber = Kérjük, adjon meg egy érvényes egész számot. '${value}' érvénytelen. +NLS.errInvalidTime = Kérjük, adjon meg egy érvényes időpontot a 'HH:MM' formában. '${value}' érvénytelen. +NLS.february = Február +NLS.filter = Szűrő +NLS.friday = Péntek +NLS.groupingSeparator = . +NLS.hour = Óra +NLS.hours = 1 óra | ${count} óra +NLS.inNHours = $-ban{hours} óra +NLS.january = Január +NLS.july = Július +NLS.june = Június +NLS.march = Március +NLS.may = Május +NLS.millisecond = Milliszekundum +NLS.milliseconds = 1 milliszekundum | ${count} milliszekundum +NLS.minute = Perc +NLS.minutes = 1 perc | ${count} perc +NLS.monday = Hétfő +NLS.month = Hónap +NLS.more = további +NLS.nHoursAgo = ${hours} órákkal ezelőtt +NLS.nMinutesAgo = előtt ${minutes} jegyzőkönyv +NLS.name = Név +NLS.new = Új +NLS.nextHour = a következő órában +NLS.no = Nem +NLS.november = November +NLS.october = Október +NLS.ok = Oké +NLS.oneHourAgo = egy órája +NLS.parseError = A '${type}' típusú objektumok nem dolgozhatók fel. +NLS.patternDate = yyyy.MM.dd +NLS.patternDateTime = yyyy.MM.dd HH:mm:ss +NLS.patternDateTime.withoutSeconds = yyyy.MM.dd HH:mm +NLS.patternDecimal = #,##0.00 +NLS.patternFullTime = HH:mm:ss +NLS.patternParseTime = H[:mm[:ss]] +NLS.patternShortDate = yy.MM.dd +NLS.patternTime = HH:mm +NLS.quoted.primary = "${value}" +NLS.quoted.secondary = '${value}' +NLS.refresh = Frissítés +NLS.saturday = Szombat +NLS.save = Mentés +NLS.search = Keresés +NLS.searchResult = Keresés eredménye +NLS.searchkey = Keresés... +NLS.second = Második +NLS.seconds = 1 másodperc | ${count} másodperc +NLS.september = Szeptember +NLS.someMinutesAgo = néhány perccel ezelőtt +NLS.sunday = Vasárnap +NLS.thursday = Csütörtök +NLS.today = ma +NLS.tomorrow = holnap +NLS.tuesday = Kedd +NLS.wednesday = Szerda +NLS.year = Év +NLS.yes = Igen +NLS.yesterday = tegnap diff --git a/src/main/resources/kernel_it.properties b/src/main/resources/kernel_it.properties index f1b8acb5..a3fcedda 100644 --- a/src/main/resources/kernel_it.properties +++ b/src/main/resources/kernel_it.properties @@ -32,7 +32,7 @@ NLS.back = Indietro NLS.cancel = Annulla NLS.close = Vicino NLS.day = Giorno -NLS.days = 1 Giorno | ${count} Giorni +NLS.days = 1 giorno | ${count} giorni NLS.december = Dicembre NLS.decimalSeparator = , NLS.delete = Elimina @@ -47,7 +47,7 @@ NLS.filter = Filtro NLS.friday = Venerdì NLS.groupingSeparator = . NLS.hour = Ora -NLS.hours = 1 Ora | ${count} Ore +NLS.hours = 1 ora | ${count} ore NLS.inNHours = in ${hours} ore NLS.january = Gennaio NLS.july = Luglio @@ -55,9 +55,9 @@ NLS.june = Giugno NLS.march = Marzo NLS.may = Maggio NLS.millisecond = Millisecondo -NLS.milliseconds = 1 Millisecondo | ${count} Millisecondi +NLS.milliseconds = 1 millisecondo | ${count} millisecondi NLS.minute = Minuto -NLS.minutes = 1 Minuto | ${count} Minuti +NLS.minutes = 1 minuto | ${count} minuti NLS.monday = Lunedì NLS.month = Mese NLS.more = più @@ -80,6 +80,8 @@ NLS.patternFullTime = HH:mm:ss NLS.patternParseTime = H[:mm[:ss]] NLS.patternShortDate = dd.MM.yy NLS.patternTime = HH:mm +NLS.quoted.primary = “${value}” +NLS.quoted.secondary = ‘${value}’ NLS.refresh = Aggiornare NLS.saturday = Sabato NLS.save = Salva @@ -87,13 +89,13 @@ NLS.search = Ricerca NLS.searchResult = Risultato della ricerca NLS.searchkey = Ricerca... NLS.second = Secondo -NLS.seconds = 1 Secondo | ${count} Secondi +NLS.seconds = 1 secondo | ${count} secondi NLS.september = Settembre NLS.someMinutesAgo = alcuni minuti fa NLS.sunday = Domenica NLS.thursday = Giovedì -NLS.today = Oggi -NLS.tomorrow = Domani +NLS.today = oggi +NLS.tomorrow = domani NLS.tuesday = Martedì NLS.wednesday = Mercoledì NLS.year = Anno diff --git a/src/main/resources/kernel_lt.properties b/src/main/resources/kernel_lt.properties new file mode 100644 index 00000000..e3717081 --- /dev/null +++ b/src/main/resources/kernel_lt.properties @@ -0,0 +1,103 @@ +AdvancedDateParser.calendarWeek = savaitė +AdvancedDateParser.day = diena +AdvancedDateParser.days = diena, dienos +AdvancedDateParser.end = pabaiga +AdvancedDateParser.errInvalidDay = Nurodyto mėnesio diena (${dayOfMonth}) negalioja. +AdvancedDateParser.errInvalidHour = Laiko formate neteisingos valandos (${hourOfDay}). +AdvancedDateParser.errInvalidMinute = Netinkamas minučių (${minuteOfHour}) laiko formatas. +AdvancedDateParser.errInvalidMonth = Neteisingas mėnesio (${monthOfYear}) datos formatas. +AdvancedDateParser.errInvalidSecond = Laiko formate neteisingos sekundės (${secondOfMinute}). +AdvancedDateParser.errInvalidToken = Netinkamas įvesties kodas: ${token}. Tikėtasi skaičiaus. +AdvancedDateParser.errInvalidYear = Neteisingi metai (${year}) datos formate. +AdvancedDateParser.errUnexpectedKeyword = Netinkamas įvesties kodas: ${token}. Laukiama vieno iš: ${keywords}. +AdvancedDateParser.hours = valanda, valandos +AdvancedDateParser.minutes = minutė, minutės +AdvancedDateParser.month = mėnuo +AdvancedDateParser.months = mėnuo, mėnesiai +AdvancedDateParser.now = dabar, šiandien +AdvancedDateParser.of = iš +AdvancedDateParser.seconds = sekundė, sekundės +AdvancedDateParser.start = pradėti +AdvancedDateParser.tokenizerMessage = Simbolis '${nextToken}' (Simbolis: nuo ${tokenStart} iki: ${tokenEnd}) +AdvancedDateParser.week = savaitė +AdvancedDateParser.weeks = savaitė, savaitės +AdvancedDateParser.year = metai +AdvancedDateParser.years = metai, metai +HandledException.exception = Įvyko netikėta išimtis: (${errorMessage} (${errorClass}) +HandledException.systemError = Įvyko klaida: ${error} +HandledException.unknownError = Išsamaus pranešimo nėra +NLS.april = Balandis +NLS.august = Rugpjūtis +NLS.back = Atgal +NLS.cancel = Atšaukti +NLS.close = Uždaryti +NLS.day = Diena +NLS.days = 1 diena | ${count} dienos +NLS.december = Gruodžio mėn +NLS.decimalSeparator = , +NLS.delete = Ištrinti +NLS.description = Aprašymas +NLS.edit = Redaguoti +NLS.errInvalidDate = Įveskite galiojančią datą, kurios forma yra "${format}". "${value}" negalioja. +NLS.errInvalidDecimalNumber = Įveskite galiojantį dešimtainį skaičių. '${value}' yra negaliojantis. +NLS.errInvalidIntegerNumber = Įveskite galiojantį sveikąjį skaičių. '${value}' negalioja. +NLS.errInvalidTime = Įveskite galiojantį laiką forma "HH:MM". "${value}" negalioja. +NLS.february = Vasaris +NLS.filter = Filtras +NLS.friday = Penktadienis +NLS.groupingSeparator = . +NLS.hour = Valanda +NLS.hours = 1 valanda |{count} valandų +NLS.inNHours = ${hours} valandos +NLS.january = Sausis +NLS.july = Liepa +NLS.june = Birželio mėn +NLS.march = Kovas +NLS.may = Gegužė +NLS.millisecond = Milisekundės +NLS.milliseconds = 1 milisekundė | ${count} milisekundės +NLS.minute = Minutė +NLS.minutes = 1 minutė |{count} minučių +NLS.monday = Pirmadienis +NLS.month = Mėnuo +NLS.more = daugiau +NLS.nHoursAgo = prieš ${hours} valandas +NLS.nMinutesAgo = ${minutes} prieš kelias minutes +NLS.name = Pavadinimas +NLS.new = Naujas +NLS.nextHour = per artimiausią valandą +NLS.no = Ne +NLS.november = Lapkritis +NLS.october = Spalio mėn +NLS.ok = Gerai +NLS.oneHourAgo = prieš vieną valandą +NLS.parseError = Objektų, kurių tipas '${type}', negalima apdoroti. +NLS.patternDate = yyyy.MM.dd +NLS.patternDateTime = yyyy.MM.dd HH:mm:ss +NLS.patternDateTime.withoutSeconds = yyyy.MM.dd HH:mm +NLS.patternDecimal = #,##0.00 +NLS.patternFullTime = HH:mm:ss +NLS.patternParseTime = H[:mm[:ss]] +NLS.patternShortDate = yy.MM.dd +NLS.patternTime = HH:mm +NLS.quoted.primary = "${value}" +NLS.quoted.secondary = '${value}' +NLS.refresh = Atnaujinti +NLS.saturday = Šeštadienis +NLS.save = Išsaugoti +NLS.search = Paieška +NLS.searchResult = Paieškos rezultatas +NLS.searchkey = Paieška... +NLS.second = Antrasis +NLS.seconds = 1 sekundė | ${count} sekundės +NLS.september = Rugsėjis +NLS.someMinutesAgo = prieš kelias minutes +NLS.sunday = Sekmadienis +NLS.thursday = Ketvirtadienis +NLS.today = šiandien +NLS.tomorrow = rytoj +NLS.tuesday = Antradienis +NLS.wednesday = Trečiadienis +NLS.year = Metai +NLS.yes = Taip +NLS.yesterday = vakar diff --git a/src/main/resources/kernel_lv.properties b/src/main/resources/kernel_lv.properties new file mode 100644 index 00000000..c4697596 --- /dev/null +++ b/src/main/resources/kernel_lv.properties @@ -0,0 +1,103 @@ +AdvancedDateParser.calendarWeek = nedēļa +AdvancedDateParser.day = diena +AdvancedDateParser.days = diena, dienas +AdvancedDateParser.end = beigas +AdvancedDateParser.errInvalidDay = Nederīga diena (${dayOfMonth}) norādītajam mēnesim. +AdvancedDateParser.errInvalidHour = Nepareiza stunda (${hourOfDay}) laika formātā. +AdvancedDateParser.errInvalidMinute = Nederīgas minūtes (${minuteOfHour}) laika formātā. +AdvancedDateParser.errInvalidMonth = Nederīgs mēnesis (${monthOfYear}) datuma formātā. +AdvancedDateParser.errInvalidSecond = Nederīgas sekundes (${secondOfMinute}) laika formātā. +AdvancedDateParser.errInvalidToken = Nederīgs ievades vārds: ${token}. Gaidīts skaitlis. +AdvancedDateParser.errInvalidYear = Nederīgs gads (${year}) datuma formātā. +AdvancedDateParser.errUnexpectedKeyword = Nederīgs ievades simbols: ${token}. Tika gaidīts viens no šādiem simboliem: ${keywords}. +AdvancedDateParser.hours = stunda, stundas +AdvancedDateParser.minutes = minūte,minūtes +AdvancedDateParser.month = mēnesis +AdvancedDateParser.months = mēnesis,mēneši +AdvancedDateParser.now = tagad, šodien +AdvancedDateParser.of = no +AdvancedDateParser.seconds = sekundes,sekundes +AdvancedDateParser.start = sākt +AdvancedDateParser.tokenizerMessage = Simbols '${nextToken}' (Simbols: ${tokenStart} līdz: ${tokenEnd}) +AdvancedDateParser.week = nedēļa +AdvancedDateParser.weeks = nedēļu,nedēļas +AdvancedDateParser.year = gads +AdvancedDateParser.years = gads, gadi +HandledException.exception = Ir notikusi neparedzēta kļūda: ${errorMessage} (${errorClass}) +HandledException.systemError = Ir notikusi kļūda: ${error} +HandledException.unknownError = Nav pieejams detalizēts ziņojums +NLS.april = Aprīlis +NLS.august = Augusts +NLS.back = Atpakaļ +NLS.cancel = Atcelt +NLS.close = Aizvērt +NLS.day = Diena +NLS.days = 1 diena | ${count} dienas +NLS.december = Decembris +NLS.decimalSeparator = , +NLS.delete = Dzēst +NLS.description = Apraksts +NLS.edit = Rediģēt +NLS.errInvalidDate = Lūdzu, ievadiet derīgu datumu formā '${format}'. '${value}' ir nederīgs. +NLS.errInvalidDecimalNumber = Lūdzu, ievadiet derīgu decimālskaitli. '${value}' nav derīgs. +NLS.errInvalidIntegerNumber = Lūdzu, ievadiet derīgu veselu skaitli. '${value}' nav derīgs. +NLS.errInvalidTime = Lūdzu, ievadiet derīgu laiku formā "HH:MM". '${value}' nav derīgs. +NLS.february = Februāris +NLS.filter = Filtrs +NLS.friday = Piektdiena +NLS.groupingSeparator = . +NLS.hour = Stunda +NLS.hours = 1 stunda | ${count} stundas +NLS.inNHours = ${hours} stundas +NLS.january = Janvāris +NLS.july = Jūlijs +NLS.june = Jūnijs +NLS.march = Marts +NLS.may = Maijs +NLS.millisecond = Milisekundes +NLS.milliseconds = 1 milisekunde | ${count} milisekundes +NLS.minute = Minūtes +NLS.minutes = 1 minūte | ${count} minūtes +NLS.monday = Pirmdiena +NLS.month = Mēnesis +NLS.more = vairāk +NLS.nHoursAgo = pirms ${hours} stundām +NLS.nMinutesAgo = pirms ${minutes} minūtes +NLS.name = Nosaukums +NLS.new = Jauns +NLS.nextHour = nākamajā stundā +NLS.no = Nē +NLS.november = Novembris +NLS.october = Oktobris +NLS.ok = Labi +NLS.oneHourAgo = pirms stundas +NLS.parseError = Objektus ar tipu '${type}' nevar apstrādāt. +NLS.patternDate = yyyy.dd.MM +NLS.patternDateTime = yyyy.dd.MM HH:mm:ss +NLS.patternDateTime.withoutSeconds = yyyy.dd.MM HH:mm +NLS.patternDecimal = #,##0.00 +NLS.patternFullTime = HH:mm:ss +NLS.patternParseTime = H[:mm[:ss]] +NLS.patternShortDate = yy.dd.MM +NLS.patternTime = HH:mm +NLS.quoted.primary = "${value}" +NLS.quoted.secondary = '${value}' +NLS.refresh = Atjaunināt +NLS.saturday = Sestdiena +NLS.save = Saglabāt +NLS.search = Meklēšana +NLS.searchResult = Meklēšanas rezultāts +NLS.searchkey = Meklēt... +NLS.second = Otrais +NLS.seconds = 1 sekunde | ${count} sekundes +NLS.september = Septembris +NLS.someMinutesAgo = pirms dažām minūtēm +NLS.sunday = Svētdiena +NLS.thursday = Ceturtdiena +NLS.today = šodien +NLS.tomorrow = rīt +NLS.tuesday = Otrdiena +NLS.wednesday = Trešdiena +NLS.year = Gads +NLS.yes = Jā +NLS.yesterday = vakar diff --git a/src/main/resources/kernel_nl.properties b/src/main/resources/kernel_nl.properties index 72f484f9..ad57976e 100644 --- a/src/main/resources/kernel_nl.properties +++ b/src/main/resources/kernel_nl.properties @@ -80,6 +80,8 @@ NLS.patternFullTime = HH:mm:ss NLS.patternParseTime = H[:mm[:ss]] NLS.patternShortDate = dd.MM.yy NLS.patternTime = HH:mm +NLS.quoted.primary = „${value}” +NLS.quoted.secondary = ‚${value}’ NLS.refresh = actualiseren NLS.saturday = Zaterdag NLS.save = Opslaan diff --git a/src/main/resources/kernel_pl.properties b/src/main/resources/kernel_pl.properties index d1c5b982..a8cd458c 100644 --- a/src/main/resources/kernel_pl.properties +++ b/src/main/resources/kernel_pl.properties @@ -32,7 +32,7 @@ NLS.back = Z powrotem NLS.cancel = Anuluj NLS.close = Zamknij NLS.day = Dzień -NLS.days = 1 Dzień | ${count} dni +NLS.days = 1 dzień | ${count} dni NLS.december = Grudzień NLS.decimalSeparator = , NLS.delete = Skreślić @@ -55,7 +55,7 @@ NLS.june = Czerwiec NLS.march = Marzec NLS.may = Maj NLS.millisecond = Milisekunda -NLS.milliseconds = 1 Milisekunda | ${count} Milisekundy +NLS.milliseconds = 1 milisekunda | ${count} milisekund NLS.minute = Minuta NLS.minutes = 1 minuta | ${count} minuty NLS.monday = Poniedziałek @@ -80,6 +80,8 @@ NLS.patternFullTime = HH:mm:ss NLS.patternParseTime = H[:mm[:ss]] NLS.patternShortDate = dd.MM.yy NLS.patternTime = HH:mm +NLS.quoted.primary = „${value}” +NLS.quoted.secondary = ‘${value}’ NLS.refresh = Aktualizacja NLS.saturday = Sobota NLS.save = Zapisz @@ -92,10 +94,10 @@ NLS.september = Wrzesień NLS.someMinutesAgo = kilka minut temu NLS.sunday = Niedziela NLS.thursday = Czwartek -NLS.today = Dziś -NLS.tomorrow = Jutro +NLS.today = dzisiaj +NLS.tomorrow = jutro NLS.tuesday = Wtorek NLS.wednesday = Środa NLS.year = Rok NLS.yes = Tak -NLS.yesterday = Wczoraj +NLS.yesterday = wczoraj diff --git a/src/main/resources/kernel_sk.properties b/src/main/resources/kernel_sk.properties index 9c21f041..db8ada38 100644 --- a/src/main/resources/kernel_sk.properties +++ b/src/main/resources/kernel_sk.properties @@ -32,7 +32,7 @@ NLS.back = Späť NLS.cancel = Zrušiť NLS.close = Zatvoriť NLS.day = Deň -NLS.days = 1 deň | ${count} Dni +NLS.days = 1 deň | ${count} dní NLS.december = December NLS.decimalSeparator = , NLS.delete = Odstrániť @@ -55,7 +55,7 @@ NLS.june = Jún NLS.march = Marec NLS.may = Máj NLS.millisecond = Milisekundy -NLS.milliseconds = 1 milisekunda | ${count} Milisekundy +NLS.milliseconds = 1 milisekunda | ${count} milisekúnd NLS.minute = Minúta NLS.minutes = 1 minúta | ${count} minút NLS.monday = Pondelok @@ -80,6 +80,8 @@ NLS.patternFullTime = HH:mm:ss NLS.patternParseTime = H[:mm[:ss]] NLS.patternShortDate = dd.MM.yy NLS.patternTime = hh:mm a +NLS.quoted.primary = „${value}“ +NLS.quoted.secondary = ‚${value}‘ NLS.refresh = Obnoviť NLS.saturday = Sobota NLS.save = Uložiť @@ -87,7 +89,7 @@ NLS.search = Vyhľadávanie NLS.searchResult = Výsledok vyhľadávania NLS.searchkey = Vyhľadávanie... NLS.second = Druhý -NLS.seconds = 1 sekunda | ${count} Sekundy +NLS.seconds = 1 sekunda | ${count} sekundy NLS.september = September NLS.someMinutesAgo = pred niekoľkými minútami NLS.sunday = Nedeľa diff --git a/src/test/kotlin/sirius/kernel/commons/AmountConverter.kt b/src/test/kotlin/sirius/kernel/commons/AmountConverter.kt index b8477d54..49656361 100644 --- a/src/test/kotlin/sirius/kernel/commons/AmountConverter.kt +++ b/src/test/kotlin/sirius/kernel/commons/AmountConverter.kt @@ -11,10 +11,10 @@ import org.junit.jupiter.api.extension.ParameterContext import org.junit.jupiter.params.converter.ArgumentConverter class AmountConverter : ArgumentConverter { - override fun convert(source: Any?, context: ParameterContext?): Any? { + override fun convert(source: Any?, context: ParameterContext): Any? { if (source !is String) { return Amount.NOTHING } return Amount.ofMachineString(source) } -} \ No newline at end of file +} diff --git a/src/test/kotlin/sirius/kernel/commons/CSVReaderTest.kt b/src/test/kotlin/sirius/kernel/commons/CSVReaderTest.kt index e9ebaac0..2666f033 100644 --- a/src/test/kotlin/sirius/kernel/commons/CSVReaderTest.kt +++ b/src/test/kotlin/sirius/kernel/commons/CSVReaderTest.kt @@ -69,16 +69,74 @@ class CSVReaderTest { @Test fun `escaping works`() { val data = """ - \"a;\;;\\;x + \"a;\;;\\;x;"a aQuotationMarkWithinQuotationMarks: "" " """.trimIndent() val output = mutableListOf() CSVReader(StringReader(data)).execute { output.add(it) } assertEquals(1, output.size) - assertEquals("\"a", output[0].at("A").rawString) + assertEquals(""""a""", output[0].at("A").rawString) assertEquals(";", output[0].at("B").rawString) - assertEquals("\\", output[0].at("C").rawString) + assertEquals("""\""", output[0].at("C").rawString) assertEquals("x", output[0].at("D").rawString) + assertEquals("""a aQuotationMarkWithinQuotationMarks: " """, output[0].at("E").rawString) + } + + @Test + fun `rfc4180 example 2-5`() { + val data = """ + "aaa","bbb","ccc" + zzz,yyy,xxx + """.trimIndent() + val output = mutableListOf() + val csvReader = CSVReader(StringReader(data)) + csvReader.withSeparator(',').withQuotation('"') + csvReader.execute { output.add(it) } + + assertEquals(2, output.size) + assertEquals("aaa", output[0].at(0).rawString) + assertEquals("bbb", output[0].at(1).rawString) + assertEquals("ccc", output[0].at(2).rawString) + assertEquals("zzz", output[1].at(0).rawString) + assertEquals("yyy", output[1].at(1).rawString) + assertEquals("xxx", output[1].at(2).rawString) + } + + @Test + fun `rfc4180 example 2-6`() { + val data = """ + "aaa","b + bb","ccc" + zzz,yyy,xxx + """.trimIndent() + val output = mutableListOf() + val csvReader = CSVReader(StringReader(data)) + csvReader.withSeparator(',').withQuotation('"') + csvReader.execute { output.add(it) } + + assertEquals(2, output.size) + assertEquals("aaa", output[0].at(0).rawString) + assertEquals("b\nbb", output[0].at(1).rawString) + assertEquals("ccc", output[0].at(2).rawString) + assertEquals("zzz", output[1].at(0).rawString) + assertEquals("yyy", output[1].at(1).rawString) + assertEquals("xxx", output[1].at(2).rawString) + } + + @Test + fun `rfc4180 example 2-7`() { + val data = """ + "aaa","b""bb","ccc" + """.trimIndent() + val output = mutableListOf() + val csvReader = CSVReader(StringReader(data)) + csvReader.withSeparator(',').withQuotation('"') + csvReader.execute { output.add(it) } + + assertEquals(1, output.size) + assertEquals("aaa", output[0].at(0).rawString) + assertEquals("b\"bb", output[0].at(1).rawString) + assertEquals("ccc", output[0].at(2).rawString) } @Test @@ -130,7 +188,7 @@ class CSVReaderTest { val output = mutableListOf() CSVReader(StringReader(data)).withSeparator(':').withQuotation('!').withEscape('&').notIgnoringWhitespaces() - .execute { output.add(it) } + .execute { output.add(it) } assertEquals(1, output.size) assertEquals("a", output[0].at("A").rawString) @@ -167,7 +225,7 @@ class CSVReaderTest { val output = mutableListOf() CSVReader(StringReader(completeData)).withLimit(Limit(250, 100)) - .execute { output.add(it) } + .execute { output.add(it) } assertEquals(50, output.size) } diff --git a/src/test/kotlin/sirius/kernel/commons/CSVWriterTest.kt b/src/test/kotlin/sirius/kernel/commons/CSVWriterTest.kt index e51b18b2..810314e1 100644 --- a/src/test/kotlin/sirius/kernel/commons/CSVWriterTest.kt +++ b/src/test/kotlin/sirius/kernel/commons/CSVWriterTest.kt @@ -102,7 +102,7 @@ class CSVWriterTest { writer.writeArray("a;b\"", "\\", "c") - assertEquals("\"a;b\\\"\";\\\\;c", output.toString()) + assertEquals(""""a;b\"";\\;c""", output.toString()) } } @@ -117,6 +117,77 @@ class CSVWriterTest { } } + @Test + fun `escaping works for escape character and quotation with rfc escape character`() { + StringWriter().use { output -> + val writer = CSVWriter(output) + writer.withEscape('"') + + writer.writeArray("quote and separator: a;b\"", "quote only: c\"") + + assertEquals( + """ + "quote and separator: a;b""${'"'};"quote only: c""${'"'} + """.trimIndent().trim(), output.toString() + ) + } + } + + @Test + fun `rfc4180 example 2-5`() { + StringWriter().use { output -> + val writer = CSVWriter(output) + writer.withEscape('"').withSeparator(',').withForceQuotation(true) + writer.writeArray("aaa", "bbb", "ccc") + writer.withForceQuotation(false) + writer.writeArray("zzz", "yyy", "xxx") + + assertEquals( + """ + "aaa","bbb","ccc" + zzz,yyy,xxx""".trimIndent(), output.toString() + ) + } + } + + @Test + fun `rfc4180 example 2-6`() { + StringWriter().use { output -> + val writer = CSVWriter(output) + writer.withEscape('"').withSeparator(',').withForceQuotation(true) + writer.writeArray("aaa", "b\nbb", "ccc") + writer.withForceQuotation(false) + writer.writeArray("zzz", "yyy", "xxx") + + assertEquals( + """ + "aaa","b + bb","ccc" + zzz,yyy,xxx + """.trimIndent(), output.toString() + ) + } + } + + @Test + fun `rfc4180 example 2-7 + extra line`() { + StringWriter().use { output -> + val writer = CSVWriter(output) + writer.withEscape('"').withSeparator(',').withForceQuotation(true) + writer.writeArray("aaa", "b\"bb", "ccc") + writer.withForceQuotation(false) + writer.writeArray("z\"zz", "yyy", "xxx") + + assertEquals( + """ + "aaa","b""bb","ccc" + "z""zz",yyy,xxx + """.trimIndent(), output.toString() + ) + } + } + + @Test fun `throw an exception if we have to escape quotes, but there is no escape-char`() { StringWriter().use { output -> @@ -126,8 +197,8 @@ class CSVWriterTest { writer.writeArray("\"a\";b") } assertEquals( - "Cannot output a quotation character within a quoted string without an escape character.", - exception.message + "Cannot output a quotation character within a quoted string without an escape character.", + exception.message ) } } @@ -141,8 +212,8 @@ class CSVWriterTest { writer.writeArray("'a;b") } assertEquals( - "Cannot output a column which contains the separator character ';' without an escape or quotation character.", - exception.message + "Cannot output a column which contains the separator character ';' without an escape or quotation character.", + exception.message ) } } @@ -156,8 +227,8 @@ class CSVWriterTest { writer.writeArray("a\nb") } assertEquals( - "Cannot output a column which contains a line break without an quotation character.", - exception.message + "Cannot output a column which contains a line break without an quotation character.", + exception.message ) } } diff --git a/src/test/kotlin/sirius/kernel/xml/ContentDispositionParserTest.kt b/src/test/kotlin/sirius/kernel/commons/ContentDispositionParserTest.kt similarity index 98% rename from src/test/kotlin/sirius/kernel/xml/ContentDispositionParserTest.kt rename to src/test/kotlin/sirius/kernel/commons/ContentDispositionParserTest.kt index 117de8ba..acd01a1f 100644 --- a/src/test/kotlin/sirius/kernel/xml/ContentDispositionParserTest.kt +++ b/src/test/kotlin/sirius/kernel/commons/ContentDispositionParserTest.kt @@ -6,7 +6,7 @@ * http://www.scireum.de - info@scireum.de */ -package sirius.kernel.xml +package sirius.kernel.commons import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.CsvSource diff --git a/src/test/kotlin/sirius/kernel/commons/EmojiTest.kt b/src/test/kotlin/sirius/kernel/commons/EmojiTest.kt index b5a484e0..5cb0e464 100644 --- a/src/test/kotlin/sirius/kernel/commons/EmojiTest.kt +++ b/src/test/kotlin/sirius/kernel/commons/EmojiTest.kt @@ -32,6 +32,7 @@ class EmojiTest { assertTrue { Emojis.isEmoji("🔣") } assertTrue { Emojis.isEmoji("🎎") } assertTrue { Emojis.isEmoji("🥺") } + assertTrue { Emojis.isEmoji("🫆") } assertFalse { Emojis.isEmoji("") } assertFalse { Emojis.isEmoji("a") } diff --git a/src/test/kotlin/sirius/kernel/commons/FilesTest.kt b/src/test/kotlin/sirius/kernel/commons/FilesTest.kt index 5294cff3..6f6921bd 100644 --- a/src/test/kotlin/sirius/kernel/commons/FilesTest.kt +++ b/src/test/kotlin/sirius/kernel/commons/FilesTest.kt @@ -86,32 +86,24 @@ internal class FilesTest { } @Test - fun `isConsideredHidden works as expected`(){ - assertEquals(true, Files.isConsideredHidden(".test")); - assertEquals(true, Files.isConsideredHidden(".test.tmp")); - assertEquals(false, Files.isConsideredHidden("test")); - assertEquals(false, Files.isConsideredHidden("test.tmp")); - assertEquals(false,Files.isConsideredHidden(null)); + fun `isConsideredHidden works as expected`() { + assertEquals(true, Files.isConsideredHidden(".test")) + assertEquals(true, Files.isConsideredHidden(".test.tmp")) + assertEquals(false, Files.isConsideredHidden("test")) + assertEquals(false, Files.isConsideredHidden("test.tmp")) + assertEquals(false, Files.isConsideredHidden(null)) } @Test - fun `isConsideredMetadata works as expected`(){ - assertEquals(true, Files.isConsideredMetadata("__MACOSX")); - assertEquals(true, Files.isConsideredMetadata("__MACOSX/test")); - assertEquals(true, Files.isConsideredMetadata("__MACOSX/folder1/test")); - assertEquals(true, Files.isConsideredMetadata(".DS_Store")); - assertEquals(true, Files.isConsideredMetadata("Thumbs.db")); - assertEquals(false, Files.isConsideredMetadata("test.tmp")); - assertEquals(false, Files.isConsideredMetadata("thumbs.db")); - assertEquals(false, Files.isConsideredMetadata(null)); + fun `isConsideredMetadata works as expected`() { + assertEquals(true, Files.isConsideredMetadata("__MACOSX")) + assertEquals(true, Files.isConsideredMetadata("__MACOSX/test")) + assertEquals(true, Files.isConsideredMetadata("__MACOSX/folder1/test")) + assertEquals(true, Files.isConsideredMetadata(".DS_Store")) + assertEquals(true, Files.isConsideredMetadata("Thumbs.db")) + assertEquals(false, Files.isConsideredMetadata("test.tmp")) + assertEquals(false, Files.isConsideredMetadata("thumbs.db")) + assertEquals(false, Files.isConsideredMetadata(null)) } - @Test - fun `streamPath works as expected`() { - assert(Files.streamPath("test1").toList().equals(listOf("test1"))); - assertEquals(listOf("test2", "test1"), Files.streamPath("/test1/test2").toList()); - assertEquals(listOf("test3", ".test2", "test1"), Files.streamPath("/test1/.test2/test3").toList()); - assertEquals(listOf("test4.png", "test3", "test2", "test1"), Files.streamPath("/test1/test2/test3/test4.png").toList()); - assertEquals(listOf(null, "test2", "test1"), Files.streamPath("/test1/test2/").toList()); - } } diff --git a/src/test/kotlin/sirius/kernel/commons/JsonTest.kt b/src/test/kotlin/sirius/kernel/commons/JsonTest.kt index e8bb6a0c..f3af34ca 100644 --- a/src/test/kotlin/sirius/kernel/commons/JsonTest.kt +++ b/src/test/kotlin/sirius/kernel/commons/JsonTest.kt @@ -93,10 +93,10 @@ class JsonTest { val date = LocalDate.now() val time = LocalDateTime.now() val node = Json.createObject() - .put("foo", 123) - .put("bar", "baz") - .putPOJO("date", date) - .putPOJO("time", time) + .put("foo", 123) + .put("bar", "baz") + .putPOJO("date", date) + .putPOJO("time", time) val formattedTime = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(time) val json = Json.write(node) assertEquals("""{"foo":123,"bar":"baz","date":"$date","time":"$formattedTime"}""", json) @@ -130,6 +130,7 @@ class JsonTest { assertEquals(mutableMapOf("foo" to 123, "bar" to "baz"), map) } + @Suppress("DEPRECATION", "removal") @Test fun `entries of array can be streamed properly`() { val array = Json.createArray().add(1).add(2).add(3) @@ -281,7 +282,7 @@ class JsonTest { @Test fun `tryGetArrayAt works with arrays as POJO Nodes`() { val node = Json.createObject() - .set("nested", Json.createObject().putPOJO("foo", listOf(1, 2, 3)).put("bar", 123)) + .set("nested", Json.createObject().putPOJO("foo", listOf(1, 2, 3)).put("bar", 123)) val presentArray: Optional = Json.tryGetArrayAt(node, Json.createPointer("nested/foo")) assertTrue(presentArray.isPresent) @@ -346,7 +347,7 @@ class JsonTest { @Test fun `getValueAmount reads value from number and string`() { val json = - """{"number_1": 123,"number_2": -123,"number_3": 12.3,"number_4": 1.0E+2,"string": "123","null":null}""" + """{"number_1": 123,"number_2": -123,"number_3": 12.3,"number_4": 1.0E+2,"string": "123","null":null}""" val node = Json.parseObject(json) assertEquals(Amount.of(123L), Json.getValueAmount(node, "number_1")) @@ -373,7 +374,7 @@ class JsonTest { @Test fun `tryValueString reads string value from string, number and boolean`() { val json = - """{ "number": 123, "string": "blablabla", "null": null, "bool": true, "obj": {"a": "b"}, "array": [] }""" + """{ "number": 123, "string": "blablabla", "null": null, "bool": true, "obj": {"a": "b"}, "array": [] }""" val node = Json.parseObject(json) assertEquals("123", Json.tryValueString(node, "number").get()) @@ -421,4 +422,28 @@ class JsonTest { assertEquals(inputAmount, parsedAmount) } + @Test + fun `Read Amount from POJONode`() { + val inputAmount = Amount.ofRounded(BigDecimal("1.23456789")) + val objectNode = Json.createObject().putPOJO("amount", inputAmount) + val amountFromPojo = Json.getValueAmount(objectNode, "amount") + assertEquals(inputAmount, amountFromPojo) + } + + @Test + fun `Read LocalDate from POJONode`() { + val inputDate = LocalDate.now() + val objectNode = Json.createObject().putPOJO("localDate", inputDate) + val localDateFromPojo = Json.tryValueDate(objectNode, "localDate").orElse(null) + assertEquals(inputDate, localDateFromPojo) + } + + @Test + fun `Read LocalDateTime from POJONode`() { + val inputDateTime = LocalDateTime.now() + val objectNode = Json.createObject().putPOJO("localDateTime", inputDateTime) + val localDateTimeFromPojo = Json.tryValueDateTime(objectNode, "localDateTime").orElse(null) + assertEquals(inputDateTime, localDateTimeFromPojo) + } + } diff --git a/src/test/kotlin/sirius/kernel/commons/StringsTest.kt b/src/test/kotlin/sirius/kernel/commons/StringsTest.kt index b61a3463..8341f136 100644 --- a/src/test/kotlin/sirius/kernel/commons/StringsTest.kt +++ b/src/test/kotlin/sirius/kernel/commons/StringsTest.kt @@ -9,10 +9,7 @@ package sirius.kernel.commons import org.junit.jupiter.api.Test -import org.junit.jupiter.params.ParameterizedTest -import org.junit.jupiter.params.provider.CsvSource import java.util.* -import java.util.function.UnaryOperator import java.util.regex.Pattern import kotlin.test.* @@ -50,6 +47,21 @@ class StringsTest { assertFalse { Strings.areAllEmpty(null, "", null, "", "Test") } } + @Test + fun areAllFilled() { + assertFalse { Strings.areAllFilled(null, null) } + assertFalse { Strings.areAllFilled("", "") } + assertFalse { Strings.areAllFilled("", null) } + assertFalse { Strings.areAllFilled(null, "") } + assertFalse { Strings.areAllFilled(null, "", null, "") } + assertFalse { Strings.areAllFilled("Test", null) } + assertFalse { Strings.areAllFilled(null, "Test") } + assertTrue { Strings.areAllFilled("Test", "Test") } + assertFalse { Strings.areAllFilled(null, "", null, "", "Test") } + assertFalse { Strings.areAllFilled(null, "", "Test") } + assertTrue { Strings.areAllFilled("Test", "Test", "Test") } + } + @Test fun equalIgnoreCase() { assertTrue { Strings.equalIgnoreCase("A", "a") } @@ -108,56 +120,6 @@ class StringsTest { assertNull(Strings.firstFilled("")) } - @ParameterizedTest - @CsvSource( - "true, https://example.com", - "true, HTTPS://example.com", - "true, http://example.com", - "true, Http://example.com?foo=bar", - "true, http://user:password@server.com/path", - "true, http://user@server.com/path", - "true, https://example.com/my/sample/page", - "true, http://example.com:8080/my/sample/page?user=foo&password=bar", - "false, https:// ;%@@ lol whatever i don't care", - "false, HttpS", - "false, ", - "false, ''", - "false, For testing look at https://example.com" - ) - fun isHttpUrl(isUrl: Boolean, url: String?) { - assertEquals(isUrl, Strings.isHttpUrl(url)) - } - - @ParameterizedTest - @CsvSource( - "true, https://example.com", - "true, HTTPS://example.com", - "false, http://example.com", - "false, Http://example.com?foo=bar", - "false, http://user:password@server.com/path", - "false, http://user@server.com/path", - "true, https://example.com/my/sample/page", - "false, http://example.com:8080/my/sample/page?user=foo&password=bar", - "false, https:// ;%@@ lol whatever i don't care", - "false, HttpS", - "false, ", - "false, ''", - "false, For testing look at https://example.com" - ) - fun isHttpsUrl(isUrl: Boolean, url: String?) { - assertEquals(isUrl, Strings.isHttpsUrl(url)) - } - - @Test - fun urlEncode() { - assertEquals("A%3FTEST%26B%C3%84%C3%96%C3%9C", Strings.urlEncode("A?TEST&BÄÖÜ")) - } - - @Test - fun urlDecode() { - assertEquals("A?TEST&BÄÖÜ", Strings.urlDecode("A%3FTEST%26B%C3%84%C3%96%C3%9C")) - } - @Test fun split() { assertEquals(Tuple.create("A", "B"), Strings.split("A|B", "|")) @@ -231,85 +193,85 @@ class StringsTest { @Test fun cleanup() { assertEquals( - "Hel lo", Strings.cleanup("Hel lo ", UnaryOperator { input: String? -> StringCleanup.trim(input!!) }) + "Hel lo", Strings.cleanup("Hel lo ", { input: String? -> StringCleanup.trim(input!!) }) ) assertEquals( "Hel lo ", Strings.cleanup( "Hel \t \t \r\n lo ", - UnaryOperator { input: String? -> StringCleanup.reduceWhitespace(input!!) }) + { input: String? -> StringCleanup.reduceWhitespace(input!!) }) ) assertEquals( "Hello", Strings.cleanup( "Hel \t \t \n lo ", - UnaryOperator { input: String? -> StringCleanup.removeWhitespace(input!!) }) + { input: String? -> StringCleanup.removeWhitespace(input!!) }) ) assertEquals( "Hello", - Strings.cleanup("Héllo", UnaryOperator { term: String? -> StringCleanup.reduceCharacters(term) }) + Strings.cleanup("Héllo", { term: String? -> StringCleanup.reduceCharacters(term) }) ) assertEquals( "hello", Strings.cleanup( "Héllo", - UnaryOperator { term: String? -> StringCleanup.reduceCharacters(term) }, - UnaryOperator { input: String? -> StringCleanup.lowercase(input!!) }) + { term: String? -> StringCleanup.reduceCharacters(term) }, + { input: String? -> StringCleanup.lowercase(input!!) }) ) assertEquals( "HELLO", Strings.cleanup( "Héllo", - UnaryOperator { term: String? -> StringCleanup.reduceCharacters(term) }, - UnaryOperator { input: String? -> StringCleanup.uppercase(input!!) }) + { term: String? -> StringCleanup.reduceCharacters(term) }, + { input: String? -> StringCleanup.uppercase(input!!) }) ) assertEquals( "Hello", - Strings.cleanup("hello", UnaryOperator { input: String? -> StringCleanup.capitalize(input!!) }) + Strings.cleanup("hello", { input: String? -> StringCleanup.capitalize(input!!) }) ) assertEquals( "HeLLo", - Strings.cleanup("heLLo", UnaryOperator { input: String? -> StringCleanup.capitalize(input!!) }) + Strings.cleanup("heLLo", { input: String? -> StringCleanup.capitalize(input!!) }) ) assertEquals( "-hello-", - Strings.cleanup("-hello-", UnaryOperator { input: String? -> StringCleanup.capitalize(input!!) }) + Strings.cleanup("-hello-", { input: String? -> StringCleanup.capitalize(input!!) }) ) assertEquals( "Hello", - Strings.cleanup("Hel-lo", UnaryOperator { input: String? -> StringCleanup.removePunctuation(input!!) }) + Strings.cleanup("Hel-lo", { input: String? -> StringCleanup.removePunctuation(input!!) }) ) assertEquals( "Hello", Strings.cleanup( "\u0008Hello", - UnaryOperator { input: String? -> StringCleanup.removeControlCharacters(input!!) }) + { input: String? -> StringCleanup.removeControlCharacters(input!!) }) ) assertEquals( "Test", Strings.cleanup( "Test", - UnaryOperator { input: String? -> StringCleanup.replaceXml(input) }, - UnaryOperator { input: String? -> StringCleanup.trim(input!!) }) + { input: String? -> StringCleanup.replaceXml(input) }, + { input: String? -> StringCleanup.trim(input!!) }) ) assertEquals( "Test", Strings.cleanup( "Test
", - UnaryOperator { input: String? -> StringCleanup.replaceXml(input) }, - UnaryOperator { input: String? -> StringCleanup.trim(input!!) }) + { input: String? -> StringCleanup.replaceXml(input) }, + { input: String? -> StringCleanup.trim(input!!) }) ) assertEquals( "Test Blubb", Strings.cleanup( "Test
Blubb
", - UnaryOperator { input: String? -> StringCleanup.replaceXml(input) }, - UnaryOperator { input: String? -> StringCleanup.trim(input!!) }) + { input: String? -> StringCleanup.replaceXml(input) }, + { input: String? -> StringCleanup.trim(input!!) }) ) assertEquals( "foo having < 3 m, with >= 3 m", Strings.cleanup( "foo having < 3 m, with >= 3 m", - UnaryOperator { input: String? -> StringCleanup.replaceXml(input) }, - UnaryOperator { input: String? -> StringCleanup.trim(input!!) }) + { input: String? -> StringCleanup.replaceXml(input) }, + { input: String? -> StringCleanup.trim(input!!) }) ) assertEquals( "<b>Foo <br /> Bar</b>", - Strings.cleanup("Foo
Bar
", UnaryOperator { input: String? -> + Strings.cleanup("Foo
Bar
", { input: String? -> StringCleanup.escapeXml( input ) @@ -317,18 +279,18 @@ class StringsTest { ) assertEquals( "Hello
World", - Strings.cleanup("Hello\nWorld", UnaryOperator { input: String? -> StringCleanup.nlToBr(input) }) + Strings.cleanup("Hello\nWorld", { input: String? -> StringCleanup.nlToBr(input) }) ) assertEquals( "Testalert('Hello World!')", Strings.cleanup( "Test", - UnaryOperator { input: String? -> StringCleanup.removeXml(input!!) }) + { input: String? -> StringCleanup.removeXml(input!!) }) ) assertEquals( " äöüÄÖÜß<>\"'&* * * * * * ", Strings.cleanup( " äöüÄÖÜß<>"'&••‣‣⁃⁃", - UnaryOperator { input: String? -> StringCleanup.decodeHtmlEntities(input!!) }) + { input: String? -> StringCleanup.decodeHtmlEntities(input!!) }) ) } @@ -409,4 +371,59 @@ class StringsTest { assertEquals("1…[…]…9", Strings.truncateMiddle("123456789-123456789-123456789", 1, 1)) assertEquals("12345678901234", Strings.truncateMiddle("12345678901234", 6, 6)) } + + @Test + fun htmlToPlain() { + assertEquals("", Strings.cleanup("", StringCleanup::htmlToPlainText)) + + assertEquals( + """ + something + and another thing + """.trimIndent(), + Strings.cleanup( + "

something
and another thing

", + StringCleanup::htmlToPlainText, + StringCleanup::trim + ) + ) + + assertEquals( + """ + first + + second + """.trimIndent(), + Strings.cleanup("

first

second

", StringCleanup::htmlToPlainText, StringCleanup::trim) + ) + + assertEquals( + """ + after backtracking fix + """.trimIndent(), + Strings.cleanup( + "after backtracking fix
", + StringCleanup::htmlToPlainText, + StringCleanup::trim + ) + ) + + assertEquals( + "The euro sign as hex entity is: €", + Strings.cleanup( + "

The euro sign as hex entity is: €

", + StringCleanup::htmlToPlainText, + StringCleanup::trim + ) + ) + assertEquals( + "The euro sign as decimal entity is: €", + Strings.cleanup( + "

The euro sign as decimal entity is: €

", + StringCleanup::htmlToPlainText, + StringCleanup::trim + ) + ) + + } } diff --git a/src/test/kotlin/sirius/kernel/commons/UrlsTest.kt b/src/test/kotlin/sirius/kernel/commons/UrlsTest.kt new file mode 100644 index 00000000..f81acbbf --- /dev/null +++ b/src/test/kotlin/sirius/kernel/commons/UrlsTest.kt @@ -0,0 +1,86 @@ +/* + * Made with all the love in the world + * by scireum in Remshalden, Germany + * + * Copyright by scireum GmbH + * http://www.scireum.de - info@scireum.de + */ + +package sirius.kernel.commons + +import org.junit.jupiter.api.Test +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.CsvSource +import kotlin.test.assertEquals + +/** + * Tests the [Urls] class. + */ +class UrlsTest { + + @ParameterizedTest + @CsvSource( + "true, https://example.com", + "true, HTTPS://example.com", + "true, http://example.com", + "true, Http://example.com?foo=bar", + "true, http://user:password@server.com/path", + "true, http://user@server.com/path", + "true, https://example.com/my/sample/page", + "true, http://example.com:8080/my/sample/page?user=foo&password=bar", + "false, https:// ;%@@ lol whatever i don't care", + "false, HttpS", + "false, ", + "false, ''", + "false, For testing look at https://example.com" + ) + fun isHttpUrl(isUrl: Boolean, url: String?) { + assertEquals(isUrl, Urls.isHttpUrl(url)) + } + + @ParameterizedTest + @CsvSource( + "true, https://example.com", + "true, HTTPS://example.com", + "false, http://example.com", + "false, Http://example.com?foo=bar", + "false, http://user:password@server.com/path", + "false, http://user@server.com/path", + "true, https://example.com/my/sample/page", + "false, http://example.com:8080/my/sample/page?user=foo&password=bar", + "false, https:// ;%@@ lol whatever i don't care", + "false, HttpS", + "false, ", + "false, ''", + "false, For testing look at https://example.com" + ) + fun isHttpsUrl(isUrl: Boolean, url: String?) { + assertEquals(isUrl, Urls.isHttpsUrl(url)) + } + + @Test + fun encode() { + assertEquals("A%3FTEST%26B%C3%84%C3%96%C3%9C", Urls.encode("A?TEST&BÄÖÜ")) + } + + @Test + fun decode() { + assertEquals("A?TEST&BÄÖÜ", Urls.decode("A%3FTEST%26B%C3%84%C3%96%C3%9C")) + } + + @Test + fun quoteSpaces() { + assertEquals("https://example.com/hello%20world", Urls.quoteSpaces("https://example.com/hello world")) + assertEquals("https://example.com/hello%20world", Urls.quoteSpaces("https://example.com/hello%20world")) + assertEquals("https://example.com/hello+world", Urls.quoteSpaces("https://example.com/hello+world")) + assertEquals( + "https://example.com/helloworld?test=a%20b", Urls.quoteSpaces("https://example.com/helloworld?test=a b") + ) + assertEquals( + "https://example.com/helloworld?test=a%20b", Urls.quoteSpaces("https://example.com/helloworld?test=a%20b") + ) + assertEquals( + "https://example.com/helloworld?test=a+b", Urls.quoteSpaces("https://example.com/helloworld?test=a+b") + ) + } +} diff --git a/src/test/kotlin/sirius/kernel/nls/NLStest.kt b/src/test/kotlin/sirius/kernel/nls/NLStest.kt index 864a927f..b3ade35e 100644 --- a/src/test/kotlin/sirius/kernel/nls/NLStest.kt +++ b/src/test/kotlin/sirius/kernel/nls/NLStest.kt @@ -466,4 +466,21 @@ class NLSTest { assertEquals("", NLS.convertDuration(Duration.ofSeconds(33L), false, false)) } + @Test + fun `quoting works in German`() { + val resultPrimary = NLS.quote("test", "de") + assertEquals("„test“", resultPrimary) + + val resultSecondary = NLS.quoteSecondary("test", "de") + assertEquals("‚test‘", resultSecondary) + } + + @Test + fun `quoting works in English`() { + val resultPrimary = NLS.quote("test", "en") + assertEquals("“test”", resultPrimary) + + val resultSecondary = NLS.quoteSecondary("test", "en") + assertEquals("‘test’", resultSecondary) + } } diff --git a/src/test/kotlin/sirius/kernel/xml/SoapClientTest.kt b/src/test/kotlin/sirius/kernel/xml/SoapClientTest.kt new file mode 100644 index 00000000..d4aaab22 --- /dev/null +++ b/src/test/kotlin/sirius/kernel/xml/SoapClientTest.kt @@ -0,0 +1,51 @@ +/* + * Made with all the love in the world + * by scireum in Remshalden, Germany + * + * Copyright by scireum GmbH + * http://www.scireum.de - info@scireum.de + */ + +package sirius.kernel.xml + +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows +import org.junit.jupiter.api.extension.ExtendWith +import sirius.kernel.SiriusExtension +import sirius.kernel.health.HandledException +import sirius.kernel.health.LogHelper +import java.net.URI +import java.util.logging.Level +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +/** + * Tests the [SOAPClient] class. + */ +@ExtendWith(SiriusExtension::class) +internal class SOAPClientTest { + + @Test + fun `Unsuccessful SOAPClient calls getting blacklisted get logged only once`() { + // Use a non-existing endpoint to provoke an exception + val soapClient = SOAPClient(null, URI.create("http://localhost:2345").toURL()) + + // First call with an expected, non blacklist exception + assertThrows { soapClient.call("action") {} } + + // Second call, the first call being blacklisted with a blacklist message being logged + LogHelper.clearMessages() + assertThrows { soapClient.call("action") {} } + assertTrue { hasBlacklistLogMessage() } + + // On follow-up calls, no blacklisting messages must be logged + LogHelper.clearMessages() + assertThrows { soapClient.call("action") {} } + assertFalse { hasBlacklistLogMessage() } + } + + private fun hasBlacklistLogMessage(): Boolean { + return LogHelper.hasMessage(Level.SEVERE, SOAPClient.LOG, ".*blacklist identifier localhost.*") + } + +}