diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
index bd9e8d6a..27d56673 100644
--- a/.github/workflows/android.yml
+++ b/.github/workflows/android.yml
@@ -32,7 +32,7 @@ jobs:
uses: gradle/wrapper-validation-action@v1
- name: Build with Gradle
- run: ./gradlew qa --parallel
+ run: ./gradlew qa
- name: Archive reports for failed build
if: ${{ failure() }}
diff --git a/.github/workflows/diffuse.yml b/.github/workflows/diffuse.yml
index b55a9bd0..99954ce8 100644
--- a/.github/workflows/diffuse.yml
+++ b/.github/workflows/diffuse.yml
@@ -38,7 +38,7 @@ jobs:
- name: Build with Gradle
if: steps.cache-base.outputs.cache-hit != 'true'
- run: ./gradlew assemblePlayProdRelease --parallel
+ run: ./gradlew assemblePlayProdRelease
- name: Copy base apk
if: steps.cache-base.outputs.cache-hit != 'true'
@@ -50,7 +50,7 @@ jobs:
clean: 'false'
- name: Build with Gradle
- run: ./gradlew assemblePlayProdRelease --parallel
+ run: ./gradlew assemblePlayProdRelease
- name: Copy PR apk
run: mv app/build/outputs/apk/playProd/release/*arm64*.apk diffuse-new.apk
diff --git a/README.md b/README.md
index de13d6eb..9a405536 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Signal Android
+# Signal Android
Signal is a simple, powerful, and secure messenger.
@@ -54,7 +54,7 @@ The form and manner of this distribution makes it eligible for export under the
## License
-Copyright 2013-2023 Signal
+Copyright 2013-2024 Signal Messenger, LLC
Licensed under the GNU AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html
@@ -70,7 +70,7 @@ Signal – New Base-line
a. thoughtcrime tm
b. securesms archive
3. Replace all old package mentions vie “replace all” function (Ctrl +Shift + R)
- a. org.thoughtcrime.securesms -> org.tm.archive
+ a. org.tm.archive -> org.tm.archive
4. Add our archiver SDK and Common library to new folder “libs” and compile them via dependencies.
5. Add archiver,intune,selfauthentication folders with all archiving class with util etc. (Take them from src->main->java->org)
6. Search “ArchiveLogger.Companion.sendArchiveLog” in the current project and add all those mentions to the updated project.
diff --git a/apntool/.gitignore b/apntool/.gitignore
deleted file mode 100644
index b174b758..00000000
--- a/apntool/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.db
-*.db.gz
diff --git a/apntool/apnlists/cyanogenmod.xml b/apntool/apnlists/cyanogenmod.xml
deleted file mode 100644
index 2b7719b7..00000000
--- a/apntool/apnlists/cyanogenmod.xml
+++ /dev/null
@@ -1,1884 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apntool/apnlists/hangouts.xml b/apntool/apnlists/hangouts.xml
deleted file mode 100644
index 2d3ce5b6..00000000
--- a/apntool/apnlists/hangouts.xml
+++ /dev/null
@@ -1,2217 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/apntool/apntool.py b/apntool/apntool.py
deleted file mode 100644
index a687d4bf..00000000
--- a/apntool/apntool.py
+++ /dev/null
@@ -1,106 +0,0 @@
-import sys
-import re
-import argparse
-import sqlite3
-import gzip
-from progressbar import ProgressBar, Counter, Timer
-from lxml import etree
-
-parser = argparse.ArgumentParser(prog='apntool', description="""Process Android's apn xml files and drop them into an
- easily queryable SQLite db. Tested up to version 9 of
- their APN file.""")
-parser.add_argument('-v', '--version', action='version', version='%(prog)s v1.1')
-parser.add_argument('-i', '--input', help='the xml file to parse', default='apns.xml', required=False)
-parser.add_argument('-o', '--output', help='the sqlite db output file', default='apns.db', required=False)
-parser.add_argument('--quiet', help='do not show progress or verbose instructions', action='store_true', required=False)
-parser.add_argument('--no-gzip', help="do not gzip after creation", action='store_true', required=False)
-args = parser.parse_args()
-
-
-def normalized(target):
- o2_typo = re.compile(r"02\.co\.uk")
- port_typo = re.compile(r"(\d+\.\d+\.\d+\.\d+)\.(\d+)")
- leading_zeros = re.compile(r"(/|\.|^)0+(\d+)")
- subbed = o2_typo.sub(r'o2.co.uk', target)
- subbed = port_typo.sub(r'\1:\2', subbed)
- subbed = leading_zeros.sub(r'\1\2', subbed)
- return subbed
-
-try:
- connection = sqlite3.connect(args.output)
- cursor = connection.cursor()
- cursor.execute('SELECT SQLITE_VERSION()')
- version = cursor.fetchone()
- if not args.quiet:
- print("SQLite version: %s" % version)
- print("Opening %s" % args.input)
-
- cursor.execute("PRAGMA legacy_file_format=ON")
- cursor.execute("PRAGMA journal_mode=DELETE")
- cursor.execute("PRAGMA page_size=32768")
- cursor.execute("VACUUM")
- cursor.execute("DROP TABLE IF EXISTS apns")
- cursor.execute("""CREATE TABLE apns(_id INTEGER PRIMARY KEY, mccmnc TEXT, mcc TEXT, mnc TEXT, carrier TEXT,
- apn TEXT, mmsc TEXT, port INTEGER, type TEXT, protocol TEXT, bearer TEXT, roaming_protocol TEXT,
- carrier_enabled INTEGER, mmsproxy TEXT, mmsport INTEGER, proxy TEXT, mvno_match_data TEXT,
- mvno_type TEXT, authtype INTEGER, user TEXT, password TEXT, server TEXT)""")
-
- apns = etree.parse(args.input)
- root = apns.getroot()
- pbar = None
- if not args.quiet:
- pbar = ProgressBar(widgets=['Processed: ', Counter(), ' apns (', Timer(), ')'], maxval=len(list(root))).start()
-
- count = 0
- for apn in root.iter("apn"):
- if apn.get("mmsc") is None:
- continue
- sqlvars = ["?" for x in apn.attrib.keys()] + ["?"]
- mccmnc = "%s%s" % (apn.get("mcc"), apn.get("mnc"))
- normalized_mmsc = normalized(apn.get("mmsc"))
- if normalized_mmsc != apn.get("mmsc"):
- print("normalize MMSC: %s => %s" % (apn.get("mmsc"), normalized_mmsc))
- apn.set("mmsc", normalized_mmsc)
-
- if not apn.get("mmsproxy") is None:
- normalized_mmsproxy = normalized(apn.get("mmsproxy"))
- if normalized_mmsproxy != apn.get("mmsproxy"):
- print("normalize proxy: %s => %s" % (apn.get("mmsproxy"), normalized_mmsproxy))
- apn.set("mmsproxy", normalized_mmsproxy)
-
- values = [apn.get(attrib) for attrib in apn.attrib.keys()] + [mccmnc]
- keys = apn.attrib.keys() + ["mccmnc"]
-
- cursor.execute("SELECT 1 FROM apns WHERE mccmnc = ? AND apn = ?", [mccmnc, apn.get("apn")])
- if cursor.fetchone() is None:
- statement = "INSERT INTO apns (%s) VALUES (%s)" % (", ".join(keys), ", ".join(sqlvars))
- cursor.execute(statement, values)
-
- count += 1
- if not args.quiet:
- pbar.update(count)
-
- if not args.quiet:
- pbar.finish()
- connection.commit()
- print("Successfully written to %s" % args.output)
-
- if not args.no_gzip:
- gzipped_file = "%s.gz" % (args.output,)
- with open(args.output, 'rb') as orig:
- with gzip.open(gzipped_file, 'wb') as gzipped:
- gzipped.writelines(orig)
- print("Successfully gzipped to %s" % gzipped_file)
-
- if not args.quiet:
- print("\nTo include this in the distribution, copy it to the project's assets/databases/ directory.")
- print("If you support API 10 or lower, you must use the gzipped version to avoid corruption.")
-
-except sqlite3.Error as e:
- if connection:
- connection.rollback()
- print("Error: %s" % e.args[0])
- sys.exit(1)
-finally:
- if connection:
- connection.close()
diff --git a/apntool/requirements.txt b/apntool/requirements.txt
deleted file mode 100644
index 4f7aa283..00000000
--- a/apntool/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-argparse>=1.2.1
-lxml>=3.3.3
-progressbar-latest>=2.4
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index ce3c2870..639db23f 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -24,13 +24,13 @@ plugins {
apply(from = "static-ips.gradle.kts")
//**TM_SA**//Start - Change the version code and version name upon the current version
-val canonicalVersionCode = 1338
-val canonicalVersionName = "6.44.3.0"
-val signal_teleMessage_version = "6.44.3.0"//Change this param in Jenkins builder and delete it.
+val canonicalVersionCode = 1412
+val canonicalVersionName = "7.2.4.2"
+val signal_teleMessage_version = "7.2.4.2"//Change this param in Jenkins builder and delete it.
//**TM_SA**//end
-/*val canonicalVersionCode = 1376
-val canonicalVersionName = "6.44.2"*/
+/*val canonicalVersionCode = 1405
+val canonicalVersionName = "7.2.4"*/
val postFixSize = 100
val abiPostFix: Map = mapOf(
@@ -44,29 +44,25 @@ val abiPostFix: Map = mapOf(
val keystores: Map = mapOf("debug" to loadKeystoreProperties("keystore.debug.properties"))
val selectableVariants = listOf(
- "nightlyProdSpinner",
- "nightlyProdPerf",
- "nightlyProdRelease",
- "nightlyStagingRelease",
- "nightlyPnpPerf",
- "nightlyPnpRelease",
- "playProdDebug",
- "playProdSpinner",
- "playProdCanary",
- "playProdPerf",
- "playProdBenchmark",
- "playProdInstrumentation",
- "playProdRelease",
- "playStagingDebug",
- "playStagingCanary",
- "playStagingSpinner",
- "playStagingPerf",
- "playStagingInstrumentation",
- "playPnpDebug",
- "playPnpSpinner",
- "playStagingRelease",
- "websiteProdSpinner",
- "websiteProdRelease"
+ "nightlyProdTmSpinner",
+ "nightlyProdTmPerf",
+ "nightlyProdTmRelease",
+ "nightlyStagingTmRelease",
+ "playProdTmDebug",
+ "playProdTmSpinner",
+ "playProdTmCanary",
+ "playProdTmPerf",
+ "playProdTmBenchmark",
+ "playProdTmInstrumentation",
+ "playProdTmRelease",
+ "playStagingTmDebug",
+ "playStagingTmCanary",
+ "playStagingTmSpinner",
+ "playStagingTmPerf",
+ "playStagingTmInstrumentation",
+ "playStagingTmRelease",
+ "websiteProdTmSpinner",
+ "websiteProdTmRelease"
)
val signalBuildToolsVersion: String by rootProject.extra
@@ -99,14 +95,13 @@ android {
buildToolsVersion = signalBuildToolsVersion
compileSdkVersion = signalCompileSdkVersion
-
+//**TM_SA**//add "ext"..
flavorDimensions += listOf("distribution", "environment", "ext")
useLibrary("org.apache.http.legacy")
testBuildType = "instrumentation"
kotlinOptions {
jvmTarget = signalKotlinJvmTarget
- freeCompilerArgs = listOf("-Xallow-result-return-type")
}
keystores["debug"]?.let { properties ->
@@ -183,8 +178,8 @@ android {
versionCode = canonicalVersionCode * postFixSize
versionName = canonicalVersionName
- minSdkVersion(signalMinSdkVersion)
- targetSdkVersion(signalTargetSdkVersion)
+ minSdk = signalMinSdkVersion
+ targetSdk = signalTargetSdkVersion
multiDexEnabled = true
@@ -222,10 +217,9 @@ android {
buildConfigField("String[]", "SIGNAL_SVR2_IPS", rootProject.extra["svr2_ips"] as String)
buildConfigField("String", "SIGNAL_AGENT", "\"OWA\"")
buildConfigField("String", "CDSI_MRENCLAVE", "\"0f6fd79cdfdaa5b2e6337f534d3baf999318b0c462a7ac1f41297a3e4b424a57\"")
- buildConfigField("String", "SVR2_MRENCLAVE_DEPRECATED", "\"6ee1042f9e20f880326686dd4ba50c25359f01e9f733eeba4382bca001d45094\"")
buildConfigField("String", "SVR2_MRENCLAVE", "\"a6622ad4656e1abcd0bc0ff17c229477747d2ded0495c4ebee7ed35c1789fa97\"")
buildConfigField("String", "UNIDENTIFIED_SENDER_TRUST_ROOT", "\"BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF\"")
- buildConfigField("String", "ZKGROUP_SERVER_PUBLIC_PARAMS", "\"AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXTLfN0/vLt98KDPnxwAQL9j5V1jGOY8jQl6MLxEs56cwXN0dqCnImzVH3TZT1cJ8SW1BRX6qIVxEzjsSGx3yxF3suAilPMqGRp4ffyopjMD1JXiKR2RwLKzizUe5e8XyGOy9fplzhw3jVzTRyUZTRSZKkMLWcQ/gv0E4aONNqs4P+NameAZYOD12qRkxosQQP5uux6B2nRyZ7sAV54DgFyLiRcq1FvwKw2EPQdk4HDoePrO/RNUbyNddnM/mMgj4FW65xCoT1LmjrIjsv/Ggdlx46ueczhMgtBunx1/w8k8V+l8LVZ8gAT6wkU5J+DPQalQguMg12Jzug3q4TbdHiGCmD9EunCwOmsLuLJkz6EcSYXtrlDEnAM+hicw7iergYLLlMXpfTdGxJCWJmP4zqUFeTTmsmhsjGBt7NiEB/9pFFEB3pSbf4iiUukw63Eo8Aqnf4iwob6X1QviCWuc8t0I=\"")
+ buildConfigField("String", "ZKGROUP_SERVER_PUBLIC_PARAMS", "\"AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXTLfN0/vLt98KDPnxwAQL9j5V1jGOY8jQl6MLxEs56cwXN0dqCnImzVH3TZT1cJ8SW1BRX6qIVxEzjsSGx3yxF3suAilPMqGRp4ffyopjMD1JXiKR2RwLKzizUe5e8XyGOy9fplzhw3jVzTRyUZTRSZKkMLWcQ/gv0E4aONNqs4P+NameAZYOD12qRkxosQQP5uux6B2nRyZ7sAV54DgFyLiRcq1FvwKw2EPQdk4HDoePrO/RNUbyNddnM/mMgj4FW65xCoT1LmjrIjsv/Ggdlx46ueczhMgtBunx1/w8k8V+l8LVZ8gAT6wkU5J+DPQalQguMg12Jzug3q4TbdHiGCmD9EunCwOmsLuLJkz6EcSYXtrlDEnAM+hicw7iergYLLlMXpfTdGxJCWJmP4zqUFeTTmsmhsjGBt7NiEB/9pFFEB3pSbf4iiUukw63Eo8Aqnf4iwob6X1QviCWuc8t0LUlT9vALgh/f2DPVOOmR0RW6bgRvc7DSF20V/omg+YBw==\"")
buildConfigField("String", "GENERIC_SERVER_PUBLIC_PARAMS", "\"AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN\"")
buildConfigField("String", "BACKUP_SERVER_PUBLIC_PARAMS", "\"AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O\"")
buildConfigField("String[]", "LANGUAGES", "new String[]{ ${languageList().map { "\"$it\"" }.joinToString(separator = ", ")} }")
@@ -237,6 +231,7 @@ android {
buildConfigField("String", "GIPHY_API_KEY", "\"3o6ZsYH6U6Eri53TXy\"")
buildConfigField("String", "SIGNAL_CAPTCHA_URL", "\"https://signalcaptchas.org/registration/generate.html\"")
buildConfigField("String", "RECAPTCHA_PROOF_URL", "\"https://signalcaptchas.org/challenge/generate.html\"")
+ buildConfigField("org.signal.libsignal.net.Network.Environment", "LIBSIGNAL_NET_ENV", "org.signal.libsignal.net.Network.Environment.PRODUCTION")
buildConfigField("String", "BUILD_DISTRIBUTION_TYPE", "\"unset\"")
buildConfigField("String", "BUILD_ENVIRONMENT_TYPE", "\"unset\"")
@@ -244,6 +239,7 @@ android {
buildConfigField("String", "BADGE_STATIC_ROOT", "\"https://updates2.signal.org/static/badges/\"")
buildConfigField("String", "STRIPE_PUBLISHABLE_KEY", "\"pk_live_6cmGZopuTsV8novGgJJW9JpC00vLIgtQ1D\"")
buildConfigField("boolean", "TRACING_ENABLED", "false")
+ buildConfigField("boolean", "MESSAGE_BACKUP_RESTORE_ENABLED", "false")
ndk {
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
@@ -307,7 +303,7 @@ android {
proguardFiles(*buildTypes["debug"].proguardFiles.toTypedArray())
//**TM_SA**//Start
signingConfig = signingConfigs["release"]
- //**TM_SA**//End
+ //**TM_SA**//End
buildConfigField("String", "BUILD_VARIANT_TYPE", "\"Release\"")
}
@@ -410,29 +406,21 @@ android {
buildConfigField("String", "SIGNAL_CDSI_URL", "\"https://cdsi.staging.signal.org\"")
buildConfigField("String", "SIGNAL_KEY_BACKUP_URL", "\"https://api-staging.backup.signal.org\"")
buildConfigField("String", "SIGNAL_SVR2_URL", "\"https://svr2.staging.signal.org\"")
- buildConfigField("String", "SVR2_MRENCLAVE_DEPRECATED", "\"a8a261420a6bb9b61aa25bf8a79e8bd20d7652531feb3381cbffd446d270be95\"")
buildConfigField("String", "SVR2_MRENCLAVE", "\"acb1973aa0bbbd14b3b4e06f145497d948fd4a98efc500fcce363b3b743ec482\"")
buildConfigField("String", "UNIDENTIFIED_SENDER_TRUST_ROOT", "\"BbqY1DzohE4NUZoVF+L18oUPrK3kILllLEJh2UnPSsEx\"")
- buildConfigField("String", "ZKGROUP_SERVER_PUBLIC_PARAMS", "\"ABSY21VckQcbSXVNCGRYJcfWHiAMZmpTtTELcDmxgdFbtp/bWsSxZdMKzfCp8rvIs8ocCU3B37fT3r4Mi5qAemeGeR2X+/YmOGR5ofui7tD5mDQfstAI9i+4WpMtIe8KC3wU5w3Inq3uNWVmoGtpKndsNfwJrCg0Hd9zmObhypUnSkfYn2ooMOOnBpfdanRtrvetZUayDMSC5iSRcXKpdlukrpzzsCIvEwjwQlJYVPOQPj4V0F4UXXBdHSLK05uoPBCQG8G9rYIGedYsClJXnbrgGYG3eMTG5hnx4X4ntARBgELuMWWUEEfSK0mjXg+/2lPmWcTZWR9nkqgQQP0tbzuiPm74H2wMO4u1Wafe+UwyIlIT9L7KLS19Aw8r4sPrXZSSsOZ6s7M1+rTJN0bI5CKY2PX29y5Ok3jSWufIKcgKOnWoP67d5b2du2ZVJjpjfibNIHbT/cegy/sBLoFwtHogVYUewANUAXIaMPyCLRArsKhfJ5wBtTminG/PAvuBdJ70Z/bXVPf8TVsR292zQ65xwvWTejROW6AZX6aqucUjlENAErBme1YHmOSpU6tr6doJ66dPzVAWIanmO/5mgjNEDeK7DDqQdB1xd03HT2Qs2TxY3kCK8aAb/0iM0HQiXjxZ9HIgYhbtvGEnDKW5ILSUydqH/KBhW4Pb0jZWnqN/YgbWDKeJxnDbYcUob5ZY5Lt5ZCMKuaGUvCJRrCtuugSMaqjowCGRempsDdJEt+cMaalhZ6gczklJB/IbdwENW9KeVFPoFNFzhxWUIS5ML9riVYhAtE6JE5jX0xiHNVIIPthb458cfA8daR0nYfYAUKogQArm0iBezOO+mPk5vCM=\"")
+ buildConfigField("String", "ZKGROUP_SERVER_PUBLIC_PARAMS", "\"ABSY21VckQcbSXVNCGRYJcfWHiAMZmpTtTELcDmxgdFbtp/bWsSxZdMKzfCp8rvIs8ocCU3B37fT3r4Mi5qAemeGeR2X+/YmOGR5ofui7tD5mDQfstAI9i+4WpMtIe8KC3wU5w3Inq3uNWVmoGtpKndsNfwJrCg0Hd9zmObhypUnSkfYn2ooMOOnBpfdanRtrvetZUayDMSC5iSRcXKpdlukrpzzsCIvEwjwQlJYVPOQPj4V0F4UXXBdHSLK05uoPBCQG8G9rYIGedYsClJXnbrgGYG3eMTG5hnx4X4ntARBgELuMWWUEEfSK0mjXg+/2lPmWcTZWR9nkqgQQP0tbzuiPm74H2wMO4u1Wafe+UwyIlIT9L7KLS19Aw8r4sPrXZSSsOZ6s7M1+rTJN0bI5CKY2PX29y5Ok3jSWufIKcgKOnWoP67d5b2du2ZVJjpjfibNIHbT/cegy/sBLoFwtHogVYUewANUAXIaMPyCLRArsKhfJ5wBtTminG/PAvuBdJ70Z/bXVPf8TVsR292zQ65xwvWTejROW6AZX6aqucUjlENAErBme1YHmOSpU6tr6doJ66dPzVAWIanmO/5mgjNEDeK7DDqQdB1xd03HT2Qs2TxY3kCK8aAb/0iM0HQiXjxZ9HIgYhbtvGEnDKW5ILSUydqH/KBhW4Pb0jZWnqN/YgbWDKeJxnDbYcUob5ZY5Lt5ZCMKuaGUvCJRrCtuugSMaqjowCGRempsDdJEt+cMaalhZ6gczklJB/IbdwENW9KeVFPoFNFzhxWUIS5ML9riVYhAtE6JE5jX0xiHNVIIPthb458cfA8daR0nYfYAUKogQArm0iBezOO+mPk5vCNWI+wwkyFCqNDXz/qxl1gAntuCJtSfq9OC3NkdhQlgYQ==\"")
buildConfigField("String", "GENERIC_SERVER_PUBLIC_PARAMS", "\"AHILOIrFPXX9laLbalbA9+L1CXpSbM/bTJXZGZiuyK1JaI6dK5FHHWL6tWxmHKYAZTSYmElmJ5z2A5YcirjO/yfoemE03FItyaf8W1fE4p14hzb5qnrmfXUSiAIVrhaXVwIwSzH6RL/+EO8jFIjJ/YfExfJ8aBl48CKHgu1+A6kWynhttonvWWx6h7924mIzW0Czj2ROuh4LwQyZypex4GuOPW8sgIT21KNZaafgg+KbV7XM1x1tF3XA17B4uGUaDbDw2O+nR1+U5p6qHPzmJ7ggFjSN6Utu+35dS1sS0P9N\"")
buildConfigField("String", "BACKUP_SERVER_PUBLIC_PARAMS", "\"AHYrGb9IfugAAJiPKp+mdXUx+OL9zBolPYHYQz6GI1gWjpEu5me3zVNSvmYY4zWboZHif+HG1sDHSuvwFd0QszSwuSF4X4kRP3fJREdTZ5MCR0n55zUppTwfHRW2S4sdQ0JGz7YDQIJCufYSKh0pGNEHL6hv79Agrdnr4momr3oXdnkpVBIp3HWAQ6IbXQVSG18X36GaicI1vdT0UFmTwU2KTneluC2eyL9c5ff8PcmiS+YcLzh0OKYQXB5ZfQ06d6DiINvDQLy75zcfUOniLAj0lGJiHxGczin/RXisKSR8\"")
buildConfigField("String", "MOBILE_COIN_ENVIRONMENT", "\"testnet\"")
buildConfigField("String", "SIGNAL_CAPTCHA_URL", "\"https://signalcaptchas.org/staging/registration/generate.html\"")
buildConfigField("String", "RECAPTCHA_PROOF_URL", "\"https://signalcaptchas.org/staging/challenge/generate.html\"")
+ buildConfigField("org.signal.libsignal.net.Network.Environment", "LIBSIGNAL_NET_ENV", "org.signal.libsignal.net.Network.Environment.STAGING")
buildConfigField("String", "BUILD_ENVIRONMENT_TYPE", "\"Staging\"")
buildConfigField("String", "STRIPE_PUBLISHABLE_KEY", "\"pk_test_sngOd8FnXNkpce9nPXawKrJD00kIDngZkD\"")
+ buildConfigField("boolean", "MESSAGE_BACKUP_RESTORE_ENABLED", "true")
}
-
- create("pnp") {
- dimension = "environment"
-
- initWith(getByName("staging"))
- applicationIdSuffix = ".pnp"
-
- buildConfigField("String", "BUILD_ENVIRONMENT_TYPE", "\"Pnp\"")
- }
-
+ //**TM_SA**//add create..
create("tm") {
dimension = "ext"
}
@@ -446,9 +434,7 @@ android {
}
applicationVariants.all {
- val variant = this
-
- variant.outputs
+ outputs
.map { it as com.android.build.gradle.internal.api.ApkVariantOutputImpl }
.forEach { output ->
if (output.baseName.contains("nightly")) {
@@ -461,10 +447,10 @@ android {
output.versionNameOverride = tag
output.outputFileName = output.outputFileName.replace(".apk", "-${output.versionNameOverride}.apk")
} else {
- output.outputFileName = output.outputFileName.replace(".apk", "-${variant.versionName}.apk")
+ output.outputFileName = output.outputFileName.replace(".apk", "-$versionName.apk")
}
} else {
- output.outputFileName = output.outputFileName.replace(".apk", "-${variant.versionName}.apk")
+ output.outputFileName = output.outputFileName.replace(".apk", "-$versionName.apk")
val abiName: String = output.getFilter("ABI") ?: "universal"
val postFix: Int = abiPostFix[abiName]!!
@@ -478,25 +464,20 @@ android {
}
}
- android.variantFilter {
- val distribution: String = flavors[0].name
- val environment: String = flavors[1].name
- val buildType: String = buildType.name
- val fullName: String = distribution + environment.capitalize() + buildType.capitalize()
-
- if (!selectableVariants.contains(fullName)) {
- ignore = true
+ androidComponents {
+ beforeVariants { variant ->
+ variant.enable = variant.name in selectableVariants
}
}
- android.buildTypes.forEach {
- val path: String = if (it.name == "release") {
- "$projectDir/src/release/java"
- } else {
- "$projectDir/src/debug/java"
- }
+ val releaseDir = "$projectDir/src/release/java"
+ val debugDir = "$projectDir/src/debug/java"
- sourceSets.findByName(it.name)!!.java.srcDir(path)
+ android.buildTypes.configureEach {
+ val path = if (name == "release") releaseDir else debugDir
+ sourceSets.named(name) {
+ java.srcDir(path)
+ }
}
}
@@ -515,10 +496,8 @@ dependencies {
implementation(project(":donations"))
implementation(project(":contacts"))
implementation(project(":qr"))
- implementation(project(":sms-exporter"))
implementation(project(":sticky-header-grid"))
implementation(project(":photoview"))
- implementation(project(":glide-webp"))
implementation(project(":core-ui"))
implementation(libs.androidx.fragment.ktx)
@@ -538,18 +517,22 @@ dependencies {
implementation(libs.androidx.exifinterface)
implementation(libs.androidx.compose.rxjava3)
implementation(libs.androidx.compose.runtime.livedata)
+ implementation(libs.androidx.activity.compose)
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.multidex)
implementation(libs.androidx.navigation.fragment.ktx)
implementation(libs.androidx.navigation.ui.ktx)
+ implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.lifecycle.viewmodel.ktx)
implementation(libs.androidx.lifecycle.livedata.ktx)
implementation(libs.androidx.lifecycle.process)
implementation(libs.androidx.lifecycle.viewmodel.savedstate)
implementation(libs.androidx.lifecycle.common.java8)
implementation(libs.androidx.lifecycle.reactivestreams.ktx)
+ implementation(libs.androidx.activity.compose)
implementation(libs.androidx.camera.core)
implementation(libs.androidx.camera.camera2)
+ implementation(libs.androidx.camera.extensions)
implementation(libs.androidx.camera.lifecycle)
implementation(libs.androidx.camera.view)
implementation(libs.androidx.concurrent.futures)
@@ -588,10 +571,6 @@ dependencies {
implementation(libs.android.tooltips) {
exclude(group = "com.android.support", module = "appcompat-v7")
}
- implementation(libs.android.smsmms) {
- exclude(group = "com.squareup.okhttp", module = "okhttp")
- exclude(group = "com.squareup.okhttp", module = "okhttp-urlconnection")
- }
implementation(libs.stream)
implementation(libs.lottie)
implementation(libs.signal.android.database.sqlcipher)
@@ -656,7 +635,8 @@ dependencies {
androidTestUtil(testLibs.androidx.test.orchestrator)
//**TM_SA**//Start
- implementation (libs.okhttp3)
+// implementation (libs.okhttp3)
+ implementation(libs.square.okhttp3)
implementation (libs.okhttpUrlconnection)
implementation (libs.loggingInterceptor)
implementation (libs.retrofit2)
@@ -667,13 +647,15 @@ dependencies {
implementation (libs.commonsLang3)
implementation (libs.commonsIo)
implementation (libs.commonsText)
+ implementation (libs.adapterRxjava)
implementation (group = "commons-io", name = "commons-io", version = "2.6") //For test copy file
debugImplementation(files("libs/androidcopysdk-signal-debug.aar"))
releaseImplementation(files("libs/androidcopysdk-signal-release.aar"))
debugImplementation(files("libs/authenticatorsdk-signal-debug.aar"))
releaseImplementation(files("libs/authenticatorsdk-signal-release.aar"))
- implementation(files("libs/common-debug.aar"))
+ debugImplementation(files("libs/common-debug.aar"))
+ releaseImplementation(files("libs/common-release.aar"))
// Include the MAM SDK
implementation("com.arthenica:mobile-ffmpeg-full:4.4.LTS")
implementation (files("MAMSDK/Microsoft.Intune.MAM.SDK.aar"))
@@ -691,7 +673,6 @@ fun assertIsGitRepo() {
fun getLastCommitTimestamp(): String {
assertIsGitRepo()
-
ByteArrayOutputStream().use { os ->
exec {
executable = "git"
@@ -717,7 +698,6 @@ fun getGitHash(): String {
fun getCurrentGitTag(): String? {
assertIsGitRepo()
-
val stdout = ByteArrayOutputStream()
exec {
commandLine = listOf("git", "tag", "--points-at", "HEAD")
diff --git a/app/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp b/app/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp
index ba2500d9..37faba3b 100644
--- a/app/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp
+++ b/app/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp
@@ -6,7 +6,7 @@
#include
#include
//**TM_SA**//Change the package name to be our name.
-jint JNICALL Java_org_tm_archive_util_FileUtils_getFileDescriptorOwner
+jint JNICALL Java_tm_archive_securesms_util_FileUtils_getFileDescriptorOwner
(JNIEnv *env, jclass clazz, jobject fileDescriptor)
{
jclass fdClass = env->GetObjectClass(fileDescriptor);
@@ -31,9 +31,8 @@ jint JNICALL Java_org_tm_archive_util_FileUtils_getFileDescriptorOwner
return stat_struct.st_uid;
}
-
//**TM_SA**//Change the package name to be our name.
-JNIEXPORT jint JNICALL Java_org_tm_archive_util_FileUtils_createMemoryFileDescriptor
+JNIEXPORT jint JNICALL Java_tm_archive_securesms_util_FileUtils_createMemoryFileDescriptor
(JNIEnv *env, jclass clazz, jstring jname)
{
const char *name = env->GetStringUTFChars(jname, NULL);
diff --git a/app/libs/androidcopysdk-signal-debug.aar b/app/libs/androidcopysdk-signal-debug.aar
index 01c03754..da1b700e 100644
Binary files a/app/libs/androidcopysdk-signal-debug.aar and b/app/libs/androidcopysdk-signal-debug.aar differ
diff --git a/app/libs/androidcopysdk-signal-release.aar b/app/libs/androidcopysdk-signal-release.aar
index 69d68108..75049de1 100644
Binary files a/app/libs/androidcopysdk-signal-release.aar and b/app/libs/androidcopysdk-signal-release.aar differ
diff --git a/app/libs/authenticatorsdk-signal-debug.aar b/app/libs/authenticatorsdk-signal-debug.aar
index da1eaab4..52d33c0c 100644
Binary files a/app/libs/authenticatorsdk-signal-debug.aar and b/app/libs/authenticatorsdk-signal-debug.aar differ
diff --git a/app/libs/authenticatorsdk-signal-release.aar b/app/libs/authenticatorsdk-signal-release.aar
index d498eccb..2257139f 100644
Binary files a/app/libs/authenticatorsdk-signal-release.aar and b/app/libs/authenticatorsdk-signal-release.aar differ
diff --git a/app/libs/common-debug.aar b/app/libs/common-debug.aar
index 1c283ad1..6406ef25 100644
Binary files a/app/libs/common-debug.aar and b/app/libs/common-debug.aar differ
diff --git a/app/libs/common-release.aar b/app/libs/common-release.aar
new file mode 100644
index 00000000..adc4afb7
Binary files /dev/null and b/app/libs/common-release.aar differ
diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml
index be335599..d1700d50 100644
--- a/app/lint-baseline.xml
+++ b/app/lint-baseline.xml
@@ -6,12 +6,11 @@
message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`"
errorLine1=" List<SubscriptionInfo> list = subscriptionManager.getActiveSubscriptionInfoList();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-
+
-
();
+}
+-keepclassmembers class com.tm.androidcopysdk.** {
+ public ();
+}
+
+-dontwarn com.github.underscore.lodash.$
+-dontwarn com.google.crypto.tink.subtle.Ed25519Sign$KeyPair
+-dontwarn com.google.crypto.tink.subtle.Ed25519Sign
+-dontwarn com.google.crypto.tink.subtle.Ed25519Verify
+-dontwarn com.google.crypto.tink.subtle.X25519
+-dontwarn dalvik.system.VMStack
+-dontwarn java.lang.ProcessHandle
+-dontwarn java.lang.management.ManagementFactory
+-dontwarn java.lang.management.RuntimeMXBean
+-dontwarn javax.naming.InitialContext
+-dontwarn javax.naming.NameNotFoundException
+-dontwarn javax.naming.NamingException
+-dontwarn org.bouncycastle.asn1.ASN1Encodable
+-dontwarn org.bouncycastle.asn1.pkcs.PrivateKeyInfo
+-dontwarn org.bouncycastle.asn1.x509.AlgorithmIdentifier
+-dontwarn org.bouncycastle.asn1.x509.SubjectPublicKeyInfo
+-dontwarn org.bouncycastle.cert.X509CertificateHolder
+-dontwarn org.bouncycastle.cert.jcajce.JcaX509CertificateHolder
+-dontwarn org.bouncycastle.crypto.BlockCipher
+-dontwarn org.bouncycastle.crypto.CipherParameters
+-dontwarn org.bouncycastle.crypto.InvalidCipherTextException
+-dontwarn org.bouncycastle.crypto.engines.AESEngine
+-dontwarn org.bouncycastle.crypto.modes.GCMBlockCipher
+-dontwarn org.bouncycastle.crypto.params.AEADParameters
+-dontwarn org.bouncycastle.crypto.params.KeyParameter
+-dontwarn org.bouncycastle.jce.provider.BouncyCastleProvider
+-dontwarn org.bouncycastle.openssl.PEMException
+-dontwarn org.bouncycastle.openssl.PEMKeyPair
+-dontwarn org.bouncycastle.openssl.PEMParser
+-dontwarn org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter
+-dontwarn rx.android.schedulers.AndroidSchedulers
+-dontwarn sun.reflect.Reflection
+#TM_SA end
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/SignalInstrumentationApplicationContext.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/SignalInstrumentationApplicationContext.kt
index 493e5be8..2c196020 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/SignalInstrumentationApplicationContext.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/SignalInstrumentationApplicationContext.kt
@@ -35,4 +35,18 @@ class SignalInstrumentationApplicationContext : ApplicationContext() {
LogDatabase.getInstance(this).logs.trimToSize()
}
}
+
+ override fun beginJobLoop() = Unit
+
+ /**
+ * Some of the jobs can interfere with some of the instrumentation tests.
+ *
+ * For example, we may try to create a release channel recipient while doing
+ * an import/backup test.
+ *
+ * This can be used to start the job loop if needed for tests that rely on it.
+ */
+ fun beginJobLoopForTests() {
+ super.beginJobLoop()
+ }
}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/BackupTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/BackupTest.kt
index 6696183c..6656ef3e 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/BackupTest.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/BackupTest.kt
@@ -255,7 +255,7 @@ class BackupTest {
SignalStore.donationsValues().setSubscriber(Subscriber(SubscriberId.generate(), "USD"))
SignalStore.donationsValues().setDisplayBadgesOnProfile(false)
- SignalStore.phoneNumberPrivacy().phoneNumberListingMode = PhoneNumberPrivacyValues.PhoneNumberListingMode.UNLISTED
+ SignalStore.phoneNumberPrivacy().phoneNumberDiscoverabilityMode = PhoneNumberPrivacyValues.PhoneNumberDiscoverabilityMode.NOT_DISCOVERABLE
SignalStore.phoneNumberPrivacy().phoneNumberSharingMode = PhoneNumberPrivacyValues.PhoneNumberSharingMode.NOBODY
SignalStore.settings().isLinkPreviewsEnabled = false
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ImportExportTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ImportExportTest.kt
new file mode 100644
index 00000000..719e0e86
--- /dev/null
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ImportExportTest.kt
@@ -0,0 +1,1540 @@
+/*
+ * Copyright 2024 Signal Messenger, LLC
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+package org.tm.archive.backup.v2
+
+import android.Manifest
+import android.app.UiAutomation
+import android.os.Environment
+import androidx.test.platform.app.InstrumentationRegistry
+import okio.ByteString.Companion.toByteString
+import org.junit.Assert
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TestName
+import org.signal.core.util.Base64
+import org.signal.libsignal.messagebackup.MessageBackup
+import org.signal.libsignal.messagebackup.MessageBackupKey
+import org.signal.libsignal.zkgroup.profiles.ProfileKey
+import org.tm.archive.backup.v2.proto.AccountData
+import org.tm.archive.backup.v2.proto.BackupInfo
+import org.tm.archive.backup.v2.proto.BodyRange
+import org.tm.archive.backup.v2.proto.Call
+import org.tm.archive.backup.v2.proto.Chat
+import org.tm.archive.backup.v2.proto.ChatItem
+import org.tm.archive.backup.v2.proto.ChatUpdateMessage
+import org.tm.archive.backup.v2.proto.Contact
+import org.tm.archive.backup.v2.proto.DistributionList
+import org.tm.archive.backup.v2.proto.ExpirationTimerChatUpdate
+import org.tm.archive.backup.v2.proto.FilePointer
+import org.tm.archive.backup.v2.proto.Frame
+import org.tm.archive.backup.v2.proto.Group
+import org.tm.archive.backup.v2.proto.MessageAttachment
+import org.tm.archive.backup.v2.proto.ProfileChangeChatUpdate
+import org.tm.archive.backup.v2.proto.Quote
+import org.tm.archive.backup.v2.proto.Reaction
+import org.tm.archive.backup.v2.proto.Recipient
+import org.tm.archive.backup.v2.proto.ReleaseNotes
+import org.tm.archive.backup.v2.proto.Self
+import org.tm.archive.backup.v2.proto.SendStatus
+import org.tm.archive.backup.v2.proto.SessionSwitchoverChatUpdate
+import org.tm.archive.backup.v2.proto.SimpleChatUpdate
+import org.tm.archive.backup.v2.proto.StandardMessage
+import org.tm.archive.backup.v2.proto.StickerPack
+import org.tm.archive.backup.v2.proto.Text
+import org.tm.archive.backup.v2.proto.ThreadMergeChatUpdate
+import org.tm.archive.backup.v2.stream.EncryptedBackupReader
+import org.tm.archive.backup.v2.stream.EncryptedBackupWriter
+import org.tm.archive.keyvalue.SignalStore
+import org.whispersystems.signalservice.api.kbs.MasterKey
+import org.whispersystems.signalservice.api.push.DistributionId
+import org.whispersystems.signalservice.api.push.ServiceId
+import org.whispersystems.signalservice.api.subscriptions.SubscriberId
+import org.whispersystems.signalservice.api.util.toByteArray
+import java.io.ByteArrayInputStream
+import java.io.ByteArrayOutputStream
+import java.io.File
+import java.io.FileOutputStream
+import java.util.UUID
+import java.util.concurrent.TimeUnit
+import kotlin.random.Random
+import kotlin.time.Duration.Companion.days
+
+/**
+ * Test the import and export of message backup frames to make sure what
+ * goes in, comes out.
+ */
+class ImportExportTest {
+ companion object {
+ val SELF_ACI = ServiceId.ACI.from(UUID.fromString("77770000-b477-4f35-a824-d92987a63641"))
+ val SELF_PNI = ServiceId.PNI.from(UUID.fromString("77771111-b014-41fb-bf73-05cb2ec52910"))
+ const val SELF_E164 = "+10000000000"
+ val SELF_PROFILE_KEY = ProfileKey(Random.nextBytes(32))
+ val MASTER_KEY = Base64.decode("sHuBMP4ToZk4tcNU+S8eBUeCt8Am5EZnvuqTBJIR4Do")
+
+ val defaultBackupInfo = BackupInfo(version = 1L, backupTimeMs = 123456L)
+ val selfRecipient = Recipient(id = 1, self = Self())
+ val releaseNotes = Recipient(id = 2, releaseNotes = ReleaseNotes())
+ val standardAccountData = AccountData(
+ profileKey = SELF_PROFILE_KEY.serialize().toByteString(),
+ username = "self.01",
+ usernameLink = null,
+ givenName = "Peter",
+ familyName = "Parker",
+ avatarUrlPath = "https://example.com/",
+ subscriberId = SubscriberId.generate().bytes.toByteString(),
+ subscriberCurrencyCode = "USD",
+ subscriptionManuallyCancelled = true,
+ accountSettings = AccountData.AccountSettings(
+ readReceipts = true,
+ sealedSenderIndicators = true,
+ typingIndicators = true,
+ linkPreviews = true,
+ notDiscoverableByPhoneNumber = true,
+ preferContactAvatars = true,
+ universalExpireTimer = 42,
+ displayBadgesOnProfile = true,
+ keepMutedChatsArchived = true,
+ hasSetMyStoriesPrivacy = true,
+ hasViewedOnboardingStory = true,
+ storiesDisabled = true,
+ storyViewReceiptsEnabled = true,
+ hasSeenGroupStoryEducationSheet = true,
+ hasCompletedUsernameOnboarding = true,
+ phoneNumberSharingMode = AccountData.PhoneNumberSharingMode.EVERYBODY,
+ preferredReactionEmoji = listOf("a", "b", "c")
+ )
+ )
+ val alice = Recipient(
+ id = 3,
+ contact = Contact(
+ aci = TestRecipientUtils.nextAci().toByteString(),
+ pni = TestRecipientUtils.nextPni().toByteString(),
+ username = "cool.01",
+ e164 = 141255501234,
+ blocked = false,
+ hidden = false,
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = true,
+ profileGivenName = "Alexa",
+ profileFamilyName = "Kim",
+ hideStory = true
+ )
+ )
+
+ /**
+ * When using standardFrames you must start recipient ids at 3.
+ */
+ private val standardFrames = arrayOf(defaultBackupInfo, standardAccountData, selfRecipient, releaseNotes)
+ }
+
+ @JvmField
+ @Rule
+ var testName = TestName()
+
+ @Before
+ fun setup() {
+ SignalStore.svr().setMasterKey(MasterKey(MASTER_KEY), "1234")
+ SignalStore.account().setE164(SELF_E164)
+ SignalStore.account().setAci(SELF_ACI)
+ SignalStore.account().setPni(SELF_PNI)
+ SignalStore.account().generateAciIdentityKeyIfNecessary()
+ SignalStore.account().generatePniIdentityKeyIfNecessary()
+ }
+
+ @Test
+ fun accountAndSelf() {
+ importExport(*standardFrames)
+ }
+
+ @Test
+ fun largeNumberOfRecipientsAndChats() {
+ val recipients = ArrayList(5000)
+ val chats = ArrayList(5000)
+ var id = 3L
+ for (i in 0..5000) {
+ val recipientId = id++
+ recipients.add(
+ Recipient(
+ id = recipientId,
+ contact = Contact(
+ aci = TestRecipientUtils.nextAci().toByteString(),
+ pni = TestRecipientUtils.nextPni().toByteString(),
+ username = "rec$i.01",
+ e164 = 14125550000 + i,
+ blocked = false,
+ hidden = false,
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = true,
+ profileGivenName = "Test",
+ profileFamilyName = "Recipient$i",
+ hideStory = false
+ )
+ )
+ )
+ chats.add(
+ Chat(
+ id = recipientId - 2L,
+ recipientId = recipientId
+ )
+ )
+ if (i % 10 == 0) {
+ val groupId = id++
+ recipients.add(
+ Recipient(
+ id = groupId,
+ group = Group(
+ masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(),
+ whitelisted = true,
+ hideStory = false,
+ storySendMode = Group.StorySendMode.ENABLED,
+ name = "Cool Group $i"
+ )
+ )
+ )
+ chats.add(
+ Chat(
+ id = groupId - 2L,
+ recipientId = groupId
+ )
+ )
+ }
+ }
+ importExport(
+ *standardFrames,
+ *recipients.toArray()
+ )
+ }
+
+ @Test
+ fun largeNumberOfMessagesAndChats() {
+ val NUM_INDIVIDUAL_RECIPIENTS = 1000
+ val numIndividualMessages = 500
+ val numGroupMessagesPerPerson = 200
+
+ val random = Random(1516)
+
+ val recipients = ArrayList(1010)
+ val chats = ArrayList(1010)
+ var id = 3L
+ for (i in 0 until NUM_INDIVIDUAL_RECIPIENTS) {
+ val recipientId = id++
+ recipients.add(
+ Recipient(
+ id = recipientId,
+ contact = Contact(
+ aci = TestRecipientUtils.nextAci().toByteString(),
+ pni = TestRecipientUtils.nextPni().toByteString(),
+ username = if (random.trueWithProbability(0.2f)) "rec$i.01" else null,
+ e164 = 14125550000 + i,
+ blocked = random.trueWithProbability(0.1f),
+ hidden = random.trueWithProbability(0.1f),
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = random.trueWithProbability(0.9f),
+ profileGivenName = "Test",
+ profileFamilyName = "Recipient$i",
+ hideStory = false
+ )
+ )
+ )
+ chats.add(
+ Chat(
+ id = recipientId - 2L,
+ recipientId = recipientId
+ )
+ )
+ if (i % 100 == 0) {
+ val groupId = id++
+ recipients.add(
+ Recipient(
+ id = groupId,
+ group = Group(
+ masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(),
+ whitelisted = random.trueWithProbability(0.9f),
+ hideStory = random.trueWithProbability(0.1f),
+ storySendMode = if (random.trueWithProbability(0.9f)) Group.StorySendMode.ENABLED else Group.StorySendMode.DISABLED,
+ name = "Cool Group $i"
+ )
+ )
+ )
+ chats.add(
+ Chat(
+ id = groupId - 2L,
+ recipientId = groupId
+ )
+ )
+ }
+ }
+ val chatItems = ArrayList()
+ var sentTime = 1L
+ val groupMembers = ArrayList()
+ var group: Recipient? = null
+ for (recipient in recipients) {
+ // Make another group and populate it with messages from these members
+ if (recipient.group != null) {
+ if (group == null) {
+ group = recipient
+ groupMembers.clear()
+ } else {
+ for (member in groupMembers) {
+ for (i in 0 until numGroupMessagesPerPerson) {
+ chatItems.add(
+ ChatItem(
+ chatId = group.id - 2L,
+ authorId = member.id,
+ dateSent = sentTime++,
+ sms = false,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = sentTime + 1,
+ dateServerSent = sentTime,
+ read = true,
+ sealedSender = true
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Medium length message from ${member.contact?.profileGivenName} ${member.contact?.profileFamilyName} sent at $sentTime"
+ )
+ )
+ )
+ )
+ }
+ }
+ for (i in 0 until numGroupMessagesPerPerson) {
+ ChatItem(
+ chatId = group.id - 2L,
+ authorId = selfRecipient.id,
+ dateSent = sentTime++,
+ sms = false,
+ outgoing = ChatItem.OutgoingMessageDetails(
+ sendStatus = groupMembers.map { groupMember ->
+ SendStatus(recipientId = groupMember.id, deliveryStatus = if (random.trueWithProbability(0.8f)) SendStatus.Status.READ else SendStatus.Status.DELIVERED, sealedSender = true)
+ }
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Outgoing message without much text in it just because"
+ )
+ )
+ )
+ }
+ }
+ } else {
+ groupMembers.add(recipient)
+ for (i in 0 until numIndividualMessages) {
+ if (i % 2 == 0) {
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = sentTime++,
+ sms = false,
+ outgoing = ChatItem.OutgoingMessageDetails(
+ sendStatus = listOf(
+ SendStatus(recipient.id, deliveryStatus = if (random.trueWithProbability(0.8f)) SendStatus.Status.READ else SendStatus.Status.DELIVERED, sealedSender = true)
+ )
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Outgoing message without much text in it just because"
+ )
+ )
+ )
+ } else {
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = sentTime++,
+ sms = false,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = sentTime + 1,
+ dateServerSent = sentTime,
+ read = true,
+ sealedSender = true
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Outgoing message without much text in it just because"
+ )
+ )
+ )
+ }
+ }
+ }
+ }
+ val import = exportFrames(
+ *standardFrames,
+ *recipients.toArray(),
+ *chatItems.toArray()
+ )
+ outputFile(import)
+ }
+
+ @Test
+ fun individualRecipients() {
+ importExport(
+ *standardFrames,
+ Recipient(
+ id = 3,
+ contact = Contact(
+ aci = TestRecipientUtils.nextAci().toByteString(),
+ pni = TestRecipientUtils.nextPni().toByteString(),
+ username = "cool.01",
+ e164 = 141255501234,
+ blocked = true,
+ hidden = true,
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = true,
+ profileGivenName = "Alexa",
+ profileFamilyName = "Kim",
+ hideStory = true
+ )
+ ),
+ Recipient(
+ id = 4,
+ contact = Contact(
+ aci = null,
+ pni = null,
+ username = null,
+ e164 = 141255501235,
+ blocked = true,
+ hidden = true,
+ registered = Contact.Registered.NOT_REGISTERED,
+ unregisteredTimestamp = 1234568927398L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = false,
+ profileGivenName = "Peter",
+ profileFamilyName = "Kim",
+ hideStory = true
+ )
+ )
+ )
+ }
+
+ @Test
+ fun groupRecipients() {
+ importExport(
+ *standardFrames,
+ Recipient(
+ id = 3,
+ group = Group(
+ masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(),
+ whitelisted = true,
+ hideStory = true,
+ storySendMode = Group.StorySendMode.ENABLED,
+ name = "Cool test group"
+ )
+ ),
+ Recipient(
+ id = 4,
+ group = Group(
+ masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(),
+ whitelisted = false,
+ hideStory = false,
+ storySendMode = Group.StorySendMode.DEFAULT,
+ name = "Cool test group"
+ )
+ )
+ )
+ }
+
+ @Test
+ fun distributionListRecipients() {
+ importExport(
+ *standardFrames,
+ Recipient(
+ id = 3,
+ contact = Contact(
+ aci = TestRecipientUtils.nextAci().toByteString(),
+ pni = TestRecipientUtils.nextPni().toByteString(),
+ username = "cool.01",
+ e164 = 141255501234,
+ blocked = true,
+ hidden = true,
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = true,
+ profileGivenName = "Alexa",
+ profileFamilyName = "Kim",
+ hideStory = true
+ )
+ ),
+ Recipient(
+ id = 4,
+ contact = Contact(
+ aci = null,
+ pni = null,
+ username = null,
+ e164 = 141255501235,
+ blocked = true,
+ hidden = true,
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = true,
+ profileGivenName = "Peter",
+ profileFamilyName = "Kim",
+ hideStory = true
+ )
+ ),
+ Recipient(
+ id = 5,
+ contact = Contact(
+ aci = null,
+ pni = null,
+ username = null,
+ e164 = 141255501236,
+ blocked = true,
+ hidden = true,
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = true,
+ profileGivenName = "Father",
+ profileFamilyName = "Kim",
+ hideStory = true
+ )
+ ),
+ Recipient(
+ id = 6,
+ distributionList = DistributionList(
+ name = "Kim Family",
+ distributionId = DistributionId.create().asUuid().toByteArray().toByteString(),
+ allowReplies = true,
+ deletionTimestamp = 0L,
+ privacyMode = DistributionList.PrivacyMode.ONLY_WITH,
+ memberRecipientIds = listOf(3, 4, 5)
+ )
+ )
+ )
+ }
+
+ @Test
+ fun deletedDistributionList() {
+ val alexa = Recipient(
+ id = 3,
+ contact = Contact(
+ aci = TestRecipientUtils.nextAci().toByteString(),
+ pni = TestRecipientUtils.nextPni().toByteString(),
+ username = "cool.01",
+ e164 = 141255501234,
+ blocked = true,
+ hidden = true,
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = true,
+ profileGivenName = "Alexa",
+ profileFamilyName = "Kim",
+ hideStory = true
+ )
+ )
+ val importData = exportFrames(
+ *standardFrames,
+ alexa,
+ Recipient(
+ id = 6,
+ distributionList = DistributionList(
+ name = "Deleted list",
+ distributionId = DistributionId.create().asUuid().toByteArray().toByteString(),
+ allowReplies = true,
+ deletionTimestamp = 12345L,
+ privacyMode = DistributionList.PrivacyMode.ONLY_WITH,
+ memberRecipientIds = listOf(3)
+ )
+ )
+ )
+ import(importData)
+ val exported = export()
+ val expected = exportFrames(
+ *standardFrames,
+ alexa
+ )
+ outputFile(importData, expected)
+ compare(expected, exported)
+ }
+
+ @Test
+ fun chatThreads() {
+ importExport(
+ *standardFrames,
+ Recipient(
+ id = 3,
+ contact = Contact(
+ aci = TestRecipientUtils.nextAci().toByteString(),
+ pni = TestRecipientUtils.nextPni().toByteString(),
+ username = "cool.01",
+ e164 = 141255501234,
+ blocked = false,
+ hidden = false,
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = true,
+ profileGivenName = "Alexa",
+ profileFamilyName = "Kim",
+ hideStory = true
+ )
+ ),
+ Recipient(
+ id = 4,
+ group = Group(
+ masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(),
+ whitelisted = true,
+ hideStory = true,
+ storySendMode = Group.StorySendMode.DEFAULT,
+ name = "Cool test group"
+ )
+ ),
+ Chat(
+ id = 1,
+ recipientId = 3,
+ archived = true,
+ pinnedOrder = 1,
+ expirationTimerMs = 1.days.inWholeMilliseconds,
+ muteUntilMs = System.currentTimeMillis(),
+ markedUnread = true,
+ dontNotifyForMentionsIfMuted = true,
+ wallpaper = null
+ )
+ )
+ }
+
+ @Test
+ fun calls() {
+ val individualCalls = ArrayList()
+ val groupCalls = ArrayList()
+ val states = arrayOf(Call.State.MISSED, Call.State.COMPLETED, Call.State.DECLINED_BY_USER, Call.State.DECLINED_BY_NOTIFICATION_PROFILE)
+ val types = arrayOf(Call.Type.VIDEO_CALL, Call.Type.AD_HOC_CALL, Call.Type.AUDIO_CALL)
+ var id = 1L
+ var timestamp = 12345L
+
+ for (state in states) {
+ for (type in types) {
+ individualCalls.add(
+ Call(
+ callId = id++,
+ conversationRecipientId = 3,
+ type = type,
+ state = state,
+ timestamp = timestamp++,
+ ringerRecipientId = 3,
+ outgoing = true
+ )
+ )
+ individualCalls.add(
+ Call(
+ callId = id++,
+ conversationRecipientId = 3,
+ type = type,
+ state = state,
+ timestamp = timestamp++,
+ ringerRecipientId = selfRecipient.id,
+ outgoing = false
+ )
+ )
+ }
+ groupCalls.add(
+ Call(
+ callId = id++,
+ conversationRecipientId = 4,
+ type = Call.Type.GROUP_CALL,
+ state = state,
+ timestamp = timestamp++,
+ ringerRecipientId = 3,
+ outgoing = true
+ )
+ )
+ groupCalls.add(
+ Call(
+ callId = id++,
+ conversationRecipientId = 4,
+ type = Call.Type.GROUP_CALL,
+ state = state,
+ timestamp = timestamp++,
+ ringerRecipientId = selfRecipient.id,
+ outgoing = false
+ )
+ )
+ }
+
+ importExport(
+ *standardFrames,
+ Recipient(
+ id = 3,
+ contact = Contact(
+ aci = TestRecipientUtils.nextAci().toByteString(),
+ pni = TestRecipientUtils.nextPni().toByteString(),
+ username = "cool.01",
+ e164 = 141255501234,
+ blocked = false,
+ hidden = false,
+ registered = Contact.Registered.REGISTERED,
+ unregisteredTimestamp = 0L,
+ profileKey = TestRecipientUtils.generateProfileKey().toByteString(),
+ profileSharing = true,
+ profileGivenName = "Alexa",
+ profileFamilyName = "Kim",
+ hideStory = true
+ )
+ ),
+ Recipient(
+ id = 4,
+ group = Group(
+ masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(),
+ whitelisted = true,
+ hideStory = true,
+ storySendMode = Group.StorySendMode.DEFAULT,
+ name = "Cool test group"
+ )
+ ),
+ *individualCalls.toArray(),
+ *groupCalls.toArray()
+ )
+ }
+
+ @Test
+ fun messageWithOnlyText() {
+ var dateSent = System.currentTimeMillis()
+ val sendStatuses = enumerateSendStatuses(alice.id)
+ val incomingMessageDetails = enumerateIncomingMessageDetails(dateSent + 200)
+ val outgoingMessages = ArrayList()
+ val incomingMessages = ArrayList()
+ for (sendStatus in sendStatuses) {
+ outgoingMessages.add(
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = dateSent++,
+ expireStartDate = dateSent + 1000,
+ expiresInMs = TimeUnit.DAYS.toMillis(2),
+ sms = false,
+ outgoing = ChatItem.OutgoingMessageDetails(
+ sendStatus = listOf(sendStatus)
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Text only body"
+ )
+ )
+ )
+ )
+ }
+ dateSent++
+ for (incomingDetail in incomingMessageDetails) {
+ incomingMessages.add(
+ ChatItem(
+ chatId = 1,
+ authorId = alice.id,
+ dateSent = dateSent++,
+ expireStartDate = dateSent + 1000,
+ expiresInMs = TimeUnit.DAYS.toMillis(2),
+ sms = false,
+ incoming = incomingDetail,
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Text only body"
+ )
+ )
+ )
+ )
+ }
+
+ importExport(
+ *standardFrames,
+ alice,
+ buildChat(alice, 1),
+ *outgoingMessages.toArray(),
+ *incomingMessages.toArray()
+ )
+ }
+
+ @Test
+ fun messageWithTextMentionsBodyRangesAndReactions() {
+ val time = System.currentTimeMillis()
+ importExport(
+ *standardFrames,
+ alice,
+ buildChat(alice, 1),
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = 100,
+ expireStartDate = time,
+ expiresInMs = TimeUnit.DAYS.toMillis(2),
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = 105,
+ dateServerSent = 104,
+ read = true,
+ sealedSender = true
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Hey check this out I love spans!",
+ bodyRanges = listOf(
+ BodyRange(
+ start = 6,
+ length = 3,
+ style = BodyRange.Style.BOLD
+ ),
+ BodyRange(
+ start = 10,
+ length = 3,
+ style = BodyRange.Style.ITALIC
+ ),
+ BodyRange(
+ start = 14,
+ length = 3,
+ style = BodyRange.Style.SPOILER
+ ),
+ BodyRange(
+ start = 18,
+ length = 3,
+ style = BodyRange.Style.STRIKETHROUGH
+ ),
+ BodyRange(
+ start = 22,
+ length = 3,
+ style = BodyRange.Style.MONOSPACE
+ ),
+ BodyRange(
+ start = 4,
+ length = 0,
+ mentionAci = alice.contact!!.aci
+ )
+ )
+ ),
+ reactions = listOf(
+ Reaction(emoji = "F", authorId = selfRecipient.id, sentTimestamp = 302, receivedTimestamp = 303),
+ Reaction(emoji = "F", authorId = alice.id, sentTimestamp = 301, receivedTimestamp = 302)
+ )
+ )
+ )
+ )
+ }
+
+ @Test
+ fun messageWithTextAndQuotes() {
+ val spans = listOf(
+ BodyRange(
+ start = 6,
+ length = 3,
+ style = BodyRange.Style.BOLD
+ ),
+ BodyRange(
+ start = 10,
+ length = 3,
+ style = BodyRange.Style.ITALIC
+ ),
+ BodyRange(
+ start = 14,
+ length = 3,
+ style = BodyRange.Style.SPOILER
+ ),
+ BodyRange(
+ start = 18,
+ length = 3,
+ style = BodyRange.Style.STRIKETHROUGH
+ ),
+ BodyRange(
+ start = 22,
+ length = 3,
+ style = BodyRange.Style.MONOSPACE
+ )
+ )
+ val time = System.currentTimeMillis()
+ importExport(
+ *standardFrames,
+ alice,
+ buildChat(alice, 1),
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = 100,
+ expireStartDate = time,
+ expiresInMs = TimeUnit.DAYS.toMillis(2),
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = 105,
+ dateServerSent = 104,
+ read = true,
+ sealedSender = true
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Hey check this out I love spans!",
+ bodyRanges = spans
+ )
+ )
+ ),
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = 101,
+ expireStartDate = time,
+ expiresInMs = TimeUnit.DAYS.toMillis(2),
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = 105,
+ dateServerSent = 104,
+ read = true,
+ sealedSender = true
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "I quoted an existing message"
+ ),
+ quote = Quote(
+ targetSentTimestamp = 100,
+ authorId = alice.id,
+ type = Quote.Type.NORMAL,
+ text = "Hey check this out I love spans!",
+ bodyRanges = spans
+ )
+ )
+ ),
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = 102,
+ expireStartDate = time,
+ expiresInMs = TimeUnit.DAYS.toMillis(2),
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = 105,
+ dateServerSent = 104,
+ read = true,
+ sealedSender = true
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "I quoted an non-existing message"
+ ),
+ quote = Quote(
+ targetSentTimestamp = 60,
+ authorId = alice.id,
+ type = Quote.Type.NORMAL,
+ text = "Hey check this out I love spans!",
+ bodyRanges = spans
+ )
+ )
+ )
+ )
+ }
+
+ @Test
+ fun messagesNearExpirationNotExported() {
+ val chat = buildChat(alice, 1)
+ val expirationNotStarted = ChatItem(
+ chatId = 1,
+ authorId = alice.id,
+ dateSent = 101,
+ expireStartDate = null,
+ expiresInMs = TimeUnit.DAYS.toMillis(1),
+ sms = false,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = 100,
+ dateServerSent = 100,
+ read = true
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Expiration not started but less than or equal to 1 day"
+ )
+ )
+ )
+ val importData = exportFrames(
+ *standardFrames,
+ alice,
+ chat,
+ ChatItem(
+ chatId = 1,
+ authorId = alice.id,
+ dateSent = 100,
+ expireStartDate = System.currentTimeMillis(),
+ expiresInMs = TimeUnit.DAYS.toMillis(1),
+ sms = false,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = 100,
+ dateServerSent = 100,
+ read = true
+ ),
+ standardMessage = StandardMessage(
+ text = Text(
+ body = "Near expiration"
+ )
+ )
+ ),
+ expirationNotStarted
+ )
+ import(importData)
+ val exported = export()
+ val expected = exportFrames(
+ *standardFrames,
+ alice,
+ chat,
+ expirationNotStarted
+ )
+ outputFile(importData, expected)
+ compare(expected, exported)
+ }
+
+ @Test
+ fun messageWithAttachmentsAndQuoteAttachments() {
+ var dateSent = System.currentTimeMillis()
+ importExport(
+ *standardFrames,
+ alice,
+ buildChat(alice, 1),
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = dateSent++,
+ sms = false,
+ outgoing = ChatItem.OutgoingMessageDetails(
+ sendStatus = listOf(SendStatus(alice.id, deliveryStatus = SendStatus.Status.READ, lastStatusUpdateTimestamp = -1))
+ ),
+ standardMessage = StandardMessage(
+ attachments = listOf(
+ MessageAttachment(
+ pointer = FilePointer(
+ attachmentLocator = FilePointer.AttachmentLocator(
+ cdnKey = "coolCdnKey",
+ cdnNumber = 2,
+ uploadTimestamp = System.currentTimeMillis()
+ ),
+ key = (1..32).map { it.toByte() }.toByteArray().toByteString(),
+ contentType = "image/png",
+ size = 12345,
+ fileName = "very_cool_picture.png",
+ width = 100,
+ height = 200,
+ caption = "Love this cool picture!",
+ incrementalMacChunkSize = 0
+ )
+ )
+ )
+ )
+ )
+ )
+ }
+
+ @Test
+ fun simpleChatUpdateMessage() {
+ var dateSentStart = 100L
+ val updateMessages = ArrayList()
+ for (i in 1..11) {
+ updateMessages.add(
+ ChatItem(
+ chatId = 1,
+ authorId = alice.id,
+ dateSent = dateSentStart++,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = dateSentStart,
+ dateServerSent = dateSentStart,
+ read = true,
+ sealedSender = true
+ ),
+ updateMessage = ChatUpdateMessage(
+ simpleUpdate = SimpleChatUpdate(
+ type = SimpleChatUpdate.Type.fromValue(i)!!
+ )
+ )
+ )
+ )
+ }
+ importExport(
+ *standardFrames,
+ alice,
+ buildChat(alice, 1),
+ *updateMessages.toArray()
+ )
+ }
+
+ @Test
+ fun expirationTimerUpdateMessage() {
+ var dateSentStart = 100L
+ importExport(
+ *standardFrames,
+ alice,
+ buildChat(alice, 1),
+ ChatItem(
+ chatId = 1,
+ authorId = alice.id,
+ dateSent = dateSentStart++,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = dateSentStart,
+ dateServerSent = dateSentStart,
+ read = true,
+ sealedSender = true
+ ),
+ updateMessage = ChatUpdateMessage(
+ expirationTimerChange = ExpirationTimerChatUpdate(
+ 1000
+ )
+ )
+ ),
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = dateSentStart++,
+ outgoing = ChatItem.OutgoingMessageDetails(
+ sendStatus = listOf(
+ SendStatus(alice.id, deliveryStatus = SendStatus.Status.READ, sealedSender = true, lastStatusUpdateTimestamp = -1)
+ )
+ ),
+ updateMessage = ChatUpdateMessage(
+ expirationTimerChange = ExpirationTimerChatUpdate(
+ 0
+ )
+ )
+ ),
+ ChatItem(
+ chatId = 1,
+ authorId = selfRecipient.id,
+ dateSent = dateSentStart++,
+ outgoing = ChatItem.OutgoingMessageDetails(
+ sendStatus = listOf(SendStatus(alice.id, deliveryStatus = SendStatus.Status.READ, sealedSender = true, lastStatusUpdateTimestamp = -1))
+ ),
+ updateMessage = ChatUpdateMessage(
+ expirationTimerChange = ExpirationTimerChatUpdate(
+ 10000
+ )
+ )
+ ),
+ ChatItem(
+ chatId = 1,
+ authorId = alice.id,
+ dateSent = dateSentStart++,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = dateSentStart,
+ dateServerSent = dateSentStart,
+ read = true,
+ sealedSender = true
+ ),
+ updateMessage = ChatUpdateMessage(
+ expirationTimerChange = ExpirationTimerChatUpdate(
+ 0
+ )
+ )
+ )
+ )
+ }
+
+ @Test
+ fun profileChangeChatUpdateMessage() {
+ var dateSentStart = 100L
+ importExport(
+ *standardFrames,
+ alice,
+ buildChat(alice, 1),
+ ChatItem(
+ chatId = 1,
+ authorId = alice.id,
+ dateSent = dateSentStart++,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = dateSentStart,
+ dateServerSent = dateSentStart,
+ read = true,
+ sealedSender = true
+ ),
+ updateMessage = ChatUpdateMessage(
+ profileChange = ProfileChangeChatUpdate(
+ previousName = "Aliceee Kim",
+ newName = "Alice Kim"
+ )
+ )
+ )
+ )
+ }
+
+ @Test
+ fun threadMergeChatUpdate() {
+ var dateSentStart = 100L
+ importExport(
+ *standardFrames,
+ alice,
+ buildChat(alice, 1),
+ ChatItem(
+ chatId = 1,
+ authorId = alice.id,
+ dateSent = dateSentStart++,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = dateSentStart,
+ dateServerSent = dateSentStart,
+ read = true,
+ sealedSender = true
+ ),
+ updateMessage = ChatUpdateMessage(
+ threadMerge = ThreadMergeChatUpdate(
+ previousE164 = 141255501237
+ )
+ )
+ )
+ )
+ }
+
+ @Test
+ fun sessionSwitchoverChatUpdate() {
+ var dateSentStart = 100L
+ importExport(
+ *standardFrames,
+ alice,
+ buildChat(alice, 1),
+ ChatItem(
+ chatId = 1,
+ authorId = alice.id,
+ dateSent = dateSentStart++,
+ incoming = ChatItem.IncomingMessageDetails(
+ dateReceived = dateSentStart,
+ dateServerSent = dateSentStart,
+ read = true,
+ sealedSender = true
+ ),
+ updateMessage = ChatUpdateMessage(
+ sessionSwitchover = SessionSwitchoverChatUpdate(
+ e164 = 141255501237
+ )
+ )
+ )
+ )
+ }
+
+ fun enumerateIncomingMessageDetails(dateSent: Long): List {
+ val details = mutableListOf()
+ details.add(
+ ChatItem.IncomingMessageDetails(
+ dateReceived = dateSent + 1,
+ dateServerSent = dateSent,
+ read = true,
+ sealedSender = true
+ )
+ )
+ details.add(
+ ChatItem.IncomingMessageDetails(
+ dateReceived = dateSent + 1,
+ dateServerSent = dateSent,
+ read = true,
+ sealedSender = false
+ )
+ )
+ details.add(
+ ChatItem.IncomingMessageDetails(
+ dateReceived = dateSent + 1,
+ dateServerSent = dateSent,
+ read = false,
+ sealedSender = true
+ )
+ )
+ details.add(
+ ChatItem.IncomingMessageDetails(
+ dateReceived = dateSent + 1,
+ dateServerSent = dateSent,
+ read = false,
+ sealedSender = false
+ )
+ )
+ return details
+ }
+
+ fun enumerateSendStatuses(recipientId: Long): List {
+ val statuses = ArrayList()
+ val sealedSenderStates = listOf(true, false)
+ for (sealedSender in sealedSenderStates) {
+ statuses.add(
+ SendStatus(
+ recipientId = recipientId,
+ deliveryStatus = SendStatus.Status.DELIVERED,
+ sealedSender = sealedSender,
+ lastStatusUpdateTimestamp = -1
+ )
+ )
+ statuses.add(
+ SendStatus(
+ recipientId = recipientId,
+ deliveryStatus = SendStatus.Status.PENDING,
+ sealedSender = sealedSender,
+ lastStatusUpdateTimestamp = -1,
+ networkFailure = true
+ )
+ )
+ statuses.add(
+ SendStatus(
+ recipientId = recipientId,
+ deliveryStatus = SendStatus.Status.SENT,
+ sealedSender = sealedSender,
+ lastStatusUpdateTimestamp = -1
+ )
+ )
+ statuses.add(
+ SendStatus(
+ recipientId = recipientId,
+ deliveryStatus = SendStatus.Status.READ,
+ sealedSender = sealedSender,
+ lastStatusUpdateTimestamp = -1
+ )
+ )
+ statuses.add(
+ SendStatus(
+ recipientId = recipientId,
+ deliveryStatus = SendStatus.Status.PENDING,
+ sealedSender = sealedSender,
+ networkFailure = true,
+ lastStatusUpdateTimestamp = -1
+ )
+ )
+ statuses.add(
+ SendStatus(
+ recipientId = recipientId,
+ deliveryStatus = SendStatus.Status.FAILED,
+ sealedSender = sealedSender,
+ identityKeyMismatch = true,
+ lastStatusUpdateTimestamp = -1
+ )
+ )
+ }
+ return statuses
+ }
+
+ private fun buildChat(recipient: Recipient, id: Long): Chat {
+ return Chat(
+ id = id,
+ recipientId = recipient.id,
+ archived = false,
+ pinnedOrder = 0,
+ expirationTimerMs = 0,
+ muteUntilMs = 0,
+ markedUnread = false,
+ dontNotifyForMentionsIfMuted = false,
+ wallpaper = null
+ )
+ }
+
+ /**
+ * Export passed in frames as a backup. Does not automatically include
+ * any standard frames (e.g. backup header).
+ */
+ private fun exportFrames(vararg objects: Any): ByteArray {
+ val outputStream = ByteArrayOutputStream()
+ val writer = EncryptedBackupWriter(
+ key = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey(),
+ aci = SignalStore.account().aci!!,
+ outputStream = outputStream,
+ append = { mac -> outputStream.write(mac) }
+ )
+
+ writer.use {
+ for (obj in objects) {
+ when (obj) {
+ is BackupInfo -> writer.write(obj)
+ is AccountData -> writer.write(Frame(account = obj))
+ is Recipient -> writer.write(Frame(recipient = obj))
+ is Chat -> writer.write(Frame(chat = obj))
+ is ChatItem -> writer.write(Frame(chatItem = obj))
+ is Call -> writer.write(Frame(call = obj))
+ is StickerPack -> writer.write(Frame(stickerPack = obj))
+ else -> Assert.fail("invalid object $obj")
+ }
+ }
+ }
+ return outputStream.toByteArray()
+ }
+
+ /**
+ * Exports the passed in frames as a backup and then attempts to
+ * import them.
+ */
+ private fun import(vararg objects: Any) {
+ val importData = exportFrames(*objects)
+ import(importData)
+ }
+
+ private fun import(importData: ByteArray) {
+ BackupRepository.import(length = importData.size.toLong(), inputStreamFactory = { ByteArrayInputStream(importData) }, selfData = BackupRepository.SelfData(SELF_ACI, SELF_PNI, SELF_E164, SELF_PROFILE_KEY))
+ }
+
+ /**
+ * Export our current database as a backup.
+ */
+ private fun export(): ByteArray {
+ val exportData = BackupRepository.export()
+ return exportData
+ }
+
+ private fun validate(importData: ByteArray): MessageBackup.ValidationResult {
+ val factory = { ByteArrayInputStream(importData) }
+ val masterKey = SignalStore.svr().getOrCreateMasterKey()
+ val key = MessageBackupKey(masterKey.serialize(), org.signal.libsignal.protocol.ServiceId.Aci.parseFromBinary(SELF_ACI.toByteArray()))
+
+ return MessageBackup.validate(key, MessageBackup.Purpose.REMOTE_BACKUP, factory, importData.size.toLong())
+ }
+
+ /**
+ * Imports the passed in frames and then exports them.
+ *
+ * It will do a comparison to assert that the import and export
+ * are equal.
+ */
+ private fun importExport(vararg objects: Any) {
+ val outputStream = ByteArrayOutputStream()
+ val writer = EncryptedBackupWriter(
+ key = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey(),
+ aci = SignalStore.account().aci!!,
+ outputStream = outputStream,
+ append = { mac -> outputStream.write(mac) }
+ )
+
+ writer.use {
+ for (obj in objects) {
+ when (obj) {
+ is BackupInfo -> writer.write(obj)
+ is AccountData -> writer.write(Frame(account = obj))
+ is Recipient -> writer.write(Frame(recipient = obj))
+ is Chat -> writer.write(Frame(chat = obj))
+ is ChatItem -> writer.write(Frame(chatItem = obj))
+ is Call -> writer.write(Frame(call = obj))
+ is StickerPack -> writer.write(Frame(stickerPack = obj))
+ else -> Assert.fail("invalid object $obj")
+ }
+ }
+ }
+ val importData = outputStream.toByteArray()
+ outputFile(importData)
+ BackupRepository.import(length = importData.size.toLong(), inputStreamFactory = { ByteArrayInputStream(importData) }, selfData = BackupRepository.SelfData(SELF_ACI, SELF_PNI, SELF_E164, SELF_PROFILE_KEY))
+
+ val export = export()
+ compare(importData, export)
+ }
+
+ private fun compare(import: ByteArray, export: ByteArray) {
+ val selfData = BackupRepository.SelfData(SELF_ACI, SELF_PNI, SELF_E164, SELF_PROFILE_KEY)
+ val framesImported = readAllFrames(import, selfData)
+ val framesExported = readAllFrames(export, selfData)
+
+ compareFrameList(framesImported, framesExported)
+ }
+
+ private fun compareFrameList(framesImported: List, framesExported: List) {
+ val accountExported = ArrayList()
+ val accountImported = ArrayList()
+ val recipientsImported = ArrayList()
+ val recipientsExported = ArrayList()
+ val chatsImported = ArrayList()
+ val chatsExported = ArrayList()
+ val chatItemsImported = ArrayList()
+ val chatItemsExported = ArrayList()
+ val callsImported = ArrayList()
+ val callsExported = ArrayList()
+ val stickersImported = ArrayList()
+ val stickersExported = ArrayList()
+
+ for (f in framesImported) {
+ when {
+ f.account != null -> accountExported.add(f.account!!)
+ f.recipient != null -> recipientsImported.add(f.recipient!!)
+ f.chat != null -> chatsImported.add(f.chat!!)
+ f.chatItem != null -> chatItemsImported.add(f.chatItem!!)
+ f.call != null -> callsImported.add(f.call!!)
+ f.stickerPack != null -> stickersImported.add(f.stickerPack!!)
+ }
+ }
+
+ for (f in framesExported) {
+ when {
+ f.account != null -> accountImported.add(f.account!!)
+ f.recipient != null -> recipientsExported.add(f.recipient!!)
+ f.chat != null -> chatsExported.add(f.chat!!)
+ f.chatItem != null -> chatItemsExported.add(f.chatItem!!)
+ f.call != null -> callsExported.add(f.call!!)
+ f.stickerPack != null -> stickersExported.add(f.stickerPack!!)
+ }
+ }
+ prettyAssertEquals(accountImported, accountExported)
+ prettyAssertEquals(recipientsImported, recipientsExported) { it.id }
+ prettyAssertEquals(chatsImported, chatsExported) { it.id }
+ prettyAssertEquals(chatItemsImported, chatItemsExported) { it.dateSent }
+ prettyAssertEquals(callsImported, callsExported) { it.callId }
+ prettyAssertEquals(stickersImported, stickersExported) { it.packId }
+ }
+
+ private fun prettyAssertEquals(import: List, export: List) {
+ Assert.assertEquals(import.size, export.size)
+ import.zip(export).forEach { (a1, a2) ->
+ if (a1 != a2) {
+ Assert.fail("Items do not match: \n $a1 \n $a2")
+ }
+ }
+ }
+
+ private fun Random.trueWithProbability(prob: Float): Boolean {
+ return nextFloat() < prob
+ }
+
+ private fun > prettyAssertEquals(import: List, export: List, selector: (T) -> R?) {
+ if (import.size != export.size) {
+ var msg = StringBuilder()
+ for (i in import) {
+ msg.append(i)
+ msg.append("\n")
+ }
+ for (i in export) {
+ msg.append(i)
+ msg.append("\n")
+ }
+ Assert.fail(msg.toString())
+ }
+ Assert.assertEquals(import.size, export.size)
+ val sortedImport = import.sortedBy(selector)
+ val sortedExport = export.sortedBy(selector)
+
+ prettyAssertEquals(sortedImport, sortedExport)
+ }
+
+ private fun readAllFrames(import: ByteArray, selfData: BackupRepository.SelfData): List {
+ val inputFactory = { ByteArrayInputStream(import) }
+ val frameReader = EncryptedBackupReader(
+ key = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey(),
+ aci = selfData.aci,
+ streamLength = import.size.toLong(),
+ dataStream = inputFactory
+ )
+ val frames = ArrayList()
+ while (frameReader.hasNext()) {
+ frames.add(frameReader.next())
+ }
+
+ return frames
+ }
+
+ private fun outputFile(importBytes: ByteArray, resultBytes: ByteArray? = null) {
+ grantPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
+ val dir = File(Environment.getExternalStorageDirectory(), "backup-tests")
+ if (dir.mkdirs() || dir.exists()) {
+ FileOutputStream(File(dir, testName.methodName + ".import")).use {
+ it.write(importBytes)
+ it.flush()
+ }
+
+ if (resultBytes != null) {
+ FileOutputStream(File(dir, testName.methodName + ".result")).use {
+ it.write(resultBytes)
+ it.flush()
+ }
+ }
+ }
+ }
+
+ private fun grantPermissions(vararg permissions: String?) {
+ val auto: UiAutomation = InstrumentationRegistry.getInstrumentation().uiAutomation
+ for (perm in permissions) {
+ auto.grantRuntimePermissionAsUser(InstrumentationRegistry.getInstrumentation().targetContext.packageName, perm, android.os.Process.myUserHandle())
+ }
+ }
+}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt
new file mode 100644
index 00000000..f57de6ce
--- /dev/null
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2024 Signal Messenger, LLC
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+package org.tm.archive.backup.v2
+
+import org.tm.archive.crypto.ProfileKeyUtil
+import org.whispersystems.signalservice.api.util.toByteArray
+import java.util.UUID
+import kotlin.random.Random
+
+object TestRecipientUtils {
+
+ private var upperGenAci = 13131313L
+ private var lowerGenAci = 0L
+
+ private var upperGenPni = 12121212L
+ private var lowerGenPni = 0L
+
+ private var groupMasterKeyRandom = Random(12345)
+
+ fun generateProfileKey(): ByteArray {
+ return ProfileKeyUtil.createNew().serialize()
+ }
+
+ fun nextPni(): ByteArray {
+ synchronized(this) {
+ lowerGenPni++
+ var uuid = UUID(upperGenPni, lowerGenPni)
+ return uuid.toByteArray()
+ }
+ }
+
+ fun nextAci(): ByteArray {
+ synchronized(this) {
+ lowerGenAci++
+ var uuid = UUID(upperGenAci, lowerGenAci)
+ return uuid.toByteArray()
+ }
+ }
+
+ fun generateGroupMasterKey(): ByteArray {
+ val masterKey = ByteArray(32)
+ groupMasterKeyRandom.nextBytes(masterKey)
+ return masterKey
+ }
+}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt
index b129f9bb..6afca218 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt
@@ -8,6 +8,7 @@ package org.tm.archive.conversation.v2.items
import android.net.Uri
import android.view.View
import androidx.lifecycle.Observer
+import com.bumptech.glide.RequestManager
import io.mockk.mockk
import org.junit.Assert.assertEquals
import org.junit.Rule
@@ -29,7 +30,6 @@ import org.tm.archive.groups.GroupId
import org.tm.archive.groups.GroupMigrationMembershipChange
import org.tm.archive.linkpreview.LinkPreview
import org.tm.archive.mediapreview.MediaIntentFactory
-import org.tm.archive.mms.GlideRequests
import org.tm.archive.recipients.Recipient
import org.tm.archive.recipients.RecipientId
import org.tm.archive.stickers.StickerLocator
@@ -209,8 +209,9 @@ class V2ConversationItemShapeTest {
override val selectedItems: Set = emptySet()
override val isMessageRequestAccepted: Boolean = true
override val searchQuery: String? = null
- override val glideRequests: GlideRequests = mockk()
+ override val requestManager: RequestManager = mockk()
override val isParentInScroll: Boolean = false
+ override fun getChatColorsData(): ChatColorsDrawable.ChatColorsData = ChatColorsDrawable.ChatColorsData(null, null)
override fun onStartExpirationTimeout(messageRecord: MessageRecord) = Unit
@@ -321,5 +322,11 @@ class V2ConversationItemShapeTest {
override fun onItemClick(item: MultiselectPart?) = Unit
override fun onItemLongClick(itemView: View?, item: MultiselectPart?) = Unit
+
+ override fun onShowSafetyTips(forGroup: Boolean) = Unit
+
+ override fun onReportSpamLearnMoreClicked() = Unit
+
+ override fun onMessageRequestAcceptOptionsClicked() = Unit
}
}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest.kt
index bdcefe3b..35d95dc6 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest.kt
@@ -51,18 +51,16 @@ class AttachmentTableTest {
SignalDatabase.attachments.updateAttachmentData(
attachment,
- createMediaStream(byteArrayOf(1, 2, 3, 4, 5)),
- false
+ createMediaStream(byteArrayOf(1, 2, 3, 4, 5))
)
SignalDatabase.attachments.updateAttachmentData(
attachment2,
- createMediaStream(byteArrayOf(1, 2, 3)),
- false
+ createMediaStream(byteArrayOf(1, 2, 3))
)
- val attachment1Info = SignalDatabase.attachments.getAttachmentDataFileInfo(attachment.attachmentId, AttachmentTable.DATA_FILE)
- val attachment2Info = SignalDatabase.attachments.getAttachmentDataFileInfo(attachment2.attachmentId, AttachmentTable.DATA_FILE)
+ val attachment1Info = SignalDatabase.attachments.getDataFileInfo(attachment.attachmentId)
+ val attachment2Info = SignalDatabase.attachments.getDataFileInfo(attachment2.attachmentId)
assertNotEquals(attachment1Info, attachment2Info)
}
@@ -79,18 +77,16 @@ class AttachmentTableTest {
SignalDatabase.attachments.updateAttachmentData(
attachment,
- createMediaStream(byteArrayOf(1, 2, 3, 4, 5)),
- true
+ createMediaStream(byteArrayOf(1, 2, 3, 4, 5))
)
SignalDatabase.attachments.updateAttachmentData(
attachment2,
- createMediaStream(byteArrayOf(1, 2, 3, 4)),
- true
+ createMediaStream(byteArrayOf(1, 2, 3, 4))
)
- val attachment1Info = SignalDatabase.attachments.getAttachmentDataFileInfo(attachment.attachmentId, AttachmentTable.DATA_FILE)
- val attachment2Info = SignalDatabase.attachments.getAttachmentDataFileInfo(attachment2.attachmentId, AttachmentTable.DATA_FILE)
+ val attachment1Info = SignalDatabase.attachments.getDataFileInfo(attachment.attachmentId)
+ val attachment2Info = SignalDatabase.attachments.getDataFileInfo(attachment2.attachmentId)
assertNotEquals(attachment1Info, attachment2Info)
}
@@ -121,15 +117,14 @@ class AttachmentTableTest {
val highDatabaseAttachment = SignalDatabase.attachments.insertAttachmentForPreUpload(highQualityPreUpload)
// WHEN
- SignalDatabase.attachments.updateAttachmentData(standardDatabaseAttachment, createMediaStream(compressedData), false)
+ SignalDatabase.attachments.updateAttachmentData(standardDatabaseAttachment, createMediaStream(compressedData))
// THEN
- val previousInfo = SignalDatabase.attachments.getAttachmentDataFileInfo(previousDatabaseAttachmentId, AttachmentTable.DATA_FILE)!!
- val standardInfo = SignalDatabase.attachments.getAttachmentDataFileInfo(standardDatabaseAttachment.attachmentId, AttachmentTable.DATA_FILE)!!
- val highInfo = SignalDatabase.attachments.getAttachmentDataFileInfo(highDatabaseAttachment.attachmentId, AttachmentTable.DATA_FILE)!!
+ val previousInfo = SignalDatabase.attachments.getDataFileInfo(previousDatabaseAttachmentId)!!
+ val standardInfo = SignalDatabase.attachments.getDataFileInfo(standardDatabaseAttachment.attachmentId)!!
+ val highInfo = SignalDatabase.attachments.getDataFileInfo(highDatabaseAttachment.attachmentId)!!
assertNotEquals(standardInfo, highInfo)
- standardInfo.file assertIs previousInfo.file
highInfo.file assertIsNot standardInfo.file
highInfo.file.exists() assertIs true
}
@@ -158,9 +153,9 @@ class AttachmentTableTest {
val secondHighDatabaseAttachment = SignalDatabase.attachments.insertAttachmentForPreUpload(secondHighQualityPreUpload)
// THEN
- val standardInfo = SignalDatabase.attachments.getAttachmentDataFileInfo(standardDatabaseAttachment.attachmentId, AttachmentTable.DATA_FILE)!!
- val highInfo = SignalDatabase.attachments.getAttachmentDataFileInfo(highDatabaseAttachment.attachmentId, AttachmentTable.DATA_FILE)!!
- val secondHighInfo = SignalDatabase.attachments.getAttachmentDataFileInfo(secondHighDatabaseAttachment.attachmentId, AttachmentTable.DATA_FILE)!!
+ val standardInfo = SignalDatabase.attachments.getDataFileInfo(standardDatabaseAttachment.attachmentId)!!
+ val highInfo = SignalDatabase.attachments.getDataFileInfo(highDatabaseAttachment.attachmentId)!!
+ val secondHighInfo = SignalDatabase.attachments.getDataFileInfo(secondHighDatabaseAttachment.attachmentId)!!
highInfo.file assertIsNot standardInfo.file
secondHighInfo.file assertIs highInfo.file
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt
new file mode 100644
index 00000000..ef9bd16c
--- /dev/null
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt
@@ -0,0 +1,804 @@
+package org.tm.archive.database
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import org.junit.Assert.assertArrayEquals
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.signal.core.util.Base64
+import org.signal.core.util.update
+import org.tm.archive.attachments.AttachmentId
+import org.tm.archive.attachments.PointerAttachment
+import org.tm.archive.database.AttachmentTable.TransformProperties
+import org.tm.archive.keyvalue.SignalStore
+import org.tm.archive.mms.MediaStream
+import org.tm.archive.mms.OutgoingMessage
+import org.tm.archive.mms.QuoteModel
+import org.tm.archive.mms.SentMediaQuality
+import org.tm.archive.providers.BlobProvider
+import org.tm.archive.recipients.Recipient
+import org.tm.archive.util.MediaUtil
+import org.whispersystems.signalservice.api.push.ServiceId
+import java.io.File
+import java.util.UUID
+import kotlin.random.Random
+import kotlin.time.Duration.Companion.days
+
+/**
+ * Collection of [AttachmentTable] tests focused around deduping logic.
+ */
+@RunWith(AndroidJUnit4::class)
+class AttachmentTableTest_deduping {
+
+ companion object {
+ val DATA_A = byteArrayOf(1, 2, 3)
+ val DATA_A_COMPRESSED = byteArrayOf(4, 5, 6)
+ val DATA_A_HASH = byteArrayOf(1, 1, 1)
+
+ val DATA_B = byteArrayOf(7, 8, 9)
+ }
+
+ @Before
+ fun setUp() {
+ SignalStore.account().setAci(ServiceId.ACI.from(UUID.randomUUID()))
+ SignalStore.account().setPni(ServiceId.PNI.from(UUID.randomUUID()))
+ SignalStore.account().setE164("+15558675309")
+
+ SignalDatabase.attachments.deleteAllAttachments()
+ }
+
+ /**
+ * Creates two different files with different data. Should not dedupe.
+ */
+ @Test
+ fun differentFiles() {
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertWithData(DATA_B)
+
+ assertDataFilesAreDifferent(id1, id2)
+ }
+ }
+
+ /**
+ * Inserts files with identical data but with transform properties that make them incompatible. Should not dedupe.
+ */
+ @Test
+ fun identicalFiles_incompatibleTransforms() {
+ // Non-matching qualities
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(sentMediaQuality = SentMediaQuality.STANDARD.code))
+ val id2 = insertWithData(DATA_A, TransformProperties(sentMediaQuality = SentMediaQuality.HIGH.code))
+
+ assertDataFilesAreDifferent(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ }
+
+ // Non-matching video trim flag
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties())
+ val id2 = insertWithData(DATA_A, TransformProperties(videoTrim = true))
+
+ assertDataFilesAreDifferent(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ }
+
+ // Non-matching video trim start time
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(videoTrim = true, videoTrimStartTimeUs = 1, videoTrimEndTimeUs = 2))
+ val id2 = insertWithData(DATA_A, TransformProperties(videoTrim = true, videoTrimStartTimeUs = 0, videoTrimEndTimeUs = 2))
+
+ assertDataFilesAreDifferent(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ }
+
+ // Non-matching video trim end time
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(videoTrim = true, videoTrimStartTimeUs = 0, videoTrimEndTimeUs = 1))
+ val id2 = insertWithData(DATA_A, TransformProperties(videoTrim = true, videoTrimStartTimeUs = 0, videoTrimEndTimeUs = 2))
+
+ assertDataFilesAreDifferent(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ }
+
+ // Non-matching mp4 fast start
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(mp4FastStart = true))
+ val id2 = insertWithData(DATA_A, TransformProperties(mp4FastStart = false))
+
+ assertDataFilesAreDifferent(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ }
+ }
+
+ /**
+ * Inserts files with identical data and compatible transform properties. Should dedupe.
+ */
+ @Test
+ fun identicalFiles_compatibleTransforms() {
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertWithData(DATA_A)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertSkipTransform(id1, false)
+ assertSkipTransform(id2, false)
+ }
+
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(sentMediaQuality = SentMediaQuality.STANDARD.code))
+ val id2 = insertWithData(DATA_A, TransformProperties(sentMediaQuality = SentMediaQuality.STANDARD.code))
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertSkipTransform(id1, false)
+ assertSkipTransform(id2, false)
+ }
+
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(sentMediaQuality = SentMediaQuality.HIGH.code))
+ val id2 = insertWithData(DATA_A, TransformProperties(sentMediaQuality = SentMediaQuality.HIGH.code))
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertSkipTransform(id1, false)
+ assertSkipTransform(id2, false)
+ }
+
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(videoTrim = true, videoTrimStartTimeUs = 1, videoTrimEndTimeUs = 2))
+ val id2 = insertWithData(DATA_A, TransformProperties(videoTrim = true, videoTrimStartTimeUs = 1, videoTrimEndTimeUs = 2))
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertSkipTransform(id1, false)
+ assertSkipTransform(id2, false)
+ }
+ }
+
+ /**
+ * Walks through various scenarios where files are compressed and uploaded.
+ */
+ @Test
+ fun compressionAndUploads() {
+ // Matches after the first is compressed, skip transform properly set
+ test {
+ val id1 = insertWithData(DATA_A)
+ compress(id1, DATA_A_COMPRESSED)
+
+ val id2 = insertWithData(DATA_A)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id2, true)
+ }
+
+ // Matches after the first is uploaded, skip transform and ending hash properly set
+ test {
+ val id1 = insertWithData(DATA_A)
+ compress(id1, DATA_A_COMPRESSED)
+ upload(id1)
+
+ val id2 = insertWithData(DATA_A)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id2, true)
+ }
+
+ // Mimics sending two files at once. Ensures all fields are kept in sync as we compress and upload.
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertWithData(DATA_A)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertSkipTransform(id1, false)
+ assertSkipTransform(id2, false)
+
+ compress(id1, DATA_A_COMPRESSED)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id2, true)
+
+ upload(id1)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertRemoteFieldsMatch(id1, id2)
+ }
+
+ // Re-use the upload when uploaded recently
+ test {
+ val id1 = insertWithData(DATA_A)
+ compress(id1, DATA_A_COMPRESSED)
+ upload(id1, uploadTimestamp = System.currentTimeMillis())
+
+ val id2 = insertWithData(DATA_A)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertRemoteFieldsMatch(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id2, true)
+ }
+
+ // Do not re-use old uploads
+ test {
+ val id1 = insertWithData(DATA_A)
+ compress(id1, DATA_A_COMPRESSED)
+ upload(id1, uploadTimestamp = System.currentTimeMillis() - 100.days.inWholeMilliseconds)
+
+ val id2 = insertWithData(DATA_A)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id2, true)
+
+ assertDoesNotHaveRemoteFields(id2)
+ }
+
+ // This isn't so much "desirable behavior" as it is documenting how things work.
+ // If an attachment is compressed but not uploaded yet, it will have a DATA_HASH_START that doesn't match the actual file content.
+ // This means that if we insert a new attachment with data that matches the compressed data, we won't find a match.
+ // This is ok because we don't allow forwarding unsent messages, so the chances of the user somehow sending a file that matches data we compressed are very low.
+ // What *is* more common is that the user may send DATA_A again, and in this case we will still catch the dedupe (which is already tested above).
+ test {
+ val id1 = insertWithData(DATA_A)
+ compress(id1, DATA_A_COMPRESSED)
+
+ val id2 = insertWithData(DATA_A_COMPRESSED)
+
+ assertDataFilesAreDifferent(id1, id2)
+ }
+
+ // This represents what would happen if you forward an already-send compressed attachment. We should match, skip transform, and skip upload.
+ test {
+ val id1 = insertWithData(DATA_A)
+ compress(id1, DATA_A_COMPRESSED)
+ upload(id1, uploadTimestamp = System.currentTimeMillis())
+
+ val id2 = insertWithData(DATA_A_COMPRESSED)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id1, true)
+ assertRemoteFieldsMatch(id1, id2)
+ }
+
+ // This represents what would happen if you edited a video, sent it, then forwarded it. We should match, skip transform, and skip upload.
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(videoTrim = true, videoTrimStartTimeUs = 1, videoTrimEndTimeUs = 2))
+ compress(id1, DATA_A_COMPRESSED)
+ upload(id1, uploadTimestamp = System.currentTimeMillis())
+
+ val id2 = insertWithData(DATA_A_COMPRESSED)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id1, true)
+ assertRemoteFieldsMatch(id1, id2)
+ }
+
+ // This represents what would happen if you edited a video, sent it, then forwarded it, but *edited the forwarded video*. We should not dedupe.
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(videoTrim = true, videoTrimStartTimeUs = 1, videoTrimEndTimeUs = 2))
+ compress(id1, DATA_A_COMPRESSED)
+ upload(id1, uploadTimestamp = System.currentTimeMillis())
+
+ val id2 = insertWithData(DATA_A_COMPRESSED, TransformProperties(videoTrim = true, videoTrimStartTimeUs = 1, videoTrimEndTimeUs = 2))
+
+ assertDataFilesAreDifferent(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id2, false)
+ assertDoesNotHaveRemoteFields(id2)
+ }
+
+ // This represents what would happen if you sent an image using standard quality, then forwarded it using high quality.
+ // Since you're forwarding, it doesn't matter if the new thing has a higher quality, we should still match and skip transform.
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(sentMediaQuality = SentMediaQuality.STANDARD.code))
+ compress(id1, DATA_A_COMPRESSED)
+ upload(id1, uploadTimestamp = System.currentTimeMillis())
+
+ val id2 = insertWithData(DATA_A_COMPRESSED, TransformProperties(sentMediaQuality = SentMediaQuality.HIGH.code))
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id1, true)
+ assertRemoteFieldsMatch(id1, id2)
+ }
+
+ // This represents what would happen if you sent an image using high quality, then forwarded it using standard quality.
+ // Since you're forwarding, it doesn't matter if the new thing has a lower quality, we should still match and skip transform.
+ test {
+ val id1 = insertWithData(DATA_A, TransformProperties(sentMediaQuality = SentMediaQuality.HIGH.code))
+ compress(id1, DATA_A_COMPRESSED)
+ upload(id1, uploadTimestamp = System.currentTimeMillis())
+
+ val id2 = insertWithData(DATA_A_COMPRESSED, TransformProperties(sentMediaQuality = SentMediaQuality.STANDARD.code))
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertSkipTransform(id1, true)
+ assertSkipTransform(id1, true)
+ assertRemoteFieldsMatch(id1, id2)
+ }
+
+ // Make sure that files marked as unhashable are all updated together
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertWithData(DATA_A)
+ upload(id1)
+ upload(id2)
+ clearHashes(id1)
+ clearHashes(id2)
+
+ val file = dataFile(id1)
+ SignalDatabase.attachments.markDataFileAsUnhashable(file)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+
+ val dataFileInfo = SignalDatabase.attachments.getDataFileInfo(id1)!!
+ assertTrue(dataFileInfo.hashEnd!!.startsWith("UNHASHABLE-"))
+ }
+ }
+
+ /**
+ * Various deletion scenarios to ensure that duped files don't deleted while there's still references.
+ */
+ @Test
+ fun deletions() {
+ // Delete original then dupe
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertWithData(DATA_A)
+ val dataFile = dataFile(id1)
+
+ assertDataFilesAreTheSame(id1, id2)
+
+ delete(id1)
+
+ assertDeleted(id1)
+ assertRowAndFileExists(id2)
+ assertTrue(dataFile.exists())
+
+ delete(id2)
+
+ assertDeleted(id2)
+ assertFalse(dataFile.exists())
+ }
+
+ // Delete dupe then original
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertWithData(DATA_A)
+ val dataFile = dataFile(id1)
+
+ assertDataFilesAreTheSame(id1, id2)
+
+ delete(id2)
+ assertDeleted(id2)
+ assertRowAndFileExists(id1)
+ assertTrue(dataFile.exists())
+
+ delete(id1)
+ assertDeleted(id1)
+ assertFalse(dataFile.exists())
+ }
+
+ // Delete original after it was compressed
+ test {
+ val id1 = insertWithData(DATA_A)
+ compress(id1, DATA_A_COMPRESSED)
+
+ val id2 = insertWithData(DATA_A)
+
+ delete(id1)
+
+ assertDeleted(id1)
+ assertRowAndFileExists(id2)
+ assertSkipTransform(id2, true)
+ }
+
+ // Quotes are weak references and should not prevent us from deleting the file
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertQuote(id1)
+
+ val dataFile = dataFile(id1)
+
+ delete(id1)
+ assertDeleted(id1)
+ assertRowExists(id2)
+ assertFalse(dataFile.exists())
+ }
+ }
+
+ @Test
+ fun quotes() {
+ // Basic quote deduping
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertQuote(id1)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ }
+
+ // Making sure remote fields carry
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertQuote(id1)
+ upload(id1)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashStartMatches(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertRemoteFieldsMatch(id1, id2)
+ }
+
+ // Making sure things work for quotes of videos, which have trickier transform properties
+ test {
+ val id1 = insertWithData(DATA_A, transformProperties = TransformProperties.forVideoTrim(1, 2))
+ compress(id1, DATA_A_COMPRESSED)
+ upload(id1)
+
+ val id2 = insertQuote(id1)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertRemoteFieldsMatch(id1, id2)
+ }
+ }
+
+ /**
+ * Suite of tests around the migration where we hash all of the attachments and potentially dedupe them.
+ */
+ @Test
+ fun migration() {
+ // Verifying that getUnhashedDataFile only returns if there's actually missing hashes
+ test {
+ val id = insertWithData(DATA_A)
+ upload(id)
+ assertNull(SignalDatabase.attachments.getUnhashedDataFile())
+ }
+
+ // Verifying that getUnhashedDataFile finds the missing hash
+ test {
+ val id = insertWithData(DATA_A)
+ upload(id)
+ clearHashes(id)
+ assertNotNull(SignalDatabase.attachments.getUnhashedDataFile())
+ }
+
+ // Verifying that getUnhashedDataFile doesn't return if the file isn't done downloading
+ test {
+ val id = insertWithData(DATA_A)
+ upload(id)
+ setTransferState(id, AttachmentTable.TRANSFER_PROGRESS_PENDING)
+ clearHashes(id)
+ assertNull(SignalDatabase.attachments.getUnhashedDataFile())
+ }
+
+ // If two attachments share the same file, when we backfill the hash, make sure both get their hashes set
+ test {
+ val id1 = insertWithData(DATA_A)
+ val id2 = insertWithData(DATA_A)
+ upload(id1)
+ upload(id2)
+
+ clearHashes(id1)
+ clearHashes(id2)
+
+ val file = dataFile(id1)
+ SignalDatabase.attachments.setHashForDataFile(file, DATA_A_HASH)
+
+ assertDataHashEnd(id1, DATA_A_HASH)
+ assertDataHashEndMatches(id1, id2)
+ }
+
+ // Creates a situation where two different attachments have the same data but wrote to different files, and verifies the migration dedupes it
+ test {
+ val id1 = insertWithData(DATA_A)
+ upload(id1)
+ clearHashes(id1)
+
+ val id2 = insertWithData(DATA_A)
+ upload(id2)
+ clearHashes(id2)
+
+ assertDataFilesAreDifferent(id1, id2)
+
+ val file1 = dataFile(id1)
+ SignalDatabase.attachments.setHashForDataFile(file1, DATA_A_HASH)
+
+ assertDataHashEnd(id1, DATA_A_HASH)
+ assertDataFilesAreDifferent(id1, id2)
+
+ val file2 = dataFile(id2)
+ SignalDatabase.attachments.setHashForDataFile(file2, DATA_A_HASH)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertFalse(file2.exists())
+ }
+
+ // We've got three files now with the same data, with two of them sharing a file. We want to make sure *both* entries that share the same file get deduped.
+ test {
+ val id1 = insertWithData(DATA_A)
+ upload(id1)
+ clearHashes(id1)
+
+ val id2 = insertWithData(DATA_A)
+ val id3 = insertWithData(DATA_A)
+ upload(id2)
+ upload(id3)
+ clearHashes(id2)
+ clearHashes(id3)
+
+ assertDataFilesAreDifferent(id1, id2)
+ assertDataFilesAreTheSame(id2, id3)
+
+ val file1 = dataFile(id1)
+ SignalDatabase.attachments.setHashForDataFile(file1, DATA_A_HASH)
+ assertDataHashEnd(id1, DATA_A_HASH)
+
+ val file2 = dataFile(id2)
+ SignalDatabase.attachments.setHashForDataFile(file2, DATA_A_HASH)
+
+ assertDataFilesAreTheSame(id1, id2)
+ assertDataHashEndMatches(id1, id2)
+ assertDataHashEndMatches(id2, id3)
+ assertFalse(file2.exists())
+ }
+
+ // We don't want to mess with files that are still downloading, so this makes sure that even if data matches, we don't dedupe and don't delete the file
+ test {
+ val id1 = insertWithData(DATA_A)
+ upload(id1)
+ clearHashes(id1)
+
+ val id2 = insertWithData(DATA_A)
+ // *not* uploaded
+ clearHashes(id2)
+
+ assertDataFilesAreDifferent(id1, id2)
+
+ val file1 = dataFile(id1)
+ SignalDatabase.attachments.setHashForDataFile(file1, DATA_A_HASH)
+ assertDataHashEnd(id1, DATA_A_HASH)
+
+ val file2 = dataFile(id2)
+ SignalDatabase.attachments.setHashForDataFile(file2, DATA_A_HASH)
+
+ assertDataFilesAreDifferent(id1, id2)
+ assertTrue(file2.exists())
+ }
+ }
+
+ private class TestContext {
+ fun insertWithData(data: ByteArray, transformProperties: TransformProperties = TransformProperties.empty()): AttachmentId {
+ val uri = BlobProvider.getInstance().forData(data).createForSingleSessionInMemory()
+
+ val attachment = UriAttachmentBuilder.build(
+ id = Random.nextLong(),
+ uri = uri,
+ contentType = MediaUtil.IMAGE_JPEG,
+ transformProperties = transformProperties
+ )
+
+ return SignalDatabase.attachments.insertAttachmentForPreUpload(attachment).attachmentId
+ }
+
+ fun insertQuote(attachmentId: AttachmentId): AttachmentId {
+ val originalAttachment = SignalDatabase.attachments.getAttachment(attachmentId)!!
+ val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.self())
+ val messageId = SignalDatabase.messages.insertMessageOutbox(
+ message = OutgoingMessage(
+ threadRecipient = Recipient.self(),
+ sentTimeMillis = System.currentTimeMillis(),
+ body = "some text",
+ outgoingQuote = QuoteModel(
+ id = 123,
+ author = Recipient.self().id,
+ text = "Some quote text",
+ isOriginalMissing = false,
+ attachments = listOf(originalAttachment),
+ mentions = emptyList(),
+ type = QuoteModel.Type.NORMAL,
+ bodyRanges = null
+ )
+ ),
+ threadId = threadId,
+ forceSms = false,
+ insertListener = null
+ )
+
+ val attachments = SignalDatabase.attachments.getAttachmentsForMessage(messageId)
+ return attachments[0].attachmentId
+ }
+
+ fun compress(attachmentId: AttachmentId, newData: ByteArray, mp4FastStart: Boolean = false) {
+ val databaseAttachment = SignalDatabase.attachments.getAttachment(attachmentId)!!
+ SignalDatabase.attachments.updateAttachmentData(databaseAttachment, newData.asMediaStream())
+ SignalDatabase.attachments.markAttachmentAsTransformed(attachmentId, withFastStart = mp4FastStart)
+ }
+
+ fun upload(attachmentId: AttachmentId, uploadTimestamp: Long = System.currentTimeMillis()) {
+ SignalDatabase.attachments.finalizeAttachmentAfterUpload(attachmentId, createPointerAttachment(attachmentId, uploadTimestamp), uploadTimestamp)
+ }
+
+ fun delete(attachmentId: AttachmentId) {
+ SignalDatabase.attachments.deleteAttachment(attachmentId)
+ }
+
+ fun dataFile(attachmentId: AttachmentId): File {
+ return SignalDatabase.attachments.getDataFileInfo(attachmentId)!!.file
+ }
+
+ fun setTransferState(attachmentId: AttachmentId, transferState: Int) {
+ // messageId doesn't actually matter -- that's for notifying listeners
+ SignalDatabase.attachments.setTransferState(messageId = -1, attachmentId = attachmentId, transferState = transferState)
+ }
+
+ fun clearHashes(id: AttachmentId) {
+ SignalDatabase.attachments.writableDatabase
+ .update(AttachmentTable.TABLE_NAME)
+ .values(
+ AttachmentTable.DATA_HASH_START to null,
+ AttachmentTable.DATA_HASH_END to null
+ )
+ .where("${AttachmentTable.ID} = ?", id)
+ .run()
+ }
+
+ fun assertDeleted(attachmentId: AttachmentId) {
+ assertNull("$attachmentId exists, but it shouldn't!", SignalDatabase.attachments.getAttachment(attachmentId))
+ }
+
+ fun assertRowAndFileExists(attachmentId: AttachmentId) {
+ val databaseAttachment = SignalDatabase.attachments.getAttachment(attachmentId)
+ assertNotNull("$attachmentId does not exist!", databaseAttachment)
+
+ val dataFileInfo = SignalDatabase.attachments.getDataFileInfo(attachmentId)
+ assertTrue("The file for $attachmentId does not exist!", dataFileInfo!!.file.exists())
+ }
+
+ fun assertRowExists(attachmentId: AttachmentId) {
+ val databaseAttachment = SignalDatabase.attachments.getAttachment(attachmentId)
+ assertNotNull("$attachmentId does not exist!", databaseAttachment)
+ }
+
+ fun assertDataFilesAreTheSame(lhs: AttachmentId, rhs: AttachmentId) {
+ val lhsInfo = SignalDatabase.attachments.getDataFileInfo(lhs)!!
+ val rhsInfo = SignalDatabase.attachments.getDataFileInfo(rhs)!!
+
+ assert(lhsInfo.file.exists())
+ assert(rhsInfo.file.exists())
+
+ assertEquals(lhsInfo.file, rhsInfo.file)
+ assertEquals(lhsInfo.length, rhsInfo.length)
+ assertArrayEquals(lhsInfo.random, rhsInfo.random)
+ }
+
+ fun assertDataFilesAreDifferent(lhs: AttachmentId, rhs: AttachmentId) {
+ val lhsInfo = SignalDatabase.attachments.getDataFileInfo(lhs)!!
+ val rhsInfo = SignalDatabase.attachments.getDataFileInfo(rhs)!!
+
+ assert(lhsInfo.file.exists())
+ assert(rhsInfo.file.exists())
+
+ assertNotEquals(lhsInfo.file, rhsInfo.file)
+ }
+
+ fun assertDataHashStartMatches(lhs: AttachmentId, rhs: AttachmentId) {
+ val lhsInfo = SignalDatabase.attachments.getDataFileInfo(lhs)!!
+ val rhsInfo = SignalDatabase.attachments.getDataFileInfo(rhs)!!
+
+ assertNotNull(lhsInfo.hashStart)
+ assertEquals("DATA_HASH_START's did not match!", lhsInfo.hashStart, rhsInfo.hashStart)
+ }
+
+ fun assertDataHashEndMatches(lhs: AttachmentId, rhs: AttachmentId) {
+ val lhsInfo = SignalDatabase.attachments.getDataFileInfo(lhs)!!
+ val rhsInfo = SignalDatabase.attachments.getDataFileInfo(rhs)!!
+
+ assertNotNull(lhsInfo.hashEnd)
+ assertEquals("DATA_HASH_END's did not match!", lhsInfo.hashEnd, rhsInfo.hashEnd)
+ }
+
+ fun assertDataHashEnd(id: AttachmentId, byteArray: ByteArray) {
+ val dataFileInfo = SignalDatabase.attachments.getDataFileInfo(id)!!
+ assertArrayEquals(byteArray, Base64.decode(dataFileInfo.hashEnd!!))
+ }
+
+ fun assertRemoteFieldsMatch(lhs: AttachmentId, rhs: AttachmentId) {
+ val lhsAttachment = SignalDatabase.attachments.getAttachment(lhs)!!
+ val rhsAttachment = SignalDatabase.attachments.getAttachment(rhs)!!
+
+ assertEquals(lhsAttachment.remoteLocation, rhsAttachment.remoteLocation)
+ assertEquals(lhsAttachment.remoteKey, rhsAttachment.remoteKey)
+ assertArrayEquals(lhsAttachment.remoteDigest, rhsAttachment.remoteDigest)
+ assertArrayEquals(lhsAttachment.incrementalDigest, rhsAttachment.incrementalDigest)
+ assertEquals(lhsAttachment.incrementalMacChunkSize, rhsAttachment.incrementalMacChunkSize)
+ assertEquals(lhsAttachment.cdnNumber, rhsAttachment.cdnNumber)
+ }
+
+ fun assertDoesNotHaveRemoteFields(attachmentId: AttachmentId) {
+ val databaseAttachment = SignalDatabase.attachments.getAttachment(attachmentId)!!
+ assertEquals(0, databaseAttachment.uploadTimestamp)
+ assertNull(databaseAttachment.remoteLocation)
+ assertNull(databaseAttachment.remoteDigest)
+ assertNull(databaseAttachment.remoteKey)
+ assertEquals(0, databaseAttachment.cdnNumber)
+ }
+
+ fun assertSkipTransform(attachmentId: AttachmentId, state: Boolean) {
+ val transformProperties = SignalDatabase.attachments.getTransformProperties(attachmentId)!!
+ assertEquals("Incorrect skipTransform!", transformProperties.skipTransform, state)
+ }
+
+ private fun ByteArray.asMediaStream(): MediaStream {
+ return MediaStream(this.inputStream(), MediaUtil.IMAGE_JPEG, 2, 2)
+ }
+
+ private fun createPointerAttachment(attachmentId: AttachmentId, uploadTimestamp: Long = System.currentTimeMillis()): PointerAttachment {
+ val location = "somewhere-${Random.nextLong()}"
+ val key = "somekey-${Random.nextLong()}"
+ val digest = Random.nextBytes(32)
+ val incrementalDigest = Random.nextBytes(16)
+
+ val databaseAttachment = SignalDatabase.attachments.getAttachment(attachmentId)!!
+
+ return PointerAttachment(
+ "image/jpeg",
+ AttachmentTable.TRANSFER_PROGRESS_DONE,
+ databaseAttachment.size, // size
+ null,
+ 3, // cdnNumber
+ location,
+ key,
+ digest,
+ incrementalDigest,
+ 5, // incrementalMacChunkSize
+ null,
+ databaseAttachment.voiceNote,
+ databaseAttachment.borderless,
+ databaseAttachment.videoGif,
+ databaseAttachment.width,
+ databaseAttachment.height,
+ uploadTimestamp,
+ databaseAttachment.caption,
+ databaseAttachment.stickerLocator,
+ databaseAttachment.blurHash
+ )
+ }
+ }
+
+ private fun test(content: TestContext.() -> Unit) {
+ SignalDatabase.attachments.deleteAllAttachments()
+ val context = TestContext()
+ context.content()
+ }
+}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/GroupTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/GroupTableTest.kt
index 73970cde..163b92f1 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/GroupTableTest.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/GroupTableTest.kt
@@ -7,7 +7,7 @@ import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
-import org.signal.core.util.delete
+import org.signal.core.util.deleteAll
import org.signal.core.util.readToList
import org.signal.core.util.requireLong
import org.signal.core.util.withinTransaction
@@ -33,8 +33,8 @@ class GroupTableTest {
fun setUp() {
groupTable = SignalDatabase.groups
- groupTable.writableDatabase.delete(GroupTable.TABLE_NAME).run()
- groupTable.writableDatabase.delete(GroupTable.MembershipTable.TABLE_NAME).run()
+ groupTable.writableDatabase.deleteAll(GroupTable.TABLE_NAME)
+ groupTable.writableDatabase.deleteAll(GroupTable.MembershipTable.TABLE_NAME)
}
@Test
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/LogDatabaseTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/LogDatabaseTest.kt
index 3563ffdb..348c9f73 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/LogDatabaseTest.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/LogDatabaseTest.kt
@@ -10,7 +10,7 @@ import org.signal.core.util.forEach
import org.signal.core.util.requireLong
import org.signal.core.util.requireNonNullString
import org.signal.core.util.select
-import org.signal.core.util.update
+import org.signal.core.util.updateAll
import org.tm.archive.crash.CrashConfig
import org.tm.archive.dependencies.ApplicationDependencies
import org.tm.archive.testing.assertIs
@@ -220,7 +220,7 @@ class LogDatabaseTest {
)
db.writableDatabase
- .update(LogDatabase.CrashTable.TABLE_NAME)
+ .updateAll(LogDatabase.CrashTable.TABLE_NAME)
.values(LogDatabase.CrashTable.LAST_PROMPTED_AT to currentTime)
.run()
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt
index 3cd2fa84..915ec274 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt
@@ -11,8 +11,6 @@ import org.signal.core.util.CursorUtil
import org.tm.archive.profiles.ProfileName
import org.tm.archive.recipients.RecipientId
import org.tm.archive.testing.SignalActivityRule
-import org.tm.archive.util.FeatureFlags
-import org.tm.archive.util.FeatureFlagsAccessor
import org.whispersystems.signalservice.api.push.ServiceId.ACI
import org.whispersystems.signalservice.api.push.ServiceId.PNI
import java.util.UUID
@@ -59,7 +57,7 @@ class RecipientTableTest {
SignalDatabase.recipients.setProfileName(hiddenRecipient, ProfileName.fromParts("Hidden", "Person"))
SignalDatabase.recipients.markHidden(hiddenRecipient)
- val results = SignalDatabase.recipients.querySignalContacts("Hidden", false)!!
+ val results = SignalDatabase.recipients.querySignalContacts(RecipientTable.ContactSearchQuery("Hidden", false))!!
assertEquals(0, results.count)
}
@@ -130,7 +128,7 @@ class RecipientTableTest {
SignalDatabase.recipients.setProfileName(blockedRecipient, ProfileName.fromParts("Blocked", "Person"))
SignalDatabase.recipients.setBlocked(blockedRecipient, true)
- val results = SignalDatabase.recipients.querySignalContacts("Blocked", false)!!
+ val results = SignalDatabase.recipients.querySignalContacts(RecipientTable.ContactSearchQuery("Blocked", false))!!
assertEquals(0, results.count)
}
@@ -167,8 +165,6 @@ class RecipientTableTest {
@Test
fun givenARecipientWithPniAndAci_whenIMarkItUnregistered_thenIExpectItToBeSplit() {
- FeatureFlagsAccessor.forceValue(FeatureFlags.PHONE_NUMBER_PRIVACY, true)
-
val mainId = SignalDatabase.recipients.getAndPossiblyMerge(ACI_A, PNI_A, E164_A)
SignalDatabase.recipients.markUnregistered(mainId)
@@ -185,12 +181,10 @@ class RecipientTableTest {
@Test
fun givenARecipientWithPniAndAci_whenISplitItForStorageSync_thenIExpectItToBeSplit() {
- FeatureFlagsAccessor.forceValue(FeatureFlags.PHONE_NUMBER_PRIVACY, true)
-
val mainId = SignalDatabase.recipients.getAndPossiblyMerge(ACI_A, PNI_A, E164_A)
val mainRecord = SignalDatabase.recipients.getRecord(mainId)
- SignalDatabase.recipients.splitForStorageSync(mainRecord.storageId!!)
+ SignalDatabase.recipients.splitForStorageSyncIfNecessary(mainRecord.aci!!)
val byAci: RecipientId = SignalDatabase.recipients.getByAci(ACI_A).get()
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt
index c5b5d19e..bfca5657 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt
@@ -18,6 +18,7 @@ import org.signal.core.util.Base64
import org.signal.core.util.SqlUtil
import org.signal.core.util.exists
import org.signal.core.util.orNull
+import org.signal.core.util.readToSingleBoolean
import org.signal.core.util.requireLong
import org.signal.core.util.requireNonNullString
import org.signal.core.util.select
@@ -40,8 +41,6 @@ import org.tm.archive.mms.IncomingMessage
import org.tm.archive.notifications.profiles.NotificationProfile
import org.tm.archive.recipients.Recipient
import org.tm.archive.recipients.RecipientId
-import org.tm.archive.util.FeatureFlags
-import org.tm.archive.util.FeatureFlagsAccessor
import org.tm.archive.util.Util
import org.whispersystems.signalservice.api.push.ServiceId.ACI
import org.whispersystems.signalservice.api.push.ServiceId.PNI
@@ -57,7 +56,6 @@ class RecipientTableTest_getAndPossiblyMerge {
SignalStore.account().setE164(E164_SELF)
SignalStore.account().setAci(ACI_SELF)
SignalStore.account().setPni(PNI_SELF)
- FeatureFlagsAccessor.forceValue(FeatureFlags.PHONE_NUMBER_PRIVACY, true)
}
@Test
@@ -109,6 +107,18 @@ class RecipientTableTest_getAndPossiblyMerge {
val record = SignalDatabase.recipients.getRecord(id)
assertEquals(RecipientTable.RegisteredState.REGISTERED, record.registered)
}
+
+ test("e164+pni+aci insert, pni verified") {
+ val id = process(E164_A, PNI_A, ACI_A, pniVerified = true)
+ expect(E164_A, PNI_A, ACI_A)
+ expectPniVerified()
+
+ val record = SignalDatabase.recipients.getRecord(id)
+ assertEquals(RecipientTable.RegisteredState.REGISTERED, record.registered)
+
+ process(E164_A, PNI_A, ACI_A, pniVerified = false)
+ expectPniVerified()
+ }
}
@Test
@@ -164,6 +174,7 @@ class RecipientTableTest_getAndPossiblyMerge {
expect(E164_A, PNI_A, ACI_A)
expectNoSessionSwitchoverEvent()
+ expectPniVerified()
}
test("no match, all fields") {
@@ -225,6 +236,8 @@ class RecipientTableTest_getAndPossiblyMerge {
given(E164_A, PNI_A, null, pniSession = true)
process(E164_A, PNI_A, ACI_A, pniVerified = true)
expect(E164_A, PNI_A, ACI_A)
+
+ expectPniVerified()
}
test("e164 and aci matches, all provided, new pni") {
@@ -694,6 +707,8 @@ class RecipientTableTest_getAndPossiblyMerge {
expectDeleted()
expect(E164_A, PNI_A, ACI_A)
+
+ expectPniVerified()
}
test("merge, e164+pni & aci, pni session, pni verified") {
@@ -706,6 +721,7 @@ class RecipientTableTest_getAndPossiblyMerge {
expect(E164_A, PNI_A, ACI_A)
expectThreadMergeEvent(E164_A)
+ expectPniVerified()
}
test("merge, e164+pni & e164+pni+aci, change number") {
@@ -760,6 +776,18 @@ class RecipientTableTest_getAndPossiblyMerge {
expectThreadMergeEvent(E164_A)
}
+ test("merge, e164+pni & e164+aci, pni+aci provided, change number") {
+ given(E164_A, PNI_A, null)
+ given(E164_B, null, ACI_A)
+
+ process(null, PNI_A, ACI_A)
+
+ expect(E164_A, PNI_A, ACI_A)
+
+ expectThreadMergeEvent(E164_A)
+ expectChangeNumberEvent()
+ }
+
test("merge, e164 + pni reassigned, aci abandoned") {
given(E164_A, PNI_A, ACI_A)
given(E164_B, PNI_B, ACI_B)
@@ -772,6 +800,17 @@ class RecipientTableTest_getAndPossiblyMerge {
expectChangeNumberEvent()
}
+ test("merge, e164 follows pni+aci") {
+ given(E164_A, PNI_A, null)
+ given(null, null, ACI_A)
+
+ process(null, PNI_A, ACI_A, pniVerified = true)
+
+ expect(E164_A, PNI_A, ACI_A)
+ expectThreadMergeEvent(E164_A)
+ expectPniVerified()
+ }
+
test("local user, local e164 and aci provided, changeSelf=false, leave e164 alone") {
given(E164_SELF, null, ACI_SELF)
given(null, null, ACI_A)
@@ -874,8 +913,8 @@ class RecipientTableTest_getAndPossiblyMerge {
// Thread validation
assertEquals(threadIdAci, retrievedThreadId)
- Assert.assertNull(SignalDatabase.threads.getThreadIdFor(recipientIdE164))
- Assert.assertNull(SignalDatabase.threads.getThreadRecord(threadIdE164))
+ assertNull(SignalDatabase.threads.getThreadIdFor(recipientIdE164))
+ assertNull(SignalDatabase.threads.getThreadRecord(threadIdE164))
// SMS validation
val sms1: MessageRecord = SignalDatabase.messages.getMessageRecord(smsId1)!!
@@ -919,10 +958,10 @@ class RecipientTableTest_getAndPossiblyMerge {
// Identity validation
assertEquals(identityKeyAci, SignalDatabase.identities.getIdentityStoreRecord(ACI_A.toString())!!.identityKey)
- Assert.assertNull(SignalDatabase.identities.getIdentityStoreRecord(E164_A))
+ assertNull(SignalDatabase.identities.getIdentityStoreRecord(E164_A))
// Session validation
- Assert.assertNotNull(SignalDatabase.sessions.load(ACI_SELF, SignalProtocolAddress(ACI_A.toString(), 1)))
+ assertNotNull(SignalDatabase.sessions.load(ACI_SELF, SignalProtocolAddress(ACI_A.toString(), 1)))
// Reaction validation
val reactionsSms: List = SignalDatabase.reactions.getReactions(MessageId(smsId1))
@@ -1037,6 +1076,10 @@ class RecipientTableTest_getAndPossiblyMerge {
if (!test.sessionSwitchoverExpected) {
test.expectNoSessionSwitchoverEvent()
}
+
+ if (!test.pniVerifiedExpected) {
+ test.expectPniNotVerified()
+ }
} catch (e: Throwable) {
if (e.javaClass != exception) {
val error = java.lang.AssertionError("[$name] ${e.message}")
@@ -1056,6 +1099,7 @@ class RecipientTableTest_getAndPossiblyMerge {
var changeNumberExpected = false
var threadMergeExpected = false
var sessionSwitchoverExpected = false
+ var pniVerifiedExpected = false
init {
// Need to delete these first to prevent foreign key crash
@@ -1207,6 +1251,24 @@ class RecipientTableTest_getAndPossiblyMerge {
assertNull("Unexpected thread merge event!", getLatestThreadMergeEvent(outputRecipientId))
}
+ fun expectPniVerified() {
+ assertTrue("Expected PNI to be verified!", isPniVerified(outputRecipientId))
+ pniVerifiedExpected = true
+ }
+
+ fun expectPniNotVerified() {
+ assertFalse("Expected PNI to be not be verified!", isPniVerified(outputRecipientId))
+ }
+
+ private fun isPniVerified(recipientId: RecipientId): Boolean {
+ return SignalDatabase.rawDatabase
+ .select(RecipientTable.PNI_SIGNATURE_VERIFIED)
+ .from(RecipientTable.TABLE_NAME)
+ .where("${RecipientTable.ID} = ?", recipientId)
+ .run()
+ .readToSingleBoolean(false)
+ }
+
private fun insert(e164: String?, pni: PNI?, aci: ACI?): RecipientId {
val id: Long = SignalDatabase.rawDatabase.insert(
RecipientTable.TABLE_NAME,
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/SmsDatabaseTest_collapseJoinRequestEventsIfPossible.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/SmsDatabaseTest_collapseJoinRequestEventsIfPossible.kt
index 5ca43dab..ad44a039 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/SmsDatabaseTest_collapseJoinRequestEventsIfPossible.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/SmsDatabaseTest_collapseJoinRequestEventsIfPossible.kt
@@ -290,7 +290,8 @@ class SmsDatabaseTest_collapseJoinRequestEventsIfPossible {
from = sender,
timestamp = wallClock,
groupId = groupId,
- groupContext = groupContext
+ groupContext = groupContext,
+ serverGuid = null
)
}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt
index 3083038c..874877a1 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt
@@ -37,7 +37,7 @@ import java.util.Optional
*
* Handles setting up a mock web server for API calls, and provides mockable versions of [SignalServiceNetworkAccess].
*/
-class InstrumentationApplicationDependencyProvider(application: Application, default: ApplicationDependencyProvider) : ApplicationDependencies.Provider by default {
+class InstrumentationApplicationDependencyProvider(val application: Application, private val default: ApplicationDependencyProvider) : ApplicationDependencies.Provider by default {
private val serviceTrustStore: TrustStore
private val uncensoredConfiguration: SignalServiceConfiguration
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageContentProcessor__recipientStatusTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageContentProcessor__recipientStatusTest.kt
index 8f555697..a4f3cf36 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageContentProcessor__recipientStatusTest.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageContentProcessor__recipientStatusTest.kt
@@ -52,7 +52,7 @@ class MessageContentProcessor__recipientStatusTest {
processor.process(
envelope = MessageContentFuzzer.envelope(envelopeTimestamp),
content = MessageContentFuzzer.syncSentTextMessage(initialTextMessage, deliveredTo = listOf(harness.others[0])),
- metadata = MessageContentFuzzer.envelopeMetadata(harness.self.id, harness.self.id, groupId),
+ metadata = MessageContentFuzzer.envelopeMetadata(harness.self.id, harness.self.id, groupId = groupId),
serverDeliveredTimestamp = MessageContentFuzzer.fuzzServerDeliveredTimestamp(envelopeTimestamp)
)
@@ -64,7 +64,7 @@ class MessageContentProcessor__recipientStatusTest {
processor.process(
envelope = MessageContentFuzzer.envelope(envelopeTimestamp),
content = MessageContentFuzzer.syncSentTextMessage(initialTextMessage, deliveredTo = listOf(harness.others[0], harness.others[1]), recipientUpdate = true),
- metadata = MessageContentFuzzer.envelopeMetadata(harness.self.id, harness.self.id, groupId),
+ metadata = MessageContentFuzzer.envelopeMetadata(harness.self.id, harness.self.id, groupId = groupId),
serverDeliveredTimestamp = MessageContentFuzzer.fuzzServerDeliveredTimestamp(envelopeTimestamp)
)
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/SyncMessageProcessorTest_readSyncs.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/SyncMessageProcessorTest_readSyncs.kt
new file mode 100644
index 00000000..34c4957c
--- /dev/null
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/SyncMessageProcessorTest_readSyncs.kt
@@ -0,0 +1,225 @@
+/*
+ * Copyright 2024 Signal Messenger, LLC
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+package org.tm.archive.messages
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import io.mockk.every
+import io.mockk.mockkStatic
+import io.mockk.slot
+import io.mockk.unmockkStatic
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.tm.archive.database.SignalDatabase
+import org.tm.archive.jobs.ThreadUpdateJob
+import org.tm.archive.recipients.RecipientId
+import org.tm.archive.testing.GroupTestingUtils
+import org.tm.archive.testing.MessageContentFuzzer
+import org.tm.archive.testing.SignalActivityRule
+import org.tm.archive.testing.assertIs
+import java.util.UUID
+
+@Suppress("ClassName")
+@RunWith(AndroidJUnit4::class)
+class SyncMessageProcessorTest_readSyncs {
+
+ @get:Rule
+ val harness = SignalActivityRule(createGroup = true)
+
+ private lateinit var alice: RecipientId
+ private lateinit var bob: RecipientId
+ private lateinit var group: GroupTestingUtils.TestGroupInfo
+ private lateinit var processor: MessageContentProcessor
+
+ @Before
+ fun setUp() {
+ alice = harness.others[0]
+ bob = harness.others[1]
+ group = harness.group!!
+
+ processor = MessageContentProcessor(harness.context)
+
+ val threadIdSlot = slot()
+ mockkStatic(ThreadUpdateJob::class)
+ every { ThreadUpdateJob.enqueue(capture(threadIdSlot)) } answers {
+ SignalDatabase.threads.update(threadIdSlot.captured, false)
+ }
+ }
+
+ @After
+ fun tearDown() {
+ unmockkStatic(ThreadUpdateJob::class)
+ }
+
+ @Test
+ fun handleSynchronizeReadMessage() {
+ val messageHelper = MessageHelper()
+
+ val message1Timestamp = messageHelper.incomingText().timestamp
+ val message2Timestamp = messageHelper.incomingText().timestamp
+
+ val threadId = SignalDatabase.threads.getThreadIdFor(alice)!!
+ var threadRecord = SignalDatabase.threads.getThreadRecord(threadId)!!
+ threadRecord.unreadCount assertIs 2
+
+ messageHelper.syncReadMessage(alice to message1Timestamp, alice to message2Timestamp)
+
+ threadRecord = SignalDatabase.threads.getThreadRecord(threadId)!!
+ threadRecord.unreadCount assertIs 0
+ }
+
+ @Test
+ fun handleSynchronizeReadMessageMissingTimestamp() {
+ val messageHelper = MessageHelper()
+
+ messageHelper.incomingText().timestamp
+ val message2Timestamp = messageHelper.incomingText().timestamp
+
+ val threadId = SignalDatabase.threads.getThreadIdFor(alice)!!
+ var threadRecord = SignalDatabase.threads.getThreadRecord(threadId)!!
+ threadRecord.unreadCount assertIs 2
+
+ messageHelper.syncReadMessage(alice to message2Timestamp)
+
+ threadRecord = SignalDatabase.threads.getThreadRecord(threadId)!!
+ threadRecord.unreadCount assertIs 0
+ }
+
+ @Test
+ fun handleSynchronizeReadWithEdits() {
+ val messageHelper = MessageHelper()
+
+ val message1Timestamp = messageHelper.incomingText().timestamp
+ messageHelper.syncReadMessage(alice to message1Timestamp)
+
+ val editMessage1Timestamp1 = messageHelper.incomingEditText(message1Timestamp).timestamp
+ val editMessage1Timestamp2 = messageHelper.incomingEditText(editMessage1Timestamp1).timestamp
+
+ val message2Timestamp = messageHelper.incomingMedia().timestamp
+
+ val threadId = SignalDatabase.threads.getThreadIdFor(alice)!!
+ var threadRecord = SignalDatabase.threads.getThreadRecord(threadId)!!
+ threadRecord.unreadCount assertIs 2
+
+ messageHelper.syncReadMessage(alice to message2Timestamp, alice to editMessage1Timestamp1, alice to editMessage1Timestamp2)
+
+ threadRecord = SignalDatabase.threads.getThreadRecord(threadId)!!
+ threadRecord.unreadCount assertIs 0
+ }
+
+ @Test
+ fun handleSynchronizeReadWithEditsInGroup() {
+ val messageHelper = MessageHelper()
+
+ val message1Timestamp = messageHelper.incomingText(sender = alice, destination = group.recipientId).timestamp
+
+ messageHelper.syncReadMessage(alice to message1Timestamp)
+
+ val editMessage1Timestamp1 = messageHelper.incomingEditText(targetTimestamp = message1Timestamp, sender = alice, destination = group.recipientId).timestamp
+ val editMessage1Timestamp2 = messageHelper.incomingEditText(targetTimestamp = editMessage1Timestamp1, sender = alice, destination = group.recipientId).timestamp
+
+ val message2Timestamp = messageHelper.incomingMedia(sender = bob, destination = group.recipientId).timestamp
+
+ val threadId = SignalDatabase.threads.getThreadIdFor(group.recipientId)!!
+ var threadRecord = SignalDatabase.threads.getThreadRecord(threadId)!!
+ threadRecord.unreadCount assertIs 2
+
+ messageHelper.syncReadMessage(bob to message2Timestamp, alice to editMessage1Timestamp1, alice to editMessage1Timestamp2)
+
+ threadRecord = SignalDatabase.threads.getThreadRecord(threadId)!!
+ threadRecord.unreadCount assertIs 0
+ }
+
+ private inner class MessageHelper(var startTime: Long = System.currentTimeMillis()) {
+
+ fun incomingText(sender: RecipientId = alice, destination: RecipientId = harness.self.id): MessageData {
+ startTime += 1000
+
+ val messageData = MessageData(timestamp = startTime)
+
+ processor.process(
+ envelope = MessageContentFuzzer.envelope(messageData.timestamp, serverGuid = messageData.serverGuid),
+ content = MessageContentFuzzer.fuzzTextMessage(
+ sentTimestamp = messageData.timestamp,
+ groupContextV2 = if (destination == group.recipientId) group.groupV2Context else null
+ ),
+ metadata = MessageContentFuzzer.envelopeMetadata(
+ source = sender,
+ destination = harness.self.id,
+ groupId = if (destination == group.recipientId) group.groupId else null
+ ),
+ serverDeliveredTimestamp = messageData.timestamp + 10
+ )
+
+ return messageData
+ }
+
+ fun incomingMedia(sender: RecipientId = alice, destination: RecipientId = harness.self.id): MessageData {
+ startTime += 1000
+
+ val messageData = MessageData(timestamp = startTime)
+
+ processor.process(
+ envelope = MessageContentFuzzer.envelope(messageData.timestamp, serverGuid = messageData.serverGuid),
+ content = MessageContentFuzzer.fuzzStickerMediaMessage(
+ sentTimestamp = messageData.timestamp,
+ groupContextV2 = if (destination == group.recipientId) group.groupV2Context else null
+ ),
+ metadata = MessageContentFuzzer.envelopeMetadata(
+ source = sender,
+ destination = harness.self.id,
+ groupId = if (destination == group.recipientId) group.groupId else null
+ ),
+ serverDeliveredTimestamp = messageData.timestamp + 10
+ )
+
+ return messageData
+ }
+
+ fun incomingEditText(targetTimestamp: Long = System.currentTimeMillis(), sender: RecipientId = alice, destination: RecipientId = harness.self.id): MessageData {
+ startTime += 1000
+
+ val messageData = MessageData(timestamp = startTime)
+
+ processor.process(
+ envelope = MessageContentFuzzer.envelope(messageData.timestamp, serverGuid = messageData.serverGuid),
+ content = MessageContentFuzzer.editTextMessage(
+ targetTimestamp = targetTimestamp,
+ editedDataMessage = MessageContentFuzzer.fuzzTextMessage(
+ sentTimestamp = messageData.timestamp,
+ groupContextV2 = if (destination == group.recipientId) group.groupV2Context else null
+ ).dataMessage!!
+ ),
+ metadata = MessageContentFuzzer.envelopeMetadata(
+ source = sender,
+ destination = harness.self.id,
+ groupId = if (destination == group.recipientId) group.groupId else null
+ ),
+ serverDeliveredTimestamp = messageData.timestamp + 10
+ )
+
+ return messageData
+ }
+
+ fun syncReadMessage(vararg reads: Pair): MessageData {
+ startTime += 1000
+ val messageData = MessageData(timestamp = startTime)
+
+ processor.process(
+ envelope = MessageContentFuzzer.envelope(messageData.timestamp, serverGuid = messageData.serverGuid),
+ content = MessageContentFuzzer.syncReadsMessage(reads.toList()),
+ metadata = MessageContentFuzzer.envelopeMetadata(harness.self.id, harness.self.id, sourceDeviceId = 2),
+ serverDeliveredTimestamp = messageData.timestamp + 10
+ )
+
+ return messageData
+ }
+ }
+
+ private data class MessageData(val serverGuid: UUID = UUID.randomUUID(), val timestamp: Long)
+}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditFragmentTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditFragmentTest.kt
index f1d60065..3e2ae8c6 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditFragmentTest.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditFragmentTest.kt
@@ -57,27 +57,10 @@ class UsernameEditFragmentTest {
InstrumentationApplicationDependencyProvider.clearHandlers()
}
- @Test
- fun testUsernameCreationInRegistration() {
- val scenario = createScenario(true)
-
- scenario.moveToState(Lifecycle.State.RESUMED)
-
- onView(withId(R.id.toolbar)).check { view, noViewFoundException ->
- noViewFoundException.assertIsNull()
- val toolbar = view as Toolbar
-
- toolbar.navigationIcon.assertIsNull()
- }
-
- onView(withText(R.string.UsernameEditFragment__add_a_username)).check(matches(isDisplayed()))
- onView(withContentDescription(R.string.load_more_header__loading)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
- }
-
@Ignore("Flakey espresso test.")
@Test
fun testUsernameCreationOutsideOfRegistration() {
- val scenario = createScenario()
+ val scenario = createScenario(UsernameEditMode.NORMAL)
scenario.moveToState(Lifecycle.State.RESUMED)
@@ -108,7 +91,7 @@ class UsernameEditFragmentTest {
}
)
- val scenario = createScenario(isInRegistration = true)
+ val scenario = createScenario(UsernameEditMode.NORMAL)
scenario.moveToState(Lifecycle.State.RESUMED)
onView(withId(R.id.username_text)).perform(typeText(nickname))
@@ -132,8 +115,8 @@ class UsernameEditFragmentTest {
onView(withId(R.id.username_done_button)).check(matches(isNotEnabled()))
}
- private fun createScenario(isInRegistration: Boolean = false): FragmentScenario {
- val fragmentArgs = UsernameEditFragmentArgs.Builder().setIsInRegistration(isInRegistration).build().toBundle()
+ private fun createScenario(mode: UsernameEditMode = UsernameEditMode.NORMAL): FragmentScenario {
+ val fragmentArgs = UsernameEditFragmentArgs.Builder().setMode(mode).build().toBundle()
return launchFragmentInContainer(
fragmentArgs = fragmentArgs,
themeResId = R.style.Signal_DayNight_NoActionBar
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt
index ecd8e96c..8c65294d 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt
@@ -12,8 +12,6 @@ import org.tm.archive.database.RecipientTable
import org.tm.archive.database.SignalDatabase
import org.tm.archive.keyvalue.SignalStore
import org.tm.archive.recipients.RecipientId
-import org.tm.archive.util.FeatureFlags
-import org.tm.archive.util.FeatureFlagsAccessor
import org.whispersystems.signalservice.api.push.ServiceId.ACI
import org.whispersystems.signalservice.api.push.ServiceId.PNI
import org.whispersystems.signalservice.api.storage.SignalContactRecord
@@ -29,11 +27,10 @@ class ContactRecordProcessorTest {
SignalStore.account().setE164(E164_SELF)
SignalStore.account().setAci(ACI_SELF)
SignalStore.account().setPni(PNI_SELF)
- FeatureFlagsAccessor.forceValue(FeatureFlags.PHONE_NUMBER_PRIVACY, true)
}
@Test
- fun process_splitContact_normalSplit() {
+ fun process_splitContact_normalSplit_twoRecords() {
// GIVEN
val originalId = SignalDatabase.recipients.getAndPossiblyMerge(ACI_A, PNI_A, E164_A)
setStorageId(originalId, STORAGE_ID_A)
@@ -69,6 +66,35 @@ class ContactRecordProcessorTest {
assertNotEquals(byAci, byE164)
}
+ @Test
+ fun process_splitContact_normalSplit_oneRecord() {
+ // GIVEN
+ val originalId = SignalDatabase.recipients.getAndPossiblyMerge(ACI_A, PNI_A, E164_A)
+ setStorageId(originalId, STORAGE_ID_A)
+
+ val remote = buildRecord(
+ STORAGE_ID_B,
+ ContactRecord(
+ aci = ACI_A.toString(),
+ unregisteredAtTimestamp = 100
+ )
+ )
+
+ // WHEN
+ val subject = ContactRecordProcessor()
+ subject.process(listOf(remote), StorageSyncHelper.KEY_GENERATOR)
+
+ // THEN
+ val byAci: RecipientId = SignalDatabase.recipients.getByAci(ACI_A).get()
+
+ val byE164: RecipientId = SignalDatabase.recipients.getByE164(E164_A).get()
+ val byPni: RecipientId = SignalDatabase.recipients.getByPni(PNI_A).get()
+
+ assertEquals(originalId, byAci)
+ assertEquals(byE164, byPni)
+ assertNotEquals(byAci, byE164)
+ }
+
@Test
fun process_splitContact_doNotSplitIfAciRecordIsRegistered() {
// GIVEN
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/AliceClient.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/AliceClient.kt
index e2800800..fd7076c9 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/AliceClient.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/AliceClient.kt
@@ -40,7 +40,7 @@ class AliceClient(val serviceId: ServiceId, val e164: String, val trustRoot: ECK
ApplicationDependencies.getIncomingMessageObserver()
.processEnvelope(bufferedStore, envelope, serverDeliveredTimestamp)
?.mapNotNull { it.run() }
- ?.forEach { ApplicationDependencies.getJobManager().add(it) }
+ ?.forEach { it.enqueue() }
bufferedStore.flushToDisk()
val end = System.currentTimeMillis()
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/GroupTestingUtils.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/GroupTestingUtils.kt
index 2dab3533..25565323 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/GroupTestingUtils.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/GroupTestingUtils.kt
@@ -1,5 +1,6 @@
package org.tm.archive.testing
+import okio.ByteString.Companion.toByteString
import org.signal.libsignal.zkgroup.groups.GroupMasterKey
import org.signal.storageservice.protos.groups.Member
import org.signal.storageservice.protos.groups.local.DecryptedGroup
@@ -9,6 +10,7 @@ import org.tm.archive.groups.GroupId
import org.tm.archive.recipients.Recipient
import org.tm.archive.recipients.RecipientId
import org.whispersystems.signalservice.api.push.ServiceId.ACI
+import org.whispersystems.signalservice.internal.push.GroupContextV2
import kotlin.random.Random
/**
@@ -46,5 +48,8 @@ object GroupTestingUtils {
return member(aci = requireAci())
}
- data class TestGroupInfo(val groupId: GroupId.V2, val masterKey: GroupMasterKey, val recipientId: RecipientId)
+ data class TestGroupInfo(val groupId: GroupId.V2, val masterKey: GroupMasterKey, val recipientId: RecipientId) {
+ val groupV2Context: GroupContextV2
+ get() = GroupContextV2(masterKey = masterKey.serialize().toByteString(), revision = 0)
+ }
}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MessageContentFuzzer.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MessageContentFuzzer.kt
index 0e952de5..b839e55f 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MessageContentFuzzer.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MessageContentFuzzer.kt
@@ -12,6 +12,7 @@ import org.whispersystems.signalservice.internal.push.AttachmentPointer
import org.whispersystems.signalservice.internal.push.BodyRange
import org.whispersystems.signalservice.internal.push.Content
import org.whispersystems.signalservice.internal.push.DataMessage
+import org.whispersystems.signalservice.internal.push.EditMessage
import org.whispersystems.signalservice.internal.push.Envelope
import org.whispersystems.signalservice.internal.push.GroupContextV2
import org.whispersystems.signalservice.internal.push.SyncMessage
@@ -33,22 +34,22 @@ object MessageContentFuzzer {
/**
* Create an [Envelope].
*/
- fun envelope(timestamp: Long): Envelope {
+ fun envelope(timestamp: Long, serverGuid: UUID = UUID.randomUUID()): Envelope {
return Envelope.Builder()
.timestamp(timestamp)
.serverTimestamp(timestamp + 5)
- .serverGuid(UUID.randomUUID().toString())
+ .serverGuid(serverGuid.toString())
.build()
}
/**
* Create metadata to match an [Envelope].
*/
- fun envelopeMetadata(source: RecipientId, destination: RecipientId, groupId: GroupId.V2? = null): EnvelopeMetadata {
+ fun envelopeMetadata(source: RecipientId, destination: RecipientId, sourceDeviceId: Int = 1, groupId: GroupId.V2? = null): EnvelopeMetadata {
return EnvelopeMetadata(
sourceServiceId = Recipient.resolved(source).requireServiceId(),
sourceE164 = null,
- sourceDeviceId = 1,
+ sourceDeviceId = sourceDeviceId,
sealedSender = true,
groupId = groupId?.decodedId,
destinationServiceId = Recipient.resolved(destination).requireServiceId()
@@ -60,10 +61,11 @@ object MessageContentFuzzer {
* - An expire timer value
* - Bold style body ranges
*/
- fun fuzzTextMessage(groupContextV2: GroupContextV2? = null): Content {
+ fun fuzzTextMessage(sentTimestamp: Long? = null, groupContextV2: GroupContextV2? = null): Content {
return Content.Builder()
.dataMessage(
DataMessage.Builder().buildWith {
+ timestamp = sentTimestamp
body = string()
if (random.nextBoolean()) {
expireTimer = random.nextInt(0..28.days.inWholeSeconds.toInt())
@@ -87,6 +89,20 @@ object MessageContentFuzzer {
.build()
}
+ /**
+ * Create an edit message.
+ */
+ fun editTextMessage(targetTimestamp: Long, editedDataMessage: DataMessage): Content {
+ return Content.Builder()
+ .editMessage(
+ EditMessage.Builder().buildWith {
+ targetSentTimestamp = targetTimestamp
+ dataMessage = editedDataMessage
+ }
+ )
+ .build()
+ }
+
/**
* Create a sync sent text message for the given [DataMessage].
*/
@@ -116,6 +132,24 @@ object MessageContentFuzzer {
).build()
}
+ /**
+ * Create a sync reads message for the given [RecipientId] and message timestamp pairings.
+ */
+ fun syncReadsMessage(timestamps: List>): Content {
+ return Content
+ .Builder()
+ .syncMessage(
+ SyncMessage.Builder().buildWith {
+ read = timestamps.map { (senderId, timestamp) ->
+ SyncMessage.Read.Builder().buildWith {
+ this.senderAci = Recipient.resolved(senderId).requireAci().toString()
+ this.timestamp = timestamp
+ }
+ }
+ }
+ ).build()
+ }
+
/**
* Create a random media message that may be:
* - A text body
@@ -184,22 +218,21 @@ object MessageContentFuzzer {
}
/**
- * Create a random media message that can never contain a text body. It may be:
- * - A sticker
+ * Create a random media message that contains a sticker.
*/
- fun fuzzMediaMessageNoText(previousMessages: List = emptyList()): Content {
+ fun fuzzStickerMediaMessage(sentTimestamp: Long? = null, groupContextV2: GroupContextV2? = null): Content {
return Content.Builder()
.dataMessage(
DataMessage.Builder().buildWith {
- if (random.nextFloat() < 0.9) {
- sticker = DataMessage.Sticker.Builder().buildWith {
- packId = byteString(length = 24)
- packKey = byteString(length = 128)
- stickerId = random.nextInt()
- data_ = attachmentPointer()
- emoji = emojis.random(random)
- }
+ timestamp = sentTimestamp
+ sticker = DataMessage.Sticker.Builder().buildWith {
+ packId = byteString(length = 24)
+ packKey = byteString(length = 128)
+ stickerId = random.nextInt()
+ data_ = attachmentPointer()
+ emoji = emojis.random(random)
}
+ groupV2 = groupContextV2
}
).build()
}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt
index 0536df77..f69cc6df 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt
@@ -141,7 +141,7 @@ class SignalActivityRule(private val othersCount: Int = 4, private val createGro
val recipientId = RecipientId.from(SignalServiceAddress(aci, "+15555551%03d".format(i)))
SignalDatabase.recipients.setProfileName(recipientId, ProfileName.fromParts("Buddy", "#$i"))
SignalDatabase.recipients.setProfileKeyIfAbsent(recipientId, ProfileKeyUtil.createNew())
- SignalDatabase.recipients.setCapabilities(recipientId, SignalServiceProfile.Capabilities(true, true, true, true, true, true, true, true, true))
+ SignalDatabase.recipients.setCapabilities(recipientId, SignalServiceProfile.Capabilities(true, true, true))
SignalDatabase.recipients.setProfileSharing(recipientId, true)
SignalDatabase.recipients.markRegistered(recipientId, aci)
val otherIdentity = IdentityKeyUtil.generateIdentityKeyPair()
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalDatabaseRule.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalDatabaseRule.kt
index ecdaac98..7564daaa 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalDatabaseRule.kt
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalDatabaseRule.kt
@@ -2,7 +2,9 @@ package org.tm.archive.testing
import org.junit.rules.TestWatcher
import org.junit.runner.Description
+import org.signal.core.util.deleteAll
import org.tm.archive.database.SignalDatabase
+import org.tm.archive.database.ThreadTable
import org.tm.archive.keyvalue.SignalStore
import org.whispersystems.signalservice.api.push.ServiceId.ACI
import org.whispersystems.signalservice.api.push.ServiceId.PNI
@@ -34,7 +36,8 @@ class SignalDatabaseRule(
private fun deleteAllThreads() {
if (deleteAllThreadsOnEachRun) {
- SignalDatabase.threads.clearForTests()
+ SignalDatabase.threads.deleteAllConversations()
+ SignalDatabase.rawDatabase.deleteAll(ThreadTable.TABLE_NAME)
}
}
}
diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/util/FeatureFlagsAccessor.java b/app/src/androidTest/java/org/thoughtcrime/securesms/util/FeatureFlagsAccessor.java
index 958d17b3..ce93ac6a 100644
--- a/app/src/androidTest/java/org/thoughtcrime/securesms/util/FeatureFlagsAccessor.java
+++ b/app/src/androidTest/java/org/thoughtcrime/securesms/util/FeatureFlagsAccessor.java
@@ -6,6 +6,6 @@ package org.tm.archive.util;
public final class FeatureFlagsAccessor {
public static void forceValue(String key, Object value) {
- FeatureFlags.FORCED_VALUES.put(FeatureFlags.PHONE_NUMBER_PRIVACY, true);
+ FeatureFlags.FORCED_VALUES.put(key, value);
}
}
diff --git a/app/src/benchmark/java/org/signal/benchmark/setup/TestUsers.kt b/app/src/benchmark/java/org/signal/benchmark/setup/TestUsers.kt
index 1b329960..730cbd20 100644
--- a/app/src/benchmark/java/org/signal/benchmark/setup/TestUsers.kt
+++ b/app/src/benchmark/java/org/signal/benchmark/setup/TestUsers.kt
@@ -100,7 +100,7 @@ object TestUsers {
val recipientId = RecipientId.from(SignalServiceAddress(aci, "+15555551%03d".format(i)))
SignalDatabase.recipients.setProfileName(recipientId, ProfileName.fromParts("Buddy", "#$i"))
SignalDatabase.recipients.setProfileKeyIfAbsent(recipientId, ProfileKeyUtil.createNew())
- SignalDatabase.recipients.setCapabilities(recipientId, SignalServiceProfile.Capabilities(true, true, true, true, true, true, true, true, true))
+ SignalDatabase.recipients.setCapabilities(recipientId, SignalServiceProfile.Capabilities(true, true, true))
SignalDatabase.recipients.setProfileSharing(recipientId, true)
SignalDatabase.recipients.markRegistered(recipientId, aci)
val otherIdentity = IdentityKeyUtil.generateIdentityKeyPair()
diff --git a/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/ConversationElementGenerator.kt b/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/ConversationElementGenerator.kt
index e7f82ecd..9e60650e 100644
--- a/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/ConversationElementGenerator.kt
+++ b/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/ConversationElementGenerator.kt
@@ -118,7 +118,8 @@ class ConversationElementGenerator {
null,
null,
0,
- false
+ false,
+ null
)
val conversationMessage = ConversationMessageFactory.createWithUnresolvedData(
diff --git a/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt b/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt
index ed13671b..3d10e6c0 100644
--- a/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt
+++ b/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt
@@ -13,6 +13,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
import androidx.navigation.navGraphViewModels
+import com.bumptech.glide.Glide
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.kotlin.subscribeBy
import org.signal.core.util.concurrent.LifecycleDisposable
@@ -33,6 +34,7 @@ import org.tm.archive.conversation.colors.Colorizer
import org.tm.archive.conversation.colors.RecyclerViewColorizer
import org.tm.archive.conversation.mutiselect.MultiselectPart
import org.tm.archive.conversation.v2.ConversationAdapterV2
+import org.tm.archive.conversation.v2.items.ChatColorsDrawable
import org.tm.archive.database.model.InMemoryMessageRecord
import org.tm.archive.database.model.MessageRecord
import org.tm.archive.database.model.MmsMessageRecord
@@ -41,7 +43,6 @@ import org.tm.archive.groups.GroupId
import org.tm.archive.groups.GroupMigrationMembershipChange
import org.tm.archive.linkpreview.LinkPreview
import org.tm.archive.mediapreview.MediaIntentFactory
-import org.tm.archive.mms.GlideApp
import org.tm.archive.recipients.Recipient
import org.tm.archive.recipients.RecipientId
import org.tm.archive.stickers.StickerLocator
@@ -61,11 +62,12 @@ class InternalConversationTestFragment : Fragment(R.layout.conversation_test_fra
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val adapter = ConversationAdapterV2(
lifecycleOwner = viewLifecycleOwner,
- glideRequests = GlideApp.with(this),
+ requestManager = Glide.with(this),
clickListener = ClickListener(),
hasWallpaper = springboardViewModel.hasWallpaper.value,
colorizer = Colorizer(),
- startExpirationTimeout = {}
+ startExpirationTimeout = {},
+ chatColorsDataProvider = { ChatColorsDrawable.ChatColorsData(null, null) }
)
if (springboardViewModel.hasWallpaper.value) {
@@ -296,5 +298,17 @@ class InternalConversationTestFragment : Fragment(R.layout.conversation_test_fra
override fun onItemLongClick(itemView: View?, item: MultiselectPart?) {
Toast.makeText(requireContext(), "Can't touch this.", Toast.LENGTH_SHORT).show()
}
+
+ override fun onShowSafetyTips(forGroup: Boolean) {
+ Toast.makeText(requireContext(), "Can't touch this.", Toast.LENGTH_SHORT).show()
+ }
+
+ override fun onReportSpamLearnMoreClicked() {
+ Toast.makeText(requireContext(), "Can't touch this.", Toast.LENGTH_SHORT).show()
+ }
+
+ override fun onMessageRequestAcceptOptionsClicked() {
+ Toast.makeText(requireContext(), "Can't touch this.", Toast.LENGTH_SHORT).show()
+ }
}
}
diff --git a/app/src/instrumentation/AndroidManifest.xml b/app/src/instrumentation/AndroidManifest.xml
index 93821ec6..8297919d 100644
--- a/app/src/instrumentation/AndroidManifest.xml
+++ b/app/src/instrumentation/AndroidManifest.xml
@@ -2,6 +2,9 @@
+
+
+
-
-
-
-
-
-
@@ -50,16 +43,10 @@
-
-
-
-
-
-
@@ -76,17 +63,14 @@
-
+
-
-
-
+
-
@@ -100,7 +84,6 @@
-
+
@@ -161,12 +144,6 @@
android:value=".MainActivity" />
-
-
@@ -186,10 +163,6 @@
-
-
+
+
@@ -726,6 +704,7 @@
android:theme="@style/TextSecure.DarkNoActionBar"
android:windowSoftInputMode="stateAlwaysHidden|adjustNothing"
android:launchMode="singleTop"
+ android:screenOrientation="portrait"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode"
android:exported="false"/>
@@ -769,6 +748,13 @@
android:windowSoftInputMode="stateAlwaysHidden"
android:exported="false"/>
+
+
+ android:exported="true"
+ android:excludeFromRecents="true"
+ android:permission="android.permission.CALL_PHONE"
+ android:theme="@style/NoAnimation.Theme.BlackScreen"
+ android:launchMode="singleTask"
+ android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
@@ -976,9 +962,8 @@
android:windowSoftInputMode="stateVisible|adjustResize"
android:exported="false"/>
-
+
+
-
-
-
+
+
-
@@ -1113,12 +1099,6 @@
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
android:exported="false"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1215,13 +1182,6 @@
-
-
-
-
-
-
@@ -1281,11 +1241,6 @@
android:exported="false"
android:grantUriPermissions="true" />
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/assets/emoji/Activity.webp b/app/src/main/assets/emoji/Activity.webp
index 4f196644..c1e5a8d3 100644
Binary files a/app/src/main/assets/emoji/Activity.webp and b/app/src/main/assets/emoji/Activity.webp differ
diff --git a/app/src/main/assets/emoji/Flags_0.webp b/app/src/main/assets/emoji/Flags_0.webp
index 145ae468..a6f70e65 100644
Binary files a/app/src/main/assets/emoji/Flags_0.webp and b/app/src/main/assets/emoji/Flags_0.webp differ
diff --git a/app/src/main/assets/emoji/Flags_1.webp b/app/src/main/assets/emoji/Flags_1.webp
index 2bc7352d..38bad475 100644
Binary files a/app/src/main/assets/emoji/Flags_1.webp and b/app/src/main/assets/emoji/Flags_1.webp differ
diff --git a/app/src/main/assets/emoji/Foods.webp b/app/src/main/assets/emoji/Foods.webp
index e2c23097..b88c9b5d 100644
Binary files a/app/src/main/assets/emoji/Foods.webp and b/app/src/main/assets/emoji/Foods.webp differ
diff --git a/app/src/main/assets/emoji/Nature.webp b/app/src/main/assets/emoji/Nature.webp
index 3c6453e8..213d6be2 100644
Binary files a/app/src/main/assets/emoji/Nature.webp and b/app/src/main/assets/emoji/Nature.webp differ
diff --git a/app/src/main/assets/emoji/Objects_0.webp b/app/src/main/assets/emoji/Objects_0.webp
index de9266dc..5e4f71e4 100644
Binary files a/app/src/main/assets/emoji/Objects_0.webp and b/app/src/main/assets/emoji/Objects_0.webp differ
diff --git a/app/src/main/assets/emoji/Objects_1.webp b/app/src/main/assets/emoji/Objects_1.webp
index f34b85f7..22e8f8b5 100644
Binary files a/app/src/main/assets/emoji/Objects_1.webp and b/app/src/main/assets/emoji/Objects_1.webp differ
diff --git a/app/src/main/assets/emoji/People_0.webp b/app/src/main/assets/emoji/People_0.webp
index d684f3fc..b561b1b9 100644
Binary files a/app/src/main/assets/emoji/People_0.webp and b/app/src/main/assets/emoji/People_0.webp differ
diff --git a/app/src/main/assets/emoji/People_1.webp b/app/src/main/assets/emoji/People_1.webp
index 14e3dec9..445fba20 100644
Binary files a/app/src/main/assets/emoji/People_1.webp and b/app/src/main/assets/emoji/People_1.webp differ
diff --git a/app/src/main/assets/emoji/People_2.webp b/app/src/main/assets/emoji/People_2.webp
index 0b09776c..3f8e9d46 100644
Binary files a/app/src/main/assets/emoji/People_2.webp and b/app/src/main/assets/emoji/People_2.webp differ
diff --git a/app/src/main/assets/emoji/People_3.webp b/app/src/main/assets/emoji/People_3.webp
index 9802774d..e8469bad 100644
Binary files a/app/src/main/assets/emoji/People_3.webp and b/app/src/main/assets/emoji/People_3.webp differ
diff --git a/app/src/main/assets/emoji/People_4.webp b/app/src/main/assets/emoji/People_4.webp
index cdfed8f0..d19f0465 100644
Binary files a/app/src/main/assets/emoji/People_4.webp and b/app/src/main/assets/emoji/People_4.webp differ
diff --git a/app/src/main/assets/emoji/People_5.webp b/app/src/main/assets/emoji/People_5.webp
index d0207730..8b799616 100644
Binary files a/app/src/main/assets/emoji/People_5.webp and b/app/src/main/assets/emoji/People_5.webp differ
diff --git a/app/src/main/assets/emoji/People_6.webp b/app/src/main/assets/emoji/People_6.webp
index 08fbf64f..b27da88d 100644
Binary files a/app/src/main/assets/emoji/People_6.webp and b/app/src/main/assets/emoji/People_6.webp differ
diff --git a/app/src/main/assets/emoji/People_7.webp b/app/src/main/assets/emoji/People_7.webp
index b1032168..4389ce32 100644
Binary files a/app/src/main/assets/emoji/People_7.webp and b/app/src/main/assets/emoji/People_7.webp differ
diff --git a/app/src/main/assets/emoji/People_8.webp b/app/src/main/assets/emoji/People_8.webp
index 06df8d0b..5657ba5e 100644
Binary files a/app/src/main/assets/emoji/People_8.webp and b/app/src/main/assets/emoji/People_8.webp differ
diff --git a/app/src/main/assets/emoji/People_9.webp b/app/src/main/assets/emoji/People_9.webp
index 3d705cf8..91424cc5 100644
Binary files a/app/src/main/assets/emoji/People_9.webp and b/app/src/main/assets/emoji/People_9.webp differ
diff --git a/app/src/main/assets/emoji/Places.webp b/app/src/main/assets/emoji/Places.webp
index 3baae9ae..59863fc1 100644
Binary files a/app/src/main/assets/emoji/Places.webp and b/app/src/main/assets/emoji/Places.webp differ
diff --git a/app/src/main/assets/emoji/Symbols.webp b/app/src/main/assets/emoji/Symbols.webp
index 286ce521..49111ddc 100644
Binary files a/app/src/main/assets/emoji/Symbols.webp and b/app/src/main/assets/emoji/Symbols.webp differ
diff --git a/app/src/main/assets/emoji/emoji_data.json b/app/src/main/assets/emoji/emoji_data.json
index 370fcdb0..1ca0bd21 100644
--- a/app/src/main/assets/emoji/emoji_data.json
+++ b/app/src/main/assets/emoji/emoji_data.json
@@ -1 +1 @@
-{"emoji":{"People_0":[["d83dde00"],["d83dde03"],["d83dde04"],["d83dde01"],["d83dde06"],["d83dde05"],["d83edd23"],["d83dde02"],["d83dde42"],["d83dde43"],["d83edee0"],["d83dde09"],["d83dde0a"],["d83dde07"],["d83edd70"],["d83dde0d"],["d83edd29"],["d83dde18"],["d83dde17"],["263afe0f"],["d83dde1a"],["d83dde19"],["d83edd72"],["d83dde0b"],["d83dde1b"],["d83dde1c"],["d83edd2a"],["d83dde1d"],["d83edd11"],["d83edd17"],["d83edd2d"],["d83edee2"],["d83edee3"],["d83edd2b"],["d83edd14"],["d83edee1"],["d83edd10"],["d83edd28"],["d83dde10"],["d83dde11"],["d83dde36"],["d83edee5"],["d83dde36200dd83cdf2bfe0f"],["d83dde0f"],["d83dde12"],["d83dde44"],["d83dde2c"],["d83dde2e200dd83ddca8"],["d83edd25"],["d83edee8"],["d83dde0c"],["d83dde14"],["d83dde2a"],["d83edd24"],["d83dde34"],["d83dde37"],["d83edd12"],["d83edd15"],["d83edd22"],["d83edd2e"],["d83edd27"],["d83edd75"],["d83edd76"],["d83edd74"],["d83dde35"],["d83dde35200dd83ddcab"],["d83edd2f"],["d83edd20"],["d83edd73"],["d83edd78"],["d83dde0e"],["d83edd13"],["d83eddd0"],["d83dde15"],["d83edee4"],["d83dde1f"],["d83dde41"],["2639fe0f"],["d83dde2e"],["d83dde2f"],["d83dde32"],["d83dde33"],["d83edd7a"],["d83edd79"],["d83dde26"],["d83dde27"],["d83dde28"],["d83dde30"],["d83dde25"],["d83dde22"],["d83dde2d"],["d83dde31"],["d83dde16"],["d83dde23"],["d83dde1e"],["d83dde13"],["d83dde29"],["d83dde2b"],["d83edd71"],["d83dde24"],["d83dde21"],["d83dde20"],["d83edd2c"],["d83dde08"],["d83ddc7f"],["d83ddc80"],["2620fe0f"],["d83ddca9"],["d83edd21"],["d83ddc79"],["d83ddc7a"],["d83ddc7b"],["d83ddc7d"],["d83ddc7e"],["d83edd16"],["d83dde3a"],["d83dde38"],["d83dde39"],["d83dde3b"],["d83dde3c"],["d83dde3d"],["d83dde40"],["d83dde3f"],["d83dde3e"],["d83dde48"],["d83dde49"],["d83dde4a"],["d83ddc8c"],["d83ddc98"],["d83ddc9d"],["d83ddc96"],["d83ddc97"],["d83ddc93"],["d83ddc9e"],["d83ddc95"],["d83ddc9f"],["2763fe0f"],["d83ddc94"],["2764fe0f200dd83ddd25"],["2764fe0f200dd83ede79"],["2764fe0f"],["d83ede77"],["d83edde1"],["d83ddc9b"],["d83ddc9a"],["d83ddc99"],["d83ede75"],["d83ddc9c"],["d83edd0e"],["d83ddda4"],["d83ede76"],["d83edd0d"],["d83ddc8b"],["d83ddcaf"],["d83ddca2"],["d83ddca5"],["d83ddcab"],["d83ddca6"],["d83ddca8"],["d83ddd73fe0f"],["d83ddcac"],["d83ddc41fe0f200dd83ddde8fe0f"],["d83ddde8fe0f"],["d83dddeffe0f"],["d83ddcad"],["d83ddca4"],["d83ddc4b","d83ddc4bd83cdffb","d83ddc4bd83cdffc","d83ddc4bd83cdffd","d83ddc4bd83cdffe","d83ddc4bd83cdfff"],["d83edd1a","d83edd1ad83cdffb","d83edd1ad83cdffc","d83edd1ad83cdffd","d83edd1ad83cdffe","d83edd1ad83cdfff"],["d83ddd90fe0f","d83ddd90d83cdffb","d83ddd90d83cdffc","d83ddd90d83cdffd","d83ddd90d83cdffe","d83ddd90d83cdfff"],["270b","270bd83cdffb","270bd83cdffc","270bd83cdffd","270bd83cdffe","270bd83cdfff"],["d83ddd96","d83ddd96d83cdffb","d83ddd96d83cdffc","d83ddd96d83cdffd","d83ddd96d83cdffe","d83ddd96d83cdfff"],["d83edef1","d83edef1d83cdffb","d83edef1d83cdffc","d83edef1d83cdffd","d83edef1d83cdffe","d83edef1d83cdfff"],["d83edef2","d83edef2d83cdffb","d83edef2d83cdffc","d83edef2d83cdffd","d83edef2d83cdffe","d83edef2d83cdfff"],["d83edef3","d83edef3d83cdffb","d83edef3d83cdffc","d83edef3d83cdffd","d83edef3d83cdffe","d83edef3d83cdfff"],["d83edef4","d83edef4d83cdffb","d83edef4d83cdffc","d83edef4d83cdffd","d83edef4d83cdffe","d83edef4d83cdfff"],["d83edef7","d83edef7d83cdffb","d83edef7d83cdffc","d83edef7d83cdffd","d83edef7d83cdffe","d83edef7d83cdfff"],["d83edef8","d83edef8d83cdffb","d83edef8d83cdffc","d83edef8d83cdffd","d83edef8d83cdffe","d83edef8d83cdfff"],["d83ddc4c","d83ddc4cd83cdffb","d83ddc4cd83cdffc","d83ddc4cd83cdffd","d83ddc4cd83cdffe","d83ddc4cd83cdfff"],["d83edd0c","d83edd0cd83cdffb","d83edd0cd83cdffc","d83edd0cd83cdffd","d83edd0cd83cdffe","d83edd0cd83cdfff"],["d83edd0f","d83edd0fd83cdffb","d83edd0fd83cdffc","d83edd0fd83cdffd","d83edd0fd83cdffe","d83edd0fd83cdfff"],["270cfe0f","270cd83cdffb","270cd83cdffc","270cd83cdffd","270cd83cdffe","270cd83cdfff"]],"People_1":[["d83edd1e","d83edd1ed83cdffb","d83edd1ed83cdffc","d83edd1ed83cdffd","d83edd1ed83cdffe","d83edd1ed83cdfff"],["d83edef0","d83edef0d83cdffb","d83edef0d83cdffc","d83edef0d83cdffd","d83edef0d83cdffe","d83edef0d83cdfff"],["d83edd1f","d83edd1fd83cdffb","d83edd1fd83cdffc","d83edd1fd83cdffd","d83edd1fd83cdffe","d83edd1fd83cdfff"],["d83edd18","d83edd18d83cdffb","d83edd18d83cdffc","d83edd18d83cdffd","d83edd18d83cdffe","d83edd18d83cdfff"],["d83edd19","d83edd19d83cdffb","d83edd19d83cdffc","d83edd19d83cdffd","d83edd19d83cdffe","d83edd19d83cdfff"],["d83ddc48","d83ddc48d83cdffb","d83ddc48d83cdffc","d83ddc48d83cdffd","d83ddc48d83cdffe","d83ddc48d83cdfff"],["d83ddc49","d83ddc49d83cdffb","d83ddc49d83cdffc","d83ddc49d83cdffd","d83ddc49d83cdffe","d83ddc49d83cdfff"],["d83ddc46","d83ddc46d83cdffb","d83ddc46d83cdffc","d83ddc46d83cdffd","d83ddc46d83cdffe","d83ddc46d83cdfff"],["d83ddd95","d83ddd95d83cdffb","d83ddd95d83cdffc","d83ddd95d83cdffd","d83ddd95d83cdffe","d83ddd95d83cdfff"],["d83ddc47","d83ddc47d83cdffb","d83ddc47d83cdffc","d83ddc47d83cdffd","d83ddc47d83cdffe","d83ddc47d83cdfff"],["261dfe0f","261dd83cdffb","261dd83cdffc","261dd83cdffd","261dd83cdffe","261dd83cdfff"],["d83edef5","d83edef5d83cdffb","d83edef5d83cdffc","d83edef5d83cdffd","d83edef5d83cdffe","d83edef5d83cdfff"],["d83ddc4d","d83ddc4dd83cdffb","d83ddc4dd83cdffc","d83ddc4dd83cdffd","d83ddc4dd83cdffe","d83ddc4dd83cdfff"],["d83ddc4e","d83ddc4ed83cdffb","d83ddc4ed83cdffc","d83ddc4ed83cdffd","d83ddc4ed83cdffe","d83ddc4ed83cdfff"],["270a","270ad83cdffb","270ad83cdffc","270ad83cdffd","270ad83cdffe","270ad83cdfff"],["d83ddc4a","d83ddc4ad83cdffb","d83ddc4ad83cdffc","d83ddc4ad83cdffd","d83ddc4ad83cdffe","d83ddc4ad83cdfff"],["d83edd1b","d83edd1bd83cdffb","d83edd1bd83cdffc","d83edd1bd83cdffd","d83edd1bd83cdffe","d83edd1bd83cdfff"],["d83edd1c","d83edd1cd83cdffb","d83edd1cd83cdffc","d83edd1cd83cdffd","d83edd1cd83cdffe","d83edd1cd83cdfff"],["d83ddc4f","d83ddc4fd83cdffb","d83ddc4fd83cdffc","d83ddc4fd83cdffd","d83ddc4fd83cdffe","d83ddc4fd83cdfff"],["d83dde4c","d83dde4cd83cdffb","d83dde4cd83cdffc","d83dde4cd83cdffd","d83dde4cd83cdffe","d83dde4cd83cdfff"],["d83edef6","d83edef6d83cdffb","d83edef6d83cdffc","d83edef6d83cdffd","d83edef6d83cdffe","d83edef6d83cdfff"],["d83ddc50","d83ddc50d83cdffb","d83ddc50d83cdffc","d83ddc50d83cdffd","d83ddc50d83cdffe","d83ddc50d83cdfff"],["d83edd32","d83edd32d83cdffb","d83edd32d83cdffc","d83edd32d83cdffd","d83edd32d83cdffe","d83edd32d83cdfff"],["d83edd1d","d83edd1dd83cdffb","d83edd1dd83cdffc","d83edd1dd83cdffd","d83edd1dd83cdffe","d83edd1dd83cdfff","d83edef1d83cdffb200dd83edef2d83cdffc","d83edef1d83cdffb200dd83edef2d83cdffd","d83edef1d83cdffb200dd83edef2d83cdffe","d83edef1d83cdffb200dd83edef2d83cdfff","d83edef1d83cdffc200dd83edef2d83cdffb","d83edef1d83cdffc200dd83edef2d83cdffd","d83edef1d83cdffc200dd83edef2d83cdffe","d83edef1d83cdffc200dd83edef2d83cdfff","d83edef1d83cdffd200dd83edef2d83cdffb","d83edef1d83cdffd200dd83edef2d83cdffc","d83edef1d83cdffd200dd83edef2d83cdffe","d83edef1d83cdffd200dd83edef2d83cdfff","d83edef1d83cdffe200dd83edef2d83cdffb","d83edef1d83cdffe200dd83edef2d83cdffc","d83edef1d83cdffe200dd83edef2d83cdffd","d83edef1d83cdffe200dd83edef2d83cdfff","d83edef1d83cdfff200dd83edef2d83cdffb","d83edef1d83cdfff200dd83edef2d83cdffc","d83edef1d83cdfff200dd83edef2d83cdffd","d83edef1d83cdfff200dd83edef2d83cdffe"],["d83dde4f","d83dde4fd83cdffb","d83dde4fd83cdffc","d83dde4fd83cdffd","d83dde4fd83cdffe","d83dde4fd83cdfff"],["270dfe0f","270dd83cdffb","270dd83cdffc","270dd83cdffd","270dd83cdffe","270dd83cdfff"],["d83ddc85","d83ddc85d83cdffb","d83ddc85d83cdffc","d83ddc85d83cdffd","d83ddc85d83cdffe","d83ddc85d83cdfff"],["d83edd33","d83edd33d83cdffb","d83edd33d83cdffc","d83edd33d83cdffd","d83edd33d83cdffe","d83edd33d83cdfff"],["d83ddcaa","d83ddcaad83cdffb","d83ddcaad83cdffc","d83ddcaad83cdffd","d83ddcaad83cdffe","d83ddcaad83cdfff"],["d83eddbe"],["d83eddbf"],["d83eddb5","d83eddb5d83cdffb","d83eddb5d83cdffc","d83eddb5d83cdffd","d83eddb5d83cdffe","d83eddb5d83cdfff"],["d83eddb6","d83eddb6d83cdffb","d83eddb6d83cdffc","d83eddb6d83cdffd","d83eddb6d83cdffe","d83eddb6d83cdfff"],["d83ddc42","d83ddc42d83cdffb","d83ddc42d83cdffc","d83ddc42d83cdffd","d83ddc42d83cdffe","d83ddc42d83cdfff"],["d83eddbb","d83eddbbd83cdffb","d83eddbbd83cdffc","d83eddbbd83cdffd","d83eddbbd83cdffe","d83eddbbd83cdfff"],["d83ddc43","d83ddc43d83cdffb","d83ddc43d83cdffc","d83ddc43d83cdffd","d83ddc43d83cdffe","d83ddc43d83cdfff"],["d83edde0"],["d83edec0"],["d83edec1"],["d83eddb7"],["d83eddb4"],["d83ddc40"],["d83ddc41fe0f"],["d83ddc45"],["d83ddc44"],["d83edee6"],["d83ddc76","d83ddc76d83cdffb","d83ddc76d83cdffc","d83ddc76d83cdffd","d83ddc76d83cdffe","d83ddc76d83cdfff"],["d83eddd2","d83eddd2d83cdffb","d83eddd2d83cdffc","d83eddd2d83cdffd","d83eddd2d83cdffe","d83eddd2d83cdfff"],["d83ddc66","d83ddc66d83cdffb","d83ddc66d83cdffc","d83ddc66d83cdffd","d83ddc66d83cdffe","d83ddc66d83cdfff"]],"People_2":[["d83ddc67","d83ddc67d83cdffb","d83ddc67d83cdffc","d83ddc67d83cdffd","d83ddc67d83cdffe","d83ddc67d83cdfff"],["d83eddd1","d83eddd1d83cdffb","d83eddd1d83cdffc","d83eddd1d83cdffd","d83eddd1d83cdffe","d83eddd1d83cdfff"],["d83ddc71","d83ddc71d83cdffb","d83ddc71d83cdffc","d83ddc71d83cdffd","d83ddc71d83cdffe","d83ddc71d83cdfff"],["d83ddc68","d83ddc68d83cdffb","d83ddc68d83cdffc","d83ddc68d83cdffd","d83ddc68d83cdffe","d83ddc68d83cdfff"],["d83eddd4","d83eddd4d83cdffb","d83eddd4d83cdffc","d83eddd4d83cdffd","d83eddd4d83cdffe","d83eddd4d83cdfff"],["d83eddd4200d2642fe0f","d83eddd4d83cdffb200d2642fe0f","d83eddd4d83cdffc200d2642fe0f","d83eddd4d83cdffd200d2642fe0f","d83eddd4d83cdffe200d2642fe0f","d83eddd4d83cdfff200d2642fe0f"],["d83eddd4200d2640fe0f","d83eddd4d83cdffb200d2640fe0f","d83eddd4d83cdffc200d2640fe0f","d83eddd4d83cdffd200d2640fe0f","d83eddd4d83cdffe200d2640fe0f","d83eddd4d83cdfff200d2640fe0f"],["d83ddc68200dd83eddb0","d83ddc68d83cdffb200dd83eddb0","d83ddc68d83cdffc200dd83eddb0","d83ddc68d83cdffd200dd83eddb0","d83ddc68d83cdffe200dd83eddb0","d83ddc68d83cdfff200dd83eddb0"],["d83ddc68200dd83eddb1","d83ddc68d83cdffb200dd83eddb1","d83ddc68d83cdffc200dd83eddb1","d83ddc68d83cdffd200dd83eddb1","d83ddc68d83cdffe200dd83eddb1","d83ddc68d83cdfff200dd83eddb1"],["d83ddc68200dd83eddb3","d83ddc68d83cdffb200dd83eddb3","d83ddc68d83cdffc200dd83eddb3","d83ddc68d83cdffd200dd83eddb3","d83ddc68d83cdffe200dd83eddb3","d83ddc68d83cdfff200dd83eddb3"],["d83ddc68200dd83eddb2","d83ddc68d83cdffb200dd83eddb2","d83ddc68d83cdffc200dd83eddb2","d83ddc68d83cdffd200dd83eddb2","d83ddc68d83cdffe200dd83eddb2","d83ddc68d83cdfff200dd83eddb2"],["d83ddc69","d83ddc69d83cdffb","d83ddc69d83cdffc","d83ddc69d83cdffd","d83ddc69d83cdffe","d83ddc69d83cdfff"],["d83ddc69200dd83eddb0","d83ddc69d83cdffb200dd83eddb0","d83ddc69d83cdffc200dd83eddb0","d83ddc69d83cdffd200dd83eddb0","d83ddc69d83cdffe200dd83eddb0","d83ddc69d83cdfff200dd83eddb0"],["d83eddd1200dd83eddb0","d83eddd1d83cdffb200dd83eddb0","d83eddd1d83cdffc200dd83eddb0","d83eddd1d83cdffd200dd83eddb0","d83eddd1d83cdffe200dd83eddb0","d83eddd1d83cdfff200dd83eddb0"],["d83ddc69200dd83eddb1","d83ddc69d83cdffb200dd83eddb1","d83ddc69d83cdffc200dd83eddb1","d83ddc69d83cdffd200dd83eddb1","d83ddc69d83cdffe200dd83eddb1","d83ddc69d83cdfff200dd83eddb1"],["d83eddd1200dd83eddb1","d83eddd1d83cdffb200dd83eddb1","d83eddd1d83cdffc200dd83eddb1","d83eddd1d83cdffd200dd83eddb1","d83eddd1d83cdffe200dd83eddb1","d83eddd1d83cdfff200dd83eddb1"],["d83ddc69200dd83eddb3","d83ddc69d83cdffb200dd83eddb3","d83ddc69d83cdffc200dd83eddb3","d83ddc69d83cdffd200dd83eddb3","d83ddc69d83cdffe200dd83eddb3","d83ddc69d83cdfff200dd83eddb3"],["d83eddd1200dd83eddb3","d83eddd1d83cdffb200dd83eddb3","d83eddd1d83cdffc200dd83eddb3","d83eddd1d83cdffd200dd83eddb3","d83eddd1d83cdffe200dd83eddb3","d83eddd1d83cdfff200dd83eddb3"],["d83ddc69200dd83eddb2","d83ddc69d83cdffb200dd83eddb2","d83ddc69d83cdffc200dd83eddb2","d83ddc69d83cdffd200dd83eddb2","d83ddc69d83cdffe200dd83eddb2","d83ddc69d83cdfff200dd83eddb2"],["d83eddd1200dd83eddb2","d83eddd1d83cdffb200dd83eddb2","d83eddd1d83cdffc200dd83eddb2","d83eddd1d83cdffd200dd83eddb2","d83eddd1d83cdffe200dd83eddb2","d83eddd1d83cdfff200dd83eddb2"],["d83ddc71200d2640fe0f","d83ddc71d83cdffb200d2640fe0f","d83ddc71d83cdffc200d2640fe0f","d83ddc71d83cdffd200d2640fe0f","d83ddc71d83cdffe200d2640fe0f","d83ddc71d83cdfff200d2640fe0f"],["d83ddc71200d2642fe0f","d83ddc71d83cdffb200d2642fe0f","d83ddc71d83cdffc200d2642fe0f","d83ddc71d83cdffd200d2642fe0f","d83ddc71d83cdffe200d2642fe0f","d83ddc71d83cdfff200d2642fe0f"],["d83eddd3","d83eddd3d83cdffb","d83eddd3d83cdffc","d83eddd3d83cdffd","d83eddd3d83cdffe","d83eddd3d83cdfff"],["d83ddc74","d83ddc74d83cdffb","d83ddc74d83cdffc","d83ddc74d83cdffd","d83ddc74d83cdffe","d83ddc74d83cdfff"],["d83ddc75","d83ddc75d83cdffb","d83ddc75d83cdffc","d83ddc75d83cdffd","d83ddc75d83cdffe","d83ddc75d83cdfff"],["d83dde4d","d83dde4dd83cdffb","d83dde4dd83cdffc","d83dde4dd83cdffd","d83dde4dd83cdffe","d83dde4dd83cdfff"],["d83dde4d200d2642fe0f","d83dde4dd83cdffb200d2642fe0f","d83dde4dd83cdffc200d2642fe0f","d83dde4dd83cdffd200d2642fe0f","d83dde4dd83cdffe200d2642fe0f","d83dde4dd83cdfff200d2642fe0f"],["d83dde4d200d2640fe0f","d83dde4dd83cdffb200d2640fe0f","d83dde4dd83cdffc200d2640fe0f","d83dde4dd83cdffd200d2640fe0f","d83dde4dd83cdffe200d2640fe0f","d83dde4dd83cdfff200d2640fe0f"],["d83dde4e","d83dde4ed83cdffb","d83dde4ed83cdffc","d83dde4ed83cdffd","d83dde4ed83cdffe","d83dde4ed83cdfff"],["d83dde4e200d2642fe0f","d83dde4ed83cdffb200d2642fe0f","d83dde4ed83cdffc200d2642fe0f","d83dde4ed83cdffd200d2642fe0f","d83dde4ed83cdffe200d2642fe0f","d83dde4ed83cdfff200d2642fe0f"],["d83dde4e200d2640fe0f","d83dde4ed83cdffb200d2640fe0f","d83dde4ed83cdffc200d2640fe0f","d83dde4ed83cdffd200d2640fe0f","d83dde4ed83cdffe200d2640fe0f","d83dde4ed83cdfff200d2640fe0f"],["d83dde45","d83dde45d83cdffb","d83dde45d83cdffc","d83dde45d83cdffd","d83dde45d83cdffe","d83dde45d83cdfff"],["d83dde45200d2642fe0f","d83dde45d83cdffb200d2642fe0f","d83dde45d83cdffc200d2642fe0f","d83dde45d83cdffd200d2642fe0f","d83dde45d83cdffe200d2642fe0f","d83dde45d83cdfff200d2642fe0f"],["d83dde45200d2640fe0f","d83dde45d83cdffb200d2640fe0f","d83dde45d83cdffc200d2640fe0f","d83dde45d83cdffd200d2640fe0f","d83dde45d83cdffe200d2640fe0f","d83dde45d83cdfff200d2640fe0f"],["d83dde46","d83dde46d83cdffb","d83dde46d83cdffc","d83dde46d83cdffd","d83dde46d83cdffe","d83dde46d83cdfff"],["d83dde46200d2642fe0f","d83dde46d83cdffb200d2642fe0f","d83dde46d83cdffc200d2642fe0f","d83dde46d83cdffd200d2642fe0f","d83dde46d83cdffe200d2642fe0f","d83dde46d83cdfff200d2642fe0f"],["d83dde46200d2640fe0f","d83dde46d83cdffb200d2640fe0f","d83dde46d83cdffc200d2640fe0f","d83dde46d83cdffd200d2640fe0f","d83dde46d83cdffe200d2640fe0f","d83dde46d83cdfff200d2640fe0f"],["d83ddc81","d83ddc81d83cdffb","d83ddc81d83cdffc","d83ddc81d83cdffd","d83ddc81d83cdffe","d83ddc81d83cdfff"],["d83ddc81200d2642fe0f","d83ddc81d83cdffb200d2642fe0f","d83ddc81d83cdffc200d2642fe0f","d83ddc81d83cdffd200d2642fe0f","d83ddc81d83cdffe200d2642fe0f","d83ddc81d83cdfff200d2642fe0f"],["d83ddc81200d2640fe0f","d83ddc81d83cdffb200d2640fe0f","d83ddc81d83cdffc200d2640fe0f","d83ddc81d83cdffd200d2640fe0f","d83ddc81d83cdffe200d2640fe0f","d83ddc81d83cdfff200d2640fe0f"],["d83dde4b","d83dde4bd83cdffb","d83dde4bd83cdffc","d83dde4bd83cdffd","d83dde4bd83cdffe","d83dde4bd83cdfff"],["d83dde4b200d2642fe0f","d83dde4bd83cdffb200d2642fe0f","d83dde4bd83cdffc200d2642fe0f","d83dde4bd83cdffd200d2642fe0f","d83dde4bd83cdffe200d2642fe0f","d83dde4bd83cdfff200d2642fe0f"]],"People_3":[["d83dde4b200d2640fe0f","d83dde4bd83cdffb200d2640fe0f","d83dde4bd83cdffc200d2640fe0f","d83dde4bd83cdffd200d2640fe0f","d83dde4bd83cdffe200d2640fe0f","d83dde4bd83cdfff200d2640fe0f"],["d83eddcf","d83eddcfd83cdffb","d83eddcfd83cdffc","d83eddcfd83cdffd","d83eddcfd83cdffe","d83eddcfd83cdfff"],["d83eddcf200d2642fe0f","d83eddcfd83cdffb200d2642fe0f","d83eddcfd83cdffc200d2642fe0f","d83eddcfd83cdffd200d2642fe0f","d83eddcfd83cdffe200d2642fe0f","d83eddcfd83cdfff200d2642fe0f"],["d83eddcf200d2640fe0f","d83eddcfd83cdffb200d2640fe0f","d83eddcfd83cdffc200d2640fe0f","d83eddcfd83cdffd200d2640fe0f","d83eddcfd83cdffe200d2640fe0f","d83eddcfd83cdfff200d2640fe0f"],["d83dde47","d83dde47d83cdffb","d83dde47d83cdffc","d83dde47d83cdffd","d83dde47d83cdffe","d83dde47d83cdfff"],["d83dde47200d2642fe0f","d83dde47d83cdffb200d2642fe0f","d83dde47d83cdffc200d2642fe0f","d83dde47d83cdffd200d2642fe0f","d83dde47d83cdffe200d2642fe0f","d83dde47d83cdfff200d2642fe0f"],["d83dde47200d2640fe0f","d83dde47d83cdffb200d2640fe0f","d83dde47d83cdffc200d2640fe0f","d83dde47d83cdffd200d2640fe0f","d83dde47d83cdffe200d2640fe0f","d83dde47d83cdfff200d2640fe0f"],["d83edd26","d83edd26d83cdffb","d83edd26d83cdffc","d83edd26d83cdffd","d83edd26d83cdffe","d83edd26d83cdfff"],["d83edd26200d2642fe0f","d83edd26d83cdffb200d2642fe0f","d83edd26d83cdffc200d2642fe0f","d83edd26d83cdffd200d2642fe0f","d83edd26d83cdffe200d2642fe0f","d83edd26d83cdfff200d2642fe0f"],["d83edd26200d2640fe0f","d83edd26d83cdffb200d2640fe0f","d83edd26d83cdffc200d2640fe0f","d83edd26d83cdffd200d2640fe0f","d83edd26d83cdffe200d2640fe0f","d83edd26d83cdfff200d2640fe0f"],["d83edd37","d83edd37d83cdffb","d83edd37d83cdffc","d83edd37d83cdffd","d83edd37d83cdffe","d83edd37d83cdfff"],["d83edd37200d2642fe0f","d83edd37d83cdffb200d2642fe0f","d83edd37d83cdffc200d2642fe0f","d83edd37d83cdffd200d2642fe0f","d83edd37d83cdffe200d2642fe0f","d83edd37d83cdfff200d2642fe0f"],["d83edd37200d2640fe0f","d83edd37d83cdffb200d2640fe0f","d83edd37d83cdffc200d2640fe0f","d83edd37d83cdffd200d2640fe0f","d83edd37d83cdffe200d2640fe0f","d83edd37d83cdfff200d2640fe0f"],["d83eddd1200d2695fe0f","d83eddd1d83cdffb200d2695fe0f","d83eddd1d83cdffc200d2695fe0f","d83eddd1d83cdffd200d2695fe0f","d83eddd1d83cdffe200d2695fe0f","d83eddd1d83cdfff200d2695fe0f"],["d83ddc68200d2695fe0f","d83ddc68d83cdffb200d2695fe0f","d83ddc68d83cdffc200d2695fe0f","d83ddc68d83cdffd200d2695fe0f","d83ddc68d83cdffe200d2695fe0f","d83ddc68d83cdfff200d2695fe0f"],["d83ddc69200d2695fe0f","d83ddc69d83cdffb200d2695fe0f","d83ddc69d83cdffc200d2695fe0f","d83ddc69d83cdffd200d2695fe0f","d83ddc69d83cdffe200d2695fe0f","d83ddc69d83cdfff200d2695fe0f"],["d83eddd1200dd83cdf93","d83eddd1d83cdffb200dd83cdf93","d83eddd1d83cdffc200dd83cdf93","d83eddd1d83cdffd200dd83cdf93","d83eddd1d83cdffe200dd83cdf93","d83eddd1d83cdfff200dd83cdf93"],["d83ddc68200dd83cdf93","d83ddc68d83cdffb200dd83cdf93","d83ddc68d83cdffc200dd83cdf93","d83ddc68d83cdffd200dd83cdf93","d83ddc68d83cdffe200dd83cdf93","d83ddc68d83cdfff200dd83cdf93"],["d83ddc69200dd83cdf93","d83ddc69d83cdffb200dd83cdf93","d83ddc69d83cdffc200dd83cdf93","d83ddc69d83cdffd200dd83cdf93","d83ddc69d83cdffe200dd83cdf93","d83ddc69d83cdfff200dd83cdf93"],["d83eddd1200dd83cdfeb","d83eddd1d83cdffb200dd83cdfeb","d83eddd1d83cdffc200dd83cdfeb","d83eddd1d83cdffd200dd83cdfeb","d83eddd1d83cdffe200dd83cdfeb","d83eddd1d83cdfff200dd83cdfeb"],["d83ddc68200dd83cdfeb","d83ddc68d83cdffb200dd83cdfeb","d83ddc68d83cdffc200dd83cdfeb","d83ddc68d83cdffd200dd83cdfeb","d83ddc68d83cdffe200dd83cdfeb","d83ddc68d83cdfff200dd83cdfeb"],["d83ddc69200dd83cdfeb","d83ddc69d83cdffb200dd83cdfeb","d83ddc69d83cdffc200dd83cdfeb","d83ddc69d83cdffd200dd83cdfeb","d83ddc69d83cdffe200dd83cdfeb","d83ddc69d83cdfff200dd83cdfeb"],["d83eddd1200d2696fe0f","d83eddd1d83cdffb200d2696fe0f","d83eddd1d83cdffc200d2696fe0f","d83eddd1d83cdffd200d2696fe0f","d83eddd1d83cdffe200d2696fe0f","d83eddd1d83cdfff200d2696fe0f"],["d83ddc68200d2696fe0f","d83ddc68d83cdffb200d2696fe0f","d83ddc68d83cdffc200d2696fe0f","d83ddc68d83cdffd200d2696fe0f","d83ddc68d83cdffe200d2696fe0f","d83ddc68d83cdfff200d2696fe0f"],["d83ddc69200d2696fe0f","d83ddc69d83cdffb200d2696fe0f","d83ddc69d83cdffc200d2696fe0f","d83ddc69d83cdffd200d2696fe0f","d83ddc69d83cdffe200d2696fe0f","d83ddc69d83cdfff200d2696fe0f"],["d83eddd1200dd83cdf3e","d83eddd1d83cdffb200dd83cdf3e","d83eddd1d83cdffc200dd83cdf3e","d83eddd1d83cdffd200dd83cdf3e","d83eddd1d83cdffe200dd83cdf3e","d83eddd1d83cdfff200dd83cdf3e"],["d83ddc68200dd83cdf3e","d83ddc68d83cdffb200dd83cdf3e","d83ddc68d83cdffc200dd83cdf3e","d83ddc68d83cdffd200dd83cdf3e","d83ddc68d83cdffe200dd83cdf3e","d83ddc68d83cdfff200dd83cdf3e"],["d83ddc69200dd83cdf3e","d83ddc69d83cdffb200dd83cdf3e","d83ddc69d83cdffc200dd83cdf3e","d83ddc69d83cdffd200dd83cdf3e","d83ddc69d83cdffe200dd83cdf3e","d83ddc69d83cdfff200dd83cdf3e"],["d83eddd1200dd83cdf73","d83eddd1d83cdffb200dd83cdf73","d83eddd1d83cdffc200dd83cdf73","d83eddd1d83cdffd200dd83cdf73","d83eddd1d83cdffe200dd83cdf73","d83eddd1d83cdfff200dd83cdf73"],["d83ddc68200dd83cdf73","d83ddc68d83cdffb200dd83cdf73","d83ddc68d83cdffc200dd83cdf73","d83ddc68d83cdffd200dd83cdf73","d83ddc68d83cdffe200dd83cdf73","d83ddc68d83cdfff200dd83cdf73"],["d83ddc69200dd83cdf73","d83ddc69d83cdffb200dd83cdf73","d83ddc69d83cdffc200dd83cdf73","d83ddc69d83cdffd200dd83cdf73","d83ddc69d83cdffe200dd83cdf73","d83ddc69d83cdfff200dd83cdf73"],["d83eddd1200dd83ddd27","d83eddd1d83cdffb200dd83ddd27","d83eddd1d83cdffc200dd83ddd27","d83eddd1d83cdffd200dd83ddd27","d83eddd1d83cdffe200dd83ddd27","d83eddd1d83cdfff200dd83ddd27"],["d83ddc68200dd83ddd27","d83ddc68d83cdffb200dd83ddd27","d83ddc68d83cdffc200dd83ddd27","d83ddc68d83cdffd200dd83ddd27","d83ddc68d83cdffe200dd83ddd27","d83ddc68d83cdfff200dd83ddd27"],["d83ddc69200dd83ddd27","d83ddc69d83cdffb200dd83ddd27","d83ddc69d83cdffc200dd83ddd27","d83ddc69d83cdffd200dd83ddd27","d83ddc69d83cdffe200dd83ddd27","d83ddc69d83cdfff200dd83ddd27"],["d83eddd1200dd83cdfed","d83eddd1d83cdffb200dd83cdfed","d83eddd1d83cdffc200dd83cdfed","d83eddd1d83cdffd200dd83cdfed","d83eddd1d83cdffe200dd83cdfed","d83eddd1d83cdfff200dd83cdfed"],["d83ddc68200dd83cdfed","d83ddc68d83cdffb200dd83cdfed","d83ddc68d83cdffc200dd83cdfed","d83ddc68d83cdffd200dd83cdfed","d83ddc68d83cdffe200dd83cdfed","d83ddc68d83cdfff200dd83cdfed"],["d83ddc69200dd83cdfed","d83ddc69d83cdffb200dd83cdfed","d83ddc69d83cdffc200dd83cdfed","d83ddc69d83cdffd200dd83cdfed","d83ddc69d83cdffe200dd83cdfed","d83ddc69d83cdfff200dd83cdfed"],["d83eddd1200dd83ddcbc","d83eddd1d83cdffb200dd83ddcbc","d83eddd1d83cdffc200dd83ddcbc","d83eddd1d83cdffd200dd83ddcbc","d83eddd1d83cdffe200dd83ddcbc","d83eddd1d83cdfff200dd83ddcbc"],["d83ddc68200dd83ddcbc","d83ddc68d83cdffb200dd83ddcbc","d83ddc68d83cdffc200dd83ddcbc","d83ddc68d83cdffd200dd83ddcbc","d83ddc68d83cdffe200dd83ddcbc","d83ddc68d83cdfff200dd83ddcbc"],["d83ddc69200dd83ddcbc","d83ddc69d83cdffb200dd83ddcbc","d83ddc69d83cdffc200dd83ddcbc","d83ddc69d83cdffd200dd83ddcbc","d83ddc69d83cdffe200dd83ddcbc","d83ddc69d83cdfff200dd83ddcbc"],["d83eddd1200dd83ddd2c","d83eddd1d83cdffb200dd83ddd2c","d83eddd1d83cdffc200dd83ddd2c","d83eddd1d83cdffd200dd83ddd2c","d83eddd1d83cdffe200dd83ddd2c","d83eddd1d83cdfff200dd83ddd2c"],["d83ddc68200dd83ddd2c","d83ddc68d83cdffb200dd83ddd2c","d83ddc68d83cdffc200dd83ddd2c","d83ddc68d83cdffd200dd83ddd2c","d83ddc68d83cdffe200dd83ddd2c","d83ddc68d83cdfff200dd83ddd2c"]],"People_4":[["d83ddc69200dd83ddd2c","d83ddc69d83cdffb200dd83ddd2c","d83ddc69d83cdffc200dd83ddd2c","d83ddc69d83cdffd200dd83ddd2c","d83ddc69d83cdffe200dd83ddd2c","d83ddc69d83cdfff200dd83ddd2c"],["d83eddd1200dd83ddcbb","d83eddd1d83cdffb200dd83ddcbb","d83eddd1d83cdffc200dd83ddcbb","d83eddd1d83cdffd200dd83ddcbb","d83eddd1d83cdffe200dd83ddcbb","d83eddd1d83cdfff200dd83ddcbb"],["d83ddc68200dd83ddcbb","d83ddc68d83cdffb200dd83ddcbb","d83ddc68d83cdffc200dd83ddcbb","d83ddc68d83cdffd200dd83ddcbb","d83ddc68d83cdffe200dd83ddcbb","d83ddc68d83cdfff200dd83ddcbb"],["d83ddc69200dd83ddcbb","d83ddc69d83cdffb200dd83ddcbb","d83ddc69d83cdffc200dd83ddcbb","d83ddc69d83cdffd200dd83ddcbb","d83ddc69d83cdffe200dd83ddcbb","d83ddc69d83cdfff200dd83ddcbb"],["d83eddd1200dd83cdfa4","d83eddd1d83cdffb200dd83cdfa4","d83eddd1d83cdffc200dd83cdfa4","d83eddd1d83cdffd200dd83cdfa4","d83eddd1d83cdffe200dd83cdfa4","d83eddd1d83cdfff200dd83cdfa4"],["d83ddc68200dd83cdfa4","d83ddc68d83cdffb200dd83cdfa4","d83ddc68d83cdffc200dd83cdfa4","d83ddc68d83cdffd200dd83cdfa4","d83ddc68d83cdffe200dd83cdfa4","d83ddc68d83cdfff200dd83cdfa4"],["d83ddc69200dd83cdfa4","d83ddc69d83cdffb200dd83cdfa4","d83ddc69d83cdffc200dd83cdfa4","d83ddc69d83cdffd200dd83cdfa4","d83ddc69d83cdffe200dd83cdfa4","d83ddc69d83cdfff200dd83cdfa4"],["d83eddd1200dd83cdfa8","d83eddd1d83cdffb200dd83cdfa8","d83eddd1d83cdffc200dd83cdfa8","d83eddd1d83cdffd200dd83cdfa8","d83eddd1d83cdffe200dd83cdfa8","d83eddd1d83cdfff200dd83cdfa8"],["d83ddc68200dd83cdfa8","d83ddc68d83cdffb200dd83cdfa8","d83ddc68d83cdffc200dd83cdfa8","d83ddc68d83cdffd200dd83cdfa8","d83ddc68d83cdffe200dd83cdfa8","d83ddc68d83cdfff200dd83cdfa8"],["d83ddc69200dd83cdfa8","d83ddc69d83cdffb200dd83cdfa8","d83ddc69d83cdffc200dd83cdfa8","d83ddc69d83cdffd200dd83cdfa8","d83ddc69d83cdffe200dd83cdfa8","d83ddc69d83cdfff200dd83cdfa8"],["d83eddd1200d2708fe0f","d83eddd1d83cdffb200d2708fe0f","d83eddd1d83cdffc200d2708fe0f","d83eddd1d83cdffd200d2708fe0f","d83eddd1d83cdffe200d2708fe0f","d83eddd1d83cdfff200d2708fe0f"],["d83ddc68200d2708fe0f","d83ddc68d83cdffb200d2708fe0f","d83ddc68d83cdffc200d2708fe0f","d83ddc68d83cdffd200d2708fe0f","d83ddc68d83cdffe200d2708fe0f","d83ddc68d83cdfff200d2708fe0f"],["d83ddc69200d2708fe0f","d83ddc69d83cdffb200d2708fe0f","d83ddc69d83cdffc200d2708fe0f","d83ddc69d83cdffd200d2708fe0f","d83ddc69d83cdffe200d2708fe0f","d83ddc69d83cdfff200d2708fe0f"],["d83eddd1200dd83dde80","d83eddd1d83cdffb200dd83dde80","d83eddd1d83cdffc200dd83dde80","d83eddd1d83cdffd200dd83dde80","d83eddd1d83cdffe200dd83dde80","d83eddd1d83cdfff200dd83dde80"],["d83ddc68200dd83dde80","d83ddc68d83cdffb200dd83dde80","d83ddc68d83cdffc200dd83dde80","d83ddc68d83cdffd200dd83dde80","d83ddc68d83cdffe200dd83dde80","d83ddc68d83cdfff200dd83dde80"],["d83ddc69200dd83dde80","d83ddc69d83cdffb200dd83dde80","d83ddc69d83cdffc200dd83dde80","d83ddc69d83cdffd200dd83dde80","d83ddc69d83cdffe200dd83dde80","d83ddc69d83cdfff200dd83dde80"],["d83eddd1200dd83dde92","d83eddd1d83cdffb200dd83dde92","d83eddd1d83cdffc200dd83dde92","d83eddd1d83cdffd200dd83dde92","d83eddd1d83cdffe200dd83dde92","d83eddd1d83cdfff200dd83dde92"],["d83ddc68200dd83dde92","d83ddc68d83cdffb200dd83dde92","d83ddc68d83cdffc200dd83dde92","d83ddc68d83cdffd200dd83dde92","d83ddc68d83cdffe200dd83dde92","d83ddc68d83cdfff200dd83dde92"],["d83ddc69200dd83dde92","d83ddc69d83cdffb200dd83dde92","d83ddc69d83cdffc200dd83dde92","d83ddc69d83cdffd200dd83dde92","d83ddc69d83cdffe200dd83dde92","d83ddc69d83cdfff200dd83dde92"],["d83ddc6e","d83ddc6ed83cdffb","d83ddc6ed83cdffc","d83ddc6ed83cdffd","d83ddc6ed83cdffe","d83ddc6ed83cdfff"],["d83ddc6e200d2642fe0f","d83ddc6ed83cdffb200d2642fe0f","d83ddc6ed83cdffc200d2642fe0f","d83ddc6ed83cdffd200d2642fe0f","d83ddc6ed83cdffe200d2642fe0f","d83ddc6ed83cdfff200d2642fe0f"],["d83ddc6e200d2640fe0f","d83ddc6ed83cdffb200d2640fe0f","d83ddc6ed83cdffc200d2640fe0f","d83ddc6ed83cdffd200d2640fe0f","d83ddc6ed83cdffe200d2640fe0f","d83ddc6ed83cdfff200d2640fe0f"],["d83ddd75fe0f","d83ddd75d83cdffb","d83ddd75d83cdffc","d83ddd75d83cdffd","d83ddd75d83cdffe","d83ddd75d83cdfff"],["d83ddd75fe0f200d2642fe0f","d83ddd75d83cdffb200d2642fe0f","d83ddd75d83cdffc200d2642fe0f","d83ddd75d83cdffd200d2642fe0f","d83ddd75d83cdffe200d2642fe0f","d83ddd75d83cdfff200d2642fe0f"],["d83ddd75fe0f200d2640fe0f","d83ddd75d83cdffb200d2640fe0f","d83ddd75d83cdffc200d2640fe0f","d83ddd75d83cdffd200d2640fe0f","d83ddd75d83cdffe200d2640fe0f","d83ddd75d83cdfff200d2640fe0f"],["d83ddc82","d83ddc82d83cdffb","d83ddc82d83cdffc","d83ddc82d83cdffd","d83ddc82d83cdffe","d83ddc82d83cdfff"],["d83ddc82200d2642fe0f","d83ddc82d83cdffb200d2642fe0f","d83ddc82d83cdffc200d2642fe0f","d83ddc82d83cdffd200d2642fe0f","d83ddc82d83cdffe200d2642fe0f","d83ddc82d83cdfff200d2642fe0f"],["d83ddc82200d2640fe0f","d83ddc82d83cdffb200d2640fe0f","d83ddc82d83cdffc200d2640fe0f","d83ddc82d83cdffd200d2640fe0f","d83ddc82d83cdffe200d2640fe0f","d83ddc82d83cdfff200d2640fe0f"],["d83edd77","d83edd77d83cdffb","d83edd77d83cdffc","d83edd77d83cdffd","d83edd77d83cdffe","d83edd77d83cdfff"],["d83ddc77","d83ddc77d83cdffb","d83ddc77d83cdffc","d83ddc77d83cdffd","d83ddc77d83cdffe","d83ddc77d83cdfff"],["d83ddc77200d2642fe0f","d83ddc77d83cdffb200d2642fe0f","d83ddc77d83cdffc200d2642fe0f","d83ddc77d83cdffd200d2642fe0f","d83ddc77d83cdffe200d2642fe0f","d83ddc77d83cdfff200d2642fe0f"],["d83ddc77200d2640fe0f","d83ddc77d83cdffb200d2640fe0f","d83ddc77d83cdffc200d2640fe0f","d83ddc77d83cdffd200d2640fe0f","d83ddc77d83cdffe200d2640fe0f","d83ddc77d83cdfff200d2640fe0f"],["d83edec5","d83edec5d83cdffb","d83edec5d83cdffc","d83edec5d83cdffd","d83edec5d83cdffe","d83edec5d83cdfff"],["d83edd34","d83edd34d83cdffb","d83edd34d83cdffc","d83edd34d83cdffd","d83edd34d83cdffe","d83edd34d83cdfff"],["d83ddc78","d83ddc78d83cdffb","d83ddc78d83cdffc","d83ddc78d83cdffd","d83ddc78d83cdffe","d83ddc78d83cdfff"],["d83ddc73","d83ddc73d83cdffb","d83ddc73d83cdffc","d83ddc73d83cdffd","d83ddc73d83cdffe","d83ddc73d83cdfff"],["d83ddc73200d2642fe0f","d83ddc73d83cdffb200d2642fe0f","d83ddc73d83cdffc200d2642fe0f","d83ddc73d83cdffd200d2642fe0f","d83ddc73d83cdffe200d2642fe0f","d83ddc73d83cdfff200d2642fe0f"],["d83ddc73200d2640fe0f","d83ddc73d83cdffb200d2640fe0f","d83ddc73d83cdffc200d2640fe0f","d83ddc73d83cdffd200d2640fe0f","d83ddc73d83cdffe200d2640fe0f","d83ddc73d83cdfff200d2640fe0f"],["d83ddc72","d83ddc72d83cdffb","d83ddc72d83cdffc","d83ddc72d83cdffd","d83ddc72d83cdffe","d83ddc72d83cdfff"],["d83eddd5","d83eddd5d83cdffb","d83eddd5d83cdffc","d83eddd5d83cdffd","d83eddd5d83cdffe","d83eddd5d83cdfff"],["d83edd35","d83edd35d83cdffb","d83edd35d83cdffc","d83edd35d83cdffd","d83edd35d83cdffe","d83edd35d83cdfff"],["d83edd35200d2642fe0f","d83edd35d83cdffb200d2642fe0f","d83edd35d83cdffc200d2642fe0f","d83edd35d83cdffd200d2642fe0f","d83edd35d83cdffe200d2642fe0f","d83edd35d83cdfff200d2642fe0f"]],"People_5":[["d83edd35200d2640fe0f","d83edd35d83cdffb200d2640fe0f","d83edd35d83cdffc200d2640fe0f","d83edd35d83cdffd200d2640fe0f","d83edd35d83cdffe200d2640fe0f","d83edd35d83cdfff200d2640fe0f"],["d83ddc70","d83ddc70d83cdffb","d83ddc70d83cdffc","d83ddc70d83cdffd","d83ddc70d83cdffe","d83ddc70d83cdfff"],["d83ddc70200d2642fe0f","d83ddc70d83cdffb200d2642fe0f","d83ddc70d83cdffc200d2642fe0f","d83ddc70d83cdffd200d2642fe0f","d83ddc70d83cdffe200d2642fe0f","d83ddc70d83cdfff200d2642fe0f"],["d83ddc70200d2640fe0f","d83ddc70d83cdffb200d2640fe0f","d83ddc70d83cdffc200d2640fe0f","d83ddc70d83cdffd200d2640fe0f","d83ddc70d83cdffe200d2640fe0f","d83ddc70d83cdfff200d2640fe0f"],["d83edd30","d83edd30d83cdffb","d83edd30d83cdffc","d83edd30d83cdffd","d83edd30d83cdffe","d83edd30d83cdfff"],["d83edec3","d83edec3d83cdffb","d83edec3d83cdffc","d83edec3d83cdffd","d83edec3d83cdffe","d83edec3d83cdfff"],["d83edec4","d83edec4d83cdffb","d83edec4d83cdffc","d83edec4d83cdffd","d83edec4d83cdffe","d83edec4d83cdfff"],["d83edd31","d83edd31d83cdffb","d83edd31d83cdffc","d83edd31d83cdffd","d83edd31d83cdffe","d83edd31d83cdfff"],["d83ddc69200dd83cdf7c","d83ddc69d83cdffb200dd83cdf7c","d83ddc69d83cdffc200dd83cdf7c","d83ddc69d83cdffd200dd83cdf7c","d83ddc69d83cdffe200dd83cdf7c","d83ddc69d83cdfff200dd83cdf7c"],["d83ddc68200dd83cdf7c","d83ddc68d83cdffb200dd83cdf7c","d83ddc68d83cdffc200dd83cdf7c","d83ddc68d83cdffd200dd83cdf7c","d83ddc68d83cdffe200dd83cdf7c","d83ddc68d83cdfff200dd83cdf7c"],["d83eddd1200dd83cdf7c","d83eddd1d83cdffb200dd83cdf7c","d83eddd1d83cdffc200dd83cdf7c","d83eddd1d83cdffd200dd83cdf7c","d83eddd1d83cdffe200dd83cdf7c","d83eddd1d83cdfff200dd83cdf7c"],["d83ddc7c","d83ddc7cd83cdffb","d83ddc7cd83cdffc","d83ddc7cd83cdffd","d83ddc7cd83cdffe","d83ddc7cd83cdfff"],["d83cdf85","d83cdf85d83cdffb","d83cdf85d83cdffc","d83cdf85d83cdffd","d83cdf85d83cdffe","d83cdf85d83cdfff"],["d83edd36","d83edd36d83cdffb","d83edd36d83cdffc","d83edd36d83cdffd","d83edd36d83cdffe","d83edd36d83cdfff"],["d83eddd1200dd83cdf84","d83eddd1d83cdffb200dd83cdf84","d83eddd1d83cdffc200dd83cdf84","d83eddd1d83cdffd200dd83cdf84","d83eddd1d83cdffe200dd83cdf84","d83eddd1d83cdfff200dd83cdf84"],["d83eddb8","d83eddb8d83cdffb","d83eddb8d83cdffc","d83eddb8d83cdffd","d83eddb8d83cdffe","d83eddb8d83cdfff"],["d83eddb8200d2642fe0f","d83eddb8d83cdffb200d2642fe0f","d83eddb8d83cdffc200d2642fe0f","d83eddb8d83cdffd200d2642fe0f","d83eddb8d83cdffe200d2642fe0f","d83eddb8d83cdfff200d2642fe0f"],["d83eddb8200d2640fe0f","d83eddb8d83cdffb200d2640fe0f","d83eddb8d83cdffc200d2640fe0f","d83eddb8d83cdffd200d2640fe0f","d83eddb8d83cdffe200d2640fe0f","d83eddb8d83cdfff200d2640fe0f"],["d83eddb9","d83eddb9d83cdffb","d83eddb9d83cdffc","d83eddb9d83cdffd","d83eddb9d83cdffe","d83eddb9d83cdfff"],["d83eddb9200d2642fe0f","d83eddb9d83cdffb200d2642fe0f","d83eddb9d83cdffc200d2642fe0f","d83eddb9d83cdffd200d2642fe0f","d83eddb9d83cdffe200d2642fe0f","d83eddb9d83cdfff200d2642fe0f"],["d83eddb9200d2640fe0f","d83eddb9d83cdffb200d2640fe0f","d83eddb9d83cdffc200d2640fe0f","d83eddb9d83cdffd200d2640fe0f","d83eddb9d83cdffe200d2640fe0f","d83eddb9d83cdfff200d2640fe0f"],["d83eddd9","d83eddd9d83cdffb","d83eddd9d83cdffc","d83eddd9d83cdffd","d83eddd9d83cdffe","d83eddd9d83cdfff"],["d83eddd9200d2642fe0f","d83eddd9d83cdffb200d2642fe0f","d83eddd9d83cdffc200d2642fe0f","d83eddd9d83cdffd200d2642fe0f","d83eddd9d83cdffe200d2642fe0f","d83eddd9d83cdfff200d2642fe0f"],["d83eddd9200d2640fe0f","d83eddd9d83cdffb200d2640fe0f","d83eddd9d83cdffc200d2640fe0f","d83eddd9d83cdffd200d2640fe0f","d83eddd9d83cdffe200d2640fe0f","d83eddd9d83cdfff200d2640fe0f"],["d83eddda","d83edddad83cdffb","d83edddad83cdffc","d83edddad83cdffd","d83edddad83cdffe","d83edddad83cdfff"],["d83eddda200d2642fe0f","d83edddad83cdffb200d2642fe0f","d83edddad83cdffc200d2642fe0f","d83edddad83cdffd200d2642fe0f","d83edddad83cdffe200d2642fe0f","d83edddad83cdfff200d2642fe0f"],["d83eddda200d2640fe0f","d83edddad83cdffb200d2640fe0f","d83edddad83cdffc200d2640fe0f","d83edddad83cdffd200d2640fe0f","d83edddad83cdffe200d2640fe0f","d83edddad83cdfff200d2640fe0f"],["d83edddb","d83edddbd83cdffb","d83edddbd83cdffc","d83edddbd83cdffd","d83edddbd83cdffe","d83edddbd83cdfff"],["d83edddb200d2642fe0f","d83edddbd83cdffb200d2642fe0f","d83edddbd83cdffc200d2642fe0f","d83edddbd83cdffd200d2642fe0f","d83edddbd83cdffe200d2642fe0f","d83edddbd83cdfff200d2642fe0f"],["d83edddb200d2640fe0f","d83edddbd83cdffb200d2640fe0f","d83edddbd83cdffc200d2640fe0f","d83edddbd83cdffd200d2640fe0f","d83edddbd83cdffe200d2640fe0f","d83edddbd83cdfff200d2640fe0f"],["d83edddc","d83edddcd83cdffb","d83edddcd83cdffc","d83edddcd83cdffd","d83edddcd83cdffe","d83edddcd83cdfff"],["d83edddc200d2642fe0f","d83edddcd83cdffb200d2642fe0f","d83edddcd83cdffc200d2642fe0f","d83edddcd83cdffd200d2642fe0f","d83edddcd83cdffe200d2642fe0f","d83edddcd83cdfff200d2642fe0f"],["d83edddc200d2640fe0f","d83edddcd83cdffb200d2640fe0f","d83edddcd83cdffc200d2640fe0f","d83edddcd83cdffd200d2640fe0f","d83edddcd83cdffe200d2640fe0f","d83edddcd83cdfff200d2640fe0f"],["d83edddd","d83eddddd83cdffb","d83eddddd83cdffc","d83eddddd83cdffd","d83eddddd83cdffe","d83eddddd83cdfff"],["d83edddd200d2642fe0f","d83eddddd83cdffb200d2642fe0f","d83eddddd83cdffc200d2642fe0f","d83eddddd83cdffd200d2642fe0f","d83eddddd83cdffe200d2642fe0f","d83eddddd83cdfff200d2642fe0f"],["d83edddd200d2640fe0f","d83eddddd83cdffb200d2640fe0f","d83eddddd83cdffc200d2640fe0f","d83eddddd83cdffd200d2640fe0f","d83eddddd83cdffe200d2640fe0f","d83eddddd83cdfff200d2640fe0f"],["d83eddde"],["d83eddde200d2642fe0f"],["d83eddde200d2640fe0f"],["d83edddf"],["d83edddf200d2642fe0f"],["d83edddf200d2640fe0f"],["d83eddcc"],["d83ddc86","d83ddc86d83cdffb","d83ddc86d83cdffc","d83ddc86d83cdffd","d83ddc86d83cdffe","d83ddc86d83cdfff"],["d83ddc86200d2642fe0f","d83ddc86d83cdffb200d2642fe0f","d83ddc86d83cdffc200d2642fe0f","d83ddc86d83cdffd200d2642fe0f","d83ddc86d83cdffe200d2642fe0f","d83ddc86d83cdfff200d2642fe0f"],["d83ddc86200d2640fe0f","d83ddc86d83cdffb200d2640fe0f","d83ddc86d83cdffc200d2640fe0f","d83ddc86d83cdffd200d2640fe0f","d83ddc86d83cdffe200d2640fe0f","d83ddc86d83cdfff200d2640fe0f"],["d83ddc87","d83ddc87d83cdffb","d83ddc87d83cdffc","d83ddc87d83cdffd","d83ddc87d83cdffe","d83ddc87d83cdfff"],["d83ddc87200d2642fe0f","d83ddc87d83cdffb200d2642fe0f","d83ddc87d83cdffc200d2642fe0f","d83ddc87d83cdffd200d2642fe0f","d83ddc87d83cdffe200d2642fe0f","d83ddc87d83cdfff200d2642fe0f"]],"People_6":[["d83ddc87200d2640fe0f","d83ddc87d83cdffb200d2640fe0f","d83ddc87d83cdffc200d2640fe0f","d83ddc87d83cdffd200d2640fe0f","d83ddc87d83cdffe200d2640fe0f","d83ddc87d83cdfff200d2640fe0f"],["d83ddeb6","d83ddeb6d83cdffb","d83ddeb6d83cdffc","d83ddeb6d83cdffd","d83ddeb6d83cdffe","d83ddeb6d83cdfff"],["d83ddeb6200d2642fe0f","d83ddeb6d83cdffb200d2642fe0f","d83ddeb6d83cdffc200d2642fe0f","d83ddeb6d83cdffd200d2642fe0f","d83ddeb6d83cdffe200d2642fe0f","d83ddeb6d83cdfff200d2642fe0f"],["d83ddeb6200d2640fe0f","d83ddeb6d83cdffb200d2640fe0f","d83ddeb6d83cdffc200d2640fe0f","d83ddeb6d83cdffd200d2640fe0f","d83ddeb6d83cdffe200d2640fe0f","d83ddeb6d83cdfff200d2640fe0f"],["d83eddcd","d83eddcdd83cdffb","d83eddcdd83cdffc","d83eddcdd83cdffd","d83eddcdd83cdffe","d83eddcdd83cdfff"],["d83eddcd200d2642fe0f","d83eddcdd83cdffb200d2642fe0f","d83eddcdd83cdffc200d2642fe0f","d83eddcdd83cdffd200d2642fe0f","d83eddcdd83cdffe200d2642fe0f","d83eddcdd83cdfff200d2642fe0f"],["d83eddcd200d2640fe0f","d83eddcdd83cdffb200d2640fe0f","d83eddcdd83cdffc200d2640fe0f","d83eddcdd83cdffd200d2640fe0f","d83eddcdd83cdffe200d2640fe0f","d83eddcdd83cdfff200d2640fe0f"],["d83eddce","d83eddced83cdffb","d83eddced83cdffc","d83eddced83cdffd","d83eddced83cdffe","d83eddced83cdfff"],["d83eddce200d2642fe0f","d83eddced83cdffb200d2642fe0f","d83eddced83cdffc200d2642fe0f","d83eddced83cdffd200d2642fe0f","d83eddced83cdffe200d2642fe0f","d83eddced83cdfff200d2642fe0f"],["d83eddce200d2640fe0f","d83eddced83cdffb200d2640fe0f","d83eddced83cdffc200d2640fe0f","d83eddced83cdffd200d2640fe0f","d83eddced83cdffe200d2640fe0f","d83eddced83cdfff200d2640fe0f"],["d83eddd1200dd83eddaf","d83eddd1d83cdffb200dd83eddaf","d83eddd1d83cdffc200dd83eddaf","d83eddd1d83cdffd200dd83eddaf","d83eddd1d83cdffe200dd83eddaf","d83eddd1d83cdfff200dd83eddaf"],["d83ddc68200dd83eddaf","d83ddc68d83cdffb200dd83eddaf","d83ddc68d83cdffc200dd83eddaf","d83ddc68d83cdffd200dd83eddaf","d83ddc68d83cdffe200dd83eddaf","d83ddc68d83cdfff200dd83eddaf"],["d83ddc69200dd83eddaf","d83ddc69d83cdffb200dd83eddaf","d83ddc69d83cdffc200dd83eddaf","d83ddc69d83cdffd200dd83eddaf","d83ddc69d83cdffe200dd83eddaf","d83ddc69d83cdfff200dd83eddaf"],["d83eddd1200dd83eddbc","d83eddd1d83cdffb200dd83eddbc","d83eddd1d83cdffc200dd83eddbc","d83eddd1d83cdffd200dd83eddbc","d83eddd1d83cdffe200dd83eddbc","d83eddd1d83cdfff200dd83eddbc"],["d83ddc68200dd83eddbc","d83ddc68d83cdffb200dd83eddbc","d83ddc68d83cdffc200dd83eddbc","d83ddc68d83cdffd200dd83eddbc","d83ddc68d83cdffe200dd83eddbc","d83ddc68d83cdfff200dd83eddbc"],["d83ddc69200dd83eddbc","d83ddc69d83cdffb200dd83eddbc","d83ddc69d83cdffc200dd83eddbc","d83ddc69d83cdffd200dd83eddbc","d83ddc69d83cdffe200dd83eddbc","d83ddc69d83cdfff200dd83eddbc"],["d83eddd1200dd83eddbd","d83eddd1d83cdffb200dd83eddbd","d83eddd1d83cdffc200dd83eddbd","d83eddd1d83cdffd200dd83eddbd","d83eddd1d83cdffe200dd83eddbd","d83eddd1d83cdfff200dd83eddbd"],["d83ddc68200dd83eddbd","d83ddc68d83cdffb200dd83eddbd","d83ddc68d83cdffc200dd83eddbd","d83ddc68d83cdffd200dd83eddbd","d83ddc68d83cdffe200dd83eddbd","d83ddc68d83cdfff200dd83eddbd"],["d83ddc69200dd83eddbd","d83ddc69d83cdffb200dd83eddbd","d83ddc69d83cdffc200dd83eddbd","d83ddc69d83cdffd200dd83eddbd","d83ddc69d83cdffe200dd83eddbd","d83ddc69d83cdfff200dd83eddbd"],["d83cdfc3","d83cdfc3d83cdffb","d83cdfc3d83cdffc","d83cdfc3d83cdffd","d83cdfc3d83cdffe","d83cdfc3d83cdfff"],["d83cdfc3200d2642fe0f","d83cdfc3d83cdffb200d2642fe0f","d83cdfc3d83cdffc200d2642fe0f","d83cdfc3d83cdffd200d2642fe0f","d83cdfc3d83cdffe200d2642fe0f","d83cdfc3d83cdfff200d2642fe0f"],["d83cdfc3200d2640fe0f","d83cdfc3d83cdffb200d2640fe0f","d83cdfc3d83cdffc200d2640fe0f","d83cdfc3d83cdffd200d2640fe0f","d83cdfc3d83cdffe200d2640fe0f","d83cdfc3d83cdfff200d2640fe0f"],["d83ddc83","d83ddc83d83cdffb","d83ddc83d83cdffc","d83ddc83d83cdffd","d83ddc83d83cdffe","d83ddc83d83cdfff"],["d83ddd7a","d83ddd7ad83cdffb","d83ddd7ad83cdffc","d83ddd7ad83cdffd","d83ddd7ad83cdffe","d83ddd7ad83cdfff"],["d83ddd74fe0f","d83ddd74d83cdffb","d83ddd74d83cdffc","d83ddd74d83cdffd","d83ddd74d83cdffe","d83ddd74d83cdfff"],["d83ddc6f"],["d83ddc6f200d2642fe0f"],["d83ddc6f200d2640fe0f"],["d83eddd6","d83eddd6d83cdffb","d83eddd6d83cdffc","d83eddd6d83cdffd","d83eddd6d83cdffe","d83eddd6d83cdfff"],["d83eddd6200d2642fe0f","d83eddd6d83cdffb200d2642fe0f","d83eddd6d83cdffc200d2642fe0f","d83eddd6d83cdffd200d2642fe0f","d83eddd6d83cdffe200d2642fe0f","d83eddd6d83cdfff200d2642fe0f"],["d83eddd6200d2640fe0f","d83eddd6d83cdffb200d2640fe0f","d83eddd6d83cdffc200d2640fe0f","d83eddd6d83cdffd200d2640fe0f","d83eddd6d83cdffe200d2640fe0f","d83eddd6d83cdfff200d2640fe0f"],["d83eddd7","d83eddd7d83cdffb","d83eddd7d83cdffc","d83eddd7d83cdffd","d83eddd7d83cdffe","d83eddd7d83cdfff"],["d83eddd7200d2642fe0f","d83eddd7d83cdffb200d2642fe0f","d83eddd7d83cdffc200d2642fe0f","d83eddd7d83cdffd200d2642fe0f","d83eddd7d83cdffe200d2642fe0f","d83eddd7d83cdfff200d2642fe0f"],["d83eddd7200d2640fe0f","d83eddd7d83cdffb200d2640fe0f","d83eddd7d83cdffc200d2640fe0f","d83eddd7d83cdffd200d2640fe0f","d83eddd7d83cdffe200d2640fe0f","d83eddd7d83cdfff200d2640fe0f"],["d83edd3a"],["d83cdfc7","d83cdfc7d83cdffb","d83cdfc7d83cdffc","d83cdfc7d83cdffd","d83cdfc7d83cdffe","d83cdfc7d83cdfff"],["26f7fe0f"],["d83cdfc2","d83cdfc2d83cdffb","d83cdfc2d83cdffc","d83cdfc2d83cdffd","d83cdfc2d83cdffe","d83cdfc2d83cdfff"],["d83cdfccfe0f","d83cdfccd83cdffb","d83cdfccd83cdffc","d83cdfccd83cdffd","d83cdfccd83cdffe","d83cdfccd83cdfff"],["d83cdfccfe0f200d2642fe0f","d83cdfccd83cdffb200d2642fe0f","d83cdfccd83cdffc200d2642fe0f","d83cdfccd83cdffd200d2642fe0f","d83cdfccd83cdffe200d2642fe0f","d83cdfccd83cdfff200d2642fe0f"],["d83cdfccfe0f200d2640fe0f","d83cdfccd83cdffb200d2640fe0f","d83cdfccd83cdffc200d2640fe0f","d83cdfccd83cdffd200d2640fe0f","d83cdfccd83cdffe200d2640fe0f","d83cdfccd83cdfff200d2640fe0f"],["d83cdfc4","d83cdfc4d83cdffb","d83cdfc4d83cdffc","d83cdfc4d83cdffd","d83cdfc4d83cdffe","d83cdfc4d83cdfff"],["d83cdfc4200d2642fe0f","d83cdfc4d83cdffb200d2642fe0f","d83cdfc4d83cdffc200d2642fe0f","d83cdfc4d83cdffd200d2642fe0f","d83cdfc4d83cdffe200d2642fe0f","d83cdfc4d83cdfff200d2642fe0f"],["d83cdfc4200d2640fe0f","d83cdfc4d83cdffb200d2640fe0f","d83cdfc4d83cdffc200d2640fe0f","d83cdfc4d83cdffd200d2640fe0f","d83cdfc4d83cdffe200d2640fe0f","d83cdfc4d83cdfff200d2640fe0f"],["d83ddea3","d83ddea3d83cdffb","d83ddea3d83cdffc","d83ddea3d83cdffd","d83ddea3d83cdffe","d83ddea3d83cdfff"],["d83ddea3200d2642fe0f","d83ddea3d83cdffb200d2642fe0f","d83ddea3d83cdffc200d2642fe0f","d83ddea3d83cdffd200d2642fe0f","d83ddea3d83cdffe200d2642fe0f","d83ddea3d83cdfff200d2642fe0f"]],"People_7":[["d83ddea3200d2640fe0f","d83ddea3d83cdffb200d2640fe0f","d83ddea3d83cdffc200d2640fe0f","d83ddea3d83cdffd200d2640fe0f","d83ddea3d83cdffe200d2640fe0f","d83ddea3d83cdfff200d2640fe0f"],["d83cdfca","d83cdfcad83cdffb","d83cdfcad83cdffc","d83cdfcad83cdffd","d83cdfcad83cdffe","d83cdfcad83cdfff"],["d83cdfca200d2642fe0f","d83cdfcad83cdffb200d2642fe0f","d83cdfcad83cdffc200d2642fe0f","d83cdfcad83cdffd200d2642fe0f","d83cdfcad83cdffe200d2642fe0f","d83cdfcad83cdfff200d2642fe0f"],["d83cdfca200d2640fe0f","d83cdfcad83cdffb200d2640fe0f","d83cdfcad83cdffc200d2640fe0f","d83cdfcad83cdffd200d2640fe0f","d83cdfcad83cdffe200d2640fe0f","d83cdfcad83cdfff200d2640fe0f"],["26f9fe0f","26f9d83cdffb","26f9d83cdffc","26f9d83cdffd","26f9d83cdffe","26f9d83cdfff"],["26f9fe0f200d2642fe0f","26f9d83cdffb200d2642fe0f","26f9d83cdffc200d2642fe0f","26f9d83cdffd200d2642fe0f","26f9d83cdffe200d2642fe0f","26f9d83cdfff200d2642fe0f"],["26f9fe0f200d2640fe0f","26f9d83cdffb200d2640fe0f","26f9d83cdffc200d2640fe0f","26f9d83cdffd200d2640fe0f","26f9d83cdffe200d2640fe0f","26f9d83cdfff200d2640fe0f"],["d83cdfcbfe0f","d83cdfcbd83cdffb","d83cdfcbd83cdffc","d83cdfcbd83cdffd","d83cdfcbd83cdffe","d83cdfcbd83cdfff"],["d83cdfcbfe0f200d2642fe0f","d83cdfcbd83cdffb200d2642fe0f","d83cdfcbd83cdffc200d2642fe0f","d83cdfcbd83cdffd200d2642fe0f","d83cdfcbd83cdffe200d2642fe0f","d83cdfcbd83cdfff200d2642fe0f"],["d83cdfcbfe0f200d2640fe0f","d83cdfcbd83cdffb200d2640fe0f","d83cdfcbd83cdffc200d2640fe0f","d83cdfcbd83cdffd200d2640fe0f","d83cdfcbd83cdffe200d2640fe0f","d83cdfcbd83cdfff200d2640fe0f"],["d83ddeb4","d83ddeb4d83cdffb","d83ddeb4d83cdffc","d83ddeb4d83cdffd","d83ddeb4d83cdffe","d83ddeb4d83cdfff"],["d83ddeb4200d2642fe0f","d83ddeb4d83cdffb200d2642fe0f","d83ddeb4d83cdffc200d2642fe0f","d83ddeb4d83cdffd200d2642fe0f","d83ddeb4d83cdffe200d2642fe0f","d83ddeb4d83cdfff200d2642fe0f"],["d83ddeb4200d2640fe0f","d83ddeb4d83cdffb200d2640fe0f","d83ddeb4d83cdffc200d2640fe0f","d83ddeb4d83cdffd200d2640fe0f","d83ddeb4d83cdffe200d2640fe0f","d83ddeb4d83cdfff200d2640fe0f"],["d83ddeb5","d83ddeb5d83cdffb","d83ddeb5d83cdffc","d83ddeb5d83cdffd","d83ddeb5d83cdffe","d83ddeb5d83cdfff"],["d83ddeb5200d2642fe0f","d83ddeb5d83cdffb200d2642fe0f","d83ddeb5d83cdffc200d2642fe0f","d83ddeb5d83cdffd200d2642fe0f","d83ddeb5d83cdffe200d2642fe0f","d83ddeb5d83cdfff200d2642fe0f"],["d83ddeb5200d2640fe0f","d83ddeb5d83cdffb200d2640fe0f","d83ddeb5d83cdffc200d2640fe0f","d83ddeb5d83cdffd200d2640fe0f","d83ddeb5d83cdffe200d2640fe0f","d83ddeb5d83cdfff200d2640fe0f"],["d83edd38","d83edd38d83cdffb","d83edd38d83cdffc","d83edd38d83cdffd","d83edd38d83cdffe","d83edd38d83cdfff"],["d83edd38200d2642fe0f","d83edd38d83cdffb200d2642fe0f","d83edd38d83cdffc200d2642fe0f","d83edd38d83cdffd200d2642fe0f","d83edd38d83cdffe200d2642fe0f","d83edd38d83cdfff200d2642fe0f"],["d83edd38200d2640fe0f","d83edd38d83cdffb200d2640fe0f","d83edd38d83cdffc200d2640fe0f","d83edd38d83cdffd200d2640fe0f","d83edd38d83cdffe200d2640fe0f","d83edd38d83cdfff200d2640fe0f"],["d83edd3c"],["d83edd3c200d2642fe0f"],["d83edd3c200d2640fe0f"],["d83edd3d","d83edd3dd83cdffb","d83edd3dd83cdffc","d83edd3dd83cdffd","d83edd3dd83cdffe","d83edd3dd83cdfff"],["d83edd3d200d2642fe0f","d83edd3dd83cdffb200d2642fe0f","d83edd3dd83cdffc200d2642fe0f","d83edd3dd83cdffd200d2642fe0f","d83edd3dd83cdffe200d2642fe0f","d83edd3dd83cdfff200d2642fe0f"],["d83edd3d200d2640fe0f","d83edd3dd83cdffb200d2640fe0f","d83edd3dd83cdffc200d2640fe0f","d83edd3dd83cdffd200d2640fe0f","d83edd3dd83cdffe200d2640fe0f","d83edd3dd83cdfff200d2640fe0f"],["d83edd3e","d83edd3ed83cdffb","d83edd3ed83cdffc","d83edd3ed83cdffd","d83edd3ed83cdffe","d83edd3ed83cdfff"],["d83edd3e200d2642fe0f","d83edd3ed83cdffb200d2642fe0f","d83edd3ed83cdffc200d2642fe0f","d83edd3ed83cdffd200d2642fe0f","d83edd3ed83cdffe200d2642fe0f","d83edd3ed83cdfff200d2642fe0f"],["d83edd3e200d2640fe0f","d83edd3ed83cdffb200d2640fe0f","d83edd3ed83cdffc200d2640fe0f","d83edd3ed83cdffd200d2640fe0f","d83edd3ed83cdffe200d2640fe0f","d83edd3ed83cdfff200d2640fe0f"],["d83edd39","d83edd39d83cdffb","d83edd39d83cdffc","d83edd39d83cdffd","d83edd39d83cdffe","d83edd39d83cdfff"],["d83edd39200d2642fe0f","d83edd39d83cdffb200d2642fe0f","d83edd39d83cdffc200d2642fe0f","d83edd39d83cdffd200d2642fe0f","d83edd39d83cdffe200d2642fe0f","d83edd39d83cdfff200d2642fe0f"],["d83edd39200d2640fe0f","d83edd39d83cdffb200d2640fe0f","d83edd39d83cdffc200d2640fe0f","d83edd39d83cdffd200d2640fe0f","d83edd39d83cdffe200d2640fe0f","d83edd39d83cdfff200d2640fe0f"],["d83eddd8","d83eddd8d83cdffb","d83eddd8d83cdffc","d83eddd8d83cdffd","d83eddd8d83cdffe","d83eddd8d83cdfff"],["d83eddd8200d2642fe0f","d83eddd8d83cdffb200d2642fe0f","d83eddd8d83cdffc200d2642fe0f","d83eddd8d83cdffd200d2642fe0f","d83eddd8d83cdffe200d2642fe0f","d83eddd8d83cdfff200d2642fe0f"],["d83eddd8200d2640fe0f","d83eddd8d83cdffb200d2640fe0f","d83eddd8d83cdffc200d2640fe0f","d83eddd8d83cdffd200d2640fe0f","d83eddd8d83cdffe200d2640fe0f","d83eddd8d83cdfff200d2640fe0f"],["d83ddec0","d83ddec0d83cdffb","d83ddec0d83cdffc","d83ddec0d83cdffd","d83ddec0d83cdffe","d83ddec0d83cdfff"],["d83ddecc","d83ddeccd83cdffb","d83ddeccd83cdffc","d83ddeccd83cdffd","d83ddeccd83cdffe","d83ddeccd83cdfff"],["d83eddd1200dd83edd1d200dd83eddd1","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdfff","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdfff","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdfff","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdfff","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdfff"],["d83ddc6d","d83ddc6dd83cdffb","d83ddc6dd83cdffc","d83ddc6dd83cdffd","d83ddc6dd83cdffe","d83ddc6dd83cdfff","d83ddc69d83cdffb200dd83edd1d200dd83ddc69d83cdffc","d83ddc69d83cdffb200dd83edd1d200dd83ddc69d83cdffd","d83ddc69d83cdffb200dd83edd1d200dd83ddc69d83cdffe","d83ddc69d83cdffb200dd83edd1d200dd83ddc69d83cdfff","d83ddc69d83cdffc200dd83edd1d200dd83ddc69d83cdffb","d83ddc69d83cdffc200dd83edd1d200dd83ddc69d83cdffd","d83ddc69d83cdffc200dd83edd1d200dd83ddc69d83cdffe","d83ddc69d83cdffc200dd83edd1d200dd83ddc69d83cdfff","d83ddc69d83cdffd200dd83edd1d200dd83ddc69d83cdffb","d83ddc69d83cdffd200dd83edd1d200dd83ddc69d83cdffc","d83ddc69d83cdffd200dd83edd1d200dd83ddc69d83cdffe","d83ddc69d83cdffd200dd83edd1d200dd83ddc69d83cdfff","d83ddc69d83cdffe200dd83edd1d200dd83ddc69d83cdffb","d83ddc69d83cdffe200dd83edd1d200dd83ddc69d83cdffc","d83ddc69d83cdffe200dd83edd1d200dd83ddc69d83cdffd","d83ddc69d83cdffe200dd83edd1d200dd83ddc69d83cdfff","d83ddc69d83cdfff200dd83edd1d200dd83ddc69d83cdffb","d83ddc69d83cdfff200dd83edd1d200dd83ddc69d83cdffc","d83ddc69d83cdfff200dd83edd1d200dd83ddc69d83cdffd","d83ddc69d83cdfff200dd83edd1d200dd83ddc69d83cdffe"]],"People_8":[["d83ddc6b","d83ddc6bd83cdffb","d83ddc6bd83cdffc","d83ddc6bd83cdffd","d83ddc6bd83cdffe","d83ddc6bd83cdfff","d83ddc69d83cdffb200dd83edd1d200dd83ddc68d83cdffc","d83ddc69d83cdffb200dd83edd1d200dd83ddc68d83cdffd","d83ddc69d83cdffb200dd83edd1d200dd83ddc68d83cdffe","d83ddc69d83cdffb200dd83edd1d200dd83ddc68d83cdfff","d83ddc69d83cdffc200dd83edd1d200dd83ddc68d83cdffb","d83ddc69d83cdffc200dd83edd1d200dd83ddc68d83cdffd","d83ddc69d83cdffc200dd83edd1d200dd83ddc68d83cdffe","d83ddc69d83cdffc200dd83edd1d200dd83ddc68d83cdfff","d83ddc69d83cdffd200dd83edd1d200dd83ddc68d83cdffb","d83ddc69d83cdffd200dd83edd1d200dd83ddc68d83cdffc","d83ddc69d83cdffd200dd83edd1d200dd83ddc68d83cdffe","d83ddc69d83cdffd200dd83edd1d200dd83ddc68d83cdfff","d83ddc69d83cdffe200dd83edd1d200dd83ddc68d83cdffb","d83ddc69d83cdffe200dd83edd1d200dd83ddc68d83cdffc","d83ddc69d83cdffe200dd83edd1d200dd83ddc68d83cdffd","d83ddc69d83cdffe200dd83edd1d200dd83ddc68d83cdfff","d83ddc69d83cdfff200dd83edd1d200dd83ddc68d83cdffb","d83ddc69d83cdfff200dd83edd1d200dd83ddc68d83cdffc","d83ddc69d83cdfff200dd83edd1d200dd83ddc68d83cdffd","d83ddc69d83cdfff200dd83edd1d200dd83ddc68d83cdffe"],["d83ddc6c","d83ddc6cd83cdffb","d83ddc6cd83cdffc","d83ddc6cd83cdffd","d83ddc6cd83cdffe","d83ddc6cd83cdfff","d83ddc68d83cdffb200dd83edd1d200dd83ddc68d83cdffc","d83ddc68d83cdffb200dd83edd1d200dd83ddc68d83cdffd","d83ddc68d83cdffb200dd83edd1d200dd83ddc68d83cdffe","d83ddc68d83cdffb200dd83edd1d200dd83ddc68d83cdfff","d83ddc68d83cdffc200dd83edd1d200dd83ddc68d83cdffb","d83ddc68d83cdffc200dd83edd1d200dd83ddc68d83cdffd","d83ddc68d83cdffc200dd83edd1d200dd83ddc68d83cdffe","d83ddc68d83cdffc200dd83edd1d200dd83ddc68d83cdfff","d83ddc68d83cdffd200dd83edd1d200dd83ddc68d83cdffb","d83ddc68d83cdffd200dd83edd1d200dd83ddc68d83cdffc","d83ddc68d83cdffd200dd83edd1d200dd83ddc68d83cdffe","d83ddc68d83cdffd200dd83edd1d200dd83ddc68d83cdfff","d83ddc68d83cdffe200dd83edd1d200dd83ddc68d83cdffb","d83ddc68d83cdffe200dd83edd1d200dd83ddc68d83cdffc","d83ddc68d83cdffe200dd83edd1d200dd83ddc68d83cdffd","d83ddc68d83cdffe200dd83edd1d200dd83ddc68d83cdfff","d83ddc68d83cdfff200dd83edd1d200dd83ddc68d83cdffb","d83ddc68d83cdfff200dd83edd1d200dd83ddc68d83cdffc","d83ddc68d83cdfff200dd83edd1d200dd83ddc68d83cdffd","d83ddc68d83cdfff200dd83edd1d200dd83ddc68d83cdffe"],["d83ddc8f","d83ddc8fd83cdffb","d83ddc8fd83cdffc","d83ddc8fd83cdffd","d83ddc8fd83cdffe","d83ddc8fd83cdfff","d83eddd1d83cdffb200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffc","d83eddd1d83cdffb200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffd","d83eddd1d83cdffb200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffe","d83eddd1d83cdffb200d2764fe0f200dd83ddc8b200dd83eddd1d83cdfff","d83eddd1d83cdffc200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffb","d83eddd1d83cdffc200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffd","d83eddd1d83cdffc200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffe","d83eddd1d83cdffc200d2764fe0f200dd83ddc8b200dd83eddd1d83cdfff","d83eddd1d83cdffd200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffb","d83eddd1d83cdffd200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffc","d83eddd1d83cdffd200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffe","d83eddd1d83cdffd200d2764fe0f200dd83ddc8b200dd83eddd1d83cdfff","d83eddd1d83cdffe200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffb","d83eddd1d83cdffe200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffc","d83eddd1d83cdffe200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffd","d83eddd1d83cdffe200d2764fe0f200dd83ddc8b200dd83eddd1d83cdfff","d83eddd1d83cdfff200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffb","d83eddd1d83cdfff200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffc","d83eddd1d83cdfff200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffd","d83eddd1d83cdfff200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffe"],["d83ddc69200d2764fe0f200dd83ddc8b200dd83ddc68","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff"],["d83ddc68200d2764fe0f200dd83ddc8b200dd83ddc68","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff"],["d83ddc69200d2764fe0f200dd83ddc8b200dd83ddc69","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff"]],"People_9":[["d83ddc91","d83ddc91d83cdffb","d83ddc91d83cdffc","d83ddc91d83cdffd","d83ddc91d83cdffe","d83ddc91d83cdfff","d83eddd1d83cdffb200d2764fe0f200dd83eddd1d83cdffc","d83eddd1d83cdffb200d2764fe0f200dd83eddd1d83cdffd","d83eddd1d83cdffb200d2764fe0f200dd83eddd1d83cdffe","d83eddd1d83cdffb200d2764fe0f200dd83eddd1d83cdfff","d83eddd1d83cdffc200d2764fe0f200dd83eddd1d83cdffb","d83eddd1d83cdffc200d2764fe0f200dd83eddd1d83cdffd","d83eddd1d83cdffc200d2764fe0f200dd83eddd1d83cdffe","d83eddd1d83cdffc200d2764fe0f200dd83eddd1d83cdfff","d83eddd1d83cdffd200d2764fe0f200dd83eddd1d83cdffb","d83eddd1d83cdffd200d2764fe0f200dd83eddd1d83cdffc","d83eddd1d83cdffd200d2764fe0f200dd83eddd1d83cdffe","d83eddd1d83cdffd200d2764fe0f200dd83eddd1d83cdfff","d83eddd1d83cdffe200d2764fe0f200dd83eddd1d83cdffb","d83eddd1d83cdffe200d2764fe0f200dd83eddd1d83cdffc","d83eddd1d83cdffe200d2764fe0f200dd83eddd1d83cdffd","d83eddd1d83cdffe200d2764fe0f200dd83eddd1d83cdfff","d83eddd1d83cdfff200d2764fe0f200dd83eddd1d83cdffb","d83eddd1d83cdfff200d2764fe0f200dd83eddd1d83cdffc","d83eddd1d83cdfff200d2764fe0f200dd83eddd1d83cdffd","d83eddd1d83cdfff200d2764fe0f200dd83eddd1d83cdffe"],["d83ddc69200d2764fe0f200dd83ddc68","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdfff","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdfff","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdfff","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdfff","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdfff"],["d83ddc68200d2764fe0f200dd83ddc68","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdfff","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdfff","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdfff","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdfff","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdfff"],["d83ddc69200d2764fe0f200dd83ddc69","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdfff","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdfff","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdfff","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdfff","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdfff"],["d83ddc6a"],["d83ddc68200dd83ddc69200dd83ddc66"],["d83ddc68200dd83ddc69200dd83ddc67"],["d83ddc68200dd83ddc69200dd83ddc67200dd83ddc66"],["d83ddc68200dd83ddc69200dd83ddc66200dd83ddc66"],["d83ddc68200dd83ddc69200dd83ddc67200dd83ddc67"],["d83ddc68200dd83ddc68200dd83ddc66"],["d83ddc68200dd83ddc68200dd83ddc67"],["d83ddc68200dd83ddc68200dd83ddc67200dd83ddc66"],["d83ddc68200dd83ddc68200dd83ddc66200dd83ddc66"],["d83ddc68200dd83ddc68200dd83ddc67200dd83ddc67"],["d83ddc69200dd83ddc69200dd83ddc66"],["d83ddc69200dd83ddc69200dd83ddc67"],["d83ddc69200dd83ddc69200dd83ddc67200dd83ddc66"],["d83ddc69200dd83ddc69200dd83ddc66200dd83ddc66"],["d83ddc69200dd83ddc69200dd83ddc67200dd83ddc67"],["d83ddc68200dd83ddc66"],["d83ddc68200dd83ddc66200dd83ddc66"],["d83ddc68200dd83ddc67"],["d83ddc68200dd83ddc67200dd83ddc66"],["d83ddc68200dd83ddc67200dd83ddc67"],["d83ddc69200dd83ddc66"],["d83ddc69200dd83ddc66200dd83ddc66"],["d83ddc69200dd83ddc67"],["d83ddc69200dd83ddc67200dd83ddc66"],["d83ddc69200dd83ddc67200dd83ddc67"],["d83ddde3fe0f"],["d83ddc64"],["d83ddc65"],["d83edec2"],["d83ddc63"]],"Nature":[["d83ddc35"],["d83ddc12"],["d83edd8d"],["d83edda7"],["d83ddc36"],["d83ddc15"],["d83eddae"],["d83ddc15200dd83eddba"],["d83ddc29"],["d83ddc3a"],["d83edd8a"],["d83edd9d"],["d83ddc31"],["d83ddc08"],["d83ddc08200d2b1b"],["d83edd81"],["d83ddc2f"],["d83ddc05"],["d83ddc06"],["d83ddc34"],["d83edece"],["d83edecf"],["d83ddc0e"],["d83edd84"],["d83edd93"],["d83edd8c"],["d83eddac"],["d83ddc2e"],["d83ddc02"],["d83ddc03"],["d83ddc04"],["d83ddc37"],["d83ddc16"],["d83ddc17"],["d83ddc3d"],["d83ddc0f"],["d83ddc11"],["d83ddc10"],["d83ddc2a"],["d83ddc2b"],["d83edd99"],["d83edd92"],["d83ddc18"],["d83edda3"],["d83edd8f"],["d83edd9b"],["d83ddc2d"],["d83ddc01"],["d83ddc00"],["d83ddc39"],["d83ddc30"],["d83ddc07"],["d83ddc3ffe0f"],["d83eddab"],["d83edd94"],["d83edd87"],["d83ddc3b"],["d83ddc3b200d2744fe0f"],["d83ddc28"],["d83ddc3c"],["d83edda5"],["d83edda6"],["d83edda8"],["d83edd98"],["d83edda1"],["d83ddc3e"],["d83edd83"],["d83ddc14"],["d83ddc13"],["d83ddc23"],["d83ddc24"],["d83ddc25"],["d83ddc26"],["d83ddc27"],["d83ddd4afe0f"],["d83edd85"],["d83edd86"],["d83edda2"],["d83edd89"],["d83edda4"],["d83edeb6"],["d83edda9"],["d83edd9a"],["d83edd9c"],["d83edebd"],["d83ddc26200d2b1b"],["d83edebf"],["d83ddc38"],["d83ddc0a"],["d83ddc22"],["d83edd8e"],["d83ddc0d"],["d83ddc32"],["d83ddc09"],["d83edd95"],["d83edd96"],["d83ddc33"],["d83ddc0b"],["d83ddc2c"],["d83eddad"],["d83ddc1f"],["d83ddc20"],["d83ddc21"],["d83edd88"],["d83ddc19"],["d83ddc1a"],["d83edeb8"],["d83edebc"],["d83ddc0c"],["d83edd8b"],["d83ddc1b"],["d83ddc1c"],["d83ddc1d"],["d83edeb2"],["d83ddc1e"],["d83edd97"],["d83edeb3"],["d83ddd77fe0f"],["d83ddd78fe0f"],["d83edd82"],["d83edd9f"],["d83edeb0"],["d83edeb1"],["d83edda0"],["d83ddc90"],["d83cdf38"],["d83ddcae"],["d83edeb7"],["d83cdff5fe0f"],["d83cdf39"],["d83edd40"],["d83cdf3a"],["d83cdf3b"],["d83cdf3c"],["d83cdf37"],["d83edebb"],["d83cdf31"],["d83edeb4"],["d83cdf32"],["d83cdf33"],["d83cdf34"],["d83cdf35"],["d83cdf3e"],["d83cdf3f"],["2618fe0f"],["d83cdf40"],["d83cdf41"],["d83cdf42"],["d83cdf43"],["d83edeb9"],["d83edeba"],["d83cdf44"]],"Foods":[["d83cdf47"],["d83cdf48"],["d83cdf49"],["d83cdf4a"],["d83cdf4b"],["d83cdf4c"],["d83cdf4d"],["d83edd6d"],["d83cdf4e"],["d83cdf4f"],["d83cdf50"],["d83cdf51"],["d83cdf52"],["d83cdf53"],["d83eded0"],["d83edd5d"],["d83cdf45"],["d83eded2"],["d83edd65"],["d83edd51"],["d83cdf46"],["d83edd54"],["d83edd55"],["d83cdf3d"],["d83cdf36fe0f"],["d83eded1"],["d83edd52"],["d83edd6c"],["d83edd66"],["d83eddc4"],["d83eddc5"],["d83edd5c"],["d83eded8"],["d83cdf30"],["d83ededa"],["d83ededb"],["d83cdf5e"],["d83edd50"],["d83edd56"],["d83eded3"],["d83edd68"],["d83edd6f"],["d83edd5e"],["d83eddc7"],["d83eddc0"],["d83cdf56"],["d83cdf57"],["d83edd69"],["d83edd53"],["d83cdf54"],["d83cdf5f"],["d83cdf55"],["d83cdf2d"],["d83edd6a"],["d83cdf2e"],["d83cdf2f"],["d83eded4"],["d83edd59"],["d83eddc6"],["d83edd5a"],["d83cdf73"],["d83edd58"],["d83cdf72"],["d83eded5"],["d83edd63"],["d83edd57"],["d83cdf7f"],["d83eddc8"],["d83eddc2"],["d83edd6b"],["d83cdf71"],["d83cdf58"],["d83cdf59"],["d83cdf5a"],["d83cdf5b"],["d83cdf5c"],["d83cdf5d"],["d83cdf60"],["d83cdf62"],["d83cdf63"],["d83cdf64"],["d83cdf65"],["d83edd6e"],["d83cdf61"],["d83edd5f"],["d83edd60"],["d83edd61"],["d83edd80"],["d83edd9e"],["d83edd90"],["d83edd91"],["d83eddaa"],["d83cdf66"],["d83cdf67"],["d83cdf68"],["d83cdf69"],["d83cdf6a"],["d83cdf82"],["d83cdf70"],["d83eddc1"],["d83edd67"],["d83cdf6b"],["d83cdf6c"],["d83cdf6d"],["d83cdf6e"],["d83cdf6f"],["d83cdf7c"],["d83edd5b"],["2615"],["d83eded6"],["d83cdf75"],["d83cdf76"],["d83cdf7e"],["d83cdf77"],["d83cdf78"],["d83cdf79"],["d83cdf7a"],["d83cdf7b"],["d83edd42"],["d83edd43"],["d83eded7"],["d83edd64"],["d83eddcb"],["d83eddc3"],["d83eddc9"],["d83eddca"],["d83edd62"],["d83cdf7dfe0f"],["d83cdf74"],["d83edd44"],["d83ddd2a"],["d83eded9"],["d83cdffa"]],"Places":[["d83cdf0d"],["d83cdf0e"],["d83cdf0f"],["d83cdf10"],["d83dddfafe0f"],["d83dddfe"],["d83edded"],["d83cdfd4fe0f"],["26f0fe0f"],["d83cdf0b"],["d83dddfb"],["d83cdfd5fe0f"],["d83cdfd6fe0f"],["d83cdfdcfe0f"],["d83cdfddfe0f"],["d83cdfdefe0f"],["d83cdfdffe0f"],["d83cdfdbfe0f"],["d83cdfd7fe0f"],["d83eddf1"],["d83edea8"],["d83edeb5"],["d83dded6"],["d83cdfd8fe0f"],["d83cdfdafe0f"],["d83cdfe0"],["d83cdfe1"],["d83cdfe2"],["d83cdfe3"],["d83cdfe4"],["d83cdfe5"],["d83cdfe6"],["d83cdfe8"],["d83cdfe9"],["d83cdfea"],["d83cdfeb"],["d83cdfec"],["d83cdfed"],["d83cdfef"],["d83cdff0"],["d83ddc92"],["d83dddfc"],["d83dddfd"],["26ea"],["d83ddd4c"],["d83dded5"],["d83ddd4d"],["26e9fe0f"],["d83ddd4b"],["26f2"],["26fa"],["d83cdf01"],["d83cdf03"],["d83cdfd9fe0f"],["d83cdf04"],["d83cdf05"],["d83cdf06"],["d83cdf07"],["d83cdf09"],["2668fe0f"],["d83cdfa0"],["d83ddedd"],["d83cdfa1"],["d83cdfa2"],["d83ddc88"],["d83cdfaa"],["d83dde82"],["d83dde83"],["d83dde84"],["d83dde85"],["d83dde86"],["d83dde87"],["d83dde88"],["d83dde89"],["d83dde8a"],["d83dde9d"],["d83dde9e"],["d83dde8b"],["d83dde8c"],["d83dde8d"],["d83dde8e"],["d83dde90"],["d83dde91"],["d83dde92"],["d83dde93"],["d83dde94"],["d83dde95"],["d83dde96"],["d83dde97"],["d83dde98"],["d83dde99"],["d83ddefb"],["d83dde9a"],["d83dde9b"],["d83dde9c"],["d83cdfcefe0f"],["d83cdfcdfe0f"],["d83ddef5"],["d83eddbd"],["d83eddbc"],["d83ddefa"],["d83ddeb2"],["d83ddef4"],["d83ddef9"],["d83ddefc"],["d83dde8f"],["d83ddee3fe0f"],["d83ddee4fe0f"],["d83ddee2fe0f"],["26fd"],["d83ddede"],["d83ddea8"],["d83ddea5"],["d83ddea6"],["d83dded1"],["d83ddea7"],["2693"],["d83ddedf"],["26f5"],["d83ddef6"],["d83ddea4"],["d83ddef3fe0f"],["26f4fe0f"],["d83ddee5fe0f"],["d83ddea2"],["2708fe0f"],["d83ddee9fe0f"],["d83ddeeb"],["d83ddeec"],["d83ede82"],["d83ddcba"],["d83dde81"],["d83dde9f"],["d83ddea0"],["d83ddea1"],["d83ddef0fe0f"],["d83dde80"],["d83ddef8"],["d83ddecefe0f"],["d83eddf3"],["231b"],["23f3"],["231a"],["23f0"],["23f1fe0f"],["23f2fe0f"],["d83ddd70fe0f"],["d83ddd5b"],["d83ddd67"],["d83ddd50"],["d83ddd5c"],["d83ddd51"],["d83ddd5d"],["d83ddd52"],["d83ddd5e"],["d83ddd53"],["d83ddd5f"],["d83ddd54"],["d83ddd60"],["d83ddd55"],["d83ddd61"],["d83ddd56"],["d83ddd62"],["d83ddd57"],["d83ddd63"],["d83ddd58"],["d83ddd64"],["d83ddd59"],["d83ddd65"],["d83ddd5a"],["d83ddd66"],["d83cdf11"],["d83cdf12"],["d83cdf13"],["d83cdf14"],["d83cdf15"],["d83cdf16"],["d83cdf17"],["d83cdf18"],["d83cdf19"],["d83cdf1a"],["d83cdf1b"],["d83cdf1c"],["d83cdf21fe0f"],["2600fe0f"],["d83cdf1d"],["d83cdf1e"],["d83ede90"],["2b50"],["d83cdf1f"],["d83cdf20"],["d83cdf0c"],["2601fe0f"],["26c5"],["26c8fe0f"],["d83cdf24fe0f"],["d83cdf25fe0f"],["d83cdf26fe0f"],["d83cdf27fe0f"],["d83cdf28fe0f"],["d83cdf29fe0f"],["d83cdf2afe0f"],["d83cdf2bfe0f"],["d83cdf2cfe0f"],["d83cdf00"],["d83cdf08"],["d83cdf02"],["2602fe0f"],["2614"],["26f1fe0f"],["26a1"],["2744fe0f"],["2603fe0f"],["26c4"],["2604fe0f"],["d83ddd25"],["d83ddca7"],["d83cdf0a"]],"Activity":[["d83cdf83"],["d83cdf84"],["d83cdf86"],["d83cdf87"],["d83edde8"],["2728"],["d83cdf88"],["d83cdf89"],["d83cdf8a"],["d83cdf8b"],["d83cdf8d"],["d83cdf8e"],["d83cdf8f"],["d83cdf90"],["d83cdf91"],["d83edde7"],["d83cdf80"],["d83cdf81"],["d83cdf97fe0f"],["d83cdf9ffe0f"],["d83cdfab"],["d83cdf96fe0f"],["d83cdfc6"],["d83cdfc5"],["d83edd47"],["d83edd48"],["d83edd49"],["26bd"],["26be"],["d83edd4e"],["d83cdfc0"],["d83cdfd0"],["d83cdfc8"],["d83cdfc9"],["d83cdfbe"],["d83edd4f"],["d83cdfb3"],["d83cdfcf"],["d83cdfd1"],["d83cdfd2"],["d83edd4d"],["d83cdfd3"],["d83cdff8"],["d83edd4a"],["d83edd4b"],["d83edd45"],["26f3"],["26f8fe0f"],["d83cdfa3"],["d83edd3f"],["d83cdfbd"],["d83cdfbf"],["d83ddef7"],["d83edd4c"],["d83cdfaf"],["d83ede80"],["d83ede81"],["d83ddd2b"],["d83cdfb1"],["d83ddd2e"],["d83ede84"],["d83cdfae"],["d83ddd79fe0f"],["d83cdfb0"],["d83cdfb2"],["d83edde9"],["d83eddf8"],["d83ede85"],["d83edea9"],["d83ede86"],["2660fe0f"],["2665fe0f"],["2666fe0f"],["2663fe0f"],["265ffe0f"],["d83cdccf"],["d83cdc04"],["d83cdfb4"],["d83cdfad"],["d83dddbcfe0f"],["d83cdfa8"],["d83eddf5"],["d83edea1"],["d83eddf6"],["d83edea2"]],"Objects_0":[["d83ddc53"],["d83ddd76fe0f"],["d83edd7d"],["d83edd7c"],["d83eddba"],["d83ddc54"],["d83ddc55"],["d83ddc56"],["d83edde3"],["d83edde4"],["d83edde5"],["d83edde6"],["d83ddc57"],["d83ddc58"],["d83edd7b"],["d83ede71"],["d83ede72"],["d83ede73"],["d83ddc59"],["d83ddc5a"],["d83edead"],["d83ddc5b"],["d83ddc5c"],["d83ddc5d"],["d83ddecdfe0f"],["d83cdf92"],["d83ede74"],["d83ddc5e"],["d83ddc5f"],["d83edd7e"],["d83edd7f"],["d83ddc60"],["d83ddc61"],["d83ede70"],["d83ddc62"],["d83edeae"],["d83ddc51"],["d83ddc52"],["d83cdfa9"],["d83cdf93"],["d83edde2"],["d83ede96"],["26d1fe0f"],["d83ddcff"],["d83ddc84"],["d83ddc8d"],["d83ddc8e"],["d83ddd07"],["d83ddd08"],["d83ddd09"],["d83ddd0a"],["d83ddce2"],["d83ddce3"],["d83ddcef"],["d83ddd14"],["d83ddd15"],["d83cdfbc"],["d83cdfb5"],["d83cdfb6"],["d83cdf99fe0f"],["d83cdf9afe0f"],["d83cdf9bfe0f"],["d83cdfa4"],["d83cdfa7"],["d83ddcfb"],["d83cdfb7"],["d83ede97"],["d83cdfb8"],["d83cdfb9"],["d83cdfba"],["d83cdfbb"],["d83ede95"],["d83edd41"],["d83ede98"],["d83ede87"],["d83ede88"],["d83ddcf1"],["d83ddcf2"],["260efe0f"],["d83ddcde"],["d83ddcdf"],["d83ddce0"],["d83ddd0b"],["d83edeab"],["d83ddd0c"],["d83ddcbb"],["d83ddda5fe0f"],["d83ddda8fe0f"],["2328fe0f"],["d83dddb1fe0f"],["d83dddb2fe0f"],["d83ddcbd"],["d83ddcbe"],["d83ddcbf"],["d83ddcc0"],["d83eddee"],["d83cdfa5"],["d83cdf9efe0f"],["d83ddcfdfe0f"],["d83cdfac"],["d83ddcfa"],["d83ddcf7"],["d83ddcf8"],["d83ddcf9"],["d83ddcfc"],["d83ddd0d"],["d83ddd0e"],["d83ddd6ffe0f"],["d83ddca1"],["d83ddd26"],["d83cdfee"],["d83ede94"],["d83ddcd4"],["d83ddcd5"],["d83ddcd6"],["d83ddcd7"],["d83ddcd8"],["d83ddcd9"],["d83ddcda"],["d83ddcd3"],["d83ddcd2"],["d83ddcc3"],["d83ddcdc"],["d83ddcc4"],["d83ddcf0"],["d83ddddefe0f"],["d83ddcd1"],["d83ddd16"],["d83cdff7fe0f"],["d83ddcb0"],["d83ede99"]],"Objects_1":[["d83ddcb4"],["d83ddcb5"],["d83ddcb6"],["d83ddcb7"],["d83ddcb8"],["d83ddcb3"],["d83eddfe"],["d83ddcb9"],["2709fe0f"],["d83ddce7"],["d83ddce8"],["d83ddce9"],["d83ddce4"],["d83ddce5"],["d83ddce6"],["d83ddceb"],["d83ddcea"],["d83ddcec"],["d83ddced"],["d83ddcee"],["d83dddf3fe0f"],["270ffe0f"],["2712fe0f"],["d83ddd8bfe0f"],["d83ddd8afe0f"],["d83ddd8cfe0f"],["d83ddd8dfe0f"],["d83ddcdd"],["d83ddcbc"],["d83ddcc1"],["d83ddcc2"],["d83dddc2fe0f"],["d83ddcc5"],["d83ddcc6"],["d83dddd2fe0f"],["d83dddd3fe0f"],["d83ddcc7"],["d83ddcc8"],["d83ddcc9"],["d83ddcca"],["d83ddccb"],["d83ddccc"],["d83ddccd"],["d83ddcce"],["d83ddd87fe0f"],["d83ddccf"],["d83ddcd0"],["2702fe0f"],["d83dddc3fe0f"],["d83dddc4fe0f"],["d83dddd1fe0f"],["d83ddd12"],["d83ddd13"],["d83ddd0f"],["d83ddd10"],["d83ddd11"],["d83dddddfe0f"],["d83ddd28"],["d83ede93"],["26cffe0f"],["2692fe0f"],["d83ddee0fe0f"],["d83ddde1fe0f"],["2694fe0f"],["d83ddca3"],["d83ede83"],["d83cdff9"],["d83ddee1fe0f"],["d83ede9a"],["d83ddd27"],["d83ede9b"],["d83ddd29"],["2699fe0f"],["d83ddddcfe0f"],["2696fe0f"],["d83eddaf"],["d83ddd17"],["26d3fe0f"],["d83ede9d"],["d83eddf0"],["d83eddf2"],["d83ede9c"],["2697fe0f"],["d83eddea"],["d83eddeb"],["d83eddec"],["d83ddd2c"],["d83ddd2d"],["d83ddce1"],["d83ddc89"],["d83ede78"],["d83ddc8a"],["d83ede79"],["d83ede7c"],["d83ede7a"],["d83ede7b"],["d83ddeaa"],["d83dded7"],["d83ede9e"],["d83ede9f"],["d83ddecffe0f"],["d83ddecbfe0f"],["d83ede91"],["d83ddebd"],["d83edea0"],["d83ddebf"],["d83ddec1"],["d83edea4"],["d83ede92"],["d83eddf4"],["d83eddf7"],["d83eddf9"],["d83eddfa"],["d83eddfb"],["d83edea3"],["d83eddfc"],["d83edee7"],["d83edea5"],["d83eddfd"],["d83eddef"],["d83dded2"],["d83ddeac"],["26b0fe0f"],["d83edea6"],["26b1fe0f"],["d83eddff"],["d83edeac"],["d83dddff"],["d83edea7"],["d83edeaa"]],"Symbols":[["d83cdfe7"],["d83ddeae"],["d83ddeb0"],["267f"],["d83ddeb9"],["d83ddeba"],["d83ddebb"],["d83ddebc"],["d83ddebe"],["d83ddec2"],["d83ddec3"],["d83ddec4"],["d83ddec5"],["26a0fe0f"],["d83ddeb8"],["26d4"],["d83ddeab"],["d83ddeb3"],["d83ddead"],["d83ddeaf"],["d83ddeb1"],["d83ddeb7"],["d83ddcf5"],["d83ddd1e"],["2622fe0f"],["2623fe0f"],["2b06fe0f"],["2197fe0f"],["27a1fe0f"],["2198fe0f"],["2b07fe0f"],["2199fe0f"],["2b05fe0f"],["2196fe0f"],["2195fe0f"],["2194fe0f"],["21a9fe0f"],["21aafe0f"],["2934fe0f"],["2935fe0f"],["d83ddd03"],["d83ddd04"],["d83ddd19"],["d83ddd1a"],["d83ddd1b"],["d83ddd1c"],["d83ddd1d"],["d83dded0"],["269bfe0f"],["d83ddd49fe0f"],["2721fe0f"],["2638fe0f"],["262ffe0f"],["271dfe0f"],["2626fe0f"],["262afe0f"],["262efe0f"],["d83ddd4e"],["d83ddd2f"],["d83edeaf"],["2648"],["2649"],["264a"],["264b"],["264c"],["264d"],["264e"],["264f"],["2650"],["2651"],["2652"],["2653"],["26ce"],["d83ddd00"],["d83ddd01"],["d83ddd02"],["25b6fe0f"],["23e9"],["23edfe0f"],["23effe0f"],["25c0fe0f"],["23ea"],["23eefe0f"],["d83ddd3c"],["23eb"],["d83ddd3d"],["23ec"],["23f8fe0f"],["23f9fe0f"],["23fafe0f"],["23cffe0f"],["d83cdfa6"],["d83ddd05"],["d83ddd06"],["d83ddcf6"],["d83ddedc"],["d83ddcf3"],["d83ddcf4"],["26a7fe0f"],["2716fe0f"],["2795"],["2796"],["2797"],["d83ddff0"],["267efe0f"],["203cfe0f"],["2049fe0f"],["2753"],["2754"],["2755"],["2757"],["3030fe0f"],["d83ddcb1"],["d83ddcb2"],["267bfe0f"],["269cfe0f"],["d83ddd31"],["d83ddcdb"],["d83ddd30"],["2b55"],["2705"],["2611fe0f"],["2714fe0f"],["274c"],["274e"],["27b0"],["27bf"],["303dfe0f"],["2733fe0f"],["2734fe0f"],["2747fe0f"],["00a9fe0f"],["00aefe0f"],["2122fe0f"],["0023fe0f20e3"],["002afe0f20e3"],["0030fe0f20e3"],["0031fe0f20e3"],["0032fe0f20e3"],["0033fe0f20e3"],["0034fe0f20e3"],["0035fe0f20e3"],["0036fe0f20e3"],["0037fe0f20e3"],["0038fe0f20e3"],["0039fe0f20e3"],["d83ddd1f"],["d83ddd20"],["d83ddd21"],["d83ddd22"],["d83ddd23"],["d83ddd24"],["d83cdd70fe0f"],["d83cdd8e"],["d83cdd71fe0f"],["d83cdd91"],["d83cdd92"],["d83cdd93"],["2139fe0f"],["d83cdd94"],["24c2fe0f"],["d83cdd95"],["d83cdd96"],["d83cdd7efe0f"],["d83cdd97"],["d83cdd7ffe0f"],["d83cdd98"],["d83cdd99"],["d83cdd9a"],["d83cde01"],["d83cde02fe0f"],["d83cde37fe0f"],["d83cde36"],["d83cde2f"],["d83cde50"],["d83cde39"],["d83cde1a"],["d83cde32"],["d83cde51"],["d83cde38"],["d83cde34"],["d83cde33"],["3297fe0f"],["3299fe0f"],["d83cde3a"],["d83cde35"],["d83ddd34"],["d83ddfe0"],["d83ddfe1"],["d83ddfe2"],["d83ddd35"],["d83ddfe3"],["d83ddfe4"],["26ab"],["26aa"],["d83ddfe5"],["d83ddfe7"],["d83ddfe8"],["d83ddfe9"],["d83ddfe6"],["d83ddfea"],["d83ddfeb"],["2b1b"],["2b1c"],["25fcfe0f"],["25fbfe0f"],["25fe"],["25fd"],["25aafe0f"],["25abfe0f"],["d83ddd36"],["d83ddd37"],["d83ddd38"],["d83ddd39"],["d83ddd3a"],["d83ddd3b"],["d83ddca0"],["d83ddd18"],["d83ddd33"],["d83ddd32"]],"Flags_0":[["d83cdfc1"],["d83ddea9"],["d83cdf8c"],["d83cdff4"],["d83cdff3fe0f"],["d83cdff3fe0f200dd83cdf08"],["d83cdff3fe0f200d26a7fe0f"],["d83cdff4200d2620fe0f"],["d83cdde6d83cdde8"],["d83cdde6d83cdde9"],["d83cdde6d83cddea"],["d83cdde6d83cddeb"],["d83cdde6d83cddec"],["d83cdde6d83cddee"],["d83cdde6d83cddf1"],["d83cdde6d83cddf2"],["d83cdde6d83cddf4"],["d83cdde6d83cddf6"],["d83cdde6d83cddf7"],["d83cdde6d83cddf8"],["d83cdde6d83cddf9"],["d83cdde6d83cddfa"],["d83cdde6d83cddfc"],["d83cdde6d83cddfd"],["d83cdde6d83cddff"],["d83cdde7d83cdde6"],["d83cdde7d83cdde7"],["d83cdde7d83cdde9"],["d83cdde7d83cddea"],["d83cdde7d83cddeb"],["d83cdde7d83cddec"],["d83cdde7d83cdded"],["d83cdde7d83cddee"],["d83cdde7d83cddef"],["d83cdde7d83cddf1"],["d83cdde7d83cddf2"],["d83cdde7d83cddf3"],["d83cdde7d83cddf4"],["d83cdde7d83cddf6"],["d83cdde7d83cddf7"],["d83cdde7d83cddf8"],["d83cdde7d83cddf9"],["d83cdde7d83cddfb"],["d83cdde7d83cddfc"],["d83cdde7d83cddfe"],["d83cdde7d83cddff"],["d83cdde8d83cdde6"],["d83cdde8d83cdde8"],["d83cdde8d83cdde9"],["d83cdde8d83cddeb"],["d83cdde8d83cddec"],["d83cdde8d83cdded"],["d83cdde8d83cddee"],["d83cdde8d83cddf0"],["d83cdde8d83cddf1"],["d83cdde8d83cddf2"],["d83cdde8d83cddf3"],["d83cdde8d83cddf4"],["d83cdde8d83cddf5"],["d83cdde8d83cddf7"],["d83cdde8d83cddfa"],["d83cdde8d83cddfb"],["d83cdde8d83cddfc"],["d83cdde8d83cddfd"],["d83cdde8d83cddfe"],["d83cdde8d83cddff"],["d83cdde9d83cddea"],["d83cdde9d83cddec"],["d83cdde9d83cddef"],["d83cdde9d83cddf0"],["d83cdde9d83cddf2"],["d83cdde9d83cddf4"],["d83cdde9d83cddff"],["d83cddead83cdde6"],["d83cddead83cdde8"],["d83cddead83cddea"],["d83cddead83cddec"],["d83cddead83cdded"],["d83cddead83cddf7"],["d83cddead83cddf8"],["d83cddead83cddf9"],["d83cddead83cddfa"],["d83cddebd83cddee"],["d83cddebd83cddef"],["d83cddebd83cddf0"],["d83cddebd83cddf2"],["d83cddebd83cddf4"],["d83cddebd83cddf7"],["d83cddecd83cdde6"],["d83cddecd83cdde7"],["d83cddecd83cdde9"],["d83cddecd83cddea"],["d83cddecd83cddeb"],["d83cddecd83cddec"],["d83cddecd83cdded"],["d83cddecd83cddee"],["d83cddecd83cddf1"],["d83cddecd83cddf2"],["d83cddecd83cddf3"],["d83cddecd83cddf5"],["d83cddecd83cddf6"],["d83cddecd83cddf7"],["d83cddecd83cddf8"],["d83cddecd83cddf9"],["d83cddecd83cddfa"],["d83cddecd83cddfc"],["d83cddecd83cddfe"],["d83cddedd83cddf0"],["d83cddedd83cddf2"],["d83cddedd83cddf3"],["d83cddedd83cddf7"],["d83cddedd83cddf9"],["d83cddedd83cddfa"],["d83cddeed83cdde8"],["d83cddeed83cdde9"],["d83cddeed83cddea"],["d83cddeed83cddf1"],["d83cddeed83cddf2"],["d83cddeed83cddf3"],["d83cddeed83cddf4"],["d83cddeed83cddf6"],["d83cddeed83cddf7"],["d83cddeed83cddf8"],["d83cddeed83cddf9"],["d83cddefd83cddea"],["d83cddefd83cddf2"],["d83cddefd83cddf4"],["d83cddefd83cddf5"],["d83cddf0d83cddea"],["d83cddf0d83cddec"],["d83cddf0d83cdded"],["d83cddf0d83cddee"],["d83cddf0d83cddf2"],["d83cddf0d83cddf3"],["d83cddf0d83cddf5"]],"Flags_1":[["d83cddf0d83cddf7"],["d83cddf0d83cddfc"],["d83cddf0d83cddfe"],["d83cddf0d83cddff"],["d83cddf1d83cdde6"],["d83cddf1d83cdde7"],["d83cddf1d83cdde8"],["d83cddf1d83cddee"],["d83cddf1d83cddf0"],["d83cddf1d83cddf7"],["d83cddf1d83cddf8"],["d83cddf1d83cddf9"],["d83cddf1d83cddfa"],["d83cddf1d83cddfb"],["d83cddf1d83cddfe"],["d83cddf2d83cdde6"],["d83cddf2d83cdde8"],["d83cddf2d83cdde9"],["d83cddf2d83cddea"],["d83cddf2d83cddeb"],["d83cddf2d83cddec"],["d83cddf2d83cdded"],["d83cddf2d83cddf0"],["d83cddf2d83cddf1"],["d83cddf2d83cddf2"],["d83cddf2d83cddf3"],["d83cddf2d83cddf4"],["d83cddf2d83cddf5"],["d83cddf2d83cddf6"],["d83cddf2d83cddf7"],["d83cddf2d83cddf8"],["d83cddf2d83cddf9"],["d83cddf2d83cddfa"],["d83cddf2d83cddfb"],["d83cddf2d83cddfc"],["d83cddf2d83cddfd"],["d83cddf2d83cddfe"],["d83cddf2d83cddff"],["d83cddf3d83cdde6"],["d83cddf3d83cdde8"],["d83cddf3d83cddea"],["d83cddf3d83cddeb"],["d83cddf3d83cddec"],["d83cddf3d83cddee"],["d83cddf3d83cddf1"],["d83cddf3d83cddf4"],["d83cddf3d83cddf5"],["d83cddf3d83cddf7"],["d83cddf3d83cddfa"],["d83cddf3d83cddff"],["d83cddf4d83cddf2"],["d83cddf5d83cdde6"],["d83cddf5d83cddea"],["d83cddf5d83cddeb"],["d83cddf5d83cddec"],["d83cddf5d83cdded"],["d83cddf5d83cddf0"],["d83cddf5d83cddf1"],["d83cddf5d83cddf2"],["d83cddf5d83cddf3"],["d83cddf5d83cddf7"],["d83cddf5d83cddf8"],["d83cddf5d83cddf9"],["d83cddf5d83cddfc"],["d83cddf5d83cddfe"],["d83cddf6d83cdde6"],["d83cddf7d83cddea"],["d83cddf7d83cddf4"],["d83cddf7d83cddf8"],["d83cddf7d83cddfa"],["d83cddf7d83cddfc"],["d83cddf8d83cdde6"],["d83cddf8d83cdde7"],["d83cddf8d83cdde8"],["d83cddf8d83cdde9"],["d83cddf8d83cddea"],["d83cddf8d83cddec"],["d83cddf8d83cdded"],["d83cddf8d83cddee"],["d83cddf8d83cddef"],["d83cddf8d83cddf0"],["d83cddf8d83cddf1"],["d83cddf8d83cddf2"],["d83cddf8d83cddf3"],["d83cddf8d83cddf4"],["d83cddf8d83cddf7"],["d83cddf8d83cddf8"],["d83cddf8d83cddf9"],["d83cddf8d83cddfb"],["d83cddf8d83cddfd"],["d83cddf8d83cddfe"],["d83cddf8d83cddff"],["d83cddf9d83cdde6"],["d83cddf9d83cdde8"],["d83cddf9d83cdde9"],["d83cddf9d83cddeb"],["d83cddf9d83cddec"],["d83cddf9d83cdded"],["d83cddf9d83cddef"],["d83cddf9d83cddf0"],["d83cddf9d83cddf1"],["d83cddf9d83cddf2"],["d83cddf9d83cddf3"],["d83cddf9d83cddf4"],["d83cddf9d83cddf7"],["d83cddf9d83cddf9"],["d83cddf9d83cddfb"],["d83cddf9d83cddfc"],["d83cddf9d83cddff"],["d83cddfad83cdde6"],["d83cddfad83cddec"],["d83cddfad83cddf2"],["d83cddfad83cddf3"],["d83cddfad83cddf8"],["d83cddfad83cddfe"],["d83cddfad83cddff"],["d83cddfbd83cdde6"],["d83cddfbd83cdde8"],["d83cddfbd83cddea"],["d83cddfbd83cddec"],["d83cddfbd83cddee"],["d83cddfbd83cddf3"],["d83cddfbd83cddfa"],["d83cddfcd83cddeb"],["d83cddfcd83cddf8"],["d83cddfdd83cddf0"],["d83cddfed83cddea"],["d83cddfed83cddf9"],["d83cddffd83cdde6"],["d83cddffd83cddf2"],["d83cddffd83cddfc"],["d83cdff4db40dc67db40dc62db40dc65db40dc6edb40dc67db40dc7f"],["d83cdff4db40dc67db40dc62db40dc73db40dc63db40dc74db40dc7f"],["d83cdff4db40dc67db40dc62db40dc77db40dc6cdb40dc73db40dc7f"]]},"obsolete":[],"metrics":{"raw_width":66,"raw_height":66,"per_row":16},"densities":["xhdpi"],"format":"webp"}
\ No newline at end of file
+{"emoji":{"People_0":[["d83dde00"],["d83dde03"],["d83dde04"],["d83dde01"],["d83dde06"],["d83dde05"],["d83edd23"],["d83dde02"],["d83dde42"],["d83dde43"],["d83edee0"],["d83dde09"],["d83dde0a"],["d83dde07"],["d83edd70"],["d83dde0d"],["d83edd29"],["d83dde18"],["d83dde17"],["263afe0f"],["d83dde1a"],["d83dde19"],["d83edd72"],["d83dde0b"],["d83dde1b"],["d83dde1c"],["d83edd2a"],["d83dde1d"],["d83edd11"],["d83edd17"],["d83edd2d"],["d83edee2"],["d83edee3"],["d83edd2b"],["d83edd14"],["d83edee1"],["d83edd10"],["d83edd28"],["d83dde10"],["d83dde11"],["d83dde36"],["d83edee5"],["d83dde36200dd83cdf2bfe0f"],["d83dde0f"],["d83dde12"],["d83dde44"],["d83dde2c"],["d83dde2e200dd83ddca8"],["d83edd25"],["d83edee8"],["d83dde42200d2194fe0f"],["d83dde42200d2195fe0f"],["d83dde0c"],["d83dde14"],["d83dde2a"],["d83edd24"],["d83dde34"],["d83dde37"],["d83edd12"],["d83edd15"],["d83edd22"],["d83edd2e"],["d83edd27"],["d83edd75"],["d83edd76"],["d83edd74"],["d83dde35"],["d83dde35200dd83ddcab"],["d83edd2f"],["d83edd20"],["d83edd73"],["d83edd78"],["d83dde0e"],["d83edd13"],["d83eddd0"],["d83dde15"],["d83edee4"],["d83dde1f"],["d83dde41"],["2639fe0f"],["d83dde2e"],["d83dde2f"],["d83dde32"],["d83dde33"],["d83edd7a"],["d83edd79"],["d83dde26"],["d83dde27"],["d83dde28"],["d83dde30"],["d83dde25"],["d83dde22"],["d83dde2d"],["d83dde31"],["d83dde16"],["d83dde23"],["d83dde1e"],["d83dde13"],["d83dde29"],["d83dde2b"],["d83edd71"],["d83dde24"],["d83dde21"],["d83dde20"],["d83edd2c"],["d83dde08"],["d83ddc7f"],["d83ddc80"],["2620fe0f"],["d83ddca9"],["d83edd21"],["d83ddc79"],["d83ddc7a"],["d83ddc7b"],["d83ddc7d"],["d83ddc7e"],["d83edd16"],["d83dde3a"],["d83dde38"],["d83dde39"],["d83dde3b"],["d83dde3c"],["d83dde3d"],["d83dde40"],["d83dde3f"],["d83dde3e"],["d83dde48"],["d83dde49"],["d83dde4a"],["d83ddc8c"],["d83ddc98"],["d83ddc9d"],["d83ddc96"],["d83ddc97"],["d83ddc93"],["d83ddc9e"],["d83ddc95"],["d83ddc9f"],["2763fe0f"],["d83ddc94"],["2764fe0f200dd83ddd25"],["2764fe0f200dd83ede79"],["2764fe0f"],["d83ede77"],["d83edde1"],["d83ddc9b"],["d83ddc9a"],["d83ddc99"],["d83ede75"],["d83ddc9c"],["d83edd0e"],["d83ddda4"],["d83ede76"],["d83edd0d"],["d83ddc8b"],["d83ddcaf"],["d83ddca2"],["d83ddca5"],["d83ddcab"],["d83ddca6"],["d83ddca8"],["d83ddd73fe0f"],["d83ddcac"],["d83ddc41fe0f200dd83ddde8fe0f"],["d83ddde8fe0f"],["d83dddeffe0f"],["d83ddcad"],["d83ddca4"],["d83ddc4b","d83ddc4bd83cdffb","d83ddc4bd83cdffc","d83ddc4bd83cdffd","d83ddc4bd83cdffe","d83ddc4bd83cdfff"],["d83edd1a","d83edd1ad83cdffb","d83edd1ad83cdffc","d83edd1ad83cdffd","d83edd1ad83cdffe","d83edd1ad83cdfff"],["d83ddd90fe0f","d83ddd90d83cdffb","d83ddd90d83cdffc","d83ddd90d83cdffd","d83ddd90d83cdffe","d83ddd90d83cdfff"],["270b","270bd83cdffb","270bd83cdffc","270bd83cdffd","270bd83cdffe","270bd83cdfff"],["d83ddd96","d83ddd96d83cdffb","d83ddd96d83cdffc","d83ddd96d83cdffd","d83ddd96d83cdffe","d83ddd96d83cdfff"],["d83edef1","d83edef1d83cdffb","d83edef1d83cdffc","d83edef1d83cdffd","d83edef1d83cdffe","d83edef1d83cdfff"],["d83edef2","d83edef2d83cdffb","d83edef2d83cdffc","d83edef2d83cdffd","d83edef2d83cdffe","d83edef2d83cdfff"],["d83edef3","d83edef3d83cdffb","d83edef3d83cdffc","d83edef3d83cdffd","d83edef3d83cdffe","d83edef3d83cdfff"],["d83edef4","d83edef4d83cdffb","d83edef4d83cdffc","d83edef4d83cdffd","d83edef4d83cdffe","d83edef4d83cdfff"],["d83edef7","d83edef7d83cdffb","d83edef7d83cdffc","d83edef7d83cdffd","d83edef7d83cdffe","d83edef7d83cdfff"],["d83edef8","d83edef8d83cdffb","d83edef8d83cdffc","d83edef8d83cdffd","d83edef8d83cdffe","d83edef8d83cdfff"],["d83ddc4c","d83ddc4cd83cdffb","d83ddc4cd83cdffc","d83ddc4cd83cdffd","d83ddc4cd83cdffe","d83ddc4cd83cdfff"],["d83edd0c","d83edd0cd83cdffb","d83edd0cd83cdffc","d83edd0cd83cdffd","d83edd0cd83cdffe","d83edd0cd83cdfff"],["d83edd0f","d83edd0fd83cdffb","d83edd0fd83cdffc","d83edd0fd83cdffd","d83edd0fd83cdffe","d83edd0fd83cdfff"]],"People_1":[["270cfe0f","270cd83cdffb","270cd83cdffc","270cd83cdffd","270cd83cdffe","270cd83cdfff"],["d83edd1e","d83edd1ed83cdffb","d83edd1ed83cdffc","d83edd1ed83cdffd","d83edd1ed83cdffe","d83edd1ed83cdfff"],["d83edef0","d83edef0d83cdffb","d83edef0d83cdffc","d83edef0d83cdffd","d83edef0d83cdffe","d83edef0d83cdfff"],["d83edd1f","d83edd1fd83cdffb","d83edd1fd83cdffc","d83edd1fd83cdffd","d83edd1fd83cdffe","d83edd1fd83cdfff"],["d83edd18","d83edd18d83cdffb","d83edd18d83cdffc","d83edd18d83cdffd","d83edd18d83cdffe","d83edd18d83cdfff"],["d83edd19","d83edd19d83cdffb","d83edd19d83cdffc","d83edd19d83cdffd","d83edd19d83cdffe","d83edd19d83cdfff"],["d83ddc48","d83ddc48d83cdffb","d83ddc48d83cdffc","d83ddc48d83cdffd","d83ddc48d83cdffe","d83ddc48d83cdfff"],["d83ddc49","d83ddc49d83cdffb","d83ddc49d83cdffc","d83ddc49d83cdffd","d83ddc49d83cdffe","d83ddc49d83cdfff"],["d83ddc46","d83ddc46d83cdffb","d83ddc46d83cdffc","d83ddc46d83cdffd","d83ddc46d83cdffe","d83ddc46d83cdfff"],["d83ddd95","d83ddd95d83cdffb","d83ddd95d83cdffc","d83ddd95d83cdffd","d83ddd95d83cdffe","d83ddd95d83cdfff"],["d83ddc47","d83ddc47d83cdffb","d83ddc47d83cdffc","d83ddc47d83cdffd","d83ddc47d83cdffe","d83ddc47d83cdfff"],["261dfe0f","261dd83cdffb","261dd83cdffc","261dd83cdffd","261dd83cdffe","261dd83cdfff"],["d83edef5","d83edef5d83cdffb","d83edef5d83cdffc","d83edef5d83cdffd","d83edef5d83cdffe","d83edef5d83cdfff"],["d83ddc4d","d83ddc4dd83cdffb","d83ddc4dd83cdffc","d83ddc4dd83cdffd","d83ddc4dd83cdffe","d83ddc4dd83cdfff"],["d83ddc4e","d83ddc4ed83cdffb","d83ddc4ed83cdffc","d83ddc4ed83cdffd","d83ddc4ed83cdffe","d83ddc4ed83cdfff"],["270a","270ad83cdffb","270ad83cdffc","270ad83cdffd","270ad83cdffe","270ad83cdfff"],["d83ddc4a","d83ddc4ad83cdffb","d83ddc4ad83cdffc","d83ddc4ad83cdffd","d83ddc4ad83cdffe","d83ddc4ad83cdfff"],["d83edd1b","d83edd1bd83cdffb","d83edd1bd83cdffc","d83edd1bd83cdffd","d83edd1bd83cdffe","d83edd1bd83cdfff"],["d83edd1c","d83edd1cd83cdffb","d83edd1cd83cdffc","d83edd1cd83cdffd","d83edd1cd83cdffe","d83edd1cd83cdfff"],["d83ddc4f","d83ddc4fd83cdffb","d83ddc4fd83cdffc","d83ddc4fd83cdffd","d83ddc4fd83cdffe","d83ddc4fd83cdfff"],["d83dde4c","d83dde4cd83cdffb","d83dde4cd83cdffc","d83dde4cd83cdffd","d83dde4cd83cdffe","d83dde4cd83cdfff"],["d83edef6","d83edef6d83cdffb","d83edef6d83cdffc","d83edef6d83cdffd","d83edef6d83cdffe","d83edef6d83cdfff"],["d83ddc50","d83ddc50d83cdffb","d83ddc50d83cdffc","d83ddc50d83cdffd","d83ddc50d83cdffe","d83ddc50d83cdfff"],["d83edd32","d83edd32d83cdffb","d83edd32d83cdffc","d83edd32d83cdffd","d83edd32d83cdffe","d83edd32d83cdfff"],["d83edd1d","d83edd1dd83cdffb","d83edd1dd83cdffc","d83edd1dd83cdffd","d83edd1dd83cdffe","d83edd1dd83cdfff","d83edef1d83cdffb200dd83edef2d83cdffc","d83edef1d83cdffb200dd83edef2d83cdffd","d83edef1d83cdffb200dd83edef2d83cdffe","d83edef1d83cdffb200dd83edef2d83cdfff","d83edef1d83cdffc200dd83edef2d83cdffb","d83edef1d83cdffc200dd83edef2d83cdffd","d83edef1d83cdffc200dd83edef2d83cdffe","d83edef1d83cdffc200dd83edef2d83cdfff","d83edef1d83cdffd200dd83edef2d83cdffb","d83edef1d83cdffd200dd83edef2d83cdffc","d83edef1d83cdffd200dd83edef2d83cdffe","d83edef1d83cdffd200dd83edef2d83cdfff","d83edef1d83cdffe200dd83edef2d83cdffb","d83edef1d83cdffe200dd83edef2d83cdffc","d83edef1d83cdffe200dd83edef2d83cdffd","d83edef1d83cdffe200dd83edef2d83cdfff","d83edef1d83cdfff200dd83edef2d83cdffb","d83edef1d83cdfff200dd83edef2d83cdffc","d83edef1d83cdfff200dd83edef2d83cdffd","d83edef1d83cdfff200dd83edef2d83cdffe"],["d83dde4f","d83dde4fd83cdffb","d83dde4fd83cdffc","d83dde4fd83cdffd","d83dde4fd83cdffe","d83dde4fd83cdfff"],["270dfe0f","270dd83cdffb","270dd83cdffc","270dd83cdffd","270dd83cdffe","270dd83cdfff"],["d83ddc85","d83ddc85d83cdffb","d83ddc85d83cdffc","d83ddc85d83cdffd","d83ddc85d83cdffe","d83ddc85d83cdfff"],["d83edd33","d83edd33d83cdffb","d83edd33d83cdffc","d83edd33d83cdffd","d83edd33d83cdffe","d83edd33d83cdfff"],["d83ddcaa","d83ddcaad83cdffb","d83ddcaad83cdffc","d83ddcaad83cdffd","d83ddcaad83cdffe","d83ddcaad83cdfff"],["d83eddbe"],["d83eddbf"],["d83eddb5","d83eddb5d83cdffb","d83eddb5d83cdffc","d83eddb5d83cdffd","d83eddb5d83cdffe","d83eddb5d83cdfff"],["d83eddb6","d83eddb6d83cdffb","d83eddb6d83cdffc","d83eddb6d83cdffd","d83eddb6d83cdffe","d83eddb6d83cdfff"],["d83ddc42","d83ddc42d83cdffb","d83ddc42d83cdffc","d83ddc42d83cdffd","d83ddc42d83cdffe","d83ddc42d83cdfff"],["d83eddbb","d83eddbbd83cdffb","d83eddbbd83cdffc","d83eddbbd83cdffd","d83eddbbd83cdffe","d83eddbbd83cdfff"],["d83ddc43","d83ddc43d83cdffb","d83ddc43d83cdffc","d83ddc43d83cdffd","d83ddc43d83cdffe","d83ddc43d83cdfff"],["d83edde0"],["d83edec0"],["d83edec1"],["d83eddb7"],["d83eddb4"],["d83ddc40"],["d83ddc41fe0f"],["d83ddc45"],["d83ddc44"],["d83edee6"],["d83ddc76","d83ddc76d83cdffb","d83ddc76d83cdffc","d83ddc76d83cdffd","d83ddc76d83cdffe","d83ddc76d83cdfff"],["d83eddd2","d83eddd2d83cdffb","d83eddd2d83cdffc","d83eddd2d83cdffd","d83eddd2d83cdffe","d83eddd2d83cdfff"]],"People_2":[["d83ddc66","d83ddc66d83cdffb","d83ddc66d83cdffc","d83ddc66d83cdffd","d83ddc66d83cdffe","d83ddc66d83cdfff"],["d83ddc67","d83ddc67d83cdffb","d83ddc67d83cdffc","d83ddc67d83cdffd","d83ddc67d83cdffe","d83ddc67d83cdfff"],["d83eddd1","d83eddd1d83cdffb","d83eddd1d83cdffc","d83eddd1d83cdffd","d83eddd1d83cdffe","d83eddd1d83cdfff"],["d83ddc71","d83ddc71d83cdffb","d83ddc71d83cdffc","d83ddc71d83cdffd","d83ddc71d83cdffe","d83ddc71d83cdfff"],["d83ddc68","d83ddc68d83cdffb","d83ddc68d83cdffc","d83ddc68d83cdffd","d83ddc68d83cdffe","d83ddc68d83cdfff"],["d83eddd4","d83eddd4d83cdffb","d83eddd4d83cdffc","d83eddd4d83cdffd","d83eddd4d83cdffe","d83eddd4d83cdfff"],["d83eddd4200d2642fe0f","d83eddd4d83cdffb200d2642fe0f","d83eddd4d83cdffc200d2642fe0f","d83eddd4d83cdffd200d2642fe0f","d83eddd4d83cdffe200d2642fe0f","d83eddd4d83cdfff200d2642fe0f"],["d83eddd4200d2640fe0f","d83eddd4d83cdffb200d2640fe0f","d83eddd4d83cdffc200d2640fe0f","d83eddd4d83cdffd200d2640fe0f","d83eddd4d83cdffe200d2640fe0f","d83eddd4d83cdfff200d2640fe0f"],["d83ddc68200dd83eddb0","d83ddc68d83cdffb200dd83eddb0","d83ddc68d83cdffc200dd83eddb0","d83ddc68d83cdffd200dd83eddb0","d83ddc68d83cdffe200dd83eddb0","d83ddc68d83cdfff200dd83eddb0"],["d83ddc68200dd83eddb1","d83ddc68d83cdffb200dd83eddb1","d83ddc68d83cdffc200dd83eddb1","d83ddc68d83cdffd200dd83eddb1","d83ddc68d83cdffe200dd83eddb1","d83ddc68d83cdfff200dd83eddb1"],["d83ddc68200dd83eddb3","d83ddc68d83cdffb200dd83eddb3","d83ddc68d83cdffc200dd83eddb3","d83ddc68d83cdffd200dd83eddb3","d83ddc68d83cdffe200dd83eddb3","d83ddc68d83cdfff200dd83eddb3"],["d83ddc68200dd83eddb2","d83ddc68d83cdffb200dd83eddb2","d83ddc68d83cdffc200dd83eddb2","d83ddc68d83cdffd200dd83eddb2","d83ddc68d83cdffe200dd83eddb2","d83ddc68d83cdfff200dd83eddb2"],["d83ddc69","d83ddc69d83cdffb","d83ddc69d83cdffc","d83ddc69d83cdffd","d83ddc69d83cdffe","d83ddc69d83cdfff"],["d83ddc69200dd83eddb0","d83ddc69d83cdffb200dd83eddb0","d83ddc69d83cdffc200dd83eddb0","d83ddc69d83cdffd200dd83eddb0","d83ddc69d83cdffe200dd83eddb0","d83ddc69d83cdfff200dd83eddb0"],["d83eddd1200dd83eddb0","d83eddd1d83cdffb200dd83eddb0","d83eddd1d83cdffc200dd83eddb0","d83eddd1d83cdffd200dd83eddb0","d83eddd1d83cdffe200dd83eddb0","d83eddd1d83cdfff200dd83eddb0"],["d83ddc69200dd83eddb1","d83ddc69d83cdffb200dd83eddb1","d83ddc69d83cdffc200dd83eddb1","d83ddc69d83cdffd200dd83eddb1","d83ddc69d83cdffe200dd83eddb1","d83ddc69d83cdfff200dd83eddb1"],["d83eddd1200dd83eddb1","d83eddd1d83cdffb200dd83eddb1","d83eddd1d83cdffc200dd83eddb1","d83eddd1d83cdffd200dd83eddb1","d83eddd1d83cdffe200dd83eddb1","d83eddd1d83cdfff200dd83eddb1"],["d83ddc69200dd83eddb3","d83ddc69d83cdffb200dd83eddb3","d83ddc69d83cdffc200dd83eddb3","d83ddc69d83cdffd200dd83eddb3","d83ddc69d83cdffe200dd83eddb3","d83ddc69d83cdfff200dd83eddb3"],["d83eddd1200dd83eddb3","d83eddd1d83cdffb200dd83eddb3","d83eddd1d83cdffc200dd83eddb3","d83eddd1d83cdffd200dd83eddb3","d83eddd1d83cdffe200dd83eddb3","d83eddd1d83cdfff200dd83eddb3"],["d83ddc69200dd83eddb2","d83ddc69d83cdffb200dd83eddb2","d83ddc69d83cdffc200dd83eddb2","d83ddc69d83cdffd200dd83eddb2","d83ddc69d83cdffe200dd83eddb2","d83ddc69d83cdfff200dd83eddb2"],["d83eddd1200dd83eddb2","d83eddd1d83cdffb200dd83eddb2","d83eddd1d83cdffc200dd83eddb2","d83eddd1d83cdffd200dd83eddb2","d83eddd1d83cdffe200dd83eddb2","d83eddd1d83cdfff200dd83eddb2"],["d83ddc71200d2640fe0f","d83ddc71d83cdffb200d2640fe0f","d83ddc71d83cdffc200d2640fe0f","d83ddc71d83cdffd200d2640fe0f","d83ddc71d83cdffe200d2640fe0f","d83ddc71d83cdfff200d2640fe0f"],["d83ddc71200d2642fe0f","d83ddc71d83cdffb200d2642fe0f","d83ddc71d83cdffc200d2642fe0f","d83ddc71d83cdffd200d2642fe0f","d83ddc71d83cdffe200d2642fe0f","d83ddc71d83cdfff200d2642fe0f"],["d83eddd3","d83eddd3d83cdffb","d83eddd3d83cdffc","d83eddd3d83cdffd","d83eddd3d83cdffe","d83eddd3d83cdfff"],["d83ddc74","d83ddc74d83cdffb","d83ddc74d83cdffc","d83ddc74d83cdffd","d83ddc74d83cdffe","d83ddc74d83cdfff"],["d83ddc75","d83ddc75d83cdffb","d83ddc75d83cdffc","d83ddc75d83cdffd","d83ddc75d83cdffe","d83ddc75d83cdfff"],["d83dde4d","d83dde4dd83cdffb","d83dde4dd83cdffc","d83dde4dd83cdffd","d83dde4dd83cdffe","d83dde4dd83cdfff"],["d83dde4d200d2642fe0f","d83dde4dd83cdffb200d2642fe0f","d83dde4dd83cdffc200d2642fe0f","d83dde4dd83cdffd200d2642fe0f","d83dde4dd83cdffe200d2642fe0f","d83dde4dd83cdfff200d2642fe0f"],["d83dde4d200d2640fe0f","d83dde4dd83cdffb200d2640fe0f","d83dde4dd83cdffc200d2640fe0f","d83dde4dd83cdffd200d2640fe0f","d83dde4dd83cdffe200d2640fe0f","d83dde4dd83cdfff200d2640fe0f"],["d83dde4e","d83dde4ed83cdffb","d83dde4ed83cdffc","d83dde4ed83cdffd","d83dde4ed83cdffe","d83dde4ed83cdfff"],["d83dde4e200d2642fe0f","d83dde4ed83cdffb200d2642fe0f","d83dde4ed83cdffc200d2642fe0f","d83dde4ed83cdffd200d2642fe0f","d83dde4ed83cdffe200d2642fe0f","d83dde4ed83cdfff200d2642fe0f"],["d83dde4e200d2640fe0f","d83dde4ed83cdffb200d2640fe0f","d83dde4ed83cdffc200d2640fe0f","d83dde4ed83cdffd200d2640fe0f","d83dde4ed83cdffe200d2640fe0f","d83dde4ed83cdfff200d2640fe0f"],["d83dde45","d83dde45d83cdffb","d83dde45d83cdffc","d83dde45d83cdffd","d83dde45d83cdffe","d83dde45d83cdfff"],["d83dde45200d2642fe0f","d83dde45d83cdffb200d2642fe0f","d83dde45d83cdffc200d2642fe0f","d83dde45d83cdffd200d2642fe0f","d83dde45d83cdffe200d2642fe0f","d83dde45d83cdfff200d2642fe0f"],["d83dde45200d2640fe0f","d83dde45d83cdffb200d2640fe0f","d83dde45d83cdffc200d2640fe0f","d83dde45d83cdffd200d2640fe0f","d83dde45d83cdffe200d2640fe0f","d83dde45d83cdfff200d2640fe0f"],["d83dde46","d83dde46d83cdffb","d83dde46d83cdffc","d83dde46d83cdffd","d83dde46d83cdffe","d83dde46d83cdfff"],["d83dde46200d2642fe0f","d83dde46d83cdffb200d2642fe0f","d83dde46d83cdffc200d2642fe0f","d83dde46d83cdffd200d2642fe0f","d83dde46d83cdffe200d2642fe0f","d83dde46d83cdfff200d2642fe0f"],["d83dde46200d2640fe0f","d83dde46d83cdffb200d2640fe0f","d83dde46d83cdffc200d2640fe0f","d83dde46d83cdffd200d2640fe0f","d83dde46d83cdffe200d2640fe0f","d83dde46d83cdfff200d2640fe0f"],["d83ddc81","d83ddc81d83cdffb","d83ddc81d83cdffc","d83ddc81d83cdffd","d83ddc81d83cdffe","d83ddc81d83cdfff"],["d83ddc81200d2642fe0f","d83ddc81d83cdffb200d2642fe0f","d83ddc81d83cdffc200d2642fe0f","d83ddc81d83cdffd200d2642fe0f","d83ddc81d83cdffe200d2642fe0f","d83ddc81d83cdfff200d2642fe0f"],["d83ddc81200d2640fe0f","d83ddc81d83cdffb200d2640fe0f","d83ddc81d83cdffc200d2640fe0f","d83ddc81d83cdffd200d2640fe0f","d83ddc81d83cdffe200d2640fe0f","d83ddc81d83cdfff200d2640fe0f"],["d83dde4b","d83dde4bd83cdffb","d83dde4bd83cdffc","d83dde4bd83cdffd","d83dde4bd83cdffe","d83dde4bd83cdfff"]],"People_3":[["d83dde4b200d2642fe0f","d83dde4bd83cdffb200d2642fe0f","d83dde4bd83cdffc200d2642fe0f","d83dde4bd83cdffd200d2642fe0f","d83dde4bd83cdffe200d2642fe0f","d83dde4bd83cdfff200d2642fe0f"],["d83dde4b200d2640fe0f","d83dde4bd83cdffb200d2640fe0f","d83dde4bd83cdffc200d2640fe0f","d83dde4bd83cdffd200d2640fe0f","d83dde4bd83cdffe200d2640fe0f","d83dde4bd83cdfff200d2640fe0f"],["d83eddcf","d83eddcfd83cdffb","d83eddcfd83cdffc","d83eddcfd83cdffd","d83eddcfd83cdffe","d83eddcfd83cdfff"],["d83eddcf200d2642fe0f","d83eddcfd83cdffb200d2642fe0f","d83eddcfd83cdffc200d2642fe0f","d83eddcfd83cdffd200d2642fe0f","d83eddcfd83cdffe200d2642fe0f","d83eddcfd83cdfff200d2642fe0f"],["d83eddcf200d2640fe0f","d83eddcfd83cdffb200d2640fe0f","d83eddcfd83cdffc200d2640fe0f","d83eddcfd83cdffd200d2640fe0f","d83eddcfd83cdffe200d2640fe0f","d83eddcfd83cdfff200d2640fe0f"],["d83dde47","d83dde47d83cdffb","d83dde47d83cdffc","d83dde47d83cdffd","d83dde47d83cdffe","d83dde47d83cdfff"],["d83dde47200d2642fe0f","d83dde47d83cdffb200d2642fe0f","d83dde47d83cdffc200d2642fe0f","d83dde47d83cdffd200d2642fe0f","d83dde47d83cdffe200d2642fe0f","d83dde47d83cdfff200d2642fe0f"],["d83dde47200d2640fe0f","d83dde47d83cdffb200d2640fe0f","d83dde47d83cdffc200d2640fe0f","d83dde47d83cdffd200d2640fe0f","d83dde47d83cdffe200d2640fe0f","d83dde47d83cdfff200d2640fe0f"],["d83edd26","d83edd26d83cdffb","d83edd26d83cdffc","d83edd26d83cdffd","d83edd26d83cdffe","d83edd26d83cdfff"],["d83edd26200d2642fe0f","d83edd26d83cdffb200d2642fe0f","d83edd26d83cdffc200d2642fe0f","d83edd26d83cdffd200d2642fe0f","d83edd26d83cdffe200d2642fe0f","d83edd26d83cdfff200d2642fe0f"],["d83edd26200d2640fe0f","d83edd26d83cdffb200d2640fe0f","d83edd26d83cdffc200d2640fe0f","d83edd26d83cdffd200d2640fe0f","d83edd26d83cdffe200d2640fe0f","d83edd26d83cdfff200d2640fe0f"],["d83edd37","d83edd37d83cdffb","d83edd37d83cdffc","d83edd37d83cdffd","d83edd37d83cdffe","d83edd37d83cdfff"],["d83edd37200d2642fe0f","d83edd37d83cdffb200d2642fe0f","d83edd37d83cdffc200d2642fe0f","d83edd37d83cdffd200d2642fe0f","d83edd37d83cdffe200d2642fe0f","d83edd37d83cdfff200d2642fe0f"],["d83edd37200d2640fe0f","d83edd37d83cdffb200d2640fe0f","d83edd37d83cdffc200d2640fe0f","d83edd37d83cdffd200d2640fe0f","d83edd37d83cdffe200d2640fe0f","d83edd37d83cdfff200d2640fe0f"],["d83eddd1200d2695fe0f","d83eddd1d83cdffb200d2695fe0f","d83eddd1d83cdffc200d2695fe0f","d83eddd1d83cdffd200d2695fe0f","d83eddd1d83cdffe200d2695fe0f","d83eddd1d83cdfff200d2695fe0f"],["d83ddc68200d2695fe0f","d83ddc68d83cdffb200d2695fe0f","d83ddc68d83cdffc200d2695fe0f","d83ddc68d83cdffd200d2695fe0f","d83ddc68d83cdffe200d2695fe0f","d83ddc68d83cdfff200d2695fe0f"],["d83ddc69200d2695fe0f","d83ddc69d83cdffb200d2695fe0f","d83ddc69d83cdffc200d2695fe0f","d83ddc69d83cdffd200d2695fe0f","d83ddc69d83cdffe200d2695fe0f","d83ddc69d83cdfff200d2695fe0f"],["d83eddd1200dd83cdf93","d83eddd1d83cdffb200dd83cdf93","d83eddd1d83cdffc200dd83cdf93","d83eddd1d83cdffd200dd83cdf93","d83eddd1d83cdffe200dd83cdf93","d83eddd1d83cdfff200dd83cdf93"],["d83ddc68200dd83cdf93","d83ddc68d83cdffb200dd83cdf93","d83ddc68d83cdffc200dd83cdf93","d83ddc68d83cdffd200dd83cdf93","d83ddc68d83cdffe200dd83cdf93","d83ddc68d83cdfff200dd83cdf93"],["d83ddc69200dd83cdf93","d83ddc69d83cdffb200dd83cdf93","d83ddc69d83cdffc200dd83cdf93","d83ddc69d83cdffd200dd83cdf93","d83ddc69d83cdffe200dd83cdf93","d83ddc69d83cdfff200dd83cdf93"],["d83eddd1200dd83cdfeb","d83eddd1d83cdffb200dd83cdfeb","d83eddd1d83cdffc200dd83cdfeb","d83eddd1d83cdffd200dd83cdfeb","d83eddd1d83cdffe200dd83cdfeb","d83eddd1d83cdfff200dd83cdfeb"],["d83ddc68200dd83cdfeb","d83ddc68d83cdffb200dd83cdfeb","d83ddc68d83cdffc200dd83cdfeb","d83ddc68d83cdffd200dd83cdfeb","d83ddc68d83cdffe200dd83cdfeb","d83ddc68d83cdfff200dd83cdfeb"],["d83ddc69200dd83cdfeb","d83ddc69d83cdffb200dd83cdfeb","d83ddc69d83cdffc200dd83cdfeb","d83ddc69d83cdffd200dd83cdfeb","d83ddc69d83cdffe200dd83cdfeb","d83ddc69d83cdfff200dd83cdfeb"],["d83eddd1200d2696fe0f","d83eddd1d83cdffb200d2696fe0f","d83eddd1d83cdffc200d2696fe0f","d83eddd1d83cdffd200d2696fe0f","d83eddd1d83cdffe200d2696fe0f","d83eddd1d83cdfff200d2696fe0f"],["d83ddc68200d2696fe0f","d83ddc68d83cdffb200d2696fe0f","d83ddc68d83cdffc200d2696fe0f","d83ddc68d83cdffd200d2696fe0f","d83ddc68d83cdffe200d2696fe0f","d83ddc68d83cdfff200d2696fe0f"],["d83ddc69200d2696fe0f","d83ddc69d83cdffb200d2696fe0f","d83ddc69d83cdffc200d2696fe0f","d83ddc69d83cdffd200d2696fe0f","d83ddc69d83cdffe200d2696fe0f","d83ddc69d83cdfff200d2696fe0f"],["d83eddd1200dd83cdf3e","d83eddd1d83cdffb200dd83cdf3e","d83eddd1d83cdffc200dd83cdf3e","d83eddd1d83cdffd200dd83cdf3e","d83eddd1d83cdffe200dd83cdf3e","d83eddd1d83cdfff200dd83cdf3e"],["d83ddc68200dd83cdf3e","d83ddc68d83cdffb200dd83cdf3e","d83ddc68d83cdffc200dd83cdf3e","d83ddc68d83cdffd200dd83cdf3e","d83ddc68d83cdffe200dd83cdf3e","d83ddc68d83cdfff200dd83cdf3e"],["d83ddc69200dd83cdf3e","d83ddc69d83cdffb200dd83cdf3e","d83ddc69d83cdffc200dd83cdf3e","d83ddc69d83cdffd200dd83cdf3e","d83ddc69d83cdffe200dd83cdf3e","d83ddc69d83cdfff200dd83cdf3e"],["d83eddd1200dd83cdf73","d83eddd1d83cdffb200dd83cdf73","d83eddd1d83cdffc200dd83cdf73","d83eddd1d83cdffd200dd83cdf73","d83eddd1d83cdffe200dd83cdf73","d83eddd1d83cdfff200dd83cdf73"],["d83ddc68200dd83cdf73","d83ddc68d83cdffb200dd83cdf73","d83ddc68d83cdffc200dd83cdf73","d83ddc68d83cdffd200dd83cdf73","d83ddc68d83cdffe200dd83cdf73","d83ddc68d83cdfff200dd83cdf73"],["d83ddc69200dd83cdf73","d83ddc69d83cdffb200dd83cdf73","d83ddc69d83cdffc200dd83cdf73","d83ddc69d83cdffd200dd83cdf73","d83ddc69d83cdffe200dd83cdf73","d83ddc69d83cdfff200dd83cdf73"],["d83eddd1200dd83ddd27","d83eddd1d83cdffb200dd83ddd27","d83eddd1d83cdffc200dd83ddd27","d83eddd1d83cdffd200dd83ddd27","d83eddd1d83cdffe200dd83ddd27","d83eddd1d83cdfff200dd83ddd27"],["d83ddc68200dd83ddd27","d83ddc68d83cdffb200dd83ddd27","d83ddc68d83cdffc200dd83ddd27","d83ddc68d83cdffd200dd83ddd27","d83ddc68d83cdffe200dd83ddd27","d83ddc68d83cdfff200dd83ddd27"],["d83ddc69200dd83ddd27","d83ddc69d83cdffb200dd83ddd27","d83ddc69d83cdffc200dd83ddd27","d83ddc69d83cdffd200dd83ddd27","d83ddc69d83cdffe200dd83ddd27","d83ddc69d83cdfff200dd83ddd27"],["d83eddd1200dd83cdfed","d83eddd1d83cdffb200dd83cdfed","d83eddd1d83cdffc200dd83cdfed","d83eddd1d83cdffd200dd83cdfed","d83eddd1d83cdffe200dd83cdfed","d83eddd1d83cdfff200dd83cdfed"],["d83ddc68200dd83cdfed","d83ddc68d83cdffb200dd83cdfed","d83ddc68d83cdffc200dd83cdfed","d83ddc68d83cdffd200dd83cdfed","d83ddc68d83cdffe200dd83cdfed","d83ddc68d83cdfff200dd83cdfed"],["d83ddc69200dd83cdfed","d83ddc69d83cdffb200dd83cdfed","d83ddc69d83cdffc200dd83cdfed","d83ddc69d83cdffd200dd83cdfed","d83ddc69d83cdffe200dd83cdfed","d83ddc69d83cdfff200dd83cdfed"],["d83eddd1200dd83ddcbc","d83eddd1d83cdffb200dd83ddcbc","d83eddd1d83cdffc200dd83ddcbc","d83eddd1d83cdffd200dd83ddcbc","d83eddd1d83cdffe200dd83ddcbc","d83eddd1d83cdfff200dd83ddcbc"],["d83ddc68200dd83ddcbc","d83ddc68d83cdffb200dd83ddcbc","d83ddc68d83cdffc200dd83ddcbc","d83ddc68d83cdffd200dd83ddcbc","d83ddc68d83cdffe200dd83ddcbc","d83ddc68d83cdfff200dd83ddcbc"],["d83ddc69200dd83ddcbc","d83ddc69d83cdffb200dd83ddcbc","d83ddc69d83cdffc200dd83ddcbc","d83ddc69d83cdffd200dd83ddcbc","d83ddc69d83cdffe200dd83ddcbc","d83ddc69d83cdfff200dd83ddcbc"],["d83eddd1200dd83ddd2c","d83eddd1d83cdffb200dd83ddd2c","d83eddd1d83cdffc200dd83ddd2c","d83eddd1d83cdffd200dd83ddd2c","d83eddd1d83cdffe200dd83ddd2c","d83eddd1d83cdfff200dd83ddd2c"]],"People_4":[["d83ddc68200dd83ddd2c","d83ddc68d83cdffb200dd83ddd2c","d83ddc68d83cdffc200dd83ddd2c","d83ddc68d83cdffd200dd83ddd2c","d83ddc68d83cdffe200dd83ddd2c","d83ddc68d83cdfff200dd83ddd2c"],["d83ddc69200dd83ddd2c","d83ddc69d83cdffb200dd83ddd2c","d83ddc69d83cdffc200dd83ddd2c","d83ddc69d83cdffd200dd83ddd2c","d83ddc69d83cdffe200dd83ddd2c","d83ddc69d83cdfff200dd83ddd2c"],["d83eddd1200dd83ddcbb","d83eddd1d83cdffb200dd83ddcbb","d83eddd1d83cdffc200dd83ddcbb","d83eddd1d83cdffd200dd83ddcbb","d83eddd1d83cdffe200dd83ddcbb","d83eddd1d83cdfff200dd83ddcbb"],["d83ddc68200dd83ddcbb","d83ddc68d83cdffb200dd83ddcbb","d83ddc68d83cdffc200dd83ddcbb","d83ddc68d83cdffd200dd83ddcbb","d83ddc68d83cdffe200dd83ddcbb","d83ddc68d83cdfff200dd83ddcbb"],["d83ddc69200dd83ddcbb","d83ddc69d83cdffb200dd83ddcbb","d83ddc69d83cdffc200dd83ddcbb","d83ddc69d83cdffd200dd83ddcbb","d83ddc69d83cdffe200dd83ddcbb","d83ddc69d83cdfff200dd83ddcbb"],["d83eddd1200dd83cdfa4","d83eddd1d83cdffb200dd83cdfa4","d83eddd1d83cdffc200dd83cdfa4","d83eddd1d83cdffd200dd83cdfa4","d83eddd1d83cdffe200dd83cdfa4","d83eddd1d83cdfff200dd83cdfa4"],["d83ddc68200dd83cdfa4","d83ddc68d83cdffb200dd83cdfa4","d83ddc68d83cdffc200dd83cdfa4","d83ddc68d83cdffd200dd83cdfa4","d83ddc68d83cdffe200dd83cdfa4","d83ddc68d83cdfff200dd83cdfa4"],["d83ddc69200dd83cdfa4","d83ddc69d83cdffb200dd83cdfa4","d83ddc69d83cdffc200dd83cdfa4","d83ddc69d83cdffd200dd83cdfa4","d83ddc69d83cdffe200dd83cdfa4","d83ddc69d83cdfff200dd83cdfa4"],["d83eddd1200dd83cdfa8","d83eddd1d83cdffb200dd83cdfa8","d83eddd1d83cdffc200dd83cdfa8","d83eddd1d83cdffd200dd83cdfa8","d83eddd1d83cdffe200dd83cdfa8","d83eddd1d83cdfff200dd83cdfa8"],["d83ddc68200dd83cdfa8","d83ddc68d83cdffb200dd83cdfa8","d83ddc68d83cdffc200dd83cdfa8","d83ddc68d83cdffd200dd83cdfa8","d83ddc68d83cdffe200dd83cdfa8","d83ddc68d83cdfff200dd83cdfa8"],["d83ddc69200dd83cdfa8","d83ddc69d83cdffb200dd83cdfa8","d83ddc69d83cdffc200dd83cdfa8","d83ddc69d83cdffd200dd83cdfa8","d83ddc69d83cdffe200dd83cdfa8","d83ddc69d83cdfff200dd83cdfa8"],["d83eddd1200d2708fe0f","d83eddd1d83cdffb200d2708fe0f","d83eddd1d83cdffc200d2708fe0f","d83eddd1d83cdffd200d2708fe0f","d83eddd1d83cdffe200d2708fe0f","d83eddd1d83cdfff200d2708fe0f"],["d83ddc68200d2708fe0f","d83ddc68d83cdffb200d2708fe0f","d83ddc68d83cdffc200d2708fe0f","d83ddc68d83cdffd200d2708fe0f","d83ddc68d83cdffe200d2708fe0f","d83ddc68d83cdfff200d2708fe0f"],["d83ddc69200d2708fe0f","d83ddc69d83cdffb200d2708fe0f","d83ddc69d83cdffc200d2708fe0f","d83ddc69d83cdffd200d2708fe0f","d83ddc69d83cdffe200d2708fe0f","d83ddc69d83cdfff200d2708fe0f"],["d83eddd1200dd83dde80","d83eddd1d83cdffb200dd83dde80","d83eddd1d83cdffc200dd83dde80","d83eddd1d83cdffd200dd83dde80","d83eddd1d83cdffe200dd83dde80","d83eddd1d83cdfff200dd83dde80"],["d83ddc68200dd83dde80","d83ddc68d83cdffb200dd83dde80","d83ddc68d83cdffc200dd83dde80","d83ddc68d83cdffd200dd83dde80","d83ddc68d83cdffe200dd83dde80","d83ddc68d83cdfff200dd83dde80"],["d83ddc69200dd83dde80","d83ddc69d83cdffb200dd83dde80","d83ddc69d83cdffc200dd83dde80","d83ddc69d83cdffd200dd83dde80","d83ddc69d83cdffe200dd83dde80","d83ddc69d83cdfff200dd83dde80"],["d83eddd1200dd83dde92","d83eddd1d83cdffb200dd83dde92","d83eddd1d83cdffc200dd83dde92","d83eddd1d83cdffd200dd83dde92","d83eddd1d83cdffe200dd83dde92","d83eddd1d83cdfff200dd83dde92"],["d83ddc68200dd83dde92","d83ddc68d83cdffb200dd83dde92","d83ddc68d83cdffc200dd83dde92","d83ddc68d83cdffd200dd83dde92","d83ddc68d83cdffe200dd83dde92","d83ddc68d83cdfff200dd83dde92"],["d83ddc69200dd83dde92","d83ddc69d83cdffb200dd83dde92","d83ddc69d83cdffc200dd83dde92","d83ddc69d83cdffd200dd83dde92","d83ddc69d83cdffe200dd83dde92","d83ddc69d83cdfff200dd83dde92"],["d83ddc6e","d83ddc6ed83cdffb","d83ddc6ed83cdffc","d83ddc6ed83cdffd","d83ddc6ed83cdffe","d83ddc6ed83cdfff"],["d83ddc6e200d2642fe0f","d83ddc6ed83cdffb200d2642fe0f","d83ddc6ed83cdffc200d2642fe0f","d83ddc6ed83cdffd200d2642fe0f","d83ddc6ed83cdffe200d2642fe0f","d83ddc6ed83cdfff200d2642fe0f"],["d83ddc6e200d2640fe0f","d83ddc6ed83cdffb200d2640fe0f","d83ddc6ed83cdffc200d2640fe0f","d83ddc6ed83cdffd200d2640fe0f","d83ddc6ed83cdffe200d2640fe0f","d83ddc6ed83cdfff200d2640fe0f"],["d83ddd75fe0f","d83ddd75d83cdffb","d83ddd75d83cdffc","d83ddd75d83cdffd","d83ddd75d83cdffe","d83ddd75d83cdfff"],["d83ddd75fe0f200d2642fe0f","d83ddd75d83cdffb200d2642fe0f","d83ddd75d83cdffc200d2642fe0f","d83ddd75d83cdffd200d2642fe0f","d83ddd75d83cdffe200d2642fe0f","d83ddd75d83cdfff200d2642fe0f"],["d83ddd75fe0f200d2640fe0f","d83ddd75d83cdffb200d2640fe0f","d83ddd75d83cdffc200d2640fe0f","d83ddd75d83cdffd200d2640fe0f","d83ddd75d83cdffe200d2640fe0f","d83ddd75d83cdfff200d2640fe0f"],["d83ddc82","d83ddc82d83cdffb","d83ddc82d83cdffc","d83ddc82d83cdffd","d83ddc82d83cdffe","d83ddc82d83cdfff"],["d83ddc82200d2642fe0f","d83ddc82d83cdffb200d2642fe0f","d83ddc82d83cdffc200d2642fe0f","d83ddc82d83cdffd200d2642fe0f","d83ddc82d83cdffe200d2642fe0f","d83ddc82d83cdfff200d2642fe0f"],["d83ddc82200d2640fe0f","d83ddc82d83cdffb200d2640fe0f","d83ddc82d83cdffc200d2640fe0f","d83ddc82d83cdffd200d2640fe0f","d83ddc82d83cdffe200d2640fe0f","d83ddc82d83cdfff200d2640fe0f"],["d83edd77","d83edd77d83cdffb","d83edd77d83cdffc","d83edd77d83cdffd","d83edd77d83cdffe","d83edd77d83cdfff"],["d83ddc77","d83ddc77d83cdffb","d83ddc77d83cdffc","d83ddc77d83cdffd","d83ddc77d83cdffe","d83ddc77d83cdfff"],["d83ddc77200d2642fe0f","d83ddc77d83cdffb200d2642fe0f","d83ddc77d83cdffc200d2642fe0f","d83ddc77d83cdffd200d2642fe0f","d83ddc77d83cdffe200d2642fe0f","d83ddc77d83cdfff200d2642fe0f"],["d83ddc77200d2640fe0f","d83ddc77d83cdffb200d2640fe0f","d83ddc77d83cdffc200d2640fe0f","d83ddc77d83cdffd200d2640fe0f","d83ddc77d83cdffe200d2640fe0f","d83ddc77d83cdfff200d2640fe0f"],["d83edec5","d83edec5d83cdffb","d83edec5d83cdffc","d83edec5d83cdffd","d83edec5d83cdffe","d83edec5d83cdfff"],["d83edd34","d83edd34d83cdffb","d83edd34d83cdffc","d83edd34d83cdffd","d83edd34d83cdffe","d83edd34d83cdfff"],["d83ddc78","d83ddc78d83cdffb","d83ddc78d83cdffc","d83ddc78d83cdffd","d83ddc78d83cdffe","d83ddc78d83cdfff"],["d83ddc73","d83ddc73d83cdffb","d83ddc73d83cdffc","d83ddc73d83cdffd","d83ddc73d83cdffe","d83ddc73d83cdfff"],["d83ddc73200d2642fe0f","d83ddc73d83cdffb200d2642fe0f","d83ddc73d83cdffc200d2642fe0f","d83ddc73d83cdffd200d2642fe0f","d83ddc73d83cdffe200d2642fe0f","d83ddc73d83cdfff200d2642fe0f"],["d83ddc73200d2640fe0f","d83ddc73d83cdffb200d2640fe0f","d83ddc73d83cdffc200d2640fe0f","d83ddc73d83cdffd200d2640fe0f","d83ddc73d83cdffe200d2640fe0f","d83ddc73d83cdfff200d2640fe0f"],["d83ddc72","d83ddc72d83cdffb","d83ddc72d83cdffc","d83ddc72d83cdffd","d83ddc72d83cdffe","d83ddc72d83cdfff"],["d83eddd5","d83eddd5d83cdffb","d83eddd5d83cdffc","d83eddd5d83cdffd","d83eddd5d83cdffe","d83eddd5d83cdfff"],["d83edd35","d83edd35d83cdffb","d83edd35d83cdffc","d83edd35d83cdffd","d83edd35d83cdffe","d83edd35d83cdfff"]],"People_5":[["d83edd35200d2642fe0f","d83edd35d83cdffb200d2642fe0f","d83edd35d83cdffc200d2642fe0f","d83edd35d83cdffd200d2642fe0f","d83edd35d83cdffe200d2642fe0f","d83edd35d83cdfff200d2642fe0f"],["d83edd35200d2640fe0f","d83edd35d83cdffb200d2640fe0f","d83edd35d83cdffc200d2640fe0f","d83edd35d83cdffd200d2640fe0f","d83edd35d83cdffe200d2640fe0f","d83edd35d83cdfff200d2640fe0f"],["d83ddc70","d83ddc70d83cdffb","d83ddc70d83cdffc","d83ddc70d83cdffd","d83ddc70d83cdffe","d83ddc70d83cdfff"],["d83ddc70200d2642fe0f","d83ddc70d83cdffb200d2642fe0f","d83ddc70d83cdffc200d2642fe0f","d83ddc70d83cdffd200d2642fe0f","d83ddc70d83cdffe200d2642fe0f","d83ddc70d83cdfff200d2642fe0f"],["d83ddc70200d2640fe0f","d83ddc70d83cdffb200d2640fe0f","d83ddc70d83cdffc200d2640fe0f","d83ddc70d83cdffd200d2640fe0f","d83ddc70d83cdffe200d2640fe0f","d83ddc70d83cdfff200d2640fe0f"],["d83edd30","d83edd30d83cdffb","d83edd30d83cdffc","d83edd30d83cdffd","d83edd30d83cdffe","d83edd30d83cdfff"],["d83edec3","d83edec3d83cdffb","d83edec3d83cdffc","d83edec3d83cdffd","d83edec3d83cdffe","d83edec3d83cdfff"],["d83edec4","d83edec4d83cdffb","d83edec4d83cdffc","d83edec4d83cdffd","d83edec4d83cdffe","d83edec4d83cdfff"],["d83edd31","d83edd31d83cdffb","d83edd31d83cdffc","d83edd31d83cdffd","d83edd31d83cdffe","d83edd31d83cdfff"],["d83ddc69200dd83cdf7c","d83ddc69d83cdffb200dd83cdf7c","d83ddc69d83cdffc200dd83cdf7c","d83ddc69d83cdffd200dd83cdf7c","d83ddc69d83cdffe200dd83cdf7c","d83ddc69d83cdfff200dd83cdf7c"],["d83ddc68200dd83cdf7c","d83ddc68d83cdffb200dd83cdf7c","d83ddc68d83cdffc200dd83cdf7c","d83ddc68d83cdffd200dd83cdf7c","d83ddc68d83cdffe200dd83cdf7c","d83ddc68d83cdfff200dd83cdf7c"],["d83eddd1200dd83cdf7c","d83eddd1d83cdffb200dd83cdf7c","d83eddd1d83cdffc200dd83cdf7c","d83eddd1d83cdffd200dd83cdf7c","d83eddd1d83cdffe200dd83cdf7c","d83eddd1d83cdfff200dd83cdf7c"],["d83ddc7c","d83ddc7cd83cdffb","d83ddc7cd83cdffc","d83ddc7cd83cdffd","d83ddc7cd83cdffe","d83ddc7cd83cdfff"],["d83cdf85","d83cdf85d83cdffb","d83cdf85d83cdffc","d83cdf85d83cdffd","d83cdf85d83cdffe","d83cdf85d83cdfff"],["d83edd36","d83edd36d83cdffb","d83edd36d83cdffc","d83edd36d83cdffd","d83edd36d83cdffe","d83edd36d83cdfff"],["d83eddd1200dd83cdf84","d83eddd1d83cdffb200dd83cdf84","d83eddd1d83cdffc200dd83cdf84","d83eddd1d83cdffd200dd83cdf84","d83eddd1d83cdffe200dd83cdf84","d83eddd1d83cdfff200dd83cdf84"],["d83eddb8","d83eddb8d83cdffb","d83eddb8d83cdffc","d83eddb8d83cdffd","d83eddb8d83cdffe","d83eddb8d83cdfff"],["d83eddb8200d2642fe0f","d83eddb8d83cdffb200d2642fe0f","d83eddb8d83cdffc200d2642fe0f","d83eddb8d83cdffd200d2642fe0f","d83eddb8d83cdffe200d2642fe0f","d83eddb8d83cdfff200d2642fe0f"],["d83eddb8200d2640fe0f","d83eddb8d83cdffb200d2640fe0f","d83eddb8d83cdffc200d2640fe0f","d83eddb8d83cdffd200d2640fe0f","d83eddb8d83cdffe200d2640fe0f","d83eddb8d83cdfff200d2640fe0f"],["d83eddb9","d83eddb9d83cdffb","d83eddb9d83cdffc","d83eddb9d83cdffd","d83eddb9d83cdffe","d83eddb9d83cdfff"],["d83eddb9200d2642fe0f","d83eddb9d83cdffb200d2642fe0f","d83eddb9d83cdffc200d2642fe0f","d83eddb9d83cdffd200d2642fe0f","d83eddb9d83cdffe200d2642fe0f","d83eddb9d83cdfff200d2642fe0f"],["d83eddb9200d2640fe0f","d83eddb9d83cdffb200d2640fe0f","d83eddb9d83cdffc200d2640fe0f","d83eddb9d83cdffd200d2640fe0f","d83eddb9d83cdffe200d2640fe0f","d83eddb9d83cdfff200d2640fe0f"],["d83eddd9","d83eddd9d83cdffb","d83eddd9d83cdffc","d83eddd9d83cdffd","d83eddd9d83cdffe","d83eddd9d83cdfff"],["d83eddd9200d2642fe0f","d83eddd9d83cdffb200d2642fe0f","d83eddd9d83cdffc200d2642fe0f","d83eddd9d83cdffd200d2642fe0f","d83eddd9d83cdffe200d2642fe0f","d83eddd9d83cdfff200d2642fe0f"],["d83eddd9200d2640fe0f","d83eddd9d83cdffb200d2640fe0f","d83eddd9d83cdffc200d2640fe0f","d83eddd9d83cdffd200d2640fe0f","d83eddd9d83cdffe200d2640fe0f","d83eddd9d83cdfff200d2640fe0f"],["d83eddda","d83edddad83cdffb","d83edddad83cdffc","d83edddad83cdffd","d83edddad83cdffe","d83edddad83cdfff"],["d83eddda200d2642fe0f","d83edddad83cdffb200d2642fe0f","d83edddad83cdffc200d2642fe0f","d83edddad83cdffd200d2642fe0f","d83edddad83cdffe200d2642fe0f","d83edddad83cdfff200d2642fe0f"],["d83eddda200d2640fe0f","d83edddad83cdffb200d2640fe0f","d83edddad83cdffc200d2640fe0f","d83edddad83cdffd200d2640fe0f","d83edddad83cdffe200d2640fe0f","d83edddad83cdfff200d2640fe0f"],["d83edddb","d83edddbd83cdffb","d83edddbd83cdffc","d83edddbd83cdffd","d83edddbd83cdffe","d83edddbd83cdfff"],["d83edddb200d2642fe0f","d83edddbd83cdffb200d2642fe0f","d83edddbd83cdffc200d2642fe0f","d83edddbd83cdffd200d2642fe0f","d83edddbd83cdffe200d2642fe0f","d83edddbd83cdfff200d2642fe0f"],["d83edddb200d2640fe0f","d83edddbd83cdffb200d2640fe0f","d83edddbd83cdffc200d2640fe0f","d83edddbd83cdffd200d2640fe0f","d83edddbd83cdffe200d2640fe0f","d83edddbd83cdfff200d2640fe0f"],["d83edddc","d83edddcd83cdffb","d83edddcd83cdffc","d83edddcd83cdffd","d83edddcd83cdffe","d83edddcd83cdfff"],["d83edddc200d2642fe0f","d83edddcd83cdffb200d2642fe0f","d83edddcd83cdffc200d2642fe0f","d83edddcd83cdffd200d2642fe0f","d83edddcd83cdffe200d2642fe0f","d83edddcd83cdfff200d2642fe0f"],["d83edddc200d2640fe0f","d83edddcd83cdffb200d2640fe0f","d83edddcd83cdffc200d2640fe0f","d83edddcd83cdffd200d2640fe0f","d83edddcd83cdffe200d2640fe0f","d83edddcd83cdfff200d2640fe0f"],["d83edddd","d83eddddd83cdffb","d83eddddd83cdffc","d83eddddd83cdffd","d83eddddd83cdffe","d83eddddd83cdfff"],["d83edddd200d2642fe0f","d83eddddd83cdffb200d2642fe0f","d83eddddd83cdffc200d2642fe0f","d83eddddd83cdffd200d2642fe0f","d83eddddd83cdffe200d2642fe0f","d83eddddd83cdfff200d2642fe0f"],["d83edddd200d2640fe0f","d83eddddd83cdffb200d2640fe0f","d83eddddd83cdffc200d2640fe0f","d83eddddd83cdffd200d2640fe0f","d83eddddd83cdffe200d2640fe0f","d83eddddd83cdfff200d2640fe0f"],["d83eddde"],["d83eddde200d2642fe0f"],["d83eddde200d2640fe0f"],["d83edddf"],["d83edddf200d2642fe0f"],["d83edddf200d2640fe0f"],["d83eddcc"],["d83ddc86","d83ddc86d83cdffb","d83ddc86d83cdffc","d83ddc86d83cdffd","d83ddc86d83cdffe","d83ddc86d83cdfff"],["d83ddc86200d2642fe0f","d83ddc86d83cdffb200d2642fe0f","d83ddc86d83cdffc200d2642fe0f","d83ddc86d83cdffd200d2642fe0f","d83ddc86d83cdffe200d2642fe0f","d83ddc86d83cdfff200d2642fe0f"],["d83ddc86200d2640fe0f","d83ddc86d83cdffb200d2640fe0f","d83ddc86d83cdffc200d2640fe0f","d83ddc86d83cdffd200d2640fe0f","d83ddc86d83cdffe200d2640fe0f","d83ddc86d83cdfff200d2640fe0f"],["d83ddc87","d83ddc87d83cdffb","d83ddc87d83cdffc","d83ddc87d83cdffd","d83ddc87d83cdffe","d83ddc87d83cdfff"]],"People_6":[["d83ddc87200d2642fe0f","d83ddc87d83cdffb200d2642fe0f","d83ddc87d83cdffc200d2642fe0f","d83ddc87d83cdffd200d2642fe0f","d83ddc87d83cdffe200d2642fe0f","d83ddc87d83cdfff200d2642fe0f"],["d83ddc87200d2640fe0f","d83ddc87d83cdffb200d2640fe0f","d83ddc87d83cdffc200d2640fe0f","d83ddc87d83cdffd200d2640fe0f","d83ddc87d83cdffe200d2640fe0f","d83ddc87d83cdfff200d2640fe0f"],["d83ddeb6","d83ddeb6d83cdffb","d83ddeb6d83cdffc","d83ddeb6d83cdffd","d83ddeb6d83cdffe","d83ddeb6d83cdfff"],["d83ddeb6200d2642fe0f","d83ddeb6d83cdffb200d2642fe0f","d83ddeb6d83cdffc200d2642fe0f","d83ddeb6d83cdffd200d2642fe0f","d83ddeb6d83cdffe200d2642fe0f","d83ddeb6d83cdfff200d2642fe0f"],["d83ddeb6200d2640fe0f","d83ddeb6d83cdffb200d2640fe0f","d83ddeb6d83cdffc200d2640fe0f","d83ddeb6d83cdffd200d2640fe0f","d83ddeb6d83cdffe200d2640fe0f","d83ddeb6d83cdfff200d2640fe0f"],["d83ddeb6200d27a1fe0f","d83ddeb6d83cdffb200d27a1fe0f","d83ddeb6d83cdffc200d27a1fe0f","d83ddeb6d83cdffd200d27a1fe0f","d83ddeb6d83cdffe200d27a1fe0f","d83ddeb6d83cdfff200d27a1fe0f"],["d83ddeb6200d2640fe0f200d27a1fe0f","d83ddeb6d83cdffb200d2640fe0f200d27a1fe0f","d83ddeb6d83cdffc200d2640fe0f200d27a1fe0f","d83ddeb6d83cdffd200d2640fe0f200d27a1fe0f","d83ddeb6d83cdffe200d2640fe0f200d27a1fe0f","d83ddeb6d83cdfff200d2640fe0f200d27a1fe0f"],["d83ddeb6200d2642fe0f200d27a1fe0f","d83ddeb6d83cdffb200d2642fe0f200d27a1fe0f","d83ddeb6d83cdffc200d2642fe0f200d27a1fe0f","d83ddeb6d83cdffd200d2642fe0f200d27a1fe0f","d83ddeb6d83cdffe200d2642fe0f200d27a1fe0f","d83ddeb6d83cdfff200d2642fe0f200d27a1fe0f"],["d83eddcd","d83eddcdd83cdffb","d83eddcdd83cdffc","d83eddcdd83cdffd","d83eddcdd83cdffe","d83eddcdd83cdfff"],["d83eddcd200d2642fe0f","d83eddcdd83cdffb200d2642fe0f","d83eddcdd83cdffc200d2642fe0f","d83eddcdd83cdffd200d2642fe0f","d83eddcdd83cdffe200d2642fe0f","d83eddcdd83cdfff200d2642fe0f"],["d83eddcd200d2640fe0f","d83eddcdd83cdffb200d2640fe0f","d83eddcdd83cdffc200d2640fe0f","d83eddcdd83cdffd200d2640fe0f","d83eddcdd83cdffe200d2640fe0f","d83eddcdd83cdfff200d2640fe0f"],["d83eddce","d83eddced83cdffb","d83eddced83cdffc","d83eddced83cdffd","d83eddced83cdffe","d83eddced83cdfff"],["d83eddce200d2642fe0f","d83eddced83cdffb200d2642fe0f","d83eddced83cdffc200d2642fe0f","d83eddced83cdffd200d2642fe0f","d83eddced83cdffe200d2642fe0f","d83eddced83cdfff200d2642fe0f"],["d83eddce200d2640fe0f","d83eddced83cdffb200d2640fe0f","d83eddced83cdffc200d2640fe0f","d83eddced83cdffd200d2640fe0f","d83eddced83cdffe200d2640fe0f","d83eddced83cdfff200d2640fe0f"],["d83eddce200d27a1fe0f","d83eddced83cdffb200d27a1fe0f","d83eddced83cdffc200d27a1fe0f","d83eddced83cdffd200d27a1fe0f","d83eddced83cdffe200d27a1fe0f","d83eddced83cdfff200d27a1fe0f"],["d83eddce200d2640fe0f200d27a1fe0f","d83eddced83cdffb200d2640fe0f200d27a1fe0f","d83eddced83cdffc200d2640fe0f200d27a1fe0f","d83eddced83cdffd200d2640fe0f200d27a1fe0f","d83eddced83cdffe200d2640fe0f200d27a1fe0f","d83eddced83cdfff200d2640fe0f200d27a1fe0f"],["d83eddce200d2642fe0f200d27a1fe0f","d83eddced83cdffb200d2642fe0f200d27a1fe0f","d83eddced83cdffc200d2642fe0f200d27a1fe0f","d83eddced83cdffd200d2642fe0f200d27a1fe0f","d83eddced83cdffe200d2642fe0f200d27a1fe0f","d83eddced83cdfff200d2642fe0f200d27a1fe0f"],["d83eddd1200dd83eddaf","d83eddd1d83cdffb200dd83eddaf","d83eddd1d83cdffc200dd83eddaf","d83eddd1d83cdffd200dd83eddaf","d83eddd1d83cdffe200dd83eddaf","d83eddd1d83cdfff200dd83eddaf"],["d83eddd1200dd83eddaf200d27a1fe0f","d83eddd1d83cdffb200dd83eddaf200d27a1fe0f","d83eddd1d83cdffc200dd83eddaf200d27a1fe0f","d83eddd1d83cdffd200dd83eddaf200d27a1fe0f","d83eddd1d83cdffe200dd83eddaf200d27a1fe0f","d83eddd1d83cdfff200dd83eddaf200d27a1fe0f"],["d83ddc68200dd83eddaf","d83ddc68d83cdffb200dd83eddaf","d83ddc68d83cdffc200dd83eddaf","d83ddc68d83cdffd200dd83eddaf","d83ddc68d83cdffe200dd83eddaf","d83ddc68d83cdfff200dd83eddaf"],["d83ddc68200dd83eddaf200d27a1fe0f","d83ddc68d83cdffb200dd83eddaf200d27a1fe0f","d83ddc68d83cdffc200dd83eddaf200d27a1fe0f","d83ddc68d83cdffd200dd83eddaf200d27a1fe0f","d83ddc68d83cdffe200dd83eddaf200d27a1fe0f","d83ddc68d83cdfff200dd83eddaf200d27a1fe0f"],["d83ddc69200dd83eddaf","d83ddc69d83cdffb200dd83eddaf","d83ddc69d83cdffc200dd83eddaf","d83ddc69d83cdffd200dd83eddaf","d83ddc69d83cdffe200dd83eddaf","d83ddc69d83cdfff200dd83eddaf"],["d83ddc69200dd83eddaf200d27a1fe0f","d83ddc69d83cdffb200dd83eddaf200d27a1fe0f","d83ddc69d83cdffc200dd83eddaf200d27a1fe0f","d83ddc69d83cdffd200dd83eddaf200d27a1fe0f","d83ddc69d83cdffe200dd83eddaf200d27a1fe0f","d83ddc69d83cdfff200dd83eddaf200d27a1fe0f"],["d83eddd1200dd83eddbc","d83eddd1d83cdffb200dd83eddbc","d83eddd1d83cdffc200dd83eddbc","d83eddd1d83cdffd200dd83eddbc","d83eddd1d83cdffe200dd83eddbc","d83eddd1d83cdfff200dd83eddbc"],["d83eddd1200dd83eddbc200d27a1fe0f","d83eddd1d83cdffb200dd83eddbc200d27a1fe0f","d83eddd1d83cdffc200dd83eddbc200d27a1fe0f","d83eddd1d83cdffd200dd83eddbc200d27a1fe0f","d83eddd1d83cdffe200dd83eddbc200d27a1fe0f","d83eddd1d83cdfff200dd83eddbc200d27a1fe0f"],["d83ddc68200dd83eddbc","d83ddc68d83cdffb200dd83eddbc","d83ddc68d83cdffc200dd83eddbc","d83ddc68d83cdffd200dd83eddbc","d83ddc68d83cdffe200dd83eddbc","d83ddc68d83cdfff200dd83eddbc"],["d83ddc68200dd83eddbc200d27a1fe0f","d83ddc68d83cdffb200dd83eddbc200d27a1fe0f","d83ddc68d83cdffc200dd83eddbc200d27a1fe0f","d83ddc68d83cdffd200dd83eddbc200d27a1fe0f","d83ddc68d83cdffe200dd83eddbc200d27a1fe0f","d83ddc68d83cdfff200dd83eddbc200d27a1fe0f"],["d83ddc69200dd83eddbc","d83ddc69d83cdffb200dd83eddbc","d83ddc69d83cdffc200dd83eddbc","d83ddc69d83cdffd200dd83eddbc","d83ddc69d83cdffe200dd83eddbc","d83ddc69d83cdfff200dd83eddbc"],["d83ddc69200dd83eddbc200d27a1fe0f","d83ddc69d83cdffb200dd83eddbc200d27a1fe0f","d83ddc69d83cdffc200dd83eddbc200d27a1fe0f","d83ddc69d83cdffd200dd83eddbc200d27a1fe0f","d83ddc69d83cdffe200dd83eddbc200d27a1fe0f","d83ddc69d83cdfff200dd83eddbc200d27a1fe0f"],["d83eddd1200dd83eddbd","d83eddd1d83cdffb200dd83eddbd","d83eddd1d83cdffc200dd83eddbd","d83eddd1d83cdffd200dd83eddbd","d83eddd1d83cdffe200dd83eddbd","d83eddd1d83cdfff200dd83eddbd"],["d83eddd1200dd83eddbd200d27a1fe0f","d83eddd1d83cdffb200dd83eddbd200d27a1fe0f","d83eddd1d83cdffc200dd83eddbd200d27a1fe0f","d83eddd1d83cdffd200dd83eddbd200d27a1fe0f","d83eddd1d83cdffe200dd83eddbd200d27a1fe0f","d83eddd1d83cdfff200dd83eddbd200d27a1fe0f"],["d83ddc68200dd83eddbd","d83ddc68d83cdffb200dd83eddbd","d83ddc68d83cdffc200dd83eddbd","d83ddc68d83cdffd200dd83eddbd","d83ddc68d83cdffe200dd83eddbd","d83ddc68d83cdfff200dd83eddbd"],["d83ddc68200dd83eddbd200d27a1fe0f","d83ddc68d83cdffb200dd83eddbd200d27a1fe0f","d83ddc68d83cdffc200dd83eddbd200d27a1fe0f","d83ddc68d83cdffd200dd83eddbd200d27a1fe0f","d83ddc68d83cdffe200dd83eddbd200d27a1fe0f","d83ddc68d83cdfff200dd83eddbd200d27a1fe0f"],["d83ddc69200dd83eddbd","d83ddc69d83cdffb200dd83eddbd","d83ddc69d83cdffc200dd83eddbd","d83ddc69d83cdffd200dd83eddbd","d83ddc69d83cdffe200dd83eddbd","d83ddc69d83cdfff200dd83eddbd"],["d83ddc69200dd83eddbd200d27a1fe0f","d83ddc69d83cdffb200dd83eddbd200d27a1fe0f","d83ddc69d83cdffc200dd83eddbd200d27a1fe0f","d83ddc69d83cdffd200dd83eddbd200d27a1fe0f","d83ddc69d83cdffe200dd83eddbd200d27a1fe0f","d83ddc69d83cdfff200dd83eddbd200d27a1fe0f"],["d83cdfc3","d83cdfc3d83cdffb","d83cdfc3d83cdffc","d83cdfc3d83cdffd","d83cdfc3d83cdffe","d83cdfc3d83cdfff"],["d83cdfc3200d2642fe0f","d83cdfc3d83cdffb200d2642fe0f","d83cdfc3d83cdffc200d2642fe0f","d83cdfc3d83cdffd200d2642fe0f","d83cdfc3d83cdffe200d2642fe0f","d83cdfc3d83cdfff200d2642fe0f"],["d83cdfc3200d2640fe0f","d83cdfc3d83cdffb200d2640fe0f","d83cdfc3d83cdffc200d2640fe0f","d83cdfc3d83cdffd200d2640fe0f","d83cdfc3d83cdffe200d2640fe0f","d83cdfc3d83cdfff200d2640fe0f"],["d83cdfc3200d27a1fe0f","d83cdfc3d83cdffb200d27a1fe0f","d83cdfc3d83cdffc200d27a1fe0f","d83cdfc3d83cdffd200d27a1fe0f","d83cdfc3d83cdffe200d27a1fe0f","d83cdfc3d83cdfff200d27a1fe0f"],["d83cdfc3200d2640fe0f200d27a1fe0f","d83cdfc3d83cdffb200d2640fe0f200d27a1fe0f","d83cdfc3d83cdffc200d2640fe0f200d27a1fe0f","d83cdfc3d83cdffd200d2640fe0f200d27a1fe0f","d83cdfc3d83cdffe200d2640fe0f200d27a1fe0f","d83cdfc3d83cdfff200d2640fe0f200d27a1fe0f"],["d83cdfc3200d2642fe0f200d27a1fe0f","d83cdfc3d83cdffb200d2642fe0f200d27a1fe0f","d83cdfc3d83cdffc200d2642fe0f200d27a1fe0f","d83cdfc3d83cdffd200d2642fe0f200d27a1fe0f","d83cdfc3d83cdffe200d2642fe0f200d27a1fe0f","d83cdfc3d83cdfff200d2642fe0f200d27a1fe0f"],["d83ddc83","d83ddc83d83cdffb","d83ddc83d83cdffc","d83ddc83d83cdffd","d83ddc83d83cdffe","d83ddc83d83cdfff"]],"People_7":[["d83ddd7a","d83ddd7ad83cdffb","d83ddd7ad83cdffc","d83ddd7ad83cdffd","d83ddd7ad83cdffe","d83ddd7ad83cdfff"],["d83ddd74fe0f","d83ddd74d83cdffb","d83ddd74d83cdffc","d83ddd74d83cdffd","d83ddd74d83cdffe","d83ddd74d83cdfff"],["d83ddc6f"],["d83ddc6f200d2642fe0f"],["d83ddc6f200d2640fe0f"],["d83eddd6","d83eddd6d83cdffb","d83eddd6d83cdffc","d83eddd6d83cdffd","d83eddd6d83cdffe","d83eddd6d83cdfff"],["d83eddd6200d2642fe0f","d83eddd6d83cdffb200d2642fe0f","d83eddd6d83cdffc200d2642fe0f","d83eddd6d83cdffd200d2642fe0f","d83eddd6d83cdffe200d2642fe0f","d83eddd6d83cdfff200d2642fe0f"],["d83eddd6200d2640fe0f","d83eddd6d83cdffb200d2640fe0f","d83eddd6d83cdffc200d2640fe0f","d83eddd6d83cdffd200d2640fe0f","d83eddd6d83cdffe200d2640fe0f","d83eddd6d83cdfff200d2640fe0f"],["d83eddd7","d83eddd7d83cdffb","d83eddd7d83cdffc","d83eddd7d83cdffd","d83eddd7d83cdffe","d83eddd7d83cdfff"],["d83eddd7200d2642fe0f","d83eddd7d83cdffb200d2642fe0f","d83eddd7d83cdffc200d2642fe0f","d83eddd7d83cdffd200d2642fe0f","d83eddd7d83cdffe200d2642fe0f","d83eddd7d83cdfff200d2642fe0f"],["d83eddd7200d2640fe0f","d83eddd7d83cdffb200d2640fe0f","d83eddd7d83cdffc200d2640fe0f","d83eddd7d83cdffd200d2640fe0f","d83eddd7d83cdffe200d2640fe0f","d83eddd7d83cdfff200d2640fe0f"],["d83edd3a"],["d83cdfc7","d83cdfc7d83cdffb","d83cdfc7d83cdffc","d83cdfc7d83cdffd","d83cdfc7d83cdffe","d83cdfc7d83cdfff"],["26f7fe0f"],["d83cdfc2","d83cdfc2d83cdffb","d83cdfc2d83cdffc","d83cdfc2d83cdffd","d83cdfc2d83cdffe","d83cdfc2d83cdfff"],["d83cdfccfe0f","d83cdfccd83cdffb","d83cdfccd83cdffc","d83cdfccd83cdffd","d83cdfccd83cdffe","d83cdfccd83cdfff"],["d83cdfccfe0f200d2642fe0f","d83cdfccd83cdffb200d2642fe0f","d83cdfccd83cdffc200d2642fe0f","d83cdfccd83cdffd200d2642fe0f","d83cdfccd83cdffe200d2642fe0f","d83cdfccd83cdfff200d2642fe0f"],["d83cdfccfe0f200d2640fe0f","d83cdfccd83cdffb200d2640fe0f","d83cdfccd83cdffc200d2640fe0f","d83cdfccd83cdffd200d2640fe0f","d83cdfccd83cdffe200d2640fe0f","d83cdfccd83cdfff200d2640fe0f"],["d83cdfc4","d83cdfc4d83cdffb","d83cdfc4d83cdffc","d83cdfc4d83cdffd","d83cdfc4d83cdffe","d83cdfc4d83cdfff"],["d83cdfc4200d2642fe0f","d83cdfc4d83cdffb200d2642fe0f","d83cdfc4d83cdffc200d2642fe0f","d83cdfc4d83cdffd200d2642fe0f","d83cdfc4d83cdffe200d2642fe0f","d83cdfc4d83cdfff200d2642fe0f"],["d83cdfc4200d2640fe0f","d83cdfc4d83cdffb200d2640fe0f","d83cdfc4d83cdffc200d2640fe0f","d83cdfc4d83cdffd200d2640fe0f","d83cdfc4d83cdffe200d2640fe0f","d83cdfc4d83cdfff200d2640fe0f"],["d83ddea3","d83ddea3d83cdffb","d83ddea3d83cdffc","d83ddea3d83cdffd","d83ddea3d83cdffe","d83ddea3d83cdfff"],["d83ddea3200d2642fe0f","d83ddea3d83cdffb200d2642fe0f","d83ddea3d83cdffc200d2642fe0f","d83ddea3d83cdffd200d2642fe0f","d83ddea3d83cdffe200d2642fe0f","d83ddea3d83cdfff200d2642fe0f"],["d83ddea3200d2640fe0f","d83ddea3d83cdffb200d2640fe0f","d83ddea3d83cdffc200d2640fe0f","d83ddea3d83cdffd200d2640fe0f","d83ddea3d83cdffe200d2640fe0f","d83ddea3d83cdfff200d2640fe0f"],["d83cdfca","d83cdfcad83cdffb","d83cdfcad83cdffc","d83cdfcad83cdffd","d83cdfcad83cdffe","d83cdfcad83cdfff"],["d83cdfca200d2642fe0f","d83cdfcad83cdffb200d2642fe0f","d83cdfcad83cdffc200d2642fe0f","d83cdfcad83cdffd200d2642fe0f","d83cdfcad83cdffe200d2642fe0f","d83cdfcad83cdfff200d2642fe0f"],["d83cdfca200d2640fe0f","d83cdfcad83cdffb200d2640fe0f","d83cdfcad83cdffc200d2640fe0f","d83cdfcad83cdffd200d2640fe0f","d83cdfcad83cdffe200d2640fe0f","d83cdfcad83cdfff200d2640fe0f"],["26f9fe0f","26f9d83cdffb","26f9d83cdffc","26f9d83cdffd","26f9d83cdffe","26f9d83cdfff"],["26f9fe0f200d2642fe0f","26f9d83cdffb200d2642fe0f","26f9d83cdffc200d2642fe0f","26f9d83cdffd200d2642fe0f","26f9d83cdffe200d2642fe0f","26f9d83cdfff200d2642fe0f"],["26f9fe0f200d2640fe0f","26f9d83cdffb200d2640fe0f","26f9d83cdffc200d2640fe0f","26f9d83cdffd200d2640fe0f","26f9d83cdffe200d2640fe0f","26f9d83cdfff200d2640fe0f"],["d83cdfcbfe0f","d83cdfcbd83cdffb","d83cdfcbd83cdffc","d83cdfcbd83cdffd","d83cdfcbd83cdffe","d83cdfcbd83cdfff"],["d83cdfcbfe0f200d2642fe0f","d83cdfcbd83cdffb200d2642fe0f","d83cdfcbd83cdffc200d2642fe0f","d83cdfcbd83cdffd200d2642fe0f","d83cdfcbd83cdffe200d2642fe0f","d83cdfcbd83cdfff200d2642fe0f"],["d83cdfcbfe0f200d2640fe0f","d83cdfcbd83cdffb200d2640fe0f","d83cdfcbd83cdffc200d2640fe0f","d83cdfcbd83cdffd200d2640fe0f","d83cdfcbd83cdffe200d2640fe0f","d83cdfcbd83cdfff200d2640fe0f"],["d83ddeb4","d83ddeb4d83cdffb","d83ddeb4d83cdffc","d83ddeb4d83cdffd","d83ddeb4d83cdffe","d83ddeb4d83cdfff"],["d83ddeb4200d2642fe0f","d83ddeb4d83cdffb200d2642fe0f","d83ddeb4d83cdffc200d2642fe0f","d83ddeb4d83cdffd200d2642fe0f","d83ddeb4d83cdffe200d2642fe0f","d83ddeb4d83cdfff200d2642fe0f"],["d83ddeb4200d2640fe0f","d83ddeb4d83cdffb200d2640fe0f","d83ddeb4d83cdffc200d2640fe0f","d83ddeb4d83cdffd200d2640fe0f","d83ddeb4d83cdffe200d2640fe0f","d83ddeb4d83cdfff200d2640fe0f"],["d83ddeb5","d83ddeb5d83cdffb","d83ddeb5d83cdffc","d83ddeb5d83cdffd","d83ddeb5d83cdffe","d83ddeb5d83cdfff"],["d83ddeb5200d2642fe0f","d83ddeb5d83cdffb200d2642fe0f","d83ddeb5d83cdffc200d2642fe0f","d83ddeb5d83cdffd200d2642fe0f","d83ddeb5d83cdffe200d2642fe0f","d83ddeb5d83cdfff200d2642fe0f"],["d83ddeb5200d2640fe0f","d83ddeb5d83cdffb200d2640fe0f","d83ddeb5d83cdffc200d2640fe0f","d83ddeb5d83cdffd200d2640fe0f","d83ddeb5d83cdffe200d2640fe0f","d83ddeb5d83cdfff200d2640fe0f"],["d83edd38","d83edd38d83cdffb","d83edd38d83cdffc","d83edd38d83cdffd","d83edd38d83cdffe","d83edd38d83cdfff"],["d83edd38200d2642fe0f","d83edd38d83cdffb200d2642fe0f","d83edd38d83cdffc200d2642fe0f","d83edd38d83cdffd200d2642fe0f","d83edd38d83cdffe200d2642fe0f","d83edd38d83cdfff200d2642fe0f"],["d83edd38200d2640fe0f","d83edd38d83cdffb200d2640fe0f","d83edd38d83cdffc200d2640fe0f","d83edd38d83cdffd200d2640fe0f","d83edd38d83cdffe200d2640fe0f","d83edd38d83cdfff200d2640fe0f"],["d83edd3c"],["d83edd3c200d2642fe0f"],["d83edd3c200d2640fe0f"],["d83edd3d","d83edd3dd83cdffb","d83edd3dd83cdffc","d83edd3dd83cdffd","d83edd3dd83cdffe","d83edd3dd83cdfff"],["d83edd3d200d2642fe0f","d83edd3dd83cdffb200d2642fe0f","d83edd3dd83cdffc200d2642fe0f","d83edd3dd83cdffd200d2642fe0f","d83edd3dd83cdffe200d2642fe0f","d83edd3dd83cdfff200d2642fe0f"],["d83edd3d200d2640fe0f","d83edd3dd83cdffb200d2640fe0f","d83edd3dd83cdffc200d2640fe0f","d83edd3dd83cdffd200d2640fe0f","d83edd3dd83cdffe200d2640fe0f","d83edd3dd83cdfff200d2640fe0f"],["d83edd3e","d83edd3ed83cdffb","d83edd3ed83cdffc","d83edd3ed83cdffd","d83edd3ed83cdffe","d83edd3ed83cdfff"]],"People_8":[["d83edd3e200d2642fe0f","d83edd3ed83cdffb200d2642fe0f","d83edd3ed83cdffc200d2642fe0f","d83edd3ed83cdffd200d2642fe0f","d83edd3ed83cdffe200d2642fe0f","d83edd3ed83cdfff200d2642fe0f"],["d83edd3e200d2640fe0f","d83edd3ed83cdffb200d2640fe0f","d83edd3ed83cdffc200d2640fe0f","d83edd3ed83cdffd200d2640fe0f","d83edd3ed83cdffe200d2640fe0f","d83edd3ed83cdfff200d2640fe0f"],["d83edd39","d83edd39d83cdffb","d83edd39d83cdffc","d83edd39d83cdffd","d83edd39d83cdffe","d83edd39d83cdfff"],["d83edd39200d2642fe0f","d83edd39d83cdffb200d2642fe0f","d83edd39d83cdffc200d2642fe0f","d83edd39d83cdffd200d2642fe0f","d83edd39d83cdffe200d2642fe0f","d83edd39d83cdfff200d2642fe0f"],["d83edd39200d2640fe0f","d83edd39d83cdffb200d2640fe0f","d83edd39d83cdffc200d2640fe0f","d83edd39d83cdffd200d2640fe0f","d83edd39d83cdffe200d2640fe0f","d83edd39d83cdfff200d2640fe0f"],["d83eddd8","d83eddd8d83cdffb","d83eddd8d83cdffc","d83eddd8d83cdffd","d83eddd8d83cdffe","d83eddd8d83cdfff"],["d83eddd8200d2642fe0f","d83eddd8d83cdffb200d2642fe0f","d83eddd8d83cdffc200d2642fe0f","d83eddd8d83cdffd200d2642fe0f","d83eddd8d83cdffe200d2642fe0f","d83eddd8d83cdfff200d2642fe0f"],["d83eddd8200d2640fe0f","d83eddd8d83cdffb200d2640fe0f","d83eddd8d83cdffc200d2640fe0f","d83eddd8d83cdffd200d2640fe0f","d83eddd8d83cdffe200d2640fe0f","d83eddd8d83cdfff200d2640fe0f"],["d83ddec0","d83ddec0d83cdffb","d83ddec0d83cdffc","d83ddec0d83cdffd","d83ddec0d83cdffe","d83ddec0d83cdfff"],["d83ddecc","d83ddeccd83cdffb","d83ddeccd83cdffc","d83ddeccd83cdffd","d83ddeccd83cdffe","d83ddeccd83cdfff"],["d83eddd1200dd83edd1d200dd83eddd1","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdffb200dd83edd1d200dd83eddd1d83cdfff","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdffc200dd83edd1d200dd83eddd1d83cdfff","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdffd200dd83edd1d200dd83eddd1d83cdfff","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdffe200dd83edd1d200dd83eddd1d83cdfff","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdffb","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdffc","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdffd","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdffe","d83eddd1d83cdfff200dd83edd1d200dd83eddd1d83cdfff"],["d83ddc6d","d83ddc6dd83cdffb","d83ddc6dd83cdffc","d83ddc6dd83cdffd","d83ddc6dd83cdffe","d83ddc6dd83cdfff","d83ddc69d83cdffb200dd83edd1d200dd83ddc69d83cdffc","d83ddc69d83cdffb200dd83edd1d200dd83ddc69d83cdffd","d83ddc69d83cdffb200dd83edd1d200dd83ddc69d83cdffe","d83ddc69d83cdffb200dd83edd1d200dd83ddc69d83cdfff","d83ddc69d83cdffc200dd83edd1d200dd83ddc69d83cdffb","d83ddc69d83cdffc200dd83edd1d200dd83ddc69d83cdffd","d83ddc69d83cdffc200dd83edd1d200dd83ddc69d83cdffe","d83ddc69d83cdffc200dd83edd1d200dd83ddc69d83cdfff","d83ddc69d83cdffd200dd83edd1d200dd83ddc69d83cdffb","d83ddc69d83cdffd200dd83edd1d200dd83ddc69d83cdffc","d83ddc69d83cdffd200dd83edd1d200dd83ddc69d83cdffe","d83ddc69d83cdffd200dd83edd1d200dd83ddc69d83cdfff","d83ddc69d83cdffe200dd83edd1d200dd83ddc69d83cdffb","d83ddc69d83cdffe200dd83edd1d200dd83ddc69d83cdffc","d83ddc69d83cdffe200dd83edd1d200dd83ddc69d83cdffd","d83ddc69d83cdffe200dd83edd1d200dd83ddc69d83cdfff","d83ddc69d83cdfff200dd83edd1d200dd83ddc69d83cdffb","d83ddc69d83cdfff200dd83edd1d200dd83ddc69d83cdffc","d83ddc69d83cdfff200dd83edd1d200dd83ddc69d83cdffd","d83ddc69d83cdfff200dd83edd1d200dd83ddc69d83cdffe"],["d83ddc6b","d83ddc6bd83cdffb","d83ddc6bd83cdffc","d83ddc6bd83cdffd","d83ddc6bd83cdffe","d83ddc6bd83cdfff","d83ddc69d83cdffb200dd83edd1d200dd83ddc68d83cdffc","d83ddc69d83cdffb200dd83edd1d200dd83ddc68d83cdffd","d83ddc69d83cdffb200dd83edd1d200dd83ddc68d83cdffe","d83ddc69d83cdffb200dd83edd1d200dd83ddc68d83cdfff","d83ddc69d83cdffc200dd83edd1d200dd83ddc68d83cdffb","d83ddc69d83cdffc200dd83edd1d200dd83ddc68d83cdffd","d83ddc69d83cdffc200dd83edd1d200dd83ddc68d83cdffe","d83ddc69d83cdffc200dd83edd1d200dd83ddc68d83cdfff","d83ddc69d83cdffd200dd83edd1d200dd83ddc68d83cdffb","d83ddc69d83cdffd200dd83edd1d200dd83ddc68d83cdffc","d83ddc69d83cdffd200dd83edd1d200dd83ddc68d83cdffe","d83ddc69d83cdffd200dd83edd1d200dd83ddc68d83cdfff","d83ddc69d83cdffe200dd83edd1d200dd83ddc68d83cdffb","d83ddc69d83cdffe200dd83edd1d200dd83ddc68d83cdffc","d83ddc69d83cdffe200dd83edd1d200dd83ddc68d83cdffd","d83ddc69d83cdffe200dd83edd1d200dd83ddc68d83cdfff","d83ddc69d83cdfff200dd83edd1d200dd83ddc68d83cdffb","d83ddc69d83cdfff200dd83edd1d200dd83ddc68d83cdffc","d83ddc69d83cdfff200dd83edd1d200dd83ddc68d83cdffd","d83ddc69d83cdfff200dd83edd1d200dd83ddc68d83cdffe"],["d83ddc6c","d83ddc6cd83cdffb","d83ddc6cd83cdffc","d83ddc6cd83cdffd","d83ddc6cd83cdffe","d83ddc6cd83cdfff","d83ddc68d83cdffb200dd83edd1d200dd83ddc68d83cdffc","d83ddc68d83cdffb200dd83edd1d200dd83ddc68d83cdffd","d83ddc68d83cdffb200dd83edd1d200dd83ddc68d83cdffe","d83ddc68d83cdffb200dd83edd1d200dd83ddc68d83cdfff","d83ddc68d83cdffc200dd83edd1d200dd83ddc68d83cdffb","d83ddc68d83cdffc200dd83edd1d200dd83ddc68d83cdffd","d83ddc68d83cdffc200dd83edd1d200dd83ddc68d83cdffe","d83ddc68d83cdffc200dd83edd1d200dd83ddc68d83cdfff","d83ddc68d83cdffd200dd83edd1d200dd83ddc68d83cdffb","d83ddc68d83cdffd200dd83edd1d200dd83ddc68d83cdffc","d83ddc68d83cdffd200dd83edd1d200dd83ddc68d83cdffe","d83ddc68d83cdffd200dd83edd1d200dd83ddc68d83cdfff","d83ddc68d83cdffe200dd83edd1d200dd83ddc68d83cdffb","d83ddc68d83cdffe200dd83edd1d200dd83ddc68d83cdffc","d83ddc68d83cdffe200dd83edd1d200dd83ddc68d83cdffd","d83ddc68d83cdffe200dd83edd1d200dd83ddc68d83cdfff","d83ddc68d83cdfff200dd83edd1d200dd83ddc68d83cdffb","d83ddc68d83cdfff200dd83edd1d200dd83ddc68d83cdffc","d83ddc68d83cdfff200dd83edd1d200dd83ddc68d83cdffd","d83ddc68d83cdfff200dd83edd1d200dd83ddc68d83cdffe"],["d83ddc8f","d83ddc8fd83cdffb","d83ddc8fd83cdffc","d83ddc8fd83cdffd","d83ddc8fd83cdffe","d83ddc8fd83cdfff","d83eddd1d83cdffb200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffc","d83eddd1d83cdffb200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffd","d83eddd1d83cdffb200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffe","d83eddd1d83cdffb200d2764fe0f200dd83ddc8b200dd83eddd1d83cdfff","d83eddd1d83cdffc200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffb","d83eddd1d83cdffc200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffd","d83eddd1d83cdffc200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffe","d83eddd1d83cdffc200d2764fe0f200dd83ddc8b200dd83eddd1d83cdfff","d83eddd1d83cdffd200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffb","d83eddd1d83cdffd200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffc","d83eddd1d83cdffd200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffe","d83eddd1d83cdffd200d2764fe0f200dd83ddc8b200dd83eddd1d83cdfff","d83eddd1d83cdffe200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffb","d83eddd1d83cdffe200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffc","d83eddd1d83cdffe200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffd","d83eddd1d83cdffe200d2764fe0f200dd83ddc8b200dd83eddd1d83cdfff","d83eddd1d83cdfff200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffb","d83eddd1d83cdfff200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffc","d83eddd1d83cdfff200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffd","d83eddd1d83cdfff200d2764fe0f200dd83ddc8b200dd83eddd1d83cdffe"],["d83ddc69200d2764fe0f200dd83ddc8b200dd83ddc68","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff"]],"People_9":[["d83ddc68200d2764fe0f200dd83ddc8b200dd83ddc68","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffb","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffc","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffd","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdffe","d83ddc68d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc68d83cdfff"],["d83ddc69200d2764fe0f200dd83ddc8b200dd83ddc69","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdffb200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdffc200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdffd200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdffe200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffb","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffc","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffd","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdffe","d83ddc69d83cdfff200d2764fe0f200dd83ddc8b200dd83ddc69d83cdfff"],["d83ddc91","d83ddc91d83cdffb","d83ddc91d83cdffc","d83ddc91d83cdffd","d83ddc91d83cdffe","d83ddc91d83cdfff","d83eddd1d83cdffb200d2764fe0f200dd83eddd1d83cdffc","d83eddd1d83cdffb200d2764fe0f200dd83eddd1d83cdffd","d83eddd1d83cdffb200d2764fe0f200dd83eddd1d83cdffe","d83eddd1d83cdffb200d2764fe0f200dd83eddd1d83cdfff","d83eddd1d83cdffc200d2764fe0f200dd83eddd1d83cdffb","d83eddd1d83cdffc200d2764fe0f200dd83eddd1d83cdffd","d83eddd1d83cdffc200d2764fe0f200dd83eddd1d83cdffe","d83eddd1d83cdffc200d2764fe0f200dd83eddd1d83cdfff","d83eddd1d83cdffd200d2764fe0f200dd83eddd1d83cdffb","d83eddd1d83cdffd200d2764fe0f200dd83eddd1d83cdffc","d83eddd1d83cdffd200d2764fe0f200dd83eddd1d83cdffe","d83eddd1d83cdffd200d2764fe0f200dd83eddd1d83cdfff","d83eddd1d83cdffe200d2764fe0f200dd83eddd1d83cdffb","d83eddd1d83cdffe200d2764fe0f200dd83eddd1d83cdffc","d83eddd1d83cdffe200d2764fe0f200dd83eddd1d83cdffd","d83eddd1d83cdffe200d2764fe0f200dd83eddd1d83cdfff","d83eddd1d83cdfff200d2764fe0f200dd83eddd1d83cdffb","d83eddd1d83cdfff200d2764fe0f200dd83eddd1d83cdffc","d83eddd1d83cdfff200d2764fe0f200dd83eddd1d83cdffd","d83eddd1d83cdfff200d2764fe0f200dd83eddd1d83cdffe"],["d83ddc69200d2764fe0f200dd83ddc68","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdffb200d2764fe0f200dd83ddc68d83cdfff","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdffc200d2764fe0f200dd83ddc68d83cdfff","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdffd200d2764fe0f200dd83ddc68d83cdfff","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdffe200d2764fe0f200dd83ddc68d83cdfff","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdffb","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdffc","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdffd","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdffe","d83ddc69d83cdfff200d2764fe0f200dd83ddc68d83cdfff"],["d83ddc68200d2764fe0f200dd83ddc68","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdffb200d2764fe0f200dd83ddc68d83cdfff","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdffc200d2764fe0f200dd83ddc68d83cdfff","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdffd200d2764fe0f200dd83ddc68d83cdfff","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdffe200d2764fe0f200dd83ddc68d83cdfff","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdffb","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdffc","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdffd","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdffe","d83ddc68d83cdfff200d2764fe0f200dd83ddc68d83cdfff"],["d83ddc69200d2764fe0f200dd83ddc69","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdffb200d2764fe0f200dd83ddc69d83cdfff","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdffc200d2764fe0f200dd83ddc69d83cdfff","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdffd200d2764fe0f200dd83ddc69d83cdfff","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdffe200d2764fe0f200dd83ddc69d83cdfff","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdffb","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdffc","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdffd","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdffe","d83ddc69d83cdfff200d2764fe0f200dd83ddc69d83cdfff"],["d83ddc68200dd83ddc69200dd83ddc66"],["d83ddc68200dd83ddc69200dd83ddc67"],["d83ddc68200dd83ddc69200dd83ddc67200dd83ddc66"],["d83ddc68200dd83ddc69200dd83ddc66200dd83ddc66"],["d83ddc68200dd83ddc69200dd83ddc67200dd83ddc67"],["d83ddc68200dd83ddc68200dd83ddc66"],["d83ddc68200dd83ddc68200dd83ddc67"],["d83ddc68200dd83ddc68200dd83ddc67200dd83ddc66"],["d83ddc68200dd83ddc68200dd83ddc66200dd83ddc66"],["d83ddc68200dd83ddc68200dd83ddc67200dd83ddc67"],["d83ddc69200dd83ddc69200dd83ddc66"],["d83ddc69200dd83ddc69200dd83ddc67"],["d83ddc69200dd83ddc69200dd83ddc67200dd83ddc66"],["d83ddc69200dd83ddc69200dd83ddc66200dd83ddc66"],["d83ddc69200dd83ddc69200dd83ddc67200dd83ddc67"],["d83ddc68200dd83ddc66"],["d83ddc68200dd83ddc66200dd83ddc66"],["d83ddc68200dd83ddc67"],["d83ddc68200dd83ddc67200dd83ddc66"],["d83ddc68200dd83ddc67200dd83ddc67"],["d83ddc69200dd83ddc66"],["d83ddc69200dd83ddc66200dd83ddc66"],["d83ddc69200dd83ddc67"],["d83ddc69200dd83ddc67200dd83ddc66"],["d83ddc69200dd83ddc67200dd83ddc67"],["d83ddde3fe0f"],["d83ddc64"],["d83ddc65"],["d83edec2"],["d83ddc6a"],["d83eddd1200dd83eddd1200dd83eddd2"],["d83eddd1200dd83eddd1200dd83eddd2200dd83eddd2"],["d83eddd1200dd83eddd2"],["d83eddd1200dd83eddd2200dd83eddd2"],["d83ddc63"]],"Nature":[["d83ddc35"],["d83ddc12"],["d83edd8d"],["d83edda7"],["d83ddc36"],["d83ddc15"],["d83eddae"],["d83ddc15200dd83eddba"],["d83ddc29"],["d83ddc3a"],["d83edd8a"],["d83edd9d"],["d83ddc31"],["d83ddc08"],["d83ddc08200d2b1b"],["d83edd81"],["d83ddc2f"],["d83ddc05"],["d83ddc06"],["d83ddc34"],["d83edece"],["d83edecf"],["d83ddc0e"],["d83edd84"],["d83edd93"],["d83edd8c"],["d83eddac"],["d83ddc2e"],["d83ddc02"],["d83ddc03"],["d83ddc04"],["d83ddc37"],["d83ddc16"],["d83ddc17"],["d83ddc3d"],["d83ddc0f"],["d83ddc11"],["d83ddc10"],["d83ddc2a"],["d83ddc2b"],["d83edd99"],["d83edd92"],["d83ddc18"],["d83edda3"],["d83edd8f"],["d83edd9b"],["d83ddc2d"],["d83ddc01"],["d83ddc00"],["d83ddc39"],["d83ddc30"],["d83ddc07"],["d83ddc3ffe0f"],["d83eddab"],["d83edd94"],["d83edd87"],["d83ddc3b"],["d83ddc3b200d2744fe0f"],["d83ddc28"],["d83ddc3c"],["d83edda5"],["d83edda6"],["d83edda8"],["d83edd98"],["d83edda1"],["d83ddc3e"],["d83edd83"],["d83ddc14"],["d83ddc13"],["d83ddc23"],["d83ddc24"],["d83ddc25"],["d83ddc26"],["d83ddc27"],["d83ddd4afe0f"],["d83edd85"],["d83edd86"],["d83edda2"],["d83edd89"],["d83edda4"],["d83edeb6"],["d83edda9"],["d83edd9a"],["d83edd9c"],["d83edebd"],["d83ddc26200d2b1b"],["d83edebf"],["d83ddc26200dd83ddd25"],["d83ddc38"],["d83ddc0a"],["d83ddc22"],["d83edd8e"],["d83ddc0d"],["d83ddc32"],["d83ddc09"],["d83edd95"],["d83edd96"],["d83ddc33"],["d83ddc0b"],["d83ddc2c"],["d83eddad"],["d83ddc1f"],["d83ddc20"],["d83ddc21"],["d83edd88"],["d83ddc19"],["d83ddc1a"],["d83edeb8"],["d83edebc"],["d83ddc0c"],["d83edd8b"],["d83ddc1b"],["d83ddc1c"],["d83ddc1d"],["d83edeb2"],["d83ddc1e"],["d83edd97"],["d83edeb3"],["d83ddd77fe0f"],["d83ddd78fe0f"],["d83edd82"],["d83edd9f"],["d83edeb0"],["d83edeb1"],["d83edda0"],["d83ddc90"],["d83cdf38"],["d83ddcae"],["d83edeb7"],["d83cdff5fe0f"],["d83cdf39"],["d83edd40"],["d83cdf3a"],["d83cdf3b"],["d83cdf3c"],["d83cdf37"],["d83edebb"],["d83cdf31"],["d83edeb4"],["d83cdf32"],["d83cdf33"],["d83cdf34"],["d83cdf35"],["d83cdf3e"],["d83cdf3f"],["2618fe0f"],["d83cdf40"],["d83cdf41"],["d83cdf42"],["d83cdf43"],["d83edeb9"],["d83edeba"],["d83cdf44"]],"Foods":[["d83cdf47"],["d83cdf48"],["d83cdf49"],["d83cdf4a"],["d83cdf4b"],["d83cdf4b200dd83ddfe9"],["d83cdf4c"],["d83cdf4d"],["d83edd6d"],["d83cdf4e"],["d83cdf4f"],["d83cdf50"],["d83cdf51"],["d83cdf52"],["d83cdf53"],["d83eded0"],["d83edd5d"],["d83cdf45"],["d83eded2"],["d83edd65"],["d83edd51"],["d83cdf46"],["d83edd54"],["d83edd55"],["d83cdf3d"],["d83cdf36fe0f"],["d83eded1"],["d83edd52"],["d83edd6c"],["d83edd66"],["d83eddc4"],["d83eddc5"],["d83edd5c"],["d83eded8"],["d83cdf30"],["d83ededa"],["d83ededb"],["d83cdf44200dd83ddfeb"],["d83cdf5e"],["d83edd50"],["d83edd56"],["d83eded3"],["d83edd68"],["d83edd6f"],["d83edd5e"],["d83eddc7"],["d83eddc0"],["d83cdf56"],["d83cdf57"],["d83edd69"],["d83edd53"],["d83cdf54"],["d83cdf5f"],["d83cdf55"],["d83cdf2d"],["d83edd6a"],["d83cdf2e"],["d83cdf2f"],["d83eded4"],["d83edd59"],["d83eddc6"],["d83edd5a"],["d83cdf73"],["d83edd58"],["d83cdf72"],["d83eded5"],["d83edd63"],["d83edd57"],["d83cdf7f"],["d83eddc8"],["d83eddc2"],["d83edd6b"],["d83cdf71"],["d83cdf58"],["d83cdf59"],["d83cdf5a"],["d83cdf5b"],["d83cdf5c"],["d83cdf5d"],["d83cdf60"],["d83cdf62"],["d83cdf63"],["d83cdf64"],["d83cdf65"],["d83edd6e"],["d83cdf61"],["d83edd5f"],["d83edd60"],["d83edd61"],["d83edd80"],["d83edd9e"],["d83edd90"],["d83edd91"],["d83eddaa"],["d83cdf66"],["d83cdf67"],["d83cdf68"],["d83cdf69"],["d83cdf6a"],["d83cdf82"],["d83cdf70"],["d83eddc1"],["d83edd67"],["d83cdf6b"],["d83cdf6c"],["d83cdf6d"],["d83cdf6e"],["d83cdf6f"],["d83cdf7c"],["d83edd5b"],["2615"],["d83eded6"],["d83cdf75"],["d83cdf76"],["d83cdf7e"],["d83cdf77"],["d83cdf78"],["d83cdf79"],["d83cdf7a"],["d83cdf7b"],["d83edd42"],["d83edd43"],["d83eded7"],["d83edd64"],["d83eddcb"],["d83eddc3"],["d83eddc9"],["d83eddca"],["d83edd62"],["d83cdf7dfe0f"],["d83cdf74"],["d83edd44"],["d83ddd2a"],["d83eded9"],["d83cdffa"]],"Places":[["d83cdf0d"],["d83cdf0e"],["d83cdf0f"],["d83cdf10"],["d83dddfafe0f"],["d83dddfe"],["d83edded"],["d83cdfd4fe0f"],["26f0fe0f"],["d83cdf0b"],["d83dddfb"],["d83cdfd5fe0f"],["d83cdfd6fe0f"],["d83cdfdcfe0f"],["d83cdfddfe0f"],["d83cdfdefe0f"],["d83cdfdffe0f"],["d83cdfdbfe0f"],["d83cdfd7fe0f"],["d83eddf1"],["d83edea8"],["d83edeb5"],["d83dded6"],["d83cdfd8fe0f"],["d83cdfdafe0f"],["d83cdfe0"],["d83cdfe1"],["d83cdfe2"],["d83cdfe3"],["d83cdfe4"],["d83cdfe5"],["d83cdfe6"],["d83cdfe8"],["d83cdfe9"],["d83cdfea"],["d83cdfeb"],["d83cdfec"],["d83cdfed"],["d83cdfef"],["d83cdff0"],["d83ddc92"],["d83dddfc"],["d83dddfd"],["26ea"],["d83ddd4c"],["d83dded5"],["d83ddd4d"],["26e9fe0f"],["d83ddd4b"],["26f2"],["26fa"],["d83cdf01"],["d83cdf03"],["d83cdfd9fe0f"],["d83cdf04"],["d83cdf05"],["d83cdf06"],["d83cdf07"],["d83cdf09"],["2668fe0f"],["d83cdfa0"],["d83ddedd"],["d83cdfa1"],["d83cdfa2"],["d83ddc88"],["d83cdfaa"],["d83dde82"],["d83dde83"],["d83dde84"],["d83dde85"],["d83dde86"],["d83dde87"],["d83dde88"],["d83dde89"],["d83dde8a"],["d83dde9d"],["d83dde9e"],["d83dde8b"],["d83dde8c"],["d83dde8d"],["d83dde8e"],["d83dde90"],["d83dde91"],["d83dde92"],["d83dde93"],["d83dde94"],["d83dde95"],["d83dde96"],["d83dde97"],["d83dde98"],["d83dde99"],["d83ddefb"],["d83dde9a"],["d83dde9b"],["d83dde9c"],["d83cdfcefe0f"],["d83cdfcdfe0f"],["d83ddef5"],["d83eddbd"],["d83eddbc"],["d83ddefa"],["d83ddeb2"],["d83ddef4"],["d83ddef9"],["d83ddefc"],["d83dde8f"],["d83ddee3fe0f"],["d83ddee4fe0f"],["d83ddee2fe0f"],["26fd"],["d83ddede"],["d83ddea8"],["d83ddea5"],["d83ddea6"],["d83dded1"],["d83ddea7"],["2693"],["d83ddedf"],["26f5"],["d83ddef6"],["d83ddea4"],["d83ddef3fe0f"],["26f4fe0f"],["d83ddee5fe0f"],["d83ddea2"],["2708fe0f"],["d83ddee9fe0f"],["d83ddeeb"],["d83ddeec"],["d83ede82"],["d83ddcba"],["d83dde81"],["d83dde9f"],["d83ddea0"],["d83ddea1"],["d83ddef0fe0f"],["d83dde80"],["d83ddef8"],["d83ddecefe0f"],["d83eddf3"],["231b"],["23f3"],["231a"],["23f0"],["23f1fe0f"],["23f2fe0f"],["d83ddd70fe0f"],["d83ddd5b"],["d83ddd67"],["d83ddd50"],["d83ddd5c"],["d83ddd51"],["d83ddd5d"],["d83ddd52"],["d83ddd5e"],["d83ddd53"],["d83ddd5f"],["d83ddd54"],["d83ddd60"],["d83ddd55"],["d83ddd61"],["d83ddd56"],["d83ddd62"],["d83ddd57"],["d83ddd63"],["d83ddd58"],["d83ddd64"],["d83ddd59"],["d83ddd65"],["d83ddd5a"],["d83ddd66"],["d83cdf11"],["d83cdf12"],["d83cdf13"],["d83cdf14"],["d83cdf15"],["d83cdf16"],["d83cdf17"],["d83cdf18"],["d83cdf19"],["d83cdf1a"],["d83cdf1b"],["d83cdf1c"],["d83cdf21fe0f"],["2600fe0f"],["d83cdf1d"],["d83cdf1e"],["d83ede90"],["2b50"],["d83cdf1f"],["d83cdf20"],["d83cdf0c"],["2601fe0f"],["26c5"],["26c8fe0f"],["d83cdf24fe0f"],["d83cdf25fe0f"],["d83cdf26fe0f"],["d83cdf27fe0f"],["d83cdf28fe0f"],["d83cdf29fe0f"],["d83cdf2afe0f"],["d83cdf2bfe0f"],["d83cdf2cfe0f"],["d83cdf00"],["d83cdf08"],["d83cdf02"],["2602fe0f"],["2614"],["26f1fe0f"],["26a1"],["2744fe0f"],["2603fe0f"],["26c4"],["2604fe0f"],["d83ddd25"],["d83ddca7"],["d83cdf0a"]],"Activity":[["d83cdf83"],["d83cdf84"],["d83cdf86"],["d83cdf87"],["d83edde8"],["2728"],["d83cdf88"],["d83cdf89"],["d83cdf8a"],["d83cdf8b"],["d83cdf8d"],["d83cdf8e"],["d83cdf8f"],["d83cdf90"],["d83cdf91"],["d83edde7"],["d83cdf80"],["d83cdf81"],["d83cdf97fe0f"],["d83cdf9ffe0f"],["d83cdfab"],["d83cdf96fe0f"],["d83cdfc6"],["d83cdfc5"],["d83edd47"],["d83edd48"],["d83edd49"],["26bd"],["26be"],["d83edd4e"],["d83cdfc0"],["d83cdfd0"],["d83cdfc8"],["d83cdfc9"],["d83cdfbe"],["d83edd4f"],["d83cdfb3"],["d83cdfcf"],["d83cdfd1"],["d83cdfd2"],["d83edd4d"],["d83cdfd3"],["d83cdff8"],["d83edd4a"],["d83edd4b"],["d83edd45"],["26f3"],["26f8fe0f"],["d83cdfa3"],["d83edd3f"],["d83cdfbd"],["d83cdfbf"],["d83ddef7"],["d83edd4c"],["d83cdfaf"],["d83ede80"],["d83ede81"],["d83ddd2b"],["d83cdfb1"],["d83ddd2e"],["d83ede84"],["d83cdfae"],["d83ddd79fe0f"],["d83cdfb0"],["d83cdfb2"],["d83edde9"],["d83eddf8"],["d83ede85"],["d83edea9"],["d83ede86"],["2660fe0f"],["2665fe0f"],["2666fe0f"],["2663fe0f"],["265ffe0f"],["d83cdccf"],["d83cdc04"],["d83cdfb4"],["d83cdfad"],["d83dddbcfe0f"],["d83cdfa8"],["d83eddf5"],["d83edea1"],["d83eddf6"],["d83edea2"]],"Objects_0":[["d83ddc53"],["d83ddd76fe0f"],["d83edd7d"],["d83edd7c"],["d83eddba"],["d83ddc54"],["d83ddc55"],["d83ddc56"],["d83edde3"],["d83edde4"],["d83edde5"],["d83edde6"],["d83ddc57"],["d83ddc58"],["d83edd7b"],["d83ede71"],["d83ede72"],["d83ede73"],["d83ddc59"],["d83ddc5a"],["d83edead"],["d83ddc5b"],["d83ddc5c"],["d83ddc5d"],["d83ddecdfe0f"],["d83cdf92"],["d83ede74"],["d83ddc5e"],["d83ddc5f"],["d83edd7e"],["d83edd7f"],["d83ddc60"],["d83ddc61"],["d83ede70"],["d83ddc62"],["d83edeae"],["d83ddc51"],["d83ddc52"],["d83cdfa9"],["d83cdf93"],["d83edde2"],["d83ede96"],["26d1fe0f"],["d83ddcff"],["d83ddc84"],["d83ddc8d"],["d83ddc8e"],["d83ddd07"],["d83ddd08"],["d83ddd09"],["d83ddd0a"],["d83ddce2"],["d83ddce3"],["d83ddcef"],["d83ddd14"],["d83ddd15"],["d83cdfbc"],["d83cdfb5"],["d83cdfb6"],["d83cdf99fe0f"],["d83cdf9afe0f"],["d83cdf9bfe0f"],["d83cdfa4"],["d83cdfa7"],["d83ddcfb"],["d83cdfb7"],["d83ede97"],["d83cdfb8"],["d83cdfb9"],["d83cdfba"],["d83cdfbb"],["d83ede95"],["d83edd41"],["d83ede98"],["d83ede87"],["d83ede88"],["d83ddcf1"],["d83ddcf2"],["260efe0f"],["d83ddcde"],["d83ddcdf"],["d83ddce0"],["d83ddd0b"],["d83edeab"],["d83ddd0c"],["d83ddcbb"],["d83ddda5fe0f"],["d83ddda8fe0f"],["2328fe0f"],["d83dddb1fe0f"],["d83dddb2fe0f"],["d83ddcbd"],["d83ddcbe"],["d83ddcbf"],["d83ddcc0"],["d83eddee"],["d83cdfa5"],["d83cdf9efe0f"],["d83ddcfdfe0f"],["d83cdfac"],["d83ddcfa"],["d83ddcf7"],["d83ddcf8"],["d83ddcf9"],["d83ddcfc"],["d83ddd0d"],["d83ddd0e"],["d83ddd6ffe0f"],["d83ddca1"],["d83ddd26"],["d83cdfee"],["d83ede94"],["d83ddcd4"],["d83ddcd5"],["d83ddcd6"],["d83ddcd7"],["d83ddcd8"],["d83ddcd9"],["d83ddcda"],["d83ddcd3"],["d83ddcd2"],["d83ddcc3"],["d83ddcdc"],["d83ddcc4"],["d83ddcf0"],["d83ddddefe0f"],["d83ddcd1"],["d83ddd16"],["d83cdff7fe0f"],["d83ddcb0"],["d83ede99"]],"Objects_1":[["d83ddcb4"],["d83ddcb5"],["d83ddcb6"],["d83ddcb7"],["d83ddcb8"],["d83ddcb3"],["d83eddfe"],["d83ddcb9"],["2709fe0f"],["d83ddce7"],["d83ddce8"],["d83ddce9"],["d83ddce4"],["d83ddce5"],["d83ddce6"],["d83ddceb"],["d83ddcea"],["d83ddcec"],["d83ddced"],["d83ddcee"],["d83dddf3fe0f"],["270ffe0f"],["2712fe0f"],["d83ddd8bfe0f"],["d83ddd8afe0f"],["d83ddd8cfe0f"],["d83ddd8dfe0f"],["d83ddcdd"],["d83ddcbc"],["d83ddcc1"],["d83ddcc2"],["d83dddc2fe0f"],["d83ddcc5"],["d83ddcc6"],["d83dddd2fe0f"],["d83dddd3fe0f"],["d83ddcc7"],["d83ddcc8"],["d83ddcc9"],["d83ddcca"],["d83ddccb"],["d83ddccc"],["d83ddccd"],["d83ddcce"],["d83ddd87fe0f"],["d83ddccf"],["d83ddcd0"],["2702fe0f"],["d83dddc3fe0f"],["d83dddc4fe0f"],["d83dddd1fe0f"],["d83ddd12"],["d83ddd13"],["d83ddd0f"],["d83ddd10"],["d83ddd11"],["d83dddddfe0f"],["d83ddd28"],["d83ede93"],["26cffe0f"],["2692fe0f"],["d83ddee0fe0f"],["d83ddde1fe0f"],["2694fe0f"],["d83ddca3"],["d83ede83"],["d83cdff9"],["d83ddee1fe0f"],["d83ede9a"],["d83ddd27"],["d83ede9b"],["d83ddd29"],["2699fe0f"],["d83ddddcfe0f"],["2696fe0f"],["d83eddaf"],["d83ddd17"],["26d3fe0f200dd83ddca5"],["26d3fe0f"],["d83ede9d"],["d83eddf0"],["d83eddf2"],["d83ede9c"],["2697fe0f"],["d83eddea"],["d83eddeb"],["d83eddec"],["d83ddd2c"],["d83ddd2d"],["d83ddce1"],["d83ddc89"],["d83ede78"],["d83ddc8a"],["d83ede79"],["d83ede7c"],["d83ede7a"],["d83ede7b"],["d83ddeaa"],["d83dded7"],["d83ede9e"],["d83ede9f"],["d83ddecffe0f"],["d83ddecbfe0f"],["d83ede91"],["d83ddebd"],["d83edea0"],["d83ddebf"],["d83ddec1"],["d83edea4"],["d83ede92"],["d83eddf4"],["d83eddf7"],["d83eddf9"],["d83eddfa"],["d83eddfb"],["d83edea3"],["d83eddfc"],["d83edee7"],["d83edea5"],["d83eddfd"],["d83eddef"],["d83dded2"],["d83ddeac"],["26b0fe0f"],["d83edea6"],["26b1fe0f"],["d83eddff"],["d83edeac"],["d83dddff"],["d83edea7"],["d83edeaa"]],"Symbols":[["d83cdfe7"],["d83ddeae"],["d83ddeb0"],["267f"],["d83ddeb9"],["d83ddeba"],["d83ddebb"],["d83ddebc"],["d83ddebe"],["d83ddec2"],["d83ddec3"],["d83ddec4"],["d83ddec5"],["26a0fe0f"],["d83ddeb8"],["26d4"],["d83ddeab"],["d83ddeb3"],["d83ddead"],["d83ddeaf"],["d83ddeb1"],["d83ddeb7"],["d83ddcf5"],["d83ddd1e"],["2622fe0f"],["2623fe0f"],["2b06fe0f"],["2197fe0f"],["27a1fe0f"],["2198fe0f"],["2b07fe0f"],["2199fe0f"],["2b05fe0f"],["2196fe0f"],["2195fe0f"],["2194fe0f"],["21a9fe0f"],["21aafe0f"],["2934fe0f"],["2935fe0f"],["d83ddd03"],["d83ddd04"],["d83ddd19"],["d83ddd1a"],["d83ddd1b"],["d83ddd1c"],["d83ddd1d"],["d83dded0"],["269bfe0f"],["d83ddd49fe0f"],["2721fe0f"],["2638fe0f"],["262ffe0f"],["271dfe0f"],["2626fe0f"],["262afe0f"],["262efe0f"],["d83ddd4e"],["d83ddd2f"],["d83edeaf"],["2648"],["2649"],["264a"],["264b"],["264c"],["264d"],["264e"],["264f"],["2650"],["2651"],["2652"],["2653"],["26ce"],["d83ddd00"],["d83ddd01"],["d83ddd02"],["25b6fe0f"],["23e9"],["23edfe0f"],["23effe0f"],["25c0fe0f"],["23ea"],["23eefe0f"],["d83ddd3c"],["23eb"],["d83ddd3d"],["23ec"],["23f8fe0f"],["23f9fe0f"],["23fafe0f"],["23cffe0f"],["d83cdfa6"],["d83ddd05"],["d83ddd06"],["d83ddcf6"],["d83ddedc"],["d83ddcf3"],["d83ddcf4"],["26a7fe0f"],["2716fe0f"],["2795"],["2796"],["2797"],["d83ddff0"],["267efe0f"],["203cfe0f"],["2049fe0f"],["2753"],["2754"],["2755"],["2757"],["3030fe0f"],["d83ddcb1"],["d83ddcb2"],["267bfe0f"],["269cfe0f"],["d83ddd31"],["d83ddcdb"],["d83ddd30"],["2b55"],["2705"],["2611fe0f"],["2714fe0f"],["274c"],["274e"],["27b0"],["27bf"],["303dfe0f"],["2733fe0f"],["2734fe0f"],["2747fe0f"],["00a9fe0f"],["00aefe0f"],["2122fe0f"],["0023fe0f20e3"],["002afe0f20e3"],["0030fe0f20e3"],["0031fe0f20e3"],["0032fe0f20e3"],["0033fe0f20e3"],["0034fe0f20e3"],["0035fe0f20e3"],["0036fe0f20e3"],["0037fe0f20e3"],["0038fe0f20e3"],["0039fe0f20e3"],["d83ddd1f"],["d83ddd20"],["d83ddd21"],["d83ddd22"],["d83ddd23"],["d83ddd24"],["d83cdd70fe0f"],["d83cdd8e"],["d83cdd71fe0f"],["d83cdd91"],["d83cdd92"],["d83cdd93"],["2139fe0f"],["d83cdd94"],["24c2fe0f"],["d83cdd95"],["d83cdd96"],["d83cdd7efe0f"],["d83cdd97"],["d83cdd7ffe0f"],["d83cdd98"],["d83cdd99"],["d83cdd9a"],["d83cde01"],["d83cde02fe0f"],["d83cde37fe0f"],["d83cde36"],["d83cde2f"],["d83cde50"],["d83cde39"],["d83cde1a"],["d83cde32"],["d83cde51"],["d83cde38"],["d83cde34"],["d83cde33"],["3297fe0f"],["3299fe0f"],["d83cde3a"],["d83cde35"],["d83ddd34"],["d83ddfe0"],["d83ddfe1"],["d83ddfe2"],["d83ddd35"],["d83ddfe3"],["d83ddfe4"],["26ab"],["26aa"],["d83ddfe5"],["d83ddfe7"],["d83ddfe8"],["d83ddfe9"],["d83ddfe6"],["d83ddfea"],["d83ddfeb"],["2b1b"],["2b1c"],["25fcfe0f"],["25fbfe0f"],["25fe"],["25fd"],["25aafe0f"],["25abfe0f"],["d83ddd36"],["d83ddd37"],["d83ddd38"],["d83ddd39"],["d83ddd3a"],["d83ddd3b"],["d83ddca0"],["d83ddd18"],["d83ddd33"],["d83ddd32"]],"Flags_0":[["d83cdfc1"],["d83ddea9"],["d83cdf8c"],["d83cdff4"],["d83cdff3fe0f"],["d83cdff3fe0f200dd83cdf08"],["d83cdff3fe0f200d26a7fe0f"],["d83cdff4200d2620fe0f"],["d83cdde6d83cdde8"],["d83cdde6d83cdde9"],["d83cdde6d83cddea"],["d83cdde6d83cddeb"],["d83cdde6d83cddec"],["d83cdde6d83cddee"],["d83cdde6d83cddf1"],["d83cdde6d83cddf2"],["d83cdde6d83cddf4"],["d83cdde6d83cddf6"],["d83cdde6d83cddf7"],["d83cdde6d83cddf8"],["d83cdde6d83cddf9"],["d83cdde6d83cddfa"],["d83cdde6d83cddfc"],["d83cdde6d83cddfd"],["d83cdde6d83cddff"],["d83cdde7d83cdde6"],["d83cdde7d83cdde7"],["d83cdde7d83cdde9"],["d83cdde7d83cddea"],["d83cdde7d83cddeb"],["d83cdde7d83cddec"],["d83cdde7d83cdded"],["d83cdde7d83cddee"],["d83cdde7d83cddef"],["d83cdde7d83cddf1"],["d83cdde7d83cddf2"],["d83cdde7d83cddf3"],["d83cdde7d83cddf4"],["d83cdde7d83cddf6"],["d83cdde7d83cddf7"],["d83cdde7d83cddf8"],["d83cdde7d83cddf9"],["d83cdde7d83cddfb"],["d83cdde7d83cddfc"],["d83cdde7d83cddfe"],["d83cdde7d83cddff"],["d83cdde8d83cdde6"],["d83cdde8d83cdde8"],["d83cdde8d83cdde9"],["d83cdde8d83cddeb"],["d83cdde8d83cddec"],["d83cdde8d83cdded"],["d83cdde8d83cddee"],["d83cdde8d83cddf0"],["d83cdde8d83cddf1"],["d83cdde8d83cddf2"],["d83cdde8d83cddf3"],["d83cdde8d83cddf4"],["d83cdde8d83cddf5"],["d83cdde8d83cddf7"],["d83cdde8d83cddfa"],["d83cdde8d83cddfb"],["d83cdde8d83cddfc"],["d83cdde8d83cddfd"],["d83cdde8d83cddfe"],["d83cdde8d83cddff"],["d83cdde9d83cddea"],["d83cdde9d83cddec"],["d83cdde9d83cddef"],["d83cdde9d83cddf0"],["d83cdde9d83cddf2"],["d83cdde9d83cddf4"],["d83cdde9d83cddff"],["d83cddead83cdde6"],["d83cddead83cdde8"],["d83cddead83cddea"],["d83cddead83cddec"],["d83cddead83cdded"],["d83cddead83cddf7"],["d83cddead83cddf8"],["d83cddead83cddf9"],["d83cddead83cddfa"],["d83cddebd83cddee"],["d83cddebd83cddef"],["d83cddebd83cddf0"],["d83cddebd83cddf2"],["d83cddebd83cddf4"],["d83cddebd83cddf7"],["d83cddecd83cdde6"],["d83cddecd83cdde7"],["d83cddecd83cdde9"],["d83cddecd83cddea"],["d83cddecd83cddeb"],["d83cddecd83cddec"],["d83cddecd83cdded"],["d83cddecd83cddee"],["d83cddecd83cddf1"],["d83cddecd83cddf2"],["d83cddecd83cddf3"],["d83cddecd83cddf5"],["d83cddecd83cddf6"],["d83cddecd83cddf7"],["d83cddecd83cddf8"],["d83cddecd83cddf9"],["d83cddecd83cddfa"],["d83cddecd83cddfc"],["d83cddecd83cddfe"],["d83cddedd83cddf0"],["d83cddedd83cddf2"],["d83cddedd83cddf3"],["d83cddedd83cddf7"],["d83cddedd83cddf9"],["d83cddedd83cddfa"],["d83cddeed83cdde8"],["d83cddeed83cdde9"],["d83cddeed83cddea"],["d83cddeed83cddf1"],["d83cddeed83cddf2"],["d83cddeed83cddf3"],["d83cddeed83cddf4"],["d83cddeed83cddf6"],["d83cddeed83cddf7"],["d83cddeed83cddf8"],["d83cddeed83cddf9"],["d83cddefd83cddea"],["d83cddefd83cddf2"],["d83cddefd83cddf4"],["d83cddefd83cddf5"],["d83cddf0d83cddea"],["d83cddf0d83cddec"],["d83cddf0d83cdded"],["d83cddf0d83cddee"],["d83cddf0d83cddf2"],["d83cddf0d83cddf3"],["d83cddf0d83cddf5"]],"Flags_1":[["d83cddf0d83cddf7"],["d83cddf0d83cddfc"],["d83cddf0d83cddfe"],["d83cddf0d83cddff"],["d83cddf1d83cdde6"],["d83cddf1d83cdde7"],["d83cddf1d83cdde8"],["d83cddf1d83cddee"],["d83cddf1d83cddf0"],["d83cddf1d83cddf7"],["d83cddf1d83cddf8"],["d83cddf1d83cddf9"],["d83cddf1d83cddfa"],["d83cddf1d83cddfb"],["d83cddf1d83cddfe"],["d83cddf2d83cdde6"],["d83cddf2d83cdde8"],["d83cddf2d83cdde9"],["d83cddf2d83cddea"],["d83cddf2d83cddeb"],["d83cddf2d83cddec"],["d83cddf2d83cdded"],["d83cddf2d83cddf0"],["d83cddf2d83cddf1"],["d83cddf2d83cddf2"],["d83cddf2d83cddf3"],["d83cddf2d83cddf4"],["d83cddf2d83cddf5"],["d83cddf2d83cddf6"],["d83cddf2d83cddf7"],["d83cddf2d83cddf8"],["d83cddf2d83cddf9"],["d83cddf2d83cddfa"],["d83cddf2d83cddfb"],["d83cddf2d83cddfc"],["d83cddf2d83cddfd"],["d83cddf2d83cddfe"],["d83cddf2d83cddff"],["d83cddf3d83cdde6"],["d83cddf3d83cdde8"],["d83cddf3d83cddea"],["d83cddf3d83cddeb"],["d83cddf3d83cddec"],["d83cddf3d83cddee"],["d83cddf3d83cddf1"],["d83cddf3d83cddf4"],["d83cddf3d83cddf5"],["d83cddf3d83cddf7"],["d83cddf3d83cddfa"],["d83cddf3d83cddff"],["d83cddf4d83cddf2"],["d83cddf5d83cdde6"],["d83cddf5d83cddea"],["d83cddf5d83cddeb"],["d83cddf5d83cddec"],["d83cddf5d83cdded"],["d83cddf5d83cddf0"],["d83cddf5d83cddf1"],["d83cddf5d83cddf2"],["d83cddf5d83cddf3"],["d83cddf5d83cddf7"],["d83cddf5d83cddf8"],["d83cddf5d83cddf9"],["d83cddf5d83cddfc"],["d83cddf5d83cddfe"],["d83cddf6d83cdde6"],["d83cddf7d83cddea"],["d83cddf7d83cddf4"],["d83cddf7d83cddf8"],["d83cddf7d83cddfa"],["d83cddf7d83cddfc"],["d83cddf8d83cdde6"],["d83cddf8d83cdde7"],["d83cddf8d83cdde8"],["d83cddf8d83cdde9"],["d83cddf8d83cddea"],["d83cddf8d83cddec"],["d83cddf8d83cdded"],["d83cddf8d83cddee"],["d83cddf8d83cddef"],["d83cddf8d83cddf0"],["d83cddf8d83cddf1"],["d83cddf8d83cddf2"],["d83cddf8d83cddf3"],["d83cddf8d83cddf4"],["d83cddf8d83cddf7"],["d83cddf8d83cddf8"],["d83cddf8d83cddf9"],["d83cddf8d83cddfb"],["d83cddf8d83cddfd"],["d83cddf8d83cddfe"],["d83cddf8d83cddff"],["d83cddf9d83cdde6"],["d83cddf9d83cdde8"],["d83cddf9d83cdde9"],["d83cddf9d83cddeb"],["d83cddf9d83cddec"],["d83cddf9d83cdded"],["d83cddf9d83cddef"],["d83cddf9d83cddf0"],["d83cddf9d83cddf1"],["d83cddf9d83cddf2"],["d83cddf9d83cddf3"],["d83cddf9d83cddf4"],["d83cddf9d83cddf7"],["d83cddf9d83cddf9"],["d83cddf9d83cddfb"],["d83cddf9d83cddfc"],["d83cddf9d83cddff"],["d83cddfad83cdde6"],["d83cddfad83cddec"],["d83cddfad83cddf2"],["d83cddfad83cddf3"],["d83cddfad83cddf8"],["d83cddfad83cddfe"],["d83cddfad83cddff"],["d83cddfbd83cdde6"],["d83cddfbd83cdde8"],["d83cddfbd83cddea"],["d83cddfbd83cddec"],["d83cddfbd83cddee"],["d83cddfbd83cddf3"],["d83cddfbd83cddfa"],["d83cddfcd83cddeb"],["d83cddfcd83cddf8"],["d83cddfdd83cddf0"],["d83cddfed83cddea"],["d83cddfed83cddf9"],["d83cddffd83cdde6"],["d83cddffd83cddf2"],["d83cddffd83cddfc"],["d83cdff4db40dc67db40dc62db40dc65db40dc6edb40dc67db40dc7f"],["d83cdff4db40dc67db40dc62db40dc73db40dc63db40dc74db40dc7f"],["d83cdff4db40dc67db40dc62db40dc77db40dc6cdb40dc73db40dc7f"]]},"obsolete":[],"metrics":{"raw_width":66,"raw_height":66,"per_row":16},"densities":["xhdpi"],"format":"webp"}
\ No newline at end of file
diff --git a/app/src/main/assets/fonts/SignalSymbols-Bold.otf b/app/src/main/assets/fonts/SignalSymbols-Bold.otf
new file mode 100644
index 00000000..8aed1da3
Binary files /dev/null and b/app/src/main/assets/fonts/SignalSymbols-Bold.otf differ
diff --git a/app/src/main/baseline-prof.txt b/app/src/main/baseline-prof.txt
index 96cdd6f5..6e7227f4 100644
--- a/app/src/main/baseline-prof.txt
+++ b/app/src/main/baseline-prof.txt
@@ -1,35 +1,321 @@
-HPLandroidx/appcompat/app/AppCompatViewInflater;->themifyContext(Landroid/content/Context;Landroid/util/AttributeSet;ZZ)Landroid/content/Context;
+HPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesWithIntrinsicBounds(IIII)V
+HPLandroidx/appcompat/widget/SearchView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLandroidx/constraintlayout/core/ArrayRow;->(Landroidx/constraintlayout/core/Cache;)V
HPLandroidx/core/view/ViewGroupKt$descendants$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HPLandroidx/core/view/ViewGroupKt;->getDescendants(Landroid/view/ViewGroup;)Lkotlin/sequences/Sequence;
+HPLandroidx/core/view/ViewGroupKt$iterator$1;->next()Landroid/view/View;
+HPLandroidx/core/view/ViewGroupKt$iterator$1;->next()Ljava/lang/Object;
HPLandroidx/customview/poolingcontainer/PoolingContainer;->callPoolingContainerOnRelease(Landroid/view/View;)V
HPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
HPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->()V
-HPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->onRelease()V
+HPLandroidx/fragment/app/FragmentManager;->saveAllStateInternal()Landroid/os/Bundle;
+HPLandroidx/fragment/app/FragmentStateManager;->saveState()Landroid/os/Bundle;
+HPLandroidx/recyclerview/widget/AsyncListDiffer$1$1;->areItemsTheSame(II)Z
+HPLandroidx/recyclerview/widget/BatchingListUpdateCallback;->onChanged(IILjava/lang/Object;)V
+HPLandroidx/recyclerview/widget/ConcatAdapter;->findRelativeAdapterPositionIn(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)I
+HPLandroidx/recyclerview/widget/ConcatAdapter;->getItemViewType(I)I
+HPLandroidx/recyclerview/widget/ConcatAdapterController;->findWrapperAndLocalPosition(I)Landroidx/recyclerview/widget/ConcatAdapterController$WrapperAndLocalPosition;
+HPLandroidx/recyclerview/widget/ConcatAdapterController;->getItemViewType(I)I
+HPLandroidx/recyclerview/widget/ConcatAdapterController;->getLocalAdapterPosition(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)I
+HPLandroidx/recyclerview/widget/ConcatAdapterController;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V
+HPLandroidx/recyclerview/widget/ConcatAdapterController;->releaseWrapperAndLocalPosition(Landroidx/recyclerview/widget/ConcatAdapterController$WrapperAndLocalPosition;)V
+HPLandroidx/recyclerview/widget/DiffUtil;->backward(Landroidx/recyclerview/widget/DiffUtil$Range;Landroidx/recyclerview/widget/DiffUtil$Callback;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;I)Landroidx/recyclerview/widget/DiffUtil$Snake;
+HPLandroidx/recyclerview/widget/ListAdapter;->getCurrentList()Ljava/util/List;
+HPLandroidx/recyclerview/widget/NestedAdapterWrapper;->getItemViewType(I)I
+HPLandroidx/recyclerview/widget/RecyclerView;->animateChange(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;ZZ)V
+HPLandroidx/recyclerview/widget/RecyclerView;->getChildViewHolder(Landroid/view/View;)Landroidx/recyclerview/widget/RecyclerView$ViewHolder;
+HPLandroidx/recyclerview/widget/RecyclerView;->viewRangeUpdate(IILjava/lang/Object;)V
HPLandroidx/recyclerview/widget/ViewInfoStore;->addToPreLayout(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)V
+HPLandroidx/recyclerview/widget/ViewInfoStore;->isDisappearing(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Z
HPLandroidx/recyclerview/widget/ViewInfoStore;->popFromLayoutStep(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;
-HPLcom/fasterxml/jackson/databind/deser/BasicDeserializerFactory;->createMapDeserializer(Lcom/fasterxml/jackson/databind/DeserializationContext;Lcom/fasterxml/jackson/databind/type/MapType;Lcom/fasterxml/jackson/databind/BeanDescription;)Lcom/fasterxml/jackson/databind/JsonDeserializer;
-HPLcom/fasterxml/jackson/databind/deser/std/MapDeserializer;->deserialize(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;)Ljava/util/Map;
-HPLcom/squareup/wire/internal/Internal;->countNonNull(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)I
-HPLkotlin/collections/AbstractList$IteratorImpl;->next()Ljava/lang/Object;
-HPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I
+HPLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage$WrapperViewTypeLookup;->localToGlobal(I)I
+HPLandroidx/savedstate/SavedStateRegistry;->performSave(Landroid/os/Bundle;)V
+HPLcom/google/android/material/animation/ArgbEvaluatorCompat;->evaluate(FLjava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;
+HPLcom/google/android/material/shape/RelativeCornerSize;->getCornerSize(Landroid/graphics/RectF;)F
+HPLcom/google/android/material/shape/RelativeCornerSize;->getMaxCornerSize(Landroid/graphics/RectF;)F
+HPLcom/google/common/collect/Sets;->intersection(Ljava/util/Set;Ljava/util/Set;)Lcom/google/common/collect/Sets$SetView;
+HPLio/reactivex/rxjava3/internal/operators/maybe/MaybeFromCallable;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V
+HPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver;->innerSuccess(Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver$InnerObserver;Ljava/lang/Object;)V
+HPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver;->onNext(Ljava/lang/Object;)V
+HPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->removeFirst()V
+HPLj$/time/Instant;->atZone(Lj$/time/ZoneId;)Lj$/time/ZonedDateTime;
+HPLj$/time/LocalDate;->toEpochDay()J
+HPLj$/time/LocalDate;->w()Z
+HPLj$/time/LocalDateTime;->v()Lj$/time/LocalDate;
+HPLj$/time/ZonedDateTime;->(Lj$/time/LocalDateTime;Lj$/time/ZoneId;Lj$/time/ZoneOffset;)V
+HPLj$/time/ZonedDateTime;->m(JILj$/time/ZoneId;)Lj$/time/ZonedDateTime;
+HPLj$/time/ZonedDateTime;->n(Lj$/time/Instant;Lj$/time/ZoneId;)Lj$/time/ZonedDateTime;
+HPLj$/time/ZonedDateTime;->toLocalDate()Lj$/time/LocalDate;
+HPLj$/util/S;->s(Lj$/util/function/Consumer;)Z
+HPLj$/util/stream/A1;->l1()Lj$/util/stream/P1;
+HPLj$/util/stream/Y1;->n(Lj$/util/function/BinaryOperator;)Lj$/util/Optional;
+HPLj$/util/stream/h2;->(Lj$/util/stream/i2;Lj$/util/stream/g2;)V
+HPLj$/util/stream/h2;->accept(Ljava/lang/Object;)V
+HPLj$/util/stream/h2;->n(J)V
HPLkotlin/sequences/SequenceBuilderIterator;->yieldAll(Ljava/util/Iterator;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HPLkotlin/sequences/SequenceScope;->yieldAll(Lkotlin/sequences/Sequence;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HPLnet/zetetic/database/sqlcipher/SQLiteProgram;->clearBindings()V
-HPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getSession()Lnet/zetetic/database/sqlcipher/SQLiteSession;
+HPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence;
+HPLkotlin/sequences/SequencesKt___SequencesJvmKt$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
+HPLkotlin/sequences/SequencesKt___SequencesJvmKt$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getPath()Ljava/lang/String;
+HPLorg/signal/core/util/OptionalExtensionsKt;->toOptional(Ljava/lang/Object;)Lj$/util/Optional;
+HPLorg/signal/core/util/concurrent/SettableFuture;->(Ljava/lang/Object;)V
+HPLorg/signal/core/util/concurrent/SignalExecutors;->$r8$lambda$0Q0afsv1raKIrq3aP-SuMcT2Ad0(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V
HPLorg/signal/core/util/concurrent/SignalExecutors;->lambda$newCachedBoundedExecutor$1(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V
-HPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment;->(Lorg/thoughtcrime/securesms/attachments/AttachmentId;JZZLjava/lang/String;IJLjava/lang/String;ILjava/lang/String;Ljava/lang/String;[B[BILjava/lang/String;ZZZIIZLjava/lang/String;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Lorg/thoughtcrime/securesms/blurhash/BlurHash;Lorg/thoughtcrime/securesms/audio/AudioHash;Lorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties;IJ)V
+HPLorg/signal/core/util/tracing/DebugAnnotation$Builder;->()V
+HPLorg/signal/libsignal/protocol/ecc/ECPublicKey;->equals(Ljava/lang/Object;)Z
+HPLorg/signal/paging/FixedSizePagingController;->lambda$onDataItemChanged$2(Ljava/lang/Object;)V
+HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$2;->invoke(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGift;)Ljava/lang/Boolean;
+HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$4;->invoke(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGift;)Ljava/lang/Boolean;
+HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$notAnimated$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$notAnimated$1;->invoke(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGift;)Ljava/lang/Boolean;
+HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;->access$getAnimationState$p(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;)Ljava/util/Map;
+HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->applyCorners()V
+HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->applyCornersForSizeClass2()V
+HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->getCells()[Lorg/thoughtcrime/securesms/components/ThumbnailView;
+HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setCellBackgroundColor(I)V
+HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setRadii(IIII)V
+HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setRelativeRadii(Lorg/thoughtcrime/securesms/components/ThumbnailView;IIII)V
+HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setSlide(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/mms/Slide;IZ)V
+HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setSlides(Lcom/bumptech/glide/RequestManager;Ljava/util/List;Z)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentDate(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/util/Locale;Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentDeliveryStatus(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->dispatchDraw(Landroid/graphics/Canvas;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setCancelTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setClickable(Z)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setConversationColor(I)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setCorners(IIII)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setFocusable(Z)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setImageResource(Lcom/bumptech/glide/RequestManager;Ljava/util/List;ZZ)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setMaximumThumbnailHeight(I)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setMinimumThumbnailWidth(I)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setOnLongClickListener(Landroid/view/View$OnLongClickListener;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setPlayVideoClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setStartTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setThumbnailBounds([I)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setThumbnailClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->showThumbnailView()V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->(ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIII)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->copy$default(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->copy(ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIII)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->(FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIII)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->copy$default(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIIIILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->copy(FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIII)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;Lorg/thoughtcrime/securesms/util/views/Stub;)V
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->copy$default(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;ILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->copy(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->getAlbumViewState()Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;
+HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->getThumbnailViewState()Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;
+HPLorg/thoughtcrime/securesms/components/CornerMask;->mask(Landroid/graphics/Canvas;)V
+HPLorg/thoughtcrime/securesms/components/Outliner;->draw(Landroid/graphics/Canvas;IIII)V
+HPLorg/thoughtcrime/securesms/components/QuoteView;->dismiss()V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport2;->m([Ljava/lang/Object;)Ljava/util/List;
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->onMeasure(II)V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setBounds(IIII)V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setCancelTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setClickable(Z)V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setFocusable(Z)V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setImageResource(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/mms/Slide;ZZII)Lorg/signal/core/util/concurrent/ListenableFuture;
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setPlayVideoClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setRadii(IIII)V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setStartTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V
+HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setThumbnailClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V
+HPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->getLongestLineWidth(Ljava/lang/CharSequence;)F
+HPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setOverflowText(Ljava/lang/CharSequence;)V
+HPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setTextSize(IF)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion;->getTransferState(Ljava/util/List;)I
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress;->toString()Ljava/lang/String;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1;->(Z)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1;->(Z)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setSlides$2;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->deriveMode(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->isUpdateToExistingSet(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;Ljava/util/List;)Z
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setCancelClickListener(Landroid/view/View$OnClickListener;)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setClickable(Z)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setFocusable(Z)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setShowSecondaryText(Z)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setSlides(Ljava/util/List;)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setTransferClickListener(Landroid/view/View$OnClickListener;)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setVisible(Z)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->updateState(Lkotlin/jvm/functions/Function1;)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->(ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZ)V
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->copy$default(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->copy(ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZ)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->equals(Ljava/lang/Object;)Z
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->toString()Ljava/lang/String;
+HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->updateOutlineVisibility()V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->bind(Landroidx/lifecycle/LifecycleOwner;Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Lj$/util/Optional;Lj$/util/Optional;Lcom/bumptech/glide/RequestManager;Ljava/util/Locale;Ljava/util/Set;Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/String;ZZZZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->forceFooter(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getActiveFooter(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Lorg/thoughtcrime/securesms/components/ConversationItemFooter;
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getGiftId()J
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getOpenableGiftProjection(Z)Lorg/thoughtcrime/securesms/util/Projection;
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getSnapshotProjections(Landroid/view/ViewGroup;ZZ)Lorg/thoughtcrime/securesms/util/ProjectionList;
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasExtraText(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasNoBubble(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isCaptionlessMms(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isEndOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Z)Z
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isFooterVisible(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Z)Z
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isStartOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Z)Z
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isWithinClusteringTime(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->onMeasure(II)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->readDimen(I)I
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setAuthor(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;ZZ)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setBodyText(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/lang/String;Z)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setBubbleState(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;ZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setContactPhoto(Lorg/thoughtcrime/securesms/recipients/Recipient;)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setFooter(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Ljava/util/Locale;ZZ)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setGroupAuthorColor(Lorg/thoughtcrime/securesms/database/model/MessageRecord;ZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setGutterSizes(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setHasBeenQuoted(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setInteractionState(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Z)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setMediaAttributes(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;ZZZZ)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setMessageShape(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setMessageSpacing(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setQuote(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setReactions(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setStatusIcons(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setThumbnailCorners(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->shouldInterceptClicks(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->showProjectionArea()V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->unbind()V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->onDrawForeground(Landroid/graphics/Canvas;)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setQuoteViewProjection(Lorg/thoughtcrime/securesms/util/Projection;)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setVideoPlayerProjection(Lorg/thoughtcrime/securesms/util/Projection;)V
+HPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getConversationTimestamp()J
+HPLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->getLatestTimestamp(Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge;Landroidx/recyclerview/widget/LinearLayoutManager;)Lj$/util/Optional;
+HPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingBodyTextColor(Landroid/content/Context;Z)I
+HPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingGroupSenderColor(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)I
+HPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V
HPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->animateChange(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)Z
HPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->animatePersistence(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)Z
+HPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->animateSlide(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)Z
+HPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->onAnimationFinished(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V
+HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Single;->toSet()Ljava/util/Set;
+HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->getCurrentSelection(Landroidx/recyclerview/widget/RecyclerView;)Ljava/util/Set;
+HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->getDifferenceForPart(Ljava/util/Set;Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;)Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference;
+HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V
+HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->resolveMultiselectable(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/View;)Lorg/thoughtcrime/securesms/conversation/mutiselect/Multiselectable;
+HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->updateChildOffsets(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/View;)V
+HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->updateMultiselectPartAnimator(Ljava/util/Set;Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->bindPayloadsIfAvailable()Z
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getBindable()Lorg/thoughtcrime/securesms/BindableConversationItem;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getColorizerProjections(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/ProjectionList;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getNextMessage()Lj$/util/Optional;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getPreviousMessage()Lj$/util/Optional;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$IncomingMediaViewHolder;->bind(Lorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder;->bind(Lorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->consumePulseRequest()Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge$PulseRequest;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getChatColorsData()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getConversationMessage(I)Lorg/thoughtcrime/securesms/conversation/ConversationMessage;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener;->onScrolled(Landroidx/recyclerview/widget/RecyclerView;II)V
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$2;->get()Ljava/lang/Object;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$5;->invoke()Ljava/lang/Boolean;
HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$6;->invoke()Ljava/lang/Boolean;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$7;->invoke()Ljava/lang/Boolean;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8;->invoke(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Ljava/lang/Boolean;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->doAfterFirstRender()V
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->getHeader(Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->hasHeader(I)Z
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->isFirstUnread(I)Z
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->timestamp(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)J
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->toEpochDay(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)J
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getReminder$lambda$10(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;Lorg/thoughtcrime/securesms/database/model/GroupRecord;)Lj$/util/Optional;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getRequestReviewState$lambda$15(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getRequestReviewState(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;)Lio/reactivex/rxjava3/core/Single;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$13;->apply(Lj$/util/Optional;)Lio/reactivex/rxjava3/core/MaybeSource;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$canShowAsBubble$1;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)Ljava/lang/Boolean;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$getRequestReviewState$1;->apply(Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)Lio/reactivex/rxjava3/core/SingleSource;
+HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getChatColorsSnapshot()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;
HPLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->equals(Ljava/lang/Object;)Z
HPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->equals(Ljava/lang/Object;)Z
+HPLorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;->equals(Ljava/lang/Object;)Z
+HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$$inlined$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
+HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$1;->invoke(Landroid/view/View;)Landroidx/recyclerview/widget/RecyclerView$ViewHolder;
+HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->draw(Landroid/graphics/Canvas;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getChatColors()Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;
+HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getOutline(Landroid/graphics/Outline;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->isSolidColor()Z
+HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->setCorners([F)V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->onMeasure(II)V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->isEndOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->setMessageShape(Lorg/thoughtcrime/securesms/database/model/MessageRecord;ZI)Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$footerDrawable$1;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->bind(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->getColorizerProjections(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/ProjectionList;
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->invalidateBodyBubbleDrawable(Landroid/view/ViewGroup;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->invalidateChatColorsDrawable(Landroid/view/ViewGroup;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->linkifyMessageBody(Landroid/text/Spannable;)V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentBody()V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentSender()V
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getBodyTextColor(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)I
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->getFooterWidth()I
+HPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->onPostMeasure()Z
HPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$unregisterObserver$17(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V
+HPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->beginTransaction()V
+HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isFailed()Z
+HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isPendingInsecureSmsFallback()Z
HPLorg/thoughtcrime/securesms/database/model/IdentityRecord;->equals(Ljava/lang/Object;)Z
-HPLorg/thoughtcrime/securesms/database/model/ThreadRecord;->equals(Ljava/lang/Object;)Z
-HPLorg/thoughtcrime/securesms/logging/PersistentLogger$LogRequest;->getCreateTime()J
+HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isRateLimited()Z
+HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isSecure()Z
+HPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->isMediaPending()Z
+HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration$onDraw$1;->invoke(Landroid/view/View;)Landroidx/recyclerview/widget/RecyclerView$ViewHolder;
+HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration$onDraw$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$RangeComparator;->compare(Ljava/lang/Integer;Ljava/lang/Integer;)I
+HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->getCurrentHolder(I)Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;
+HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->updateVideoDisplayPositionAndSize(Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4Playable;)V
+HPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getMessageFontSize()I
+HPLorg/thoughtcrime/securesms/keyvalue/WallpaperValues;->hasWallpaperSet()Z
+HPLorg/thoughtcrime/securesms/mms/ImageSlide;->isBorderless()Z
HPLorg/thoughtcrime/securesms/mms/Slide;->equals(Ljava/lang/Object;)Z
-HPLorg/thoughtcrime/securesms/profiles/ProfileName;->equals(Ljava/lang/Object;)Z
-HPLorg/thoughtcrime/securesms/recipients/Recipient;->hasSameContent(Lorg/thoughtcrime/securesms/recipients/Recipient;)Z
+HPLorg/thoughtcrime/securesms/mms/Slide;->getTransferState()I
+HPLorg/thoughtcrime/securesms/mms/Slide;->hashCode()I
+HPLorg/thoughtcrime/securesms/mms/Slide;->isInProgress()Z
+HPLorg/thoughtcrime/securesms/mms/Slide;->isPendingDownload()Z
+HPLorg/thoughtcrime/securesms/mms/SlideDeck;->getThumbnailSlides()Ljava/util/List;
+HPLorg/thoughtcrime/securesms/reactions/ReactionsConversationView;->clear()V
+HPLorg/thoughtcrime/securesms/recipients/Recipient;->hasWallpaper()Z
+HPLorg/thoughtcrime/securesms/util/BubbleUtil;->canBubble(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/Long;)Z
+HPLorg/thoughtcrime/securesms/util/DateUtils;->getSameDayDateFormat()Ljava/text/SimpleDateFormat;
+HPLorg/thoughtcrime/securesms/util/DateUtils;->isSameDay(JJ)Z
+HPLorg/thoughtcrime/securesms/util/JavaTimeExtensionsKt;->toLocalDate$default(JLj$/time/ZoneId;ILjava/lang/Object;)Lj$/time/LocalDate;
+HPLorg/thoughtcrime/securesms/util/JavaTimeExtensionsKt;->toLocalDate(JLj$/time/ZoneId;)Lj$/time/LocalDate;
+HPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->updateActiveState$lambda$7$lambda$6(Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper;IIIILandroid/animation/ValueAnimator;)V
+HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasNoBubble(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z
+HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasOnlyThumbnail(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z
+HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isBorderless(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z
+HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isEditMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z
+HPLorg/thoughtcrime/securesms/util/Projection$Corners;->(FFFF)V
+HPLorg/thoughtcrime/securesms/util/Projection$Corners;->toRadii()[F
+HPLorg/thoughtcrime/securesms/util/ProjectionList;->close()V
+HPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getMessageBodyTextSize(Landroid/content/Context;)I
+HPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->drawAsTopItemDecoration(Landroid/view/View;Landroid/graphics/Canvas;Landroid/view/View;Landroid/view/View;I)V
+HPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->layoutIn(Landroid/view/View;Landroid/view/View;)V
+HPLorg/thoughtcrime/securesms/util/ViewUtil;->isRtl(Landroid/view/View;)Z
+HPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingBottom(Landroid/view/View;I)V
+HPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingEnd(Landroid/view/View;I)V
+HPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingStart(Landroid/view/View;I)V
+HPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingTop(Landroid/view/View;I)V
+HPLorg/thoughtcrime/securesms/util/ViewUtil;->setTopMargin(Landroid/view/View;IZ)V
+HPLorg/thoughtcrime/securesms/util/ViewUtil;->updateLayoutParams(Landroid/view/View;II)V
+HPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;->setPayload(Ljava/util/List;)V
+HPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->getItem(I)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;
+HPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->getItemViewType(I)I
+HPLorg/thoughtcrime/securesms/util/views/NullableStub;->get()Ljava/lang/Object;
+HPLorg/thoughtcrime/securesms/util/views/NullableStub;->require()Ljava/lang/Object;
HSPLandroid/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$$ExternalSyntheticThrowCCEIfNotNull0;->m(Ljava/lang/Object;)V
HSPLandroid/support/v4/media/session/IMediaSession$Stub;->()V
HSPLandroid/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi21;->(Landroid/content/Context;Landroid/support/v4/media/session/MediaSessionCompat$Token;)V
@@ -44,6 +330,7 @@ HSPLandroid/support/v4/media/session/MediaSessionCompat$Callback;->()V
HSPLandroid/support/v4/media/session/MediaSessionCompat$Callback;->setSessionImpl(Landroid/support/v4/media/session/MediaSessionCompat$MediaSessionImpl;Landroid/os/Handler;)V
HSPLandroid/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21$ExtraSession;->(Landroid/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21;)V
HSPLandroid/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21;->(Landroid/content/Context;Ljava/lang/String;Landroidx/versionedparcelable/VersionedParcelable;Landroid/os/Bundle;)V
+HSPLandroid/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21;->getMediaSession()Ljava/lang/Object;
HSPLandroid/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21;->getSessionToken()Landroid/support/v4/media/session/MediaSessionCompat$Token;
HSPLandroid/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21;->setActive(Z)V
HSPLandroid/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21;->setCallback(Landroid/support/v4/media/session/MediaSessionCompat$Callback;Landroid/os/Handler;)V
@@ -70,6 +357,7 @@ HSPLandroid/support/v4/media/session/MediaSessionCompat$Token;->getToken()Ljava/
HSPLandroid/support/v4/media/session/MediaSessionCompat;->(Landroid/content/Context;Ljava/lang/String;Landroid/content/ComponentName;Landroid/app/PendingIntent;Landroid/os/Bundle;)V
HSPLandroid/support/v4/media/session/MediaSessionCompat;->(Landroid/content/Context;Ljava/lang/String;Landroid/content/ComponentName;Landroid/app/PendingIntent;Landroid/os/Bundle;Landroidx/versionedparcelable/VersionedParcelable;)V
HSPLandroid/support/v4/media/session/MediaSessionCompat;->getController()Landroid/support/v4/media/session/MediaControllerCompat;
+HSPLandroid/support/v4/media/session/MediaSessionCompat;->getMediaSession()Ljava/lang/Object;
HSPLandroid/support/v4/media/session/MediaSessionCompat;->getSessionToken()Landroid/support/v4/media/session/MediaSessionCompat$Token;
HSPLandroid/support/v4/media/session/MediaSessionCompat;->setActive(Z)V
HSPLandroid/support/v4/media/session/MediaSessionCompat;->setCallback(Landroid/support/v4/media/session/MediaSessionCompat$Callback;Landroid/os/Handler;)V
@@ -104,21 +392,21 @@ HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landr
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->run()V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->saveState()Landroid/os/Bundle;
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable(Landroid/content/Context;)V
HSPLandroidx/activity/ComponentActivity$1;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$2;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity$3;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity$4;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity$5;->(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$6;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$6;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity$Api19Impl;->cancelPendingInputEvents(Landroid/view/View;)V
HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->activityDestroyed()V
-HSPLandroidx/activity/ComponentActivity;->$r8$lambda$OnwlVMZzrLePIRy-6IUDTtLLUV0(Landroidx/activity/ComponentActivity;)Landroid/os/Bundle;
HSPLandroidx/activity/ComponentActivity;->$r8$lambda$h2i_RK2mddCIbAsGubaI4eL8_cU(Landroidx/activity/ComponentActivity;Landroid/content/Context;)V
HSPLandroidx/activity/ComponentActivity;->()V
HSPLandroidx/activity/ComponentActivity;->addMenuProvider(Landroidx/core/view/MenuProvider;)V
@@ -138,12 +426,10 @@ HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/
HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
HSPLandroidx/activity/ComponentActivity;->invalidateMenu()V
-HSPLandroidx/activity/ComponentActivity;->lambda$new$1()Landroid/os/Bundle;
HSPLandroidx/activity/ComponentActivity;->lambda$new$2(Landroid/content/Context;)V
HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
HSPLandroidx/activity/ComponentActivity;->onCreatePanelMenu(ILandroid/view/Menu;)Z
HSPLandroidx/activity/ComponentActivity;->onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z
-HSPLandroidx/activity/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V
HSPLandroidx/activity/ComponentActivity;->removeMenuProvider(Landroidx/core/view/MenuProvider;)V
HSPLandroidx/activity/ComponentActivity;->removeOnConfigurationChangedListener(Landroidx/core/util/Consumer;)V
HSPLandroidx/activity/ComponentActivity;->removeOnMultiWindowModeChangedListener(Landroidx/core/util/Consumer;)V
@@ -155,18 +441,31 @@ HSPLandroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;->(Land
HSPLandroidx/activity/FullyDrawnReporter;->(Ljava/util/concurrent/Executor;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/activity/OnBackPressedCallback;->(Z)V
HSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V
+HSPLandroidx/activity/OnBackPressedCallback;->getEnabledChangedCallback$activity_release()Lkotlin/jvm/functions/Function0;
+HSPLandroidx/activity/OnBackPressedCallback;->isEnabled()Z
HSPLandroidx/activity/OnBackPressedCallback;->remove()V
HSPLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V
HSPLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V
+HSPLandroidx/activity/OnBackPressedCallback;->setEnabledChangedCallback$activity_release(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V
HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V
HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V
HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V
+HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->(Ljava/lang/Object;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->invoke()V
+HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->(Ljava/lang/Object;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->invoke()V
HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;Landroidx/core/util/Consumer;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;->access$getInProgressCallback$p(Landroidx/activity/OnBackPressedDispatcher;)Landroidx/activity/OnBackPressedCallback;
HSPLandroidx/activity/OnBackPressedDispatcher;->access$getOnBackPressedCallbacks$p(Landroidx/activity/OnBackPressedDispatcher;)Lkotlin/collections/ArrayDeque;
+HSPLandroidx/activity/OnBackPressedDispatcher;->access$updateEnabledCallbacks(Landroidx/activity/OnBackPressedDispatcher;)V
HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V
HSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable;
+HSPLandroidx/activity/OnBackPressedDispatcher;->updateEnabledCallbacks()V
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->set(Landroid/view/View;Landroidx/activity/OnBackPressedDispatcherOwner;)V
HSPLandroidx/activity/contextaware/ContextAwareHelper;->()V
HSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
@@ -184,7 +483,6 @@ HSPLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->addObse
HSPLandroidx/activity/result/ActivityResultRegistry;->()V
HSPLandroidx/activity/result/ActivityResultRegistry;->bindRcKey(ILjava/lang/String;)V
HSPLandroidx/activity/result/ActivityResultRegistry;->generateRandomNumber()I
-HSPLandroidx/activity/result/ActivityResultRegistry;->onSaveInstanceState(Landroid/os/Bundle;)V
HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
HSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V
@@ -203,7 +501,6 @@ HSPLandroidx/appcompat/app/ActionBar$LayoutParams;->(II)V
HSPLandroidx/appcompat/app/ActionBar$LayoutParams;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/app/ActionBar;->()V
HSPLandroidx/appcompat/app/AppCompatActivity$1;->(Landroidx/appcompat/app/AppCompatActivity;)V
-HSPLandroidx/appcompat/app/AppCompatActivity$1;->saveState()Landroid/os/Bundle;
HSPLandroidx/appcompat/app/AppCompatActivity$2;->(Landroidx/appcompat/app/AppCompatActivity;)V
HSPLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V
HSPLandroidx/appcompat/app/AppCompatActivity;->()V
@@ -295,7 +592,6 @@ HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/Vi
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onDestroy()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate(Landroid/os/Bundle;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V
-HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onSaveInstanceState(Landroid/os/Bundle;)V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStop()V
HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onSubDecorInstalled(Landroid/view/ViewGroup;)V
@@ -320,6 +616,7 @@ HSPLandroidx/appcompat/app/AppCompatViewInflater;->createImageView(Landroid/cont
HSPLandroidx/appcompat/app/AppCompatViewInflater;->createTextView(Landroid/content/Context;Landroid/util/AttributeSet;)Landroidx/appcompat/widget/AppCompatTextView;
HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/content/Context;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;ZZZZ)Landroid/view/View;
+HSPLandroidx/appcompat/app/AppCompatViewInflater;->themifyContext(Landroid/content/Context;Landroid/util/AttributeSet;ZZ)Landroid/content/Context;
HSPLandroidx/appcompat/app/AppCompatViewInflater;->verifyNotNull(Landroid/view/View;Ljava/lang/String;)V
HSPLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;->getDisabledComponentFlag()I
HSPLandroidx/appcompat/app/AppLocalesMetadataHolderService;->getServiceInfo(Landroid/content/Context;)Landroid/content/pm/ServiceInfo;
@@ -356,10 +653,8 @@ HSPLandroidx/appcompat/view/ContextThemeWrapper;->isEmptyConfiguration(Landroid/
HSPLandroidx/appcompat/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
HSPLandroidx/appcompat/view/SupportMenuInflater$MenuState;->(Landroidx/appcompat/view/SupportMenuInflater;Landroid/view/Menu;)V
HSPLandroidx/appcompat/view/SupportMenuInflater$MenuState;->addItem()V
-HSPLandroidx/appcompat/view/SupportMenuInflater$MenuState;->addSubMenuItem()Landroid/view/SubMenu;
HSPLandroidx/appcompat/view/SupportMenuInflater$MenuState;->getShortcut(Ljava/lang/String;)C
HSPLandroidx/appcompat/view/SupportMenuInflater$MenuState;->hasAddedItem()Z
-HSPLandroidx/appcompat/view/SupportMenuInflater$MenuState;->newInstance(Ljava/lang/String;[Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/appcompat/view/SupportMenuInflater$MenuState;->readItem(Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/view/SupportMenuInflater$MenuState;->resetGroup()V
HSPLandroidx/appcompat/view/SupportMenuInflater$MenuState;->setItem(Landroid/view/MenuItem;)V
@@ -405,9 +700,7 @@ HSPLandroidx/appcompat/view/menu/MenuBuilder;->(Landroid/content/Context;)
HSPLandroidx/appcompat/view/menu/MenuBuilder;->add(IIILjava/lang/CharSequence;)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->addInternal(IIILjava/lang/CharSequence;)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->addMenuPresenter(Landroidx/appcompat/view/menu/MenuPresenter;Landroid/content/Context;)V
-HSPLandroidx/appcompat/view/menu/MenuBuilder;->addSubMenu(IIILjava/lang/CharSequence;)Landroid/view/SubMenu;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->clear()V
-HSPLandroidx/appcompat/view/menu/MenuBuilder;->clearHeader()V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->createNewMenuItem(IIIILjava/lang/CharSequence;I)Landroidx/appcompat/view/menu/MenuItemImpl;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->dispatchPresenterUpdate(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->findInsertIndex(Ljava/util/ArrayList;I)I
@@ -419,7 +712,6 @@ HSPLandroidx/appcompat/view/menu/MenuBuilder;->getContext()Landroid/content/Cont
HSPLandroidx/appcompat/view/menu/MenuBuilder;->getItem(I)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->getNonActionItems()Ljava/util/ArrayList;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->getOrdering(I)I
-HSPLandroidx/appcompat/view/menu/MenuBuilder;->getResources()Landroid/content/res/Resources;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->getVisibleItems()Ljava/util/ArrayList;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->hasVisibleItems()Z
HSPLandroidx/appcompat/view/menu/MenuBuilder;->onItemActionRequestChanged(Landroidx/appcompat/view/menu/MenuItemImpl;)V
@@ -428,8 +720,6 @@ HSPLandroidx/appcompat/view/menu/MenuBuilder;->onItemsChanged(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->removeItem(I)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->removeItemAtInt(IZ)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->setCallback(Landroidx/appcompat/view/menu/MenuBuilder$Callback;)V
-HSPLandroidx/appcompat/view/menu/MenuBuilder;->setHeaderInternal(ILjava/lang/CharSequence;ILandroid/graphics/drawable/Drawable;Landroid/view/View;)V
-HSPLandroidx/appcompat/view/menu/MenuBuilder;->setHeaderTitleInt(Ljava/lang/CharSequence;)Landroidx/appcompat/view/menu/MenuBuilder;
HSPLandroidx/appcompat/view/menu/MenuBuilder;->setOverrideVisibleItems(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->setShortcutsVisibleInner(Z)V
HSPLandroidx/appcompat/view/menu/MenuBuilder;->size()I
@@ -443,7 +733,6 @@ HSPLandroidx/appcompat/view/menu/MenuItemImpl;->getGroupId()I
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->getIcon()Landroid/graphics/drawable/Drawable;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->getItemId()I
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->getOrdering()I
-HSPLandroidx/appcompat/view/menu/MenuItemImpl;->getSubMenu()Landroid/view/SubMenu;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->getSupportActionProvider()Landroidx/core/view/ActionProvider;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->getTitle()Ljava/lang/CharSequence;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->getTitleCondensed()Ljava/lang/CharSequence;
@@ -456,8 +745,6 @@ HSPLandroidx/appcompat/view/menu/MenuItemImpl;->isEnabled()Z
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->isVisible()Z
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->requestsActionButton()Z
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->requiresActionButton()Z
-HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setActionView(Landroid/view/View;)Landroid/view/MenuItem;
-HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setActionView(Landroid/view/View;)Landroidx/core/internal/view/SupportMenuItem;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setAlphabeticShortcut(CI)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setCheckable(Z)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setChecked(Z)Landroid/view/MenuItem;
@@ -468,18 +755,12 @@ HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setIcon(I)Landroid/view/MenuItem
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setIconTintList(Landroid/content/res/ColorStateList;)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setIsActionButton(Z)V
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setNumericShortcut(CI)Landroid/view/MenuItem;
-HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setOnActionExpandListener(Landroid/view/MenuItem$OnActionExpandListener;)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setShowAsAction(I)V
-HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setSubMenu(Landroidx/appcompat/view/menu/SubMenuBuilder;)V
-HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setTitle(Ljava/lang/CharSequence;)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setTitleCondensed(Ljava/lang/CharSequence;)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setTooltipText(Ljava/lang/CharSequence;)Landroidx/core/internal/view/SupportMenuItem;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setVisible(Z)Landroid/view/MenuItem;
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->setVisibleInt(Z)Z
HSPLandroidx/appcompat/view/menu/MenuItemImpl;->showsTextAsAction()Z
-HSPLandroidx/appcompat/view/menu/SubMenuBuilder;->(Landroid/content/Context;Landroidx/appcompat/view/menu/MenuBuilder;Landroidx/appcompat/view/menu/MenuItemImpl;)V
-HSPLandroidx/appcompat/view/menu/SubMenuBuilder;->getItem()Landroid/view/MenuItem;
-HSPLandroidx/appcompat/view/menu/SubMenuBuilder;->setHeaderTitle(Ljava/lang/CharSequence;)Landroid/view/SubMenu;
HSPLandroidx/appcompat/widget/ActionMenuPresenter$ActionMenuPopupCallback;->(Landroidx/appcompat/widget/ActionMenuPresenter;)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter$OverflowMenuButton$1;->(Landroidx/appcompat/widget/ActionMenuPresenter$OverflowMenuButton;Landroid/view/View;Landroidx/appcompat/widget/ActionMenuPresenter;)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter$OverflowMenuButton;->(Landroidx/appcompat/widget/ActionMenuPresenter;Landroid/content/Context;)V
@@ -492,7 +773,6 @@ HSPLandroidx/appcompat/widget/ActionMenuPresenter;->flagActionItems()Z
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->getItemView(Landroidx/appcompat/view/menu/MenuItemImpl;Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->getOverflowIcon()Landroid/graphics/drawable/Drawable;
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->initForMenu(Landroid/content/Context;Landroidx/appcompat/view/menu/MenuBuilder;)V
-HSPLandroidx/appcompat/widget/ActionMenuPresenter;->isOverflowMenuShowing()Z
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->setExpandedActionViewsExclusive(Z)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->setMenuView(Landroidx/appcompat/widget/ActionMenuView;)V
HSPLandroidx/appcompat/widget/ActionMenuPresenter;->setReserveOverflow(Z)V
@@ -512,7 +792,6 @@ HSPLandroidx/appcompat/widget/ActionMenuView;->generateOverflowButtonLayoutParam
HSPLandroidx/appcompat/widget/ActionMenuView;->getMenu()Landroid/view/Menu;
HSPLandroidx/appcompat/widget/ActionMenuView;->getOverflowIcon()Landroid/graphics/drawable/Drawable;
HSPLandroidx/appcompat/widget/ActionMenuView;->initialize(Landroidx/appcompat/view/menu/MenuBuilder;)V
-HSPLandroidx/appcompat/widget/ActionMenuView;->isOverflowMenuShowing()Z
HSPLandroidx/appcompat/widget/ActionMenuView;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/ActionMenuView;->onMeasure(II)V
HSPLandroidx/appcompat/widget/ActionMenuView;->peekMenu()Landroidx/appcompat/view/menu/MenuBuilder;
@@ -521,12 +800,9 @@ HSPLandroidx/appcompat/widget/ActionMenuView;->setMenuCallbacks(Landroidx/appcom
HSPLandroidx/appcompat/widget/ActionMenuView;->setOnMenuItemClickListener(Landroidx/appcompat/widget/ActionMenuView$OnMenuItemClickListener;)V
HSPLandroidx/appcompat/widget/ActionMenuView;->setOverflowReserved(Z)V
HSPLandroidx/appcompat/widget/ActionMenuView;->setPopupTheme(I)V
-HSPLandroidx/appcompat/widget/AppCompatAutoCompleteTextView;->()V
-HSPLandroidx/appcompat/widget/AppCompatAutoCompleteTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroidx/appcompat/widget/AppCompatAutoCompleteTextView;->initEmojiKeyListener(Landroidx/appcompat/widget/AppCompatEmojiEditTextHelper;)V
-HSPLandroidx/appcompat/widget/AppCompatAutoCompleteTextView;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->(Landroid/view/View;)V
HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->applySupportBackgroundTint()V
+HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->onSetBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->onSetBackgroundResource(I)V
HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->setInternalBackgroundTint(Landroid/content/res/ColorStateList;)V
@@ -553,7 +829,6 @@ HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->()V
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains([II)Z
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
-HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintModeForDrawableRes(I)Landroid/graphics/PorterDuff$Mode;
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->()V
@@ -630,12 +905,13 @@ HSPLandroidx/appcompat/widget/AppCompatTextHelper$Api17Impl;->getCompoundDrawabl
HSPLandroidx/appcompat/widget/AppCompatTextHelper$Api17Impl;->setCompoundDrawablesRelativeWithIntrinsicBounds(Landroid/widget/TextView;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->(Landroid/widget/TextView;)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->applyCompoundDrawablesTints()V
-HSPLandroidx/appcompat/widget/AppCompatTextHelper;->createTintInfo(Landroid/content/Context;Landroidx/appcompat/widget/AppCompatDrawableManager;I)Landroidx/appcompat/widget/TintInfo;
+HSPLandroidx/appcompat/widget/AppCompatTextHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->onSetCompoundDrawables()V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->onSetTextAppearance(Landroid/content/Context;I)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->populateSurroundingTextIfNeeded(Landroid/widget/TextView;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V
HSPLandroidx/appcompat/widget/AppCompatTextHelper;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
+HSPLandroidx/appcompat/widget/AppCompatTextHelper;->updateTypefaceAndStyle(Landroid/content/Context;Landroidx/appcompat/widget/TintTypedArray;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->(Landroid/content/Context;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
@@ -652,7 +928,6 @@ HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawables(Landroid/
HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesRelativeWithIntrinsicBounds(IIII)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesRelativeWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
-HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesWithIntrinsicBounds(IIII)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setEmojiCompatEnabled(Z)V
HSPLandroidx/appcompat/widget/AppCompatTextView;->setFilters([Landroid/text/InputFilter;)V
@@ -688,7 +963,6 @@ HSPLandroidx/appcompat/widget/FitWindowsFrameLayout;->(Landroid/content/Co
HSPLandroidx/appcompat/widget/FitWindowsFrameLayout;->fitSystemWindows(Landroid/graphics/Rect;)Z
HSPLandroidx/appcompat/widget/ForwardingListener;->(Landroid/view/View;)V
HSPLandroidx/appcompat/widget/ForwardingListener;->onViewAttachedToWindow(Landroid/view/View;)V
-HSPLandroidx/appcompat/widget/ForwardingListener;->onViewDetachedFromWindow(Landroid/view/View;)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat$LayoutParams;->(II)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat$LayoutParams;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/LinearLayoutCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
@@ -723,7 +997,6 @@ HSPLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;->get(
HSPLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;->put(ILandroid/graphics/PorterDuff$Mode;Landroid/graphics/PorterDuffColorFilter;)Landroid/graphics/PorterDuffColorFilter;
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V
-HSPLandroidx/appcompat/widget/ResourceManagerInternal;->addTintListToCache(Landroid/content/Context;ILandroid/content/res/ColorStateList;)V
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->checkVectorDrawableSetup(Landroid/content/Context;)V
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->createCacheKey(Landroid/util/TypedValue;)J
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->createDrawableIfNeeded(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
@@ -735,7 +1008,6 @@ HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/con
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getPorterDuffColorFilter(ILandroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuffColorFilter;
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintListFromCache(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
-HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintMode(I)Landroid/graphics/PorterDuff$Mode;
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->installDefaultInflateDelegates(Landroidx/appcompat/widget/ResourceManagerInternal;)V
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->isVectorDrawable(Landroid/graphics/drawable/Drawable;)Z
HSPLandroidx/appcompat/widget/ResourceManagerInternal;->loadDrawableFromDelegates(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
@@ -749,36 +1021,6 @@ HSPLandroidx/appcompat/widget/RtlSpacingHelper;->getStart()I
HSPLandroidx/appcompat/widget/RtlSpacingHelper;->setAbsolute(II)V
HSPLandroidx/appcompat/widget/RtlSpacingHelper;->setDirection(Z)V
HSPLandroidx/appcompat/widget/RtlSpacingHelper;->setRelative(II)V
-HSPLandroidx/appcompat/widget/SearchView$10;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$1;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$2;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$3;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$4;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$5;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$6;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$7;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$8;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$9;->(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView$SearchAutoComplete$1;->(Landroidx/appcompat/widget/SearchView$SearchAutoComplete;)V
-HSPLandroidx/appcompat/widget/SearchView$SearchAutoComplete;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroidx/appcompat/widget/SearchView$SearchAutoComplete;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroidx/appcompat/widget/SearchView$SearchAutoComplete;->enoughToFilter()Z
-HSPLandroidx/appcompat/widget/SearchView$SearchAutoComplete;->getSearchViewTextMinWidthDp()I
-HSPLandroidx/appcompat/widget/SearchView$SearchAutoComplete;->onFinishInflate()V
-HSPLandroidx/appcompat/widget/SearchView$SearchAutoComplete;->setSearchView(Landroidx/appcompat/widget/SearchView;)V
-HSPLandroidx/appcompat/widget/SearchView;->()V
-HSPLandroidx/appcompat/widget/SearchView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroidx/appcompat/widget/SearchView;->getDecoratedHint(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroidx/appcompat/widget/SearchView;->getQueryHint()Ljava/lang/CharSequence;
-HSPLandroidx/appcompat/widget/SearchView;->isSubmitAreaEnabled()Z
-HSPLandroidx/appcompat/widget/SearchView;->setIconifiedByDefault(Z)V
-HSPLandroidx/appcompat/widget/SearchView;->setMaxWidth(I)V
-HSPLandroidx/appcompat/widget/SearchView;->updateCloseButton()V
-HSPLandroidx/appcompat/widget/SearchView;->updateQueryHint()V
-HSPLandroidx/appcompat/widget/SearchView;->updateSubmitArea()V
-HSPLandroidx/appcompat/widget/SearchView;->updateSubmitButton(Z)V
-HSPLandroidx/appcompat/widget/SearchView;->updateViewsVisibility(Z)V
-HSPLandroidx/appcompat/widget/SearchView;->updateVoiceButton(Z)V
HSPLandroidx/appcompat/widget/ThemeUtils;->()V
HSPLandroidx/appcompat/widget/ThemeUtils;->checkAppCompatTheme(Landroid/view/View;Landroid/content/Context;)V
HSPLandroidx/appcompat/widget/TintContextWrapper;->()V
@@ -816,9 +1058,6 @@ HSPLandroidx/appcompat/widget/Toolbar$ExpandedActionViewMenuPresenter;->initForM
HSPLandroidx/appcompat/widget/Toolbar$ExpandedActionViewMenuPresenter;->updateMenuView(Z)V
HSPLandroidx/appcompat/widget/Toolbar$LayoutParams;->(II)V
HSPLandroidx/appcompat/widget/Toolbar$LayoutParams;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroidx/appcompat/widget/Toolbar$SavedState$1;->()V
-HSPLandroidx/appcompat/widget/Toolbar$SavedState;->()V
-HSPLandroidx/appcompat/widget/Toolbar$SavedState;->(Landroid/os/Parcelable;)V
HSPLandroidx/appcompat/widget/Toolbar;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/appcompat/widget/Toolbar;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/appcompat/widget/Toolbar;->addCustomViewsWithGravity(Ljava/util/List;I)V
@@ -854,7 +1093,6 @@ HSPLandroidx/appcompat/widget/Toolbar;->getVerticalMargins(Landroid/view/View;)I
HSPLandroidx/appcompat/widget/Toolbar;->getViewListMeasuredWidth(Ljava/util/List;[I)I
HSPLandroidx/appcompat/widget/Toolbar;->invalidateMenu()V
HSPLandroidx/appcompat/widget/Toolbar;->isChildOrHidden(Landroid/view/View;)Z
-HSPLandroidx/appcompat/widget/Toolbar;->isOverflowMenuShowing()Z
HSPLandroidx/appcompat/widget/Toolbar;->layoutChildLeft(Landroid/view/View;I[II)I
HSPLandroidx/appcompat/widget/Toolbar;->layoutChildRight(Landroid/view/View;I[II)I
HSPLandroidx/appcompat/widget/Toolbar;->measureChildCollapseMargins(Landroid/view/View;IIII[I)I
@@ -864,7 +1102,6 @@ HSPLandroidx/appcompat/widget/Toolbar;->onCreateMenu()V
HSPLandroidx/appcompat/widget/Toolbar;->onLayout(ZIIII)V
HSPLandroidx/appcompat/widget/Toolbar;->onMeasure(II)V
HSPLandroidx/appcompat/widget/Toolbar;->onRtlPropertiesChanged(I)V
-HSPLandroidx/appcompat/widget/Toolbar;->onSaveInstanceState()Landroid/os/Parcelable;
HSPLandroidx/appcompat/widget/Toolbar;->setBackInvokedCallbackEnabled(Z)V
HSPLandroidx/appcompat/widget/Toolbar;->setMenuCallbacks(Landroidx/appcompat/view/menu/MenuPresenter$Callback;Landroidx/appcompat/view/menu/MenuBuilder$Callback;)V
HSPLandroidx/appcompat/widget/Toolbar;->setNavigationContentDescription(I)V
@@ -984,40 +1221,6 @@ HSPLandroidx/asynclayoutinflater/view/AsyncLayoutInflater;->inflateInternal(ILan
HSPLandroidx/asynclayoutinflater/view/AsyncLayoutInflater;->triggerCallbacks(Landroidx/asynclayoutinflater/view/AsyncLayoutInflater$InflateRequest;Landroidx/asynclayoutinflater/view/AsyncLayoutInflater$InflateThread;)V
HSPLandroidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi24Impl$OutputConfigurationParamsApi24$$ExternalSyntheticBackport1;->m(J)I
HSPLandroidx/camera/view/PreviewView$1$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReference;Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/cardview/R$styleable;->()V
-HSPLandroidx/cardview/widget/CardView$1;->(Landroidx/cardview/widget/CardView;)V
-HSPLandroidx/cardview/widget/CardView$1;->getCardBackground()Landroid/graphics/drawable/Drawable;
-HSPLandroidx/cardview/widget/CardView$1;->getCardView()Landroid/view/View;
-HSPLandroidx/cardview/widget/CardView$1;->getPreventCornerOverlap()Z
-HSPLandroidx/cardview/widget/CardView$1;->getUseCompatPadding()Z
-HSPLandroidx/cardview/widget/CardView$1;->setCardBackground(Landroid/graphics/drawable/Drawable;)V
-HSPLandroidx/cardview/widget/CardView$1;->setShadowPadding(IIII)V
-HSPLandroidx/cardview/widget/CardView;->()V
-HSPLandroidx/cardview/widget/CardView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroidx/cardview/widget/CardView;->access$001(Landroidx/cardview/widget/CardView;IIII)V
-HSPLandroidx/cardview/widget/CardView;->getCardBackgroundColor()Landroid/content/res/ColorStateList;
-HSPLandroidx/cardview/widget/CardView;->getCardElevation()F
-HSPLandroidx/cardview/widget/CardView;->getContentPaddingBottom()I
-HSPLandroidx/cardview/widget/CardView;->getContentPaddingLeft()I
-HSPLandroidx/cardview/widget/CardView;->getContentPaddingRight()I
-HSPLandroidx/cardview/widget/CardView;->getContentPaddingTop()I
-HSPLandroidx/cardview/widget/CardView;->getPreventCornerOverlap()Z
-HSPLandroidx/cardview/widget/CardView;->getUseCompatPadding()Z
-HSPLandroidx/cardview/widget/CardView;->onMeasure(II)V
-HSPLandroidx/cardview/widget/CardView;->setContentPadding(IIII)V
-HSPLandroidx/cardview/widget/CardViewApi21Impl;->()V
-HSPLandroidx/cardview/widget/CardViewApi21Impl;->getBackgroundColor(Landroidx/cardview/widget/CardViewDelegate;)Landroid/content/res/ColorStateList;
-HSPLandroidx/cardview/widget/CardViewApi21Impl;->getCardBackground(Landroidx/cardview/widget/CardViewDelegate;)Landroidx/cardview/widget/RoundRectDrawable;
-HSPLandroidx/cardview/widget/CardViewApi21Impl;->getElevation(Landroidx/cardview/widget/CardViewDelegate;)F
-HSPLandroidx/cardview/widget/CardViewApi21Impl;->initStatic()V
-HSPLandroidx/cardview/widget/CardViewApi21Impl;->initialize(Landroidx/cardview/widget/CardViewDelegate;Landroid/content/Context;Landroid/content/res/ColorStateList;FFF)V
-HSPLandroidx/cardview/widget/CardViewApi21Impl;->setMaxElevation(Landroidx/cardview/widget/CardViewDelegate;F)V
-HSPLandroidx/cardview/widget/CardViewApi21Impl;->updatePadding(Landroidx/cardview/widget/CardViewDelegate;)V
-HSPLandroidx/cardview/widget/RoundRectDrawable;->(Landroid/content/res/ColorStateList;F)V
-HSPLandroidx/cardview/widget/RoundRectDrawable;->getColor()Landroid/content/res/ColorStateList;
-HSPLandroidx/cardview/widget/RoundRectDrawable;->setBackground(Landroid/content/res/ColorStateList;)V
-HSPLandroidx/cardview/widget/RoundRectDrawable;->setPadding(FZZ)V
-HSPLandroidx/cardview/widget/RoundRectDrawable;->updateBounds(Landroid/graphics/Rect;)V
HSPLandroidx/collection/ArrayMap$EntrySet;->(Landroidx/collection/ArrayMap;)V
HSPLandroidx/collection/ArrayMap$EntrySet;->iterator()Ljava/util/Iterator;
HSPLandroidx/collection/ArrayMap$MapIterator;->(Landroidx/collection/ArrayMap;)V
@@ -1103,11 +1306,8 @@ HSPLandroidx/collection/SimpleArrayMap;->valueAt(I)Ljava/lang/Object;
HSPLandroidx/collection/SparseArrayCompat;->()V
HSPLandroidx/collection/SparseArrayCompat;->()V
HSPLandroidx/collection/SparseArrayCompat;->(I)V
-HSPLandroidx/collection/SparseArrayCompat;->append(ILjava/lang/Object;)V
-HSPLandroidx/collection/SparseArrayCompat;->containsValue(Ljava/lang/Object;)Z
HSPLandroidx/collection/SparseArrayCompat;->get(I)Ljava/lang/Object;
HSPLandroidx/collection/SparseArrayCompat;->get(ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/collection/SparseArrayCompat;->indexOfValue(Ljava/lang/Object;)I
HSPLandroidx/collection/SparseArrayCompat;->keyAt(I)I
HSPLandroidx/collection/SparseArrayCompat;->put(ILjava/lang/Object;)V
HSPLandroidx/collection/SparseArrayCompat;->size()I
@@ -1129,6 +1329,7 @@ HSPLandroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods$$Extern
HSPLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->()V
HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->(Landroidx/constraintlayout/core/ArrayRow;Landroidx/constraintlayout/core/Cache;)V
+HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->add(Landroidx/constraintlayout/core/SolverVariable;FZ)V
HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->clear()V
HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->contains(Landroidx/constraintlayout/core/SolverVariable;)Z
HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->divideByAmount(F)V
@@ -1137,7 +1338,6 @@ HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->getCurrentSize()I
HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->getVariable(I)Landroidx/constraintlayout/core/SolverVariable;
HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->getVariableValue(I)F
HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->invert()V
-HSPLandroidx/constraintlayout/core/ArrayRow;->(Landroidx/constraintlayout/core/Cache;)V
HSPLandroidx/constraintlayout/core/ArrayRow;->addError(Landroidx/constraintlayout/core/LinearSystem;I)Landroidx/constraintlayout/core/ArrayRow;
HSPLandroidx/constraintlayout/core/ArrayRow;->addSingleError(Landroidx/constraintlayout/core/SolverVariable;I)Landroidx/constraintlayout/core/ArrayRow;
HSPLandroidx/constraintlayout/core/ArrayRow;->chooseSubject(Landroidx/constraintlayout/core/LinearSystem;)Z
@@ -1154,7 +1354,6 @@ HSPLandroidx/constraintlayout/core/ArrayRow;->hasKeyVariable()Z
HSPLandroidx/constraintlayout/core/ArrayRow;->hasVariable(Landroidx/constraintlayout/core/SolverVariable;)Z
HSPLandroidx/constraintlayout/core/ArrayRow;->isEmpty()Z
HSPLandroidx/constraintlayout/core/ArrayRow;->isNew(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/LinearSystem;)Z
-HSPLandroidx/constraintlayout/core/ArrayRow;->pivot(Landroidx/constraintlayout/core/SolverVariable;)V
HSPLandroidx/constraintlayout/core/ArrayRow;->reset()V
HSPLandroidx/constraintlayout/core/ArrayRow;->updateFromFinalVariable(Landroidx/constraintlayout/core/LinearSystem;Landroidx/constraintlayout/core/SolverVariable;Z)V
HSPLandroidx/constraintlayout/core/Cache;->()V
@@ -1203,6 +1402,7 @@ HSPLandroidx/constraintlayout/core/PriorityGoalRow;->clear()V
HSPLandroidx/constraintlayout/core/PriorityGoalRow;->getPivotCandidate(Landroidx/constraintlayout/core/LinearSystem;[Z)Landroidx/constraintlayout/core/SolverVariable;
HSPLandroidx/constraintlayout/core/PriorityGoalRow;->isEmpty()Z
HSPLandroidx/constraintlayout/core/PriorityGoalRow;->removeGoal(Landroidx/constraintlayout/core/SolverVariable;)V
+HSPLandroidx/constraintlayout/core/PriorityGoalRow;->updateFromRow(Landroidx/constraintlayout/core/LinearSystem;Landroidx/constraintlayout/core/ArrayRow;Z)V
HSPLandroidx/constraintlayout/core/SolverVariable$Type;->()V
HSPLandroidx/constraintlayout/core/SolverVariable$Type;->(Ljava/lang/String;I)V
HSPLandroidx/constraintlayout/core/SolverVariable;->()V
@@ -1225,7 +1425,6 @@ HSPLandroidx/constraintlayout/core/widgets/Chain;->applyChainConstraints(Landroi
HSPLandroidx/constraintlayout/core/widgets/Chain;->applyChainConstraints(Landroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;Landroidx/constraintlayout/core/LinearSystem;Ljava/util/ArrayList;I)V
HSPLandroidx/constraintlayout/core/widgets/ChainHead;->(Landroidx/constraintlayout/core/widgets/ConstraintWidget;IZ)V
HSPLandroidx/constraintlayout/core/widgets/ChainHead;->define()V
-HSPLandroidx/constraintlayout/core/widgets/ChainHead;->defineChainProperties()V
HSPLandroidx/constraintlayout/core/widgets/ChainHead;->isMatchConstraintEqualityCandidate(Landroidx/constraintlayout/core/widgets/ConstraintWidget;I)Z
HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor$1;->()V
HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor$Type;->()V
@@ -1356,6 +1555,7 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->invalidat
HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->isHeightMeasuredTooSmall()Z
HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->isRtl()Z
HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->isWidthMeasuredTooSmall()Z
+HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->layout()V
HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->measure(IIIIIIIII)J
HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->measure(ILandroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measure;I)Z
HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->optimizeFor(I)Z
@@ -1395,6 +1595,7 @@ HSPLandroidx/constraintlayout/core/widgets/WidgetContainer;->resetSolverVariable
HSPLandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measure;->()V
HSPLandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measure;->()V
HSPLandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure;->(Landroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;)V
+HSPLandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure;->measure(Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;Landroidx/constraintlayout/core/widgets/ConstraintWidget;I)Z
HSPLandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure;->measureChildren(Landroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;)V
HSPLandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure;->solveLinearSystem(Landroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;Ljava/lang/String;III)V
HSPLandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure;->solverMeasure(Landroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;IIIIIIIII)J
@@ -1404,6 +1605,7 @@ HSPLandroidx/constraintlayout/core/widgets/analyzer/DependencyGraph;->invalidate
HSPLandroidx/constraintlayout/core/widgets/analyzer/DependencyGraph;->invalidateMeasures()V
HSPLandroidx/constraintlayout/core/widgets/analyzer/DependencyGraph;->setMeasurer(Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;)V
HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->()V
+HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->canMeasure(ILandroidx/constraintlayout/core/widgets/ConstraintWidget;)Z
HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->horizontalSolvingPass(ILandroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;Z)V
HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solveBarrier(ILandroidx/constraintlayout/core/widgets/Barrier;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;IZ)V
HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solveHorizontalCenterConstraints(ILandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;Landroidx/constraintlayout/core/widgets/ConstraintWidget;Z)V
@@ -1411,6 +1613,7 @@ HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solveHorizontalMatc
HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solveVerticalCenterConstraints(ILandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;Landroidx/constraintlayout/core/widgets/ConstraintWidget;)V
HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solveVerticalMatchConstraint(ILandroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;Landroidx/constraintlayout/core/widgets/ConstraintWidget;)V
HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solvingPass(Landroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;)V
+HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->verticalSolvingPass(ILandroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;)V
HSPLandroidx/constraintlayout/widget/Barrier;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/constraintlayout/widget/Barrier;->init(Landroid/util/AttributeSet;)V
HSPLandroidx/constraintlayout/widget/Barrier;->resolveRtl(Landroidx/constraintlayout/core/widgets/ConstraintWidget;Z)V
@@ -1433,18 +1636,16 @@ HSPLandroidx/constraintlayout/widget/ConstraintHelper;->updatePreLayout(Landroid
HSPLandroidx/constraintlayout/widget/ConstraintHelper;->validateParams()V
HSPLandroidx/constraintlayout/widget/ConstraintLayout$1;->()V
HSPLandroidx/constraintlayout/widget/ConstraintLayout$LayoutParams$Table;->()V
-HSPLandroidx/constraintlayout/widget/ConstraintLayout$LayoutParams;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroidx/constraintlayout/widget/ConstraintLayout$LayoutParams;->validate()V
HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->(Landroidx/constraintlayout/widget/ConstraintLayout;Landroidx/constraintlayout/widget/ConstraintLayout;)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->captureLayoutInfo(IIIIII)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->didMeasures()V
HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->isSimilarSpec(III)Z
-HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->measure(Landroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measure;)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->()V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->access$000(Landroidx/constraintlayout/widget/ConstraintLayout;)I
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->access$100(Landroidx/constraintlayout/widget/ConstraintLayout;)Ljava/util/ArrayList;
-HSPLandroidx/constraintlayout/widget/ConstraintLayout;->applyConstraintsFromLayoutParams(ZLandroid/view/View;Landroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/widget/ConstraintLayout$LayoutParams;Landroid/util/SparseArray;)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->dispatchDraw(Landroid/graphics/Canvas;)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
@@ -1462,6 +1663,7 @@ HSPLandroidx/constraintlayout/widget/ConstraintLayout;->onViewRemoved(Landroid/v
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->requestLayout()V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->resolveMeasuredDimension(IIIIZZ)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->resolveSystem(Landroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;III)V
+HSPLandroidx/constraintlayout/widget/ConstraintLayout;->setChildrenConstraints()V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->setConstraintSet(Landroidx/constraintlayout/widget/ConstraintSet;)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->setId(I)V
HSPLandroidx/constraintlayout/widget/ConstraintLayout;->setMinHeight(I)V
@@ -1522,9 +1724,6 @@ HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$LayoutParams;->setNested
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$LayoutParams;->shouldDodge(Landroid/view/View;I)Z
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$OnPreDrawListener;->(Landroidx/coordinatorlayout/widget/CoordinatorLayout;)V
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$OnPreDrawListener;->onPreDraw()Z
-HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$SavedState$1;->()V
-HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$SavedState;->()V
-HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$SavedState;->(Landroid/os/Parcelable;)V
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$ViewElevationComparator;->()V
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$ViewElevationComparator;->compare(Landroid/view/View;Landroid/view/View;)I
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$ViewElevationComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
@@ -1560,7 +1759,6 @@ HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout;->onLayoutChild(Landroid
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout;->onMeasure(II)V
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout;->onMeasureChild(Landroid/view/View;IIII)V
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout;->onNestedScrollAccepted(Landroid/view/View;Landroid/view/View;II)V
-HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout;->onSaveInstanceState()Landroid/os/Parcelable;
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;II)Z
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout;->onStopNestedScroll(Landroid/view/View;I)V
HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout;->onTouchEvent(Landroid/view/MotionEvent;)Z
@@ -1596,11 +1794,8 @@ HSPLandroidx/core/app/ActivityCompat;->startPostponedEnterTransition(Landroid/ap
HSPLandroidx/core/app/AppOpsManagerCompat$Api23Impl$$ExternalSyntheticApiModelOutline1;->m(Ljava/lang/String;)Ljava/lang/String;
HSPLandroidx/core/app/AppOpsManagerCompat$Api23Impl;->permissionToOp(Ljava/lang/String;)Ljava/lang/String;
HSPLandroidx/core/app/AppOpsManagerCompat;->permissionToOp(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroidx/core/app/BundleCompat;->getBinder(Landroid/os/Bundle;Ljava/lang/String;)Landroid/os/IBinder;
-HSPLandroidx/core/app/BundleCompat;->putBinder(Landroid/os/Bundle;Ljava/lang/String;Landroid/os/IBinder;)V
HSPLandroidx/core/app/ComponentActivity;->()V
HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
-HSPLandroidx/core/app/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V
HSPLandroidx/core/app/CoreComponentFactory;->()V
HSPLandroidx/core/app/CoreComponentFactory;->checkCompatWrapper(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;
@@ -1705,18 +1900,6 @@ HSPLandroidx/core/graphics/drawable/DrawableCompat;->unwrap(Landroid/graphics/dr
HSPLandroidx/core/graphics/drawable/DrawableCompat;->wrap(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
HSPLandroidx/core/math/MathUtils;->clamp(FFF)F
HSPLandroidx/core/math/MathUtils;->clamp(III)I
-HSPLandroidx/core/os/BuildCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(I)I
-HSPLandroidx/core/os/BuildCompat$Api30Impl;->()V
-HSPLandroidx/core/os/BuildCompat$Api30Impl;->()V
-HSPLandroidx/core/os/BuildCompat$Api30Impl;->getExtensionVersion(I)I
-HSPLandroidx/core/os/BuildCompat;->()V
-HSPLandroidx/core/os/BuildCompat;->()V
-HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z
-HSPLandroidx/core/os/BundleCompat$Api18Impl;->getBinder(Landroid/os/Bundle;Ljava/lang/String;)Landroid/os/IBinder;
-HSPLandroidx/core/os/BundleCompat$Api18Impl;->putBinder(Landroid/os/Bundle;Ljava/lang/String;Landroid/os/IBinder;)V
-HSPLandroidx/core/os/BundleCompat;->getBinder(Landroid/os/Bundle;Ljava/lang/String;)Landroid/os/IBinder;
-HSPLandroidx/core/os/BundleCompat;->putBinder(Landroid/os/Bundle;Ljava/lang/String;Landroid/os/IBinder;)V
-HSPLandroidx/core/os/BundleKt;->bundleOf([Lkotlin/Pair;)Landroid/os/Bundle;
HSPLandroidx/core/os/CancellationSignal;->()V
HSPLandroidx/core/os/CancellationSignal;->setOnCancelListener(Landroidx/core/os/CancellationSignal$OnCancelListener;)V
HSPLandroidx/core/os/CancellationSignal;->waitForCancelFinishedLocked()V
@@ -1749,10 +1932,6 @@ HSPLandroidx/core/os/TraceCompat;->endSection()V
HSPLandroidx/core/os/UserManagerCompat$Api24Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/UserManager;)Z
HSPLandroidx/core/os/UserManagerCompat$Api24Impl;->isUserUnlocked(Landroid/content/Context;)Z
HSPLandroidx/core/os/UserManagerCompat;->isUserUnlocked(Landroid/content/Context;)Z
-HSPLandroidx/core/text/util/LinkifyCompat$$ExternalSyntheticLambda0;->()V
-HSPLandroidx/core/text/util/LinkifyCompat;->()V
-HSPLandroidx/core/text/util/LinkifyCompat;->addLinks(Landroid/text/Spannable;I)Z
-HSPLandroidx/core/text/util/LinkifyCompat;->shouldAddLinksFallbackToFramework()Z
HSPLandroidx/core/util/ObjectsCompat$Api19Impl;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z
HSPLandroidx/core/util/ObjectsCompat$Api19Impl;->hash([Ljava/lang/Object;)I
HSPLandroidx/core/util/ObjectsCompat;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z
@@ -1822,6 +2001,7 @@ HSPLandroidx/core/view/NestedScrollingChildHelper;->isNestedScrollingEnabled()Z
HSPLandroidx/core/view/NestedScrollingChildHelper;->setNestedScrollingEnabled(Z)V
HSPLandroidx/core/view/NestedScrollingChildHelper;->setNestedScrollingParentForType(ILandroid/view/ViewParent;)V
HSPLandroidx/core/view/NestedScrollingChildHelper;->startNestedScroll(II)Z
+HSPLandroidx/core/view/NestedScrollingChildHelper;->stopNestedScroll()V
HSPLandroidx/core/view/NestedScrollingChildHelper;->stopNestedScroll(I)V
HSPLandroidx/core/view/NestedScrollingParentHelper;->(Landroid/view/ViewGroup;)V
HSPLandroidx/core/view/NestedScrollingParentHelper;->onNestedScrollAccepted(Landroid/view/View;Landroid/view/View;II)V
@@ -1961,14 +2141,11 @@ HSPLandroidx/core/view/ViewGroupKt$children$1;->(Landroid/view/ViewGroup;)
HSPLandroidx/core/view/ViewGroupKt$children$1;->iterator()Ljava/util/Iterator;
HSPLandroidx/core/view/ViewGroupKt$iterator$1;->(Landroid/view/ViewGroup;)V
HSPLandroidx/core/view/ViewGroupKt$iterator$1;->hasNext()Z
-HSPLandroidx/core/view/ViewGroupKt$iterator$1;->next()Landroid/view/View;
-HSPLandroidx/core/view/ViewGroupKt$iterator$1;->next()Ljava/lang/Object;
HSPLandroidx/core/view/ViewGroupKt;->getChildren(Landroid/view/ViewGroup;)Lkotlin/sequences/Sequence;
HSPLandroidx/core/view/ViewGroupKt;->iterator(Landroid/view/ViewGroup;)Ljava/util/Iterator;
HSPLandroidx/core/view/ViewKt$doOnPreDraw$1;->(Lkotlin/jvm/functions/Function1;Landroid/view/View;)V
HSPLandroidx/core/view/ViewKt$doOnPreDraw$1;->run()V
HSPLandroidx/core/view/ViewKt;->doOnPreDraw(Landroid/view/View;Lkotlin/jvm/functions/Function1;)Landroidx/core/view/OneShotPreDrawListener;
-HSPLandroidx/core/view/ViewKt;->isVisible(Landroid/view/View;)Z
HSPLandroidx/core/view/ViewParentCompat;->onNestedScrollAccepted(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;II)V
HSPLandroidx/core/view/ViewParentCompat;->onStartNestedScroll(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;II)Z
HSPLandroidx/core/view/ViewParentCompat;->onStopNestedScroll(Landroid/view/ViewParent;Landroid/view/View;I)V
@@ -2099,13 +2276,8 @@ HSPLandroidx/core/widget/TextViewCompat;->setLineHeight(Landroid/widget/TextView
HSPLandroidx/core/widget/TextViewCompat;->wrapCustomSelectionActionModeCallback(Landroid/widget/TextView;Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode$Callback;
HSPLandroidx/core/widget/TextViewOnReceiveContentListener;->()V
HSPLandroidx/customview/poolingcontainer/PoolingContainer;->()V
+HSPLandroidx/customview/poolingcontainer/PoolingContainer;->callPoolingContainerOnReleaseForChildren(Landroid/view/ViewGroup;)V
HSPLandroidx/customview/poolingcontainer/PoolingContainer;->setPoolingContainer(Landroid/view/View;Z)V
-HSPLandroidx/customview/view/AbsSavedState$1;->()V
-HSPLandroidx/customview/view/AbsSavedState$2;->()V
-HSPLandroidx/customview/view/AbsSavedState;->()V
-HSPLandroidx/customview/view/AbsSavedState;->()V
-HSPLandroidx/customview/view/AbsSavedState;->(Landroid/os/Parcelable;)V
-HSPLandroidx/customview/view/AbsSavedState;->(Landroidx/customview/view/AbsSavedState$1;)V
HSPLandroidx/customview/widget/ExploreByTouchHelper$1;->()V
HSPLandroidx/customview/widget/ExploreByTouchHelper$2;->()V
HSPLandroidx/customview/widget/ExploreByTouchHelper;->()V
@@ -2176,7 +2348,6 @@ HSPLandroidx/emoji2/text/SpannableBuilder$WatcherWrapper;->(Ljava/lang/Obj
HSPLandroidx/emoji2/text/SpannableBuilder$WatcherWrapper;->onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V
HSPLandroidx/emoji2/text/SpannableBuilder;->(Ljava/lang/Class;Ljava/lang/CharSequence;)V
HSPLandroidx/emoji2/text/SpannableBuilder;->create(Ljava/lang/Class;Ljava/lang/CharSequence;)Landroidx/emoji2/text/SpannableBuilder;
-HSPLandroidx/emoji2/text/SpannableBuilder;->getSpanEnd(Ljava/lang/Object;)I
HSPLandroidx/emoji2/text/SpannableBuilder;->getSpanFlags(Ljava/lang/Object;)I
HSPLandroidx/emoji2/text/SpannableBuilder;->getSpanStart(Ljava/lang/Object;)I
HSPLandroidx/emoji2/text/SpannableBuilder;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
@@ -2267,7 +2438,6 @@ HSPLandroidx/fragment/app/Fragment$7;->apply(Ljava/lang/Void;)Landroidx/activity
HSPLandroidx/fragment/app/Fragment$9;->(Landroidx/fragment/app/Fragment;Landroidx/arch/core/util/Function;Ljava/util/concurrent/atomic/AtomicReference;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)V
HSPLandroidx/fragment/app/Fragment$9;->onPreAttached()V
HSPLandroidx/fragment/app/Fragment$AnimationInfo;->()V
-HSPLandroidx/fragment/app/Fragment$Api19Impl;->cancelPendingInputEvents(Landroid/view/View;)V
HSPLandroidx/fragment/app/Fragment$OnPreAttachedListener;->()V
HSPLandroidx/fragment/app/Fragment$OnPreAttachedListener;->(Landroidx/fragment/app/Fragment$1;)V
HSPLandroidx/fragment/app/Fragment;->$r8$lambda$Cl7MxTaA6NVZ8I5KAGBxRTLl1sc(Landroidx/fragment/app/Fragment;)V
@@ -2284,7 +2454,6 @@ HSPLandroidx/fragment/app/Fragment;->getChildFragmentManager()Landroidx/fragment
HSPLandroidx/fragment/app/Fragment;->getContext()Landroid/content/Context;
HSPLandroidx/fragment/app/Fragment;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;
HSPLandroidx/fragment/app/Fragment;->getFocusedView()Landroid/view/View;
-HSPLandroidx/fragment/app/Fragment;->getHost()Ljava/lang/Object;
HSPLandroidx/fragment/app/Fragment;->getId()I
HSPLandroidx/fragment/app/Fragment;->getLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;
HSPLandroidx/fragment/app/Fragment;->getLifecycle()Landroidx/lifecycle/Lifecycle;
@@ -2317,13 +2486,12 @@ HSPLandroidx/fragment/app/Fragment;->onAttachFragment(Landroidx/fragment/app/Fra
HSPLandroidx/fragment/app/Fragment;->onCreate(Landroid/os/Bundle;)V
HSPLandroidx/fragment/app/Fragment;->onCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;
HSPLandroidx/fragment/app/Fragment;->onGetLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;
+HSPLandroidx/fragment/app/Fragment;->onInflate(Landroid/app/Activity;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
HSPLandroidx/fragment/app/Fragment;->onInflate(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
HSPLandroidx/fragment/app/Fragment;->onPause()V
HSPLandroidx/fragment/app/Fragment;->onPrimaryNavigationFragmentChanged(Z)V
HSPLandroidx/fragment/app/Fragment;->onResume()V
-HSPLandroidx/fragment/app/Fragment;->onSaveInstanceState(Landroid/os/Bundle;)V
HSPLandroidx/fragment/app/Fragment;->onStart()V
-HSPLandroidx/fragment/app/Fragment;->onStop()V
HSPLandroidx/fragment/app/Fragment;->onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V
HSPLandroidx/fragment/app/Fragment;->onViewStateRestored(Landroid/os/Bundle;)V
HSPLandroidx/fragment/app/Fragment;->performActivityCreated(Landroid/os/Bundle;)V
@@ -2336,9 +2504,7 @@ HSPLandroidx/fragment/app/Fragment;->performPause()V
HSPLandroidx/fragment/app/Fragment;->performPrepareOptionsMenu(Landroid/view/Menu;)Z
HSPLandroidx/fragment/app/Fragment;->performPrimaryNavigationFragmentChanged()V
HSPLandroidx/fragment/app/Fragment;->performResume()V
-HSPLandroidx/fragment/app/Fragment;->performSaveInstanceState(Landroid/os/Bundle;)V
HSPLandroidx/fragment/app/Fragment;->performStart()V
-HSPLandroidx/fragment/app/Fragment;->performStop()V
HSPLandroidx/fragment/app/Fragment;->performViewCreated()V
HSPLandroidx/fragment/app/Fragment;->prepareCallInternal(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/arch/core/util/Function;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
HSPLandroidx/fragment/app/Fragment;->registerForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
@@ -2359,7 +2525,6 @@ HSPLandroidx/fragment/app/Fragment;->setPopDirection(Z)V
HSPLandroidx/fragment/app/Fragment;->setPostOnViewCreatedAlpha(F)V
HSPLandroidx/fragment/app/Fragment;->setSharedElementNames(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda0;->(Landroidx/fragment/app/FragmentActivity;)V
-HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda0;->saveState()Landroid/os/Bundle;
HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda1;->(Landroidx/fragment/app/FragmentActivity;)V
HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda2;->(Landroidx/fragment/app/FragmentActivity;)V
HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda3;->(Landroidx/fragment/app/FragmentActivity;)V
@@ -2378,8 +2543,6 @@ HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getViewModelStore()La
HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->invalidateMenu()V
HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->onAttachFragment(Landroidx/fragment/app/FragmentManager;Landroidx/fragment/app/Fragment;)V
HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->onFindViewById(I)Landroid/view/View;
-HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->onGetHost()Landroidx/fragment/app/FragmentActivity;
-HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->onGetHost()Ljava/lang/Object;
HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->onGetLayoutInflater()Landroid/view/LayoutInflater;
HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->onHasView()Z
HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->onSupportInvalidateOptionsMenu()V
@@ -2389,12 +2552,10 @@ HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->removeOnMultiWindowMo
HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->removeOnPictureInPictureModeChangedListener(Landroidx/core/util/Consumer;)V
HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->removeOnTrimMemoryListener(Landroidx/core/util/Consumer;)V
HSPLandroidx/fragment/app/FragmentActivity;->$r8$lambda$euPNEtWNfVdMY89Jt5kWt_WEHqw(Landroidx/fragment/app/FragmentActivity;Landroid/content/Context;)V
-HSPLandroidx/fragment/app/FragmentActivity;->$r8$lambda$t3WwJ1XbNlapyNW0l552nMkkXdo(Landroidx/fragment/app/FragmentActivity;)Landroid/os/Bundle;
HSPLandroidx/fragment/app/FragmentActivity;->()V
HSPLandroidx/fragment/app/FragmentActivity;->dispatchFragmentsOnCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
HSPLandroidx/fragment/app/FragmentActivity;->getSupportFragmentManager()Landroidx/fragment/app/FragmentManager;
HSPLandroidx/fragment/app/FragmentActivity;->init()V
-HSPLandroidx/fragment/app/FragmentActivity;->lambda$init$0()Landroid/os/Bundle;
HSPLandroidx/fragment/app/FragmentActivity;->lambda$init$3(Landroid/content/Context;)V
HSPLandroidx/fragment/app/FragmentActivity;->markFragmentsCreated()V
HSPLandroidx/fragment/app/FragmentActivity;->markState(Landroidx/fragment/app/FragmentManager;Landroidx/lifecycle/Lifecycle$State;)Z
@@ -2455,16 +2616,13 @@ HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragm
HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragmentPreAttached(Landroidx/fragment/app/Fragment;Z)V
HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragmentPreCreated(Landroidx/fragment/app/Fragment;Landroid/os/Bundle;Z)V
HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragmentResumed(Landroidx/fragment/app/Fragment;Z)V
-HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragmentSaveInstanceState(Landroidx/fragment/app/Fragment;Landroid/os/Bundle;Z)V
HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragmentStarted(Landroidx/fragment/app/Fragment;Z)V
-HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragmentStopped(Landroidx/fragment/app/Fragment;Z)V
HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragmentViewCreated(Landroidx/fragment/app/Fragment;Landroid/view/View;Landroid/os/Bundle;Z)V
HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda0;->(Landroidx/fragment/app/FragmentManager;)V
HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda1;->(Landroidx/fragment/app/FragmentManager;)V
HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda2;->(Landroidx/fragment/app/FragmentManager;)V
HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda3;->(Landroidx/fragment/app/FragmentManager;)V
HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda4;->(Landroidx/fragment/app/FragmentManager;)V
-HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda4;->saveState()Landroid/os/Bundle;
HSPLandroidx/fragment/app/FragmentManager$10;->(Landroidx/fragment/app/FragmentManager;)V
HSPLandroidx/fragment/app/FragmentManager$1;->(Landroidx/fragment/app/FragmentManager;Z)V
HSPLandroidx/fragment/app/FragmentManager$2;->(Landroidx/fragment/app/FragmentManager;)V
@@ -2475,18 +2633,13 @@ HSPLandroidx/fragment/app/FragmentManager$3;->instantiate(Ljava/lang/ClassLoader
HSPLandroidx/fragment/app/FragmentManager$4;->(Landroidx/fragment/app/FragmentManager;)V
HSPLandroidx/fragment/app/FragmentManager$4;->createController(Landroid/view/ViewGroup;)Landroidx/fragment/app/SpecialEffectsController;
HSPLandroidx/fragment/app/FragmentManager$5;->(Landroidx/fragment/app/FragmentManager;)V
-HSPLandroidx/fragment/app/FragmentManager$6;->(Landroidx/fragment/app/FragmentManager;Ljava/lang/String;Landroidx/fragment/app/FragmentResultListener;Landroidx/lifecycle/Lifecycle;)V
-HSPLandroidx/fragment/app/FragmentManager$6;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/fragment/app/FragmentManager$7;->(Landroidx/fragment/app/FragmentManager;Landroidx/fragment/app/Fragment;)V
HSPLandroidx/fragment/app/FragmentManager$7;->onAttachFragment(Landroidx/fragment/app/FragmentManager;Landroidx/fragment/app/Fragment;)V
HSPLandroidx/fragment/app/FragmentManager$8;->(Landroidx/fragment/app/FragmentManager;)V
HSPLandroidx/fragment/app/FragmentManager$9;->(Landroidx/fragment/app/FragmentManager;)V
HSPLandroidx/fragment/app/FragmentManager$FragmentIntentSenderContract;->()V
-HSPLandroidx/fragment/app/FragmentManager$LifecycleAwareResultListener;->(Landroidx/lifecycle/Lifecycle;Landroidx/fragment/app/FragmentResultListener;Landroidx/lifecycle/LifecycleEventObserver;)V
-HSPLandroidx/fragment/app/FragmentManager;->$r8$lambda$sido8p6zuWx0PQxIkv4qM-BRiGM(Landroidx/fragment/app/FragmentManager;)Landroid/os/Bundle;
HSPLandroidx/fragment/app/FragmentManager;->()V
HSPLandroidx/fragment/app/FragmentManager;->()V
-HSPLandroidx/fragment/app/FragmentManager;->access$000(Landroidx/fragment/app/FragmentManager;)Ljava/util/Map;
HSPLandroidx/fragment/app/FragmentManager;->addFragment(Landroidx/fragment/app/Fragment;)Landroidx/fragment/app/FragmentStateManager;
HSPLandroidx/fragment/app/FragmentManager;->addFragmentOnAttachListener(Landroidx/fragment/app/FragmentOnAttachListener;)V
HSPLandroidx/fragment/app/FragmentManager;->addOnBackStackChangedListener(Landroidx/fragment/app/FragmentManager$OnBackStackChangedListener;)V
@@ -2526,7 +2679,6 @@ HSPLandroidx/fragment/app/FragmentManager;->findActiveFragment(Ljava/lang/String
HSPLandroidx/fragment/app/FragmentManager;->findFragment(Landroid/view/View;)Landroidx/fragment/app/Fragment;
HSPLandroidx/fragment/app/FragmentManager;->findFragmentById(I)Landroidx/fragment/app/Fragment;
HSPLandroidx/fragment/app/FragmentManager;->findViewFragment(Landroid/view/View;)Landroidx/fragment/app/Fragment;
-HSPLandroidx/fragment/app/FragmentManager;->forcePostponedTransactions()V
HSPLandroidx/fragment/app/FragmentManager;->generateOpsForPendingActions(Ljava/util/ArrayList;Ljava/util/ArrayList;)Z
HSPLandroidx/fragment/app/FragmentManager;->getBackStackEntryCount()I
HSPLandroidx/fragment/app/FragmentManager;->getChildNonConfig(Landroidx/fragment/app/Fragment;)Landroidx/fragment/app/FragmentManagerViewModel;
@@ -2549,23 +2701,17 @@ HSPLandroidx/fragment/app/FragmentManager;->isParentMenuVisible(Landroidx/fragme
HSPLandroidx/fragment/app/FragmentManager;->isPrimaryNavigation(Landroidx/fragment/app/Fragment;)Z
HSPLandroidx/fragment/app/FragmentManager;->isStateAtLeast(I)Z
HSPLandroidx/fragment/app/FragmentManager;->isStateSaved()Z
-HSPLandroidx/fragment/app/FragmentManager;->lambda$attachController$4()Landroid/os/Bundle;
HSPLandroidx/fragment/app/FragmentManager;->moveToState(IZ)V
HSPLandroidx/fragment/app/FragmentManager;->noteStateNotSaved()V
HSPLandroidx/fragment/app/FragmentManager;->onContainerAvailable(Landroidx/fragment/app/FragmentContainerView;)V
HSPLandroidx/fragment/app/FragmentManager;->performPendingDeferredStart(Landroidx/fragment/app/FragmentStateManager;)V
HSPLandroidx/fragment/app/FragmentManager;->removeRedundantOperationsAndExecute(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
-HSPLandroidx/fragment/app/FragmentManager;->saveAllStateInternal()Landroid/os/Bundle;
HSPLandroidx/fragment/app/FragmentManager;->scheduleCommit()V
HSPLandroidx/fragment/app/FragmentManager;->setExitAnimationOrder(Landroidx/fragment/app/Fragment;Z)V
-HSPLandroidx/fragment/app/FragmentManager;->setFragmentResultListener(Ljava/lang/String;Landroidx/lifecycle/LifecycleOwner;Landroidx/fragment/app/FragmentResultListener;)V
HSPLandroidx/fragment/app/FragmentManager;->setPrimaryNavigationFragment(Landroidx/fragment/app/Fragment;)V
HSPLandroidx/fragment/app/FragmentManager;->startPendingDeferredFragments()V
HSPLandroidx/fragment/app/FragmentManager;->updateOnBackPressedCallbackEnabled()V
HSPLandroidx/fragment/app/FragmentManagerImpl;->()V
-HSPLandroidx/fragment/app/FragmentManagerState$1;->()V
-HSPLandroidx/fragment/app/FragmentManagerState;->()V
-HSPLandroidx/fragment/app/FragmentManagerState;->()V
HSPLandroidx/fragment/app/FragmentManagerViewModel$1;->()V
HSPLandroidx/fragment/app/FragmentManagerViewModel$1;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;
HSPLandroidx/fragment/app/FragmentManagerViewModel$1;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel;
@@ -2577,9 +2723,6 @@ HSPLandroidx/fragment/app/FragmentManagerViewModel;->getViewModelStore(Landroidx
HSPLandroidx/fragment/app/FragmentManagerViewModel;->isCleared()Z
HSPLandroidx/fragment/app/FragmentManagerViewModel;->onCleared()V
HSPLandroidx/fragment/app/FragmentManagerViewModel;->setIsStateSaved(Z)V
-HSPLandroidx/fragment/app/FragmentState$1;->()V
-HSPLandroidx/fragment/app/FragmentState;->()V
-HSPLandroidx/fragment/app/FragmentState;->(Landroidx/fragment/app/Fragment;)V
HSPLandroidx/fragment/app/FragmentStateManager$1;->(Landroidx/fragment/app/FragmentStateManager;Landroid/view/View;)V
HSPLandroidx/fragment/app/FragmentStateManager$1;->onViewAttachedToWindow(Landroid/view/View;)V
HSPLandroidx/fragment/app/FragmentStateManager$2;->()V
@@ -2597,11 +2740,8 @@ HSPLandroidx/fragment/app/FragmentStateManager;->moveToExpectedState()V
HSPLandroidx/fragment/app/FragmentStateManager;->pause()V
HSPLandroidx/fragment/app/FragmentStateManager;->restoreState(Ljava/lang/ClassLoader;)V
HSPLandroidx/fragment/app/FragmentStateManager;->resume()V
-HSPLandroidx/fragment/app/FragmentStateManager;->saveState()Landroid/os/Bundle;
-HSPLandroidx/fragment/app/FragmentStateManager;->saveViewState()V
HSPLandroidx/fragment/app/FragmentStateManager;->setFragmentManagerState(I)V
HSPLandroidx/fragment/app/FragmentStateManager;->start()V
-HSPLandroidx/fragment/app/FragmentStateManager;->stop()V
HSPLandroidx/fragment/app/FragmentStore;->()V
HSPLandroidx/fragment/app/FragmentStore;->addFragment(Landroidx/fragment/app/Fragment;)V
HSPLandroidx/fragment/app/FragmentStore;->burpActive()V
@@ -2612,14 +2752,11 @@ HSPLandroidx/fragment/app/FragmentStore;->findFragmentById(I)Landroidx/fragment/
HSPLandroidx/fragment/app/FragmentStore;->findFragmentIndexInContainer(Landroidx/fragment/app/Fragment;)I
HSPLandroidx/fragment/app/FragmentStore;->getActiveFragmentStateManagers()Ljava/util/List;
HSPLandroidx/fragment/app/FragmentStore;->getActiveFragments()Ljava/util/List;
-HSPLandroidx/fragment/app/FragmentStore;->getAllSavedState()Ljava/util/HashMap;
HSPLandroidx/fragment/app/FragmentStore;->getFragmentStateManager(Ljava/lang/String;)Landroidx/fragment/app/FragmentStateManager;
HSPLandroidx/fragment/app/FragmentStore;->getFragments()Ljava/util/List;
HSPLandroidx/fragment/app/FragmentStore;->getNonConfig()Landroidx/fragment/app/FragmentManagerViewModel;
HSPLandroidx/fragment/app/FragmentStore;->makeActive(Landroidx/fragment/app/FragmentStateManager;)V
HSPLandroidx/fragment/app/FragmentStore;->moveToExpectedState()V
-HSPLandroidx/fragment/app/FragmentStore;->saveActiveFragments()Ljava/util/ArrayList;
-HSPLandroidx/fragment/app/FragmentStore;->saveAddedFragments()Ljava/util/ArrayList;
HSPLandroidx/fragment/app/FragmentStore;->setNonConfig(Landroidx/fragment/app/FragmentManagerViewModel;)V
HSPLandroidx/fragment/app/FragmentStore;->setSavedState(Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
HSPLandroidx/fragment/app/FragmentTransaction$Op;->(ILandroidx/fragment/app/Fragment;)V
@@ -2640,8 +2777,6 @@ HSPLandroidx/fragment/app/FragmentViewLifecycleOwner;->getSavedStateRegistry()La
HSPLandroidx/fragment/app/FragmentViewLifecycleOwner;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/fragment/app/FragmentViewLifecycleOwner;->initialize()V
HSPLandroidx/fragment/app/FragmentViewLifecycleOwner;->performRestore(Landroid/os/Bundle;)V
-HSPLandroidx/fragment/app/FragmentViewLifecycleOwner;->performSave(Landroid/os/Bundle;)V
-HSPLandroidx/fragment/app/FragmentViewLifecycleOwner;->setCurrentState(Landroidx/lifecycle/Lifecycle$State;)V
HSPLandroidx/fragment/app/FragmentViewModelLazyKt;->access$viewModels$lambda-1(Lkotlin/Lazy;)Landroidx/lifecycle/ViewModelStoreOwner;
HSPLandroidx/fragment/app/FragmentViewModelLazyKt;->createViewModelLazy(Landroidx/fragment/app/Fragment;Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
HSPLandroidx/fragment/app/FragmentViewModelLazyKt;->viewModels$lambda-1(Lkotlin/Lazy;)Landroidx/lifecycle/ViewModelStoreOwner;
@@ -2694,7 +2829,6 @@ HSPLandroidx/fragment/app/SpecialEffectsController;->executePendingOperations()V
HSPLandroidx/fragment/app/SpecialEffectsController;->findPendingOperation(Landroidx/fragment/app/Fragment;)Landroidx/fragment/app/SpecialEffectsController$Operation;
HSPLandroidx/fragment/app/SpecialEffectsController;->findRunningOperation(Landroidx/fragment/app/Fragment;)Landroidx/fragment/app/SpecialEffectsController$Operation;
HSPLandroidx/fragment/app/SpecialEffectsController;->forceCompleteAllOperations()V
-HSPLandroidx/fragment/app/SpecialEffectsController;->forcePostponedExecutePendingOperations()V
HSPLandroidx/fragment/app/SpecialEffectsController;->getAwaitingCompletionLifecycleImpact(Landroidx/fragment/app/FragmentStateManager;)Landroidx/fragment/app/SpecialEffectsController$Operation$LifecycleImpact;
HSPLandroidx/fragment/app/SpecialEffectsController;->getOrCreateController(Landroid/view/ViewGroup;Landroidx/fragment/app/FragmentManager;)Landroidx/fragment/app/SpecialEffectsController;
HSPLandroidx/fragment/app/SpecialEffectsController;->getOrCreateController(Landroid/view/ViewGroup;Landroidx/fragment/app/SpecialEffectsControllerFactory;)Landroidx/fragment/app/SpecialEffectsController;
@@ -2715,9 +2849,6 @@ HSPLandroidx/interpolator/view/animation/LookupTableInterpolator;->getInterpolat
HSPLandroidx/lifecycle/AbstractSavedStateViewModelFactory$Companion;->()V
HSPLandroidx/lifecycle/AbstractSavedStateViewModelFactory$Companion;->