diff --git a/.project-docs/05-agent-entry/memory-index.md b/.project-docs/05-agent-entry/memory-index.md
index d307be5..9f04582 100644
--- a/.project-docs/05-agent-entry/memory-index.md
+++ b/.project-docs/05-agent-entry/memory-index.md
@@ -9,6 +9,8 @@
## Recall Pointers
+- 2026-09-17:已按用户批准实现XML表情忽略,本地处理器4.1.0。原71052877自动忽略4处CESU-8皇冠后67条保留;71052708仍100条。原字节不改,其他损坏/业务校验保留,旧v3不采用新规则;122项Python/3项JS检查验证,尚未部署。见 `.project-docs/50-evidence/topics/2026-09-17-xml-emoji-cleanup.md`。
+
- ARR-owned processing decision: `.project-docs/10-decisions/ADR-004-arr-owned-programmatic-processing.md`
- Automatic monthly trigger and formula requirement: `.project-docs/10-decisions/ADR-001-automatic-monthly-trigger-and-total-price-formula.md`
- ARR2.0 implementation evidence: `.project-docs/50-evidence/topics/2026-07-30-arr2-programmatic-pipeline.md`
diff --git a/.project-docs/30-worklog/current-state.md b/.project-docs/30-worklog/current-state.md
index b7dbd4b..629d6ae 100644
--- a/.project-docs/30-worklog/current-state.md
+++ b/.project-docs/30-worklog/current-state.md
@@ -2,6 +2,8 @@
## Current Focus
+Local XML-upload improvement completed: processor4.1.0 ignores recognized emoji in text and narrowly recovers CESU-8 emoji while retaining original source bytes/hashes. Original71052877 now passes with4 ignored/67 retained;71052708 remains100.122 distinct Python/3 JS checks verified, including independent replay and frozen legacy behavior. Not deployed to the remote ARR runtime. See [emoji cleanup evidence](../50-evidence/topics/2026-09-17-xml-emoji-cleanup.md).
+
ARR2.0 owns the deterministic XML-to-Finance path and the complete post-commit monthly publication path. The user
uploads XML once. After an accepted Finance commit, a dedicated worker consumes the durable outbox event, derives the
month and “更新至” watermark from committed `ARRIVAL` facts, publishes a validated workbook, and records a durable
diff --git a/.project-docs/30-worklog/task-history.md b/.project-docs/30-worklog/task-history.md
index 0d6235e..6a9e4fa 100644
--- a/.project-docs/30-worklog/task-history.md
+++ b/.project-docs/30-worklog/task-history.md
@@ -4,6 +4,7 @@
| Date | Task | Outcome | Docs Updated |
|---|---|---|---|
+| 2026-09-17 | Ignore emoji during XML upload processing | Processor4.1.0, pinned Unicode17 text cleanup/narrow CESU-8 recovery, immutable source identity, replay-verified count and3-locale notice. Original71052877 succeeds4 ignored/67 retained;71052708 retains100.122 distinct Python and3 JS checks verified; no subagents/production rollout | [Evidence](../50-evidence/topics/2026-09-17-xml-emoji-cleanup.md), processor field/result contracts, current/history/domain/memory/evidence and scoped plan |
| 2026-09-06 | Create a project explanation/handoff document and publish the repository | Added `PROJECT_GUIDE.md` with the business purpose, architecture, six main flows, ownership boundaries, modules, configuration, local operation, migrations, testing, deployment, troubleshooting, security and handoff checklist; linked it from README and kept unresolved deployment/business acceptance items explicit. Local links, Git whitespace and Web/worker CLI help pass. No application, database, OSS, runtime or business state changed | `PROJECT_GUIDE.md`, README, current state, task history, scoped planning record |
| 2026-08-11 | Implement Lian Tai/QBD bilingual Booking-header compatibility | Bumped the bounded parser to 2.1.0, converted readable approved header labels into the existing exact normalized allowlist, preserved legacy aliases and fail-closed ambiguity, and added Chinese/English/Thai header-error mapping. Synthetic parser/coordinator tests, all four supplied workbook replays and wrong-report negatives pass; no API, migration, upload, draft, source activation or runtime deployment occurred | README, architecture/data-flow/business rules, current state, [header-parse evidence](../50-evidence/topics/2026-08-11-company-channel-booking-header-parse-failure.md), evidence index, stale deployment item |
| 2026-08-11 | Make the top-right control the sole Daily task-log entry | Removed concrete-row click/Enter/Space log activation plus the row's button semantics, pointer, focus and selected styling. Explicit download and manual-review controls remain; isolated browser QA proved ordinary row → no dialog, review control → focused operation panel, header `任务日志` → dialog. JavaScript syntax and all 81 Web tests pass. The source is local and production deployment is still pending | Success criteria, current state, [interaction evidence](../50-evidence/topics/2026-08-11-daily-row-task-log-entry-boundary.md), evidence index, stale deployment item, scoped planning record |
diff --git a/.project-docs/40-domain/business-rules.md b/.project-docs/40-domain/business-rules.md
index 4753fae..e5b2ecd 100644
--- a/.project-docs/40-domain/business-rules.md
+++ b/.project-docs/40-domain/business-rules.md
@@ -2,6 +2,8 @@
## Durable Rules
+- 用户已批准 XML 业务处理自动忽略表情。原文件字节与哈希保留;仅对可识别表情做文本清理/有限错误编码恢复,其他损坏编码、结构及业务校验照常拒绝。非零清理数量须可重放核对并提示;详见处理器 [字段契约](../../arr-opera-daily-ingest/references/field-contracts.md)。本地4.1.0实现,线上部署另行执行。
+
- Human access to the desktop Finance workspace, detailed health, generic business APIs, uploads, traces and downloads
requires an authenticated ARR Web session. The H5 mobile dashboard is an intentional anonymous read-only exception:
only its page/assets, `/api/public/h5/months`, `/api/public/h5/analytics` and no-detail `/healthz` are public; the H5
diff --git a/.project-docs/50-evidence/evidence-index.md b/.project-docs/50-evidence/evidence-index.md
index 14a0307..cbaf61f 100644
--- a/.project-docs/50-evidence/evidence-index.md
+++ b/.project-docs/50-evidence/evidence-index.md
@@ -1,5 +1,7 @@
# Evidence Index
+- [XML emoji cleanup](topics/2026-09-17-xml-emoji-cleanup.md) — local processor4.1.0 ignores recognized emoji and narrowly recovers CESU-8 emoji; exact original71052877 passes with4 ignored/67 retained,71052708 remains100. Original bytes unchanged;122 distinct Python/3 JS checks verified; not deployed.
+
Use this index for searchable, traceable evidence records.
| Date | Topic | Status | Source | Detail |
diff --git a/.project-docs/50-evidence/topics/2026-09-17-xml-emoji-cleanup.md b/.project-docs/50-evidence/topics/2026-09-17-xml-emoji-cleanup.md
new file mode 100644
index 0000000..8dace82
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-17-xml-emoji-cleanup.md
@@ -0,0 +1,54 @@
+# XML emoji cleanup — 2026-09-17
+
+## Authorization and scope
+
+The user approved automatic emoji ignoring after discussing the policy, then instructed implementation. Work was independent (no subagents). Existing unrelated repository changes were preserved. This is a local code/package change, not a production rollout or a new business upload.
+
+## Behavior
+
+- Active processor is 4.1.0; result/structured schema versions remain 4.0.
+- Original source bytes, size and SHA-256 stay unchanged in immutable storage and in artifact identities.
+- Normal Unicode emoji sequences are removed from parsed element text/tails, including CDATA and numeric character references. A pinned Unicode17 sequence table avoids blanket Unicode-block deletion. Chinese (including supplementary characters), Thai, normal digits, monetary symbols and dates are preserved.
+- Strict parser failures receive one narrow recovery attempt: only recognized emoji encoded as CESU-8 surrogate pairs in UTF-8 text/CDATA can be normalized. Markup, attributes, unrelated invalid bytes, non-emoji surrogate pairs and lone surrogates are not repaired. Strict XML and existing business checks still decide acceptance.
+- Optional positive `result.json.input_cleanup.ignored_emoji_count` is omitted for zero cleanup. Success/review independent validation recomputes the count from the original source; altered/missing/extra metadata is rejected. The count is returned in upload/final replay receipts and shown in the upload notice in Chinese, English and Thai.
+- The retired frozen v3 compatibility entry point keeps its previous strict XML behavior and original emoji text. The final v3 projection is independently checked before returning.
+- Rule/data semantics are documented in `arr-opera-daily-ingest/references/field-contracts.md`; zip/skill archives include all source resources and the Unicode license.
+
+## Exact-file acceptance
+
+Full ProgrammaticUploadCoordinator + independent DeliveryValidator + in-memory repository/private temporary filesystem object store were used. No production database, OSS credentials or hotel APIs were used.
+
+| Original bytes | Business date | Source rows | Ignored emoji | Excluded | Retained | Full local pipeline |
+|---|---|---:|---:|---:|---:|---:|
+| 71052877 (currently renamed .xlsx, still raw XML) | 2026-09-01 | 161 | 4 | 94 | 67 | 4.99 s |
+| 71052708 XML | 2026-09-02 | 148 | 0 | 48 | 100 | 4.59 s |
+
+SHA-256 identities:
+- 71052877: `e770d925fa1d99151aa96fe667c33f98a7927f5060f6a7845417d8eabff6fad1`
+- 71052708: `bbebe9211d162f95725792d89def4309afd5247ce84e15744a728ad5c908186b`
+
+Both originals and their stored source objects are byte-for-byte unchanged. Test upload names used the required XML extension; the user's desktop filename was not renamed. The four original failures occur in TRACE_TEXT at lines2520,2527,4764,4771.
+
+Final rule-set SHA-256: `414afd93e7d5efa55c06b62f6bd9b98924a138adfabbb083bbafe554652f7201`.
+
+## Verification
+
+- 122 distinct Python checks covered processor/archive/schema contracts, programmatic upload, independent ingestion validation/service, processing, legacy direct compatibility, deployment entry points and Web status/review/log behavior. The first121-case scope passed. After the legacy-isolation change the expanded122-case scope had only the new legacy test fail: its test harness incorrectly invoked the active LocalDailyProcessor without the explicit legacy switch. The helper was corrected to exercise the existing legacy entry point, and the complete13-test emoji module passed on the final code (15.965 s); the other109 checks passed in the expanded run. No product failure remains.
+- 3 executable JavaScript tests run the actual upload handler with synthetic responses and minimal DOM adapters: count notice in all three locales, unchanged review/failure states, and absent/invalid metadata. No real browser/production request was used.
+- JS syntax checks and `git diff --check` passed. Both rebuilt package archives match their source through the processor package contract tests.
+- Edge cases include plain and compound emoji (family, flags, skin tones, keycaps), XML escapes/CDATA, UTF-8 BOM and existing UTF-16 input, ordinary multilingual/business characters, invalid bytes/surrogates/markup, unsafe declarations, mixed business dates, empty required names, pure missing-price review/final replay, and tampered cleanup metadata.
+- A flat regex was replaced with a prefix-trie pattern after exact-file acceptance exposed ~30s processing overhead. The final same-file full pipeline measured about5s including processor/independent verification; no timing assertion was added to flaky environment-sensitive tests.
+
+## Publication verification
+
+The user confirmed `https://git.nianxx.cn/shiyuyun/wyndham-ARR.git` and authorized pushing this fix to `origin/main`. Only the emoji fix, tests, packages, checksums and associated documentation were staged; unrelated ARR download/integration work remains local.
+
+A clean shallow clone of the confirmed remote received the staged patch. Its Git index tree was verified identical to the intended commit. In that isolated tree, all 122 Python tests passed in one run (111.340 s), all 3 JavaScript upload-handler tests passed, and both JavaScript syntax checks passed. The package checksum manifest was refreshed for the changed resources and two new Unicode files; all 35 listed checksums verified. No production deployment or business upload was performed.
+
+## Deployment boundary
+
+The remote ARR page was not deployed/restarted or used to submit these business files. Deploy the tested package/Web changes before expecting the live page to ignore emoji. Existing open manual-price cases remain bound to their original processor/rule identity and retain the existing cancel-and-reupload requirement across rule updates.
+
+## Data source
+
+Pinned data: [Unicode Emoji17 test sequences](https://www.unicode.org/Public/17.0.0/emoji/emoji-test.txt), source SHA-256 `1d8a944f88d7952f7ef7c5167fef3c67995bcae24543949710231b03a201acda`. Unicode License V3 is bundled. Runtime has no new network/dependency requirement.
diff --git a/CHECKSUMS.sha256 b/CHECKSUMS.sha256
index 94f91d9..f88ca56 100644
--- a/CHECKSUMS.sha256
+++ b/CHECKSUMS.sha256
@@ -15,19 +15,21 @@ e3e1ab900ff05951c9aa355f26a465f4fe1e8526ed48e065b48f8f16d59d7bbb opera-daily-ch
f637977afe30b651e6035ab733937be52025dd66e063e6a25fbef3cb7ae4d240 arr-opera-daily-ingest/agents/openai.yaml
c1d2903d4963434197499078e1f905c1f3f60ef86338bd5b6a03c02c46e5bc44 arr-opera-daily-ingest/assets/daily-template.xlsx
0a46d570ce6291b0542ed090f1c3ea51e83e23a12b1e98ea347f94049292347c arr-opera-daily-ingest/references/business-rules.md
-2ac8261629c7ce880f558d4efa7f4b74f51c5c4da8c4165681a1f00e93efbf15 arr-opera-daily-ingest/references/codex-result.schema.json
+19364f2c9cc14149f1d02474291a3d0c85e9c1a2fef2b5c79722f607306e205c arr-opera-daily-ingest/references/codex-result.schema.json
1da3bf1f904535039ecb6d6c6ebb39aef6e4b625e384658c493b6df8d046f658 arr-opera-daily-ingest/references/error-contract.md
-ba00cb267899284a4c56d80cc5dcc7309069ff145c71eba49292d976bbef120b arr-opera-daily-ingest/references/field-contracts.md
+189832010e8a5f620b4969f12bc2335fff7a5d3166fbb16ecfd8e5f367cea92f arr-opera-daily-ingest/references/field-contracts.md
401528cdca9b5c629a7b46538970bc1a07a9716a6ed99f75d9c30602a6cba9d3 arr-opera-daily-ingest/references/manual-override.schema.json
-4b7ba58d49a788a38cb6f01137a39e346db678e531d18b9e06d7ce0e5259c548 arr-opera-daily-ingest/references/structured-output.md
+169e5965333d159f70d4d319f80767033fcafd7f00346dea04b947eef10350be arr-opera-daily-ingest/references/structured-output.md
32ba8debfbc6579a7d3ba9ffa096f3e14730401d398901d77eee636c7f93ddae arr-opera-daily-ingest/references/structured-result.schema.json
123d1d1ea0e28ce481a63dfdbe4bd22b5e6069c585a8cbde4194376ed18fb0d6 arr-opera-daily-ingest/references/价格对照.xlsx
-c0da4573b66728e0b57165e60ed8379642da519da04682583733cb14c4bce275 arr-opera-daily-ingest/scripts/process_daily.py
-212b05d0f9fe36e4371db6cc3f58fcb65ddd0f28a09f64a80d01b476d236a987 arr-opera-daily-ingest/scripts/validate_daily.py
-ec7d00f9343d99266f4a5034949c8e012a236091f8bb40967cd45afd1f5dc1d4 arr-opera-daily-ingest.zip
-ec7d00f9343d99266f4a5034949c8e012a236091f8bb40967cd45afd1f5dc1d4 arr-opera-daily-ingest.skill
+002603309f38e2a86afece6f99c01fe0891cc243ffbfb9e8a9f8bb8aed2b36f1 arr-opera-daily-ingest/scripts/process_daily.py
+128f8a785b3d0cff29dfbe7d1c0c3aef9ca0f38cbd8997b8bfd8726313cc24f8 arr-opera-daily-ingest/scripts/validate_daily.py
+bf4872e920f60902551627c59011e261a139d73f61b31b649ff744b17909e9c3 arr-opera-daily-ingest.zip
+bf4872e920f60902551627c59011e261a139d73f61b31b649ff744b17909e9c3 arr-opera-daily-ingest.skill
ce1bb9b13f46ec1e42eb11b4171e9c710aa49bc0959475a9d4cc90a483cf2c7c prompts/arr_opera_daily_main_agent_prompt.md
df20230c96f5df6d6921e0f1d15ab3076c99545547c239648347191408ab668c prompts/arr_opera_daily_agent_result.schema.json
267a902ce554c6b2df064387b2dfb86ca3db1000b7061e04f5c2bfbd49653f72 prompts/arr_opera_daily_profile_output.schema.json
298583f81a40927d2f55d2bf07b94c08fc40aff7ff25fb9d5816792e99731315 prompts/arr_opera_daily_program_input.schema.json
1baa61954aa6cccb4a36d97a8571f065e3e7c015b09c76afa5f6b396124c9241 DATA_PROCESSING_HANDOFF.md
+343b5a764b38f76523d102714aed2d840ac44c6659d1395f88392a92e78ad46e arr-opera-daily-ingest/references/emoji-sequences-17.0.txt
+e7a93b009565cfce55919a381437ac4db883e9da2126fa28b91d12732bc53d96 arr-opera-daily-ingest/references/unicode-license.txt
diff --git a/arr-opera-daily-ingest.skill b/arr-opera-daily-ingest.skill
index 88c004a..97b4b04 100644
Binary files a/arr-opera-daily-ingest.skill and b/arr-opera-daily-ingest.skill differ
diff --git a/arr-opera-daily-ingest.zip b/arr-opera-daily-ingest.zip
index 88c004a..97b4b04 100644
Binary files a/arr-opera-daily-ingest.zip and b/arr-opera-daily-ingest.zip differ
diff --git a/arr-opera-daily-ingest/references/codex-result.schema.json b/arr-opera-daily-ingest/references/codex-result.schema.json
index 92952c8..d446b07 100644
--- a/arr-opera-daily-ingest/references/codex-result.schema.json
+++ b/arr-opera-daily-ingest/references/codex-result.schema.json
@@ -9,6 +9,12 @@
"status": { "type": "string", "enum": ["success", "review_required", "failed"] },
"business_date": { "type": ["string", "null"], "format": "date" },
"message": { "type": "string", "minLength": 1 },
+ "input_cleanup": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["ignored_emoji_count"],
+ "properties": { "ignored_emoji_count": { "type": "integer", "minimum": 1 } }
+ },
"metrics": {
"type": "object",
"additionalProperties": false,
diff --git a/arr-opera-daily-ingest/references/emoji-sequences-17.0.txt b/arr-opera-daily-ingest/references/emoji-sequences-17.0.txt
new file mode 100644
index 0000000..8b84782
--- /dev/null
+++ b/arr-opera-daily-ingest/references/emoji-sequences-17.0.txt
@@ -0,0 +1,5230 @@
+# Emoji sequences pinned to Unicode Emoji 17.0.
+# Derived from https://www.unicode.org/Public/17.0.0/emoji/emoji-test.txt
+# Source SHA-256: 1d8a944f88d7952f7ef7c5167fef3c67995bcae24543949710231b03a201acda
+# Includes fully-qualified, minimally-qualified, unqualified and component entries.
+# Copyright 2025 Unicode, Inc. See unicode-license.txt.
+0023 20E3
+0023 FE0F 20E3
+002A 20E3
+002A FE0F 20E3
+0030 20E3
+0030 FE0F 20E3
+0031 20E3
+0031 FE0F 20E3
+0032 20E3
+0032 FE0F 20E3
+0033 20E3
+0033 FE0F 20E3
+0034 20E3
+0034 FE0F 20E3
+0035 20E3
+0035 FE0F 20E3
+0036 20E3
+0036 FE0F 20E3
+0037 20E3
+0037 FE0F 20E3
+0038 20E3
+0038 FE0F 20E3
+0039 20E3
+0039 FE0F 20E3
+00A9
+00A9 FE0F
+00AE
+00AE FE0F
+1F004
+1F0CF
+1F170
+1F170 FE0F
+1F171
+1F171 FE0F
+1F17E
+1F17E FE0F
+1F17F
+1F17F FE0F
+1F18E
+1F191
+1F192
+1F193
+1F194
+1F195
+1F196
+1F197
+1F198
+1F199
+1F19A
+1F1E6 1F1E8
+1F1E6 1F1E9
+1F1E6 1F1EA
+1F1E6 1F1EB
+1F1E6 1F1EC
+1F1E6 1F1EE
+1F1E6 1F1F1
+1F1E6 1F1F2
+1F1E6 1F1F4
+1F1E6 1F1F6
+1F1E6 1F1F7
+1F1E6 1F1F8
+1F1E6 1F1F9
+1F1E6 1F1FA
+1F1E6 1F1FC
+1F1E6 1F1FD
+1F1E6 1F1FF
+1F1E7 1F1E6
+1F1E7 1F1E7
+1F1E7 1F1E9
+1F1E7 1F1EA
+1F1E7 1F1EB
+1F1E7 1F1EC
+1F1E7 1F1ED
+1F1E7 1F1EE
+1F1E7 1F1EF
+1F1E7 1F1F1
+1F1E7 1F1F2
+1F1E7 1F1F3
+1F1E7 1F1F4
+1F1E7 1F1F6
+1F1E7 1F1F7
+1F1E7 1F1F8
+1F1E7 1F1F9
+1F1E7 1F1FB
+1F1E7 1F1FC
+1F1E7 1F1FE
+1F1E7 1F1FF
+1F1E8 1F1E6
+1F1E8 1F1E8
+1F1E8 1F1E9
+1F1E8 1F1EB
+1F1E8 1F1EC
+1F1E8 1F1ED
+1F1E8 1F1EE
+1F1E8 1F1F0
+1F1E8 1F1F1
+1F1E8 1F1F2
+1F1E8 1F1F3
+1F1E8 1F1F4
+1F1E8 1F1F5
+1F1E8 1F1F6
+1F1E8 1F1F7
+1F1E8 1F1FA
+1F1E8 1F1FB
+1F1E8 1F1FC
+1F1E8 1F1FD
+1F1E8 1F1FE
+1F1E8 1F1FF
+1F1E9 1F1EA
+1F1E9 1F1EC
+1F1E9 1F1EF
+1F1E9 1F1F0
+1F1E9 1F1F2
+1F1E9 1F1F4
+1F1E9 1F1FF
+1F1EA 1F1E6
+1F1EA 1F1E8
+1F1EA 1F1EA
+1F1EA 1F1EC
+1F1EA 1F1ED
+1F1EA 1F1F7
+1F1EA 1F1F8
+1F1EA 1F1F9
+1F1EA 1F1FA
+1F1EB 1F1EE
+1F1EB 1F1EF
+1F1EB 1F1F0
+1F1EB 1F1F2
+1F1EB 1F1F4
+1F1EB 1F1F7
+1F1EC 1F1E6
+1F1EC 1F1E7
+1F1EC 1F1E9
+1F1EC 1F1EA
+1F1EC 1F1EB
+1F1EC 1F1EC
+1F1EC 1F1ED
+1F1EC 1F1EE
+1F1EC 1F1F1
+1F1EC 1F1F2
+1F1EC 1F1F3
+1F1EC 1F1F5
+1F1EC 1F1F6
+1F1EC 1F1F7
+1F1EC 1F1F8
+1F1EC 1F1F9
+1F1EC 1F1FA
+1F1EC 1F1FC
+1F1EC 1F1FE
+1F1ED 1F1F0
+1F1ED 1F1F2
+1F1ED 1F1F3
+1F1ED 1F1F7
+1F1ED 1F1F9
+1F1ED 1F1FA
+1F1EE 1F1E8
+1F1EE 1F1E9
+1F1EE 1F1EA
+1F1EE 1F1F1
+1F1EE 1F1F2
+1F1EE 1F1F3
+1F1EE 1F1F4
+1F1EE 1F1F6
+1F1EE 1F1F7
+1F1EE 1F1F8
+1F1EE 1F1F9
+1F1EF 1F1EA
+1F1EF 1F1F2
+1F1EF 1F1F4
+1F1EF 1F1F5
+1F1F0 1F1EA
+1F1F0 1F1EC
+1F1F0 1F1ED
+1F1F0 1F1EE
+1F1F0 1F1F2
+1F1F0 1F1F3
+1F1F0 1F1F5
+1F1F0 1F1F7
+1F1F0 1F1FC
+1F1F0 1F1FE
+1F1F0 1F1FF
+1F1F1 1F1E6
+1F1F1 1F1E7
+1F1F1 1F1E8
+1F1F1 1F1EE
+1F1F1 1F1F0
+1F1F1 1F1F7
+1F1F1 1F1F8
+1F1F1 1F1F9
+1F1F1 1F1FA
+1F1F1 1F1FB
+1F1F1 1F1FE
+1F1F2 1F1E6
+1F1F2 1F1E8
+1F1F2 1F1E9
+1F1F2 1F1EA
+1F1F2 1F1EB
+1F1F2 1F1EC
+1F1F2 1F1ED
+1F1F2 1F1F0
+1F1F2 1F1F1
+1F1F2 1F1F2
+1F1F2 1F1F3
+1F1F2 1F1F4
+1F1F2 1F1F5
+1F1F2 1F1F6
+1F1F2 1F1F7
+1F1F2 1F1F8
+1F1F2 1F1F9
+1F1F2 1F1FA
+1F1F2 1F1FB
+1F1F2 1F1FC
+1F1F2 1F1FD
+1F1F2 1F1FE
+1F1F2 1F1FF
+1F1F3 1F1E6
+1F1F3 1F1E8
+1F1F3 1F1EA
+1F1F3 1F1EB
+1F1F3 1F1EC
+1F1F3 1F1EE
+1F1F3 1F1F1
+1F1F3 1F1F4
+1F1F3 1F1F5
+1F1F3 1F1F7
+1F1F3 1F1FA
+1F1F3 1F1FF
+1F1F4 1F1F2
+1F1F5 1F1E6
+1F1F5 1F1EA
+1F1F5 1F1EB
+1F1F5 1F1EC
+1F1F5 1F1ED
+1F1F5 1F1F0
+1F1F5 1F1F1
+1F1F5 1F1F2
+1F1F5 1F1F3
+1F1F5 1F1F7
+1F1F5 1F1F8
+1F1F5 1F1F9
+1F1F5 1F1FC
+1F1F5 1F1FE
+1F1F6 1F1E6
+1F1F7 1F1EA
+1F1F7 1F1F4
+1F1F7 1F1F8
+1F1F7 1F1FA
+1F1F7 1F1FC
+1F1F8 1F1E6
+1F1F8 1F1E7
+1F1F8 1F1E8
+1F1F8 1F1E9
+1F1F8 1F1EA
+1F1F8 1F1EC
+1F1F8 1F1ED
+1F1F8 1F1EE
+1F1F8 1F1EF
+1F1F8 1F1F0
+1F1F8 1F1F1
+1F1F8 1F1F2
+1F1F8 1F1F3
+1F1F8 1F1F4
+1F1F8 1F1F7
+1F1F8 1F1F8
+1F1F8 1F1F9
+1F1F8 1F1FB
+1F1F8 1F1FD
+1F1F8 1F1FE
+1F1F8 1F1FF
+1F1F9 1F1E6
+1F1F9 1F1E8
+1F1F9 1F1E9
+1F1F9 1F1EB
+1F1F9 1F1EC
+1F1F9 1F1ED
+1F1F9 1F1EF
+1F1F9 1F1F0
+1F1F9 1F1F1
+1F1F9 1F1F2
+1F1F9 1F1F3
+1F1F9 1F1F4
+1F1F9 1F1F7
+1F1F9 1F1F9
+1F1F9 1F1FB
+1F1F9 1F1FC
+1F1F9 1F1FF
+1F1FA 1F1E6
+1F1FA 1F1EC
+1F1FA 1F1F2
+1F1FA 1F1F3
+1F1FA 1F1F8
+1F1FA 1F1FE
+1F1FA 1F1FF
+1F1FB 1F1E6
+1F1FB 1F1E8
+1F1FB 1F1EA
+1F1FB 1F1EC
+1F1FB 1F1EE
+1F1FB 1F1F3
+1F1FB 1F1FA
+1F1FC 1F1EB
+1F1FC 1F1F8
+1F1FD 1F1F0
+1F1FE 1F1EA
+1F1FE 1F1F9
+1F1FF 1F1E6
+1F1FF 1F1F2
+1F1FF 1F1FC
+1F201
+1F202
+1F202 FE0F
+1F21A
+1F22F
+1F232
+1F233
+1F234
+1F235
+1F236
+1F237
+1F237 FE0F
+1F238
+1F239
+1F23A
+1F250
+1F251
+1F300
+1F301
+1F302
+1F303
+1F304
+1F305
+1F306
+1F307
+1F308
+1F309
+1F30A
+1F30B
+1F30C
+1F30D
+1F30E
+1F30F
+1F310
+1F311
+1F312
+1F313
+1F314
+1F315
+1F316
+1F317
+1F318
+1F319
+1F31A
+1F31B
+1F31C
+1F31D
+1F31E
+1F31F
+1F320
+1F321
+1F321 FE0F
+1F324
+1F324 FE0F
+1F325
+1F325 FE0F
+1F326
+1F326 FE0F
+1F327
+1F327 FE0F
+1F328
+1F328 FE0F
+1F329
+1F329 FE0F
+1F32A
+1F32A FE0F
+1F32B
+1F32B FE0F
+1F32C
+1F32C FE0F
+1F32D
+1F32E
+1F32F
+1F330
+1F331
+1F332
+1F333
+1F334
+1F335
+1F336
+1F336 FE0F
+1F337
+1F338
+1F339
+1F33A
+1F33B
+1F33C
+1F33D
+1F33E
+1F33F
+1F340
+1F341
+1F342
+1F343
+1F344
+1F344 200D 1F7EB
+1F345
+1F346
+1F347
+1F348
+1F349
+1F34A
+1F34B
+1F34B 200D 1F7E9
+1F34C
+1F34D
+1F34E
+1F34F
+1F350
+1F351
+1F352
+1F353
+1F354
+1F355
+1F356
+1F357
+1F358
+1F359
+1F35A
+1F35B
+1F35C
+1F35D
+1F35E
+1F35F
+1F360
+1F361
+1F362
+1F363
+1F364
+1F365
+1F366
+1F367
+1F368
+1F369
+1F36A
+1F36B
+1F36C
+1F36D
+1F36E
+1F36F
+1F370
+1F371
+1F372
+1F373
+1F374
+1F375
+1F376
+1F377
+1F378
+1F379
+1F37A
+1F37B
+1F37C
+1F37D
+1F37D FE0F
+1F37E
+1F37F
+1F380
+1F381
+1F382
+1F383
+1F384
+1F385
+1F385 1F3FB
+1F385 1F3FC
+1F385 1F3FD
+1F385 1F3FE
+1F385 1F3FF
+1F386
+1F387
+1F388
+1F389
+1F38A
+1F38B
+1F38C
+1F38D
+1F38E
+1F38F
+1F390
+1F391
+1F392
+1F393
+1F396
+1F396 FE0F
+1F397
+1F397 FE0F
+1F399
+1F399 FE0F
+1F39A
+1F39A FE0F
+1F39B
+1F39B FE0F
+1F39E
+1F39E FE0F
+1F39F
+1F39F FE0F
+1F3A0
+1F3A1
+1F3A2
+1F3A3
+1F3A4
+1F3A5
+1F3A6
+1F3A7
+1F3A8
+1F3A9
+1F3AA
+1F3AB
+1F3AC
+1F3AD
+1F3AE
+1F3AF
+1F3B0
+1F3B1
+1F3B2
+1F3B3
+1F3B4
+1F3B5
+1F3B6
+1F3B7
+1F3B8
+1F3B9
+1F3BA
+1F3BB
+1F3BC
+1F3BD
+1F3BE
+1F3BF
+1F3C0
+1F3C1
+1F3C2
+1F3C2 1F3FB
+1F3C2 1F3FC
+1F3C2 1F3FD
+1F3C2 1F3FE
+1F3C2 1F3FF
+1F3C3
+1F3C3 1F3FB
+1F3C3 1F3FB 200D 2640
+1F3C3 1F3FB 200D 2640 200D 27A1
+1F3C3 1F3FB 200D 2640 200D 27A1 FE0F
+1F3C3 1F3FB 200D 2640 FE0F
+1F3C3 1F3FB 200D 2640 FE0F 200D 27A1
+1F3C3 1F3FB 200D 2640 FE0F 200D 27A1 FE0F
+1F3C3 1F3FB 200D 2642
+1F3C3 1F3FB 200D 2642 200D 27A1
+1F3C3 1F3FB 200D 2642 200D 27A1 FE0F
+1F3C3 1F3FB 200D 2642 FE0F
+1F3C3 1F3FB 200D 2642 FE0F 200D 27A1
+1F3C3 1F3FB 200D 2642 FE0F 200D 27A1 FE0F
+1F3C3 1F3FB 200D 27A1
+1F3C3 1F3FB 200D 27A1 FE0F
+1F3C3 1F3FC
+1F3C3 1F3FC 200D 2640
+1F3C3 1F3FC 200D 2640 200D 27A1
+1F3C3 1F3FC 200D 2640 200D 27A1 FE0F
+1F3C3 1F3FC 200D 2640 FE0F
+1F3C3 1F3FC 200D 2640 FE0F 200D 27A1
+1F3C3 1F3FC 200D 2640 FE0F 200D 27A1 FE0F
+1F3C3 1F3FC 200D 2642
+1F3C3 1F3FC 200D 2642 200D 27A1
+1F3C3 1F3FC 200D 2642 200D 27A1 FE0F
+1F3C3 1F3FC 200D 2642 FE0F
+1F3C3 1F3FC 200D 2642 FE0F 200D 27A1
+1F3C3 1F3FC 200D 2642 FE0F 200D 27A1 FE0F
+1F3C3 1F3FC 200D 27A1
+1F3C3 1F3FC 200D 27A1 FE0F
+1F3C3 1F3FD
+1F3C3 1F3FD 200D 2640
+1F3C3 1F3FD 200D 2640 200D 27A1
+1F3C3 1F3FD 200D 2640 200D 27A1 FE0F
+1F3C3 1F3FD 200D 2640 FE0F
+1F3C3 1F3FD 200D 2640 FE0F 200D 27A1
+1F3C3 1F3FD 200D 2640 FE0F 200D 27A1 FE0F
+1F3C3 1F3FD 200D 2642
+1F3C3 1F3FD 200D 2642 200D 27A1
+1F3C3 1F3FD 200D 2642 200D 27A1 FE0F
+1F3C3 1F3FD 200D 2642 FE0F
+1F3C3 1F3FD 200D 2642 FE0F 200D 27A1
+1F3C3 1F3FD 200D 2642 FE0F 200D 27A1 FE0F
+1F3C3 1F3FD 200D 27A1
+1F3C3 1F3FD 200D 27A1 FE0F
+1F3C3 1F3FE
+1F3C3 1F3FE 200D 2640
+1F3C3 1F3FE 200D 2640 200D 27A1
+1F3C3 1F3FE 200D 2640 200D 27A1 FE0F
+1F3C3 1F3FE 200D 2640 FE0F
+1F3C3 1F3FE 200D 2640 FE0F 200D 27A1
+1F3C3 1F3FE 200D 2640 FE0F 200D 27A1 FE0F
+1F3C3 1F3FE 200D 2642
+1F3C3 1F3FE 200D 2642 200D 27A1
+1F3C3 1F3FE 200D 2642 200D 27A1 FE0F
+1F3C3 1F3FE 200D 2642 FE0F
+1F3C3 1F3FE 200D 2642 FE0F 200D 27A1
+1F3C3 1F3FE 200D 2642 FE0F 200D 27A1 FE0F
+1F3C3 1F3FE 200D 27A1
+1F3C3 1F3FE 200D 27A1 FE0F
+1F3C3 1F3FF
+1F3C3 1F3FF 200D 2640
+1F3C3 1F3FF 200D 2640 200D 27A1
+1F3C3 1F3FF 200D 2640 200D 27A1 FE0F
+1F3C3 1F3FF 200D 2640 FE0F
+1F3C3 1F3FF 200D 2640 FE0F 200D 27A1
+1F3C3 1F3FF 200D 2640 FE0F 200D 27A1 FE0F
+1F3C3 1F3FF 200D 2642
+1F3C3 1F3FF 200D 2642 200D 27A1
+1F3C3 1F3FF 200D 2642 200D 27A1 FE0F
+1F3C3 1F3FF 200D 2642 FE0F
+1F3C3 1F3FF 200D 2642 FE0F 200D 27A1
+1F3C3 1F3FF 200D 2642 FE0F 200D 27A1 FE0F
+1F3C3 1F3FF 200D 27A1
+1F3C3 1F3FF 200D 27A1 FE0F
+1F3C3 200D 2640
+1F3C3 200D 2640 200D 27A1
+1F3C3 200D 2640 200D 27A1 FE0F
+1F3C3 200D 2640 FE0F
+1F3C3 200D 2640 FE0F 200D 27A1
+1F3C3 200D 2640 FE0F 200D 27A1 FE0F
+1F3C3 200D 2642
+1F3C3 200D 2642 200D 27A1
+1F3C3 200D 2642 200D 27A1 FE0F
+1F3C3 200D 2642 FE0F
+1F3C3 200D 2642 FE0F 200D 27A1
+1F3C3 200D 2642 FE0F 200D 27A1 FE0F
+1F3C3 200D 27A1
+1F3C3 200D 27A1 FE0F
+1F3C4
+1F3C4 1F3FB
+1F3C4 1F3FB 200D 2640
+1F3C4 1F3FB 200D 2640 FE0F
+1F3C4 1F3FB 200D 2642
+1F3C4 1F3FB 200D 2642 FE0F
+1F3C4 1F3FC
+1F3C4 1F3FC 200D 2640
+1F3C4 1F3FC 200D 2640 FE0F
+1F3C4 1F3FC 200D 2642
+1F3C4 1F3FC 200D 2642 FE0F
+1F3C4 1F3FD
+1F3C4 1F3FD 200D 2640
+1F3C4 1F3FD 200D 2640 FE0F
+1F3C4 1F3FD 200D 2642
+1F3C4 1F3FD 200D 2642 FE0F
+1F3C4 1F3FE
+1F3C4 1F3FE 200D 2640
+1F3C4 1F3FE 200D 2640 FE0F
+1F3C4 1F3FE 200D 2642
+1F3C4 1F3FE 200D 2642 FE0F
+1F3C4 1F3FF
+1F3C4 1F3FF 200D 2640
+1F3C4 1F3FF 200D 2640 FE0F
+1F3C4 1F3FF 200D 2642
+1F3C4 1F3FF 200D 2642 FE0F
+1F3C4 200D 2640
+1F3C4 200D 2640 FE0F
+1F3C4 200D 2642
+1F3C4 200D 2642 FE0F
+1F3C5
+1F3C6
+1F3C7
+1F3C7 1F3FB
+1F3C7 1F3FC
+1F3C7 1F3FD
+1F3C7 1F3FE
+1F3C7 1F3FF
+1F3C8
+1F3C9
+1F3CA
+1F3CA 1F3FB
+1F3CA 1F3FB 200D 2640
+1F3CA 1F3FB 200D 2640 FE0F
+1F3CA 1F3FB 200D 2642
+1F3CA 1F3FB 200D 2642 FE0F
+1F3CA 1F3FC
+1F3CA 1F3FC 200D 2640
+1F3CA 1F3FC 200D 2640 FE0F
+1F3CA 1F3FC 200D 2642
+1F3CA 1F3FC 200D 2642 FE0F
+1F3CA 1F3FD
+1F3CA 1F3FD 200D 2640
+1F3CA 1F3FD 200D 2640 FE0F
+1F3CA 1F3FD 200D 2642
+1F3CA 1F3FD 200D 2642 FE0F
+1F3CA 1F3FE
+1F3CA 1F3FE 200D 2640
+1F3CA 1F3FE 200D 2640 FE0F
+1F3CA 1F3FE 200D 2642
+1F3CA 1F3FE 200D 2642 FE0F
+1F3CA 1F3FF
+1F3CA 1F3FF 200D 2640
+1F3CA 1F3FF 200D 2640 FE0F
+1F3CA 1F3FF 200D 2642
+1F3CA 1F3FF 200D 2642 FE0F
+1F3CA 200D 2640
+1F3CA 200D 2640 FE0F
+1F3CA 200D 2642
+1F3CA 200D 2642 FE0F
+1F3CB
+1F3CB 1F3FB
+1F3CB 1F3FB 200D 2640
+1F3CB 1F3FB 200D 2640 FE0F
+1F3CB 1F3FB 200D 2642
+1F3CB 1F3FB 200D 2642 FE0F
+1F3CB 1F3FC
+1F3CB 1F3FC 200D 2640
+1F3CB 1F3FC 200D 2640 FE0F
+1F3CB 1F3FC 200D 2642
+1F3CB 1F3FC 200D 2642 FE0F
+1F3CB 1F3FD
+1F3CB 1F3FD 200D 2640
+1F3CB 1F3FD 200D 2640 FE0F
+1F3CB 1F3FD 200D 2642
+1F3CB 1F3FD 200D 2642 FE0F
+1F3CB 1F3FE
+1F3CB 1F3FE 200D 2640
+1F3CB 1F3FE 200D 2640 FE0F
+1F3CB 1F3FE 200D 2642
+1F3CB 1F3FE 200D 2642 FE0F
+1F3CB 1F3FF
+1F3CB 1F3FF 200D 2640
+1F3CB 1F3FF 200D 2640 FE0F
+1F3CB 1F3FF 200D 2642
+1F3CB 1F3FF 200D 2642 FE0F
+1F3CB 200D 2640
+1F3CB 200D 2640 FE0F
+1F3CB 200D 2642
+1F3CB 200D 2642 FE0F
+1F3CB FE0F
+1F3CB FE0F 200D 2640
+1F3CB FE0F 200D 2640 FE0F
+1F3CB FE0F 200D 2642
+1F3CB FE0F 200D 2642 FE0F
+1F3CC
+1F3CC 1F3FB
+1F3CC 1F3FB 200D 2640
+1F3CC 1F3FB 200D 2640 FE0F
+1F3CC 1F3FB 200D 2642
+1F3CC 1F3FB 200D 2642 FE0F
+1F3CC 1F3FC
+1F3CC 1F3FC 200D 2640
+1F3CC 1F3FC 200D 2640 FE0F
+1F3CC 1F3FC 200D 2642
+1F3CC 1F3FC 200D 2642 FE0F
+1F3CC 1F3FD
+1F3CC 1F3FD 200D 2640
+1F3CC 1F3FD 200D 2640 FE0F
+1F3CC 1F3FD 200D 2642
+1F3CC 1F3FD 200D 2642 FE0F
+1F3CC 1F3FE
+1F3CC 1F3FE 200D 2640
+1F3CC 1F3FE 200D 2640 FE0F
+1F3CC 1F3FE 200D 2642
+1F3CC 1F3FE 200D 2642 FE0F
+1F3CC 1F3FF
+1F3CC 1F3FF 200D 2640
+1F3CC 1F3FF 200D 2640 FE0F
+1F3CC 1F3FF 200D 2642
+1F3CC 1F3FF 200D 2642 FE0F
+1F3CC 200D 2640
+1F3CC 200D 2640 FE0F
+1F3CC 200D 2642
+1F3CC 200D 2642 FE0F
+1F3CC FE0F
+1F3CC FE0F 200D 2640
+1F3CC FE0F 200D 2640 FE0F
+1F3CC FE0F 200D 2642
+1F3CC FE0F 200D 2642 FE0F
+1F3CD
+1F3CD FE0F
+1F3CE
+1F3CE FE0F
+1F3CF
+1F3D0
+1F3D1
+1F3D2
+1F3D3
+1F3D4
+1F3D4 FE0F
+1F3D5
+1F3D5 FE0F
+1F3D6
+1F3D6 FE0F
+1F3D7
+1F3D7 FE0F
+1F3D8
+1F3D8 FE0F
+1F3D9
+1F3D9 FE0F
+1F3DA
+1F3DA FE0F
+1F3DB
+1F3DB FE0F
+1F3DC
+1F3DC FE0F
+1F3DD
+1F3DD FE0F
+1F3DE
+1F3DE FE0F
+1F3DF
+1F3DF FE0F
+1F3E0
+1F3E1
+1F3E2
+1F3E3
+1F3E4
+1F3E5
+1F3E6
+1F3E7
+1F3E8
+1F3E9
+1F3EA
+1F3EB
+1F3EC
+1F3ED
+1F3EE
+1F3EF
+1F3F0
+1F3F3
+1F3F3 200D 1F308
+1F3F3 200D 26A7
+1F3F3 200D 26A7 FE0F
+1F3F3 FE0F
+1F3F3 FE0F 200D 1F308
+1F3F3 FE0F 200D 26A7
+1F3F3 FE0F 200D 26A7 FE0F
+1F3F4
+1F3F4 200D 2620
+1F3F4 200D 2620 FE0F
+1F3F4 E0067 E0062 E0065 E006E E0067 E007F
+1F3F4 E0067 E0062 E0073 E0063 E0074 E007F
+1F3F4 E0067 E0062 E0077 E006C E0073 E007F
+1F3F5
+1F3F5 FE0F
+1F3F7
+1F3F7 FE0F
+1F3F8
+1F3F9
+1F3FA
+1F3FB
+1F3FC
+1F3FD
+1F3FE
+1F3FF
+1F400
+1F401
+1F402
+1F403
+1F404
+1F405
+1F406
+1F407
+1F408
+1F408 200D 2B1B
+1F409
+1F40A
+1F40B
+1F40C
+1F40D
+1F40E
+1F40F
+1F410
+1F411
+1F412
+1F413
+1F414
+1F415
+1F415 200D 1F9BA
+1F416
+1F417
+1F418
+1F419
+1F41A
+1F41B
+1F41C
+1F41D
+1F41E
+1F41F
+1F420
+1F421
+1F422
+1F423
+1F424
+1F425
+1F426
+1F426 200D 1F525
+1F426 200D 2B1B
+1F427
+1F428
+1F429
+1F42A
+1F42B
+1F42C
+1F42D
+1F42E
+1F42F
+1F430
+1F431
+1F432
+1F433
+1F434
+1F435
+1F436
+1F437
+1F438
+1F439
+1F43A
+1F43B
+1F43B 200D 2744
+1F43B 200D 2744 FE0F
+1F43C
+1F43D
+1F43E
+1F43F
+1F43F FE0F
+1F440
+1F441
+1F441 200D 1F5E8
+1F441 200D 1F5E8 FE0F
+1F441 FE0F
+1F441 FE0F 200D 1F5E8
+1F441 FE0F 200D 1F5E8 FE0F
+1F442
+1F442 1F3FB
+1F442 1F3FC
+1F442 1F3FD
+1F442 1F3FE
+1F442 1F3FF
+1F443
+1F443 1F3FB
+1F443 1F3FC
+1F443 1F3FD
+1F443 1F3FE
+1F443 1F3FF
+1F444
+1F445
+1F446
+1F446 1F3FB
+1F446 1F3FC
+1F446 1F3FD
+1F446 1F3FE
+1F446 1F3FF
+1F447
+1F447 1F3FB
+1F447 1F3FC
+1F447 1F3FD
+1F447 1F3FE
+1F447 1F3FF
+1F448
+1F448 1F3FB
+1F448 1F3FC
+1F448 1F3FD
+1F448 1F3FE
+1F448 1F3FF
+1F449
+1F449 1F3FB
+1F449 1F3FC
+1F449 1F3FD
+1F449 1F3FE
+1F449 1F3FF
+1F44A
+1F44A 1F3FB
+1F44A 1F3FC
+1F44A 1F3FD
+1F44A 1F3FE
+1F44A 1F3FF
+1F44B
+1F44B 1F3FB
+1F44B 1F3FC
+1F44B 1F3FD
+1F44B 1F3FE
+1F44B 1F3FF
+1F44C
+1F44C 1F3FB
+1F44C 1F3FC
+1F44C 1F3FD
+1F44C 1F3FE
+1F44C 1F3FF
+1F44D
+1F44D 1F3FB
+1F44D 1F3FC
+1F44D 1F3FD
+1F44D 1F3FE
+1F44D 1F3FF
+1F44E
+1F44E 1F3FB
+1F44E 1F3FC
+1F44E 1F3FD
+1F44E 1F3FE
+1F44E 1F3FF
+1F44F
+1F44F 1F3FB
+1F44F 1F3FC
+1F44F 1F3FD
+1F44F 1F3FE
+1F44F 1F3FF
+1F450
+1F450 1F3FB
+1F450 1F3FC
+1F450 1F3FD
+1F450 1F3FE
+1F450 1F3FF
+1F451
+1F452
+1F453
+1F454
+1F455
+1F456
+1F457
+1F458
+1F459
+1F45A
+1F45B
+1F45C
+1F45D
+1F45E
+1F45F
+1F460
+1F461
+1F462
+1F463
+1F464
+1F465
+1F466
+1F466 1F3FB
+1F466 1F3FC
+1F466 1F3FD
+1F466 1F3FE
+1F466 1F3FF
+1F467
+1F467 1F3FB
+1F467 1F3FC
+1F467 1F3FD
+1F467 1F3FE
+1F467 1F3FF
+1F468
+1F468 1F3FB
+1F468 1F3FB 200D 1F33E
+1F468 1F3FB 200D 1F373
+1F468 1F3FB 200D 1F37C
+1F468 1F3FB 200D 1F393
+1F468 1F3FB 200D 1F3A4
+1F468 1F3FB 200D 1F3A8
+1F468 1F3FB 200D 1F3EB
+1F468 1F3FB 200D 1F3ED
+1F468 1F3FB 200D 1F430 200D 1F468 1F3FC
+1F468 1F3FB 200D 1F430 200D 1F468 1F3FD
+1F468 1F3FB 200D 1F430 200D 1F468 1F3FE
+1F468 1F3FB 200D 1F430 200D 1F468 1F3FF
+1F468 1F3FB 200D 1F4BB
+1F468 1F3FB 200D 1F4BC
+1F468 1F3FB 200D 1F527
+1F468 1F3FB 200D 1F52C
+1F468 1F3FB 200D 1F680
+1F468 1F3FB 200D 1F692
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF
+1F468 1F3FB 200D 1F9AF
+1F468 1F3FB 200D 1F9AF 200D 27A1
+1F468 1F3FB 200D 1F9AF 200D 27A1 FE0F
+1F468 1F3FB 200D 1F9B0
+1F468 1F3FB 200D 1F9B1
+1F468 1F3FB 200D 1F9B2
+1F468 1F3FB 200D 1F9B3
+1F468 1F3FB 200D 1F9BC
+1F468 1F3FB 200D 1F9BC 200D 27A1
+1F468 1F3FB 200D 1F9BC 200D 27A1 FE0F
+1F468 1F3FB 200D 1F9BD
+1F468 1F3FB 200D 1F9BD 200D 27A1
+1F468 1F3FB 200D 1F9BD 200D 27A1 FE0F
+1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FC
+1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FD
+1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FE
+1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FF
+1F468 1F3FB 200D 2695
+1F468 1F3FB 200D 2695 FE0F
+1F468 1F3FB 200D 2696
+1F468 1F3FB 200D 2696 FE0F
+1F468 1F3FB 200D 2708
+1F468 1F3FB 200D 2708 FE0F
+1F468 1F3FB 200D 2764 200D 1F468 1F3FB
+1F468 1F3FB 200D 2764 200D 1F468 1F3FC
+1F468 1F3FB 200D 2764 200D 1F468 1F3FD
+1F468 1F3FB 200D 2764 200D 1F468 1F3FE
+1F468 1F3FB 200D 2764 200D 1F468 1F3FF
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F468 1F3FC
+1F468 1F3FC 200D 1F33E
+1F468 1F3FC 200D 1F373
+1F468 1F3FC 200D 1F37C
+1F468 1F3FC 200D 1F393
+1F468 1F3FC 200D 1F3A4
+1F468 1F3FC 200D 1F3A8
+1F468 1F3FC 200D 1F3EB
+1F468 1F3FC 200D 1F3ED
+1F468 1F3FC 200D 1F430 200D 1F468 1F3FB
+1F468 1F3FC 200D 1F430 200D 1F468 1F3FD
+1F468 1F3FC 200D 1F430 200D 1F468 1F3FE
+1F468 1F3FC 200D 1F430 200D 1F468 1F3FF
+1F468 1F3FC 200D 1F4BB
+1F468 1F3FC 200D 1F4BC
+1F468 1F3FC 200D 1F527
+1F468 1F3FC 200D 1F52C
+1F468 1F3FC 200D 1F680
+1F468 1F3FC 200D 1F692
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF
+1F468 1F3FC 200D 1F9AF
+1F468 1F3FC 200D 1F9AF 200D 27A1
+1F468 1F3FC 200D 1F9AF 200D 27A1 FE0F
+1F468 1F3FC 200D 1F9B0
+1F468 1F3FC 200D 1F9B1
+1F468 1F3FC 200D 1F9B2
+1F468 1F3FC 200D 1F9B3
+1F468 1F3FC 200D 1F9BC
+1F468 1F3FC 200D 1F9BC 200D 27A1
+1F468 1F3FC 200D 1F9BC 200D 27A1 FE0F
+1F468 1F3FC 200D 1F9BD
+1F468 1F3FC 200D 1F9BD 200D 27A1
+1F468 1F3FC 200D 1F9BD 200D 27A1 FE0F
+1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FB
+1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FD
+1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FE
+1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FF
+1F468 1F3FC 200D 2695
+1F468 1F3FC 200D 2695 FE0F
+1F468 1F3FC 200D 2696
+1F468 1F3FC 200D 2696 FE0F
+1F468 1F3FC 200D 2708
+1F468 1F3FC 200D 2708 FE0F
+1F468 1F3FC 200D 2764 200D 1F468 1F3FB
+1F468 1F3FC 200D 2764 200D 1F468 1F3FC
+1F468 1F3FC 200D 2764 200D 1F468 1F3FD
+1F468 1F3FC 200D 2764 200D 1F468 1F3FE
+1F468 1F3FC 200D 2764 200D 1F468 1F3FF
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F468 1F3FD
+1F468 1F3FD 200D 1F33E
+1F468 1F3FD 200D 1F373
+1F468 1F3FD 200D 1F37C
+1F468 1F3FD 200D 1F393
+1F468 1F3FD 200D 1F3A4
+1F468 1F3FD 200D 1F3A8
+1F468 1F3FD 200D 1F3EB
+1F468 1F3FD 200D 1F3ED
+1F468 1F3FD 200D 1F430 200D 1F468 1F3FB
+1F468 1F3FD 200D 1F430 200D 1F468 1F3FC
+1F468 1F3FD 200D 1F430 200D 1F468 1F3FE
+1F468 1F3FD 200D 1F430 200D 1F468 1F3FF
+1F468 1F3FD 200D 1F4BB
+1F468 1F3FD 200D 1F4BC
+1F468 1F3FD 200D 1F527
+1F468 1F3FD 200D 1F52C
+1F468 1F3FD 200D 1F680
+1F468 1F3FD 200D 1F692
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF
+1F468 1F3FD 200D 1F9AF
+1F468 1F3FD 200D 1F9AF 200D 27A1
+1F468 1F3FD 200D 1F9AF 200D 27A1 FE0F
+1F468 1F3FD 200D 1F9B0
+1F468 1F3FD 200D 1F9B1
+1F468 1F3FD 200D 1F9B2
+1F468 1F3FD 200D 1F9B3
+1F468 1F3FD 200D 1F9BC
+1F468 1F3FD 200D 1F9BC 200D 27A1
+1F468 1F3FD 200D 1F9BC 200D 27A1 FE0F
+1F468 1F3FD 200D 1F9BD
+1F468 1F3FD 200D 1F9BD 200D 27A1
+1F468 1F3FD 200D 1F9BD 200D 27A1 FE0F
+1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FB
+1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FC
+1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FE
+1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FF
+1F468 1F3FD 200D 2695
+1F468 1F3FD 200D 2695 FE0F
+1F468 1F3FD 200D 2696
+1F468 1F3FD 200D 2696 FE0F
+1F468 1F3FD 200D 2708
+1F468 1F3FD 200D 2708 FE0F
+1F468 1F3FD 200D 2764 200D 1F468 1F3FB
+1F468 1F3FD 200D 2764 200D 1F468 1F3FC
+1F468 1F3FD 200D 2764 200D 1F468 1F3FD
+1F468 1F3FD 200D 2764 200D 1F468 1F3FE
+1F468 1F3FD 200D 2764 200D 1F468 1F3FF
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F468 1F3FE
+1F468 1F3FE 200D 1F33E
+1F468 1F3FE 200D 1F373
+1F468 1F3FE 200D 1F37C
+1F468 1F3FE 200D 1F393
+1F468 1F3FE 200D 1F3A4
+1F468 1F3FE 200D 1F3A8
+1F468 1F3FE 200D 1F3EB
+1F468 1F3FE 200D 1F3ED
+1F468 1F3FE 200D 1F430 200D 1F468 1F3FB
+1F468 1F3FE 200D 1F430 200D 1F468 1F3FC
+1F468 1F3FE 200D 1F430 200D 1F468 1F3FD
+1F468 1F3FE 200D 1F430 200D 1F468 1F3FF
+1F468 1F3FE 200D 1F4BB
+1F468 1F3FE 200D 1F4BC
+1F468 1F3FE 200D 1F527
+1F468 1F3FE 200D 1F52C
+1F468 1F3FE 200D 1F680
+1F468 1F3FE 200D 1F692
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF
+1F468 1F3FE 200D 1F9AF
+1F468 1F3FE 200D 1F9AF 200D 27A1
+1F468 1F3FE 200D 1F9AF 200D 27A1 FE0F
+1F468 1F3FE 200D 1F9B0
+1F468 1F3FE 200D 1F9B1
+1F468 1F3FE 200D 1F9B2
+1F468 1F3FE 200D 1F9B3
+1F468 1F3FE 200D 1F9BC
+1F468 1F3FE 200D 1F9BC 200D 27A1
+1F468 1F3FE 200D 1F9BC 200D 27A1 FE0F
+1F468 1F3FE 200D 1F9BD
+1F468 1F3FE 200D 1F9BD 200D 27A1
+1F468 1F3FE 200D 1F9BD 200D 27A1 FE0F
+1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FB
+1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FC
+1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FD
+1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FF
+1F468 1F3FE 200D 2695
+1F468 1F3FE 200D 2695 FE0F
+1F468 1F3FE 200D 2696
+1F468 1F3FE 200D 2696 FE0F
+1F468 1F3FE 200D 2708
+1F468 1F3FE 200D 2708 FE0F
+1F468 1F3FE 200D 2764 200D 1F468 1F3FB
+1F468 1F3FE 200D 2764 200D 1F468 1F3FC
+1F468 1F3FE 200D 2764 200D 1F468 1F3FD
+1F468 1F3FE 200D 2764 200D 1F468 1F3FE
+1F468 1F3FE 200D 2764 200D 1F468 1F3FF
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F468 1F3FF
+1F468 1F3FF 200D 1F33E
+1F468 1F3FF 200D 1F373
+1F468 1F3FF 200D 1F37C
+1F468 1F3FF 200D 1F393
+1F468 1F3FF 200D 1F3A4
+1F468 1F3FF 200D 1F3A8
+1F468 1F3FF 200D 1F3EB
+1F468 1F3FF 200D 1F3ED
+1F468 1F3FF 200D 1F430 200D 1F468 1F3FB
+1F468 1F3FF 200D 1F430 200D 1F468 1F3FC
+1F468 1F3FF 200D 1F430 200D 1F468 1F3FD
+1F468 1F3FF 200D 1F430 200D 1F468 1F3FE
+1F468 1F3FF 200D 1F4BB
+1F468 1F3FF 200D 1F4BC
+1F468 1F3FF 200D 1F527
+1F468 1F3FF 200D 1F52C
+1F468 1F3FF 200D 1F680
+1F468 1F3FF 200D 1F692
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE
+1F468 1F3FF 200D 1F9AF
+1F468 1F3FF 200D 1F9AF 200D 27A1
+1F468 1F3FF 200D 1F9AF 200D 27A1 FE0F
+1F468 1F3FF 200D 1F9B0
+1F468 1F3FF 200D 1F9B1
+1F468 1F3FF 200D 1F9B2
+1F468 1F3FF 200D 1F9B3
+1F468 1F3FF 200D 1F9BC
+1F468 1F3FF 200D 1F9BC 200D 27A1
+1F468 1F3FF 200D 1F9BC 200D 27A1 FE0F
+1F468 1F3FF 200D 1F9BD
+1F468 1F3FF 200D 1F9BD 200D 27A1
+1F468 1F3FF 200D 1F9BD 200D 27A1 FE0F
+1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FB
+1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FC
+1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FD
+1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FE
+1F468 1F3FF 200D 2695
+1F468 1F3FF 200D 2695 FE0F
+1F468 1F3FF 200D 2696
+1F468 1F3FF 200D 2696 FE0F
+1F468 1F3FF 200D 2708
+1F468 1F3FF 200D 2708 FE0F
+1F468 1F3FF 200D 2764 200D 1F468 1F3FB
+1F468 1F3FF 200D 2764 200D 1F468 1F3FC
+1F468 1F3FF 200D 2764 200D 1F468 1F3FD
+1F468 1F3FF 200D 2764 200D 1F468 1F3FE
+1F468 1F3FF 200D 2764 200D 1F468 1F3FF
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F468 200D 1F33E
+1F468 200D 1F373
+1F468 200D 1F37C
+1F468 200D 1F393
+1F468 200D 1F3A4
+1F468 200D 1F3A8
+1F468 200D 1F3EB
+1F468 200D 1F3ED
+1F468 200D 1F466
+1F468 200D 1F466 200D 1F466
+1F468 200D 1F467
+1F468 200D 1F467 200D 1F466
+1F468 200D 1F467 200D 1F467
+1F468 200D 1F468 200D 1F466
+1F468 200D 1F468 200D 1F466 200D 1F466
+1F468 200D 1F468 200D 1F467
+1F468 200D 1F468 200D 1F467 200D 1F466
+1F468 200D 1F468 200D 1F467 200D 1F467
+1F468 200D 1F469 200D 1F466
+1F468 200D 1F469 200D 1F466 200D 1F466
+1F468 200D 1F469 200D 1F467
+1F468 200D 1F469 200D 1F467 200D 1F466
+1F468 200D 1F469 200D 1F467 200D 1F467
+1F468 200D 1F4BB
+1F468 200D 1F4BC
+1F468 200D 1F527
+1F468 200D 1F52C
+1F468 200D 1F680
+1F468 200D 1F692
+1F468 200D 1F9AF
+1F468 200D 1F9AF 200D 27A1
+1F468 200D 1F9AF 200D 27A1 FE0F
+1F468 200D 1F9B0
+1F468 200D 1F9B1
+1F468 200D 1F9B2
+1F468 200D 1F9B3
+1F468 200D 1F9BC
+1F468 200D 1F9BC 200D 27A1
+1F468 200D 1F9BC 200D 27A1 FE0F
+1F468 200D 1F9BD
+1F468 200D 1F9BD 200D 27A1
+1F468 200D 1F9BD 200D 27A1 FE0F
+1F468 200D 2695
+1F468 200D 2695 FE0F
+1F468 200D 2696
+1F468 200D 2696 FE0F
+1F468 200D 2708
+1F468 200D 2708 FE0F
+1F468 200D 2764 200D 1F468
+1F468 200D 2764 200D 1F48B 200D 1F468
+1F468 200D 2764 FE0F 200D 1F468
+1F468 200D 2764 FE0F 200D 1F48B 200D 1F468
+1F469
+1F469 1F3FB
+1F469 1F3FB 200D 1F33E
+1F469 1F3FB 200D 1F373
+1F469 1F3FB 200D 1F37C
+1F469 1F3FB 200D 1F393
+1F469 1F3FB 200D 1F3A4
+1F469 1F3FB 200D 1F3A8
+1F469 1F3FB 200D 1F3EB
+1F469 1F3FB 200D 1F3ED
+1F469 1F3FB 200D 1F430 200D 1F469 1F3FC
+1F469 1F3FB 200D 1F430 200D 1F469 1F3FD
+1F469 1F3FB 200D 1F430 200D 1F469 1F3FE
+1F469 1F3FB 200D 1F430 200D 1F469 1F3FF
+1F469 1F3FB 200D 1F4BB
+1F469 1F3FB 200D 1F4BC
+1F469 1F3FB 200D 1F527
+1F469 1F3FB 200D 1F52C
+1F469 1F3FB 200D 1F680
+1F469 1F3FB 200D 1F692
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF
+1F469 1F3FB 200D 1F9AF
+1F469 1F3FB 200D 1F9AF 200D 27A1
+1F469 1F3FB 200D 1F9AF 200D 27A1 FE0F
+1F469 1F3FB 200D 1F9B0
+1F469 1F3FB 200D 1F9B1
+1F469 1F3FB 200D 1F9B2
+1F469 1F3FB 200D 1F9B3
+1F469 1F3FB 200D 1F9BC
+1F469 1F3FB 200D 1F9BC 200D 27A1
+1F469 1F3FB 200D 1F9BC 200D 27A1 FE0F
+1F469 1F3FB 200D 1F9BD
+1F469 1F3FB 200D 1F9BD 200D 27A1
+1F469 1F3FB 200D 1F9BD 200D 27A1 FE0F
+1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FC
+1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FD
+1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FE
+1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FF
+1F469 1F3FB 200D 2695
+1F469 1F3FB 200D 2695 FE0F
+1F469 1F3FB 200D 2696
+1F469 1F3FB 200D 2696 FE0F
+1F469 1F3FB 200D 2708
+1F469 1F3FB 200D 2708 FE0F
+1F469 1F3FB 200D 2764 200D 1F468 1F3FB
+1F469 1F3FB 200D 2764 200D 1F468 1F3FC
+1F469 1F3FB 200D 2764 200D 1F468 1F3FD
+1F469 1F3FB 200D 2764 200D 1F468 1F3FE
+1F469 1F3FB 200D 2764 200D 1F468 1F3FF
+1F469 1F3FB 200D 2764 200D 1F469 1F3FB
+1F469 1F3FB 200D 2764 200D 1F469 1F3FC
+1F469 1F3FB 200D 2764 200D 1F469 1F3FD
+1F469 1F3FB 200D 2764 200D 1F469 1F3FE
+1F469 1F3FB 200D 2764 200D 1F469 1F3FF
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FF
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+1F469 1F3FC
+1F469 1F3FC 200D 1F33E
+1F469 1F3FC 200D 1F373
+1F469 1F3FC 200D 1F37C
+1F469 1F3FC 200D 1F393
+1F469 1F3FC 200D 1F3A4
+1F469 1F3FC 200D 1F3A8
+1F469 1F3FC 200D 1F3EB
+1F469 1F3FC 200D 1F3ED
+1F469 1F3FC 200D 1F430 200D 1F469 1F3FB
+1F469 1F3FC 200D 1F430 200D 1F469 1F3FD
+1F469 1F3FC 200D 1F430 200D 1F469 1F3FE
+1F469 1F3FC 200D 1F430 200D 1F469 1F3FF
+1F469 1F3FC 200D 1F4BB
+1F469 1F3FC 200D 1F4BC
+1F469 1F3FC 200D 1F527
+1F469 1F3FC 200D 1F52C
+1F469 1F3FC 200D 1F680
+1F469 1F3FC 200D 1F692
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF
+1F469 1F3FC 200D 1F9AF
+1F469 1F3FC 200D 1F9AF 200D 27A1
+1F469 1F3FC 200D 1F9AF 200D 27A1 FE0F
+1F469 1F3FC 200D 1F9B0
+1F469 1F3FC 200D 1F9B1
+1F469 1F3FC 200D 1F9B2
+1F469 1F3FC 200D 1F9B3
+1F469 1F3FC 200D 1F9BC
+1F469 1F3FC 200D 1F9BC 200D 27A1
+1F469 1F3FC 200D 1F9BC 200D 27A1 FE0F
+1F469 1F3FC 200D 1F9BD
+1F469 1F3FC 200D 1F9BD 200D 27A1
+1F469 1F3FC 200D 1F9BD 200D 27A1 FE0F
+1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FB
+1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FD
+1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FE
+1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FF
+1F469 1F3FC 200D 2695
+1F469 1F3FC 200D 2695 FE0F
+1F469 1F3FC 200D 2696
+1F469 1F3FC 200D 2696 FE0F
+1F469 1F3FC 200D 2708
+1F469 1F3FC 200D 2708 FE0F
+1F469 1F3FC 200D 2764 200D 1F468 1F3FB
+1F469 1F3FC 200D 2764 200D 1F468 1F3FC
+1F469 1F3FC 200D 2764 200D 1F468 1F3FD
+1F469 1F3FC 200D 2764 200D 1F468 1F3FE
+1F469 1F3FC 200D 2764 200D 1F468 1F3FF
+1F469 1F3FC 200D 2764 200D 1F469 1F3FB
+1F469 1F3FC 200D 2764 200D 1F469 1F3FC
+1F469 1F3FC 200D 2764 200D 1F469 1F3FD
+1F469 1F3FC 200D 2764 200D 1F469 1F3FE
+1F469 1F3FC 200D 2764 200D 1F469 1F3FF
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FF
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+1F469 1F3FD
+1F469 1F3FD 200D 1F33E
+1F469 1F3FD 200D 1F373
+1F469 1F3FD 200D 1F37C
+1F469 1F3FD 200D 1F393
+1F469 1F3FD 200D 1F3A4
+1F469 1F3FD 200D 1F3A8
+1F469 1F3FD 200D 1F3EB
+1F469 1F3FD 200D 1F3ED
+1F469 1F3FD 200D 1F430 200D 1F469 1F3FB
+1F469 1F3FD 200D 1F430 200D 1F469 1F3FC
+1F469 1F3FD 200D 1F430 200D 1F469 1F3FE
+1F469 1F3FD 200D 1F430 200D 1F469 1F3FF
+1F469 1F3FD 200D 1F4BB
+1F469 1F3FD 200D 1F4BC
+1F469 1F3FD 200D 1F527
+1F469 1F3FD 200D 1F52C
+1F469 1F3FD 200D 1F680
+1F469 1F3FD 200D 1F692
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF
+1F469 1F3FD 200D 1F9AF
+1F469 1F3FD 200D 1F9AF 200D 27A1
+1F469 1F3FD 200D 1F9AF 200D 27A1 FE0F
+1F469 1F3FD 200D 1F9B0
+1F469 1F3FD 200D 1F9B1
+1F469 1F3FD 200D 1F9B2
+1F469 1F3FD 200D 1F9B3
+1F469 1F3FD 200D 1F9BC
+1F469 1F3FD 200D 1F9BC 200D 27A1
+1F469 1F3FD 200D 1F9BC 200D 27A1 FE0F
+1F469 1F3FD 200D 1F9BD
+1F469 1F3FD 200D 1F9BD 200D 27A1
+1F469 1F3FD 200D 1F9BD 200D 27A1 FE0F
+1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FB
+1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FC
+1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FE
+1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FF
+1F469 1F3FD 200D 2695
+1F469 1F3FD 200D 2695 FE0F
+1F469 1F3FD 200D 2696
+1F469 1F3FD 200D 2696 FE0F
+1F469 1F3FD 200D 2708
+1F469 1F3FD 200D 2708 FE0F
+1F469 1F3FD 200D 2764 200D 1F468 1F3FB
+1F469 1F3FD 200D 2764 200D 1F468 1F3FC
+1F469 1F3FD 200D 2764 200D 1F468 1F3FD
+1F469 1F3FD 200D 2764 200D 1F468 1F3FE
+1F469 1F3FD 200D 2764 200D 1F468 1F3FF
+1F469 1F3FD 200D 2764 200D 1F469 1F3FB
+1F469 1F3FD 200D 2764 200D 1F469 1F3FC
+1F469 1F3FD 200D 2764 200D 1F469 1F3FD
+1F469 1F3FD 200D 2764 200D 1F469 1F3FE
+1F469 1F3FD 200D 2764 200D 1F469 1F3FF
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FF
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+1F469 1F3FE
+1F469 1F3FE 200D 1F33E
+1F469 1F3FE 200D 1F373
+1F469 1F3FE 200D 1F37C
+1F469 1F3FE 200D 1F393
+1F469 1F3FE 200D 1F3A4
+1F469 1F3FE 200D 1F3A8
+1F469 1F3FE 200D 1F3EB
+1F469 1F3FE 200D 1F3ED
+1F469 1F3FE 200D 1F430 200D 1F469 1F3FB
+1F469 1F3FE 200D 1F430 200D 1F469 1F3FC
+1F469 1F3FE 200D 1F430 200D 1F469 1F3FD
+1F469 1F3FE 200D 1F430 200D 1F469 1F3FF
+1F469 1F3FE 200D 1F4BB
+1F469 1F3FE 200D 1F4BC
+1F469 1F3FE 200D 1F527
+1F469 1F3FE 200D 1F52C
+1F469 1F3FE 200D 1F680
+1F469 1F3FE 200D 1F692
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF
+1F469 1F3FE 200D 1F9AF
+1F469 1F3FE 200D 1F9AF 200D 27A1
+1F469 1F3FE 200D 1F9AF 200D 27A1 FE0F
+1F469 1F3FE 200D 1F9B0
+1F469 1F3FE 200D 1F9B1
+1F469 1F3FE 200D 1F9B2
+1F469 1F3FE 200D 1F9B3
+1F469 1F3FE 200D 1F9BC
+1F469 1F3FE 200D 1F9BC 200D 27A1
+1F469 1F3FE 200D 1F9BC 200D 27A1 FE0F
+1F469 1F3FE 200D 1F9BD
+1F469 1F3FE 200D 1F9BD 200D 27A1
+1F469 1F3FE 200D 1F9BD 200D 27A1 FE0F
+1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FB
+1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FC
+1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FD
+1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FF
+1F469 1F3FE 200D 2695
+1F469 1F3FE 200D 2695 FE0F
+1F469 1F3FE 200D 2696
+1F469 1F3FE 200D 2696 FE0F
+1F469 1F3FE 200D 2708
+1F469 1F3FE 200D 2708 FE0F
+1F469 1F3FE 200D 2764 200D 1F468 1F3FB
+1F469 1F3FE 200D 2764 200D 1F468 1F3FC
+1F469 1F3FE 200D 2764 200D 1F468 1F3FD
+1F469 1F3FE 200D 2764 200D 1F468 1F3FE
+1F469 1F3FE 200D 2764 200D 1F468 1F3FF
+1F469 1F3FE 200D 2764 200D 1F469 1F3FB
+1F469 1F3FE 200D 2764 200D 1F469 1F3FC
+1F469 1F3FE 200D 2764 200D 1F469 1F3FD
+1F469 1F3FE 200D 2764 200D 1F469 1F3FE
+1F469 1F3FE 200D 2764 200D 1F469 1F3FF
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FF
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+1F469 1F3FF
+1F469 1F3FF 200D 1F33E
+1F469 1F3FF 200D 1F373
+1F469 1F3FF 200D 1F37C
+1F469 1F3FF 200D 1F393
+1F469 1F3FF 200D 1F3A4
+1F469 1F3FF 200D 1F3A8
+1F469 1F3FF 200D 1F3EB
+1F469 1F3FF 200D 1F3ED
+1F469 1F3FF 200D 1F430 200D 1F469 1F3FB
+1F469 1F3FF 200D 1F430 200D 1F469 1F3FC
+1F469 1F3FF 200D 1F430 200D 1F469 1F3FD
+1F469 1F3FF 200D 1F430 200D 1F469 1F3FE
+1F469 1F3FF 200D 1F4BB
+1F469 1F3FF 200D 1F4BC
+1F469 1F3FF 200D 1F527
+1F469 1F3FF 200D 1F52C
+1F469 1F3FF 200D 1F680
+1F469 1F3FF 200D 1F692
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE
+1F469 1F3FF 200D 1F9AF
+1F469 1F3FF 200D 1F9AF 200D 27A1
+1F469 1F3FF 200D 1F9AF 200D 27A1 FE0F
+1F469 1F3FF 200D 1F9B0
+1F469 1F3FF 200D 1F9B1
+1F469 1F3FF 200D 1F9B2
+1F469 1F3FF 200D 1F9B3
+1F469 1F3FF 200D 1F9BC
+1F469 1F3FF 200D 1F9BC 200D 27A1
+1F469 1F3FF 200D 1F9BC 200D 27A1 FE0F
+1F469 1F3FF 200D 1F9BD
+1F469 1F3FF 200D 1F9BD 200D 27A1
+1F469 1F3FF 200D 1F9BD 200D 27A1 FE0F
+1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FB
+1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FC
+1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FD
+1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FE
+1F469 1F3FF 200D 2695
+1F469 1F3FF 200D 2695 FE0F
+1F469 1F3FF 200D 2696
+1F469 1F3FF 200D 2696 FE0F
+1F469 1F3FF 200D 2708
+1F469 1F3FF 200D 2708 FE0F
+1F469 1F3FF 200D 2764 200D 1F468 1F3FB
+1F469 1F3FF 200D 2764 200D 1F468 1F3FC
+1F469 1F3FF 200D 2764 200D 1F468 1F3FD
+1F469 1F3FF 200D 2764 200D 1F468 1F3FE
+1F469 1F3FF 200D 2764 200D 1F468 1F3FF
+1F469 1F3FF 200D 2764 200D 1F469 1F3FB
+1F469 1F3FF 200D 2764 200D 1F469 1F3FC
+1F469 1F3FF 200D 2764 200D 1F469 1F3FD
+1F469 1F3FF 200D 2764 200D 1F469 1F3FE
+1F469 1F3FF 200D 2764 200D 1F469 1F3FF
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FF
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FB
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FC
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FD
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FE
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF
+1F469 200D 1F33E
+1F469 200D 1F373
+1F469 200D 1F37C
+1F469 200D 1F393
+1F469 200D 1F3A4
+1F469 200D 1F3A8
+1F469 200D 1F3EB
+1F469 200D 1F3ED
+1F469 200D 1F466
+1F469 200D 1F466 200D 1F466
+1F469 200D 1F467
+1F469 200D 1F467 200D 1F466
+1F469 200D 1F467 200D 1F467
+1F469 200D 1F469 200D 1F466
+1F469 200D 1F469 200D 1F466 200D 1F466
+1F469 200D 1F469 200D 1F467
+1F469 200D 1F469 200D 1F467 200D 1F466
+1F469 200D 1F469 200D 1F467 200D 1F467
+1F469 200D 1F4BB
+1F469 200D 1F4BC
+1F469 200D 1F527
+1F469 200D 1F52C
+1F469 200D 1F680
+1F469 200D 1F692
+1F469 200D 1F9AF
+1F469 200D 1F9AF 200D 27A1
+1F469 200D 1F9AF 200D 27A1 FE0F
+1F469 200D 1F9B0
+1F469 200D 1F9B1
+1F469 200D 1F9B2
+1F469 200D 1F9B3
+1F469 200D 1F9BC
+1F469 200D 1F9BC 200D 27A1
+1F469 200D 1F9BC 200D 27A1 FE0F
+1F469 200D 1F9BD
+1F469 200D 1F9BD 200D 27A1
+1F469 200D 1F9BD 200D 27A1 FE0F
+1F469 200D 2695
+1F469 200D 2695 FE0F
+1F469 200D 2696
+1F469 200D 2696 FE0F
+1F469 200D 2708
+1F469 200D 2708 FE0F
+1F469 200D 2764 200D 1F468
+1F469 200D 2764 200D 1F469
+1F469 200D 2764 200D 1F48B 200D 1F468
+1F469 200D 2764 200D 1F48B 200D 1F469
+1F469 200D 2764 FE0F 200D 1F468
+1F469 200D 2764 FE0F 200D 1F469
+1F469 200D 2764 FE0F 200D 1F48B 200D 1F468
+1F469 200D 2764 FE0F 200D 1F48B 200D 1F469
+1F46A
+1F46B
+1F46B 1F3FB
+1F46B 1F3FC
+1F46B 1F3FD
+1F46B 1F3FE
+1F46B 1F3FF
+1F46C
+1F46C 1F3FB
+1F46C 1F3FC
+1F46C 1F3FD
+1F46C 1F3FE
+1F46C 1F3FF
+1F46D
+1F46D 1F3FB
+1F46D 1F3FC
+1F46D 1F3FD
+1F46D 1F3FE
+1F46D 1F3FF
+1F46E
+1F46E 1F3FB
+1F46E 1F3FB 200D 2640
+1F46E 1F3FB 200D 2640 FE0F
+1F46E 1F3FB 200D 2642
+1F46E 1F3FB 200D 2642 FE0F
+1F46E 1F3FC
+1F46E 1F3FC 200D 2640
+1F46E 1F3FC 200D 2640 FE0F
+1F46E 1F3FC 200D 2642
+1F46E 1F3FC 200D 2642 FE0F
+1F46E 1F3FD
+1F46E 1F3FD 200D 2640
+1F46E 1F3FD 200D 2640 FE0F
+1F46E 1F3FD 200D 2642
+1F46E 1F3FD 200D 2642 FE0F
+1F46E 1F3FE
+1F46E 1F3FE 200D 2640
+1F46E 1F3FE 200D 2640 FE0F
+1F46E 1F3FE 200D 2642
+1F46E 1F3FE 200D 2642 FE0F
+1F46E 1F3FF
+1F46E 1F3FF 200D 2640
+1F46E 1F3FF 200D 2640 FE0F
+1F46E 1F3FF 200D 2642
+1F46E 1F3FF 200D 2642 FE0F
+1F46E 200D 2640
+1F46E 200D 2640 FE0F
+1F46E 200D 2642
+1F46E 200D 2642 FE0F
+1F46F
+1F46F 1F3FB
+1F46F 1F3FB 200D 2640
+1F46F 1F3FB 200D 2640 FE0F
+1F46F 1F3FB 200D 2642
+1F46F 1F3FB 200D 2642 FE0F
+1F46F 1F3FC
+1F46F 1F3FC 200D 2640
+1F46F 1F3FC 200D 2640 FE0F
+1F46F 1F3FC 200D 2642
+1F46F 1F3FC 200D 2642 FE0F
+1F46F 1F3FD
+1F46F 1F3FD 200D 2640
+1F46F 1F3FD 200D 2640 FE0F
+1F46F 1F3FD 200D 2642
+1F46F 1F3FD 200D 2642 FE0F
+1F46F 1F3FE
+1F46F 1F3FE 200D 2640
+1F46F 1F3FE 200D 2640 FE0F
+1F46F 1F3FE 200D 2642
+1F46F 1F3FE 200D 2642 FE0F
+1F46F 1F3FF
+1F46F 1F3FF 200D 2640
+1F46F 1F3FF 200D 2640 FE0F
+1F46F 1F3FF 200D 2642
+1F46F 1F3FF 200D 2642 FE0F
+1F46F 200D 2640
+1F46F 200D 2640 FE0F
+1F46F 200D 2642
+1F46F 200D 2642 FE0F
+1F470
+1F470 1F3FB
+1F470 1F3FB 200D 2640
+1F470 1F3FB 200D 2640 FE0F
+1F470 1F3FB 200D 2642
+1F470 1F3FB 200D 2642 FE0F
+1F470 1F3FC
+1F470 1F3FC 200D 2640
+1F470 1F3FC 200D 2640 FE0F
+1F470 1F3FC 200D 2642
+1F470 1F3FC 200D 2642 FE0F
+1F470 1F3FD
+1F470 1F3FD 200D 2640
+1F470 1F3FD 200D 2640 FE0F
+1F470 1F3FD 200D 2642
+1F470 1F3FD 200D 2642 FE0F
+1F470 1F3FE
+1F470 1F3FE 200D 2640
+1F470 1F3FE 200D 2640 FE0F
+1F470 1F3FE 200D 2642
+1F470 1F3FE 200D 2642 FE0F
+1F470 1F3FF
+1F470 1F3FF 200D 2640
+1F470 1F3FF 200D 2640 FE0F
+1F470 1F3FF 200D 2642
+1F470 1F3FF 200D 2642 FE0F
+1F470 200D 2640
+1F470 200D 2640 FE0F
+1F470 200D 2642
+1F470 200D 2642 FE0F
+1F471
+1F471 1F3FB
+1F471 1F3FB 200D 2640
+1F471 1F3FB 200D 2640 FE0F
+1F471 1F3FB 200D 2642
+1F471 1F3FB 200D 2642 FE0F
+1F471 1F3FC
+1F471 1F3FC 200D 2640
+1F471 1F3FC 200D 2640 FE0F
+1F471 1F3FC 200D 2642
+1F471 1F3FC 200D 2642 FE0F
+1F471 1F3FD
+1F471 1F3FD 200D 2640
+1F471 1F3FD 200D 2640 FE0F
+1F471 1F3FD 200D 2642
+1F471 1F3FD 200D 2642 FE0F
+1F471 1F3FE
+1F471 1F3FE 200D 2640
+1F471 1F3FE 200D 2640 FE0F
+1F471 1F3FE 200D 2642
+1F471 1F3FE 200D 2642 FE0F
+1F471 1F3FF
+1F471 1F3FF 200D 2640
+1F471 1F3FF 200D 2640 FE0F
+1F471 1F3FF 200D 2642
+1F471 1F3FF 200D 2642 FE0F
+1F471 200D 2640
+1F471 200D 2640 FE0F
+1F471 200D 2642
+1F471 200D 2642 FE0F
+1F472
+1F472 1F3FB
+1F472 1F3FC
+1F472 1F3FD
+1F472 1F3FE
+1F472 1F3FF
+1F473
+1F473 1F3FB
+1F473 1F3FB 200D 2640
+1F473 1F3FB 200D 2640 FE0F
+1F473 1F3FB 200D 2642
+1F473 1F3FB 200D 2642 FE0F
+1F473 1F3FC
+1F473 1F3FC 200D 2640
+1F473 1F3FC 200D 2640 FE0F
+1F473 1F3FC 200D 2642
+1F473 1F3FC 200D 2642 FE0F
+1F473 1F3FD
+1F473 1F3FD 200D 2640
+1F473 1F3FD 200D 2640 FE0F
+1F473 1F3FD 200D 2642
+1F473 1F3FD 200D 2642 FE0F
+1F473 1F3FE
+1F473 1F3FE 200D 2640
+1F473 1F3FE 200D 2640 FE0F
+1F473 1F3FE 200D 2642
+1F473 1F3FE 200D 2642 FE0F
+1F473 1F3FF
+1F473 1F3FF 200D 2640
+1F473 1F3FF 200D 2640 FE0F
+1F473 1F3FF 200D 2642
+1F473 1F3FF 200D 2642 FE0F
+1F473 200D 2640
+1F473 200D 2640 FE0F
+1F473 200D 2642
+1F473 200D 2642 FE0F
+1F474
+1F474 1F3FB
+1F474 1F3FC
+1F474 1F3FD
+1F474 1F3FE
+1F474 1F3FF
+1F475
+1F475 1F3FB
+1F475 1F3FC
+1F475 1F3FD
+1F475 1F3FE
+1F475 1F3FF
+1F476
+1F476 1F3FB
+1F476 1F3FC
+1F476 1F3FD
+1F476 1F3FE
+1F476 1F3FF
+1F477
+1F477 1F3FB
+1F477 1F3FB 200D 2640
+1F477 1F3FB 200D 2640 FE0F
+1F477 1F3FB 200D 2642
+1F477 1F3FB 200D 2642 FE0F
+1F477 1F3FC
+1F477 1F3FC 200D 2640
+1F477 1F3FC 200D 2640 FE0F
+1F477 1F3FC 200D 2642
+1F477 1F3FC 200D 2642 FE0F
+1F477 1F3FD
+1F477 1F3FD 200D 2640
+1F477 1F3FD 200D 2640 FE0F
+1F477 1F3FD 200D 2642
+1F477 1F3FD 200D 2642 FE0F
+1F477 1F3FE
+1F477 1F3FE 200D 2640
+1F477 1F3FE 200D 2640 FE0F
+1F477 1F3FE 200D 2642
+1F477 1F3FE 200D 2642 FE0F
+1F477 1F3FF
+1F477 1F3FF 200D 2640
+1F477 1F3FF 200D 2640 FE0F
+1F477 1F3FF 200D 2642
+1F477 1F3FF 200D 2642 FE0F
+1F477 200D 2640
+1F477 200D 2640 FE0F
+1F477 200D 2642
+1F477 200D 2642 FE0F
+1F478
+1F478 1F3FB
+1F478 1F3FC
+1F478 1F3FD
+1F478 1F3FE
+1F478 1F3FF
+1F479
+1F47A
+1F47B
+1F47C
+1F47C 1F3FB
+1F47C 1F3FC
+1F47C 1F3FD
+1F47C 1F3FE
+1F47C 1F3FF
+1F47D
+1F47E
+1F47F
+1F480
+1F481
+1F481 1F3FB
+1F481 1F3FB 200D 2640
+1F481 1F3FB 200D 2640 FE0F
+1F481 1F3FB 200D 2642
+1F481 1F3FB 200D 2642 FE0F
+1F481 1F3FC
+1F481 1F3FC 200D 2640
+1F481 1F3FC 200D 2640 FE0F
+1F481 1F3FC 200D 2642
+1F481 1F3FC 200D 2642 FE0F
+1F481 1F3FD
+1F481 1F3FD 200D 2640
+1F481 1F3FD 200D 2640 FE0F
+1F481 1F3FD 200D 2642
+1F481 1F3FD 200D 2642 FE0F
+1F481 1F3FE
+1F481 1F3FE 200D 2640
+1F481 1F3FE 200D 2640 FE0F
+1F481 1F3FE 200D 2642
+1F481 1F3FE 200D 2642 FE0F
+1F481 1F3FF
+1F481 1F3FF 200D 2640
+1F481 1F3FF 200D 2640 FE0F
+1F481 1F3FF 200D 2642
+1F481 1F3FF 200D 2642 FE0F
+1F481 200D 2640
+1F481 200D 2640 FE0F
+1F481 200D 2642
+1F481 200D 2642 FE0F
+1F482
+1F482 1F3FB
+1F482 1F3FB 200D 2640
+1F482 1F3FB 200D 2640 FE0F
+1F482 1F3FB 200D 2642
+1F482 1F3FB 200D 2642 FE0F
+1F482 1F3FC
+1F482 1F3FC 200D 2640
+1F482 1F3FC 200D 2640 FE0F
+1F482 1F3FC 200D 2642
+1F482 1F3FC 200D 2642 FE0F
+1F482 1F3FD
+1F482 1F3FD 200D 2640
+1F482 1F3FD 200D 2640 FE0F
+1F482 1F3FD 200D 2642
+1F482 1F3FD 200D 2642 FE0F
+1F482 1F3FE
+1F482 1F3FE 200D 2640
+1F482 1F3FE 200D 2640 FE0F
+1F482 1F3FE 200D 2642
+1F482 1F3FE 200D 2642 FE0F
+1F482 1F3FF
+1F482 1F3FF 200D 2640
+1F482 1F3FF 200D 2640 FE0F
+1F482 1F3FF 200D 2642
+1F482 1F3FF 200D 2642 FE0F
+1F482 200D 2640
+1F482 200D 2640 FE0F
+1F482 200D 2642
+1F482 200D 2642 FE0F
+1F483
+1F483 1F3FB
+1F483 1F3FC
+1F483 1F3FD
+1F483 1F3FE
+1F483 1F3FF
+1F484
+1F485
+1F485 1F3FB
+1F485 1F3FC
+1F485 1F3FD
+1F485 1F3FE
+1F485 1F3FF
+1F486
+1F486 1F3FB
+1F486 1F3FB 200D 2640
+1F486 1F3FB 200D 2640 FE0F
+1F486 1F3FB 200D 2642
+1F486 1F3FB 200D 2642 FE0F
+1F486 1F3FC
+1F486 1F3FC 200D 2640
+1F486 1F3FC 200D 2640 FE0F
+1F486 1F3FC 200D 2642
+1F486 1F3FC 200D 2642 FE0F
+1F486 1F3FD
+1F486 1F3FD 200D 2640
+1F486 1F3FD 200D 2640 FE0F
+1F486 1F3FD 200D 2642
+1F486 1F3FD 200D 2642 FE0F
+1F486 1F3FE
+1F486 1F3FE 200D 2640
+1F486 1F3FE 200D 2640 FE0F
+1F486 1F3FE 200D 2642
+1F486 1F3FE 200D 2642 FE0F
+1F486 1F3FF
+1F486 1F3FF 200D 2640
+1F486 1F3FF 200D 2640 FE0F
+1F486 1F3FF 200D 2642
+1F486 1F3FF 200D 2642 FE0F
+1F486 200D 2640
+1F486 200D 2640 FE0F
+1F486 200D 2642
+1F486 200D 2642 FE0F
+1F487
+1F487 1F3FB
+1F487 1F3FB 200D 2640
+1F487 1F3FB 200D 2640 FE0F
+1F487 1F3FB 200D 2642
+1F487 1F3FB 200D 2642 FE0F
+1F487 1F3FC
+1F487 1F3FC 200D 2640
+1F487 1F3FC 200D 2640 FE0F
+1F487 1F3FC 200D 2642
+1F487 1F3FC 200D 2642 FE0F
+1F487 1F3FD
+1F487 1F3FD 200D 2640
+1F487 1F3FD 200D 2640 FE0F
+1F487 1F3FD 200D 2642
+1F487 1F3FD 200D 2642 FE0F
+1F487 1F3FE
+1F487 1F3FE 200D 2640
+1F487 1F3FE 200D 2640 FE0F
+1F487 1F3FE 200D 2642
+1F487 1F3FE 200D 2642 FE0F
+1F487 1F3FF
+1F487 1F3FF 200D 2640
+1F487 1F3FF 200D 2640 FE0F
+1F487 1F3FF 200D 2642
+1F487 1F3FF 200D 2642 FE0F
+1F487 200D 2640
+1F487 200D 2640 FE0F
+1F487 200D 2642
+1F487 200D 2642 FE0F
+1F488
+1F489
+1F48A
+1F48B
+1F48C
+1F48D
+1F48E
+1F48F
+1F48F 1F3FB
+1F48F 1F3FC
+1F48F 1F3FD
+1F48F 1F3FE
+1F48F 1F3FF
+1F490
+1F491
+1F491 1F3FB
+1F491 1F3FC
+1F491 1F3FD
+1F491 1F3FE
+1F491 1F3FF
+1F492
+1F493
+1F494
+1F495
+1F496
+1F497
+1F498
+1F499
+1F49A
+1F49B
+1F49C
+1F49D
+1F49E
+1F49F
+1F4A0
+1F4A1
+1F4A2
+1F4A3
+1F4A4
+1F4A5
+1F4A6
+1F4A7
+1F4A8
+1F4A9
+1F4AA
+1F4AA 1F3FB
+1F4AA 1F3FC
+1F4AA 1F3FD
+1F4AA 1F3FE
+1F4AA 1F3FF
+1F4AB
+1F4AC
+1F4AD
+1F4AE
+1F4AF
+1F4B0
+1F4B1
+1F4B2
+1F4B3
+1F4B4
+1F4B5
+1F4B6
+1F4B7
+1F4B8
+1F4B9
+1F4BA
+1F4BB
+1F4BC
+1F4BD
+1F4BE
+1F4BF
+1F4C0
+1F4C1
+1F4C2
+1F4C3
+1F4C4
+1F4C5
+1F4C6
+1F4C7
+1F4C8
+1F4C9
+1F4CA
+1F4CB
+1F4CC
+1F4CD
+1F4CE
+1F4CF
+1F4D0
+1F4D1
+1F4D2
+1F4D3
+1F4D4
+1F4D5
+1F4D6
+1F4D7
+1F4D8
+1F4D9
+1F4DA
+1F4DB
+1F4DC
+1F4DD
+1F4DE
+1F4DF
+1F4E0
+1F4E1
+1F4E2
+1F4E3
+1F4E4
+1F4E5
+1F4E6
+1F4E7
+1F4E8
+1F4E9
+1F4EA
+1F4EB
+1F4EC
+1F4ED
+1F4EE
+1F4EF
+1F4F0
+1F4F1
+1F4F2
+1F4F3
+1F4F4
+1F4F5
+1F4F6
+1F4F7
+1F4F8
+1F4F9
+1F4FA
+1F4FB
+1F4FC
+1F4FD
+1F4FD FE0F
+1F4FF
+1F500
+1F501
+1F502
+1F503
+1F504
+1F505
+1F506
+1F507
+1F508
+1F509
+1F50A
+1F50B
+1F50C
+1F50D
+1F50E
+1F50F
+1F510
+1F511
+1F512
+1F513
+1F514
+1F515
+1F516
+1F517
+1F518
+1F519
+1F51A
+1F51B
+1F51C
+1F51D
+1F51E
+1F51F
+1F520
+1F521
+1F522
+1F523
+1F524
+1F525
+1F526
+1F527
+1F528
+1F529
+1F52A
+1F52B
+1F52C
+1F52D
+1F52E
+1F52F
+1F530
+1F531
+1F532
+1F533
+1F534
+1F535
+1F536
+1F537
+1F538
+1F539
+1F53A
+1F53B
+1F53C
+1F53D
+1F549
+1F549 FE0F
+1F54A
+1F54A FE0F
+1F54B
+1F54C
+1F54D
+1F54E
+1F550
+1F551
+1F552
+1F553
+1F554
+1F555
+1F556
+1F557
+1F558
+1F559
+1F55A
+1F55B
+1F55C
+1F55D
+1F55E
+1F55F
+1F560
+1F561
+1F562
+1F563
+1F564
+1F565
+1F566
+1F567
+1F56F
+1F56F FE0F
+1F570
+1F570 FE0F
+1F573
+1F573 FE0F
+1F574
+1F574 1F3FB
+1F574 1F3FC
+1F574 1F3FD
+1F574 1F3FE
+1F574 1F3FF
+1F574 FE0F
+1F575
+1F575 1F3FB
+1F575 1F3FB 200D 2640
+1F575 1F3FB 200D 2640 FE0F
+1F575 1F3FB 200D 2642
+1F575 1F3FB 200D 2642 FE0F
+1F575 1F3FC
+1F575 1F3FC 200D 2640
+1F575 1F3FC 200D 2640 FE0F
+1F575 1F3FC 200D 2642
+1F575 1F3FC 200D 2642 FE0F
+1F575 1F3FD
+1F575 1F3FD 200D 2640
+1F575 1F3FD 200D 2640 FE0F
+1F575 1F3FD 200D 2642
+1F575 1F3FD 200D 2642 FE0F
+1F575 1F3FE
+1F575 1F3FE 200D 2640
+1F575 1F3FE 200D 2640 FE0F
+1F575 1F3FE 200D 2642
+1F575 1F3FE 200D 2642 FE0F
+1F575 1F3FF
+1F575 1F3FF 200D 2640
+1F575 1F3FF 200D 2640 FE0F
+1F575 1F3FF 200D 2642
+1F575 1F3FF 200D 2642 FE0F
+1F575 200D 2640
+1F575 200D 2640 FE0F
+1F575 200D 2642
+1F575 200D 2642 FE0F
+1F575 FE0F
+1F575 FE0F 200D 2640
+1F575 FE0F 200D 2640 FE0F
+1F575 FE0F 200D 2642
+1F575 FE0F 200D 2642 FE0F
+1F576
+1F576 FE0F
+1F577
+1F577 FE0F
+1F578
+1F578 FE0F
+1F579
+1F579 FE0F
+1F57A
+1F57A 1F3FB
+1F57A 1F3FC
+1F57A 1F3FD
+1F57A 1F3FE
+1F57A 1F3FF
+1F587
+1F587 FE0F
+1F58A
+1F58A FE0F
+1F58B
+1F58B FE0F
+1F58C
+1F58C FE0F
+1F58D
+1F58D FE0F
+1F590
+1F590 1F3FB
+1F590 1F3FC
+1F590 1F3FD
+1F590 1F3FE
+1F590 1F3FF
+1F590 FE0F
+1F595
+1F595 1F3FB
+1F595 1F3FC
+1F595 1F3FD
+1F595 1F3FE
+1F595 1F3FF
+1F596
+1F596 1F3FB
+1F596 1F3FC
+1F596 1F3FD
+1F596 1F3FE
+1F596 1F3FF
+1F5A4
+1F5A5
+1F5A5 FE0F
+1F5A8
+1F5A8 FE0F
+1F5B1
+1F5B1 FE0F
+1F5B2
+1F5B2 FE0F
+1F5BC
+1F5BC FE0F
+1F5C2
+1F5C2 FE0F
+1F5C3
+1F5C3 FE0F
+1F5C4
+1F5C4 FE0F
+1F5D1
+1F5D1 FE0F
+1F5D2
+1F5D2 FE0F
+1F5D3
+1F5D3 FE0F
+1F5DC
+1F5DC FE0F
+1F5DD
+1F5DD FE0F
+1F5DE
+1F5DE FE0F
+1F5E1
+1F5E1 FE0F
+1F5E3
+1F5E3 FE0F
+1F5E8
+1F5E8 FE0F
+1F5EF
+1F5EF FE0F
+1F5F3
+1F5F3 FE0F
+1F5FA
+1F5FA FE0F
+1F5FB
+1F5FC
+1F5FD
+1F5FE
+1F5FF
+1F600
+1F601
+1F602
+1F603
+1F604
+1F605
+1F606
+1F607
+1F608
+1F609
+1F60A
+1F60B
+1F60C
+1F60D
+1F60E
+1F60F
+1F610
+1F611
+1F612
+1F613
+1F614
+1F615
+1F616
+1F617
+1F618
+1F619
+1F61A
+1F61B
+1F61C
+1F61D
+1F61E
+1F61F
+1F620
+1F621
+1F622
+1F623
+1F624
+1F625
+1F626
+1F627
+1F628
+1F629
+1F62A
+1F62B
+1F62C
+1F62D
+1F62E
+1F62E 200D 1F4A8
+1F62F
+1F630
+1F631
+1F632
+1F633
+1F634
+1F635
+1F635 200D 1F4AB
+1F636
+1F636 200D 1F32B
+1F636 200D 1F32B FE0F
+1F637
+1F638
+1F639
+1F63A
+1F63B
+1F63C
+1F63D
+1F63E
+1F63F
+1F640
+1F641
+1F642
+1F642 200D 2194
+1F642 200D 2194 FE0F
+1F642 200D 2195
+1F642 200D 2195 FE0F
+1F643
+1F644
+1F645
+1F645 1F3FB
+1F645 1F3FB 200D 2640
+1F645 1F3FB 200D 2640 FE0F
+1F645 1F3FB 200D 2642
+1F645 1F3FB 200D 2642 FE0F
+1F645 1F3FC
+1F645 1F3FC 200D 2640
+1F645 1F3FC 200D 2640 FE0F
+1F645 1F3FC 200D 2642
+1F645 1F3FC 200D 2642 FE0F
+1F645 1F3FD
+1F645 1F3FD 200D 2640
+1F645 1F3FD 200D 2640 FE0F
+1F645 1F3FD 200D 2642
+1F645 1F3FD 200D 2642 FE0F
+1F645 1F3FE
+1F645 1F3FE 200D 2640
+1F645 1F3FE 200D 2640 FE0F
+1F645 1F3FE 200D 2642
+1F645 1F3FE 200D 2642 FE0F
+1F645 1F3FF
+1F645 1F3FF 200D 2640
+1F645 1F3FF 200D 2640 FE0F
+1F645 1F3FF 200D 2642
+1F645 1F3FF 200D 2642 FE0F
+1F645 200D 2640
+1F645 200D 2640 FE0F
+1F645 200D 2642
+1F645 200D 2642 FE0F
+1F646
+1F646 1F3FB
+1F646 1F3FB 200D 2640
+1F646 1F3FB 200D 2640 FE0F
+1F646 1F3FB 200D 2642
+1F646 1F3FB 200D 2642 FE0F
+1F646 1F3FC
+1F646 1F3FC 200D 2640
+1F646 1F3FC 200D 2640 FE0F
+1F646 1F3FC 200D 2642
+1F646 1F3FC 200D 2642 FE0F
+1F646 1F3FD
+1F646 1F3FD 200D 2640
+1F646 1F3FD 200D 2640 FE0F
+1F646 1F3FD 200D 2642
+1F646 1F3FD 200D 2642 FE0F
+1F646 1F3FE
+1F646 1F3FE 200D 2640
+1F646 1F3FE 200D 2640 FE0F
+1F646 1F3FE 200D 2642
+1F646 1F3FE 200D 2642 FE0F
+1F646 1F3FF
+1F646 1F3FF 200D 2640
+1F646 1F3FF 200D 2640 FE0F
+1F646 1F3FF 200D 2642
+1F646 1F3FF 200D 2642 FE0F
+1F646 200D 2640
+1F646 200D 2640 FE0F
+1F646 200D 2642
+1F646 200D 2642 FE0F
+1F647
+1F647 1F3FB
+1F647 1F3FB 200D 2640
+1F647 1F3FB 200D 2640 FE0F
+1F647 1F3FB 200D 2642
+1F647 1F3FB 200D 2642 FE0F
+1F647 1F3FC
+1F647 1F3FC 200D 2640
+1F647 1F3FC 200D 2640 FE0F
+1F647 1F3FC 200D 2642
+1F647 1F3FC 200D 2642 FE0F
+1F647 1F3FD
+1F647 1F3FD 200D 2640
+1F647 1F3FD 200D 2640 FE0F
+1F647 1F3FD 200D 2642
+1F647 1F3FD 200D 2642 FE0F
+1F647 1F3FE
+1F647 1F3FE 200D 2640
+1F647 1F3FE 200D 2640 FE0F
+1F647 1F3FE 200D 2642
+1F647 1F3FE 200D 2642 FE0F
+1F647 1F3FF
+1F647 1F3FF 200D 2640
+1F647 1F3FF 200D 2640 FE0F
+1F647 1F3FF 200D 2642
+1F647 1F3FF 200D 2642 FE0F
+1F647 200D 2640
+1F647 200D 2640 FE0F
+1F647 200D 2642
+1F647 200D 2642 FE0F
+1F648
+1F649
+1F64A
+1F64B
+1F64B 1F3FB
+1F64B 1F3FB 200D 2640
+1F64B 1F3FB 200D 2640 FE0F
+1F64B 1F3FB 200D 2642
+1F64B 1F3FB 200D 2642 FE0F
+1F64B 1F3FC
+1F64B 1F3FC 200D 2640
+1F64B 1F3FC 200D 2640 FE0F
+1F64B 1F3FC 200D 2642
+1F64B 1F3FC 200D 2642 FE0F
+1F64B 1F3FD
+1F64B 1F3FD 200D 2640
+1F64B 1F3FD 200D 2640 FE0F
+1F64B 1F3FD 200D 2642
+1F64B 1F3FD 200D 2642 FE0F
+1F64B 1F3FE
+1F64B 1F3FE 200D 2640
+1F64B 1F3FE 200D 2640 FE0F
+1F64B 1F3FE 200D 2642
+1F64B 1F3FE 200D 2642 FE0F
+1F64B 1F3FF
+1F64B 1F3FF 200D 2640
+1F64B 1F3FF 200D 2640 FE0F
+1F64B 1F3FF 200D 2642
+1F64B 1F3FF 200D 2642 FE0F
+1F64B 200D 2640
+1F64B 200D 2640 FE0F
+1F64B 200D 2642
+1F64B 200D 2642 FE0F
+1F64C
+1F64C 1F3FB
+1F64C 1F3FC
+1F64C 1F3FD
+1F64C 1F3FE
+1F64C 1F3FF
+1F64D
+1F64D 1F3FB
+1F64D 1F3FB 200D 2640
+1F64D 1F3FB 200D 2640 FE0F
+1F64D 1F3FB 200D 2642
+1F64D 1F3FB 200D 2642 FE0F
+1F64D 1F3FC
+1F64D 1F3FC 200D 2640
+1F64D 1F3FC 200D 2640 FE0F
+1F64D 1F3FC 200D 2642
+1F64D 1F3FC 200D 2642 FE0F
+1F64D 1F3FD
+1F64D 1F3FD 200D 2640
+1F64D 1F3FD 200D 2640 FE0F
+1F64D 1F3FD 200D 2642
+1F64D 1F3FD 200D 2642 FE0F
+1F64D 1F3FE
+1F64D 1F3FE 200D 2640
+1F64D 1F3FE 200D 2640 FE0F
+1F64D 1F3FE 200D 2642
+1F64D 1F3FE 200D 2642 FE0F
+1F64D 1F3FF
+1F64D 1F3FF 200D 2640
+1F64D 1F3FF 200D 2640 FE0F
+1F64D 1F3FF 200D 2642
+1F64D 1F3FF 200D 2642 FE0F
+1F64D 200D 2640
+1F64D 200D 2640 FE0F
+1F64D 200D 2642
+1F64D 200D 2642 FE0F
+1F64E
+1F64E 1F3FB
+1F64E 1F3FB 200D 2640
+1F64E 1F3FB 200D 2640 FE0F
+1F64E 1F3FB 200D 2642
+1F64E 1F3FB 200D 2642 FE0F
+1F64E 1F3FC
+1F64E 1F3FC 200D 2640
+1F64E 1F3FC 200D 2640 FE0F
+1F64E 1F3FC 200D 2642
+1F64E 1F3FC 200D 2642 FE0F
+1F64E 1F3FD
+1F64E 1F3FD 200D 2640
+1F64E 1F3FD 200D 2640 FE0F
+1F64E 1F3FD 200D 2642
+1F64E 1F3FD 200D 2642 FE0F
+1F64E 1F3FE
+1F64E 1F3FE 200D 2640
+1F64E 1F3FE 200D 2640 FE0F
+1F64E 1F3FE 200D 2642
+1F64E 1F3FE 200D 2642 FE0F
+1F64E 1F3FF
+1F64E 1F3FF 200D 2640
+1F64E 1F3FF 200D 2640 FE0F
+1F64E 1F3FF 200D 2642
+1F64E 1F3FF 200D 2642 FE0F
+1F64E 200D 2640
+1F64E 200D 2640 FE0F
+1F64E 200D 2642
+1F64E 200D 2642 FE0F
+1F64F
+1F64F 1F3FB
+1F64F 1F3FC
+1F64F 1F3FD
+1F64F 1F3FE
+1F64F 1F3FF
+1F680
+1F681
+1F682
+1F683
+1F684
+1F685
+1F686
+1F687
+1F688
+1F689
+1F68A
+1F68B
+1F68C
+1F68D
+1F68E
+1F68F
+1F690
+1F691
+1F692
+1F693
+1F694
+1F695
+1F696
+1F697
+1F698
+1F699
+1F69A
+1F69B
+1F69C
+1F69D
+1F69E
+1F69F
+1F6A0
+1F6A1
+1F6A2
+1F6A3
+1F6A3 1F3FB
+1F6A3 1F3FB 200D 2640
+1F6A3 1F3FB 200D 2640 FE0F
+1F6A3 1F3FB 200D 2642
+1F6A3 1F3FB 200D 2642 FE0F
+1F6A3 1F3FC
+1F6A3 1F3FC 200D 2640
+1F6A3 1F3FC 200D 2640 FE0F
+1F6A3 1F3FC 200D 2642
+1F6A3 1F3FC 200D 2642 FE0F
+1F6A3 1F3FD
+1F6A3 1F3FD 200D 2640
+1F6A3 1F3FD 200D 2640 FE0F
+1F6A3 1F3FD 200D 2642
+1F6A3 1F3FD 200D 2642 FE0F
+1F6A3 1F3FE
+1F6A3 1F3FE 200D 2640
+1F6A3 1F3FE 200D 2640 FE0F
+1F6A3 1F3FE 200D 2642
+1F6A3 1F3FE 200D 2642 FE0F
+1F6A3 1F3FF
+1F6A3 1F3FF 200D 2640
+1F6A3 1F3FF 200D 2640 FE0F
+1F6A3 1F3FF 200D 2642
+1F6A3 1F3FF 200D 2642 FE0F
+1F6A3 200D 2640
+1F6A3 200D 2640 FE0F
+1F6A3 200D 2642
+1F6A3 200D 2642 FE0F
+1F6A4
+1F6A5
+1F6A6
+1F6A7
+1F6A8
+1F6A9
+1F6AA
+1F6AB
+1F6AC
+1F6AD
+1F6AE
+1F6AF
+1F6B0
+1F6B1
+1F6B2
+1F6B3
+1F6B4
+1F6B4 1F3FB
+1F6B4 1F3FB 200D 2640
+1F6B4 1F3FB 200D 2640 FE0F
+1F6B4 1F3FB 200D 2642
+1F6B4 1F3FB 200D 2642 FE0F
+1F6B4 1F3FC
+1F6B4 1F3FC 200D 2640
+1F6B4 1F3FC 200D 2640 FE0F
+1F6B4 1F3FC 200D 2642
+1F6B4 1F3FC 200D 2642 FE0F
+1F6B4 1F3FD
+1F6B4 1F3FD 200D 2640
+1F6B4 1F3FD 200D 2640 FE0F
+1F6B4 1F3FD 200D 2642
+1F6B4 1F3FD 200D 2642 FE0F
+1F6B4 1F3FE
+1F6B4 1F3FE 200D 2640
+1F6B4 1F3FE 200D 2640 FE0F
+1F6B4 1F3FE 200D 2642
+1F6B4 1F3FE 200D 2642 FE0F
+1F6B4 1F3FF
+1F6B4 1F3FF 200D 2640
+1F6B4 1F3FF 200D 2640 FE0F
+1F6B4 1F3FF 200D 2642
+1F6B4 1F3FF 200D 2642 FE0F
+1F6B4 200D 2640
+1F6B4 200D 2640 FE0F
+1F6B4 200D 2642
+1F6B4 200D 2642 FE0F
+1F6B5
+1F6B5 1F3FB
+1F6B5 1F3FB 200D 2640
+1F6B5 1F3FB 200D 2640 FE0F
+1F6B5 1F3FB 200D 2642
+1F6B5 1F3FB 200D 2642 FE0F
+1F6B5 1F3FC
+1F6B5 1F3FC 200D 2640
+1F6B5 1F3FC 200D 2640 FE0F
+1F6B5 1F3FC 200D 2642
+1F6B5 1F3FC 200D 2642 FE0F
+1F6B5 1F3FD
+1F6B5 1F3FD 200D 2640
+1F6B5 1F3FD 200D 2640 FE0F
+1F6B5 1F3FD 200D 2642
+1F6B5 1F3FD 200D 2642 FE0F
+1F6B5 1F3FE
+1F6B5 1F3FE 200D 2640
+1F6B5 1F3FE 200D 2640 FE0F
+1F6B5 1F3FE 200D 2642
+1F6B5 1F3FE 200D 2642 FE0F
+1F6B5 1F3FF
+1F6B5 1F3FF 200D 2640
+1F6B5 1F3FF 200D 2640 FE0F
+1F6B5 1F3FF 200D 2642
+1F6B5 1F3FF 200D 2642 FE0F
+1F6B5 200D 2640
+1F6B5 200D 2640 FE0F
+1F6B5 200D 2642
+1F6B5 200D 2642 FE0F
+1F6B6
+1F6B6 1F3FB
+1F6B6 1F3FB 200D 2640
+1F6B6 1F3FB 200D 2640 200D 27A1
+1F6B6 1F3FB 200D 2640 200D 27A1 FE0F
+1F6B6 1F3FB 200D 2640 FE0F
+1F6B6 1F3FB 200D 2640 FE0F 200D 27A1
+1F6B6 1F3FB 200D 2640 FE0F 200D 27A1 FE0F
+1F6B6 1F3FB 200D 2642
+1F6B6 1F3FB 200D 2642 200D 27A1
+1F6B6 1F3FB 200D 2642 200D 27A1 FE0F
+1F6B6 1F3FB 200D 2642 FE0F
+1F6B6 1F3FB 200D 2642 FE0F 200D 27A1
+1F6B6 1F3FB 200D 2642 FE0F 200D 27A1 FE0F
+1F6B6 1F3FB 200D 27A1
+1F6B6 1F3FB 200D 27A1 FE0F
+1F6B6 1F3FC
+1F6B6 1F3FC 200D 2640
+1F6B6 1F3FC 200D 2640 200D 27A1
+1F6B6 1F3FC 200D 2640 200D 27A1 FE0F
+1F6B6 1F3FC 200D 2640 FE0F
+1F6B6 1F3FC 200D 2640 FE0F 200D 27A1
+1F6B6 1F3FC 200D 2640 FE0F 200D 27A1 FE0F
+1F6B6 1F3FC 200D 2642
+1F6B6 1F3FC 200D 2642 200D 27A1
+1F6B6 1F3FC 200D 2642 200D 27A1 FE0F
+1F6B6 1F3FC 200D 2642 FE0F
+1F6B6 1F3FC 200D 2642 FE0F 200D 27A1
+1F6B6 1F3FC 200D 2642 FE0F 200D 27A1 FE0F
+1F6B6 1F3FC 200D 27A1
+1F6B6 1F3FC 200D 27A1 FE0F
+1F6B6 1F3FD
+1F6B6 1F3FD 200D 2640
+1F6B6 1F3FD 200D 2640 200D 27A1
+1F6B6 1F3FD 200D 2640 200D 27A1 FE0F
+1F6B6 1F3FD 200D 2640 FE0F
+1F6B6 1F3FD 200D 2640 FE0F 200D 27A1
+1F6B6 1F3FD 200D 2640 FE0F 200D 27A1 FE0F
+1F6B6 1F3FD 200D 2642
+1F6B6 1F3FD 200D 2642 200D 27A1
+1F6B6 1F3FD 200D 2642 200D 27A1 FE0F
+1F6B6 1F3FD 200D 2642 FE0F
+1F6B6 1F3FD 200D 2642 FE0F 200D 27A1
+1F6B6 1F3FD 200D 2642 FE0F 200D 27A1 FE0F
+1F6B6 1F3FD 200D 27A1
+1F6B6 1F3FD 200D 27A1 FE0F
+1F6B6 1F3FE
+1F6B6 1F3FE 200D 2640
+1F6B6 1F3FE 200D 2640 200D 27A1
+1F6B6 1F3FE 200D 2640 200D 27A1 FE0F
+1F6B6 1F3FE 200D 2640 FE0F
+1F6B6 1F3FE 200D 2640 FE0F 200D 27A1
+1F6B6 1F3FE 200D 2640 FE0F 200D 27A1 FE0F
+1F6B6 1F3FE 200D 2642
+1F6B6 1F3FE 200D 2642 200D 27A1
+1F6B6 1F3FE 200D 2642 200D 27A1 FE0F
+1F6B6 1F3FE 200D 2642 FE0F
+1F6B6 1F3FE 200D 2642 FE0F 200D 27A1
+1F6B6 1F3FE 200D 2642 FE0F 200D 27A1 FE0F
+1F6B6 1F3FE 200D 27A1
+1F6B6 1F3FE 200D 27A1 FE0F
+1F6B6 1F3FF
+1F6B6 1F3FF 200D 2640
+1F6B6 1F3FF 200D 2640 200D 27A1
+1F6B6 1F3FF 200D 2640 200D 27A1 FE0F
+1F6B6 1F3FF 200D 2640 FE0F
+1F6B6 1F3FF 200D 2640 FE0F 200D 27A1
+1F6B6 1F3FF 200D 2640 FE0F 200D 27A1 FE0F
+1F6B6 1F3FF 200D 2642
+1F6B6 1F3FF 200D 2642 200D 27A1
+1F6B6 1F3FF 200D 2642 200D 27A1 FE0F
+1F6B6 1F3FF 200D 2642 FE0F
+1F6B6 1F3FF 200D 2642 FE0F 200D 27A1
+1F6B6 1F3FF 200D 2642 FE0F 200D 27A1 FE0F
+1F6B6 1F3FF 200D 27A1
+1F6B6 1F3FF 200D 27A1 FE0F
+1F6B6 200D 2640
+1F6B6 200D 2640 200D 27A1
+1F6B6 200D 2640 200D 27A1 FE0F
+1F6B6 200D 2640 FE0F
+1F6B6 200D 2640 FE0F 200D 27A1
+1F6B6 200D 2640 FE0F 200D 27A1 FE0F
+1F6B6 200D 2642
+1F6B6 200D 2642 200D 27A1
+1F6B6 200D 2642 200D 27A1 FE0F
+1F6B6 200D 2642 FE0F
+1F6B6 200D 2642 FE0F 200D 27A1
+1F6B6 200D 2642 FE0F 200D 27A1 FE0F
+1F6B6 200D 27A1
+1F6B6 200D 27A1 FE0F
+1F6B7
+1F6B8
+1F6B9
+1F6BA
+1F6BB
+1F6BC
+1F6BD
+1F6BE
+1F6BF
+1F6C0
+1F6C0 1F3FB
+1F6C0 1F3FC
+1F6C0 1F3FD
+1F6C0 1F3FE
+1F6C0 1F3FF
+1F6C1
+1F6C2
+1F6C3
+1F6C4
+1F6C5
+1F6CB
+1F6CB FE0F
+1F6CC
+1F6CC 1F3FB
+1F6CC 1F3FC
+1F6CC 1F3FD
+1F6CC 1F3FE
+1F6CC 1F3FF
+1F6CD
+1F6CD FE0F
+1F6CE
+1F6CE FE0F
+1F6CF
+1F6CF FE0F
+1F6D0
+1F6D1
+1F6D2
+1F6D5
+1F6D6
+1F6D7
+1F6D8
+1F6DC
+1F6DD
+1F6DE
+1F6DF
+1F6E0
+1F6E0 FE0F
+1F6E1
+1F6E1 FE0F
+1F6E2
+1F6E2 FE0F
+1F6E3
+1F6E3 FE0F
+1F6E4
+1F6E4 FE0F
+1F6E5
+1F6E5 FE0F
+1F6E9
+1F6E9 FE0F
+1F6EB
+1F6EC
+1F6F0
+1F6F0 FE0F
+1F6F3
+1F6F3 FE0F
+1F6F4
+1F6F5
+1F6F6
+1F6F7
+1F6F8
+1F6F9
+1F6FA
+1F6FB
+1F6FC
+1F7E0
+1F7E1
+1F7E2
+1F7E3
+1F7E4
+1F7E5
+1F7E6
+1F7E7
+1F7E8
+1F7E9
+1F7EA
+1F7EB
+1F7F0
+1F90C
+1F90C 1F3FB
+1F90C 1F3FC
+1F90C 1F3FD
+1F90C 1F3FE
+1F90C 1F3FF
+1F90D
+1F90E
+1F90F
+1F90F 1F3FB
+1F90F 1F3FC
+1F90F 1F3FD
+1F90F 1F3FE
+1F90F 1F3FF
+1F910
+1F911
+1F912
+1F913
+1F914
+1F915
+1F916
+1F917
+1F918
+1F918 1F3FB
+1F918 1F3FC
+1F918 1F3FD
+1F918 1F3FE
+1F918 1F3FF
+1F919
+1F919 1F3FB
+1F919 1F3FC
+1F919 1F3FD
+1F919 1F3FE
+1F919 1F3FF
+1F91A
+1F91A 1F3FB
+1F91A 1F3FC
+1F91A 1F3FD
+1F91A 1F3FE
+1F91A 1F3FF
+1F91B
+1F91B 1F3FB
+1F91B 1F3FC
+1F91B 1F3FD
+1F91B 1F3FE
+1F91B 1F3FF
+1F91C
+1F91C 1F3FB
+1F91C 1F3FC
+1F91C 1F3FD
+1F91C 1F3FE
+1F91C 1F3FF
+1F91D
+1F91D 1F3FB
+1F91D 1F3FC
+1F91D 1F3FD
+1F91D 1F3FE
+1F91D 1F3FF
+1F91E
+1F91E 1F3FB
+1F91E 1F3FC
+1F91E 1F3FD
+1F91E 1F3FE
+1F91E 1F3FF
+1F91F
+1F91F 1F3FB
+1F91F 1F3FC
+1F91F 1F3FD
+1F91F 1F3FE
+1F91F 1F3FF
+1F920
+1F921
+1F922
+1F923
+1F924
+1F925
+1F926
+1F926 1F3FB
+1F926 1F3FB 200D 2640
+1F926 1F3FB 200D 2640 FE0F
+1F926 1F3FB 200D 2642
+1F926 1F3FB 200D 2642 FE0F
+1F926 1F3FC
+1F926 1F3FC 200D 2640
+1F926 1F3FC 200D 2640 FE0F
+1F926 1F3FC 200D 2642
+1F926 1F3FC 200D 2642 FE0F
+1F926 1F3FD
+1F926 1F3FD 200D 2640
+1F926 1F3FD 200D 2640 FE0F
+1F926 1F3FD 200D 2642
+1F926 1F3FD 200D 2642 FE0F
+1F926 1F3FE
+1F926 1F3FE 200D 2640
+1F926 1F3FE 200D 2640 FE0F
+1F926 1F3FE 200D 2642
+1F926 1F3FE 200D 2642 FE0F
+1F926 1F3FF
+1F926 1F3FF 200D 2640
+1F926 1F3FF 200D 2640 FE0F
+1F926 1F3FF 200D 2642
+1F926 1F3FF 200D 2642 FE0F
+1F926 200D 2640
+1F926 200D 2640 FE0F
+1F926 200D 2642
+1F926 200D 2642 FE0F
+1F927
+1F928
+1F929
+1F92A
+1F92B
+1F92C
+1F92D
+1F92E
+1F92F
+1F930
+1F930 1F3FB
+1F930 1F3FC
+1F930 1F3FD
+1F930 1F3FE
+1F930 1F3FF
+1F931
+1F931 1F3FB
+1F931 1F3FC
+1F931 1F3FD
+1F931 1F3FE
+1F931 1F3FF
+1F932
+1F932 1F3FB
+1F932 1F3FC
+1F932 1F3FD
+1F932 1F3FE
+1F932 1F3FF
+1F933
+1F933 1F3FB
+1F933 1F3FC
+1F933 1F3FD
+1F933 1F3FE
+1F933 1F3FF
+1F934
+1F934 1F3FB
+1F934 1F3FC
+1F934 1F3FD
+1F934 1F3FE
+1F934 1F3FF
+1F935
+1F935 1F3FB
+1F935 1F3FB 200D 2640
+1F935 1F3FB 200D 2640 FE0F
+1F935 1F3FB 200D 2642
+1F935 1F3FB 200D 2642 FE0F
+1F935 1F3FC
+1F935 1F3FC 200D 2640
+1F935 1F3FC 200D 2640 FE0F
+1F935 1F3FC 200D 2642
+1F935 1F3FC 200D 2642 FE0F
+1F935 1F3FD
+1F935 1F3FD 200D 2640
+1F935 1F3FD 200D 2640 FE0F
+1F935 1F3FD 200D 2642
+1F935 1F3FD 200D 2642 FE0F
+1F935 1F3FE
+1F935 1F3FE 200D 2640
+1F935 1F3FE 200D 2640 FE0F
+1F935 1F3FE 200D 2642
+1F935 1F3FE 200D 2642 FE0F
+1F935 1F3FF
+1F935 1F3FF 200D 2640
+1F935 1F3FF 200D 2640 FE0F
+1F935 1F3FF 200D 2642
+1F935 1F3FF 200D 2642 FE0F
+1F935 200D 2640
+1F935 200D 2640 FE0F
+1F935 200D 2642
+1F935 200D 2642 FE0F
+1F936
+1F936 1F3FB
+1F936 1F3FC
+1F936 1F3FD
+1F936 1F3FE
+1F936 1F3FF
+1F937
+1F937 1F3FB
+1F937 1F3FB 200D 2640
+1F937 1F3FB 200D 2640 FE0F
+1F937 1F3FB 200D 2642
+1F937 1F3FB 200D 2642 FE0F
+1F937 1F3FC
+1F937 1F3FC 200D 2640
+1F937 1F3FC 200D 2640 FE0F
+1F937 1F3FC 200D 2642
+1F937 1F3FC 200D 2642 FE0F
+1F937 1F3FD
+1F937 1F3FD 200D 2640
+1F937 1F3FD 200D 2640 FE0F
+1F937 1F3FD 200D 2642
+1F937 1F3FD 200D 2642 FE0F
+1F937 1F3FE
+1F937 1F3FE 200D 2640
+1F937 1F3FE 200D 2640 FE0F
+1F937 1F3FE 200D 2642
+1F937 1F3FE 200D 2642 FE0F
+1F937 1F3FF
+1F937 1F3FF 200D 2640
+1F937 1F3FF 200D 2640 FE0F
+1F937 1F3FF 200D 2642
+1F937 1F3FF 200D 2642 FE0F
+1F937 200D 2640
+1F937 200D 2640 FE0F
+1F937 200D 2642
+1F937 200D 2642 FE0F
+1F938
+1F938 1F3FB
+1F938 1F3FB 200D 2640
+1F938 1F3FB 200D 2640 FE0F
+1F938 1F3FB 200D 2642
+1F938 1F3FB 200D 2642 FE0F
+1F938 1F3FC
+1F938 1F3FC 200D 2640
+1F938 1F3FC 200D 2640 FE0F
+1F938 1F3FC 200D 2642
+1F938 1F3FC 200D 2642 FE0F
+1F938 1F3FD
+1F938 1F3FD 200D 2640
+1F938 1F3FD 200D 2640 FE0F
+1F938 1F3FD 200D 2642
+1F938 1F3FD 200D 2642 FE0F
+1F938 1F3FE
+1F938 1F3FE 200D 2640
+1F938 1F3FE 200D 2640 FE0F
+1F938 1F3FE 200D 2642
+1F938 1F3FE 200D 2642 FE0F
+1F938 1F3FF
+1F938 1F3FF 200D 2640
+1F938 1F3FF 200D 2640 FE0F
+1F938 1F3FF 200D 2642
+1F938 1F3FF 200D 2642 FE0F
+1F938 200D 2640
+1F938 200D 2640 FE0F
+1F938 200D 2642
+1F938 200D 2642 FE0F
+1F939
+1F939 1F3FB
+1F939 1F3FB 200D 2640
+1F939 1F3FB 200D 2640 FE0F
+1F939 1F3FB 200D 2642
+1F939 1F3FB 200D 2642 FE0F
+1F939 1F3FC
+1F939 1F3FC 200D 2640
+1F939 1F3FC 200D 2640 FE0F
+1F939 1F3FC 200D 2642
+1F939 1F3FC 200D 2642 FE0F
+1F939 1F3FD
+1F939 1F3FD 200D 2640
+1F939 1F3FD 200D 2640 FE0F
+1F939 1F3FD 200D 2642
+1F939 1F3FD 200D 2642 FE0F
+1F939 1F3FE
+1F939 1F3FE 200D 2640
+1F939 1F3FE 200D 2640 FE0F
+1F939 1F3FE 200D 2642
+1F939 1F3FE 200D 2642 FE0F
+1F939 1F3FF
+1F939 1F3FF 200D 2640
+1F939 1F3FF 200D 2640 FE0F
+1F939 1F3FF 200D 2642
+1F939 1F3FF 200D 2642 FE0F
+1F939 200D 2640
+1F939 200D 2640 FE0F
+1F939 200D 2642
+1F939 200D 2642 FE0F
+1F93A
+1F93C
+1F93C 1F3FB
+1F93C 1F3FB 200D 2640
+1F93C 1F3FB 200D 2640 FE0F
+1F93C 1F3FB 200D 2642
+1F93C 1F3FB 200D 2642 FE0F
+1F93C 1F3FC
+1F93C 1F3FC 200D 2640
+1F93C 1F3FC 200D 2640 FE0F
+1F93C 1F3FC 200D 2642
+1F93C 1F3FC 200D 2642 FE0F
+1F93C 1F3FD
+1F93C 1F3FD 200D 2640
+1F93C 1F3FD 200D 2640 FE0F
+1F93C 1F3FD 200D 2642
+1F93C 1F3FD 200D 2642 FE0F
+1F93C 1F3FE
+1F93C 1F3FE 200D 2640
+1F93C 1F3FE 200D 2640 FE0F
+1F93C 1F3FE 200D 2642
+1F93C 1F3FE 200D 2642 FE0F
+1F93C 1F3FF
+1F93C 1F3FF 200D 2640
+1F93C 1F3FF 200D 2640 FE0F
+1F93C 1F3FF 200D 2642
+1F93C 1F3FF 200D 2642 FE0F
+1F93C 200D 2640
+1F93C 200D 2640 FE0F
+1F93C 200D 2642
+1F93C 200D 2642 FE0F
+1F93D
+1F93D 1F3FB
+1F93D 1F3FB 200D 2640
+1F93D 1F3FB 200D 2640 FE0F
+1F93D 1F3FB 200D 2642
+1F93D 1F3FB 200D 2642 FE0F
+1F93D 1F3FC
+1F93D 1F3FC 200D 2640
+1F93D 1F3FC 200D 2640 FE0F
+1F93D 1F3FC 200D 2642
+1F93D 1F3FC 200D 2642 FE0F
+1F93D 1F3FD
+1F93D 1F3FD 200D 2640
+1F93D 1F3FD 200D 2640 FE0F
+1F93D 1F3FD 200D 2642
+1F93D 1F3FD 200D 2642 FE0F
+1F93D 1F3FE
+1F93D 1F3FE 200D 2640
+1F93D 1F3FE 200D 2640 FE0F
+1F93D 1F3FE 200D 2642
+1F93D 1F3FE 200D 2642 FE0F
+1F93D 1F3FF
+1F93D 1F3FF 200D 2640
+1F93D 1F3FF 200D 2640 FE0F
+1F93D 1F3FF 200D 2642
+1F93D 1F3FF 200D 2642 FE0F
+1F93D 200D 2640
+1F93D 200D 2640 FE0F
+1F93D 200D 2642
+1F93D 200D 2642 FE0F
+1F93E
+1F93E 1F3FB
+1F93E 1F3FB 200D 2640
+1F93E 1F3FB 200D 2640 FE0F
+1F93E 1F3FB 200D 2642
+1F93E 1F3FB 200D 2642 FE0F
+1F93E 1F3FC
+1F93E 1F3FC 200D 2640
+1F93E 1F3FC 200D 2640 FE0F
+1F93E 1F3FC 200D 2642
+1F93E 1F3FC 200D 2642 FE0F
+1F93E 1F3FD
+1F93E 1F3FD 200D 2640
+1F93E 1F3FD 200D 2640 FE0F
+1F93E 1F3FD 200D 2642
+1F93E 1F3FD 200D 2642 FE0F
+1F93E 1F3FE
+1F93E 1F3FE 200D 2640
+1F93E 1F3FE 200D 2640 FE0F
+1F93E 1F3FE 200D 2642
+1F93E 1F3FE 200D 2642 FE0F
+1F93E 1F3FF
+1F93E 1F3FF 200D 2640
+1F93E 1F3FF 200D 2640 FE0F
+1F93E 1F3FF 200D 2642
+1F93E 1F3FF 200D 2642 FE0F
+1F93E 200D 2640
+1F93E 200D 2640 FE0F
+1F93E 200D 2642
+1F93E 200D 2642 FE0F
+1F93F
+1F940
+1F941
+1F942
+1F943
+1F944
+1F945
+1F947
+1F948
+1F949
+1F94A
+1F94B
+1F94C
+1F94D
+1F94E
+1F94F
+1F950
+1F951
+1F952
+1F953
+1F954
+1F955
+1F956
+1F957
+1F958
+1F959
+1F95A
+1F95B
+1F95C
+1F95D
+1F95E
+1F95F
+1F960
+1F961
+1F962
+1F963
+1F964
+1F965
+1F966
+1F967
+1F968
+1F969
+1F96A
+1F96B
+1F96C
+1F96D
+1F96E
+1F96F
+1F970
+1F971
+1F972
+1F973
+1F974
+1F975
+1F976
+1F977
+1F977 1F3FB
+1F977 1F3FC
+1F977 1F3FD
+1F977 1F3FE
+1F977 1F3FF
+1F978
+1F979
+1F97A
+1F97B
+1F97C
+1F97D
+1F97E
+1F97F
+1F980
+1F981
+1F982
+1F983
+1F984
+1F985
+1F986
+1F987
+1F988
+1F989
+1F98A
+1F98B
+1F98C
+1F98D
+1F98E
+1F98F
+1F990
+1F991
+1F992
+1F993
+1F994
+1F995
+1F996
+1F997
+1F998
+1F999
+1F99A
+1F99B
+1F99C
+1F99D
+1F99E
+1F99F
+1F9A0
+1F9A1
+1F9A2
+1F9A3
+1F9A4
+1F9A5
+1F9A6
+1F9A7
+1F9A8
+1F9A9
+1F9AA
+1F9AB
+1F9AC
+1F9AD
+1F9AE
+1F9AF
+1F9B0
+1F9B1
+1F9B2
+1F9B3
+1F9B4
+1F9B5
+1F9B5 1F3FB
+1F9B5 1F3FC
+1F9B5 1F3FD
+1F9B5 1F3FE
+1F9B5 1F3FF
+1F9B6
+1F9B6 1F3FB
+1F9B6 1F3FC
+1F9B6 1F3FD
+1F9B6 1F3FE
+1F9B6 1F3FF
+1F9B7
+1F9B8
+1F9B8 1F3FB
+1F9B8 1F3FB 200D 2640
+1F9B8 1F3FB 200D 2640 FE0F
+1F9B8 1F3FB 200D 2642
+1F9B8 1F3FB 200D 2642 FE0F
+1F9B8 1F3FC
+1F9B8 1F3FC 200D 2640
+1F9B8 1F3FC 200D 2640 FE0F
+1F9B8 1F3FC 200D 2642
+1F9B8 1F3FC 200D 2642 FE0F
+1F9B8 1F3FD
+1F9B8 1F3FD 200D 2640
+1F9B8 1F3FD 200D 2640 FE0F
+1F9B8 1F3FD 200D 2642
+1F9B8 1F3FD 200D 2642 FE0F
+1F9B8 1F3FE
+1F9B8 1F3FE 200D 2640
+1F9B8 1F3FE 200D 2640 FE0F
+1F9B8 1F3FE 200D 2642
+1F9B8 1F3FE 200D 2642 FE0F
+1F9B8 1F3FF
+1F9B8 1F3FF 200D 2640
+1F9B8 1F3FF 200D 2640 FE0F
+1F9B8 1F3FF 200D 2642
+1F9B8 1F3FF 200D 2642 FE0F
+1F9B8 200D 2640
+1F9B8 200D 2640 FE0F
+1F9B8 200D 2642
+1F9B8 200D 2642 FE0F
+1F9B9
+1F9B9 1F3FB
+1F9B9 1F3FB 200D 2640
+1F9B9 1F3FB 200D 2640 FE0F
+1F9B9 1F3FB 200D 2642
+1F9B9 1F3FB 200D 2642 FE0F
+1F9B9 1F3FC
+1F9B9 1F3FC 200D 2640
+1F9B9 1F3FC 200D 2640 FE0F
+1F9B9 1F3FC 200D 2642
+1F9B9 1F3FC 200D 2642 FE0F
+1F9B9 1F3FD
+1F9B9 1F3FD 200D 2640
+1F9B9 1F3FD 200D 2640 FE0F
+1F9B9 1F3FD 200D 2642
+1F9B9 1F3FD 200D 2642 FE0F
+1F9B9 1F3FE
+1F9B9 1F3FE 200D 2640
+1F9B9 1F3FE 200D 2640 FE0F
+1F9B9 1F3FE 200D 2642
+1F9B9 1F3FE 200D 2642 FE0F
+1F9B9 1F3FF
+1F9B9 1F3FF 200D 2640
+1F9B9 1F3FF 200D 2640 FE0F
+1F9B9 1F3FF 200D 2642
+1F9B9 1F3FF 200D 2642 FE0F
+1F9B9 200D 2640
+1F9B9 200D 2640 FE0F
+1F9B9 200D 2642
+1F9B9 200D 2642 FE0F
+1F9BA
+1F9BB
+1F9BB 1F3FB
+1F9BB 1F3FC
+1F9BB 1F3FD
+1F9BB 1F3FE
+1F9BB 1F3FF
+1F9BC
+1F9BD
+1F9BE
+1F9BF
+1F9C0
+1F9C1
+1F9C2
+1F9C3
+1F9C4
+1F9C5
+1F9C6
+1F9C7
+1F9C8
+1F9C9
+1F9CA
+1F9CB
+1F9CC
+1F9CD
+1F9CD 1F3FB
+1F9CD 1F3FB 200D 2640
+1F9CD 1F3FB 200D 2640 FE0F
+1F9CD 1F3FB 200D 2642
+1F9CD 1F3FB 200D 2642 FE0F
+1F9CD 1F3FC
+1F9CD 1F3FC 200D 2640
+1F9CD 1F3FC 200D 2640 FE0F
+1F9CD 1F3FC 200D 2642
+1F9CD 1F3FC 200D 2642 FE0F
+1F9CD 1F3FD
+1F9CD 1F3FD 200D 2640
+1F9CD 1F3FD 200D 2640 FE0F
+1F9CD 1F3FD 200D 2642
+1F9CD 1F3FD 200D 2642 FE0F
+1F9CD 1F3FE
+1F9CD 1F3FE 200D 2640
+1F9CD 1F3FE 200D 2640 FE0F
+1F9CD 1F3FE 200D 2642
+1F9CD 1F3FE 200D 2642 FE0F
+1F9CD 1F3FF
+1F9CD 1F3FF 200D 2640
+1F9CD 1F3FF 200D 2640 FE0F
+1F9CD 1F3FF 200D 2642
+1F9CD 1F3FF 200D 2642 FE0F
+1F9CD 200D 2640
+1F9CD 200D 2640 FE0F
+1F9CD 200D 2642
+1F9CD 200D 2642 FE0F
+1F9CE
+1F9CE 1F3FB
+1F9CE 1F3FB 200D 2640
+1F9CE 1F3FB 200D 2640 200D 27A1
+1F9CE 1F3FB 200D 2640 200D 27A1 FE0F
+1F9CE 1F3FB 200D 2640 FE0F
+1F9CE 1F3FB 200D 2640 FE0F 200D 27A1
+1F9CE 1F3FB 200D 2640 FE0F 200D 27A1 FE0F
+1F9CE 1F3FB 200D 2642
+1F9CE 1F3FB 200D 2642 200D 27A1
+1F9CE 1F3FB 200D 2642 200D 27A1 FE0F
+1F9CE 1F3FB 200D 2642 FE0F
+1F9CE 1F3FB 200D 2642 FE0F 200D 27A1
+1F9CE 1F3FB 200D 2642 FE0F 200D 27A1 FE0F
+1F9CE 1F3FB 200D 27A1
+1F9CE 1F3FB 200D 27A1 FE0F
+1F9CE 1F3FC
+1F9CE 1F3FC 200D 2640
+1F9CE 1F3FC 200D 2640 200D 27A1
+1F9CE 1F3FC 200D 2640 200D 27A1 FE0F
+1F9CE 1F3FC 200D 2640 FE0F
+1F9CE 1F3FC 200D 2640 FE0F 200D 27A1
+1F9CE 1F3FC 200D 2640 FE0F 200D 27A1 FE0F
+1F9CE 1F3FC 200D 2642
+1F9CE 1F3FC 200D 2642 200D 27A1
+1F9CE 1F3FC 200D 2642 200D 27A1 FE0F
+1F9CE 1F3FC 200D 2642 FE0F
+1F9CE 1F3FC 200D 2642 FE0F 200D 27A1
+1F9CE 1F3FC 200D 2642 FE0F 200D 27A1 FE0F
+1F9CE 1F3FC 200D 27A1
+1F9CE 1F3FC 200D 27A1 FE0F
+1F9CE 1F3FD
+1F9CE 1F3FD 200D 2640
+1F9CE 1F3FD 200D 2640 200D 27A1
+1F9CE 1F3FD 200D 2640 200D 27A1 FE0F
+1F9CE 1F3FD 200D 2640 FE0F
+1F9CE 1F3FD 200D 2640 FE0F 200D 27A1
+1F9CE 1F3FD 200D 2640 FE0F 200D 27A1 FE0F
+1F9CE 1F3FD 200D 2642
+1F9CE 1F3FD 200D 2642 200D 27A1
+1F9CE 1F3FD 200D 2642 200D 27A1 FE0F
+1F9CE 1F3FD 200D 2642 FE0F
+1F9CE 1F3FD 200D 2642 FE0F 200D 27A1
+1F9CE 1F3FD 200D 2642 FE0F 200D 27A1 FE0F
+1F9CE 1F3FD 200D 27A1
+1F9CE 1F3FD 200D 27A1 FE0F
+1F9CE 1F3FE
+1F9CE 1F3FE 200D 2640
+1F9CE 1F3FE 200D 2640 200D 27A1
+1F9CE 1F3FE 200D 2640 200D 27A1 FE0F
+1F9CE 1F3FE 200D 2640 FE0F
+1F9CE 1F3FE 200D 2640 FE0F 200D 27A1
+1F9CE 1F3FE 200D 2640 FE0F 200D 27A1 FE0F
+1F9CE 1F3FE 200D 2642
+1F9CE 1F3FE 200D 2642 200D 27A1
+1F9CE 1F3FE 200D 2642 200D 27A1 FE0F
+1F9CE 1F3FE 200D 2642 FE0F
+1F9CE 1F3FE 200D 2642 FE0F 200D 27A1
+1F9CE 1F3FE 200D 2642 FE0F 200D 27A1 FE0F
+1F9CE 1F3FE 200D 27A1
+1F9CE 1F3FE 200D 27A1 FE0F
+1F9CE 1F3FF
+1F9CE 1F3FF 200D 2640
+1F9CE 1F3FF 200D 2640 200D 27A1
+1F9CE 1F3FF 200D 2640 200D 27A1 FE0F
+1F9CE 1F3FF 200D 2640 FE0F
+1F9CE 1F3FF 200D 2640 FE0F 200D 27A1
+1F9CE 1F3FF 200D 2640 FE0F 200D 27A1 FE0F
+1F9CE 1F3FF 200D 2642
+1F9CE 1F3FF 200D 2642 200D 27A1
+1F9CE 1F3FF 200D 2642 200D 27A1 FE0F
+1F9CE 1F3FF 200D 2642 FE0F
+1F9CE 1F3FF 200D 2642 FE0F 200D 27A1
+1F9CE 1F3FF 200D 2642 FE0F 200D 27A1 FE0F
+1F9CE 1F3FF 200D 27A1
+1F9CE 1F3FF 200D 27A1 FE0F
+1F9CE 200D 2640
+1F9CE 200D 2640 200D 27A1
+1F9CE 200D 2640 200D 27A1 FE0F
+1F9CE 200D 2640 FE0F
+1F9CE 200D 2640 FE0F 200D 27A1
+1F9CE 200D 2640 FE0F 200D 27A1 FE0F
+1F9CE 200D 2642
+1F9CE 200D 2642 200D 27A1
+1F9CE 200D 2642 200D 27A1 FE0F
+1F9CE 200D 2642 FE0F
+1F9CE 200D 2642 FE0F 200D 27A1
+1F9CE 200D 2642 FE0F 200D 27A1 FE0F
+1F9CE 200D 27A1
+1F9CE 200D 27A1 FE0F
+1F9CF
+1F9CF 1F3FB
+1F9CF 1F3FB 200D 2640
+1F9CF 1F3FB 200D 2640 FE0F
+1F9CF 1F3FB 200D 2642
+1F9CF 1F3FB 200D 2642 FE0F
+1F9CF 1F3FC
+1F9CF 1F3FC 200D 2640
+1F9CF 1F3FC 200D 2640 FE0F
+1F9CF 1F3FC 200D 2642
+1F9CF 1F3FC 200D 2642 FE0F
+1F9CF 1F3FD
+1F9CF 1F3FD 200D 2640
+1F9CF 1F3FD 200D 2640 FE0F
+1F9CF 1F3FD 200D 2642
+1F9CF 1F3FD 200D 2642 FE0F
+1F9CF 1F3FE
+1F9CF 1F3FE 200D 2640
+1F9CF 1F3FE 200D 2640 FE0F
+1F9CF 1F3FE 200D 2642
+1F9CF 1F3FE 200D 2642 FE0F
+1F9CF 1F3FF
+1F9CF 1F3FF 200D 2640
+1F9CF 1F3FF 200D 2640 FE0F
+1F9CF 1F3FF 200D 2642
+1F9CF 1F3FF 200D 2642 FE0F
+1F9CF 200D 2640
+1F9CF 200D 2640 FE0F
+1F9CF 200D 2642
+1F9CF 200D 2642 FE0F
+1F9D0
+1F9D1
+1F9D1 1F3FB
+1F9D1 1F3FB 200D 1F33E
+1F9D1 1F3FB 200D 1F373
+1F9D1 1F3FB 200D 1F37C
+1F9D1 1F3FB 200D 1F384
+1F9D1 1F3FB 200D 1F393
+1F9D1 1F3FB 200D 1F3A4
+1F9D1 1F3FB 200D 1F3A8
+1F9D1 1F3FB 200D 1F3EB
+1F9D1 1F3FB 200D 1F3ED
+1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FC
+1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FD
+1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FE
+1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FF
+1F9D1 1F3FB 200D 1F4BB
+1F9D1 1F3FB 200D 1F4BC
+1F9D1 1F3FB 200D 1F527
+1F9D1 1F3FB 200D 1F52C
+1F9D1 1F3FB 200D 1F680
+1F9D1 1F3FB 200D 1F692
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF
+1F9D1 1F3FB 200D 1F9AF
+1F9D1 1F3FB 200D 1F9AF 200D 27A1
+1F9D1 1F3FB 200D 1F9AF 200D 27A1 FE0F
+1F9D1 1F3FB 200D 1F9B0
+1F9D1 1F3FB 200D 1F9B1
+1F9D1 1F3FB 200D 1F9B2
+1F9D1 1F3FB 200D 1F9B3
+1F9D1 1F3FB 200D 1F9BC
+1F9D1 1F3FB 200D 1F9BC 200D 27A1
+1F9D1 1F3FB 200D 1F9BC 200D 27A1 FE0F
+1F9D1 1F3FB 200D 1F9BD
+1F9D1 1F3FB 200D 1F9BD 200D 27A1
+1F9D1 1F3FB 200D 1F9BD 200D 27A1 FE0F
+1F9D1 1F3FB 200D 1FA70
+1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FC
+1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FD
+1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FE
+1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FF
+1F9D1 1F3FB 200D 2695
+1F9D1 1F3FB 200D 2695 FE0F
+1F9D1 1F3FB 200D 2696
+1F9D1 1F3FB 200D 2696 FE0F
+1F9D1 1F3FB 200D 2708
+1F9D1 1F3FB 200D 2708 FE0F
+1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FC
+1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FD
+1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FE
+1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FF
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FC
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FD
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FE
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FF
+1F9D1 1F3FC
+1F9D1 1F3FC 200D 1F33E
+1F9D1 1F3FC 200D 1F373
+1F9D1 1F3FC 200D 1F37C
+1F9D1 1F3FC 200D 1F384
+1F9D1 1F3FC 200D 1F393
+1F9D1 1F3FC 200D 1F3A4
+1F9D1 1F3FC 200D 1F3A8
+1F9D1 1F3FC 200D 1F3EB
+1F9D1 1F3FC 200D 1F3ED
+1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FB
+1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FD
+1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FE
+1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FF
+1F9D1 1F3FC 200D 1F4BB
+1F9D1 1F3FC 200D 1F4BC
+1F9D1 1F3FC 200D 1F527
+1F9D1 1F3FC 200D 1F52C
+1F9D1 1F3FC 200D 1F680
+1F9D1 1F3FC 200D 1F692
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF
+1F9D1 1F3FC 200D 1F9AF
+1F9D1 1F3FC 200D 1F9AF 200D 27A1
+1F9D1 1F3FC 200D 1F9AF 200D 27A1 FE0F
+1F9D1 1F3FC 200D 1F9B0
+1F9D1 1F3FC 200D 1F9B1
+1F9D1 1F3FC 200D 1F9B2
+1F9D1 1F3FC 200D 1F9B3
+1F9D1 1F3FC 200D 1F9BC
+1F9D1 1F3FC 200D 1F9BC 200D 27A1
+1F9D1 1F3FC 200D 1F9BC 200D 27A1 FE0F
+1F9D1 1F3FC 200D 1F9BD
+1F9D1 1F3FC 200D 1F9BD 200D 27A1
+1F9D1 1F3FC 200D 1F9BD 200D 27A1 FE0F
+1F9D1 1F3FC 200D 1FA70
+1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FB
+1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FD
+1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FE
+1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FF
+1F9D1 1F3FC 200D 2695
+1F9D1 1F3FC 200D 2695 FE0F
+1F9D1 1F3FC 200D 2696
+1F9D1 1F3FC 200D 2696 FE0F
+1F9D1 1F3FC 200D 2708
+1F9D1 1F3FC 200D 2708 FE0F
+1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FB
+1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FD
+1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FE
+1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FF
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FB
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FD
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FE
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FF
+1F9D1 1F3FD
+1F9D1 1F3FD 200D 1F33E
+1F9D1 1F3FD 200D 1F373
+1F9D1 1F3FD 200D 1F37C
+1F9D1 1F3FD 200D 1F384
+1F9D1 1F3FD 200D 1F393
+1F9D1 1F3FD 200D 1F3A4
+1F9D1 1F3FD 200D 1F3A8
+1F9D1 1F3FD 200D 1F3EB
+1F9D1 1F3FD 200D 1F3ED
+1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FB
+1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FC
+1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FE
+1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FF
+1F9D1 1F3FD 200D 1F4BB
+1F9D1 1F3FD 200D 1F4BC
+1F9D1 1F3FD 200D 1F527
+1F9D1 1F3FD 200D 1F52C
+1F9D1 1F3FD 200D 1F680
+1F9D1 1F3FD 200D 1F692
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF
+1F9D1 1F3FD 200D 1F9AF
+1F9D1 1F3FD 200D 1F9AF 200D 27A1
+1F9D1 1F3FD 200D 1F9AF 200D 27A1 FE0F
+1F9D1 1F3FD 200D 1F9B0
+1F9D1 1F3FD 200D 1F9B1
+1F9D1 1F3FD 200D 1F9B2
+1F9D1 1F3FD 200D 1F9B3
+1F9D1 1F3FD 200D 1F9BC
+1F9D1 1F3FD 200D 1F9BC 200D 27A1
+1F9D1 1F3FD 200D 1F9BC 200D 27A1 FE0F
+1F9D1 1F3FD 200D 1F9BD
+1F9D1 1F3FD 200D 1F9BD 200D 27A1
+1F9D1 1F3FD 200D 1F9BD 200D 27A1 FE0F
+1F9D1 1F3FD 200D 1FA70
+1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FB
+1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FC
+1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FE
+1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FF
+1F9D1 1F3FD 200D 2695
+1F9D1 1F3FD 200D 2695 FE0F
+1F9D1 1F3FD 200D 2696
+1F9D1 1F3FD 200D 2696 FE0F
+1F9D1 1F3FD 200D 2708
+1F9D1 1F3FD 200D 2708 FE0F
+1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FB
+1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FC
+1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FE
+1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FF
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FB
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FC
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FE
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FF
+1F9D1 1F3FE
+1F9D1 1F3FE 200D 1F33E
+1F9D1 1F3FE 200D 1F373
+1F9D1 1F3FE 200D 1F37C
+1F9D1 1F3FE 200D 1F384
+1F9D1 1F3FE 200D 1F393
+1F9D1 1F3FE 200D 1F3A4
+1F9D1 1F3FE 200D 1F3A8
+1F9D1 1F3FE 200D 1F3EB
+1F9D1 1F3FE 200D 1F3ED
+1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FB
+1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FC
+1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FD
+1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FF
+1F9D1 1F3FE 200D 1F4BB
+1F9D1 1F3FE 200D 1F4BC
+1F9D1 1F3FE 200D 1F527
+1F9D1 1F3FE 200D 1F52C
+1F9D1 1F3FE 200D 1F680
+1F9D1 1F3FE 200D 1F692
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF
+1F9D1 1F3FE 200D 1F9AF
+1F9D1 1F3FE 200D 1F9AF 200D 27A1
+1F9D1 1F3FE 200D 1F9AF 200D 27A1 FE0F
+1F9D1 1F3FE 200D 1F9B0
+1F9D1 1F3FE 200D 1F9B1
+1F9D1 1F3FE 200D 1F9B2
+1F9D1 1F3FE 200D 1F9B3
+1F9D1 1F3FE 200D 1F9BC
+1F9D1 1F3FE 200D 1F9BC 200D 27A1
+1F9D1 1F3FE 200D 1F9BC 200D 27A1 FE0F
+1F9D1 1F3FE 200D 1F9BD
+1F9D1 1F3FE 200D 1F9BD 200D 27A1
+1F9D1 1F3FE 200D 1F9BD 200D 27A1 FE0F
+1F9D1 1F3FE 200D 1FA70
+1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FB
+1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FC
+1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FD
+1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FF
+1F9D1 1F3FE 200D 2695
+1F9D1 1F3FE 200D 2695 FE0F
+1F9D1 1F3FE 200D 2696
+1F9D1 1F3FE 200D 2696 FE0F
+1F9D1 1F3FE 200D 2708
+1F9D1 1F3FE 200D 2708 FE0F
+1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FB
+1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FC
+1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FD
+1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FF
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FB
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FC
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FD
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FF
+1F9D1 1F3FF
+1F9D1 1F3FF 200D 1F33E
+1F9D1 1F3FF 200D 1F373
+1F9D1 1F3FF 200D 1F37C
+1F9D1 1F3FF 200D 1F384
+1F9D1 1F3FF 200D 1F393
+1F9D1 1F3FF 200D 1F3A4
+1F9D1 1F3FF 200D 1F3A8
+1F9D1 1F3FF 200D 1F3EB
+1F9D1 1F3FF 200D 1F3ED
+1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FB
+1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FC
+1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FD
+1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FE
+1F9D1 1F3FF 200D 1F4BB
+1F9D1 1F3FF 200D 1F4BC
+1F9D1 1F3FF 200D 1F527
+1F9D1 1F3FF 200D 1F52C
+1F9D1 1F3FF 200D 1F680
+1F9D1 1F3FF 200D 1F692
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF
+1F9D1 1F3FF 200D 1F9AF
+1F9D1 1F3FF 200D 1F9AF 200D 27A1
+1F9D1 1F3FF 200D 1F9AF 200D 27A1 FE0F
+1F9D1 1F3FF 200D 1F9B0
+1F9D1 1F3FF 200D 1F9B1
+1F9D1 1F3FF 200D 1F9B2
+1F9D1 1F3FF 200D 1F9B3
+1F9D1 1F3FF 200D 1F9BC
+1F9D1 1F3FF 200D 1F9BC 200D 27A1
+1F9D1 1F3FF 200D 1F9BC 200D 27A1 FE0F
+1F9D1 1F3FF 200D 1F9BD
+1F9D1 1F3FF 200D 1F9BD 200D 27A1
+1F9D1 1F3FF 200D 1F9BD 200D 27A1 FE0F
+1F9D1 1F3FF 200D 1FA70
+1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FB
+1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FC
+1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FD
+1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FE
+1F9D1 1F3FF 200D 2695
+1F9D1 1F3FF 200D 2695 FE0F
+1F9D1 1F3FF 200D 2696
+1F9D1 1F3FF 200D 2696 FE0F
+1F9D1 1F3FF 200D 2708
+1F9D1 1F3FF 200D 2708 FE0F
+1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FB
+1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FC
+1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FD
+1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FE
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FB
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FC
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FD
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FE
+1F9D1 200D 1F33E
+1F9D1 200D 1F373
+1F9D1 200D 1F37C
+1F9D1 200D 1F384
+1F9D1 200D 1F393
+1F9D1 200D 1F3A4
+1F9D1 200D 1F3A8
+1F9D1 200D 1F3EB
+1F9D1 200D 1F3ED
+1F9D1 200D 1F4BB
+1F9D1 200D 1F4BC
+1F9D1 200D 1F527
+1F9D1 200D 1F52C
+1F9D1 200D 1F680
+1F9D1 200D 1F692
+1F9D1 200D 1F91D 200D 1F9D1
+1F9D1 200D 1F9AF
+1F9D1 200D 1F9AF 200D 27A1
+1F9D1 200D 1F9AF 200D 27A1 FE0F
+1F9D1 200D 1F9B0
+1F9D1 200D 1F9B1
+1F9D1 200D 1F9B2
+1F9D1 200D 1F9B3
+1F9D1 200D 1F9BC
+1F9D1 200D 1F9BC 200D 27A1
+1F9D1 200D 1F9BC 200D 27A1 FE0F
+1F9D1 200D 1F9BD
+1F9D1 200D 1F9BD 200D 27A1
+1F9D1 200D 1F9BD 200D 27A1 FE0F
+1F9D1 200D 1F9D1 200D 1F9D2
+1F9D1 200D 1F9D1 200D 1F9D2 200D 1F9D2
+1F9D1 200D 1F9D2
+1F9D1 200D 1F9D2 200D 1F9D2
+1F9D1 200D 1FA70
+1F9D1 200D 2695
+1F9D1 200D 2695 FE0F
+1F9D1 200D 2696
+1F9D1 200D 2696 FE0F
+1F9D1 200D 2708
+1F9D1 200D 2708 FE0F
+1F9D2
+1F9D2 1F3FB
+1F9D2 1F3FC
+1F9D2 1F3FD
+1F9D2 1F3FE
+1F9D2 1F3FF
+1F9D3
+1F9D3 1F3FB
+1F9D3 1F3FC
+1F9D3 1F3FD
+1F9D3 1F3FE
+1F9D3 1F3FF
+1F9D4
+1F9D4 1F3FB
+1F9D4 1F3FB 200D 2640
+1F9D4 1F3FB 200D 2640 FE0F
+1F9D4 1F3FB 200D 2642
+1F9D4 1F3FB 200D 2642 FE0F
+1F9D4 1F3FC
+1F9D4 1F3FC 200D 2640
+1F9D4 1F3FC 200D 2640 FE0F
+1F9D4 1F3FC 200D 2642
+1F9D4 1F3FC 200D 2642 FE0F
+1F9D4 1F3FD
+1F9D4 1F3FD 200D 2640
+1F9D4 1F3FD 200D 2640 FE0F
+1F9D4 1F3FD 200D 2642
+1F9D4 1F3FD 200D 2642 FE0F
+1F9D4 1F3FE
+1F9D4 1F3FE 200D 2640
+1F9D4 1F3FE 200D 2640 FE0F
+1F9D4 1F3FE 200D 2642
+1F9D4 1F3FE 200D 2642 FE0F
+1F9D4 1F3FF
+1F9D4 1F3FF 200D 2640
+1F9D4 1F3FF 200D 2640 FE0F
+1F9D4 1F3FF 200D 2642
+1F9D4 1F3FF 200D 2642 FE0F
+1F9D4 200D 2640
+1F9D4 200D 2640 FE0F
+1F9D4 200D 2642
+1F9D4 200D 2642 FE0F
+1F9D5
+1F9D5 1F3FB
+1F9D5 1F3FC
+1F9D5 1F3FD
+1F9D5 1F3FE
+1F9D5 1F3FF
+1F9D6
+1F9D6 1F3FB
+1F9D6 1F3FB 200D 2640
+1F9D6 1F3FB 200D 2640 FE0F
+1F9D6 1F3FB 200D 2642
+1F9D6 1F3FB 200D 2642 FE0F
+1F9D6 1F3FC
+1F9D6 1F3FC 200D 2640
+1F9D6 1F3FC 200D 2640 FE0F
+1F9D6 1F3FC 200D 2642
+1F9D6 1F3FC 200D 2642 FE0F
+1F9D6 1F3FD
+1F9D6 1F3FD 200D 2640
+1F9D6 1F3FD 200D 2640 FE0F
+1F9D6 1F3FD 200D 2642
+1F9D6 1F3FD 200D 2642 FE0F
+1F9D6 1F3FE
+1F9D6 1F3FE 200D 2640
+1F9D6 1F3FE 200D 2640 FE0F
+1F9D6 1F3FE 200D 2642
+1F9D6 1F3FE 200D 2642 FE0F
+1F9D6 1F3FF
+1F9D6 1F3FF 200D 2640
+1F9D6 1F3FF 200D 2640 FE0F
+1F9D6 1F3FF 200D 2642
+1F9D6 1F3FF 200D 2642 FE0F
+1F9D6 200D 2640
+1F9D6 200D 2640 FE0F
+1F9D6 200D 2642
+1F9D6 200D 2642 FE0F
+1F9D7
+1F9D7 1F3FB
+1F9D7 1F3FB 200D 2640
+1F9D7 1F3FB 200D 2640 FE0F
+1F9D7 1F3FB 200D 2642
+1F9D7 1F3FB 200D 2642 FE0F
+1F9D7 1F3FC
+1F9D7 1F3FC 200D 2640
+1F9D7 1F3FC 200D 2640 FE0F
+1F9D7 1F3FC 200D 2642
+1F9D7 1F3FC 200D 2642 FE0F
+1F9D7 1F3FD
+1F9D7 1F3FD 200D 2640
+1F9D7 1F3FD 200D 2640 FE0F
+1F9D7 1F3FD 200D 2642
+1F9D7 1F3FD 200D 2642 FE0F
+1F9D7 1F3FE
+1F9D7 1F3FE 200D 2640
+1F9D7 1F3FE 200D 2640 FE0F
+1F9D7 1F3FE 200D 2642
+1F9D7 1F3FE 200D 2642 FE0F
+1F9D7 1F3FF
+1F9D7 1F3FF 200D 2640
+1F9D7 1F3FF 200D 2640 FE0F
+1F9D7 1F3FF 200D 2642
+1F9D7 1F3FF 200D 2642 FE0F
+1F9D7 200D 2640
+1F9D7 200D 2640 FE0F
+1F9D7 200D 2642
+1F9D7 200D 2642 FE0F
+1F9D8
+1F9D8 1F3FB
+1F9D8 1F3FB 200D 2640
+1F9D8 1F3FB 200D 2640 FE0F
+1F9D8 1F3FB 200D 2642
+1F9D8 1F3FB 200D 2642 FE0F
+1F9D8 1F3FC
+1F9D8 1F3FC 200D 2640
+1F9D8 1F3FC 200D 2640 FE0F
+1F9D8 1F3FC 200D 2642
+1F9D8 1F3FC 200D 2642 FE0F
+1F9D8 1F3FD
+1F9D8 1F3FD 200D 2640
+1F9D8 1F3FD 200D 2640 FE0F
+1F9D8 1F3FD 200D 2642
+1F9D8 1F3FD 200D 2642 FE0F
+1F9D8 1F3FE
+1F9D8 1F3FE 200D 2640
+1F9D8 1F3FE 200D 2640 FE0F
+1F9D8 1F3FE 200D 2642
+1F9D8 1F3FE 200D 2642 FE0F
+1F9D8 1F3FF
+1F9D8 1F3FF 200D 2640
+1F9D8 1F3FF 200D 2640 FE0F
+1F9D8 1F3FF 200D 2642
+1F9D8 1F3FF 200D 2642 FE0F
+1F9D8 200D 2640
+1F9D8 200D 2640 FE0F
+1F9D8 200D 2642
+1F9D8 200D 2642 FE0F
+1F9D9
+1F9D9 1F3FB
+1F9D9 1F3FB 200D 2640
+1F9D9 1F3FB 200D 2640 FE0F
+1F9D9 1F3FB 200D 2642
+1F9D9 1F3FB 200D 2642 FE0F
+1F9D9 1F3FC
+1F9D9 1F3FC 200D 2640
+1F9D9 1F3FC 200D 2640 FE0F
+1F9D9 1F3FC 200D 2642
+1F9D9 1F3FC 200D 2642 FE0F
+1F9D9 1F3FD
+1F9D9 1F3FD 200D 2640
+1F9D9 1F3FD 200D 2640 FE0F
+1F9D9 1F3FD 200D 2642
+1F9D9 1F3FD 200D 2642 FE0F
+1F9D9 1F3FE
+1F9D9 1F3FE 200D 2640
+1F9D9 1F3FE 200D 2640 FE0F
+1F9D9 1F3FE 200D 2642
+1F9D9 1F3FE 200D 2642 FE0F
+1F9D9 1F3FF
+1F9D9 1F3FF 200D 2640
+1F9D9 1F3FF 200D 2640 FE0F
+1F9D9 1F3FF 200D 2642
+1F9D9 1F3FF 200D 2642 FE0F
+1F9D9 200D 2640
+1F9D9 200D 2640 FE0F
+1F9D9 200D 2642
+1F9D9 200D 2642 FE0F
+1F9DA
+1F9DA 1F3FB
+1F9DA 1F3FB 200D 2640
+1F9DA 1F3FB 200D 2640 FE0F
+1F9DA 1F3FB 200D 2642
+1F9DA 1F3FB 200D 2642 FE0F
+1F9DA 1F3FC
+1F9DA 1F3FC 200D 2640
+1F9DA 1F3FC 200D 2640 FE0F
+1F9DA 1F3FC 200D 2642
+1F9DA 1F3FC 200D 2642 FE0F
+1F9DA 1F3FD
+1F9DA 1F3FD 200D 2640
+1F9DA 1F3FD 200D 2640 FE0F
+1F9DA 1F3FD 200D 2642
+1F9DA 1F3FD 200D 2642 FE0F
+1F9DA 1F3FE
+1F9DA 1F3FE 200D 2640
+1F9DA 1F3FE 200D 2640 FE0F
+1F9DA 1F3FE 200D 2642
+1F9DA 1F3FE 200D 2642 FE0F
+1F9DA 1F3FF
+1F9DA 1F3FF 200D 2640
+1F9DA 1F3FF 200D 2640 FE0F
+1F9DA 1F3FF 200D 2642
+1F9DA 1F3FF 200D 2642 FE0F
+1F9DA 200D 2640
+1F9DA 200D 2640 FE0F
+1F9DA 200D 2642
+1F9DA 200D 2642 FE0F
+1F9DB
+1F9DB 1F3FB
+1F9DB 1F3FB 200D 2640
+1F9DB 1F3FB 200D 2640 FE0F
+1F9DB 1F3FB 200D 2642
+1F9DB 1F3FB 200D 2642 FE0F
+1F9DB 1F3FC
+1F9DB 1F3FC 200D 2640
+1F9DB 1F3FC 200D 2640 FE0F
+1F9DB 1F3FC 200D 2642
+1F9DB 1F3FC 200D 2642 FE0F
+1F9DB 1F3FD
+1F9DB 1F3FD 200D 2640
+1F9DB 1F3FD 200D 2640 FE0F
+1F9DB 1F3FD 200D 2642
+1F9DB 1F3FD 200D 2642 FE0F
+1F9DB 1F3FE
+1F9DB 1F3FE 200D 2640
+1F9DB 1F3FE 200D 2640 FE0F
+1F9DB 1F3FE 200D 2642
+1F9DB 1F3FE 200D 2642 FE0F
+1F9DB 1F3FF
+1F9DB 1F3FF 200D 2640
+1F9DB 1F3FF 200D 2640 FE0F
+1F9DB 1F3FF 200D 2642
+1F9DB 1F3FF 200D 2642 FE0F
+1F9DB 200D 2640
+1F9DB 200D 2640 FE0F
+1F9DB 200D 2642
+1F9DB 200D 2642 FE0F
+1F9DC
+1F9DC 1F3FB
+1F9DC 1F3FB 200D 2640
+1F9DC 1F3FB 200D 2640 FE0F
+1F9DC 1F3FB 200D 2642
+1F9DC 1F3FB 200D 2642 FE0F
+1F9DC 1F3FC
+1F9DC 1F3FC 200D 2640
+1F9DC 1F3FC 200D 2640 FE0F
+1F9DC 1F3FC 200D 2642
+1F9DC 1F3FC 200D 2642 FE0F
+1F9DC 1F3FD
+1F9DC 1F3FD 200D 2640
+1F9DC 1F3FD 200D 2640 FE0F
+1F9DC 1F3FD 200D 2642
+1F9DC 1F3FD 200D 2642 FE0F
+1F9DC 1F3FE
+1F9DC 1F3FE 200D 2640
+1F9DC 1F3FE 200D 2640 FE0F
+1F9DC 1F3FE 200D 2642
+1F9DC 1F3FE 200D 2642 FE0F
+1F9DC 1F3FF
+1F9DC 1F3FF 200D 2640
+1F9DC 1F3FF 200D 2640 FE0F
+1F9DC 1F3FF 200D 2642
+1F9DC 1F3FF 200D 2642 FE0F
+1F9DC 200D 2640
+1F9DC 200D 2640 FE0F
+1F9DC 200D 2642
+1F9DC 200D 2642 FE0F
+1F9DD
+1F9DD 1F3FB
+1F9DD 1F3FB 200D 2640
+1F9DD 1F3FB 200D 2640 FE0F
+1F9DD 1F3FB 200D 2642
+1F9DD 1F3FB 200D 2642 FE0F
+1F9DD 1F3FC
+1F9DD 1F3FC 200D 2640
+1F9DD 1F3FC 200D 2640 FE0F
+1F9DD 1F3FC 200D 2642
+1F9DD 1F3FC 200D 2642 FE0F
+1F9DD 1F3FD
+1F9DD 1F3FD 200D 2640
+1F9DD 1F3FD 200D 2640 FE0F
+1F9DD 1F3FD 200D 2642
+1F9DD 1F3FD 200D 2642 FE0F
+1F9DD 1F3FE
+1F9DD 1F3FE 200D 2640
+1F9DD 1F3FE 200D 2640 FE0F
+1F9DD 1F3FE 200D 2642
+1F9DD 1F3FE 200D 2642 FE0F
+1F9DD 1F3FF
+1F9DD 1F3FF 200D 2640
+1F9DD 1F3FF 200D 2640 FE0F
+1F9DD 1F3FF 200D 2642
+1F9DD 1F3FF 200D 2642 FE0F
+1F9DD 200D 2640
+1F9DD 200D 2640 FE0F
+1F9DD 200D 2642
+1F9DD 200D 2642 FE0F
+1F9DE
+1F9DE 200D 2640
+1F9DE 200D 2640 FE0F
+1F9DE 200D 2642
+1F9DE 200D 2642 FE0F
+1F9DF
+1F9DF 200D 2640
+1F9DF 200D 2640 FE0F
+1F9DF 200D 2642
+1F9DF 200D 2642 FE0F
+1F9E0
+1F9E1
+1F9E2
+1F9E3
+1F9E4
+1F9E5
+1F9E6
+1F9E7
+1F9E8
+1F9E9
+1F9EA
+1F9EB
+1F9EC
+1F9ED
+1F9EE
+1F9EF
+1F9F0
+1F9F1
+1F9F2
+1F9F3
+1F9F4
+1F9F5
+1F9F6
+1F9F7
+1F9F8
+1F9F9
+1F9FA
+1F9FB
+1F9FC
+1F9FD
+1F9FE
+1F9FF
+1FA70
+1FA71
+1FA72
+1FA73
+1FA74
+1FA75
+1FA76
+1FA77
+1FA78
+1FA79
+1FA7A
+1FA7B
+1FA7C
+1FA80
+1FA81
+1FA82
+1FA83
+1FA84
+1FA85
+1FA86
+1FA87
+1FA88
+1FA89
+1FA8A
+1FA8E
+1FA8F
+1FA90
+1FA91
+1FA92
+1FA93
+1FA94
+1FA95
+1FA96
+1FA97
+1FA98
+1FA99
+1FA9A
+1FA9B
+1FA9C
+1FA9D
+1FA9E
+1FA9F
+1FAA0
+1FAA1
+1FAA2
+1FAA3
+1FAA4
+1FAA5
+1FAA6
+1FAA7
+1FAA8
+1FAA9
+1FAAA
+1FAAB
+1FAAC
+1FAAD
+1FAAE
+1FAAF
+1FAB0
+1FAB1
+1FAB2
+1FAB3
+1FAB4
+1FAB5
+1FAB6
+1FAB7
+1FAB8
+1FAB9
+1FABA
+1FABB
+1FABC
+1FABD
+1FABE
+1FABF
+1FAC0
+1FAC1
+1FAC2
+1FAC3
+1FAC3 1F3FB
+1FAC3 1F3FC
+1FAC3 1F3FD
+1FAC3 1F3FE
+1FAC3 1F3FF
+1FAC4
+1FAC4 1F3FB
+1FAC4 1F3FC
+1FAC4 1F3FD
+1FAC4 1F3FE
+1FAC4 1F3FF
+1FAC5
+1FAC5 1F3FB
+1FAC5 1F3FC
+1FAC5 1F3FD
+1FAC5 1F3FE
+1FAC5 1F3FF
+1FAC6
+1FAC8
+1FACD
+1FACE
+1FACF
+1FAD0
+1FAD1
+1FAD2
+1FAD3
+1FAD4
+1FAD5
+1FAD6
+1FAD7
+1FAD8
+1FAD9
+1FADA
+1FADB
+1FADC
+1FADF
+1FAE0
+1FAE1
+1FAE2
+1FAE3
+1FAE4
+1FAE5
+1FAE6
+1FAE7
+1FAE8
+1FAE9
+1FAEA
+1FAEF
+1FAF0
+1FAF0 1F3FB
+1FAF0 1F3FC
+1FAF0 1F3FD
+1FAF0 1F3FE
+1FAF0 1F3FF
+1FAF1
+1FAF1 1F3FB
+1FAF1 1F3FB 200D 1FAF2 1F3FC
+1FAF1 1F3FB 200D 1FAF2 1F3FD
+1FAF1 1F3FB 200D 1FAF2 1F3FE
+1FAF1 1F3FB 200D 1FAF2 1F3FF
+1FAF1 1F3FC
+1FAF1 1F3FC 200D 1FAF2 1F3FB
+1FAF1 1F3FC 200D 1FAF2 1F3FD
+1FAF1 1F3FC 200D 1FAF2 1F3FE
+1FAF1 1F3FC 200D 1FAF2 1F3FF
+1FAF1 1F3FD
+1FAF1 1F3FD 200D 1FAF2 1F3FB
+1FAF1 1F3FD 200D 1FAF2 1F3FC
+1FAF1 1F3FD 200D 1FAF2 1F3FE
+1FAF1 1F3FD 200D 1FAF2 1F3FF
+1FAF1 1F3FE
+1FAF1 1F3FE 200D 1FAF2 1F3FB
+1FAF1 1F3FE 200D 1FAF2 1F3FC
+1FAF1 1F3FE 200D 1FAF2 1F3FD
+1FAF1 1F3FE 200D 1FAF2 1F3FF
+1FAF1 1F3FF
+1FAF1 1F3FF 200D 1FAF2 1F3FB
+1FAF1 1F3FF 200D 1FAF2 1F3FC
+1FAF1 1F3FF 200D 1FAF2 1F3FD
+1FAF1 1F3FF 200D 1FAF2 1F3FE
+1FAF2
+1FAF2 1F3FB
+1FAF2 1F3FC
+1FAF2 1F3FD
+1FAF2 1F3FE
+1FAF2 1F3FF
+1FAF3
+1FAF3 1F3FB
+1FAF3 1F3FC
+1FAF3 1F3FD
+1FAF3 1F3FE
+1FAF3 1F3FF
+1FAF4
+1FAF4 1F3FB
+1FAF4 1F3FC
+1FAF4 1F3FD
+1FAF4 1F3FE
+1FAF4 1F3FF
+1FAF5
+1FAF5 1F3FB
+1FAF5 1F3FC
+1FAF5 1F3FD
+1FAF5 1F3FE
+1FAF5 1F3FF
+1FAF6
+1FAF6 1F3FB
+1FAF6 1F3FC
+1FAF6 1F3FD
+1FAF6 1F3FE
+1FAF6 1F3FF
+1FAF7
+1FAF7 1F3FB
+1FAF7 1F3FC
+1FAF7 1F3FD
+1FAF7 1F3FE
+1FAF7 1F3FF
+1FAF8
+1FAF8 1F3FB
+1FAF8 1F3FC
+1FAF8 1F3FD
+1FAF8 1F3FE
+1FAF8 1F3FF
+203C
+203C FE0F
+2049
+2049 FE0F
+2122
+2122 FE0F
+2139
+2139 FE0F
+2194
+2194 FE0F
+2195
+2195 FE0F
+2196
+2196 FE0F
+2197
+2197 FE0F
+2198
+2198 FE0F
+2199
+2199 FE0F
+21A9
+21A9 FE0F
+21AA
+21AA FE0F
+231A
+231B
+2328
+2328 FE0F
+23CF
+23CF FE0F
+23E9
+23EA
+23EB
+23EC
+23ED
+23ED FE0F
+23EE
+23EE FE0F
+23EF
+23EF FE0F
+23F0
+23F1
+23F1 FE0F
+23F2
+23F2 FE0F
+23F3
+23F8
+23F8 FE0F
+23F9
+23F9 FE0F
+23FA
+23FA FE0F
+24C2
+24C2 FE0F
+25AA
+25AA FE0F
+25AB
+25AB FE0F
+25B6
+25B6 FE0F
+25C0
+25C0 FE0F
+25FB
+25FB FE0F
+25FC
+25FC FE0F
+25FD
+25FE
+2600
+2600 FE0F
+2601
+2601 FE0F
+2602
+2602 FE0F
+2603
+2603 FE0F
+2604
+2604 FE0F
+260E
+260E FE0F
+2611
+2611 FE0F
+2614
+2615
+2618
+2618 FE0F
+261D
+261D 1F3FB
+261D 1F3FC
+261D 1F3FD
+261D 1F3FE
+261D 1F3FF
+261D FE0F
+2620
+2620 FE0F
+2622
+2622 FE0F
+2623
+2623 FE0F
+2626
+2626 FE0F
+262A
+262A FE0F
+262E
+262E FE0F
+262F
+262F FE0F
+2638
+2638 FE0F
+2639
+2639 FE0F
+263A
+263A FE0F
+2640
+2640 FE0F
+2642
+2642 FE0F
+2648
+2649
+264A
+264B
+264C
+264D
+264E
+264F
+2650
+2651
+2652
+2653
+265F
+265F FE0F
+2660
+2660 FE0F
+2663
+2663 FE0F
+2665
+2665 FE0F
+2666
+2666 FE0F
+2668
+2668 FE0F
+267B
+267B FE0F
+267E
+267E FE0F
+267F
+2692
+2692 FE0F
+2693
+2694
+2694 FE0F
+2695
+2695 FE0F
+2696
+2696 FE0F
+2697
+2697 FE0F
+2699
+2699 FE0F
+269B
+269B FE0F
+269C
+269C FE0F
+26A0
+26A0 FE0F
+26A1
+26A7
+26A7 FE0F
+26AA
+26AB
+26B0
+26B0 FE0F
+26B1
+26B1 FE0F
+26BD
+26BE
+26C4
+26C5
+26C8
+26C8 FE0F
+26CE
+26CF
+26CF FE0F
+26D1
+26D1 FE0F
+26D3
+26D3 200D 1F4A5
+26D3 FE0F
+26D3 FE0F 200D 1F4A5
+26D4
+26E9
+26E9 FE0F
+26EA
+26F0
+26F0 FE0F
+26F1
+26F1 FE0F
+26F2
+26F3
+26F4
+26F4 FE0F
+26F5
+26F7
+26F7 FE0F
+26F8
+26F8 FE0F
+26F9
+26F9 1F3FB
+26F9 1F3FB 200D 2640
+26F9 1F3FB 200D 2640 FE0F
+26F9 1F3FB 200D 2642
+26F9 1F3FB 200D 2642 FE0F
+26F9 1F3FC
+26F9 1F3FC 200D 2640
+26F9 1F3FC 200D 2640 FE0F
+26F9 1F3FC 200D 2642
+26F9 1F3FC 200D 2642 FE0F
+26F9 1F3FD
+26F9 1F3FD 200D 2640
+26F9 1F3FD 200D 2640 FE0F
+26F9 1F3FD 200D 2642
+26F9 1F3FD 200D 2642 FE0F
+26F9 1F3FE
+26F9 1F3FE 200D 2640
+26F9 1F3FE 200D 2640 FE0F
+26F9 1F3FE 200D 2642
+26F9 1F3FE 200D 2642 FE0F
+26F9 1F3FF
+26F9 1F3FF 200D 2640
+26F9 1F3FF 200D 2640 FE0F
+26F9 1F3FF 200D 2642
+26F9 1F3FF 200D 2642 FE0F
+26F9 200D 2640
+26F9 200D 2640 FE0F
+26F9 200D 2642
+26F9 200D 2642 FE0F
+26F9 FE0F
+26F9 FE0F 200D 2640
+26F9 FE0F 200D 2640 FE0F
+26F9 FE0F 200D 2642
+26F9 FE0F 200D 2642 FE0F
+26FA
+26FD
+2702
+2702 FE0F
+2705
+2708
+2708 FE0F
+2709
+2709 FE0F
+270A
+270A 1F3FB
+270A 1F3FC
+270A 1F3FD
+270A 1F3FE
+270A 1F3FF
+270B
+270B 1F3FB
+270B 1F3FC
+270B 1F3FD
+270B 1F3FE
+270B 1F3FF
+270C
+270C 1F3FB
+270C 1F3FC
+270C 1F3FD
+270C 1F3FE
+270C 1F3FF
+270C FE0F
+270D
+270D 1F3FB
+270D 1F3FC
+270D 1F3FD
+270D 1F3FE
+270D 1F3FF
+270D FE0F
+270F
+270F FE0F
+2712
+2712 FE0F
+2714
+2714 FE0F
+2716
+2716 FE0F
+271D
+271D FE0F
+2721
+2721 FE0F
+2728
+2733
+2733 FE0F
+2734
+2734 FE0F
+2744
+2744 FE0F
+2747
+2747 FE0F
+274C
+274E
+2753
+2754
+2755
+2757
+2763
+2763 FE0F
+2764
+2764 200D 1F525
+2764 200D 1FA79
+2764 FE0F
+2764 FE0F 200D 1F525
+2764 FE0F 200D 1FA79
+2795
+2796
+2797
+27A1
+27A1 FE0F
+27B0
+27BF
+2934
+2934 FE0F
+2935
+2935 FE0F
+2B05
+2B05 FE0F
+2B06
+2B06 FE0F
+2B07
+2B07 FE0F
+2B1B
+2B1C
+2B50
+2B55
+3030
+3030 FE0F
+303D
+303D FE0F
+3297
+3297 FE0F
+3299
+3299 FE0F
diff --git a/arr-opera-daily-ingest/references/field-contracts.md b/arr-opera-daily-ingest/references/field-contracts.md
index e199dd0..8c6cb26 100644
--- a/arr-opera-daily-ingest/references/field-contracts.md
+++ b/arr-opera-daily-ingest/references/field-contracts.md
@@ -34,6 +34,29 @@ Reservations:
Group date candidates are `GROUPBY1_SORT_COL` (`YYYYMMDD`) and `GROUPBY1_COL` (`DD-MM-YY`). Both must agree when both exist. Every whitelist candidate `ARRIVAL` must equal the single group business date.
+## Emoji handling (processor 4.1.0)
+
+The original source bytes, size and SHA-256 remain immutable. Parsing uses an in-memory copy:
+
+- Remove recognized Unicode Emoji 17.0 sequences from element text and tails before extracting fields, including
+ CDATA and XML numeric character references. The pinned `emoji-sequences-17.0.txt` covers complete sequences,
+ qualification variants and emoji components; a family/flag/skin-tone/keycap sequence counts as one occurrence.
+- If strict XML parsing fails, recognize CESU-8 surrogate-pair encodings only as part of a listed emoji in element
+ text or CDATA, normalize those to UTF-8, and run the strict XML parser again. Never recover markup, attributes,
+ unpaired surrogates, non-emoji surrogate pairs, arbitrary invalid bytes, or a different declared encoding this way.
+- Do not remove whole Unicode blocks or use lossy decoding. Plain numbers, punctuation, currency, Chinese
+ (including supplementary characters), Thai and other non-emoji text keep their values.
+- XML structure, required fields, numeric/date validation, filtering, deduplication and pricing still apply to the
+ resulting text. An emoji-only required value therefore fails the existing missing-value rule.
+- When any emoji was ignored, `result.json.input_cleanup.ignored_emoji_count` is a positive integer; omit the
+ metadata when the count is zero. The independent validator recomputes the count from the original XML on
+ successful and review-required results. Upload receipts expose the count and the UI shows a localized notice.
+
+This input normalization does not modify the fixed rate whitelist or price reference. The dataset and this policy
+are included in the processor rule identity. Data provenance/license: [emoji-sequences-17.0.txt](emoji-sequences-17.0.txt)
+and [unicode-license.txt](unicode-license.txt).
+The retired, frozen v3 direct-MCP compatibility replay retains its original strict XML/emoji behavior.
+
## Daily XLSX: exactly 19 columns
1. `BLOCK_CODE`
diff --git a/arr-opera-daily-ingest/references/structured-output.md b/arr-opera-daily-ingest/references/structured-output.md
index d8e2a8a..4503b93 100644
--- a/arr-opera-daily-ingest/references/structured-output.md
+++ b/arr-opera-daily-ingest/references/structured-output.md
@@ -6,6 +6,11 @@
`result.json` is the ARR/front-end run result. Do not add database records to it. Do not reconstruct database rows from the XLSX.
+Processor 4.1.0 adds optional `result.json.input_cleanup = {"ignored_emoji_count": N}` for nonzero emoji cleanup.
+The v4 result schema remains 4.0; no new structured business fields or outcomes are introduced. The count refers to
+complete emoji occurrences in XML element text, independently replayed on success/review. Original XML artifact
+identity always refers to the uploaded bytes, including any narrowly recoverable CESU-8 emoji encoding.
+
## Transport boundary
- Object storage materialization and its credentials belong to the ARR runtime, not this Skill.
diff --git a/arr-opera-daily-ingest/references/unicode-license.txt b/arr-opera-daily-ingest/references/unicode-license.txt
new file mode 100644
index 0000000..56da589
--- /dev/null
+++ b/arr-opera-daily-ingest/references/unicode-license.txt
@@ -0,0 +1,39 @@
+UNICODE LICENSE V3
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2026 Unicode, Inc.
+
+NOTICE TO USER: Carefully read the following legal agreement. BY
+DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
+SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
+TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
+DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of data files and any associated documentation (the "Data Files") or
+software and any associated documentation (the "Software") to deal in the
+Data Files or Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, and/or sell
+copies of the Data Files or Software, and to permit persons to whom the
+Data Files or Software are furnished to do so, provided that either (a)
+this copyright and permission notice appear with all copies of the Data
+Files or Software, or (b) this copyright and permission notice appear in
+associated Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+THIRD PARTY RIGHTS.
+
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
+BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
+FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall
+not be used in advertising or otherwise to promote the sale, use or other
+dealings in these Data Files or Software without prior written
+authorization of the copyright holder.
diff --git a/arr-opera-daily-ingest/scripts/process_daily.py b/arr-opera-daily-ingest/scripts/process_daily.py
index a894196..2b50342 100755
--- a/arr-opera-daily-ingest/scripts/process_daily.py
+++ b/arr-opera-daily-ingest/scripts/process_daily.py
@@ -16,6 +16,7 @@ import xml.etree.ElementTree as ET
from dataclasses import dataclass
from datetime import date, datetime
from decimal import Decimal, InvalidOperation
+from functools import lru_cache
from pathlib import Path
from typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Tuple
@@ -26,7 +27,7 @@ from openpyxl.utils import get_column_letter
RESULT_VERSION = "4.0"
-PROCESSOR_VERSION = "4.0.0"
+PROCESSOR_VERSION = "4.1.0"
STRUCTURED_RESULT_SCHEMA_VERSION = "4.0"
# Retired direct-MCP/callback compatibility. This is deliberately an internal,
# opt-in success-only projection; the active processor always emits the v4
@@ -42,6 +43,7 @@ PRICE_REFERENCE = SKILL_ROOT / "references" / "价格对照.xlsx"
DAILY_TEMPLATE = SKILL_ROOT / "assets" / "daily-template.xlsx"
STRUCTURED_RESULT_SCHEMA = SKILL_ROOT / "references" / "structured-result.schema.json"
MANUAL_OVERRIDE_SCHEMA = SKILL_ROOT / "references" / "manual-override.schema.json"
+EMOJI_SEQUENCES = SKILL_ROOT / "references" / "emoji-sequences-17.0.txt"
RULE_SET_PATHS = (
SKILL_ROOT / "SKILL.md",
@@ -53,6 +55,7 @@ RULE_SET_PATHS = (
SKILL_ROOT / "references" / "codex-result.schema.json",
STRUCTURED_RESULT_SCHEMA,
MANUAL_OVERRIDE_SCHEMA,
+ EMOJI_SEQUENCES,
PRICE_REFERENCE,
DAILY_TEMPLATE,
)
@@ -616,7 +619,85 @@ def parse_group_date(group: ET.Element, index: int) -> date:
return parsed[0]
-def read_xml(xml_path: Path) -> Tuple[date, List[ET.Element]]:
+@lru_cache(maxsize=2)
+def emoji_pattern(cesu8: bool = False) -> re.Pattern[str]:
+ """Match complete, pinned emoji sequences, longest first (never Unicode blocks)."""
+ sequences = {
+ "".join(chr(int(point, 16)) for point in line.split())
+ for line in EMOJI_SEQUENCES.read_text(encoding="utf-8").splitlines()
+ if line and not line.startswith("#")
+ }
+ # A prefix trie avoids rescanning thousands of alternatives at every digit
+ # in a large Opera report. Greedy optional suffixes prefer complete sequences.
+ trie: Dict[str, Any] = {}
+ for sequence in sequences:
+ node = trie
+ for char in sequence:
+ node = node.setdefault(char, {})
+ node[""] = None
+
+ def pattern_for(node: Dict[str, Any]) -> str:
+ alternatives = []
+ for char in sorted(key for key in node if key):
+ token = re.escape(char)
+ if cesu8 and ord(char) > 0xFFFF:
+ scalar = ord(char) - 0x10000
+ pair = chr(0xD800 + (scalar >> 10)) + chr(0xDC00 + (scalar & 0x3FF))
+ token = "(?:" + token + "|" + re.escape(pair) + ")"
+ alternatives.append(token + pattern_for(node[char]))
+ if not alternatives:
+ return ""
+ pattern = "(?:" + "|".join(alternatives) + ")"
+ return pattern + ("?" if "" in node else "")
+
+ return re.compile(pattern_for(trie) + "\ufe0f?")
+
+
+# This lexer only separates text from markup for the narrow CESU-8 repair.
+# ElementTree remains authoritative for XML well-formedness and structure.
+XML_MARKUP = re.compile(
+ r"|<\?.*?\?>||<(?:\"[^\"]*\"|'[^']*'|[^'\">])*>",
+ re.DOTALL,
+)
+
+
+def repair_cesu8_emoji_text(raw: bytes) -> bytes:
+ """Repair only recognized emoji in UTF-8 element text/CDATA, never arbitrary bytes."""
+ declaration = re.match(br"(?:\xef\xbb\xbf)?<\?xml\b[^?]*\?>", raw)
+ if declaration:
+ encoding = re.search(br"encoding\s*=\s*['\"]([^'\"]+)['\"]", declaration.group())
+ if encoding and encoding.group(1).lower() not in {b"utf-8", b"utf8"}:
+ return raw
+ if b"\xed" not in raw or raw.startswith((b"\xff\xfe", b"\xfe\xff")):
+ return raw
+ text = raw.decode("utf-8", errors="surrogatepass")
+
+ def repair_text(value: str) -> str:
+ if not any(0xD800 <= ord(char) <= 0xDFFF for char in value):
+ return value
+ return emoji_pattern(cesu8=True).sub(
+ lambda match: match.group().encode("utf-16-le", errors="surrogatepass").decode("utf-16-le"),
+ value,
+ )
+
+ chunks = []
+ end = 0
+ for token in XML_MARKUP.finditer(text):
+ chunks.append(repair_text(text[end:token.start()]))
+ markup = token.group()
+ if markup.startswith(""
+ chunks.append(markup)
+ end = token.end()
+ chunks.append(repair_text(text[end:]))
+ # Any unrecognized pair or lone surrogate still fails strict UTF-8 encoding.
+ return "".join(chunks).encode("utf-8")
+
+
+def read_xml(
+ xml_path: Path, *, input_cleanup: Optional[Dict[str, int]] = None,
+ ignore_emojis: bool = True,
+) -> Tuple[date, List[ET.Element]]:
raw = xml_path.read_bytes()
upper = raw.upper()
if b" Tuple[date, List[ET.Element]]:
try:
root = ET.fromstring(raw)
except ET.ParseError as exc:
- raise ProcessingFailure(
- [ErrorItem("XML_PARSE_ERROR", "xml", f"XML无法解析:{exc}", xml_path.name)], exit_code=3
- )
+ try:
+ root = ET.fromstring(repair_cesu8_emoji_text(raw) if ignore_emojis else raw)
+ except (ET.ParseError, UnicodeError):
+ raise ProcessingFailure(
+ [ErrorItem("XML_PARSE_ERROR", "xml", f"XML无法解析:{exc}", xml_path.name)], exit_code=3
+ ) from None
+ ignored_emoji_count = 0
+ for node in root.iter() if ignore_emojis else ():
+ for field in ("text", "tail"):
+ value = getattr(node, field)
+ if value:
+ cleaned, count = emoji_pattern().subn("", value)
+ setattr(node, field, cleaned)
+ ignored_emoji_count += count
+ if input_cleanup is not None:
+ input_cleanup["ignored_emoji_count"] = ignored_emoji_count
if root.tag != "RES_DETAIL":
raise ProcessingFailure(
[ErrorItem("XML_ROOT_MISMATCH", "xml", "XML根节点必须为 RES_DETAIL", root.tag)]
@@ -1442,8 +1536,9 @@ def result_object(
structured: Optional[Path] = None,
exception: Optional[Path] = None,
errors: Sequence[ErrorItem] = (),
+ ignored_emoji_count: int = 0,
) -> Dict[str, Any]:
- return {
+ result = {
"version": RESULT_VERSION,
"status": status,
"business_date": business_date.isoformat() if business_date else None,
@@ -1456,6 +1551,10 @@ def result_object(
},
"errors": [error.to_dict() for error in errors],
}
+ if ignored_emoji_count:
+ result["input_cleanup"] = {"ignored_emoji_count": ignored_emoji_count}
+ result["message"] += f";已忽略 {ignored_emoji_count} 处表情符号"
+ return result
def write_result(path: Path, result: Dict[str, Any]) -> None:
@@ -2038,6 +2137,7 @@ def run_independent_validator(
review_case_id: Optional[str] = None,
manual_override_sha256: Optional[str] = None,
review_only: bool = False,
+ legacy_v3_output: bool = False,
) -> None:
validator = Path(__file__).resolve().parent / "validate_daily.py"
command = [
@@ -2056,6 +2156,8 @@ def run_independent_validator(
command.extend(["--daily", str(daily_path)])
if review_only:
command.append("--review-only")
+ if legacy_v3_output:
+ command.append("--legacy-v3-output")
if manual_override_path is not None:
command.extend(
[
@@ -2118,6 +2220,7 @@ def process(args: argparse.Namespace) -> int:
Path(structured_arg) if structured_arg else output_dir / "structured-result.json"
)
metrics = empty_metrics()
+ input_cleanup: Dict[str, int] = {}
business_date: Optional[date] = None
daily_path: Optional[Path] = None
all_records: List[Dict[str, Any]] = []
@@ -2169,7 +2272,9 @@ def process(args: argparse.Namespace) -> int:
result_json,
structured_result_json,
)
- business_date, reservations = read_xml(xml_path)
+ business_date, reservations = read_xml(
+ xml_path, input_cleanup=input_cleanup, ignore_emojis=not legacy_v3_output
+ )
metrics["source_rows"] = len(reservations)
(
all_records,
@@ -2231,6 +2336,7 @@ def process(args: argparse.Namespace) -> int:
metrics,
structured=structured_result_json,
errors=pricing_errors,
+ ignored_emoji_count=input_cleanup.get("ignored_emoji_count", 0),
)
write_result(result_json, review)
structured_review = build_structured_result(
@@ -2268,6 +2374,7 @@ def process(args: argparse.Namespace) -> int:
metrics,
daily=daily_path,
structured=structured_result_json,
+ ignored_emoji_count=input_cleanup.get("ignored_emoji_count", 0),
)
write_result(result_json, success)
structured_success = build_structured_result(
@@ -2283,16 +2390,6 @@ def process(args: argparse.Namespace) -> int:
manual_override_sha256=manifest.sha256 if manifest is not None else None,
)
write_structured_result(structured_result_json, structured_success)
- run_independent_validator(
- xml_path,
- result_json,
- structured_result_json,
- daily_path=daily_path,
- manual_override_path=manual_override_path,
- review_job_id=str(review_job_id) if manifest is not None else None,
- review_case_id=manifest.review_case_id if manifest is not None else None,
- manual_override_sha256=manifest.sha256 if manifest is not None else None,
- )
if legacy_v3_output:
legacy_success = legacy_direct_result_object(
business_date,
@@ -2311,8 +2408,18 @@ def process(args: argparse.Namespace) -> int:
daily_path,
)
write_legacy_direct_structured_result(structured_result_json, legacy_structured)
- print(json.dumps(legacy_success, ensure_ascii=False))
- return 0
+ success = legacy_success
+ run_independent_validator(
+ xml_path,
+ result_json,
+ structured_result_json,
+ daily_path=daily_path,
+ manual_override_path=manual_override_path,
+ review_job_id=str(review_job_id) if manifest is not None else None,
+ review_case_id=manifest.review_case_id if manifest is not None else None,
+ manual_override_sha256=manifest.sha256 if manifest is not None else None,
+ legacy_v3_output=legacy_v3_output,
+ )
print(json.dumps(success, ensure_ascii=False))
return 0
except ProcessingFailure as exc:
@@ -2344,6 +2451,7 @@ def process(args: argparse.Namespace) -> int:
structured=structured_result_json,
exception=exception_path,
errors=exc.errors,
+ ignored_emoji_count=input_cleanup.get("ignored_emoji_count", 0),
)
if result_json.is_absolute() and is_within(result_json, output_dir):
write_result(result_json, failed)
@@ -2430,6 +2538,7 @@ def process(args: argparse.Namespace) -> int:
structured=structured_result_json,
exception=exception_path,
errors=[error],
+ ignored_emoji_count=input_cleanup.get("ignored_emoji_count", 0),
)
if result_json.is_absolute() and is_within(result_json, output_dir):
write_result(result_json, failed)
diff --git a/arr-opera-daily-ingest/scripts/validate_daily.py b/arr-opera-daily-ingest/scripts/validate_daily.py
index ccfa9e3..bfd801e 100755
--- a/arr-opera-daily-ingest/scripts/validate_daily.py
+++ b/arr-opera-daily-ingest/scripts/validate_daily.py
@@ -303,6 +303,7 @@ def validate_result_contract(
review_required_rows: int = 0,
review_issue_count: int = 0,
expected_errors: Sequence[core.ErrorItem] = (),
+ ignored_emoji_count: int = 0,
) -> None:
required = {
"version",
@@ -313,6 +314,8 @@ def validate_result_contract(
"outputs",
"errors",
}
+ if ignored_emoji_count:
+ required.add("input_cleanup")
if set(payload) != required:
errors.append(
validation_error(
@@ -320,6 +323,17 @@ def validate_result_contract(
)
)
return
+ if ignored_emoji_count:
+ cleanup = payload.get("input_cleanup")
+ if (
+ not isinstance(cleanup, dict)
+ or set(cleanup) != {"ignored_emoji_count"}
+ or type(cleanup.get("ignored_emoji_count")) is not int
+ or cleanup["ignored_emoji_count"] != ignored_emoji_count
+ ):
+ errors.append(validation_error(
+ "OUTPUT_RESULT_CLEANUP_MISMATCH", "忽略表情数量与原XML独立重放不一致"
+ ))
if payload.get("version") != core.RESULT_VERSION or payload.get("status") != status:
errors.append(
validation_error(
@@ -441,6 +455,7 @@ def validate_structured_result_contract(
*,
manual_manifest: Optional[core.ManualOverrideManifest] = None,
manual_override_path: Optional[Path] = None,
+ ignore_emojis: bool = True,
) -> None:
required = {
"result_schema_version",
@@ -590,7 +605,7 @@ def validate_structured_result_contract(
)
)
- _date, reservations = core.read_xml(xml_path)
+ _date, reservations = core.read_xml(xml_path, ignore_emojis=ignore_emojis)
all_records, retained, _removed_rate, _removed_duplicates, classification_errors = (
core.classify_source_records(reservations, business_date)
)
@@ -989,6 +1004,7 @@ def validate_legacy_direct_success_contracts(
expected_records,
replay_result,
errors,
+ ignore_emojis=False,
)
@@ -1176,8 +1192,11 @@ def validate(args: argparse.Namespace) -> List[core.ErrorItem]:
manual_manifest: Optional[core.ManualOverrideManifest] = None
manual_override_path = Path(manual_override_arg) if manual_override_arg else None
+ input_cleanup: Dict[str, int] = {}
try:
- business_date, reservations = core.read_xml(xml_path)
+ business_date, reservations = core.read_xml(
+ xml_path, input_cleanup=input_cleanup, ignore_emojis=not legacy_v3_output
+ )
all_records, records, removed_rate, removed_duplicates, classification_errors = (
core.classify_source_records(reservations, business_date)
)
@@ -1236,6 +1255,7 @@ def validate(args: argparse.Namespace) -> List[core.ErrorItem]:
review_required_rows=len(pricing_errors),
review_issue_count=len(core.review_issues(records, price_map)),
expected_errors=pricing_errors,
+ ignored_emoji_count=input_cleanup.get("ignored_emoji_count", 0),
)
validate_review_structured_result_contract(
structured_payload,
@@ -1290,6 +1310,7 @@ def validate(args: argparse.Namespace) -> List[core.ErrorItem]:
structured_result_json,
expected_channels,
errors,
+ ignored_emoji_count=input_cleanup.get("ignored_emoji_count", 0),
)
validate_structured_result_contract(
structured_payload,
diff --git a/arr_ingestion/validation.py b/arr_ingestion/validation.py
index b6c5bc7..8b27b84 100644
--- a/arr_ingestion/validation.py
+++ b/arr_ingestion/validation.py
@@ -744,7 +744,16 @@ def _validate_structured_payload_v4(
def _validate_result_payload_v4(
payload: Mapping[str, Any], envelope: DeliveryEnvelope, structured: Mapping[str, Any]
) -> None:
- _require_exact_mapping(payload, RESULT_FIELDS, "result")
+ fields = RESULT_FIELDS
+ if "input_cleanup" in payload:
+ fields = fields | {"input_cleanup"}
+ cleanup = _require_exact_mapping(
+ payload["input_cleanup"], {"ignored_emoji_count"}, "input cleanup"
+ )
+ count = _require_nonnegative_integer(cleanup.get("ignored_emoji_count"), "ignored_emoji_count")
+ if count == 0:
+ raise IngestionError("RESULT_CONTRACT_INVALID", "empty input cleanup must be omitted")
+ _require_exact_mapping(payload, fields, "result")
expected_date = envelope.business_date.isoformat() if envelope.business_date else None
if (
payload.get("version") != RESULT_SCHEMA_VERSION
diff --git a/arr_processing/local.py b/arr_processing/local.py
index 75fd10f..c7533ef 100644
--- a/arr_processing/local.py
+++ b/arr_processing/local.py
@@ -18,6 +18,7 @@ class LocalProcessingOutput:
business_date: Optional[date]
artifacts: Mapping[str, Path]
exit_code: int
+ ignored_emoji_count: int = 0
@dataclass(frozen=True)
@@ -185,8 +186,23 @@ class LocalDailyProcessor:
business_date=business_date,
artifacts=artifacts,
exit_code=completed.returncode,
+ ignored_emoji_count=self._ignored_emoji_count(result),
)
+ @staticmethod
+ def _ignored_emoji_count(result: Mapping[str, object]) -> int:
+ if "input_cleanup" not in result:
+ return 0
+ cleanup = result["input_cleanup"]
+ if (
+ not isinstance(cleanup, dict)
+ or set(cleanup) != {"ignored_emoji_count"}
+ or type(cleanup.get("ignored_emoji_count")) is not int
+ or cleanup["ignored_emoji_count"] <= 0
+ ):
+ raise IngestionError("PROCESSOR_RESULT_INVALID", "processor input cleanup is invalid")
+ return cleanup["ignored_emoji_count"]
+
@staticmethod
def _output_path(output_dir: Path, value: object, suffix: str) -> Path:
if (
diff --git a/arr_web/programmatic.py b/arr_web/programmatic.py
index a024624..919e938 100644
--- a/arr_web/programmatic.py
+++ b/arr_web/programmatic.py
@@ -132,6 +132,7 @@ class ProgrammaticUploadCoordinator:
"version_no": outcome.version_no,
"source_sha256": source.sha256,
"source_byte_size": source.byte_size,
+ "ignored_emoji_count": processed.ignored_emoji_count,
"review_case_id": outcome.review_case_id,
"review_revision": outcome.review_revision,
"review_completed_items": outcome.review_completed_items,
@@ -309,6 +310,7 @@ class ProgrammaticUploadCoordinator:
"daily_version_id": outcome.daily_version_id,
"version_no": outcome.version_no,
"review_case_id": plan.review_case_id,
+ "ignored_emoji_count": processed.ignored_emoji_count,
}
except IngestionError as error:
if self._is_retryable_review_generation_error(error):
diff --git a/arr_web/static/app.js b/arr_web/static/app.js
index c48c224..47a946c 100644
--- a/arr_web/static/app.js
+++ b/arr_web/static/app.js
@@ -1381,6 +1381,10 @@
$("#selected-file").textContent = I18N?.t("upload.file_not_selected") || "尚未选择文件";
const failed = receipt.status === "failed";
const needsReview = receipt.status === "needs_review";
+ const ignoredEmojiCount = receipt.ignored_emoji_count;
+ const cleanupNotice = Number.isSafeInteger(ignoredEmojiCount) && ignoredEmojiCount > 0
+ ? (I18N?.t("upload.emoji_ignored", { count: ignoredEmojiCount }) || `已忽略 ${ignoredEmojiCount} 处表情符号`)
+ : "";
finishUploadProgress(
!failed,
failed
@@ -1390,11 +1394,12 @@
: (I18N?.t("upload.processing_done") || "处理完成"),
);
showToast(
- failed
+ (failed
? (I18N?.t("upload.failure_log") || "ARR.XML 处理失败,请查看任务日志")
: needsReview
? (I18N?.t("upload.review_required") || "发现缺少固定价,请完成人工价格复核。")
- : (I18N?.t("upload.success") || "ARR.XML 已处理并完成入库"),
+ : (I18N?.t("upload.success") || "ARR.XML 已处理并完成入库"))
+ + (cleanupNotice ? ` · ${cleanupNotice}` : ""),
failed,
);
const receiptMonth = String(receipt.business_date || receipt.arrival_date || "").slice(0, 7);
diff --git a/arr_web/static/i18n.js b/arr_web/static/i18n.js
index 855deb9..cd4bd2e 100644
--- a/arr_web/static/i18n.js
+++ b/arr_web/static/i18n.js
@@ -122,6 +122,7 @@
"upload.daily_generating": ["日报生成中", "Generating daily report", "กำลังสร้างรายงานรายวัน"],
"upload.review_required": ["发现缺少固定价,请完成人工价格复核。", "Some fixed prices are missing. Complete the manual price review.", "พบราคาคงที่ที่ขาดหาย โปรดตรวจสอบราคาด้วยตนเองให้ครบ"],
"upload.success": ["ARR.XML 已处理并完成入库", "ARR.XML was processed and committed.", "ประมวลผลและบันทึก ARR.XML แล้ว"],
+ "upload.emoji_ignored": ["已忽略 {count} 处表情符号", "Ignored {count} emoji sequences.", "ละเว้นอีโมจิ {count} รายการแล้ว"],
"upload.failure_log": ["ARR.XML 处理失败,请查看任务日志", "ARR.XML processing failed. Check the task log.", "การประมวลผล ARR.XML ไม่สำเร็จ โปรดดูบันทึกงาน"],
"upload.service_unready": ["文件接收服务尚未完成生产接线。", "The file intake service is not ready for production.", "บริการรับไฟล์ยังไม่พร้อมใช้งานจริง"],
"upload.stage_processor": ["正在运行固定处理器", "Running the fixed processor", "กำลังเรียกใช้ตัวประมวลผล"],
diff --git a/tests/browser/arr_upload_emoji_notice.cjs b/tests/browser/arr_upload_emoji_notice.cjs
new file mode 100644
index 0000000..01a1944
--- /dev/null
+++ b/tests/browser/arr_upload_emoji_notice.cjs
@@ -0,0 +1,75 @@
+// Execute the real upload handler against synthetic responses and a minimal DOM
+// adapter; no browser, server, credentials or business uploads are used.
+const {test} = require('node:test');
+const assert = require('node:assert/strict');
+const fs = require('node:fs');
+const path = require('node:path');
+const vm = require('node:vm');
+const root = path.resolve(__dirname, '../..');
+const app = fs.readFileSync(path.join(root, 'arr_web/static/app.js'), 'utf8');
+const i18n = fs.readFileSync(path.join(root, 'arr_web/static/i18n.js'), 'utf8');
+const handler = app.slice(app.indexOf('async function handleUpload()'), app.indexOf('async function loadMonthsAndAnalytics()'));
+const catalog = Object.fromEntries([...i18n.matchAll(/^\s*"([^"]+)": (\[.*\]),?$/gm)].map(match => [match[1], JSON.parse(match[2])]));
+
+async function upload(receipt, locale = 0) {
+ const nodes = new Map();
+ const notices = [];
+ const progress = [];
+ const source = Buffer.from('synthetic');
+ const noop = () => {};
+ const context = {
+ state: {health: {processing_ready: true}, jobs: [], selectedFile: {name: 'ARR.XML', arrayBuffer: async () => source}},
+ $: selector => {
+ if (!nodes.has(selector)) nodes.set(selector, {classList: {add: noop, toggle: noop}, setAttribute: noop, removeAttribute: noop});
+ return nodes.get(selector);
+ },
+ I18N: {t: (key, values = {}) => catalog[key]?.[locale]?.replace(/\{(\w+)\}/g, (_, name) => values[name])},
+ api: async (url, options) => {
+ assert.equal(url, '/api/jobs');
+ assert.deepEqual(options.body, source);
+ return receipt;
+ },
+ encodedFilename: value => value,
+ clearTracePoll: noop, renderJobs: noop, renderTracePlaceholder: noop,
+ setTraceLiveState: noop, startUploadProgress: noop, renderHistoryMonthControl: noop,
+ validMonth: () => true, localMonth: () => '2026-07', loadJobs: async () => {},
+ selectJob: async () => {}, openDailyPriceReview: async () => {},
+ finishUploadProgress: (...args) => progress.push(args),
+ showToast: (...args) => notices.push(args),
+ };
+ vm.createContext(context);
+ vm.runInContext(handler, context);
+ await context.handleUpload();
+ assert.equal(context.state.uploadInFlight, false);
+ assert.equal(nodes.get('#xml-file').disabled, false);
+ assert.equal(notices.length, 1);
+ return {notice: notices[0], progress};
+}
+
+test('successful uploads show the verified emoji count in all three languages', async () => {
+ const expected = ['已忽略 4 处表情符号', 'Ignored 4 emoji sequences.', 'ละเว้นอีโมจิ 4 รายการแล้ว'];
+ for (let locale = 0; locale < 3; locale++) {
+ const {notice, progress} = await upload({status: 'succeeded', ignored_emoji_count: 4}, locale);
+ assert.equal(notice[1], false);
+ assert(notice[0].includes(expected[locale]));
+ assert.equal(progress[0][0], true);
+ }
+});
+
+test('review and failure keep their original status while disclosing cleanup', async () => {
+ for (const status of ['needs_review', 'failed']) {
+ const {notice, progress} = await upload({status, ignored_emoji_count: 1});
+ assert(notice[0].includes('已忽略 1 处表情符号'));
+ assert(notice[0].includes(status === 'failed' ? '处理失败' : '价格复核'));
+ assert.equal(notice[1], status === 'failed');
+ assert.equal(progress[0][0], status !== 'failed');
+ }
+});
+
+test('no cleanup notice is invented for old, empty or invalid metadata', async () => {
+ for (const count of [undefined, 0, -1, true, '4', 1.5]) {
+ const {notice} = await upload({status: 'succeeded', ignored_emoji_count: count});
+ assert.equal(notice[0], catalog['upload.success'][0]);
+ assert.equal(notice[1], false);
+ }
+});
diff --git a/tests/test_arr_opera_daily_ingest.py b/tests/test_arr_opera_daily_ingest.py
index 1389d87..e2e5605 100644
--- a/tests/test_arr_opera_daily_ingest.py
+++ b/tests/test_arr_opera_daily_ingest.py
@@ -110,19 +110,20 @@ def success_xml() -> str:
def run_processor(
- xml_text: str,
+ xml_text: str | bytes,
root: Path,
*,
manual_override: dict[str, object] | None = None,
review_job_id: str | None = None,
review_case_id: str | None = None,
+ legacy_v3_output: bool = False,
):
root.mkdir(parents=True, exist_ok=True)
xml_path = root / "synthetic.xml"
output_dir = root / "output"
result_path = output_dir / "result.json"
structured_path = output_dir / "structured-result.json"
- xml_path.write_text(xml_text, encoding="utf-8")
+ xml_path.write_bytes(xml_text if isinstance(xml_text, bytes) else xml_text.encode("utf-8"))
manual_override_path: Path | None = None
if manual_override is not None:
if review_job_id is None or review_case_id is None:
@@ -142,6 +143,7 @@ def run_processor(
manual_override_sha256=(
core.sha256_file(manual_override_path) if manual_override_path is not None else None
),
+ legacy_v3_output=legacy_v3_output,
)
with contextlib.redirect_stdout(io.StringIO()):
exit_code = core.process(args)
@@ -200,10 +202,12 @@ class ArrOperaDailyIngestTests(unittest.TestCase):
"references/business-rules.md",
"references/codex-result.schema.json",
"references/error-contract.md",
+ "references/emoji-sequences-17.0.txt",
"references/field-contracts.md",
"references/manual-override.schema.json",
"references/structured-output.md",
"references/structured-result.schema.json",
+ "references/unicode-license.txt",
"references/价格对照.xlsx",
"assets/daily-template.xlsx",
}
@@ -230,7 +234,7 @@ class ArrOperaDailyIngestTests(unittest.TestCase):
self.assertNotIn(forbidden, scripts)
self.assertEqual(core.RESULT_VERSION, "4.0")
self.assertEqual(core.STRUCTURED_RESULT_SCHEMA_VERSION, "4.0")
- self.assertEqual(core.PROCESSOR_VERSION, "4.0.0")
+ self.assertEqual(core.PROCESSOR_VERSION, "4.1.0")
self.assertEqual(len(core.DAILY_HEADERS), 19)
self.assertEqual(len(core.RATE_WHITELIST), 20)
@@ -296,7 +300,7 @@ class ArrOperaDailyIngestTests(unittest.TestCase):
)
self.assertEqual(payload["result_schema_version"], "4.0")
- self.assertEqual(payload["processor_version"], "4.0.0")
+ self.assertEqual(payload["processor_version"], "4.1.0")
self.assertEqual(payload["source_rows"], 5)
self.assertEqual(
payload["outcome_counts"],
@@ -793,7 +797,7 @@ class ArrOperaDailyIngestTests(unittest.TestCase):
},
}
)
- self.assertEqual(delivery.processor_version, "4.0.0")
+ self.assertEqual(delivery.processor_version, "4.1.0")
self.assertEqual(delivery.result_schema_version, "4.0")
self.assertEqual(delivery.business_date, date(2026, 7, 27))
diff --git a/tests/test_arr_xml_emoji.py b/tests/test_arr_xml_emoji.py
new file mode 100644
index 0000000..696047d
--- /dev/null
+++ b/tests/test_arr_xml_emoji.py
@@ -0,0 +1,199 @@
+from __future__ import annotations
+
+import hashlib
+import json
+import tempfile
+import unittest
+from pathlib import Path
+
+from arr_ingestion.contracts import IngestionError
+from arr_ingestion.validation import DeliveryValidator
+from arr_processing.policy import load_processor_policy
+from tests.test_arr_ingestion_validation import build_delivery, artifact_ref
+from tests.test_arr_opera_daily_ingest import (
+ PROJECT_ROOT, core, reservation, run_processor, xml_document,
+)
+from tests.test_arr_programmatic import coordinator
+
+
+CESU8_CROWN = bytes.fromhex("eda0bdedb191")
+
+
+def source_with_trace(text: str) -> str:
+ row = reservation(1).replace(
+ "",
+ "" + text
+ + "",
+ )
+ return xml_document(row)
+
+
+class EmojiXMLReadTests(unittest.TestCase):
+ def read(self, raw: bytes):
+ with tempfile.TemporaryDirectory() as temporary:
+ path = Path(temporary) / "source.xml"
+ path.write_bytes(raw)
+ cleanup = {}
+ business_date, rows = core.read_xml(path, input_cleanup=cleanup)
+ self.assertEqual(path.read_bytes(), raw)
+ return business_date, rows, cleanup
+
+ def test_plain_and_composite_emoji_are_removed_as_whole_sequences(self):
+ for emoji in ("👑", "😀", "👑️", "❤️", "❤", "👍🏽", "🇨🇳", "👨👩👧👦", "1️⃣", "1⃣", "#️⃣", "🏳️🌈", "🏴\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f"):
+ with self.subTest(emoji=emoji):
+ _, rows, cleanup = self.read(source_with_trace("前" + emoji + "后").encode())
+ self.assertEqual(core.source_record(rows[0], 1)["TRACE_TEXT"], "前后")
+ self.assertEqual(cleanup, {"ignored_emoji_count": 1})
+
+ def test_non_emoji_business_text_and_supplementary_cjk_are_preserved(self):
+ text = "中文𠮷 ไทย café 0123456789 # * ¥¥$€£฿ 900.00 2026-07-27 + - / & <"
+ _, rows, cleanup = self.read(source_with_trace(text).encode())
+ self.assertEqual(core.source_record(rows[0], 1)["TRACE_TEXT"], text.replace("&", "&").replace("<", "<"))
+ self.assertEqual(cleanup, {"ignored_emoji_count": 0})
+
+ def test_cesu8_recovers_only_complete_emoji_in_text_and_cdata(self):
+ for text in ("前👑后", "", "前👨👩👧👦后"):
+ with self.subTest(text=text):
+ source = source_with_trace(text)
+ # Deliberately reproduce a Java UTF-16/CESU-8 style exporter.
+ raw = "".join(
+ char if ord(char) <= 0xFFFF else chr(0xD800 + ((ord(char) - 0x10000) >> 10)) + chr(0xDC00 + ((ord(char) - 0x10000) & 1023))
+ for char in source
+ ).encode("utf-8", errors="surrogatepass")
+ _, rows, cleanup = self.read(raw)
+ self.assertEqual(core.source_record(rows[0], 1)["TRACE_TEXT"], "前后")
+ self.assertEqual(cleanup["ignored_emoji_count"], 1)
+
+ def test_character_references_and_literal_emoji_share_cleanup(self):
+ _, rows, cleanup = self.read(source_with_trace("👑 👑 👑 ❤️").encode())
+ self.assertEqual(core.source_record(rows[0], 1)["TRACE_TEXT"], "")
+ self.assertEqual(cleanup["ignored_emoji_count"], 4)
+
+ def test_unrelated_invalid_bytes_and_surrogates_still_fail(self):
+ base = source_with_trace("BAD").encode()
+ for bad in (b"\xff", b"\xc0\xaf", b"\xed\xa0\xbd", b"\xed\xb1\x91", b"\xf0\x9f\x91", b"\xed\xa1\x80\xed\xb0\x80", CESU8_CROWN + b"\xff"):
+ with self.subTest(bad=bad.hex()):
+ with self.assertRaises(core.ProcessingFailure) as caught:
+ self.read(base.replace(b"BAD", bad))
+ self.assertEqual(caught.exception.errors[0].code, "XML_PARSE_ERROR")
+
+ def test_markup_is_not_repaired_or_stripped(self):
+ original = source_with_trace("ok").encode()
+ sources = (
+ original.replace(b"", b""),
+ original.replace(b"", b''),
+ original.replace(b"", b"" + CESU8_CROWN + b""),
+ original + CESU8_CROWN,
+ )
+ for raw in sources:
+ with self.subTest(raw=hashlib.sha256(raw).hexdigest()):
+ with self.assertRaises(core.ProcessingFailure) as caught:
+ self.read(raw)
+ self.assertEqual(caught.exception.errors[0].code, "XML_PARSE_ERROR")
+
+ def test_utf8_bom_and_existing_utf16_inputs(self):
+ source = source_with_trace("👑保留")
+ for raw in (b"\xef\xbb\xbf" + source.encode().replace("👑".encode(), CESU8_CROWN), source.replace("UTF-8", "UTF-16").encode("utf-16")):
+ with self.subTest(encoding=raw[:3]):
+ _, rows, cleanup = self.read(raw)
+ self.assertEqual(core.source_record(rows[0], 1)["TRACE_TEXT"], "保留")
+ self.assertEqual(cleanup["ignored_emoji_count"], 1)
+
+ def test_doctype_and_mixed_business_dates_remain_errors(self):
+ source = source_with_trace("👑")
+ unsafe = source.replace("", ']>')
+ with self.assertRaises(core.ProcessingFailure) as caught:
+ self.read(unsafe.encode().replace("👑".encode(), CESU8_CROWN))
+ self.assertEqual(caught.exception.errors[0].code, "INPUT_XML_UNSAFE_DECLARATION")
+ group = source[source.index(""):source.index("") + len("")]
+ mixed = source.replace("", group.replace("20260727", "20260728").replace("27-07-26", "28-07-26") + "")
+ with self.assertRaises(core.ProcessingFailure) as caught:
+ self.read(mixed.encode())
+ self.assertEqual(caught.exception.errors[0].code, "XML_MULTIPLE_BUSINESS_DATES")
+
+
+class EmojiPipelineTests(unittest.TestCase):
+ def test_retired_v3_replay_keeps_its_original_emoji_behavior(self):
+ source = source_with_trace("👑 VIP").encode()
+ for raw, expected in ((source, "success"), (source.replace("👑".encode(), CESU8_CROWN), "failed")):
+ with self.subTest(expected=expected), tempfile.TemporaryDirectory() as temporary:
+ root = Path(temporary)
+ _, _, _, result, structured = run_processor(raw, root, legacy_v3_output=True)
+ self.assertEqual(result["status"], expected)
+ self.assertNotIn("input_cleanup", result)
+ self.assertEqual(structured["processor_version"], "3.0.0")
+ if expected == "success":
+ self.assertEqual(structured["records"][0]["trace_text"], "👑 VIP")
+ else:
+ self.assertEqual(structured["errors"][0]["code"], "XML_PARSE_ERROR")
+
+ def test_upload_preserves_original_identity_and_commits_cleaned_facts(self):
+ raw = source_with_trace("👑 VIP 👑 VIP 👑 VIP 👑 VIP").encode().replace("👑".encode(), CESU8_CROWN)
+ with tempfile.TemporaryDirectory() as temporary:
+ upload, repository, objects = coordinator(Path(temporary))
+ receipt = upload.submit("ARR.XML", raw)
+ self.assertEqual(receipt["status"], "succeeded")
+ self.assertEqual(receipt["ignored_emoji_count"], 4)
+ self.assertEqual(receipt["source_sha256"], hashlib.sha256(raw).hexdigest())
+ self.assertEqual(receipt["source_byte_size"], len(raw))
+ source = next(objects.rglob("source.xml"))
+ self.assertEqual(source.read_bytes(), raw)
+ result = json.loads(next(objects.rglob("result.json")).read_text())
+ self.assertEqual(result["input_cleanup"], {"ignored_emoji_count": 4})
+ self.assertIn("已忽略 4 处表情符号", result["message"])
+ records = repository.version_records(receipt["daily_version_id"])
+ self.assertEqual(records[0]["trace_text"], "VIP VIP VIP VIP")
+
+ def test_emoji_only_required_name_still_fails_business_validation(self):
+ with tempfile.TemporaryDirectory() as temporary:
+ code, _, _, result, _ = run_processor(xml_document(reservation(1, full_name="👑")), Path(temporary))
+ self.assertNotEqual(code, 0)
+ self.assertEqual(result["status"], "failed")
+ self.assertTrue(any("FULL_NAME" in item["message"] for item in result["errors"]))
+ self.assertEqual(result["input_cleanup"]["ignored_emoji_count"], 1)
+
+ def test_missing_price_stays_review_required_and_final_replay_uses_original(self):
+ raw = xml_document(reservation(1, rate_amount="1800", full_name="👑SYNTHETIC GUEST")).encode().replace("👑".encode(), CESU8_CROWN)
+ with tempfile.TemporaryDirectory() as temporary:
+ upload, repository, _ = coordinator(Path(temporary))
+ receipt = upload.submit("ARR.XML", raw)
+ self.assertEqual(receipt["status"], "needs_review")
+ self.assertEqual(receipt["ignored_emoji_count"], 1)
+ review = upload.get_price_review(receipt["job_id"], 50, 0)
+ updated = upload.update_price_review_item(receipt["job_id"], review["items"][0]["item_id"], review["case_id"], review["revision"], "900", "synthetic-operator")
+ final = upload.finalize_price_review(receipt["job_id"], review["case_id"], updated["revision"], "synthetic-operator")
+ self.assertEqual(final["status"], "succeeded")
+ self.assertEqual(final["ignored_emoji_count"], 1)
+ self.assertIsNotNone(repository.version_records(final["daily_version_id"]))
+
+ def test_independent_validator_rejects_tampered_cleanup_metadata(self):
+ with tempfile.TemporaryDirectory() as temporary:
+ raw, store, values = build_delivery(source_with_trace("👑"), Path(temporary))
+ validator = DeliveryValidator(store, load_processor_policy(PROJECT_ROOT))
+ validator.validate(raw)
+ for cleanup in (None, {"ignored_emoji_count": 2}, {"ignored_emoji_count": True}, {"ignored_emoji_count": 1, "unexpected": 1}):
+ with self.subTest(cleanup=cleanup):
+ envelope = json.loads(raw)
+ result = json.loads(values["result_json"])
+ if cleanup is None:
+ result.pop("input_cleanup")
+ else:
+ result["input_cleanup"] = cleanup
+ edited = (json.dumps(result, ensure_ascii=False) + "\n").encode()
+ ref = envelope["artifacts"]["result_json"]
+ envelope["artifacts"]["result_json"] = artifact_ref(ref["object_key"], ref["original_filename"], edited, ref["mime_type"])
+ structured = json.loads(values["structured_result_json"])
+ structured["artifacts"]["result_json"]["sha256"] = hashlib.sha256(edited).hexdigest()
+ structured["artifacts"]["result_json"]["byte_size"] = len(edited)
+ edited_structured = (json.dumps(structured, ensure_ascii=False) + "\n").encode()
+ sref = envelope["artifacts"]["structured_result_json"]
+ envelope["artifacts"]["structured_result_json"] = artifact_ref(sref["object_key"], sref["original_filename"], edited_structured, sref["mime_type"])
+ store.objects[ref["object_key"]] = edited
+ store.objects[sref["object_key"]] = edited_structured
+ with self.assertRaises(IngestionError) as caught:
+ validator.validate(json.dumps(envelope).encode())
+ self.assertIn(caught.exception.code, {"RESULT_CONTRACT_INVALID", "OUTPUT_VALIDATION_FAILED"})
+
+
+if __name__ == "__main__":
+ unittest.main()