diff --git a/.github/workflows/brs-commit-checker.yml b/.github/workflows/brs-commit-checker.yml new file mode 100644 index 000000000000..060cacd873f9 --- /dev/null +++ b/.github/workflows/brs-commit-checker.yml @@ -0,0 +1,64 @@ +name: BRS Commit Checker Report +on: + workflow_dispatch: + inputs: + fix_version: + type: string + required: true + description: The ICU Jira "Fix Version" semver + from_git_ref: + type: string + required: true + description: The git ref start of comparison range. Prefix branches with `origin/`. + end_git_ref: + type: string + required: true + description: The git ref end of comparison range. Must be descendant of `from_git_ref`. Prefix branches with `origin/`. + # Jira user name & API token is used for processing sensitive tickets comes from Github Secrets + # stored in the repository + +jobs: + commit-report: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-tags: true + fetch-depth: 0 + # workaround for bug in checkout action. this step should be redundant. + # https://github.com/actions/checkout/issues/1471 + # https://github.com/actions/checkout/issues/1781 + # https://github.com/actions/checkout/issues/701#issuecomment-1133937950 + - name: Fetch all tags + run: | + git fetch --tags origin + - name: Fetch all branches + run: | + git fetch origin + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.12.8' + cache: 'pipenv' + cache-dependency-path: | + tools/commit-checker/Pipfile + tools/commit-checker/Pipfile.lock + - name: Install pipenv + run: | + sudo pip3 install pipenv + - name: Generate report + env: + JIRA_USERNAME: ${{ secrets.COMMIT_CHECKER_JIRA_EMAIL }} + JIRA_PASSWORD: ${{ secrets.COMMIT_CHECKER_JIRA_TOKEN }} + run: | + pushd ./tools/commit-checker + pipenv install + pipenv run python3 check.py \ + --jira-query "project=ICU AND fixVersion=${{ inputs.fix_version }}" \ + --rev-range "${{ inputs.from_git_ref }}..${{ inputs.end_git_ref }}" > REPORT.md + popd + # https://github.blog/news-insights/product-news/supercharging-github-actions-with-job-summaries/ + - name: Reproduce report as workflow job summary + run: | + cat ./tools/commit-checker/REPORT.md >> $GITHUB_STEP_SUMMARY + echo "View the Summary page of this GHA Workflow instance to view the rendered Markdown of this report." diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml index 54d91d15e694..928316092302 100644 --- a/.github/workflows/cifuzz.yml +++ b/.github/workflows/cifuzz.yml @@ -55,7 +55,7 @@ jobs: path: ./out/artifacts - name: Upload Sarif if: always() && steps.build.outcome == 'success' - uses: github/codeql-action/upload-sarif@v3.28.9 + uses: github/codeql-action/upload-sarif@v3.28.10 with: # Path to SARIF file relative to the root of the repository sarif_file: cifuzz-sarif/results.sarif diff --git a/.github/workflows/icu4c.yml b/.github/workflows/icu4c.yml index 062aabb7f41e..7b187491fae0 100644 --- a/.github/workflows/icu4c.yml +++ b/.github/workflows/icu4c.yml @@ -740,7 +740,7 @@ jobs: runs-on: ubuntu-22.04 # Updated in BRS steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: bazel-contrib/setup-bazel@0.13.0 + - uses: bazel-contrib/setup-bazel@0.14.0 - name: Get CI Linux runner VM version id: linux-version run: | diff --git a/.github/workflows/icu_merge_ci.yml b/.github/workflows/icu_merge_ci.yml index feb36be4fc81..aa0c9cf70ee3 100644 --- a/.github/workflows/icu_merge_ci.yml +++ b/.github/workflows/icu_merge_ci.yml @@ -144,7 +144,7 @@ jobs: - name: Create directory for lib files run: mkdir icu4c/source/perflib - name: Get ICU libs - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 with: name: icu-perf-libs path: icu4c/source/lib @@ -218,7 +218,7 @@ jobs: - name: Create directory for lib files run: mkdir icu4c/source/perflib - name: Get ICU libs - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 with: name: icu-perf-libs path: icu4c/source/lib @@ -283,7 +283,7 @@ jobs: - name: Create directory for lib files run: mkdir icu4c/source/perflib - name: Get ICU libs - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 with: name: icu-perf-libs path: icu4c/source/lib diff --git a/.github/workflows/release-icu4c-ubuntu.yml b/.github/workflows/release-icu4c-ubuntu.yml index c0418d47827c..b778ef42c1e9 100644 --- a/.github/workflows/release-icu4c-ubuntu.yml +++ b/.github/workflows/release-icu4c-ubuntu.yml @@ -60,14 +60,14 @@ jobs: source /etc/os-release # Get the ICU version in artifact_version source icu4j/releases_tools/shared.sh - # Convert 76.1 to 76_1 + # Convert 77.1 to 77_1 underscore_version=$(echo $artifact_version | sed 's/\./_/g') pushd ${RELEASE_FOLDER} tar -czf icu4c-${underscore_version}-Ubuntu${VERSION_ID}-x64.tgz icu rm -fr icu popd - mv icu4c/source/dist/icu4c-76_1-d* ${RELEASE_FOLDER} - mv icu4c/source/dist/icu4c-76_1-src.* ${RELEASE_FOLDER} + mv icu4c/source/dist/icu4c-77_1-d* ${RELEASE_FOLDER} + mv icu4c/source/dist/icu4c-77_1-src.* ${RELEASE_FOLDER} - name: Upload build results uses: actions/upload-artifact@v4.3.6 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 77d5c562da82..8c4d7d715904 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -34,7 +34,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 with: results_file: results.sarif results_format: sarif @@ -59,6 +59,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@3d3d628990a5f99229dd9fa1821cc5a4f31b613b # v2.25.15 + uses: github/codeql-action/upload-sarif@83923549f688e42b34d0b90ee94725f7c30532fc # v2.25.15 with: sarif_file: results.sarif diff --git a/docs/download/77.md b/docs/download/77.md index 2a528aa0ff07..00af3b97c395 100644 --- a/docs/download/77.md +++ b/docs/download/77.md @@ -16,15 +16,14 @@ License & terms of use: http://www.unicode.org/copyright.html ICU is the [premier library for software internationalization](https://icu.unicode.org/#h.i33fakvpjb7o), used by a [wide array of companies and organizations](https://icu.unicode.org/#h.f9qwubthqabj). -## Release Candidate - -**Please use this release candidate for testing, but do not use it in production!** - ## Release Overview +* Download: [releases/tag/release-77-1](https://github.com/unicode-org/icu/releases/tag/release-77-1) +* [Maven: com.ibm.icu / icu4j / version 77.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1) + ICU 77 updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) -([alpha blog](https://blog.unicode.org/2025/02/unicode-cldr-47-alpha-now-available-for.html)) +([beta blog](https://blog.unicode.org/2025/02/unicode-cldr-47-beta-available-for.html)) locale data with new locales, and various additions and corrections. ICU 77 is mostly focused on bug fixes, segmentation conformance, and other refinements. @@ -39,11 +38,31 @@ For more details, including migration issues, see below. Please use the [icu-support mailing list](https://icu.unicode.org/contacts) and/or [find/submit error reports](https://icu.unicode.org/bugs). +### Attention: Future Changes + +Beginning with ICU 78 (2025-oct): + +1. We want to move the minimum required Java version from Java 8 to Java 11. + This is a significant, useful update in terms of the Java language and + standard library, and simplifies ICU tooling which currently uses + a mix of Java 8 and Java 11. + Note that [Android desugaring](https://developer.android.com/studio/write/java11-default-support-table) + supports at least Java 11 since late 2023.\ + See [ICU-23072](https://unicode-org.atlassian.net/browse/ICU-23072) + where you can provide comments. +2. We are planning to remove the + [ICU4J Locale Service Provider](../userguide/icu4j/locale-service-provider.md) + ([Maven: com.ibm.icu / icu4j-localespi / version 76.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j-localespi/76.1)). + It is much less useful than when we added it, has very low usage, + needs work for newer Java versions, and complicates ICU4J development.\ + See [ICU-23071](https://unicode-org.atlassian.net/browse/ICU-23071) + where you can provide comments. + ### Version Number The initial release has library version number 77.1. -* Release date: 2025-03-TODO +* Release date: 2025-03-13 * [List of tickets fixed in ICU 77](https://unicode-org.atlassian.net/issues/?jql=project%20%3D%20ICU%20AND%20status%20%3D%20Done%20AND%20resolution%20in%20%28Fixed%2C%20%22Fixed%20by%20Other%20Ticket%22%29%20AND%20fixVersion%20%3D%2077.1%20ORDER%20BY%20component%20ASC%2C%20created%20DESC) If there are maintenance releases, they will be 77.2, 77.3, etc. (During ICU 77 development, the library version number was 77.0.x.) @@ -53,7 +72,7 @@ Note: There may be additional commits on the [maint/maint-77](https://github.com ## Common Changes * [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) - ([alpha blog](https://blog.unicode.org/2025/02/unicode-cldr-47-alpha-now-available-for.html)): + ([beta blog](https://blog.unicode.org/2025/02/unicode-cldr-47-beta-available-for.html)): * No major data collection for existing locales; focus on bug fixes and structural improvements * New regional variants: English in several European countries, and Cantonese in Macau (`yue_Hant_MO`) * Improved RBNF (number spellout) and transliteration data @@ -91,7 +110,9 @@ Note: There may be additional commits on the [maint/maint-77](https://github.com ## Known Issues -* (none yet) +* The new MeasureUnit for `portion-per-1e9` works for formatting, + but when the new member function `getConstantDenominator()` is called on this unit, + it incorrectly returns 0. ([ICU-23045](https://unicode-org.atlassian.net/browse/ICU-23045)) ## Migration Issues @@ -118,20 +139,17 @@ ICU4J should work on Android API level 21 and later but may require “[library ## Download -Source and binary downloads are available on the git/GitHub tag page: +### GitHub +Source and binary downloads are available on the git/GitHub tag page: See the [Source Code Setup](../devsetup/source/) page for how to download the ICU file tree directly from GitHub. ICU locale data was generated from CLDR data equivalent to: -* -* - -TODO: [Maven dependency](https://central.sonatype.com/artifact/com.ibm.icu/icu4j): -``` - - com.ibm.icu - icu4j - 77.1 - -``` +* +* + +### Maven +* https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1 +* https://mvnrepository.com/artifact/com.ibm.icu/icu4j-charset/77.1 +* https://mvnrepository.com/artifact/com.ibm.icu/icu4j-localespi/77.1 diff --git a/docs/download/index.md b/docs/download/index.md index d9a109920adc..6c028900b075 100644 --- a/docs/download/index.md +++ b/docs/download/index.md @@ -14,26 +14,23 @@ License & terms of use: http://www.unicode.org/copyright.html If you want to use ICU (as opposed to developing it), it is recommended that you download an official packaged version of the ICU source code. These versions are tested more thoroughly than day-to-day development builds of the system, and they are packaged in zip and tar files for convenient download. Here are several recent releases of ICU that are available: -## Release Candidate +## Latest Release + +***2025-03-13: ICU 77 is now available*** — +[releases/tag/release-77-1](https://github.com/unicode-org/icu/releases/tag/release-77-1) — +[Maven: com.ibm.icu / icu4j / version 77.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1) -***2025-02-21: ICU 77rc is now available.*** -It updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) +[ICU 77](77.md) updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) locale data with new locales, and various additions and corrections. ICU 77 is mostly focused on bug fixes, segmentation conformance, and other refinements. The technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to incorporate some, but not yet all, of the CLDR 47 changes. (Java more than C++) -See [ICU 77](77.md). - -## Latest Release - -***2024-10-24: ICU 76 is now available.*** -It updates to [Unicode 16](https://www.unicode.org/versions/Unicode16.0.0/) ([blog](https://blog.unicode.org/2024/09/announcing-unicode-standard-version-160.html)), including new characters and scripts, emoji, collation & IDNA changes, and corresponding APIs and implementations. It also updates to [CLDR 46](https://cldr.unicode.org/downloads/cldr-46) ([beta blog](https://blog.unicode.org/2024/09/unicode-cldr-46-beta-available-for.html)) locale data with new locales, significant updates to existing locales, and various additions and corrections. For example, the CLDR and Unicode default sort orders are now very nearly the same. - -Most of the java.time (Temporal) types can now be formatted directly. There are some new APIs to make ICU easier to use with modern C++ and Java patterns. The Java and C++ technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to match recent changes. See [ICU 76](76.md). - ## Previous Releases +- 2024-10-24: **ICU 76** updates to [Unicode 16](https://www.unicode.org/versions/Unicode16.0.0/) ([blog](https://blog.unicode.org/2024/09/announcing-unicode-standard-version-160.html)), including new characters and scripts, emoji, collation & IDNA changes, and corresponding APIs and implementations. It also updates to [CLDR 46](https://cldr.unicode.org/downloads/cldr-46) ([beta blog](https://blog.unicode.org/2024/09/unicode-cldr-46-beta-available-for.html)) locale data with new locales, significant updates to existing locales, and various additions and corrections. For example, the CLDR and Unicode default sort orders are now very nearly the same. + - Most of the java.time (Temporal) types can now be formatted directly. There are some new APIs to make ICU easier to use with modern C++ and Java patterns. The Java and C++ technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to match recent changes. See [ICU 76](76.md). + - 2024-04-17: **ICU 75** updates to [CLDR 45](https://cldr.unicode.org/index/downloads/cldr-45) ([beta blog](https://blog.unicode.org/2024/04/unicode-cldr-v45-beta-available-for.html)) locale data with new locales and various additions and corrections. C++ code now requires C++17 and is being made more robust. The CLDR MessageFormat 2.0 specification is now in [technology preview](https://github.com/unicode-org/message-format-wg?tab=readme-ov-file#messageformat-2-technical-preview), together with a corresponding update of the ICU4J (Java) tech preview and a new ICU4C (C++) tech preview. See [Downloading ICU > ICU 75](https://icu.unicode.org/download/75). - 2023-12-13: **ICU 74.2** released with date/time formatting bug fixes. See [Downloading ICU > ICU 74](https://icu.unicode.org/download/74). diff --git a/docs/index.md b/docs/index.md index a2fbad8a93db..86c2c83a571a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -29,10 +29,22 @@ It is the official landing page for the ICU project. Some of the pages from the ICU Site have been migrated here. The migrated sections and pages from the ICU Site are visible in the navigation bar of this site below the "ICU Site" section heading. -### Downloading ICU +## Downloading ICU The [Downloading ICU](download) page has been migrated here. +### Latest Release + +***2025-03-13: ICU 77 is now available*** — +[releases/tag/release-77-1](https://github.com/unicode-org/icu/releases/tag/release-77-1) — +[Maven: com.ibm.icu / icu4j / version 77.1](https://mvnrepository.com/artifact/com.ibm.icu/icu4j/77.1) + +[ICU 77](download/77.md) updates to [CLDR 47](https://cldr.unicode.org/downloads/cldr-47) +locale data with new locales, and various additions and corrections. + +ICU 77 is mostly focused on bug fixes, segmentation conformance, and other refinements. +The technology preview implementations of the CLDR MessageFormat 2.0 specification have been updated to incorporate some, but not yet all, of the CLDR 47 changes. (Java more than C++) + ## ICU team member pages Other documentation pages here are written by and for team members. diff --git a/docs/processes/release/tasks/miscellaneous.md b/docs/processes/release/tasks/miscellaneous.md index e524964af274..ffa7e1e4821b 100644 --- a/docs/processes/release/tasks/miscellaneous.md +++ b/docs/processes/release/tasks/miscellaneous.md @@ -57,13 +57,34 @@ merging post RC fixes from trunk and others. Every commit being shipped in the next ICU release should be labeled with a Jira ticket that is marked as fixed with the correct fix version. Further, there should be no Jira tickets marked as fixed with the current fixVersion that do -not have commits. To check this, run the following tool: +not have commits. + +### Run locally + +To check this, run the following tool: -Follow the instructions in the README file to generate the report and send it +Follow the instructions in the README file to generate the report locally and send it for review. +### Run via CI + +Alternatively, you can run the "BRS Commit Checker Report" workflow directly from the project page CI +by: + +1. Go to the [Actions tab](https://github.com/unicode-org/icu/actions) +1. Click on the "BRS Commit Checker Report" workflow name on the left hand list of workflows +1. Click the "Run workflow" dropdown. + + The dropdown should reveal an input form in which to provide inputs + +1. Provide the same inputs in the form as you would for a local run of the tool, +as described in the tool's Readme in the instructions above. + + The only difference from the local run instructions is that git branch names in the +Actions workflow input form should be prefixed with `origin/`. + --- ## Fix Mis-ticketted commits diff --git a/docs/processes/release/tasks/versions.md b/docs/processes/release/tasks/versions.md index 23f0ea940694..454c6b3ace4e 100644 --- a/docs/processes/release/tasks/versions.md +++ b/docs/processes/release/tasks/versions.md @@ -222,7 +222,7 @@ The command requires a version number string that follows the typical Java / Mav 6. cldr-to-icu build tool has a dependency on the icu4j packages which needs to be updated in [`tools/cldr/cldr-to-icu/pom.xml`](https://github.com/unicode-org/icu/blob/main/tools/cldr/cldr-to-icu/pom.xml). Please update it to match the version that was updated in `icu4j/pom.xml` in the steps above. ```xml -version>74.0.1-SNAPSHOT +74.0.1-SNAPSHOT ``` Since ICU 77 this moved to a property: diff --git a/icu4c/source/common/localefallback_data.h b/icu4c/source/common/localefallback_data.h index 389eec8bbfa5..3b8ad8a3f398 100644 --- a/icu4c/source/common/localefallback_data.h +++ b/icu4c/source/common/localefallback_data.h @@ -66,31 +66,31 @@ const char dsLocaleIDChars[] = "lbe\0lbf\0lbj\0lbm\0lbo\0lbr\0lcp\0lep\0lez\0lhm\0lhs\0lif\0lis\0" "lkh\0lki\0lmh\0lmn\0lo\0loy\0lpo\0lrc\0lrk\0lrl\0lsa\0lsd\0lss\0" "ltc\0luk\0luu\0luv\0luz\0lwl\0lwm\0lya\0lzh\0lzz_GE\0mag\0mai\0" - "man_GN\0mby\0mde\0mdf\0mdx\0mdy\0mfa\0mfi\0mga\0mgp\0mhj\0mid\0" - "mjl\0mjq\0mjr\0mjt\0mju\0mjv\0mjz\0mk\0mkb\0mke\0mki\0mkm\0ml\0" - "mlf\0mn\0mn_CN\0mnc\0mni\0mnj\0mns\0mnw\0mpz\0mr\0mra\0mrd\0mrj\0" - "mro\0mrr\0ms_CC\0mtm\0mtr\0mud\0muk\0mut\0muv\0muz\0mve\0mvf\0" - "mvy\0mvz\0mwr\0mwt\0mww\0my\0mym\0myv\0myz\0mzn\0nan\0nan_TW\0" - "nao\0ncd\0ncq\0ndf\0ne\0neg\0neh\0nei\0new\0ngt\0nio\0nit\0niv\0" - "nli\0nlm\0nlx\0nmm\0nnp\0nod\0noe\0nog\0noi\0non\0nos\0npb\0nqo\0" - "nrn\0nsd\0nsf\0nsk\0nst\0nsv\0nty\0ntz\0nwc\0nwx\0nyl\0nyq\0nyw\0" - "oaa\0oac\0oar\0oav\0obm\0obr\0odk\0oht\0oj\0ojs\0okm\0oko\0okz\0" - "ola\0ole\0omk\0omp\0omr\0omx\0oon\0or\0ort\0oru\0orv\0os\0osa\0" - "osc\0osi\0ota\0otb\0otk\0oty\0oui\0pa\0pa_PK\0pal\0paq\0pbt\0" - "pcb\0pce\0pcf\0pcg\0pch\0pci\0pcj\0peg\0peo\0pgd\0pgg\0pgl\0pgn\0" - "phd\0phk\0phl\0phn\0pho\0phr\0pht\0phu\0phv\0phw\0pi\0pka\0pkr\0" - "plk\0pll\0pmh\0pnt\0pnt_RU\0pra\0prc\0prd\0prt\0prx\0ps\0psh\0" - "psi\0pst\0psu\0pum\0pwo\0pwr\0pww\0pyx\0qxq\0raa\0rab\0raf\0rah\0" - "raj\0rav\0rbb\0rdb\0rei\0rhg\0rji\0rjs\0rka\0rki\0rkt\0rmi\0rmt\0" - "rmz\0rsk\0rtw\0ru\0rue\0rut\0rwr\0ryu\0sa\0sah\0sam\0sat\0saz\0" - "sbn\0sbu\0sck\0scl\0scp\0sct\0scu\0scx\0sd\0sd_IN\0sdb\0sdf\0" - "sdg\0sdh\0sdr\0sds\0sel\0sfm\0sgh\0sgj\0sgr\0sgt\0sgw\0sgy\0shd\0" - "shi\0shm\0shn\0shu\0shv\0si\0sia\0sip\0siy\0siz\0sjd\0sjp\0sjt\0" - "skb\0skj\0skr\0smh\0smp\0smu\0smy\0soa\0sog\0soi\0sou\0spt\0spv\0" - "sqo\0sqq\0sqt\0sr\0srb\0srh\0srx\0srz\0ssh\0sss\0sts\0stv\0sty\0" - "suz\0sva\0swb\0swi\0swv\0sxu\0syc\0syl\0syn\0syr\0syw\0ta\0tab\0" - "taj\0tbk\0tcn\0tco\0tcx\0tcy\0tda\0tdb\0tdd\0tdg\0tdh\0te\0tes\0" - "tg\0tg_PK\0tge\0tgf\0th\0the\0thf\0thi\0thl\0thm\0thq\0thr\0ths\0" + "mby\0mde\0mdf\0mdx\0mdy\0mfa\0mfi\0mga\0mgp\0mhj\0mid\0mjl\0mjq\0" + "mjr\0mjt\0mju\0mjv\0mjz\0mk\0mkb\0mke\0mki\0mkm\0ml\0mlf\0mn\0" + "mn_CN\0mnc\0mni\0mnj\0mns\0mnw\0mpz\0mr\0mra\0mrd\0mrj\0mro\0" + "mrr\0ms_CC\0mtm\0mtr\0mud\0muk\0mut\0muv\0muz\0mve\0mvf\0mvy\0" + "mvz\0mwr\0mwt\0mww\0my\0mym\0myv\0myz\0mzn\0nan\0nan_TW\0nao\0" + "ncd\0ncq\0ndf\0ne\0neg\0neh\0nei\0new\0ngt\0nio\0nit\0niv\0nli\0" + "nlm\0nlx\0nmm\0nnp\0nod\0noe\0nog\0noi\0non\0nos\0npb\0nqo\0nrn\0" + "nsd\0nsf\0nsk\0nst\0nsv\0nty\0ntz\0nwc\0nwx\0nyl\0nyq\0nyw\0oaa\0" + "oac\0oar\0oav\0obm\0obr\0odk\0oht\0oj\0ojs\0okm\0oko\0okz\0ola\0" + "ole\0omk\0omp\0omr\0omx\0oon\0or\0ort\0oru\0orv\0os\0osa\0osc\0" + "osi\0ota\0otb\0otk\0oty\0oui\0pa\0pa_PK\0pal\0paq\0pbt\0pcb\0" + "pce\0pcf\0pcg\0pch\0pci\0pcj\0peg\0peo\0pgd\0pgg\0pgl\0pgn\0phd\0" + "phk\0phl\0phn\0pho\0phr\0pht\0phu\0phv\0phw\0pi\0pka\0pkr\0plk\0" + "pll\0pmh\0pnt\0pnt_RU\0pra\0prc\0prd\0prt\0prx\0ps\0psh\0psi\0" + "pst\0psu\0pum\0pwo\0pwr\0pww\0pyx\0qxq\0raa\0rab\0raf\0rah\0raj\0" + "rav\0rbb\0rdb\0rei\0rhg\0rji\0rjs\0rka\0rki\0rkt\0rmi\0rmt\0rmz\0" + "rsk\0rtw\0ru\0rue\0rut\0rwr\0ryu\0sa\0sah\0sam\0sat\0saz\0sbn\0" + "sbu\0sck\0scl\0scp\0sct\0scu\0scx\0sd\0sd_IN\0sdb\0sdf\0sdg\0" + "sdh\0sdr\0sds\0sel\0sfm\0sgh\0sgj\0sgr\0sgt\0sgw\0sgy\0shd\0shi\0" + "shm\0shn\0shu\0shv\0si\0sia\0sip\0siy\0siz\0sjd\0sjp\0sjt\0skb\0" + "skj\0skr\0smh\0smp\0smu\0smy\0soa\0sog\0soi\0sou\0spt\0spv\0sqo\0" + "sqq\0sqt\0sr\0srb\0srh\0srx\0srz\0ssh\0sss\0sts\0stv\0sty\0suz\0" + "sva\0swb\0swi\0swv\0sxu\0syc\0syl\0syn\0syr\0syw\0ta\0tab\0taj\0" + "tbk\0tcn\0tco\0tcx\0tcy\0tda\0tdb\0tdd\0tdg\0tdh\0te\0tes\0tg\0" + "tg_PK\0tge\0tgf\0th\0the\0thf\0thi\0thl\0thm\0thq\0thr\0ths\0" "ti\0tig\0tij\0tin\0tjl\0tjo\0tkb\0tks\0tkt\0tmr\0tnv\0tov\0tpu\0" "tra\0trg\0trm\0trw\0tsd\0tsj\0tt\0tth\0tto\0tts\0ttz\0tvn\0twm\0" "txg\0txo\0tyr\0tyv\0ude\0udg\0udi\0udm\0ug\0ug_KZ\0ug_MN\0uga\0" @@ -647,514 +647,513 @@ const int32_t defaultScriptTable[] = { 2128, 130, // lzz_GE -> Geor 2135, 110, // mag -> Deva 2139, 110, // mai -> Deva - 2143, 370, // man_GN -> Nkoo - 2150, 10, // mby -> Arab - 2154, 10, // mde -> Arab - 2158, 105, // mdf -> Cyrl - 2162, 125, // mdx -> Ethi - 2166, 125, // mdy -> Ethi - 2170, 10, // mfa -> Arab - 2174, 10, // mfi -> Arab - 2178, 270, // mga -> Latg - 2182, 110, // mgp -> Deva - 2186, 10, // mhj -> Arab - 2190, 305, // mid -> Mand - 2194, 110, // mjl -> Deva - 2198, 330, // mjq -> Mlym - 2202, 330, // mjr -> Mlym - 2206, 110, // mjt -> Deva - 2210, 535, // mju -> Telu - 2214, 330, // mjv -> Mlym - 2218, 110, // mjz -> Deva - 2222, 105, // mk -> Cyrl - 2225, 110, // mkb -> Deva - 2229, 110, // mke -> Deva - 2233, 10, // mki -> Arab - 2237, 550, // mkm -> Thai - 2241, 330, // ml -> Mlym - 2244, 550, // mlf -> Thai - 2248, 105, // mn -> Cyrl - 2251, 340, // mn_CN -> Mong - 2257, 340, // mnc -> Mong - 2261, 50, // mni -> Beng - 2265, 10, // mnj -> Arab - 2269, 105, // mns -> Cyrl - 2273, 355, // mnw -> Mymr - 2277, 550, // mpz -> Thai - 2281, 110, // mr -> Deva - 2284, 550, // mra -> Thai - 2288, 110, // mrd -> Deva - 2292, 105, // mrj -> Cyrl - 2296, 345, // mro -> Mroo - 2300, 110, // mrr -> Deva - 2304, 10, // ms_CC -> Arab - 2310, 105, // mtm -> Cyrl - 2314, 110, // mtr -> Deva - 2318, 105, // mud -> Cyrl - 2322, 555, // muk -> Tibt - 2326, 110, // mut -> Deva - 2330, 520, // muv -> Taml - 2334, 125, // muz -> Ethi - 2338, 10, // mve -> Arab - 2342, 340, // mvf -> Mong - 2346, 10, // mvy -> Arab - 2350, 125, // mvz -> Ethi - 2354, 110, // mwr -> Deva - 2358, 355, // mwt -> Mymr - 2362, 200, // mww -> Hmnp - 2366, 355, // my -> Mymr - 2369, 125, // mym -> Ethi - 2373, 105, // myv -> Cyrl - 2377, 305, // myz -> Mand - 2381, 10, // mzn -> Arab - 2385, 180, // nan -> Hans - 2389, 185, // nan_TW -> Hant - 2396, 110, // nao -> Deva - 2400, 110, // ncd -> Deva - 2404, 260, // ncq -> Laoo - 2408, 105, // ndf -> Cyrl - 2412, 110, // ne -> Deva - 2415, 105, // neg -> Cyrl - 2419, 555, // neh -> Tibt - 2423, 590, // nei -> Xsux - 2427, 110, // new -> Deva - 2431, 260, // ngt -> Laoo - 2435, 105, // nio -> Cyrl - 2439, 535, // nit -> Telu - 2443, 105, // niv -> Cyrl - 2447, 10, // nli -> Arab - 2451, 10, // nlm -> Arab - 2455, 110, // nlx -> Deva - 2459, 110, // nmm -> Deva - 2463, 580, // nnp -> Wcho - 2467, 255, // nod -> Lana - 2471, 110, // noe -> Deva - 2475, 105, // nog -> Cyrl - 2479, 110, // noi -> Deva - 2483, 445, // non -> Runr - 2487, 595, // nos -> Yiii - 2491, 555, // npb -> Tibt - 2495, 370, // nqo -> Nkoo - 2499, 445, // nrn -> Runr - 2503, 595, // nsd -> Yiii - 2507, 595, // nsf -> Yiii - 2511, 70, // nsk -> Cans - 2515, 560, // nst -> Tnsa - 2519, 595, // nsv -> Yiii - 2523, 595, // nty -> Yiii - 2527, 10, // ntz -> Arab - 2531, 365, // nwc -> Newa - 2535, 110, // nwx -> Deva - 2539, 550, // nyl -> Thai - 2543, 10, // nyq -> Arab - 2547, 550, // nyw -> Thai - 2551, 105, // oaa -> Cyrl - 2555, 105, // oac -> Cyrl - 2559, 495, // oar -> Syrc - 2563, 130, // oav -> Geor - 2567, 420, // obm -> Phnx - 2571, 355, // obr -> Mymr - 2575, 10, // odk -> Arab - 2579, 590, // oht -> Xsux - 2583, 70, // oj -> Cans - 2586, 70, // ojs -> Cans - 2590, 170, // okm -> Hang - 2594, 175, // oko -> Hani - 2598, 235, // okz -> Khmr - 2602, 110, // ola -> Deva - 2606, 555, // ole -> Tibt - 2610, 105, // omk -> Cyrl - 2614, 350, // omp -> Mtei - 2618, 335, // omr -> Modi - 2622, 355, // omx -> Mymr - 2626, 110, // oon -> Deva - 2630, 395, // or -> Orya - 2633, 535, // ort -> Telu - 2637, 10, // oru -> Arab - 2641, 105, // orv -> Cyrl - 2645, 105, // os -> Cyrl - 2648, 400, // osa -> Osge - 2652, 205, // osc -> Ital - 2656, 210, // osi -> Java - 2660, 10, // ota -> Arab - 2664, 555, // otb -> Tibt - 2668, 390, // otk -> Orkh - 2672, 150, // oty -> Gran - 2676, 405, // oui -> Ougr - 2680, 165, // pa -> Guru - 2683, 10, // pa_PK -> Arab - 2689, 415, // pal -> Phli - 2693, 105, // paq -> Cyrl - 2697, 10, // pbt -> Arab - 2701, 235, // pcb -> Khmr - 2705, 355, // pce -> Mymr - 2709, 330, // pcf -> Mlym - 2713, 330, // pcg -> Mlym - 2717, 110, // pch -> Deva - 2721, 110, // pci -> Deva - 2725, 535, // pcj -> Telu - 2729, 395, // peg -> Orya - 2733, 585, // peo -> Xpeo - 2737, 230, // pgd -> Khar - 2741, 110, // pgg -> Deva - 2745, 380, // pgl -> Ogam - 2749, 205, // pgn -> Ital - 2753, 110, // phd -> Deva - 2757, 355, // phk -> Mymr - 2761, 10, // phl -> Arab - 2765, 420, // phn -> Phnx - 2769, 260, // pho -> Laoo - 2773, 10, // phr -> Arab - 2777, 550, // pht -> Thai - 2781, 550, // phu -> Thai - 2785, 10, // phv -> Arab - 2789, 110, // phw -> Deva - 2793, 470, // pi -> Sinh - 2796, 60, // pka -> Brah - 2800, 330, // pkr -> Mlym - 2804, 10, // plk -> Arab - 2808, 355, // pll -> Mymr - 2812, 60, // pmh -> Brah - 2816, 155, // pnt -> Grek - 2820, 105, // pnt_RU -> Cyrl - 2827, 230, // pra -> Khar - 2831, 10, // prc -> Arab - 2835, 10, // prd -> Arab - 2839, 550, // prt -> Thai - 2843, 10, // prx -> Arab - 2847, 10, // ps -> Arab - 2850, 10, // psh -> Arab - 2854, 10, // psi -> Arab - 2858, 10, // pst -> Arab - 2862, 60, // psu -> Brah - 2866, 110, // pum -> Deva - 2870, 355, // pwo -> Mymr - 2874, 110, // pwr -> Deva - 2878, 550, // pww -> Thai - 2882, 355, // pyx -> Mymr - 2886, 10, // qxq -> Arab - 2890, 110, // raa -> Deva - 2894, 110, // rab -> Deva - 2898, 110, // raf -> Deva - 2902, 50, // rah -> Beng - 2906, 110, // raj -> Deva - 2910, 110, // rav -> Deva - 2914, 355, // rbb -> Mymr - 2918, 10, // rdb -> Arab - 2922, 395, // rei -> Orya - 2926, 440, // rhg -> Rohg - 2930, 110, // rji -> Deva - 2934, 110, // rjs -> Deva - 2938, 235, // rka -> Khmr - 2942, 355, // rki -> Mymr - 2946, 50, // rkt -> Beng - 2950, 20, // rmi -> Armn - 2954, 10, // rmt -> Arab - 2958, 355, // rmz -> Mymr - 2962, 105, // rsk -> Cyrl - 2966, 110, // rtw -> Deva - 2970, 105, // ru -> Cyrl - 2973, 105, // rue -> Cyrl - 2977, 105, // rut -> Cyrl - 2981, 110, // rwr -> Deva - 2985, 225, // ryu -> Kana - 2989, 110, // sa -> Deva - 2992, 105, // sah -> Cyrl - 2996, 450, // sam -> Samr - 3000, 385, // sat -> Olck - 3004, 460, // saz -> Saur - 3008, 10, // sbn -> Arab - 3012, 555, // sbu -> Tibt - 3016, 110, // sck -> Deva - 3020, 10, // scl -> Arab - 3024, 110, // scp -> Deva - 3028, 260, // sct -> Laoo - 3032, 505, // scu -> Takr - 3036, 155, // scx -> Grek - 3040, 10, // sd -> Arab - 3043, 110, // sd_IN -> Deva - 3049, 10, // sdb -> Arab - 3053, 10, // sdf -> Arab - 3057, 10, // sdg -> Arab - 3061, 10, // sdh -> Arab - 3065, 50, // sdr -> Beng - 3069, 10, // sds -> Arab - 3073, 105, // sel -> Cyrl - 3077, 425, // sfm -> Plrd - 3081, 105, // sgh -> Cyrl - 3085, 110, // sgj -> Deva - 3089, 10, // sgr -> Arab - 3093, 555, // sgt -> Tibt - 3097, 125, // sgw -> Ethi - 3101, 10, // sgy -> Arab - 3105, 10, // shd -> Arab - 3109, 540, // shi -> Tfng - 3113, 10, // shm -> Arab - 3117, 355, // shn -> Mymr - 3121, 10, // shu -> Arab - 3125, 10, // shv -> Arab - 3129, 470, // si -> Sinh - 3132, 105, // sia -> Cyrl - 3136, 555, // sip -> Tibt - 3140, 10, // siy -> Arab - 3144, 10, // siz -> Arab - 3148, 105, // sjd -> Cyrl - 3152, 110, // sjp -> Deva - 3156, 105, // sjt -> Cyrl - 3160, 550, // skb -> Thai - 3164, 110, // skj -> Deva - 3168, 10, // skr -> Arab - 3172, 595, // smh -> Yiii - 3176, 450, // smp -> Samr - 3180, 235, // smu -> Khmr - 3184, 10, // smy -> Arab - 3188, 530, // soa -> Tavt - 3192, 475, // sog -> Sogd - 3196, 110, // soi -> Deva - 3200, 550, // sou -> Thai - 3204, 555, // spt -> Tibt - 3208, 395, // spv -> Orya - 3212, 10, // sqo -> Arab - 3216, 260, // sqq -> Laoo - 3220, 10, // sqt -> Arab - 3224, 105, // sr -> Cyrl - 3227, 480, // srb -> Sora - 3231, 10, // srh -> Arab - 3235, 110, // srx -> Deva - 3239, 10, // srz -> Arab - 3243, 10, // ssh -> Arab - 3247, 260, // sss -> Laoo - 3251, 10, // sts -> Arab - 3255, 125, // stv -> Ethi - 3259, 105, // sty -> Cyrl - 3263, 490, // suz -> Sunu - 3267, 130, // sva -> Geor - 3271, 10, // swb -> Arab - 3275, 175, // swi -> Hani - 3279, 110, // swv -> Deva - 3283, 445, // sxu -> Runr - 3287, 495, // syc -> Syrc - 3291, 50, // syl -> Beng - 3295, 495, // syn -> Syrc - 3299, 495, // syr -> Syrc - 3303, 110, // syw -> Deva - 3307, 520, // ta -> Taml - 3310, 105, // tab -> Cyrl - 3314, 110, // taj -> Deva - 3318, 500, // tbk -> Tagb - 3322, 555, // tcn -> Tibt - 3326, 355, // tco -> Mymr - 3330, 520, // tcx -> Taml - 3334, 245, // tcy -> Knda - 3338, 540, // tda -> Tfng - 3342, 110, // tdb -> Deva - 3346, 510, // tdd -> Tale - 3350, 110, // tdg -> Deva - 3354, 110, // tdh -> Deva - 3358, 535, // te -> Telu - 3361, 210, // tes -> Java - 3365, 105, // tg -> Cyrl - 3368, 10, // tg_PK -> Arab - 3374, 110, // tge -> Deva - 3378, 555, // tgf -> Tibt - 3382, 550, // th -> Thai - 3385, 110, // the -> Deva - 3389, 110, // thf -> Deva - 3393, 510, // thi -> Tale - 3397, 110, // thl -> Deva - 3401, 550, // thm -> Thai - 3405, 110, // thq -> Deva - 3409, 110, // thr -> Deva - 3413, 110, // ths -> Deva - 3417, 125, // ti -> Ethi - 3420, 125, // tig -> Ethi - 3424, 110, // tij -> Deva - 3428, 105, // tin -> Cyrl - 3432, 355, // tjl -> Mymr - 3436, 10, // tjo -> Arab - 3440, 110, // tkb -> Deva - 3444, 10, // tks -> Arab - 3448, 110, // tkt -> Deva - 3452, 495, // tmr -> Syrc - 3456, 65, // tnv -> Cakm - 3460, 10, // tov -> Arab - 3464, 235, // tpu -> Khmr - 3468, 10, // tra -> Arab - 3472, 190, // trg -> Hebr - 3476, 10, // trm -> Arab - 3480, 10, // trw -> Arab - 3484, 155, // tsd -> Grek - 3488, 555, // tsj -> Tibt - 3492, 105, // tt -> Cyrl - 3495, 260, // tth -> Laoo - 3499, 260, // tto -> Laoo - 3503, 550, // tts -> Thai - 3507, 110, // ttz -> Deva - 3511, 355, // tvn -> Mymr - 3515, 110, // twm -> Deva - 3519, 525, // txg -> Tang - 3523, 565, // txo -> Toto - 3527, 530, // tyr -> Tavt - 3531, 105, // tyv -> Cyrl - 3535, 105, // ude -> Cyrl - 3539, 330, // udg -> Mlym - 3543, 105, // udi -> Cyrl - 3547, 105, // udm -> Cyrl - 3551, 10, // ug -> Arab - 3554, 105, // ug_KZ -> Cyrl - 3560, 105, // ug_MN -> Cyrl - 3566, 570, // uga -> Ugar - 3570, 105, // ugh -> Cyrl - 3574, 550, // ugo -> Thai - 3578, 105, // uk -> Cyrl - 3581, 395, // uki -> Orya - 3585, 105, // ulc -> Cyrl - 3589, 50, // unr -> Beng - 3593, 110, // unr_NP -> Deva - 3600, 50, // unx -> Beng - 3604, 10, // ur -> Arab - 3607, 550, // urk -> Thai - 3611, 10, // ush -> Arab - 3615, 155, // uum -> Grek - 3619, 10, // uz_AF -> Arab - 3625, 105, // uz_CN -> Cyrl - 3631, 10, // uzs -> Arab - 3635, 520, // vaa -> Taml - 3639, 10, // vaf -> Arab - 3643, 110, // vah -> Deva - 3647, 575, // vai -> Vaii - 3651, 110, // vas -> Deva - 3655, 110, // vav -> Deva - 3659, 110, // vay -> Deva - 3663, 10, // vgr -> Arab - 3667, 110, // vjk -> Deva - 3671, 245, // vmd -> Knda - 3675, 10, // vmh -> Arab - 3679, 125, // wal -> Ethi - 3683, 10, // wbk -> Arab - 3687, 535, // wbq -> Telu - 3691, 110, // wbr -> Deva - 3695, 125, // wle -> Ethi - 3699, 10, // wlo -> Arab - 3703, 110, // wme -> Deva - 3707, 10, // wne -> Arab - 3711, 10, // wni -> Arab - 3715, 135, // wsg -> Gong - 3719, 10, // wsv -> Arab - 3723, 110, // wtm -> Deva - 3727, 180, // wuu -> Hans - 3731, 0, // xag -> Aghb - 3735, 105, // xal -> Cyrl - 3739, 125, // xan -> Ethi - 3743, 105, // xas -> Cyrl - 3747, 90, // xco -> Chrs - 3751, 75, // xcr -> Cari - 3755, 105, // xdq -> Cyrl - 3759, 10, // xhe -> Arab - 3763, 235, // xhm -> Khmr - 3767, 395, // xis -> Orya - 3771, 10, // xka -> Arab - 3775, 10, // xkc -> Arab - 3779, 555, // xkf -> Tibt - 3783, 10, // xkj -> Arab - 3787, 10, // xkp -> Arab - 3791, 295, // xlc -> Lyci - 3795, 300, // xld -> Lydi - 3799, 120, // xly -> Elym - 3803, 130, // xmf -> Geor - 3807, 310, // xmn -> Mani - 3811, 325, // xmr -> Merc - 3815, 360, // xna -> Narb - 3819, 110, // xnr -> Deva - 3823, 155, // xpg -> Grek - 3827, 380, // xpi -> Ogam - 3831, 105, // xpm -> Cyrl - 3835, 430, // xpr -> Prti - 3839, 105, // xrm -> Cyrl - 3843, 105, // xrn -> Cyrl - 3847, 455, // xsa -> Sarb - 3851, 110, // xsr -> Deva - 3855, 60, // xtq -> Brah - 3859, 520, // xub -> Taml - 3863, 520, // xuj -> Taml - 3867, 205, // xve -> Ital - 3871, 10, // xvi -> Arab - 3875, 105, // xwo -> Cyrl - 3879, 315, // xzh -> Marc - 3883, 105, // yai -> Cyrl - 3887, 110, // ybh -> Deva - 3891, 110, // ybi -> Deva - 3895, 10, // ydg -> Arab - 3899, 330, // yea -> Mlym - 3903, 155, // yej -> Grek - 3907, 535, // yeu -> Telu - 3911, 425, // ygp -> Plrd - 3915, 190, // yhd -> Hebr - 3919, 190, // yi -> Hebr - 3922, 595, // yig -> Yiii - 3926, 190, // yih -> Hebr - 3930, 595, // yiv -> Yiii - 3934, 105, // ykg -> Cyrl - 3938, 105, // ykh -> Cyrl - 3942, 425, // yna -> Plrd - 3946, 105, // ynk -> Cyrl - 3950, 215, // yoi -> Jpan - 3954, 550, // yoy -> Thai - 3958, 105, // yrk -> Cyrl - 3962, 595, // ysd -> Yiii - 3966, 595, // ysn -> Yiii - 3970, 595, // ysp -> Yiii - 3974, 105, // ysr -> Cyrl - 3978, 425, // ysy -> Plrd - 3982, 190, // yud -> Hebr - 3986, 185, // yue -> Hant - 3990, 180, // yue_CN -> Hans - 3997, 105, // yug -> Cyrl - 4001, 105, // yux -> Cyrl - 4005, 425, // ywq -> Plrd - 4009, 425, // ywu -> Plrd - 4013, 555, // zau -> Tibt - 4017, 10, // zba -> Arab - 4021, 175, // zch -> Hani - 4025, 10, // zdj -> Arab - 4029, 175, // zeh -> Hani - 4033, 540, // zen -> Tfng - 4037, 175, // zgb -> Hani - 4041, 540, // zgh -> Tfng - 4045, 175, // zgm -> Hani - 4049, 175, // zgn -> Hani - 4053, 180, // zh -> Hans - 4056, 185, // zh_AU -> Hant - 4062, 185, // zh_BN -> Hant - 4068, 185, // zh_GB -> Hant - 4074, 185, // zh_GF -> Hant - 4080, 185, // zh_HK -> Hant - 4086, 185, // zh_ID -> Hant - 4092, 185, // zh_MO -> Hant - 4098, 185, // zh_PA -> Hant - 4104, 185, // zh_PF -> Hant - 4110, 185, // zh_PH -> Hant - 4116, 185, // zh_SR -> Hant - 4122, 185, // zh_TH -> Hant - 4128, 185, // zh_TW -> Hant - 4134, 185, // zh_US -> Hant - 4140, 185, // zh_VN -> Hant - 4146, 175, // zhd -> Hani - 4150, 375, // zhx -> Nshu - 4154, 105, // zko -> Cyrl - 4158, 240, // zkt -> Kits - 4162, 105, // zkz -> Cyrl - 4166, 175, // zlj -> Hani - 4170, 175, // zln -> Hani - 4174, 175, // zlq -> Hani - 4178, 175, // zqe -> Hani - 4182, 395, // zrg -> Orya - 4186, 190, // zrp -> Hebr - 4190, 10, // zum -> Arab - 4194, 125, // zwa -> Ethi - 4198, 175, // zyg -> Hani - 4202, 175, // zyn -> Hani - 4206, 175, // zzj -> Hani + 2143, 10, // mby -> Arab + 2147, 10, // mde -> Arab + 2151, 105, // mdf -> Cyrl + 2155, 125, // mdx -> Ethi + 2159, 125, // mdy -> Ethi + 2163, 10, // mfa -> Arab + 2167, 10, // mfi -> Arab + 2171, 270, // mga -> Latg + 2175, 110, // mgp -> Deva + 2179, 10, // mhj -> Arab + 2183, 305, // mid -> Mand + 2187, 110, // mjl -> Deva + 2191, 330, // mjq -> Mlym + 2195, 330, // mjr -> Mlym + 2199, 110, // mjt -> Deva + 2203, 535, // mju -> Telu + 2207, 330, // mjv -> Mlym + 2211, 110, // mjz -> Deva + 2215, 105, // mk -> Cyrl + 2218, 110, // mkb -> Deva + 2222, 110, // mke -> Deva + 2226, 10, // mki -> Arab + 2230, 550, // mkm -> Thai + 2234, 330, // ml -> Mlym + 2237, 550, // mlf -> Thai + 2241, 105, // mn -> Cyrl + 2244, 340, // mn_CN -> Mong + 2250, 340, // mnc -> Mong + 2254, 50, // mni -> Beng + 2258, 10, // mnj -> Arab + 2262, 105, // mns -> Cyrl + 2266, 355, // mnw -> Mymr + 2270, 550, // mpz -> Thai + 2274, 110, // mr -> Deva + 2277, 550, // mra -> Thai + 2281, 110, // mrd -> Deva + 2285, 105, // mrj -> Cyrl + 2289, 345, // mro -> Mroo + 2293, 110, // mrr -> Deva + 2297, 10, // ms_CC -> Arab + 2303, 105, // mtm -> Cyrl + 2307, 110, // mtr -> Deva + 2311, 105, // mud -> Cyrl + 2315, 555, // muk -> Tibt + 2319, 110, // mut -> Deva + 2323, 520, // muv -> Taml + 2327, 125, // muz -> Ethi + 2331, 10, // mve -> Arab + 2335, 340, // mvf -> Mong + 2339, 10, // mvy -> Arab + 2343, 125, // mvz -> Ethi + 2347, 110, // mwr -> Deva + 2351, 355, // mwt -> Mymr + 2355, 200, // mww -> Hmnp + 2359, 355, // my -> Mymr + 2362, 125, // mym -> Ethi + 2366, 105, // myv -> Cyrl + 2370, 305, // myz -> Mand + 2374, 10, // mzn -> Arab + 2378, 180, // nan -> Hans + 2382, 185, // nan_TW -> Hant + 2389, 110, // nao -> Deva + 2393, 110, // ncd -> Deva + 2397, 260, // ncq -> Laoo + 2401, 105, // ndf -> Cyrl + 2405, 110, // ne -> Deva + 2408, 105, // neg -> Cyrl + 2412, 555, // neh -> Tibt + 2416, 590, // nei -> Xsux + 2420, 110, // new -> Deva + 2424, 260, // ngt -> Laoo + 2428, 105, // nio -> Cyrl + 2432, 535, // nit -> Telu + 2436, 105, // niv -> Cyrl + 2440, 10, // nli -> Arab + 2444, 10, // nlm -> Arab + 2448, 110, // nlx -> Deva + 2452, 110, // nmm -> Deva + 2456, 580, // nnp -> Wcho + 2460, 255, // nod -> Lana + 2464, 110, // noe -> Deva + 2468, 105, // nog -> Cyrl + 2472, 110, // noi -> Deva + 2476, 445, // non -> Runr + 2480, 595, // nos -> Yiii + 2484, 555, // npb -> Tibt + 2488, 370, // nqo -> Nkoo + 2492, 445, // nrn -> Runr + 2496, 595, // nsd -> Yiii + 2500, 595, // nsf -> Yiii + 2504, 70, // nsk -> Cans + 2508, 560, // nst -> Tnsa + 2512, 595, // nsv -> Yiii + 2516, 595, // nty -> Yiii + 2520, 10, // ntz -> Arab + 2524, 365, // nwc -> Newa + 2528, 110, // nwx -> Deva + 2532, 550, // nyl -> Thai + 2536, 10, // nyq -> Arab + 2540, 550, // nyw -> Thai + 2544, 105, // oaa -> Cyrl + 2548, 105, // oac -> Cyrl + 2552, 495, // oar -> Syrc + 2556, 130, // oav -> Geor + 2560, 420, // obm -> Phnx + 2564, 355, // obr -> Mymr + 2568, 10, // odk -> Arab + 2572, 590, // oht -> Xsux + 2576, 70, // oj -> Cans + 2579, 70, // ojs -> Cans + 2583, 170, // okm -> Hang + 2587, 175, // oko -> Hani + 2591, 235, // okz -> Khmr + 2595, 110, // ola -> Deva + 2599, 555, // ole -> Tibt + 2603, 105, // omk -> Cyrl + 2607, 350, // omp -> Mtei + 2611, 335, // omr -> Modi + 2615, 355, // omx -> Mymr + 2619, 110, // oon -> Deva + 2623, 395, // or -> Orya + 2626, 535, // ort -> Telu + 2630, 10, // oru -> Arab + 2634, 105, // orv -> Cyrl + 2638, 105, // os -> Cyrl + 2641, 400, // osa -> Osge + 2645, 205, // osc -> Ital + 2649, 210, // osi -> Java + 2653, 10, // ota -> Arab + 2657, 555, // otb -> Tibt + 2661, 390, // otk -> Orkh + 2665, 150, // oty -> Gran + 2669, 405, // oui -> Ougr + 2673, 165, // pa -> Guru + 2676, 10, // pa_PK -> Arab + 2682, 415, // pal -> Phli + 2686, 105, // paq -> Cyrl + 2690, 10, // pbt -> Arab + 2694, 235, // pcb -> Khmr + 2698, 355, // pce -> Mymr + 2702, 330, // pcf -> Mlym + 2706, 330, // pcg -> Mlym + 2710, 110, // pch -> Deva + 2714, 110, // pci -> Deva + 2718, 535, // pcj -> Telu + 2722, 395, // peg -> Orya + 2726, 585, // peo -> Xpeo + 2730, 230, // pgd -> Khar + 2734, 110, // pgg -> Deva + 2738, 380, // pgl -> Ogam + 2742, 205, // pgn -> Ital + 2746, 110, // phd -> Deva + 2750, 355, // phk -> Mymr + 2754, 10, // phl -> Arab + 2758, 420, // phn -> Phnx + 2762, 260, // pho -> Laoo + 2766, 10, // phr -> Arab + 2770, 550, // pht -> Thai + 2774, 550, // phu -> Thai + 2778, 10, // phv -> Arab + 2782, 110, // phw -> Deva + 2786, 470, // pi -> Sinh + 2789, 60, // pka -> Brah + 2793, 330, // pkr -> Mlym + 2797, 10, // plk -> Arab + 2801, 355, // pll -> Mymr + 2805, 60, // pmh -> Brah + 2809, 155, // pnt -> Grek + 2813, 105, // pnt_RU -> Cyrl + 2820, 230, // pra -> Khar + 2824, 10, // prc -> Arab + 2828, 10, // prd -> Arab + 2832, 550, // prt -> Thai + 2836, 10, // prx -> Arab + 2840, 10, // ps -> Arab + 2843, 10, // psh -> Arab + 2847, 10, // psi -> Arab + 2851, 10, // pst -> Arab + 2855, 60, // psu -> Brah + 2859, 110, // pum -> Deva + 2863, 355, // pwo -> Mymr + 2867, 110, // pwr -> Deva + 2871, 550, // pww -> Thai + 2875, 355, // pyx -> Mymr + 2879, 10, // qxq -> Arab + 2883, 110, // raa -> Deva + 2887, 110, // rab -> Deva + 2891, 110, // raf -> Deva + 2895, 50, // rah -> Beng + 2899, 110, // raj -> Deva + 2903, 110, // rav -> Deva + 2907, 355, // rbb -> Mymr + 2911, 10, // rdb -> Arab + 2915, 395, // rei -> Orya + 2919, 440, // rhg -> Rohg + 2923, 110, // rji -> Deva + 2927, 110, // rjs -> Deva + 2931, 235, // rka -> Khmr + 2935, 355, // rki -> Mymr + 2939, 50, // rkt -> Beng + 2943, 20, // rmi -> Armn + 2947, 10, // rmt -> Arab + 2951, 355, // rmz -> Mymr + 2955, 105, // rsk -> Cyrl + 2959, 110, // rtw -> Deva + 2963, 105, // ru -> Cyrl + 2966, 105, // rue -> Cyrl + 2970, 105, // rut -> Cyrl + 2974, 110, // rwr -> Deva + 2978, 225, // ryu -> Kana + 2982, 110, // sa -> Deva + 2985, 105, // sah -> Cyrl + 2989, 450, // sam -> Samr + 2993, 385, // sat -> Olck + 2997, 460, // saz -> Saur + 3001, 10, // sbn -> Arab + 3005, 555, // sbu -> Tibt + 3009, 110, // sck -> Deva + 3013, 10, // scl -> Arab + 3017, 110, // scp -> Deva + 3021, 260, // sct -> Laoo + 3025, 505, // scu -> Takr + 3029, 155, // scx -> Grek + 3033, 10, // sd -> Arab + 3036, 110, // sd_IN -> Deva + 3042, 10, // sdb -> Arab + 3046, 10, // sdf -> Arab + 3050, 10, // sdg -> Arab + 3054, 10, // sdh -> Arab + 3058, 50, // sdr -> Beng + 3062, 10, // sds -> Arab + 3066, 105, // sel -> Cyrl + 3070, 425, // sfm -> Plrd + 3074, 105, // sgh -> Cyrl + 3078, 110, // sgj -> Deva + 3082, 10, // sgr -> Arab + 3086, 555, // sgt -> Tibt + 3090, 125, // sgw -> Ethi + 3094, 10, // sgy -> Arab + 3098, 10, // shd -> Arab + 3102, 540, // shi -> Tfng + 3106, 10, // shm -> Arab + 3110, 355, // shn -> Mymr + 3114, 10, // shu -> Arab + 3118, 10, // shv -> Arab + 3122, 470, // si -> Sinh + 3125, 105, // sia -> Cyrl + 3129, 555, // sip -> Tibt + 3133, 10, // siy -> Arab + 3137, 10, // siz -> Arab + 3141, 105, // sjd -> Cyrl + 3145, 110, // sjp -> Deva + 3149, 105, // sjt -> Cyrl + 3153, 550, // skb -> Thai + 3157, 110, // skj -> Deva + 3161, 10, // skr -> Arab + 3165, 595, // smh -> Yiii + 3169, 450, // smp -> Samr + 3173, 235, // smu -> Khmr + 3177, 10, // smy -> Arab + 3181, 530, // soa -> Tavt + 3185, 475, // sog -> Sogd + 3189, 110, // soi -> Deva + 3193, 550, // sou -> Thai + 3197, 555, // spt -> Tibt + 3201, 395, // spv -> Orya + 3205, 10, // sqo -> Arab + 3209, 260, // sqq -> Laoo + 3213, 10, // sqt -> Arab + 3217, 105, // sr -> Cyrl + 3220, 480, // srb -> Sora + 3224, 10, // srh -> Arab + 3228, 110, // srx -> Deva + 3232, 10, // srz -> Arab + 3236, 10, // ssh -> Arab + 3240, 260, // sss -> Laoo + 3244, 10, // sts -> Arab + 3248, 125, // stv -> Ethi + 3252, 105, // sty -> Cyrl + 3256, 490, // suz -> Sunu + 3260, 130, // sva -> Geor + 3264, 10, // swb -> Arab + 3268, 175, // swi -> Hani + 3272, 110, // swv -> Deva + 3276, 445, // sxu -> Runr + 3280, 495, // syc -> Syrc + 3284, 50, // syl -> Beng + 3288, 495, // syn -> Syrc + 3292, 495, // syr -> Syrc + 3296, 110, // syw -> Deva + 3300, 520, // ta -> Taml + 3303, 105, // tab -> Cyrl + 3307, 110, // taj -> Deva + 3311, 500, // tbk -> Tagb + 3315, 555, // tcn -> Tibt + 3319, 355, // tco -> Mymr + 3323, 520, // tcx -> Taml + 3327, 245, // tcy -> Knda + 3331, 540, // tda -> Tfng + 3335, 110, // tdb -> Deva + 3339, 510, // tdd -> Tale + 3343, 110, // tdg -> Deva + 3347, 110, // tdh -> Deva + 3351, 535, // te -> Telu + 3354, 210, // tes -> Java + 3358, 105, // tg -> Cyrl + 3361, 10, // tg_PK -> Arab + 3367, 110, // tge -> Deva + 3371, 555, // tgf -> Tibt + 3375, 550, // th -> Thai + 3378, 110, // the -> Deva + 3382, 110, // thf -> Deva + 3386, 510, // thi -> Tale + 3390, 110, // thl -> Deva + 3394, 550, // thm -> Thai + 3398, 110, // thq -> Deva + 3402, 110, // thr -> Deva + 3406, 110, // ths -> Deva + 3410, 125, // ti -> Ethi + 3413, 125, // tig -> Ethi + 3417, 110, // tij -> Deva + 3421, 105, // tin -> Cyrl + 3425, 355, // tjl -> Mymr + 3429, 10, // tjo -> Arab + 3433, 110, // tkb -> Deva + 3437, 10, // tks -> Arab + 3441, 110, // tkt -> Deva + 3445, 495, // tmr -> Syrc + 3449, 65, // tnv -> Cakm + 3453, 10, // tov -> Arab + 3457, 235, // tpu -> Khmr + 3461, 10, // tra -> Arab + 3465, 190, // trg -> Hebr + 3469, 10, // trm -> Arab + 3473, 10, // trw -> Arab + 3477, 155, // tsd -> Grek + 3481, 555, // tsj -> Tibt + 3485, 105, // tt -> Cyrl + 3488, 260, // tth -> Laoo + 3492, 260, // tto -> Laoo + 3496, 550, // tts -> Thai + 3500, 110, // ttz -> Deva + 3504, 355, // tvn -> Mymr + 3508, 110, // twm -> Deva + 3512, 525, // txg -> Tang + 3516, 565, // txo -> Toto + 3520, 530, // tyr -> Tavt + 3524, 105, // tyv -> Cyrl + 3528, 105, // ude -> Cyrl + 3532, 330, // udg -> Mlym + 3536, 105, // udi -> Cyrl + 3540, 105, // udm -> Cyrl + 3544, 10, // ug -> Arab + 3547, 105, // ug_KZ -> Cyrl + 3553, 105, // ug_MN -> Cyrl + 3559, 570, // uga -> Ugar + 3563, 105, // ugh -> Cyrl + 3567, 550, // ugo -> Thai + 3571, 105, // uk -> Cyrl + 3574, 395, // uki -> Orya + 3578, 105, // ulc -> Cyrl + 3582, 50, // unr -> Beng + 3586, 110, // unr_NP -> Deva + 3593, 50, // unx -> Beng + 3597, 10, // ur -> Arab + 3600, 550, // urk -> Thai + 3604, 10, // ush -> Arab + 3608, 155, // uum -> Grek + 3612, 10, // uz_AF -> Arab + 3618, 105, // uz_CN -> Cyrl + 3624, 10, // uzs -> Arab + 3628, 520, // vaa -> Taml + 3632, 10, // vaf -> Arab + 3636, 110, // vah -> Deva + 3640, 575, // vai -> Vaii + 3644, 110, // vas -> Deva + 3648, 110, // vav -> Deva + 3652, 110, // vay -> Deva + 3656, 10, // vgr -> Arab + 3660, 110, // vjk -> Deva + 3664, 245, // vmd -> Knda + 3668, 10, // vmh -> Arab + 3672, 125, // wal -> Ethi + 3676, 10, // wbk -> Arab + 3680, 535, // wbq -> Telu + 3684, 110, // wbr -> Deva + 3688, 125, // wle -> Ethi + 3692, 10, // wlo -> Arab + 3696, 110, // wme -> Deva + 3700, 10, // wne -> Arab + 3704, 10, // wni -> Arab + 3708, 135, // wsg -> Gong + 3712, 10, // wsv -> Arab + 3716, 110, // wtm -> Deva + 3720, 180, // wuu -> Hans + 3724, 0, // xag -> Aghb + 3728, 105, // xal -> Cyrl + 3732, 125, // xan -> Ethi + 3736, 105, // xas -> Cyrl + 3740, 90, // xco -> Chrs + 3744, 75, // xcr -> Cari + 3748, 105, // xdq -> Cyrl + 3752, 10, // xhe -> Arab + 3756, 235, // xhm -> Khmr + 3760, 395, // xis -> Orya + 3764, 10, // xka -> Arab + 3768, 10, // xkc -> Arab + 3772, 555, // xkf -> Tibt + 3776, 10, // xkj -> Arab + 3780, 10, // xkp -> Arab + 3784, 295, // xlc -> Lyci + 3788, 300, // xld -> Lydi + 3792, 120, // xly -> Elym + 3796, 130, // xmf -> Geor + 3800, 310, // xmn -> Mani + 3804, 325, // xmr -> Merc + 3808, 360, // xna -> Narb + 3812, 110, // xnr -> Deva + 3816, 155, // xpg -> Grek + 3820, 380, // xpi -> Ogam + 3824, 105, // xpm -> Cyrl + 3828, 430, // xpr -> Prti + 3832, 105, // xrm -> Cyrl + 3836, 105, // xrn -> Cyrl + 3840, 455, // xsa -> Sarb + 3844, 110, // xsr -> Deva + 3848, 60, // xtq -> Brah + 3852, 520, // xub -> Taml + 3856, 520, // xuj -> Taml + 3860, 205, // xve -> Ital + 3864, 10, // xvi -> Arab + 3868, 105, // xwo -> Cyrl + 3872, 315, // xzh -> Marc + 3876, 105, // yai -> Cyrl + 3880, 110, // ybh -> Deva + 3884, 110, // ybi -> Deva + 3888, 10, // ydg -> Arab + 3892, 330, // yea -> Mlym + 3896, 155, // yej -> Grek + 3900, 535, // yeu -> Telu + 3904, 425, // ygp -> Plrd + 3908, 190, // yhd -> Hebr + 3912, 190, // yi -> Hebr + 3915, 595, // yig -> Yiii + 3919, 190, // yih -> Hebr + 3923, 595, // yiv -> Yiii + 3927, 105, // ykg -> Cyrl + 3931, 105, // ykh -> Cyrl + 3935, 425, // yna -> Plrd + 3939, 105, // ynk -> Cyrl + 3943, 215, // yoi -> Jpan + 3947, 550, // yoy -> Thai + 3951, 105, // yrk -> Cyrl + 3955, 595, // ysd -> Yiii + 3959, 595, // ysn -> Yiii + 3963, 595, // ysp -> Yiii + 3967, 105, // ysr -> Cyrl + 3971, 425, // ysy -> Plrd + 3975, 190, // yud -> Hebr + 3979, 185, // yue -> Hant + 3983, 180, // yue_CN -> Hans + 3990, 105, // yug -> Cyrl + 3994, 105, // yux -> Cyrl + 3998, 425, // ywq -> Plrd + 4002, 425, // ywu -> Plrd + 4006, 555, // zau -> Tibt + 4010, 10, // zba -> Arab + 4014, 175, // zch -> Hani + 4018, 10, // zdj -> Arab + 4022, 175, // zeh -> Hani + 4026, 540, // zen -> Tfng + 4030, 175, // zgb -> Hani + 4034, 540, // zgh -> Tfng + 4038, 175, // zgm -> Hani + 4042, 175, // zgn -> Hani + 4046, 180, // zh -> Hans + 4049, 185, // zh_AU -> Hant + 4055, 185, // zh_BN -> Hant + 4061, 185, // zh_GB -> Hant + 4067, 185, // zh_GF -> Hant + 4073, 185, // zh_HK -> Hant + 4079, 185, // zh_ID -> Hant + 4085, 185, // zh_MO -> Hant + 4091, 185, // zh_PA -> Hant + 4097, 185, // zh_PF -> Hant + 4103, 185, // zh_PH -> Hant + 4109, 185, // zh_SR -> Hant + 4115, 185, // zh_TH -> Hant + 4121, 185, // zh_TW -> Hant + 4127, 185, // zh_US -> Hant + 4133, 185, // zh_VN -> Hant + 4139, 175, // zhd -> Hani + 4143, 375, // zhx -> Nshu + 4147, 105, // zko -> Cyrl + 4151, 240, // zkt -> Kits + 4155, 105, // zkz -> Cyrl + 4159, 175, // zlj -> Hani + 4163, 175, // zln -> Hani + 4167, 175, // zlq -> Hani + 4171, 175, // zqe -> Hani + 4175, 395, // zrg -> Orya + 4179, 190, // zrp -> Hebr + 4183, 10, // zum -> Arab + 4187, 125, // zwa -> Ethi + 4191, 175, // zyg -> Hani + 4195, 175, // zyn -> Hani + 4199, 175, // zzj -> Hani }; //====================================================================== diff --git a/icu4c/source/common/umapfile.cpp b/icu4c/source/common/umapfile.cpp index ab8829d8c38a..3ba0251df9c5 100644 --- a/icu4c/source/common/umapfile.cpp +++ b/icu4c/source/common/umapfile.cpp @@ -238,7 +238,12 @@ typedef HANDLE MemoryMap; pData->pHeader=(const DataHeader *)data; pData->mapAddr = data; #if U_PLATFORM == U_PF_IPHONE || U_PLATFORM == U_PF_ANDROID + // Apparently supported from Android 23 and higher: + // https://github.com/ggml-org/llama.cpp/pull/3631 + // Checking for the flag itself is safer than checking for __ANDROID_API__. +# ifdef POSIX_MADV_RANDOM posix_madvise(data, length, POSIX_MADV_RANDOM); +# endif #endif return true; } diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp index a720245772e6..4e29bad1d3b9 100644 --- a/icu4c/source/common/unistr.cpp +++ b/icu4c/source/common/unistr.cpp @@ -1945,6 +1945,13 @@ UnicodeString::cloneArrayIfNeeded(int32_t newCapacity, growCapacity = newCapacity; } else if(newCapacity <= US_STACKBUF_SIZE && growCapacity > US_STACKBUF_SIZE) { growCapacity = US_STACKBUF_SIZE; + } else if(newCapacity > growCapacity) { + setToBogus(); + return false; // bad inputs + } + if(growCapacity > kMaxCapacity) { + setToBogus(); + return false; } // save old values diff --git a/icu4c/source/data/misc/dayPeriods.txt b/icu4c/source/data/misc/dayPeriods.txt index 0ec696f4ca2b..15b5091c0e5f 100644 --- a/icu4c/source/data/misc/dayPeriods.txt +++ b/icu4c/source/data/misc/dayPeriods.txt @@ -1822,10 +1822,10 @@ dayPeriods:table(nofallback){ } morning1{ before{"12:00"} - from{"06:00"} + from{"00:00"} } night1{ - before{"06:00"} + before{"24:00"} from{"21:00"} } noon{ @@ -3647,10 +3647,10 @@ dayPeriods:table(nofallback){ } morning1{ before{"12:00"} - from{"06:00"} + from{"00:00"} } night1{ - before{"06:00"} + before{"24:00"} from{"21:00"} } } diff --git a/icu4c/source/data/misc/langInfo.txt b/icu4c/source/data/misc/langInfo.txt index c9f69672ed1c..87f66a4fe4f3 100644 --- a/icu4c/source/data/misc/langInfo.txt +++ b/icu4c/source/data/misc/langInfo.txt @@ -5627,7 +5627,6 @@ langInfo:table(nofallback){ 430236467, 427305158, 144669906, - 430945460, 422343989, 427756814, 429390503, @@ -6788,6 +6787,7 @@ langInfo:table(nofallback){ 431378364, 428209401, 425591562, + 429882578, 429902139, 433090980, 421950316, @@ -7786,15 +7786,15 @@ langInfo:table(nofallback){ "ZR","CD", } trie:bin{ -001a6df03adb74d96a77ce9c77a88b78 +001a6df03ab874d96a77ce9c77a88b78 aec579b81d7a00186fc19d75957a647a -32e1d574e838f5d91d3801e1adf9ead9 -1d42022a3e42d85c2d4811616e01e2ab -aff4abaa0b4d26540f54d85bd9552a56 -10ceabad10d3abac4dd87175502a5310 +32e1d573e838f5d91d3801e1adf9ead9 +1d42022a3e42d85c024811616e01e2ab +aff4abaa0b4d26540f54d85bae552a56 +10ceabad10d3abac4dd8714d502a5310 d2aba802c1aba7c6aba5c8aba647f05b -e7473248d871564910c4aba301c2abab -c6aba1754e776c7904e2d574e7d91d3e +bc473248d8712e4910c4aba301c2abab +c6aba1754e776c7904e2d573e7d91d3e ead91d3feed91d40f0d91d4103e8d91d 39edd91d3aeed91d3bf9d91d3c10e1d9 1d3d7263729673a24d740bf11af50cf5 @@ -7802,7 +7802,7 @@ d91d35f8d91d36f9d91d37f1d91d32f3 d91d33f4d91d34ed0cedd91d2feed91d 30f0d91d31e5d91d2ce7d91d2decd91d 2e04e7d91d24eed91d25efd91d26f0d9 -1d27f3d91d2803e1d91d29edd831d4f2 +1d27f3d91d2803e1d91d29edd831b1f2 d91d2af5d91d2b6f30706a7110e5d91d 2306ef10efd91d05f1d91d06f2d91d07 f3d91d08e3d91d03e8d91d04edd91c6c @@ -7825,10 +7825,10 @@ e71eea10ead91cedebd91ceeecd91cef edd91cf0e7d91ceae8d91cebe9d91cec e40ce4d91ce7e5d91ce8e6d91ce9e1d9 1ce4e2d91ce5e3d91ce66866698a6b07 -f00ff0d91cdbf4d568f5d91cdcfad91c +f00ff0d91cdbf4d567f5d91cdcfad91c dde1d91cdae2b947e4b7c8efd91bb904 e4d91ccfe9d91cd0eed91cd1f7d91cd2 -f8d5a407ee0feed91cd7f2cd14f7d91c +f8d5a407ee0feed91cd7f2cd13f7d91c d8fad91cd9e1d91cd3ebd91cd4ecd91c d5edd91cd66439645a65606705ed0ced d91ccceed91ccdf2d91ccee1d91ccae2 @@ -7844,7 +7844,7 @@ ace9d91cade40ce4d91ca8e5d91ca9e6 d91caae1d91ca5e2d91ca6e3d91ca705 f40cf4d91cbff5d91cc0f7d91cc1e1d9 1cbce3d91cbde5d91cbe00186dc19174 -96782a78307936e1d74cefd51b10f7d9 +96782a78307936e1d74cefd51a10f7d9 1b1205ee0ceed91b16f2d91b17f9d91b 18e2d91b13e9d91b14edd91b15745075 7e7704e1d91b0de2d91b0eefd91b0ff2 @@ -7855,7 +7855,7 @@ edd7fff7d91b00e2d7fae6d7fbe8d7fc d91b04edd91b05eed91b06e1d91b01e2 d91b02e4d91b03705b705c72607307f2 0cf2d7f6f3d7f7f5d7f8f6d7f9e1d7f3 -e7d558e9d7f4ebd7f510e3d7e30ff01a +e7d557e9d7f4ebd7f510e3d7e30ff01a f60cf6d7eff7d7f0f8d7f1fad7f2f0d7 ebf2d7ecf3d7edf5d7eeeb0cebd7e8ec d7e9edd7eaefd5c5e2d7e4e7d7e5e8d7 @@ -7883,7 +7883,7 @@ ef0cefd78ff5d790f7d78cf9d791e1d7 93ebd794f5d7956452642e655a6610e7 d78a06eb0cebd77af4d77bf5d77cf9d7 7de4d777e7d778ead7790def17f30cf3 -d786f4d787f5d788f7d789efd184f0d7 +d786f4d787f5d788f7d789efd183f0d7 84f2d785e80ce8d781e9d782ecad7ded d783e3d77ee4d77fe7d780613662a260 6301e1d775e9d7760017ee2af514f809 @@ -7919,7 +7919,7 @@ e5d91ba8e7d91ba9e9d91baae1d91ba5 e2d91ba6e4d91ba70eed22f210f2d91b b8f3d91bb9f5d91bbaf9d91bbbedd91b b4eed91bb5f0d91bb6f1d91bb7e80ee8 -d91bb2e9d91bb3eacf5becadc7e1d5ac +d91bb2e9d91bb3eacf5aecadc7e1d5ac e2d91bb0e5d91bb16ea2606fa2957000 14ec2ff219f70cf7d91ba2f8d91ba3fa d91ba4f2d5aaf4d91ba0f6d91ba1ecd9 @@ -7956,12 +7956,12 @@ d91b4d64586464658a6706e910e9d91b 1b36efd91b37f1d91b38f9d91b3906f2 10f2d91b3df3d91b3ef4d91b3ff5d91b 40e4d91b3ae7d91b3bedd91b3c613c62 -a2566302e8abf9efd541f2d5400010ee +a2566302e8abf9efd540f2d53f0010ee 26f414f4d91b24f5d91b25f6d91b26f7 d91b27f9d91b28eed91b20efd91b21f2 d91b22f3d91b23ea10ead91b1cebd91b 1decd91b1eedd91b1fe1d91b19e2d91b -1ae7d52fe9d91b1b0cea1ef010f0d91b +1ae7d52ee9d91b1b0cea1ef010f0d91b 31f2d91b32f7d91b33f9d91b34ead91b 2eedd91b2feed91b30e50ce5d91b2be7 d91b2ce9d91b2de1ab5ee2d91b29e4d9 @@ -8021,7 +8021,7 @@ e5d91c10e8d91c11e9d91c12e1d91c0e e2d91c0fe4ab7d02ecd91c1aeed91c1b f2d91c1c04e1d91c1de4b72be5d91c1e e7d91c1febd91c2074a45675b2857600 -116e46751b75367746e5d70ae9d52aef +116e46751b75367746e5d70ae9d529ef d74002edd748eed749f4d74a10e1d74b 6e326f42724c7410efd74702ebd73ded d73ef0d73f01f2d741f4d74203e1d743 @@ -8042,127 +8042,127 @@ d726613662a24365a2476710f2d71000 e80ce8d5fde9d5bbeab1ccecd5fee1d5 f9e5d5fae6d5fbe7d5fc01e2d708ebd7 0904e3d70bedd70cefd70df0d70ef2d7 -0f002775c18ce920f20ff2d1e7f3d300 -f4d312f7a3b9f9d36be9d13debd15dec -d170eed19eefd1b47a387a36e1cf9fe5 -cff7e756e8d12b06ed0cedd37eeed37f -efd380f8d381e8d37bead37cecd37d01 -2a2e41127261e2d115012ad1145010cb -d11575a24176a28777a2b578a2f3790f -f21af60cf6d377f8d378f9d379fad37a -f2d373f3d374f4d375f5d376ea0cead1 -95ecd370eed371f0d372e1d36ce5d36d -e8d36ee9d36f0014ec25f314f809f8d3 -3bf9d33cfad33df3d338f5d339f6d33a -ecd333edd334eed335efd336f1d337e6 -0fe6d32ee7d32fe8d330e9d331ead332 -e1d329e2d32ae3d32be4d32ce5d32d0d -ee17f40cf4d347f5d348f7d349f8d34a -eed344efd345f3d346e90ce9d340ebd3 -41ecd342edd343e1d33ee4bba1e5d33f -0012ee20f40ff4d358f5d359f7d35af8 -d35bf9d35ceed353efd354f0d355f1d3 -56f2d357e60fe6d34fe7d350e8d351ec -d352edd164e1d34be2d34ce4d34de5d3 -4e0def17f40cf4d367f5d368f8d369f9 -d36aefd364f1d365f3d366e90ce9d360 -ead361edd362eed363e1d35de5d35ee7 -d35f6bc2e870c15870a25d71a29e72a2 -b973a40e740016ee2af414f709f7d326 -f9d327fad328f4d323f5d324f6d325f1 -09f1d18ef2d321f3d322eed31eefd31f -f0d320e814eb09ebd31becd31cedd31d -e8d318e9d319ead31ae2d313e3d314e4 -d315e5d316e6d3170013ee20f60ff6d1 -daf7d1d5f8d1dbf9d1dcfad1ddeed1d5 -f0d1d6f2d1d7f4d1d8f5d1d9e90fe9d1 -d0ead1d1ebd1d2ecd1d3edd1d4e1d1cb -e3d1cce5d1cde6d1cee7d1cf08ef0fef -d1e2f0d1e3f4d1e4f5d1e5f7d1e6e2d1 -deecd1dfedd1e0eed1e10017ef2af514 -f809f8d1fdf9d1fefad1fff5d1faf6d1 -fbf7d1fcf209f2d1f7f3d1f8f4d1f9ef -d1f4f0d1f5f1d1f6e814ec09ecd1f1ed -d1f2eed1f3e8d1eee9d1efead1f0e509 -e5d1ebe6d1ece7d1ede1d1e8e2d1e9e3 -d1ea0011ec1df50ff5d30df6d30ef7d3 -0ff8d310fad311ecd309f0d30af2d30b -f4d30ce60fe6cfa7e7d305e8d306e9d3 -07ead308e1d301e2d302e3d303e4d304 +0f002775c18ce920f20ff2d1e6f3d1ff +f4d311f7a3b9f9d36ae9d13cebd15cec +d16feed19defd1b37a387a36e1cf9ee5 +cff6e756e8d12a06ed0cedd37deed37e +efd37ff8d380e8d37aead37becd37c01 +2a2e41127261e2d114012ad1135010cb +d11475a24176a28777a2b578a2f3790f +f21af60cf6d376f8d377f9d378fad379 +f2d372f3d373f4d374f5d375ea0cead1 +94ecd36feed370f0d371e1d36be5d36c +e8d36de9d36e0014ec25f314f809f8d3 +3af9d33bfad33cf3d337f5d338f6d339 +ecd332edd333eed334efd335f1d336e6 +0fe6d32de7d32ee8d32fe9d330ead331 +e1d328e2d329e3d32ae4d32be5d32c0d +ee17f40cf4d346f5d347f7d348f8d349 +eed343efd344f3d345e90ce9d33febd3 +40ecd341edd342e1d33de4bba1e5d33e +0012ee20f40ff4d357f5d358f7d359f8 +d35af9d35beed352efd353f0d354f1d3 +55f2d356e60fe6d34ee7d34fe8d350ec +d351edd163e1d34ae2d34be4d34ce5d3 +4d0def17f40cf4d366f5d367f8d368f9 +d369efd363f1d364f3d365e90ce9d35f +ead360edd361eed362e1d35ce5d35de7 +d35e6bc2e870c15870a25d71a29e72a2 +b973a40e740016ee2af414f709f7d325 +f9d326fad327f4d322f5d323f6d324f1 +09f1d18df2d320f3d321eed31defd31e +f0d31fe814eb09ebd31aecd31bedd31c +e8d317e9d318ead319e2d312e3d313e4 +d314e5d315e6d3160013ee20f60ff6d1 +d9f7d1d4f8d1daf9d1dbfad1dceed1d4 +f0d1d5f2d1d6f4d1d7f5d1d8e90fe9d1 +cfead1d0ebd1d1ecd1d2edd1d3e1d1ca +e3d1cbe5d1cce6d1cde7d1ce08ef0fef +d1e1f0d1e2f4d1e3f5d1e4f7d1e5e2d1 +ddecd1deedd1dfeed1e00017ef2af514 +f809f8d1fcf9d1fdfad1fef5d1f9f6d1 +faf7d1fbf209f2d1f6f3d1f7f4d1f8ef +d1f3f0d1f4f1d1f5e814ec09ecd1f0ed +d1f1eed1f2e8d1ede9d1eeead1efe509 +e5d1eae6d1ebe7d1ece1d1e7e2d1e8e3 +d1e90011ec1df50ff5d30cf6d30df7d3 +0ef8d30ffad310ecd308f0d309f2d30a +f4d30be60fe6cfa6e7d304e8d305e9d3 +06ead307e1d300e2d301e3d302e4d303 6ba2586ca2936da2de6ea4336f0015ef -25f514f809f8d1c8f9d1c9fad1caf5d1 -c5f6d1c6f7d1c7efd1c0f0d1c1f1d1c2 -f2d1c3f3d1c4e814eb09ebd1bdecd1be -edd1bfe8d1bae9d1bbead1bce2d1b5e3 -d1b6e4d1b7e6d1b8e7d1b90011f11df5 -0ff5d16bf6d16cf7d16df8d16efad16f -f1d167f2d168f3d169f4d16ae60fe6d1 -62e7d163ebd164ecd165f0d166e1d15e -e2d15fe4d160e5d1610015ee25f414f7 -09f7d184f8d185f9d186f4d181f5d182 -f6d183eed17cf0d17df1d17ef2d17ff3 -d180e714eb09ebd179ecd17aedd17be7 -d176e9d177ead178e1d171e2d172e3d1 -73e4d174e6d1750017ed2af414f709f7 -d19bf9d19cfad19df4d198f5d199f6d1 -9af009f0d195f1d196f2d197edd192ee -d193efd194e714ea09ead190ebcfe7ec -d191e7d18de8d18ee9d18fe409e4d18a -e5d18be6d18ce1d187e2d188e3d18900 -15ee25f314f709f7d1b1f8d1b2f9d1b3 -f3d1aef4d1aff6d1b0eed1a9efd1aaf0 -d1abf1d1acf2d1ade714eb09ebd1a6ec -d1a7edd1a8e7d1a3e8d1a4e9d1a5e1d1 -9fe2d1a0e3d1a1e4d1a2e5b77d66c11b +25f514f809f8d1c7f9d1c8fad1c9f5d1 +c4f6d1c5f7d1c6efd1bff0d1c0f1d1c1 +f2d1c2f3d1c3e814eb09ebd1bcecd1bd +edd1bee8d1b9e9d1baead1bbe2d1b4e3 +d1b5e4d1b6e6d1b7e7d1b80011f11df5 +0ff5d16af6d16bf7d16cf8d16dfad16e +f1d166f2d167f3d168f4d169e60fe6d1 +61e7d162ebd163ecd164f0d165e1d15d +e2d15ee4d15fe5d1600015ee25f414f7 +09f7d183f8d184f9d185f4d180f5d181 +f6d182eed17bf0d17cf1d17df2d17ef3 +d17fe714eb09ebd178ecd179edd17ae7 +d175e9d176ead177e1d170e2d171e3d1 +72e4d173e6d1740017ed2af414f709f7 +d19af9d19bfad19cf4d197f5d198f6d1 +99f009f0d194f1d195f2d196edd191ee +d192efd193e714ea09ead18febcfe6ec +d190e7d18ce8d18de9d18ee409e4d189 +e5d18ae6d18be1d186e2d187e3d18800 +15ee25f314f709f7d1b0f8d1b1f9d1b2 +f3d1adf4d1aef6d1afeed1a8efd1a9f0 +d1aaf1d1abf2d1ace714eb09ebd1a5ec +d1a6edd1a7e7d1a2e8d1a3e9d1a4e1d1 +9ee2d19fe3d1a0e4d1a1e5b77d66c11b 667e679a68a28869a2c36a0aee14f309 -f3d15af5d15bf7d15ceed157efd158f0 -d159e1d152e7d153e9d154ead155ecd1 -5604e9d10feed110efd111f2d112f4d1 -130015ef25f514f809f8d128f9d129fa -d12af5d125f6d126f7d127efd120f0d1 -21f1d122f3d123f4d124e614e909e9d1 -1dead11eeed11fe6d11be7a7c9e8d11c -e1d116e2d117e3d118e4d119e5d11a00 -11f11df50ff5d139f6d13af7c77ff9d1 -3bfad13cf1d135f2d136f3d137f4d138 -e90fe9d130ebd131ecd132edd133f0d1 -34e4d12ce5d12de6d12ee8d12f0015ee -25f414f709f7d14ff8d150f9d151f4d1 -4cf5d14df6d14eeed147efd148f0d149 -f1d14af3d14be814eb09ebd144ecd145 -edd146e8d141e9d142ead143e2a936e3 -d13ee4b5d9e6d13fe7d14061a25d62a2 +f3d159f5d15af7d15beed156efd157f0 +d158e1d151e7d152e9d153ead154ecd1 +5504e9d10eeed10fefd110f2d111f4d1 +120015ef25f514f809f8d127f9d128fa +d129f5d124f6d125f7d126efd11ff0d1 +20f1d121f3d122f4d123e614e909e9d1 +1cead11deed11ee6d11ae7a7c9e8d11b +e1d115e2d116e3d117e4d118e5d11900 +11f11df50ff5d138f6d139f7c77ff9d1 +3afad13bf1d134f2d135f3d136f4d137 +e90fe9d12febd130ecd131edd132f0d1 +33e4d12be5d12ce6d12de8d12e0015ee +25f414f709f7d14ef8d14ff9d150f4d1 +4bf5d14cf6d14deed146efd147f0d148 +f1d149f3d14ae814eb09ebd143ecd144 +edd145e8d140e9d141ead142e2a936e3 +d13de4b5d9e6d13ee7d13f61a25d62a2 a863a2f864a43e650016ef2af514f809 -f8d10cf9d10dfad10ef5d109f6d10af7 -d10bf209f2d106f3d107f4d108efd103 -f0d104f1d105e714eb09ebd100edd101 -eed102e7cffde8cffee9cfffe1cff8e2 -cff9e3cffae4cffbe5cffc0015ef25f5 -14f809f8cfb3f9cfb4facfb5f5cfb0f6 -cfb1f7cfb2efcfabf0cfacf1cfadf2cf -aef3cfafe614eb09ebcfa8eccfa9eecf -aae6cfa5e7cfa6eacfa7e1cfa0e2cfa1 -e3cfa2e4cfa3e5cfa40016ed2af514f8 -09f8cfcaf9cfcbfacfccf5cfc7f6cfc8 -f7cfc9f009f0cfc4f3cfc5f4cfc6edcf -c1eecfc2efcfc3e714ea09eacfbeebcf -bfeccfc0e7cfbbe8cfbce9cfbde1cfb6 -e3cfb7e4cfb8e5cfb9e6cfba0014ed25 -f314f809f8cfdff9cfe0facfe1f3cfdc -f5cfddf7cfdeedcfd7eecfd8efcfd9f0 -cfdaf1cfdbe60fe6cfd2e7cfd3e8cfd4 -e9cfd5ebcfd6e1cfcde2cfcee3cfcfe4 -cfd0e5cfd10015ed25f314f609f6cff4 -f8cff5f9cff6f3cff2f4cff3f5af6aed -cfedeecfeeefcfeff1cff0f2cff1e714 -ea09eacfeaebcfebeccfece7cfe7e8cf -e8e9cfe9e1cfe2e2cfe3e3cfe4e4cfe5 -e5cfe6001a6fc101775ae72ce742ebd3 -a1f2d511fa012a8a41127261e2d5f601 -2a2e43127972ecd395022ad3944b2a4d -10ced39610dad395776479687a01ee26 +f8d10bf9d10cfad10df5d108f6d109f7 +d10af209f2d105f3d106f4d107efd102 +f0d103f1d104e714eb09ebcfffedd100 +eed101e7cffce8cffde9cffee1cff7e2 +cff8e3cff9e4cffae5cffb0015ef25f5 +14f809f8cfb2f9cfb3facfb4f5cfaff6 +cfb0f7cfb1efcfaaf0cfabf1cfacf2cf +adf3cfaee614eb09ebcfa7eccfa8eecf +a9e6cfa4e7cfa5eacfa6e1cf9fe2cfa0 +e3cfa1e4cfa2e5cfa30016ed2af514f8 +09f8cfc9f9cfcafacfcbf5cfc6f6cfc7 +f7cfc8f009f0cfc3f3cfc4f4cfc5edcf +c0eecfc1efcfc2e714ea09eacfbdebcf +beeccfbfe7cfbae8cfbbe9cfbce1cfb5 +e3cfb6e4cfb7e5cfb8e6cfb90014ed25 +f314f809f8cfdef9cfdffacfe0f3cfdb +f5cfdcf7cfddedcfd6eecfd7efcfd8f0 +cfd9f1cfdae60fe6cfd1e7cfd2e8cfd3 +e9cfd4ebcfd5e1cfcce2cfcde3cfcee4 +cfcfe5cfd00015ed25f314f609f6cff3 +f8cff4f9cff5f3cff1f4cff2f5af6aed +cfeceecfedefcfeef1cfeff2cff0e714 +ea09eacfe9ebcfeaeccfebe7cfe6e8cf +e7e9cfe8e1cfe1e2cfe2e3cfe3e4cfe4 +e5cfe5001a6fc101775ae72ce742ebd3 +a0f2d510fa012a8a41127261e2d5f601 +2a2e43127972ecd394022ad3934b2a4d +10ced39510dad394776479687a01ee26 f3d5f8012a2e41127261e2d5f6022ad5 -28412a4310ced5f710c6d5f610e1d5f4 +27412a4310ced5f710c6d5f610e1d5f4 10e1d5f57345733e746a75907602e5d5 f1e8d5f2ecd5f306eb0cebd5e6f0d5e7 f3d5e8f5d5e9e1d5e3e8d5e4e9d5e505 @@ -8177,1647 +8177,1645 @@ d5cb01e9d5ccf6d5cd68c0dc6bc0c26b a2436ca2666da28e6e0bee25f509f5d5 c8f8d5c9fad5caeed5c4f0d5c5f2012a 2e44126576e1d5c7012ad5c64e10d0d5 -c7e909e9d5c1ebd5c2edd5c3e1d3c2e5 -d5bfe7d5c00af014f609f6d3aaf7d3ab -f9d3acf0d3a7f1d3a8f5d3a9e1d3a2e7 -d3a3e8d3a4e9d3a5ebd3a60beb14f509 -f5d3b6f7cf5df9d3b7ebd3b3edd3b4ee -d3b5e509e5d3b0e6d3b1e9d3b2e1d3ad -e2d3aee3d3af0bee14f209f2d3c0f3d3 -c1f5adc5eed3bdefd3bef0d3bfe709e7 -d3bbe9cf97edd3bce1d3b8e2d3b9e4d3 -ba682e69386a10e9d3a001e1d39ceed3 -9d01f3d39ef6d39f651d6546664a6704 -e1d397e2d398e5d399e8d39aefd39b10 -f3d39210e9d393615c62666407ea0cea -d38eecd38fedd390f5d391e1d38ae5d3 -8be7d38ce9d38d01edd382f2d38305f2 -09f2d387f5d388f9d389e1d384e9d385 -ecd38670ceff70b02871b8fc72bac573 -002b77c12fec3af229f509f5cf54f6cf -67f7cf6ef22cf3cf29f4cf3e22032acd -024daebd522a5410d2cd0601cfcd05d5 -cd03eccdacedcdbdeecdd2efcde7f1a3 -cfe336e709e7cd47e9cd70ebcd93e3cd -00e426e5cd2b032a3644444b4c531269 -6ee4cd1a012acd174910cecd18126576 -e1cd1812686feacd19773878a24a79a2 -5f7aa28ae1abf00012f020f50ff5cf7c -f6cf7df7cf7ef8cf7ff9cf80f0cf77f1 -cf78f2cf79f3cf7af4cf7be90fe9cf72 -eacf73ebcf74edcf75efcf76e2cf6fe6 -cf70e7cf71e8cf6e06f20cf2cf84f3cf -85f5cf86f7cf87e2cf81e5cf82eecf83 -0ced17f20cf2abe7f3cf91f7cf92f8cf -93edcf8eeecf8fefcf90e909e9cf8beb -cf8ceccf8de1cf88e2cf89e3cf8a0aec -14f609f6cf9cf7cf9df9cf9eeccf99ee -cf9af0cf9be1cf94e2cf95e3cf96e4cf -97e7cf986cc2c171c15d74a5745275a2 -5f7605e509e5cf6bedcf6cf3cf6de1cf -68e2cf69e3cf6a0014ed25f214f609f6 -cf51f7cf52f9cf53f2cf4ef3cf4ff4cf -50edcf49eecf4aefcf4bf0cf4cf1cf4d -e80fe8cf44e9cf45eacf46ebcf47eccf -48e1cf3fe2cf40e5cf41e6cf42e7cf43 -0012ed20f40ff4cf62f6cf63f7cf64f9 -cf65facf66edcf5defcf5ef1cf5ff2cf -60f3cf61e70fe7cf59e9cf5aeacf5beb -cf5ceccd4be1cf55e2cf56e3cf57e5cf -5871a24872a25d730013ee20f50ff5cf -39f6cf3af8cf3bf9cf3cfacf3deecf34 -efcf35f1cf36f3cf37f4cf38e70fe7cf -2fe8cf30eacf31eccf32edcf33e2cf2a -e3cf2be4cf2ce5cf2de6cf2e06ef0cef -cf10f1cf11f4cf12f5cf13e1cf0de8cf -0eedcf0f0016ee2af514f809f8b3e1f9 -cf27facf28f5cf24f6cf25f7cf26f209 -f2cf21f3cf22f4cf23eecf1eefcf1ff1 -cf20e714eb09ebcf1beccf1cedcf1de7 -cf18e8cf19e9cf1ae1cf14e2cf15e3cd -00e5cf16e6cf176ca2486da2806ea2c6 -6fa411700011ee1df20ff2cf09f3cf0a -f4cf0bf6cf0cf9b984eecf05efcf06f0 -cf07f1cf08e70fe7cf00e9cf01ebcf02 -eccf03edcf04e2cdfce3cdfde4cdfee5 -cdff0010ee1df50ff5cdb8f7cdb9f8cd -baf9cdbbfacdbceecdb5efcd93f0cdb6 -f2cdb7e90ce9cdb1eacdb2eccdb3edcd -b4e3cdade4cdaee7cdafe8cdb00014ee -25f414f809f8cdcff9cdd0facdd1f4cd -ccf5cdcdf7cdceeecdc7f0cdc8f1cdc9 -f2cdcaf3cdcbe70fe7cdc2e8cdc3eacd -c4ebcdc5eccdc6e1cdbee2cdbfe3cdc0 -e4b993e6cdc10015ef25f514f809f8cd -e5f9cde6faa564f5cde2f6cde3f7cde4 -efcdddf0cddef1cddff2cde0f3cde1e9 -14ec09eccddaedcddbeecddce9cdd7ea -cdd8ebcdd9e2a7f3e3cdd3e5cdd4e6cd -d5e7cdd60013f020f60ff6cdf7f7cdf8 -f8cdf9f9cdfafacdfbf0cdf2f1cdf3f2 -cdf4f3cdf5f5cdf6e70fe7cdede9cdee -ebcdefeccdf0efcdf1e1cde8e2cde9e3 -cdeae4cdebe5cdec66c17d69c0d869a2 -5c6aa2a76b0017ef2af514f809f8cda9 -f9cdaafacdabf5cda6f6cda7f7cda8f2 -09f2cda3f3cda4f4cda5efcda0f0cda1 -f1cda2e714ea09eacd9dedcd9eeecd9f -e7cd9ae8cd9be9cd9ce409e4cd97e5cd -98e6cd99e1cd94e2cd95e3cd960015ed -25f514f809f8cd84f9cd85facd86f5cd -81f6cd82f7cd83edcd7cf0cd7df1cd7e -f2cd7ff3cd80e714ea09eacd79ebcd7a -eccd7be7cd76e8cd77e9cd78e1cd71e2 -cd72e4cd73e5cd74e6cd750bed14f409 -f4cd90f5cd91f7cd92edcd8df0cd8ef2 -cd8fe509e5cd8ae7cd8beccd8ce1cd87 -e2cd88e4cd8966a25767a25e680016ee -2af414f709f7cd6df9cd6efacd6ff4cd -6af5cd6bf6cd6cf109f1cd67f2cd68f3 -cd69eecd64efcd65f0cd66e714ea09ea -cd61ebcd62edcd63e7cd5ee8cd5fe9cd -60e1cd59e2cd5ae3cd5be4cd5ce5cd5d -02e5cd44edcd45f7cd460011ed1df40f -f4cd54f5cd55f7cd56f9cd57facd58ed -cd50f0cd51f2cd52f3cd53e50fe5cd4c -e8cd4de9cd4eeacd4fecb5d1e1cd48e2 -cd49e3cd4ae4cd4b61a26262a2ad63a4 -0564a466650017ee2af414f709f7cd41 -f9cd42facd43f4cd3ef5cd3ff6cd40f1 -09f1cd3bf2cd3cf3cd3deecd38efcd39 -f0cd3ae714ea09eacd35ebcd36eccd37 -e7cd32e8cd33e9cd34e409e4cd2fe5cd -30e6cd31e1cd2ce2cd2de3cd2e0015f0 -25f514f809f8cbe4f9cbe5facbe6f5cb -e1f6cbe2f7cbe3f0a546f1cbddf2cbde -f3cbdff4cbe0e614eb09ebcbdaedcbdb -efcbdce6cbd7e8cbd8eacbd9e1cbd2e2 -cbd3e3cbd4e4cbd5e5cbd60018ee2df4 -17f70cf7cbfcf8cbfdf9cbfefacbfff4 -cbf9f5cbfaf6cbfbf109f1cbf6f2cbf7 -f3cbf8eecbf3efcbf4f0cbf5e814eb09 -ebcbf0eccbf1edcbf2e8cbede9cbeeea -cbefe409e4cbeae5cbebe7cbece1cbe7 -e2cbe8e3cbe90012ee20f40ff4cd12f5 -cd13f6cd14f7cd15f8cd16eecd0eefcd -0ff0cd10f2b51ff3cd11e70fe7cd09e8 -cd0ae9cd0bebcd0ceccd0de2cd01e32c -e5cd07e6cd0822055211522e53325410 -d2cd0610cfcd0510d5cd032acd02312a -4d10c5cd041137b2cd030feb1af20cf2 -cd27f3cd28f5cd29f8cd2aebcd23eecd -24efcd25f1cd26e60ce6cd1fe7cd20e8 -cd21eacd22e1cd1be2cd1ce3cd1de5cd -1e001d70c17b784be90ce9c94aecc96a -f3c909f4c9e1785079547a7ae1012a2e -41127261e2c7e2012ac7e15010cbc7e2 -10edcb0705f509f5cb0bf8cb0cf9cb0d -e5cb08edcb09eecb0a02e5cb0ee8cb0f -eecb1073af736474a24575a2637707ee -0ceecb03efcb04f2cb05f7cb06e1c9ff -e2cb00e7cb01edcb020aee14f409f4c9 -def5c9dff7c9e0eec9dbf1c9dcf3c9dd -e1c9d6e5c9d7e8c9d8e9c9d9edc9da09 -f00ff0c9e7f2c9e8f4c9e9f5c9eaf6c9 -ebe1c9e2e8c9e3e9c9e4eec9e5efc9e6 -0013ef20f50ff5c9fbf7c9fcf8c9fdf9 -c9fefac9edefc9f6f0c9f7f1c9f8f2c9 -f9f4c9fae60fe6c9f1e7c9f2e9c9f3ea -c9f4edc9f5e1c9ece2c9ede3c9eee4c9 -efe5c9f070a24571a270720012ed20f4 -0ff4c9d2f5c9d3f7c9d4f8c9d5f9c9d2 -edc9ceefc9cff0b365f1c9d0f2c9d1e6 -0fe6c9c9e7c9cae8c9cbe9c9ccebc9cd -e1c9c5e3c9c6e4c9c7e5c9c80cee17f1 -0cf1c9c0f2bd12f3c9c1f4c9c2eec9bd -efc9bef0c9bfeb09ebc9baecc9bbedc9 -bce1a776e5c9b8e9c9b901e1c9c3edc9 -c468c1f76cc14d6ca2426da27d6ea2c8 -6f0010ee1df30ff3c9b3f4c9b4f6c9b5 -f7c9b6f9c9b7eec9afefc9b0f0c9b1f1 -c9b2e80ce8c9abe9c9acebc9adedc9ae -e3c9a7e5c9a8e6c9a9e7c9aa0011ee1d -f40ff4bfb3f5b906f6c978f7c979fac9 -7aeec974efc975f2c976f3c977e50fe5 -c96fe7c970e8c971ebc972ecc973e1c9 -6be2c96ce3c96de4c96e0015ee25f414 -f809f8c98cf9c98dfac98ef4c98af5c9 -45f7c98beec985efc986f1c987f2c988 -f3c989e614ea09eac982ecc983edc984 -e6c97fe8c980e9c981e1c97be2c97ce3 -b548e4c97de5c97e0016ed53f33df709 -f7c9a4f9c9a5fac9a6f3c99ff426f6c9 -a3022a32435e4c126174eec9a2042ac9 -a03132523853345410d2c9a21137b2c9 -a110d5c9a1127972ecc9a1f009f0c99c -f1c99df2c99eedc999eec99aefc99be7 -14ea09eac996ebc997ecc998e7c993e8 -c994e9c995e1c98fe2bbe9e3c990e4c9 -91e5c992686a69a2506aa29b6b08ee0f -eec965efc966f0c967f2c968f5c969e1 -c961e2c962e7c963e8c9640cee17f40c -f4c946f5c947f6c948f7c949eec943ef -c944f2c945eb09ebc940ecc941edc942 -e4c93de7c93ee8c93f0015ef25f514f8 -09f8c95df9c95efac95ff5c95af6c95b -f7c95cefc955f0c956f2c957f3c958f4 -c959e714ec09ecc952edc953eec954e7 -c950e8c951eaad1fe1c94be2c94ce3c9 -4de4c94ee6c94f10f4c9606483646865 -8e66a2726708eb0febc938ecc939eec9 -3af3c93bf5c93ce1c934e4c935e7c936 -e9c93705ef09efc91ef4c91ff5c920e1 -c91be3c91ceec91d0011ef1df30ff3b1 -13f6c92df8c92ef9c92ffac930efc92a -f0c92bf1c92cf2b113e70fe7c925e9c9 -26ebc927ecc928edc929e1c921e2c922 -e4c923e5c92402e1c931e5c932ecc933 -619662a295630fe91aee0ceec918f0c9 -19f2a355f7c91ae9c914eac915ebc916 -edc917e50ce5c910e6c911e7c912e8c9 -13e1c90ce2c90de3c90ee4c90f0016ef -2af514f809f8c7f7f9c7f8fac7f9f5c7 -f4f6c7f5f7c7f6f209f2c7f2f3c7f3f4 -bbabefc7eff0c7f0f1c7f1e71eeb13eb -c7ebec26edc7ee012ac7ec5012686cf0 -c7ede7c7e8e8c7e9e9c7eae2c7e3e3c7 -e4e4c7e5e5c7e6e6c7e70011ee1df30f -f3c907f4c908f5c909f6c90af9c90bee -c903efc904f0c905f2c906e70fe7c7fe -e8c7ffe9c900ecc901edc902e2c7fae3 -c7fbe5c7fce6c7fd057839782a797cf5 -cb110bf014f409f4cb42f5cb43f7cb44 -f0cb3ff1cb40f2cb41ec09eccb3ceecb -3defcb3ee1cb39e3cb3ae8cb3b01e1cb -45f0cb46755276a25a7705ed09edcb36 -f3cb37f4cb38e1cb33e3cb34e8cb3500 -13ee20f60ff6cb21f7cb22f8cb23f9cb -24facb11eecb1cf0cb1df1cb1ef2cb1f -f3cb20e70fe7cb17e9cb18ebcb19eccb -1aedcb1be1cb12e2cb13e3cb14e4cb15 -e6cb160ded17f00cf0cb2ff3cb30f7cb -31facb32edcb2ceecb2defcb2ee80ce8 -cb28e9cb29eacb2aeccb2be1cb25e3cb -26e5cb270019709f7820ee0ceecb9aef -c16cf5cbb9f7cbc8782a7934edcb8401 -e4cbcff7cbd010f5cbd1745b74507566 -7705ed09edcbccefcbcdf2cbcee1cbc9 -ebcbcaeccbcb03e3cbb5e8cbb6edcbb7 -f7cbb80eed1af40cf4cbc4f5cbc5f9cb -c6facbc7edc16cefcbc1f0cbc2f1cbc3 -e60ce6cbbde7cbbee9cbbfebcbc0e2cb -bae3cbbbe5cbbc7034723e7301ebcbb3 -f7cbb401eecbadf4cbae03e9cbafedcb -b0efcbb1f4cbb268c0ea6bb76b8a6da2 -4a6ea29a6f0cec17f00cf0cba9f2cbaa -f5cbabf7cbaceccba7edcb98efcba8e5 -09e5cba4e6cba5e7cba6e2cba1e3cba2 -e4cba306e90ce9ab7dedcb81f4cb82f7 -cb83e1cb7ee2cb7fe8cb800016ed2af4 -14f809f8bda3f9cb98facb99f4cb95f5 -cb96f7cb97f009f0cb93f1cb94f2afd7 -edcb90eecb91efcb92e614e909e9cb8d -ebcb8eeccb8fe6cb8ae7cb8be8cb8ce1 -cb85e2cb86e3cb87e4cb88e5cb8905ee -09eecb9ef2cb9ff7cba0e4cb9be7cb9c -eccb9d683a69446a02e7cb7be9cb7cf3 -cb7d01e7cb71f0cb7207ee0ceecb77f2 -cb78f4cb79f5cb7ae1cb73e6cb74eccb -75edcb7664446446654a6704e1cb6cee -cb6df2cb6ef3cb6ff5cb7010e2cb5f0b -ec14f309f3cb69f4cb6af9cb6beccb66 -edcb67eecb68e709e7cb63e9cb64eacb -65e1cb60e2cb61e5cb62613062a24963 -10e6cb5e0013ed20f60ff6cb55f7cb56 -f8cb57f9cb58facb59edcb50eecb51ef -cb52f0cb53f2cb54e70fe7cb4ce8cb4d -e9cb4eeac309ebcb4fe1cb47e2cb48e3 -cb49e4cb4ae6cb4b03e2cb5aebcb5bec -cb5cf0cb5d6da6596eb8666f001b70c0 -f27923ea0ceac769edb183f2c7acf3c7 -bb792a7a3ae3c75502e4c7ddedc7def9 -c7df10edc7e07462743c75a24976a256 -7701e9c7dbecc7dc0011f11df50ff5c7 -d1f7c7d2f8c7d3f9c7d4fac7d5f1c7cd -f2c7cef3c7cff4c7d0e90fe9c7c8ebc7 -c9ecc7caedc7cbeec7cce1c7c4e2c7c5 -e4c7c6e5c7c704e2c7d6e5c7d7e9c7d8 -edc7d9eeb1cc10e4c7da705c72827307 -f00cf0c7c0f4c7c1f5c7c2f8c7c3e1c7 -bce3c7bde9c7beefc7bf05ef09efc7a9 -f4c7aaf9c7abe1b560ebc7a7edc7a80e -f31af70cf7c7b8f8c7b9f9c7acfac7ba -f3c7b4f4c7b5f5c7b6f6c7b7e70ce7c7 -b0eec7b1efc7b2f2c7b3e1c7ade3c7ae -e5c7af69c0f06c926c406d786ea25a6f -02e4c7a4eec7a5f2c7a608ed0fedc783 -efc784f2c785f4c786f5c787e1c77fe4 -c780e5c781ebc7820def17f40cf4c792 -f5c793f7c794f8c795efc78ff0c790f2 -c791e70ce7c78be9c78cebc78decc78e -e1c788e2c789e3c78a0def17f30cf3c7 -a0f4c7a1f5c7a2f8c7a3efc79df0c79e -f2c79fe90ce9c799eac79aebc79beec7 -9ce1c796e5c797e7c79869966aa2426b -0fed1af50cf5c77bf6c77cf8c77dfac7 -7eedc777efc778f2c779f3c77ae50ce5 -c773e7c774e9c775ebc776e1c76fe2c7 -70e3c771e4c77202e1c766e5c767eec7 -6805f309f3c76cf6c76df7c76ee2c76a -e3c76be7c76964326438664e67586801 -f4c764f5c76503e1c759ebc75af4c75b -f5c75c01f3c75df5c75e04e2c75fe3c7 -60e7c761efc762f5c763613a62506302 -e1c756efc757f5c75803e1c749e3c74a -f2c74bf6c74c07ef0cefc751f2c752f4 -c753f5c754e9c74debc74eecc74fedc7 -50002473c2cae82aef0fefc16cf2c1b4 -f3b200f4c1e3f9a9d2e8bfcde9bf2feb -bf26ecc128ee012ad833f54d126f6ee7 -af5177c14c773878a26179a2bc7aa2fd -e7bfb30017ed2af314f609f6c33af7c3 -3bfac33cf3c337f4c338f5c339f009f0 -c335f1c336f2addfedc332eec333efc3 -34e714ea09eab1ccebc330ecc331e7c3 -2de8c32ee9c32fe409e4af29e5c32be6 -c32ce1c328e2c329e3c32a0019ee2df4 -17f70cf7c353f8c354f9c355fac356f4 -c350f5c351f6c352f109f1c34df2c34e -f3c34feec34aefc34bf0c34ce717ea0c -eac346ebc347ecc348edc349e7c343e8 -c344e9c345e409e4c340e5c341e6c342 -e1c33de2c33ee3c33f0013ed20f60ff6 -c364f7c365f8c366f9c367fac368edc3 -60f0c361f2c362f4c1cbf5c363e70fe7 -c35be8c35ceac35debc35eecc35fe2c3 -57e3c358e4a51de5c359e6c35a0013ef -20f50ff5c378f6c379f7c37af8c37bfa -c37cefc373f0c374f1c375f2c376f4c3 -77ea0feac36eebc36fecc370edc371ee -c372e1c369e4c36ae5c36be8c36ce9c3 -6d73a25074a2a075a2f8760014f025f5 -14f809f8c325f9c326fac327f5c322f6 -c323f7c324f0c31df1c31ef2c31ff3c3 -20f4c321e80fe8c318ebc319ecc31aee -c31befc31ce1c313e4c314e5c315e6c3 -16e7c3170016ee2af514f809f8c1e0f9 -c1e1fac1e2f5c1ddf6c1def7c1dff109 -f1c1dbf3c1dcf4c1cbeec1d8efc1d9f0 -c1dae814eb09ebc1d5ecc1d6edc1d7e8 -c1d2e9c1d3eac1d4e2c1cde3c1cee5c1 -cfe6c1d0e7c1d10018ed2df317f60cf6 -c1f9f7c1faf8c1fbf9c1fcf3c1f6f4c1 -f7f5c1f8f009f0c1f3f1c1f4f2c1f5ed -c1f0eec1f1efc1f2e714ea09eac1edeb -c1eeecc1efe7c1eae8c1ebe9c1ece409 -e4c1e7e5c1e8e6c1e9e1c1e4e2c1e5e3 -c1e60015ef25f414f809f8c310f9c311 -fac312f4c30df5c30ef6c30fefc308f0 -c309f1c30af2c30bf3c30ce714ea09ea -c305ebc306edc307e7c302e8c303e9c3 -04e1c1fde2c1fee3c1ffe4c300e5c301 -6ac3076ec1c76ea2626fa2bb70a40b71 -a463720017ef2af514f809f8c1caf9c1 -cbfac1ccf5c1c7f6c1c8f7c1c9f209f2 -c1c4f3c1c5f4c1c6efc1c1f0c1c2f1c1 -c3e814ec09ecc1beedc1bfeec1c0e8c1 -bbeac1bcebc1bde409e4c1b8e6c1b9e7 -c1bae1c1b5e2c1b6e3c1b70018ed2df4 -17f70cf7c168f8c169f9c16afac16bf4 -c165f5c166f6c167f109f1c162f2c163 -f3c164edc15feec160f0c161e715ea0a -eac15debd829caecc15ee7c15ae8c15b -e9c15ce409e4c157e5c158e6c159e1c1 -54e2c155e3c1560016ef2af514f809f8 -c180f9c181fac182f5c17df6c17ef7c1 -7ff209f2c17af3c17bf4c17cefc177f0 -c178f1c179e714ea09eac175ebc176ed -abd2e7c172e8c173e9c174e1c16de3c1 -6ee4c16fe5c170e6c1710018ee2df417 -f70cf7c198f8c199f9c19afac19bf4c1 -95f5c196f6c197f109f1c192f2c193f3 -c194eec18fefc190f0c191e814eb09eb -c18cecc18dedc18ee8c189e9c18aeac1 -8be409e4c186e5c187e7c188e1c183e2 -c184e3c1850017ee2af514f809f8c1b1 -f9c1b2fac1b3f5c1aef6c1aff7c1b0f1 -09f1c1abf2c1acf3c1adeec1a8efc1a9 -f0c1aae814eb09ebc1a5ecc1a6edc1a7 -e8c1a2e9c1a3eac1a4e509e5c19fe6c1 -a0e7c1a1e1c19ce2c19de3c19e6aa255 -6ba2a06ca2eb6d0015ef25f514f809f8 -c151f9c152fac153f5c14ef6c14ff7c1 -50efc149f0c14af1c14bf2c14cf4c14d -e614e909e9c146edc147eec148e6c143 -e7c144e8c145e1c13ee2c13fe3c140e4 -c141e5c1420015ee25f514f809f8c10f -f9c110fac111f5c10cf6c10df7c10eee -c107f1c108f2c109f3c10af4c10be814 -eb09ebc104ecc105edc106e8c101e9c1 -02eac103e2bffce3bffde4bffee5bfff -e7c1000015ef25f514f809f8c125f9c1 -26fac127f5c122f6c123f7c124efc11d -f0c11ef2c11ff3c120f4c121e914ec09 -ecc11aedc11beec11ce9c117eac118eb -c119e1c112e2c113e3c114e5c115e6c1 -160014ee25f314f709f7c13bf8c13cfa -c13df3c138f5c139f6c13aeec133efc1 -34f0c135f1c136f2c137e80fe8c12ee9 -c12feac130ebc131ecc132e1c129e2c1 -2ae3c12be5c12ce6c12d65c1c465a262 -66a2b267a40a68a465690017ed2af414 -f809f8bff9f9bffafabffbf4bff6f5bf -f7f7bff8f009f0bff3f1bff4f2bff5ed -bff0eebff1efbff2e714ea09eabfedeb -bfeeecbfefe7bfeae8bfebe9bfece409 -e4bfe7e5bfe8e6bfe9e1bfe4e2bfe5e3 -bfe60016ee2af414f709f7bf97f9bf98 -fabf99f4bf94f5bf95f6bf96f109f1bf -91f2bf92f3bf93eebf8eefbf8ff0bf90 -e714eb09ebbf8becbf8cedbf8de7abc6 -e8bf89eabf8ae1bf84e2bf85e3bf86e4 -bf87e5bf880018ed2df417f70cf7bfaf -f8bfb0f9bfb1fabfb2f4bfacf5bfadf6 -bfaef009f0bfa9f1bfaaf2bfabedbfa6 -eebfa7efbfa8e714ea09eabfa3ebbfa4 -ecbfa5e7bfa0e8bfa1e9bfa2e409e4bf -9de5bf9ee6bf9fe1bf9ae2bf9be3bf9c -0019ee2df417f70cf7bfcaf8b711f9bf -cbfabfccf4bfc7f5bfc8f6bfc9f109f1 -bfc4f2bfc5f3bfc6eebfc1efbfc2f0bf -c3e717ea0ceabfbdebbfbeecbfbfedbf -c0e7bfbae8bfbbe9bfbce409e4bfb7e5 -bfb8e6bfb9e1bfb4e2bfb5e3bfb60016 -ee2af414f809f8bfe1f9bfe2fabfe3f4 -bfdef5bfdff7bfe0f109f1bfdcf2abb3 -f3bfddeebfd9efbfdaf0bfdbe714eb09 -ebbfd6ecbfd7edbfd8e7bfd3e9bfd4ea -bfd5e2bfcee3bfcfe4bfd0e5bfd1e6bf -d261a25f62a2b463a409640017ee2af5 -14f809f8bf81f9bf82fabf83f5bf7ef6 -bf7ff7bf80f209f2bf7bf3bf7cf4bf7d -eebf78f0bf79f1bf7ae714ea09eabf75 -ebbf76edbf77e7bf72e8bf73e9bf74e4 -09e4bf6fe5bf70e6bf71e1bf6ce2bf6d -e3bf6e0015ee2ff51df812f8bf36f926 -fabf3922012abf374310c3bf38f5bf33 -f6bf34f7bf35eed82517efbf2ff1bf30 -f3bf31f4bf32e614ea09eabf2cebbf2d -edbf2ee6bf29e7bf2ae9bf2be1bf24e2 -bf25e3bf26e4bf27e5bf280017ef2af5 -14f809f8bf4ff9bf50fabf51f5bf4cf6 -bf4df7bf4ef209f2bf49f3bf4af4bf4b -efbf46f0bf47f1bf48e914ec09ecbf43 -edbf44eebf45e9bf40eabf41ebbf42e4 -09e4bf3de6bf3ee8bf3fe1bf3ae2bf3b -e3bf3c0019ee2df417f70cf7bf68f8bf -69f9bf6afabf6bf4bf65f5bf66f6bf67 -f109f1bf62f2bf63f3bf64eebf5fefbf -60f0bf61e717ea0ceabf5bebbf5cecbf -5dedbf5ee7bf58e8bf59e9bf5ae409e4 -bf55e5bf56e6bf57e1bf52e2bf53e3bf -54002473c1dfe220ee0feec589efc5a1 -f2c5c8f6c70ff9c727e2c395e4c3bfe5 -c3d8e7c3f3ecaf8377c0d27736787479 -a2527aa2a7e1c37d09ed0fedc717efc7 -18f2c719f7c71af8c71be2c712e3c713 -e5c714e7c715e9c7160bee14f209f2c7 -25f5a958f8c726eec722efc723f1c724 -e709e7c71fe9c720ecc721e1c71ce4c7 -1de5c71e0017ee2af414f709f7c73cf8 -c73df9c73ef4c739f5c73af6c73bf109 -f1c736f2c737f3c738eec733efc734f0 -c735e814eb09ebc730ecc731edc732e8 -c72de9c72eeac72fe509e5c72ae6c72b -e7c72ce2c728e3b364e4c72909ed0fed -c744f2c745f5c746f9c747fac748e1c7 -3fe2c740e4c741e9c742ebc743734274 -a25775a2887602e8c710edc711efa700 -0014ee25f514f809f8c5e7f9c5e8fac5 -e9f5c5e4f6c5e5f7c5e6eec5dfefc5e0 -f1c5e1f3c5e2f4c5e3e60fe6c5dae7c5 -dbe8c5dcebc5ddedc5dee1c5d5e2c5d6 -e3c5d7e4c5d8e5c5d90eef1af50cf5c5 -f4f8c5f5f9c5f6fac5f7efc5f1f0c5f2 -f2c5f3f3ad1fe90ce9c5edeac5eeebc5 -efedc5f0e4c5eae5c5ebe7c5ec0017ef -2af514f809f8c70cf9c70dfac70ef5c7 -09f6c70af7c70bf209f2c706f3c707f4 -c708efc703f0c704f1c705e814eb09eb -c701edc702eea5dce8c5fee9c5ffeac7 -00e509e5c5fbe6c5fce7c5fde1c5f8e3 -c5f9e4c5fa6ac2596ec1256e966fa293 -70a2d971a2fc720dec17f00cf0c5d2f5 -c39bf8c5d3fac5d4ecc5cfedc5d0eec5 -d1e60ce6c5cce7c5cde9c5ceebc569e1 -c5c9e2c5cae5c5cb0018ed2df417f70c -f7c59ef8c506f9c59ffac5a0f4c59bf5 -c59cf6c59df109f1c599f2c59af3c3a5 -edc596eec597f0c598e714ea09eac593 -ebc594ecc595e7c590e8c591e9c592e4 -09e4c58de5c58ee6c58fe1c58ae2c58b -e3c58c0014ed25f314f609f6c5b2f7c5 -b3f9c5b4f3c5aff4c5b0f5c5b1edab6c -eec5acefaf64f0c5adf1c5aee70fe7c5 -a7e8c5a8e9c5a9eac5aaebc5abe1c5a2 -e3c5a3e4c5a4e5c5a5e6c5a60aee14f5 -09f5c5bcf8c5bdf9c5beeec5b9efc5ba -f3c5bbe2c5b5e7c5b6e8c5b7e9c3d8ec -c5b808ee0feec5c3efc5c4f1c5c5f4c5 -c6f9c5c7e7c5bfebc5c0ecc5c1edc5c2 -6aa2626ba29a6ca2ea6d0018ed2df317 -f60cf6c585f7c586f8c587fac588f3c5 -82f4c583f5c584f009f0c57ff1c580f2 -c581edc57ceec57defc57ee714ea09ea -c579ebc57aecc57be7c576e8c577e9c5 -78e409e4c573e5c574e6c575e1c570e2 -c571e3c5720010ee1df40ff4c544f5c5 -45f8c546f9c547faad93eec540efc541 -f2c542f3c543e90ce9c53ceac53decc5 -3eedc53fe1c538e2c539e4c53ae8c53b -0016ed2af414f709f7c55cf8c55dfac5 -5ef4c559f5c55af6c55bf109f1c556f2 -c557f3c558edc553eec554efc555e614 -e909e9c550eac551ebc552e6c54de7c5 -4ee8c54fe1c548e2c549e3c54ae4c54b -e5c54c0011ef1df60ff6c56bf7c56cf8 -c56df9c56efac56fefc567f1c568f2c5 -69f5c56ae90fe9c563eac564ebc565ed -c566eea5e3e1c55fe3c560e5c561e7c5 -6265c15f65a25d66a2a367a2b068a405 -690016ee2af514f809f8c535f9c536fa -c537f5c532f6c533f7c534f209f2c52f -f3c530f4c531eec52cefc52df1c52ee7 -14ea09eac529ecc52aedc52be7c526e8 -c527e9c528e1c521e2c522e4c523e5c5 -24e6c5250014ed25f414f809f8c3ebf9 -c3ecfac3edf4c3e8f5c3e9f7c3eaedc3 -e3eec3e4efc3e5f1c3e6f2c3e7e70fe7 -c3dee8c3dfe9c3e0eac3e1ebc3e2e1c3 -d9e2c3dae3c3dbe4c3dce5c3dd04e1c3 -eee4c3efecc3f0f2c3f1f5c3f20017ee -2af514f809f8c508f9c509fac50af5c5 -05f6c506f7c507f209f2c503f3c504f4 -bd92eec500f0c501f1c502e814eb09eb -c3fdecc3feedc3ffe8c3fae9c3fbeac3 -fce409e4c3f7e5c3f8e7c3f9e1c3f4e2 -c3f5e3c3f60015ef25f514f809f8c51e -f9c51ffac520f5c51bf6c51cf7c51def -c516f0c517f1c518f2c519f4c51ae614 -eb09ebc513edc514eec515e6c510e7c5 -11e9c512e1c50be2c50ce3c50de4c50e -e5c50f61a25f62a2bc63a407640017ee -2af514f809f8c3d5f9c3d6fac3d7f5c3 -d2f6c3d3f7c3d4f209f2c3cff3c3d0f4 -c3d1eec3ccf0c3cdf1c3cee814eb09eb -c3c9ecc3caedc3cbe8c3c6e9c3c7eac3 -c8e409e4c3c3e6c3c4e7c3c5e1c3c0e2 -c3c1e3c3c20015ee37f314f809f8c392 -f9c393fac394f3c38ff4c390f7c391ee -38efc38bf0c38cf1c38df2c38e012a2e -4812616ef4c38a012ac3895410d7c38a -e614eb09ebc386ecc387edc388e6c383 -e7c384eac385e1c37ee2c37fe3c380e4 -c381e5c3820015ee25f414f709f7c3a9 -f8b307f9c3aaf4c3a6f5c3a7f6c3a8ee -c3a1efc3a2f0c3a3f1c3a4f2c3a5e614 -ea09eac39eebc39fedc3a0e6c39be8c3 -9ce9c39de1c396e2c397e3c398e4c399 -e5c39a0015ec25f114f509f5c3bcf8c3 -bdfac3bef1b7fff2c3baf4c3bbecc3b6 -edc3b7eec3b8efc3b9f0b7cce614e909 -e9c3b3eac3b4ebc3b5e6c3b0e7c3b1e8 -c3b2e1c3abe2c3ace3c3ade4c3aee5c3 -af66dbf469d2ea69aade6ab05c6bb440 -6c002272c13ee11dee0feebdaeefbdbd -f4bdeef5bdf7f6bf0de1bbe2e2bbf7e7 -bd3de9bd557667766e779478a25579a2 -567a03e8bf1fecbf20eebf21fa012a2e -4712656ff2bf23012abf224710c5bf23 -05ec09ecbf11f3bf0df5bf12e1bf0ee9 -bf0febbf1008ec0fecbf17edbf18efbf -19f4bf1af7bf1be1bf13e5bf14e7bf15 -e8bf1610edbf1c01e1bf1deebf1e72a2 -5573a27d74a292750015ef25f414f709 -f7bf0bf9ab12fabf0cf4bf08f5bf09f6 -bf0aefbf03f0bf04f1bf05f2bf06f3bf -07e914ec09ecbf00edbf01eebf02e9bd -fdeabdfeebbdffe1bdf8e3bdf9e4bdfa -e5bdfbe6bdfc0bed14f409f4bde4f6bd -e5fabde6edbde1eebde2efbde3e909e9 -bddeebbddfecbde0e1bddbe3bddce7bd -dd06e90ce9bdeaedbdebf2bdecf3bded -e1bde7e4bde8e5bde907ee0ceebdf3ef -bdf4f3bdf5f5bdf6e3bdefe7bdf0e8bd -f1e9bdf269c1ed6dc0f76d3c6ea25e6f -a28c70a2dc7110f2bdda0016ec2af214 -f709f7bdabf8bdacf9bdadf2bda8f5bd -a9f6bdaaef09efbda5f0bda6f1bda7ec -bda2edbda3eebda4e614e909e9bd9fea -bda0ebbda1e6bd9ce7bd9de8bd9ee1bd -97e2bd98e3bd99e4bd9ae5bd9b0dec17 -f30cf3bdb9f5bdbaf7bdbbfabdbcecbd -b6edbdb7eebdb8e70ce7bdb2e8bdb3e9 -bdb4eabdb5e1bdafe2bdb0e4bdb10016 -ee2af414f809f8bdd2f9bdd3fabdd4f4 -bdcff5bdd0f7bdd1f109f1bdccf2bdcd -f3bdceeebdc9efbdcaf0bdcbe814eb09 -ebbdc6ecbdc7edbdc8e8bdc3e9bdc4ea -bdc5e1bdbee2bdbfe3bdc0e5bdc1e7bd -c204e1bdd5e5bdd6eebdd7efbdd8f8bd -d969a2456aa29a6ba2af6c0011eb1def -0fefbd92f0bd93f1bd94f5bd95f8bd96 -ebbd8eecbd8fedbd90eebd91e50fe5bd -89e6bd8ae7bd8be9bd8ceabd8de1bd85 -e2bd86e3bd87e4bd880015ef25f514f8 -09f8bd6af9bd6bfabd6cf5bd67f6bd68 -f7bd69efbd62f0bd63f1bd64f2bd65f3 -bd66e61eea09eabd5febbd60ecbd61e6 -2ce7bd5de8bd5e012abd5b4c12696de2 -bd5ce1bd56e2bd57e3bd58e4bd59e5bd -5a06ec0cecbd70f0bd71f7bd72f8bd73 -e1bd6de5bd6ee9bd6f0010ec1df20ff2 -bd80f3bd81f4bd82f5bd83f9bd84ecbd -7cedbd7deebd7eefbd7fe50ce5bd78e8 -bd79e9bd7aeabd7be1bd74e2bd75e3bd -76e4bd7765bd656466a27d67a2816807 -ee0ceebd51f3bd52f4bd53f5bd54e1bd -4de8bd4ee9bd4fedbd500019ee2df417 -f70cf7bd37f8bd38f9bd39fabd3af4bd -34f5bd35f6bd36f109f1bd31f2bd32f3 -bd33eebd2eefbd2ff0bd30e717ea0cea -bd2aebbd2becbd2cedbd2de7afe1e8bd -28e9bd29e409e4bd25e5bd26e6bd27e1 -bd22e2bd23e3bd2401e1bd3beebd3c0e -ed1af20cf2bd49f4bd4af5bd4bfabd4c -edbd45eebd46efbd47f1bd48e80ce8bd -41e9bd42ebbd43ecbd44e1bd3ee2bd3f -e7bd40619062a27e63a2bc640deb17ee -0ceebd1eefbd1ff0bd20f1bd21ebbd1b -ecbd1cedbd1de70ce7bd17e8bd18e9bd -19eabd1ae1bd14e2bd15e4bd160014ec -25f214f709f7bbf4f8bbf5fabbf6f2bb -f1f3bbf2f5bbf3ecbbecedbbedeebbee -f0bbeff1bbf0e70fe7bbe8e8bbe9e9bb -eaeabbebebbb33e1bbe3e2bbe4e3bbe5 -e4bbe6e5bbe70012ef20f60ff6bd05f7 -bd06f8bd07f9bd08fabd09efbd00f1bd -01f2bd02f4bd03f5bd04ea0feabbfceb -a921ecbbfdedbbfeeebbffe2bbf8e5bb -f9e6bbfae9bbfb09ec0fecbd0fedbd10 -f0bd11f1bd12f3bd13e3bd0ae4bd0be5 -bd0ce6bd0de8bd0e002474a9e520ef0f -efb5bcf3b568f4b5d7f5b594f7b5ebe5 -b576e7b57fe9b58debaffbeeb5b3782d -7834793e7a4ee1b557e4b56b01e3b5f0 -ecb5f102e1b5f2efb5f3f8b5f404e8b5 -f5e9b111edb5f6f2b5f7fab5f8744875 -a24876a2497703ebb5ecedb5edefb5ee -f3b5ef0ff21af70cf7b5e4f8b5e5f9b5 -e6fab5e7f2b5e0f3b5e1f4b5e2f6b5e3 -eb0cebb5dcecb5ddedb5deefb5dfe2b5 -d8e4b5d9e5b5dae9b5db10edb5e801e2 -b5e9f6b5ea6bc0fc6f626f7a708a7194 -729e730aeb14ef09efb5d4f4b5d5f5b5 -d6ebb5d1edb5d2eeb5d3e1b5cce3b5cd -e4b5cee8b5cfe9b5d002f2b5bdf5b5be -f7b5bf01e9b5c0efb5c101f5b5c2f7b5 -c307ee0ceeb5c8f5b5c9f8b5caf9b5cb -e5b5c4e8b5c5e9b5c6ebb5c76b646ca2 -4d6da2756e07ee0ceeb5b8efb5b9f0b5 -baf4b5bbe2b5b4e7b5b5e8b5b6eab5b7 -0cf017f60cf6b59df7b59ef8b59ffab5 -a0f0b59af2b59bf4b59ceb09ebb597ec -b598efb599e5b594e8b595e9b5960bed -14f509f5b5a9f6b5aaf7b176edb5a6ef -b5a7f0b5a8e909e9b5a4ebb5a5ecb5a6 -e1b5a1e2b5a2e7b5a307f20cf2b5aff3 -b5b0f4b5b1f9b5b2e9b5abecb5aceeb5 -adefb5ae66656652678468a24d69a257 -6a04e3b58fe5b590eab591eeb592f3b5 -9307eb0cebb57bedb57cf5b57df9b57e -e1b577e2b578e5b579e6b57a08ed0fed -b584eeb585efb586f3b587f7b588e2b5 -80e5b581e7b582ecb58303e2b589e9b5 -8af0b58bf7b58c10eeb58e616e627e63 -a25a6409e90fe9b571f2b572f3b573f4 -b574f5b575e1b56ce2b56de3b56ee4b5 -6fe5b57002e9b558eeb559f2b55a0ce9 -17ee0ceeb563f2b564f5b565f9b566e9 -b560ecb561edb562e509e5b55de7b55e -e8b55fe1a7f3e2b55be4b55c03e1b567 -e5b568e8b569f2b56a00186eb07628e1 -0ce1b5f9e9b72bf6b76df7b770763a77 -447902e1b772e5b773f9b77401e4b76e -eeb76f10e9b771715071947298750fee -1af40cf4b769f5b76af7b76bf9b76cee -b765efb766f0b767f2b768e90ce9b761 -ebb762ecb763edb764e1b75de2b75ee4 -b75fe8b76010f2b75804e1b759e2a3b6 -f2b75af4b75bf5b75c6e346f607001e1 -b756f2b75706e90ce9b74deab74eecb7 -4ff3b750e1b74ae4b74be7b74c04e2b7 -51e4b752e7b753f2b754f7b75568796b -3c6b726c886d0aec14f309f3b747f7b7 -48f8b749ecb744eeb745f2b746e1b73f -e2b740e3b741e4b742e9b74303e1b73a -edb73befb73cf5b73d10e5b73e683469 -386a01e5b738f2b73910e9b72a0bec14 -f509f5b735f6b736f9b737ecb732edb7 -33f4b734e409e4b72fe5b730e7b731e1 -b72ce2b72de3b72e643d644065506703 -e2b727e5b728ebb707efb72902e1b71a -e7b71bf4b71c09ec0fecb722eeb723f2 -b724f4b725f5b726e2b71de5b71ee8b7 -1fe9b720ebb721613062a24e6310f4b7 -190014ed25f314f809f8b70bf9b70cfa -b70df3b708f4b709f5b70aedb703eeb7 -04efb705f1b706f2b707e60fe6b5ffe8 -b700eab701ebb702ecb527e1b5fae2b5 -fbe3b5fce4b5fde5b5fe0aee14f409f4 -b716f5b717f7b718eeb713efb714f2b7 -15e5b70ee9b70feab710ebb711edb712 -002875c29feb74f23ff628f6b9eff7bb -84f9022a32414c4c126174eebbb4022a -bbb2432a5410d2bbb410cebbb3127261 -e2bbb3f2b9b1f3bb24f5022aac7d41ac -835912657ae9b9a5eb38ecb976edb991 -eeb9aeefb9c7012a2e41127261e2b95a -042ab95841324336493a4d10ceb95c10 -c6b95910ceb95a10d2b95b7a667a38e1 -b1c3e7b7fce9b929eab9400017ee2af5 -14f809f8bbdff9bbe0fabbe1f5bbdcf6 -bbddf7bbdef209f2bbdaf3bbdbf4af6a -eebbd7efbbd8f0bbd9e814eb09ebaf56 -ecbbd5edbbd6e8add6e9bbd4eaaf6ae4 -09e4bbd1e5bbd2e6bbd3e1bbcee2bbcf -e3bbd075a26576a2ba77a40f78a46779 -0018ed2df417f70cf7bbcaf8bbcbf9bb -ccfabbcdf4bbc7f5bbc8f6bbc9f109f1 -bbc4f2bbc5f3bbc6edbbc1eebbc2efbb -c3e714ea09eabbbeebbbbfecbbc0e7bb -bbe8bbbce9bbbde409e4bbb8e5bbb9e6 -bbbae1bbb5e2bbb6e3bbb70017ee2af5 -14f809f8bb6af9bb6bfabb6cf5bb67f6 -bb68f7bb69f109f1bb64f3bb65f4bb66 -eebb61efbb62f0bb63e814eb09ebbb5e -ecbb5fedbb60e8bb5be9bb5ceabb5de5 -09e5bb58e6bb59e7bb5ae2bb55e3bb56 -e4bb570017ee2af414f809f8bb81f9bb -82fabb83f4bb7ef6bb7ff7bb80f109f1 -bb7cf2bb7df3b1adeebb79efbb7af0bb -7be714ea09eabb76ecbb77edbb78e7bb -73e8bb74e9bb75e409e4bb70e5bb71e6 -bb72e1bb6de2bb6ee3bb6f0018ed2df3 -17f60cf6b9d0f7bb9af9bb9bfabb9cf3 -bb97f4bb98f5bb99f009f0bb94f1bb95 -f2bb96edbb91eebb92efbb93e714ea09 -eabb8eebbb8fecbb90e7bb8be8bb8ce9 -bb8de409e4bb88e5bb89e6bb8ae1bb85 -e2bb86e3bb870015ee25f414f809f8bb -aff9bbb0fabbb1f4bbacf6bbadf7bbae -eebba7efbba8f0bba9f1bbaaf2bbabe6 -14eb09ebbba5ecbb1eedbba6e6bba2e9 -bba3eabba4e1bb9de2bb9ee3bb9fe4bb -a0e5bba16bc3b470c1cf70a26871a2c0 -72a41b73a46b740019ee2df417f70cf7 -bb52f8bb53f9bb54faa591f4bb4ff5bb -50f6bb51f109f1bb4df2af6af3bb4eee -bb4aefbb4bf0bb4ce717ea0ceabb46eb -bb47ecbb48edbb49e7bb43e8bb44e9bb -45e409e4bb40e5bb41e6bb42e1bb3de2 -bb3ee3bb3f0018ee2df417f70cf7b9f0 -f8b9f1f9b9f2fab9f3f4b9edf5b9eef6 -b9eff109f1b9eaf2b9ebf3b9eceeb9e8 -efb9e9f0b73be814eb09ebb9e5ecb9e6 -edb9e7e8b9e2e9b9e3eab9e4e509e5b9 -dfe6b9e0e7b9e1e1b9dce3b9dde4b9de -0019ee2df417f70cf7bb0af8bb0bf9bb -0cfabb0df4bb07f5bb08f6bb09f109f1 -bb04f2bb05f3bb06eebb01efbb02f0bb -03e717ea0ceab9fdebb9feecb9ffedbb -00e7b9fae8b9fbe9b9fce409e4b9f7e5 -b9f8e6b9f9e1b9f4e2b9f5e3b9f60016 -ed2af514f809f8bb21f9bb22fabb23f5 -bb1ef6bb1ff7bb20f209f2bb1bf3bb1c -f4bb1deda90beebb19f0bb1ae614ea09 -eabb16ebbb17ecbb18e6bb13e8bb14e9 -bb15e1bb0ee2bb0fe3bb10e4bb11e5bb -120017ee2af414f709f7bb3af8bb3bfa -bb3cf4bb37f5bb38f6bb39f109f1bb34 -f2bb35f3bb36eebb31efbb32f0bb33e8 -14eb09ebbb2eecbb2fedbb30e8bb2be9 -bb2ceabb2de509e5bb28e6bb29e7bb2a -e2bb25e3bb26e4bb276ba2536ca2ab6d -a4066ea47b6f0014ec25f414f709f7b9 -d9f9b9dafab9dbf4b9d6f5b9d7f6b9d8 -ecb9d1efb9d2f0b9d3f1b9d4f3b9d5e7 -0fe7b9cde8b9cee9b9cfeab9d0ebb33b -e1b9c8e3b9c9e4b9cae5b9cbe6b9cc00 -18ed2df417f70cf7b972f8b973f9b974 -fab975f4b96ff5b970f6b971f109f1b9 -6cf2b96df3b96eedb969efb96af0b96b -e714ea09eab966ebb967ecb968e7b963 -e8b964e9b965e409e4b960e5b961e6b9 -62e1b95de2b95ee3b95f0019ee2df417 -f70cf7b98df8b98ef9b98ffab990f4b9 -8af5b98bf6b98cf109f1b987f2b988f3 -b989eeb984efb985f0b986e717ea0cea -b980ebb981ecb982edb983e7b97de8b9 -7ee9b97fe409e4b97ae5b97be6b97ce1 -b977e2b978e3b9790019ee47f417f70c -f7b9aaf8b9abf9b9acfab9adf4b9a7f5 -b9a8f6b9a9f123f1b9a1f226f3b9a602 -2a3241405912657ae9b9a5012ab9a24c -10c2b9a3127261e2b9a4eeb99eefb99f -f0b9a0e717ea0ceab99bebb99cecb902 -edb99de7b998e8b999e9b99ae409e4b9 -95e5b996e6b997e1b992e2b993e3b994 -0018ee2df417f70cf7b9c3f8b9c4f9b9 -c5fab9c6f4b9c0f5b9c1f6b9c2f109f1 -b9bdf2b9bef3b9bfeeb9baefb9bbf0b9 -bce714eb09ebb9b7ecb9b8edb9b9e7b7 -fce9b9b5eab9b6e409e4b9b2e5b9b3e6 -b9b4e1b9afe2b9b0e3b9b166c1a766a2 -5d67a2b268a2f869a44d6a0016ed2af3 -14f809f8b955f9b956fab957f3b952f4 -b953f5b954f009f0b94ff1b950f2b951 -edb94ceeb94defb94ee714ea09eab949 -ebb94aecb94be7b946e8b947e9b948e1 -b941e2b942e3b943e4b944e5b9450017 -ee2af514f809f8b7f9f9b7fafab7fbf5 -b7f6f6b7f7f7b7f8f109f1b7f3f2b7f4 -f3b7f5eeb7f0efb7f1f0b7f2e714eb09 -ebb7edecb7eeedb7efe7b7eae8b7ebe9 -b7ece409e4b7e7e5b7e8e6b7e9e1b7e4 -e2b7e5e3b7e60014ef25f414f709f7b9 -0ff8b910f9b911f4b90cf5b90df6b90e -efb907f0b908f1b909f2b90af3b90be8 -0fe8b902eab903ebb904ecb905edb906 -e1b7fde2b7fee4b7ffe5b900e6b90100 -17ef2af514f809f8b926f9b927fab928 -f5b923f6b924f7b925f209f2b920f3b9 -21f4b922efb91df0b91ef1b91fe714eb -09ebc822ecb91beeb91ce7b918e8b919 -eab91ae409e4b915e5b916e6b917e1b9 -12e2b913e3b9140015ef25f514f809f8 -b93df9b93efab93ff5b93af6b93bf7b9 -3cefb935f0b936f1b937f3b938f4b939 -e614ea09eab932ecb933edb934e6b92f -e7b930e8b931e1b92ae2b92be3b92ce4 -b92de5b92e61a25d62a29563a2ed64a4 -42650016ed2af514f809f8b7e1f9b7e2 -fab7e3f5b7def6b7dff7b7e0f209f2b7 -dbf3b7dcf4b7ddedb7d8eeb7d9efb7da -e614e909e9b7d5ebb7d6ecb7d7e6b7d2 -e7b7d3e8b7d4e1b7cde2b7cee3b7cfe4 -b7d0e5b7d10010eb1df10ff1b781f6b7 -82f7b783f8b784f9b785ebb77dedb77e -efb77ff0b780e70ce7b779e8b77ae9b7 -7beab77ce1b775e2b776e3b777e4b778 -0018ee2df417f70cf7b79bf8b79cf9b7 -9dfab79ef4b798f5b799f6b79af109f1 -b795f2b796f3b797eeb792efb793f0b7 -94e814eb09ebb78fecb790edb791e8b7 -8ce9b78deab78ee409e4b789e5b78ae7 -b78be1b786e2b787e3b7880017ed2af4 -14f709f7b7b4f9b7b5fab7b6f4b7b1f5 -b7b2f6b7b3f009f0b7aef1b7aff3b7b0 -edb7abeeb7acefb7ade714ea09eab7a8 -ebb7a9ecb7aae7b7a5e8b7a6e9b7a7e4 -09e4b7a2e5b7a3e6b7a4e1b79fe2b7a0 -e3b7a10015ed25f414f809f8b7caf9b7 -cbfab7ccf4b7c7f6b7c8f7b7c9edb7c2 -eeb7c3f0b7c4f1b7c5f2b7c6e714ea09 -eab7bfebb7c0ecb7c1e7b7bce8b7bde9 -b7bee1b7b7e3b7b8e4b7b9e5b7bae6b7 -bb66a6c567aa3268001e72c0f8e51af4 -0cf4b530f5b536f9a554fab556e5b3ca -e9b3d6efb50cf2b51f763f7658777479 -84e122032ab3a9372e43345310c4b3aa -1133b6b3aa10cdb3ab04e3b54ce5b54d -ebb54eeeb54ff6b55002e1b551e3b552 -efb55301e1b554f7b55572a25073a27b -74a282750014ed25f514f809f8b549f9 -b54afab54bf5b546f6b547f7b548edb5 -41f0b542f2b543f3b544f4b545e70fe7 -b53ce8b53de9b53eebb53fecb540e2b5 -37e3b538e4b539e5b53ae6b53b0cf017 -f50cf5b529f7b52af8b52bfab52cf0b5 -26f2b527f4b528eb09ebb523edb524ef -b525e1b520e3b521e5b52202e2b52dee -b52ef3b52f04e9b531efb532f3b533f5 -b534f8b53569c1116dae6d366ea2436f -a26b7010efb51e0010f11df50ff5b3fc -f6b3fdf7b3fef9b3fffab500f1b3f8f2 -b3f9f3b3faf4b3fbea0ceab3f5edb3f6 -eeb3cbf0b3f7e1b3f1e2b3f2e4b3f3e6 -b3f409e919e9b506ea32eeb509efb50a -f3b50b012ab50748126d6ee7b508e1b5 -01e4b502e5b503e7b504e8b5050010ec -1df20ff2b519f4b51af6b51bf7b51cf9 -b51decb515edb516efb517f0b518e50c -e5b511e8b512e9b513eab514e1b50de2 -b50ee3b50fe4b510694e6aa24b6ba24c -6c04e1b3ece2b3ede4b3eef4b3eff5b3 -f00feb1af20cf2b3e3f4b3e4f7b3e5f8 -b3e6ebb3dfecb3e0edb3e1efb3e2e70c -e7b3dbe8b3dce9b3ddeab3dee1b3d7e2 -b3d8e4b3d9e6b3da10e9b3e703e1b3e8 -e5b3e9e8b3eaebb3eb6434643e654867 -6e6802e9b3d3f2b3d4f9b3d501eeb3b2 -f9b3c905e809e8b3cee9b3cfedb3d0e1 -b3cbe4b3cce7b3cd01edb3d1f7b3d261 -3062a2656310e8b3c80015ee25f314f8 -09f8b3c0f9b3c1fab3c2f3b3bdf6b3be -f7b3bfeeb3b8efb3b9f0b3baf1b3bbf2 -b3bce826eb1beb2cecb3b6edb3b7012a -2e4812616ef4b3b5012ab3b45410d7b3 -b5e8b3b1e9b3b2eab3b3e1b3ace3b3ad -e4b3aee5b3afe7b3b004e1b3c3e2b3c4 -eeb3c5efb3c6f5b3c700177199e614ef -09efb144f2b14df9b169e6a254e9b12c -eab1357612762a772ee1b11310f2b166 -01e1b167e5b16871a24272a243750eed -1af40cf4b162f5b163f6b164f9b165ed -b15eeeb15ff1b160f2b161e50ce5b15a -e6b15be8b15ce9b15de2b158e326e4b1 -59012ab1274112646cedb12810f3b14c -0aef14f209f2b155f3b156f4b157efb1 -52f0b153f1b154e3b14ee4b14fe5b14d -ebb150edb1516b556e286e2e6f3e7010 -e5b14b02e2b141e7b142e9b14305ee09 -eeb148f2b149f3b14ae4b145e9b146ed -b1476b346c3e6d01f0b13ff5b14001eb -b136f6b13706ec0cecb13beeb13cf2b1 -3df9b13ee1b138e8b139e9b13a662b66 -5c67666907f00cf0b131f2b132f4b133 -f7b134e1b12de5b12ee6b12fecb13001 -e9b129edb12a10f2b12b613062a24665 -10f2b1260012ec20f40ff4a3b9f5b122 -f8b123f9b124fab125ecb11dedb11eee -b11ff0b120f2b121e70fe7b118e8b119 -e9b11aeab11bebb11ce1b114e2b115e4 -b116e6b11710eca799001f71c18a7953 -ec0cecb300eeb31af5b365f6b37b7930 -7a8ee1b16ae4b1a40dec17ef0cefb3a2 -f2b3a3f9b3a4fab3a5ecb39fedb3a0ee -b3a1e50ce5b39be6b39ce7b39de9b39e -e1b184e2b399e4b39a02e1b3a6e9b3a7 -eeb3a875c0c5753676a25b77a2867810 -f8b3980016ed2af414f709f7b378f8b3 -79fab37af4b376f5b377f6af89f009f0 -b373f1b374f2b375edb370eeb371efb3 -72e614e909e9b36debb36eecb36fe6b3 -6be7b31ae8b36ce1b366e2b367e3b368 -e4b369e5b36a0ced17f00cf0b385f2b1 -d4f3b386f9b387edb382eeb383efb384 -e609e6b37feab380ecb381e1b37ce3b3 -7de5b37e0fea1af40cf4b394f5b395f7 -b396f8b397eab390edb391eeb392f2b3 -93e50ce5b38ce6b38de7b38ee9b38fe1 -b388e2b389e3b38ae4b38b7140725073 -a2567402e1b363e9b364f5b1d502e1b3 -4aeeb34bf2b34c0012ed20f60ff6b359 -f7b35af8b35bf9b35cfab35dedb354f1 -b355f3b356f4b357f5b358e50fe5afc4 -e7b350e8b351e9b352eab353e1b34de2 -b192e3b34ee4b34f04ecb35eeeb35fef -b360f0b361f7b36269c17f6dc0e26d40 -6e9e6fa2807002e1b347e5b348eeb349 -0dee17f60cf6b316f8b317f9b318fab3 -19eeb313f2b314f5b315e70ce7b30fe8 -b310ecb311edb312e1b30ce2b30de4b3 -0e0013ec20f20ff2b32af4b32bf5b32c -f7b32dfab32eecb325edb326eeb327ef -b328f1b329e70fe7b320e8b321e9b322 -eab323ebb324e1b31be2b31ce3b31de4 -b31ee5b31f0018ed2df317f60cf6b343 -f7b344f8b345f9b346f3b340f4b341f5 -b342f009f0b33df1b33ef2b33fedb33b -eeb328efb33ce714ea09eab338ebb339 -ecb33ae7b335e8b336e9b337e409e4b3 -32e5b333e6b334e1b32fe2b330e3b331 -69846aa26d6ba27a6c0beb14f209f2b3 -09f5b30af7b30bebb306ecb307efb308 -e809e8b304e9af56eab305e2b301e3b3 -02e4b3030011ee1df30ff3b1eff4b1f0 -f8b1f1f9b1f2fab1f3eeb1ebf0b1ecf1 -b1edf2b1eee50fe5b1e6e7b1e7e8b1e8 -ecb1e9edb1eae1b1e2e2b1e3e3b1e4e4 -b1e504ebb1f4edb1f5eeb1f6f2b1f7f5 -b1f806ee0ceeb1fcefb1fdf0b1fef5b1 -ffe1b1f9e4b1fae5b1fb65a0656a66a2 -6667a26a6808ee0feeb1ddefb1def2b1 -dff3b1e0f4b1e1e1b1d9e3b1dae5b1db -ebb1dc0013ec20f60ff6b1c6f7b1c7f8 -b1c8f9b1c9fab1caecb1c2efb1c3f1b1 -c4f2adbcf3b1c5e70fe7b1bde8b1bee9 -b1bfeab1c0ebb1c1e1b1b8e2b1b9e3b1 -bae4b1bbe6b1bc01ebb1cbf8b1cc0cec -17f20cf2b1d5f4b1d6f5b1d7f7b1d8ec -b1d3eeb1d4efaff8e509e5b1d0e7b1d1 -ebb1d2e1b1cde2b1cee4b1cf61a24862 -a2a363a2fb640012eb20f10ff1b1b3f2 -b1b4f4b1b5f5b1b6f8b1b7ebb1aeecb1 -afedb1b0eeb1b1efb1b2e60fe6b1a9e7 -b1aae8b1abe9b1aceab1ade2b1a5e3b1 -a6e4b1a7e5b1a80019ee2df417f70cf7 -b180f8b181f9b182fab183f4b17ef5b1 -7ff6adcbf109f1b17bf2b17cf3b17dee -b178efb179f0b17ae717ea0ceab174eb -b175ecb176edb177e7b171e8b172e9b1 -73e409e4b16ee5b16fe6b170e1b16be2 -b16ce3b16d0018ed2df317f70cf7b199 -f8b19af9b19bfab19cf3b196f5b197f6 -b198f009f0b193f1b194f2b195edb190 -eeb191efb192e714ea09eab18debb18e -ecb18fe7b18ae8b18be9b18ce409e4b1 -87e5b188e6b189e1b184e2b185e3b186 -06ec0cecb1a0eeb1a1f2b1a2f4b1a3e3 -b19de4b19ee6b19f63cb0c63a4e464ae -af65001d73927a29ef0cefafeaf3aff6 -f4afbdf5a5f87a44e5afabecafc4ee01 -2aafd953126861f7afda01e1b111e5b1 -12762076387748784c7901e1b10fefb1 -1002e5b10ae8b10beeb10c10efb10d10 -f4b10e732e74667510e4b10908eb0feb -affbedaffcf3affdf5affef9afffe5af -f7e7aff8e8aff9e9affa08f30ff3b104 -f4b105f5b106f8b107fab108e2b100ee -b101efb102f2b1036ac0f16e636e6a6f -a25670a2577208eb0febaff1f2aff2f3 -aff3f4aff4f7aff5e1afede7afeee8af -efe9aff00eed1af20cf2afe6f6afe7f7 -afe8f8afe9edafe2eeafe3efafe4f1af -e5e40ce4afdee6afdfe8afe0ecafe1e1 -afdbe2afdce3afdd10f4afeb10e9afec -6aa24a6ba24b6ca26e6d0dee17f50cf5 -afd5f7afd6f8afd7faafd8eeafd2f0af -d3f3afd4e71ee7afcde9afceeb26edaf -d1012a2e4e126b6fefafd0012aafcf47 -10ceafd0e1afcae2afcbe5afcc10e1af -b80aec14f009f0afc1f2afc2f9afc3ec -afbeedafbfefafc0e1afb9e5afbae7af -bbe9afbcebafbd05ef09efafc8f0a3f2 -f5afc9e5afc5ebafc6edafc7662f663e -674e686a6902f0afb5f4afb6f6afb702 -e1aface5afade9afae04e1afafecafb0 -edafb1efafb2f9afb310f5afb4613462 -386301f2afa9f9afaa10e1afa305ef09 -efafa6f2afa7f5afa8e3afa4e7afa5eb -a7d5002272c161e127f219f2ad2df3ad -44f52cf6ad74f9ad7d012aad6347126c -61e7ad64e1ab49e5ab88e8ab98efad0c -7643764e7758787e79827a04e5ad44e8 -ad81ebad82eead83f4ad8401e7ad75ee -ad7605e509e5ad79e7ad7af4ad7be1ad -77e2ad78e4ad2d10e8ad7c02e1ad7ee2 -ad7fefad80729673a28674a2b4750eec -1af50cf5ad70f6ad71f8ad72f9ad73ec -ad6cefad6df0ad6ef4ad6fe80ce8ad68 -e9ad69eaad6aebad6be1ad65e2ad66e3 -ad670015ed25f414f809f8ad41f9ad42 -faad43f4ad3ef6ad3ff7ad40edad39ee -ad3aefad3bf1ad3cf3ad3de714ea09ea -ad36ebad37ecad38e7ad33e8ad34e9ad -35e1ad2ee2ad2fe3ad30e4ad31e6ad32 -0df017f60cf6ad4ff7ad50f9ad51faad -52f0ad4cf3ad4df4ad4eea0ceaad48eb -ad49edad4aefad4be1ad45e2ad46e8ad -470fee1af40cf4ad5ff5ad60f9ad61fa -ad62eead5befad5cf0ad5df3ad5ee70c -e7ad57e8ad58ecad59edad5ae1ad53e3 -ad54e4ad55e5ad5669c19b6dc0d06d3a -6e826fa25f70a2a07110e4ad2c0aec14 -f209f2abd6f3abfcf4abfdecabfaeea4 -b6efabfbe1abf5e5abf6e7abf7e9abf8 -ebabf90dec17f30cf3ad08f4ad09f7ad -0af8ad0becad05f0ad06f1ad07e70ce7 -ad01e8ad02e9ad03ebad04e1abfee2ab -ffe3ad000013ec20f40ff4ad1cf5ad1d -f8ad1ef9ad1ffaad20ecad17edad18ef -ad19f0ad1af1ad1be60fe6ad12e7ad13 -e8ad14eaad15ebad16e1ad0de2ad0ee3 -ad0fe4ad10e5ad110aee14f509f5ad29 -f8ad2af9ad2beead26efad27f3ad28e1 -ad21e2ad22e3ad23e7ad24e9ad25699c -6aa2616ba28c6c0fec1af40cf4abf1f5 -abf2f7abf3f9abf4ecabededabeeefab -eff3abf0e80ce8abe9e9abeaeaabebeb -abece1abe5e3abe6e4abe7e5abe80aed -14f209f2abc6f7abc7f9abc8edabc3ee -abc4f0abc5e1abbee2abbfe3abc0e5ab -c1e8abc20cee17f20cf2abd2f3abd3f6 -abd4f9abd5eeabcfefabd0f0abd1e909 -e9abccebabcdedabcee1abc9e5abcae8 -abcb0ef21af60cf6abe1f8abe2f9abe3 -faabe4f2abddf3abdef4abdff5abe0ed -0cedabd9eeabdaefabdbf1abdce1abd6 -e2abd7ecabd865c0e465a2af66a2c467 -a2ce680013ee20f40ff4abb9f7abbaf8 -abbbf9abbcfaabbdeeabb4efabb5f0ab -b6f1abb7f2abb8e973e938eaabb0ebab -b1ecabb2edabb3022a3c42a259481161 -6e01e2abaff4abaa0b4d2d5417542e55 -385610c4abad01c8aba9d7abaa01cbab -abd3abac4dcc9a502a5310d2aba802c6 -aba5c8aba6daaba7470e473048cc7e49 -10c4aba310c6aba12aab9e412a4210ce -aba010d5ab9f126f70efabaee2ab99e4 -ab9ae6ab9be7ab9ce8ab9d06eb0cebab -8ceeab8df4ab8ef9ab8fe1ab89e2ab8a -e7ab8b03e1ab90e4ab91e7ab92edab93 -03e1ab94e3ab95e7ab96ebab97616a62 -a27563a2b06408ea0feaab83edab84ef -ab85f2ab86faab87e5ab7fe6ab80e8ab -81e9ab820016ed2af314f809f8ab5ef9 -ab5ffaab60f3ab5bf6ab5cf7ab5df009 -f0ab58f1ab59f2ab5aedab55eeab56ef -ab57e614ea09eaab52ebab53ecab54e6 -ab4fe7ab50e8ab51e1ab4ae2ab4be3ab -4ce4ab4de5ab4e0011ef1df40ff4ab6e -f5ab6ff6ab70f7ab71f9ab72efab6af1 -ab6bf2ab6cf3ab6de90fe9ab65eaab66 -ebab67ecab68eeab69e2ab61e3ab62e4 -ab63e7ab640bec14f009f0ab7cf1ab7d -f2ab7eecab79edab7aefab7be709e7ab -76e8ab77eaab78e3ab73e4ab74e5ab75 -001a6fc1b2776ce10ce1ad85e5adbcf6 -af8afaa34f775079887a05e709e7afa0 -ecafa1eeafa2e1af9ee4af9fe5af0a08 -f30ff3af8ff5af79f7af90f9af91faaf -92e1af8cebaf8decadaaf2af8e0aed14 -f209f2af9bf5af9cf9af9dedaf98eeaf -99efaf9ae1af93e2af94e4af95e7af96 -e9af9773b37334746075a24e7610e1af -8b06eb0cebaf5eeeaf5fefaf60f1af61 -e2af5be8af5ce9af5d0def17f30cf3af -6cf4af6df5af6ef9af6fefaf69f0af6a -f2af6be80ce8af65e9af66ebaf67edaf -68e1af62e2af63e4af640019ee2df417 -f70cf7af86f8af87f9af88faaf89f4af -83f5af84f6af85f109f1af80f2af81f3 -af82eeaf7defaf7ef0af7fe717ea0cea -af79ebaf7aecaf7bedaf7ce7af76e8af -77e9af78e409e4af73e5af74e6af75e1 -af70e2af71e3af726fa24770a285720d -ef17f30cf3af57f4af58f5af59f9af5a -efaf54f1af55f2af56e81ee832e9af52 -eca7beeeaf53012a2e4d126f6ee7af51 -012aaf504310ceaf51e3af4de5af4ee7 -af4f0012ee20f40ff4af47f6af48f7af -49f8af4af9af4beeaf42efaf43f0af44 -f2af45f3af46e60fe6af3ee8af3fe9ad -d8ebaf40ecaf41e1af3ae2af3be3af3c -e5af3d10f0af4c68c15d6b9d6b966ca2 -506da2576e0eee1af50cf5af36f6af37 -f7af38f9af39eeaf32efaf33f2af34f4 -af35e70ce7af2fe9af30eaad8aebaf31 -e1af2ce4af2de5af2e06ec0ceca540f2 -af14f3af15f8af16e1af11e7af12ebaf -1302e7af17edaf18eeaf190011ed1df5 -0ff5af27f6af28f7af29f8af2af9af2b -edaf23efaf24f2af25f3af26e50fe5af -1ee6af1fe7af20ebaf21ecaf22e1af1a -e2af1be3af1ce4af1d689669a2666a0f -eb1aef0cefaf0df2af0ef5af0ff7af10 -ebaf09ecaf0aedaf0beeaf0ce50ce5af -05e6af06e9af07eaaf08e1af01e2af02 -e3af03e4af040cef17f50cf5ade8f6ad -e9f7adeaf8adebefade5f2ade6f3ade7 -ec09ecade2edade3eeade4e4addfe7ad -e0e9ade10016ee2af414f809f8adfef9 -adfffaaf00f4adf0f5adfcf7adfdf109 -f1adf9f2adfaf3adfbeeadf5efadf7f0 -adf8e714ea09eaadf4ebadf5ecadf6e7 -adf1e8adf2e9adf3e1adece2adede3ad -eee4adefe6adf064a264a24265a26567 -0011ec1df30ff3addaf4addbf7addcf8 -adddfaaddeecadd6eeadd7efadd8f2ad -d9e50fe5add1e7add2e8add3e9add4eb -add5e1adcde2adcee3adcfe4add00aea -14f209f2adb9f3adbaf7adbbeaadb6ee -adb7efadb8e1adb1e4adb2e5adb3e7ad -b4e9adb50fec1af20cf2adc9f3adcaf6 -adcbfaadccecadc5edadc6eeadc7f1ad -c8e70ce7adc1e8adc2e9adc3ebadc4e3 -adbde4adbee5adbfe6adc0613662a256 -6301e3adaff2adb00015ed25f314f709 -f7ad99f8ad9afaad9bf3ad96f5ad97f6 -ad98edad91efad92f0ad93f1ad94f2ad -95e714ea09eaad8eebad8fecad90e7ad -8be8ad8ce9ad8de1ad86e3ad87e4ad88 -e5ad89e6ad8a0012ed20f40ff4adaaf5 -adabf6adacf7adadf9adaeedada5eead -a6efada7f0ada8f1ada9e60fe6ada0e7 -ada1e9ada2eaada3ecada4e1ad9ce2ad -9de4ad9ee5ad9f2ab40061ccec620023 -73c2d0e51ded0feda905eea91eefa936 -f2a979f3a993e5a74be7a778e8a78ee9 -a7a777c14b773878a26179a2a77aa2e8 -e1a5ea0017ed2af414f809f8ab07f9ab -08faab09f4ab04f5ab05f7ab06f109f1 -ab01f2ab02f3ab03eda9feefa9fff0ab -00e714ea09eaa9fbeba9fceca9fde7a9 -f8e8a9f9e9a9fae409e4a9f5e5a9f6e6 -a9f7e1a9f2e2a9f3e3a9f40014ed25f2 -14f609f6ab1bf7ab1cfaab1df2a9c2f3 -ab19f5ab1aedab14eeab15efab16f0ab -17f1ab18e80fe8ab0fe9ab10eaab11eb -ab12ecab13e1ab0ae2ab0be3ab0ce6ab -0de7ab0e0013ec20f30ff3ab2df6ab2e -f7ab2ff8ab30faab31ecab28edab29ee -ab2af0ab2bf2ab2ce60fe6ab23e8ab24 -e9ab25eaab26ebab27e1ab1ee2ab1fe3 -ab20e4ab21e5ab220017ee2af514f809 -f8ab46f9ab47faab48f5ab43f6ab44f7 -ab45f109f1ab40f2ab41f4ab42eeab3d -efab3ef0ab3fe814eb09ebab3aecab3b -edab3ce8ab37e9ab38eaab39e409e4ab -34e5ab35e6ab36e1ab32e2ab33e3a7ca -73a25a74a2aa75a2ff760016ed2af514 -f809f8a9eff9a9f0faa9f1f5a9ecf6a9 -edf7a9eef109f1a9e9f2a9eaf4a9ebed -a9e6eea9e7efa9e8e614e909e9a9e3ea -a9e4eba9e5e6a9e0e7a9e1e8a9e2e1a9 -dbe2a9dce3a9dde4a9dee5a9df0016ee -2af414f709f7a9a8f8a9a9f9a9aaf4a9 -a5f5a9a6f6a9a7f109f1a9a2f2a9a3f3 -a9a4eea99fefa9a0f0a9a1e814eb09eb -a99ceca99deda99ee8a999e9a99aeaa9 -9be1a994e2a995e3a996e5a997e6a998 -0017ef2af514f809f8a9bff9a9c0faa9 -c1f5a9bcf6a9bdf7a9bef209f2a9b9f3 -a9baf4a9bbefa9b6f0a9b7f1a9b8e714 -ea09eaa9b3eda9b4eea9b5e7a9b0e8a9 -b1e9a9b2e409e4a9ade5a9aee6a9afe1 -a9abe2a74de3a9ac0018ee2df417f70c -f7a9d7f8a9d8f9a9d9faa9daf4a9d4f5 -a9d5f6a9d6f109f1a9d1f2a9d2f3a9d3 -eea9ceefa9cff0a9d0e714ea09eaa9cb -eba9cceda9cde7a9c8e8a9c9e9a9cae4 -09e4a9c5e5a9c6e6a9c7e1a9c2e2a9c3 -e3a9c46ac3186ec1a56ea2656fa2b570 -a2fb71a44b720018ee2df417f70cf7a9 -8ff8a990f9a991faa992f4a98cf5a98d -f6a98ef109f1a989f2a98af3a98beea9 -86efa987f0a988e814eb09eba983eca9 -84eda985e8a980e9a981eaa982e409e4 -a97de6a97ee7a97fe1a97ae2a97be3a9 -7c0016ee2af514f809f8a933f9a934fa -a935f5a930f6a931f7a932f109f1a92d -f2a92ef3a92feea92aefa92bf0a92ce6 -14ea09eaa927eba928eda929e6a924e7 -a925e9a926e1a91fe2a920e3a921e4a9 -22e5a9230014ef25f514f809f8a949f9 -a94afaa94bf5a946f6a947f7a948efa9 -41f0a942f1a943f2a944f4a945ea0fea -a93ceba93deca93eeda93feea940e1a9 -37e2a938e5a939e6a93ae8a93b0016ef -2af514f809f8a960f9a961faa962f5a9 -5df6a95ef7a95ff209f2a95af3a95bf4 -a95cefa957f0a958f1a959e814eb09eb -a954eca955eda956e8a951e9a952eaa9 -53e1a94ce3a94de4a94ee5a94fe7a950 -0015ef25f414f709f7a976f8a977faa9 -78f4a973f5a974f6a975efa96ef0a96f -f1a970f2a971f3a972e714eb09eba96b -eca96ceda96de7a968e9a969eaa96ae1 -a963e2a964e3a965e4a966e6a9676aa2 -5f6ba2b76ca40f6d0017ed2af314f709 -f7a91bf8a91cfaa91df3a918f5a919f6 -a91af009f0a915f1a916f2a917eda912 -eea913efa914e714ea09eaa90feba910 -eca911e7a90ce8a90de9a90ee409e4a9 -09e5a90ae6a90be1a906e2a907e3a908 -0018ee2df417f70cf7a7d0f8a7d1f9a7 -d2faa7d3f4a7cdf5a7cef6a7cff109f1 -a7caf2a7cbf3a7cceea7c7efa7c8f0a7 -c9e814eb09eba7c4eca7c5eda7c6e8a7 -c1e9a7c2eaa7c3e409e4a7bee6a7bfe7 -a7c0e1a7bbe2a7bce3a7bd0018ee2df4 -17f70cf7a7e9f8a7eaf9a7ebfaa7ecf4 -a7e6f5a7e7f6a7e8f109f1a7e3f2a7e4 -f3a7e5eea7e0efa7e1f0a7e2e814eb09 -eba7ddeca7deeda7dfe8a7dae9a7dbea -a7dce409e4a7d7e6a7d8e7a7d9e1a7d4 -e2a7d5e3a7d60017ee2af414f809f8a9 -02f9a903faa904f4a7fff6a900f7a901 -f109f1a7fcf2a7fdf3a7feeea7f9efa7 -faf0a7fbe714ea09eaa7f6eba7f7eda7 -f8e7a7f3e8a7f4e9a7f5e409e4a7f0e5 -a7f1e6a7f2e1a7ede2a7eee3a7ef65c1 -9b65a25366a29e67a2e968a434690014 -ee25f414f709f7a7b8f9a7b9faa7baf4 -a7b5f5a7b6f6a7b7eea7b1efa7b2f0a7 -b3f1a7b4f2a7aae60fe6a7ade7a7aeeb -a723eca7afeda7b0e1a7a8e2a7a9e3a7 -aae4a7abe5a7ac0015ef25f514f809f8 -a75ff9a760faa761f5a75cf6a75df7a7 -5eefa757f0a758f1a759f3a75af4a75b -e614ea09eaa754eba755eda756e6a751 -e8a752e9a753e1a74ce2a74de3a74ee4 -a74fe5a7500015ee25f414f809f8a775 -f9a776faa777f4a772f5a773f7a774ee -a76defa76ef0a76ff1a770f3a771e614 -ea09eaa76aeca76beda76ce6a767e7a7 -68e8a769e1a762e2a763e3a764e4a765 -e5a7660015f025f514f809f8a78bf9a7 -8cfaa78df5a788f6a789f7a78af0a783 -f1a784f2a785f3a786f4a787e714ed09 -eda71eeea781efa782e7a77ee9a77fea -a780e1a779e2a77ae3a77be4a77ce6a7 -7d0018ed2df317f60cf6a7a3f7a7a4f9 -a7a5faa7a6f3a7a0f4a7a1f5a7a2f009 -f0a79df1a79ef2a79feda79beea79cef -a78ee714ea09eaa798eba799eca79ae7 -a795e8a796e9a797e409e4a792e5a793 -e6a794e1a78fe2a790e3a79161a26562 -a2b563a40a640019ee2df417f70cf7a7 -47f8a748f9a749faa74af4a744f5a745 -f6a746f109f1a741f2a742f3a743eea7 -3eefa73ff0a740e717ea0ceaa73aeba7 -3beca73ceda73de7a737e8a738e9a739 -e409e4a734e5a735e6a736e1a731e2a7 -32e3a7330014ef2ff514f809f8a5fef9 -a5fffaa700f5a5fbf6a5fcf7a5fdefa5 -f5f032f1a5f8f2a5f9f3a5fa012aa5f6 -4b127261e9a5f7e70fe7a5f0e8a5f1ea -a5f2eca5f3eea5f4e1a5ebe2a5ece3a5 -ede5a5eee6a5ef0017ee2af414f709f7 -a716f8a717f9a718f4a713f5a714f6a7 -15f109f1a710f2a711f3a712eea70def -a70ef0a70fe714eb09eba70aeca70bed -a70ce7a707e9a708eaa709e409e4a704 -e5a705e6a706e1a701e2a702e3a70300 -18ed2df317f60cf6a72df7a72ef9a72f -faa730f3a72af4a72bf5a72cf009f0a7 -27f1a728f2a729eda724eea725efa726 -e714ea09eaa721eba722eca723e7a71e -e8a71fe9a720e409e4a71be5a71ce6a7 -1de1a719e2a71ae3a5f300184dc2af54 -c0f257375736584e59665a12616ee2d5 -be01612c631168efc5981172e1d5bd01 -702c731175f8a3c21165efc92a01652c -691169e9b58d117ae9b9a5544455a2ae -5601612c691174e8d5bc1169e9d5bb08 -685e683c698c6ea2466fa248751174e7 -d5ba106101e158e9042ad12b43324b36 -4c3a5410c8d12b10cebd1110c8d5b610 -c1d5b7012aaf8a4d10d6af8a01622a72 -10e8d5b810f4012aa9364210d4a34f11 -73e1c5e301642a7410efd36410f2d5b9 -61346580668667116ce7d5b5056d116d -2e6e327610f4a7ff10eccf9f10e7d35f -67346b386c01e5cfe5f5b91310e2d5b2 -10f2d5b3116cf5cff7116ee7d5b41267 -61f2d39750c0c850a27652a2ad530669 -4769426f6a759079016c2a7210e3abe7 -10efd5b101643e6e01e4cd1ae8012acd -704c10cbcd7010e4d5ae02672e723879 -10efabf701e4cdedefd5af10e1cf1510 -6e01e4d5b0f5cf66613e675e6801612a -7210e4d5ad10f7afda026d2e72327510 -f2cbe610f2cdc810e2d5ac116ef7a565 -046138654c68526c78721174e9d5aa01 -6c2a7510e3ad5510eda54c1172edd5a8 -02612e6c326e10f8c94310e7d5a901e9 -c7ecf0c7ed1172e4b3f3026a306f3675 -116ef2c5ac116ee7d5ab1168e7cb714d -9a4ea2b34f05722272307344751167f2 -c7d8016b2a7910e1c7ac10e8c7c90167 -2a6d10e1d5a710e5c7bc67306c366e11 -61efd5a61161edd5a51163ebcbe00772 -2e725a7460756679116df2032aa9d249 -2e4d325410c8d59e10ceb92210cda9d2 -116fefc1c11165e9d59c116cf4d59d61 -4265746c9a6f01642a6e10e7af5110e9 -d59b0368326b366e3a7210e3d59710ea -d59410e1d59501e4c368e9d596026434 -6e387201e3d599efd59a10e6af1f10e4 -d5981179edc1280461386258655e6b64 -731168f5d5a402672e6e327210e2d5a1 -10edd59f10e4d5a01161f4a54b1177e1 -d5a2116fef012aafd04d10ccd5a347c4 -614ac36d4aa6f14ba80a4c03614665a6 -cd69a6cf7901632a6410e9d59310e9d5 -92026ea6aa6fa6ab7410ee001d4ac15f -53a1571757ace458ace8592a5a10d7cd -d202c4d56cc5d56cd4d52e534854a245 -55a2705603c1d529c5d52bced52ad5a7 -a70ece1ad40cd4d51ed5bb18d6d51fd9 -d58dced51bcfcde7d2d51cd3d58cc90c -c9cdaccad519cbcd93cdd51ac3d518c4 -d56bc5cf670ccd17d20cd2d1e7d6d342 -d7d1fbdacf6ecdd15dced590cfd1b4c8 -09c8d58fcbd165ccd524c4d58ec6d522 -c7d52304c1d591c7d526d3afd9d9d527 -dad5284d8f4d484ea24f50a2645203c5 -d517cfc16cd5bb18d7cbc80011cf1dd5 -0fd5d505d6d589d8d506d9bf37dad507 -cfd587d1d503d2d588d4c1e3c60fc6d5 -02c7bfb3cbd586cca905cdb777c1d585 -c3d500c4d501c5cd0406c90cc9d50bcc -af83cfc395d0d58ac1d508c3d509c5d5 -0a0bcc14d409d4d515d7c7f4d9b31acc -c96acdd512d2d513c7c5c1c7d1d0c8b1 -30cbd58b4a564b5a4c06d30cd3d3fcd4 -bdeed5d3fdd6bf0dc2d583c9d3fbcbd5 -8410cfd58002c5d3f5cdd581dad58242 -c0ee465b4662477248a2444907d10cd1 -d57ed2d57fd3b568d4b5d7c3d3f2c4b5 -6bccd57cced57d02c9b12ccfb144d2b1 -4d0ace0cd2c62cd2d57ad4d3efd7d3f0 -c1d3eac5d579c6d3ebc8a3b9ccb97604 -cbd57bced3f1d2b51fd4b530d5b53642 -5e43a24544a2794506c70cc7d577d2d5 -78d3aff6d4d56ac1d3e6c3d3e7c5afbd -0ecc0fd2c643d2c9e1d4d572d5b777d6 -d3d7c60cc6d3d0c7d571c9cb9acad3d2 -c1a993c4d570c5d3cf0fce1ad60cd6d3 -e1d7c7f0d9d575daad44ced574cfd3de -d2d3dfd5d3e0c80cc8d3dac9d3dbccd3 -dccdd3ddc3d573c4d3d8c6cd47c7d3d9 -04c5adbccad3e3cbad85cfd3e4dad576 -343d34aea2377c3882410bd214d709d7 -d3cdd8d3cedaa5ded2d3cad3d3cbd4d3 -cccc09cca3cfcdd56fcfd3c9c4d3c6c5 -d56dc6d56e1133b6d56b1138b6d56c2a -afd9312c321133b0d56a1137b2bb1810 -e1c5a410ef012abdbd4c10c1bdbd1170 -e3bd30026d2e6e327310f5bd6610e2bd -5c01e1bbe4e2b31801613a701161ee01 -2ab5f94a10d0b5f9016d2a7610e1d565 -10efd564066e256e346f3a7254741168 -e9d5691164e1b9ae1172e5012ab9c74b -01d0d3f7d2b9c71161e9a5f761306850 -691174f3d568026c2e6e327710e9d567 -10e9afc310e1d56602612e6d326f10ea -cd1910f2c9c510f2012ab9914b10c8b9 -91473448a26a49127461ecb105056f45 -6f4a726475026a2e6b327210f5c7e110 -f2b36510e8d55a016e2a7410e8b34101 -e7d558edaff80161506510eb032aafc4 -432e47325410d2a78b10d9d3e210d2af -c410eed559613065366c1161e7ad6411 -72e1d557116ff2012ab1c34710c5b1c3 -056c186c306d3675116ee7d5631175f7 -b3f0106e01e7b508f0b507613265a247 -691172e1d562016e2a7410f2a54a05ef -2defd55df35ef4042aabaa4332483c4d -405410d7abaa01c1d55eced55f10cbab -a210cfaba4012aab9e4310ceab9ee2ab -afe7d55be9d55c1162f2032ab3ca4934 -53385501c1b72bd3d56110ccb3ca10c5 -d56043c135437444a2ee450267446c4a -741168e9012aa3e54501d2d3e9d4a3e5 -1179f0afb301622a7910edd55610e1d5 -550461a28e68a29d6fa2ac70a2ae7911 -72ec0e4b48541d5432553c58465910d5 -cd0201cad114d2d54d01c1d3a1dad54e -10cbd54f4b324d3c52525310cbd54c01 -c7bbb2dad3f903c4d549c5d54acbbf26 -ceaf5002cfd54bd3cd02d5cbb9421f42 -32434247464910d2d54802c1d546c7a7 -78d9a74b10d3cd0201c551d2d5472acb -b938364102c6d543ccd544dad5451139 -b0cd02026b2e6e327210e9d54010edab -7c10f3b59402612e65327210f3d54110 -edabce10f2abb81170f4ad1a016d2a72 -10f4afaa10eed54203653469866f8c75 -1170ecd5541176e106491749324d364e -3a5010cba9bd10ceb3d610d5d55110d0 -c3d82ab3d6422a4610cab3da10d4d550 -1161ebd5521167f2d5532aa25441a8a3 -42056f1f6f3e72447501672a6810e4d5 -3f10e9d53e1170efabae106101e8c961 -e9d53d6130655c68116bf3d53c036c32 -6d36733a7410ebd53b10e9d53a10f5a5 -fe10f3a9a2116ee7012aa91e4210c4a9 -1e00204ac1ba52c0cf5638563c575858 -6259665a01d2d3d8d7cdd204c1d529c4 -d52ac5d52bced52ad5a7a701c6d52cd3 -cdbd10cbd52d03c4d3c5c5d3c5d4d52e -d5cd025246536c54a25a5503c1d3a1c7 -d526d9d527dad52805d309d3cd02d5cb -b9d7cbc8c5d517c8cdd2cfc16c0fce1a -d40cd4d51ed5cbb9d6d51fd9d520ced5 -1bcfcde7d2d51cd3d51dc90cc9cdacca -d519cbcd93cdd51ac1d50cc3d518c4d3 -c4c5cf670ecd1ad20cd2d1e7d6d342d7 -abaadacf6ecdd15dced525cfd1b4d0d5 -24c80cc8d12bcad114cbd165ccd524c4 -d521c6d522c7d5234e5b4e344fa80c50 -665110c1d51608c90fc9d50bccaf83cf -c395d0c3d8d4d50cc1d508c3d509c5d5 -0ac8a7a70dcd17d40cd4d515d7c7f4d9 -b31adad50ecdd512d2d513d3d514c70c -c7d1d0c8b130cbd511ccc96ac1d50ec5 -d50fc6d5104aa2484ba24c4ca2644d00 -12ce20d50fd5d505d6af8ad8d506d9bf -37dad507ceaf50cfaba4d1d503d2d504 -d4c1e3c60fc6d502c7bfb3cbbf26cca9 -05cda9d2c1d3ffc3d500c4d501c5cd04 -01cfd3f4d0b5f907d00cd0d3f7d2b9c7 -d7d3f8dad3f9c5d3f5c7bbb2c8b991cd -d3f608d30fd3d3fcd4bdeed5d3fdd6bf -0dd9d3fec1bdbdc2d3fac9d3fbcbcd70 -42c11f466b4662477848a24f4907d10c -d1d3f3d2b113d3b568d4b5d7c3d3f2c4 -b56bccb3caceb3d603c9b12ccfb144d2 -b14dd8b14d0ace14d209d2afc4d4d3ef -d7d3f0ced3ecd0d3edd1d3eec1d3eac5 -b1c3c6d3ebc8a3b9ccb97605d409d4b5 -30d5b536d6d3d0cbaba2ced3f1d2b51f -426443a25a44a2924507c80cc8d3e8d2 -d3e9d3aff6d4a3e5c1d3e6c3d3e7c5af -bdc7a5480010cc1dd20fd2c9e1d4a34f -d5a9d2d6d3d7d9a74bccd3d3ced3d4cf -d3d5d1d3d6c70cc7a778c8d3d1c9cb9a -cad3d2c1a993c4a91ec5d3cfc6d3d000 -10ce1dd50fd5d3e0d6d3e1d7c7f0d9d3 -e2daad44ceab9ecfd3ded2d3dfd3cd02 -c80cc8d3dac9d3dbccd3dccdd3ddc3bf -38c4d3d8c6cd47c7d3d906cb0ccbad85 -cfd3e4d9d3d2dad3e5c4adbcc5adbcca -d3e3354b3586378c3892410ccf17d40c -d4d3ccd7d3cdd8d3cedaa5decfd3c9d2 -d3cad3d3cbcc09cca3cfcda554cec7f0 -c4d3c6c5d3c7c6d3c81133b2c7f01133 -b6d3c401382a3910b0cd0210b6d3c52a -afd931303236341131b9d3c31137b2cb -b902302e33323810b0adbc10b0ad4410 -b0a3e5046438673e6844724a761173f4 -a358116cedb1281168e2d52f116feda3 -9601613e6d01e9a549ee012aa5544110 -cda55410e200134c665135513c534054 -5655725901c5d3c5d4cf6f10c1d51603 -c1d50cc4d3c4d3d51dd9d52004c4d521 -c8bf9acad538ced525d2d53910cbd533 -4c3c4d464e624f665001cbd511d3d514 -01c2d3fad9d3fe04c1d3ffcdd532ceb9 -5cd2d504d5d53610c7d53710cdd50d45 -2f4542474c49504a664b02c8abc9cdd3 -f6d7d3f801c7a548c8d3e810c2d53303 -c4d534ced535d1d3f3d2b11310cfd3f4 -2aa5484132424243524410dad3e502c5 -d3c7c6d3c8dad53002c8d3d1ced531d5 -d53201c3bf38ced394002574c1f5e534 -f223f2a548f3a560f6a5a3f9a5cafa01 -2a2e41127261e2a5e0022aa5de49a2b5 -5210d5a5e1e5a358e6a366eba3b9eda3 -e5eea3fc78a67832795e7aa260e125e2 -5106eb0ceba5c6eca5c7eda5c8f8a5c9 -e2a5c3e5a5c4e7a5c50013ee20f30ff3 -a5d9f4a5daf5a5dbf8a5dcfaa5ddeea5 -d5efa5d6f0a5d7f1a5d8f2a5cae70fe7 -a5d0e8a5d1e9a5d2eba5d3eca5d4e1a5 -cbe2a5cce3a5cde4a5cee5a5cf08ed0f -eda5e5eea5e6efa5e7f4a5e8faa5e9e2 -a5e2e4a5e3e7a5e4ea012a2e41127261 -e2a5e0032aa5de312e49345310d5a5e1 -1137b2a5e101d1a5dfd2a5e074a24875 -a29d76a2e3770012ee20f50ff5a5bef6 -a5bff7a5c0f8a5c1f9a5c2eea5b9efa5 -baf2a5bbf3a5bcf4a5bde70fe7a5b4e8 -a5b5e9a5b6eba5b7eda5b8e1a5b0e2a5 -b1e3a5b2e5a5b30017ef2af514f809f8 -a58bf9a58cfaa58df5a588f6a589f7a5 -8af209f2a585f3a586f4a587efa582f0 -a583f1a584e914ec09eca57feda580ee -a581e9a57ceaa57deba57ee409e4a579 -e5a57ae7a57be1a576e2a577e3a57800 -14ed25f214f709f7a5a0f9a5a1faa5a2 -f2a59df4a59ef5a59feda598eea599ef -a59af0a59bf1a59ce80fe8a593e9a594 -eaa595eba596eca597e1a58ee3a58fe4 -a590e5a591e7a5920bee14f409f4a5ad -f5a5aef6a5afeea5aaefa5abf3a5aceb -09eba5a7eca5a8eda5a9e2a5a4e4a5a5 -e9a5a66ac2e86fc16d6fa25370a28e71 -a2e372a2fe730014ec25f414f809f8a5 -73f9a574faa575f4a570f5a571f6a572 -eca56beea56cefa56df2a56ef3a56fe7 -0fe7a566e8a567e9a568eaa569eba56a -e1a561e2a562e3a563e4a564e5a56500 -11eb1df20ff2a524f3a525f4a526f8a5 -27faa528eba520eca521eda522eea523 -e50fe5a51be6a51ce7a51de9a51eeaa5 -1fe1a517e2a518e3a519e4a51a0017ee -2af514f809f8a53cf9a53dfaa53ef5a5 -39f6a53af7a53bf209f2a536f3a537f4 -a538eea533efa534f0a535e814eb09eb -a530eca531eda532e8a52de9a52eeaa5 -2fe509e5a52be6a382e7a52ce2a529e3 -a3b5e4a52a08ed0feda543eea544f2a5 -45f4a546faa547e3a53fe4a540e7a541 -eba5420014ee25f314f809f8a55df9a5 -5efaa55ff3a55af5a55bf7a55ceea555 -efa556f0a557f1a558f2a559e90fe9a5 -50eaa551eba552eca553eda554e2a548 -e332e4a54de5a54ee8a54f032aa54948 -324e3a5012616ceda54c126174f2a54a -126261f4a54b6aa2686ba2836ca2c46d -a4196e0019ee2df417f70cf7a513f8a5 -14f9a515faa516f4a510f5a511f6a512 -f109f1a50df2a50ef3a50feea50aefa5 -0bf0a50ce717ea0ceaa506eba507eca5 -08eda509e7a503e8a504e9a505e409e4 -a500e5a501e6a502e1a3fde2a3fee3a3 -ff08f00ff0a3b5f4a35af5a3b6f7a3b7 -faa3b8e1a3b1e7a3b2e9a3b3eea3b400 -13ef20f40ff4a3c9f5a3caf6a3cbf7a3 -ccfaa3cdefa3c4f0a3c5f1a3c6f2a3c7 -f3a3c8e70fe7a3bfe8a3c0e9a3c1eba3 -c2eca3c3e2a3bae3a3bbe4a3bce5a3bd -e6a3be0017ee2af414f809f8a3e2f9a3 -e3faa3e4f4a3dff5a3e0f7a3e1f109f1 -a3ddf2a3def3a3cfeea3daefa3dbf0a3 -dce814eb09eba3d7eca3d8eda3d9e8a3 -d4e9a3d5eaa3d6e409e4a3d1e5a3d2e6 -a3d3e1a3cee2a3cfe3a3d00016ef2af5 -14f809f8a3f9f9a3fafaa3fbf5a3f6f6 -a3f7f7a3f8f209f2a3f3f3a3f4f4a3f5 -efa3f0f0a3f1f1a3f2e714eb09eba3ed -eda3eeeea3efe7a3ebe9a3aceaa3ece1 -a3e6e2a3e7e3a3e8e5a3e9e6a3ea65c1 -4365a25866a28367a2ab68a406690015 -ed25f214f709f7a3aef8a3aff9a3b0f2 -a3abf3a3acf4a3adeda3a6eea3a7efa3 -a8f0a3a9f1a3aae614ea09eaa3a3eba3 -a4eca3a5e6a3a0e7a3a1e9a3a2e1a39b -e2a39ce3a39de4a39ee5a39f0ced17f5 -0cf5a362f7a363f9a364faa365eda35f -f1a360f2a361e509e5a35ceba35deca3 -5ee1a359e2a35ae3a35b0bee14f309f3 -a370f5a371faa372eea36defa36ef0a3 -6fe809e8a36ae9a36beba36ce2a367e4 -a368e5a3690019ee2df417f70cf7a389 -f8a38af9a38bfaa38cf4a386f5a387f6 -a388f109f1a383f2a384f3a385eea380 -efa381f0a382e717ea0ceaa37ceba37d -eca37eeda37fe7a379e8a37ae9a37be4 -09e4a376e5a377e6a378e1a373e2a374 -e3a3750ded17f00cf0a397f2a398f3a3 -99f4a39aeda394eea395efa396e80ce8 -a390e9a391eba392eca393e1a38de2a3 -8ee7a38f61a25062a28563a2be640014 -ee25f414f809f8a355f9a356faa357f4 -a352f5a353f7a354eea34defa34ef0a3 -4ff1a350f2a351e70fe7a348e8a349e9 -a34aeaa34beca34ce1a343e2a344e4a3 -45e5a346e6a3470015ed1af30ef706f7 -4bf84dfa4ff33df447f549ed3dee3fef -41f043f145e60ee906e937eb39ec3be6 -31e733e835e127e229e32be42de52f00 -16ee1ef50ef806f87bf97dfa7ff575f6 -77f779f206f26ff371f473ee69ef6bf0 -6de60ee906e963ec65ed67e65de75fe8 -61e153e255e357e459e55b0012f118f6 -0cf69df79ff8a1f9a341faa342f193f2 -95f397f499f59be60ae689e88bed8dee -8ff091e181e283e485e587 +c7e909e9d5c1ebd5c2edd5c3e1d3c1e5 +d5bfe7d5c00af014f609f6d3a9f7d3aa +f9d3abf0d3a6f1d3a7f5d3a8e1d3a1e7 +d3a2e8d3a3e9d3a4ebd3a50beb14f509 +f5d3b5f7cf5cf9d3b6ebd3b2edd3b3ee +d3b4e509e5d3afe6d3b0e9d3b1e1d3ac +e2d3ade3d3ae0bee14f209f2d3bff3d3 +c0f5adc5eed3bcefd3bdf0d3bee709e7 +d3bae9cf96edd3bbe1d3b7e2d3b8e4d3 +b9682e69386a10e9d39f01e1d39beed3 +9c01f3d39df6d39e651d6546664a6704 +e1d396e2d397e5d398e8d399efd39a10 +f3d39110e9d392615c62666407ea0cea +d38decd38eedd38ff5d390e1d389e5d3 +8ae7d38be9d38c01edd381f2d38205f2 +09f2d386f5d387f9d388e1d383e9d384 +ecd38570cedc70b00571b8d972baa273 +002b77c11aec25f214f509f5cf53f6cf +66f7cf6df2ae9af3cf28f4cf3deccdab +edcdbceecdd1efcde6f1a3cfe336e709 +e7cd46e9cd6febcd92e3cd00e426e5cd +2a032a3644444b4c5312696ee4cd1901 +2acd164910cecd17126576e1cd171268 +6feacd18773878a24a79a25f7aa28ae1 +abf00012f020f50ff5cf7bf6cf7cf7cf +7df8cf7ef9cf7ff0cf76f1cf77f2cf78 +f3cf79f4cf7ae90fe9cf71eacf72ebcf +73edcf74efcf75e2cf6ee6cf6fe7cf70 +e8cf6d06f20cf2cf83f3cf84f5cf85f7 +cf86e2cf80e5cf81eecf820ced17f20c +f2abe7f3cf90f7cf91f8cf92edcf8dee +cf8eefcf8fe909e9cf8aebcf8beccf8c +e1cf87e2cf88e3cf890aec14f609f6cf +9bf7cf9cf9cf9deccf98eecf99f0cf9a +e1cf93e2cf94e3cf95e4cf96e7cf976c +c2c171c15d74a5745275a25f7605e509 +e5cf6aedcf6bf3cf6ce1cf67e2cf68e3 +cf690014ed25f214f609f6cf50f7cf51 +f9cf52f2cf4df3cf4ef4cf4fedcf48ee +cf49efcf4af0cf4bf1cf4ce80fe8cf43 +e9cf44eacf45ebcf46eccf47e1cf3ee2 +cf3fe5cf40e6cf41e7cf420012ed20f4 +0ff4cf61f6cf62f7cf63f9cf64facf65 +edcf5cefcf5df1cf5ef2cf5ff3cf60e7 +0fe7cf58e9cf59eacf5aebcf5beccd4a +e1cf54e2cf55e3cf56e5cf5771a24872 +a25d730013ee20f50ff5cf38f6cf39f8 +cf3af9cf3bfacf3ceecf33efcf34f1cf +35f3cf36f4cf37e70fe7cf2ee8cf2fea +cf30eccf31edcf32e2cf29e3cf2ae4cf +2be5cf2ce6cf2d06ef0cefcf0ff1cf10 +f4cf11f5cf12e1cf0ce8cf0dedcf0e00 +16ee2af514f809f8b3e1f9cf26facf27 +f5cf23f6cf24f7cf25f209f2cf20f3cf +21f4cf22eecf1defcf1ef1cf1fe714eb +09ebcf1aeccf1bedcf1ce7cf17e8cf18 +e9cf19e1cf13e2cf14e3cd00e5cf15e6 +cf166ca2486da2806ea2c66fa4117000 +11ee1df20ff2cf08f3cf09f4cf0af6cf +0bf9b984eecf04efcf05f0cf06f1cf07 +e70fe7cdffe9cf00ebcf01eccf02edcf +03e2cdfbe3cdfce4cdfde5cdfe0010ee +1df50ff5cdb7f7cdb8f8cdb9f9cdbafa +cdbbeecdb4efcd92f0cdb5f2cdb6e90c +e9cdb0eacdb1eccdb2edcdb3e3cdace4 +cdade7cdaee8cdaf0014ee25f414f809 +f8cdcef9cdcffacdd0f4cdcbf5cdccf7 +cdcdeecdc6f0cdc7f1cdc8f2cdc9f3cd +cae70fe7cdc1e8cdc2eacdc3ebcdc4ec +cdc5e1cdbde2cdbee3cdbfe4b993e6cd +c00015ef25f514f809f8cde4f9cde5fa +a564f5cde1f6cde2f7cde3efcddcf0cd +ddf1cddef2cddff3cde0e914ec09eccd +d9edcddaeecddbe9cdd6eacdd7ebcdd8 +e2a7f3e3cdd2e5cdd3e6cdd4e7cdd500 +13f020f60ff6cdf6f7cdf7f8cdf8f9cd +f9facdfaf0cdf1f1cdf2f2cdf3f3cdf4 +f5cdf5e70fe7cdece9cdedebcdeeeccd +efefcdf0e1cde7e2cde8e3cde9e4cdea +e5cdeb66c17d69c0d869a25c6aa2a76b +0017ef2af514f809f8cda8f9cda9facd +aaf5cda5f6cda6f7cda7f209f2cda2f3 +cda3f4cda4efcd9ff0cda0f1cda1e714 +ea09eacd9cedcd9deecd9ee7cd99e8cd +9ae9cd9be409e4cd96e5cd97e6cd98e1 +cd93e2cd94e3cd950015ed25f514f809 +f8cd83f9cd84facd85f5cd80f6cd81f7 +cd82edcd7bf0cd7cf1cd7df2cd7ef3cd +7fe714ea09eacd78ebcd79eccd7ae7cd +75e8cd76e9cd77e1cd70e2cd71e4cd72 +e5cd73e6cd740bed14f409f4cd8ff5cd +90f7cd91edcd8cf0cd8df2cd8ee509e5 +cd89e7cd8aeccd8be1cd86e2cd87e4cd +8866a25767a25e680016ee2af414f709 +f7cd6cf9cd6dfacd6ef4cd69f5cd6af6 +cd6bf109f1cd66f2cd67f3cd68eecd63 +efcd64f0cd65e714ea09eacd60ebcd61 +edcd62e7cd5de8cd5ee9cd5fe1cd58e2 +cd59e3cd5ae4cd5be5cd5c02e5cd43ed +cd44f7cd450011ed1df40ff4cd53f5cd +54f7cd55f9cd56facd57edcd4ff0cd50 +f2cd51f3cd52e50fe5cd4be8cd4ce9cd +4deacd4eecb5d1e1cd47e2cd48e3cd49 +e4cd4a61a26262a2ad63a40564a45865 +0017ee2af414f709f7cd40f9cd41facd +42f4cd3df5cd3ef6cd3ff109f1cd3af2 +cd3bf3cd3ceecd37efcd38f0cd39e714 +ea09eacd34ebcd35eccd36e7cd31e8cd +32e9cd33e409e4cd2ee5cd2fe6cd30e1 +cd2be2cd2ce3cd2d0015f025f514f809 +f8cbe4f9cbe5facbe6f5cbe1f6cbe2f7 +cbe3f0a546f1cbddf2cbdef3cbdff4cb +e0e614eb09ebcbdaedcbdbefcbdce6cb +d7e8cbd8eacbd9e1cbd2e2cbd3e3cbd4 +e4cbd5e5cbd60018ee2df417f70cf7cb +fcf8cbfdf9cbfefacbfff4cbf9f5cbfa +f6cbfbf109f1cbf6f2cbf7f3cbf8eecb +f3efcbf4f0cbf5e814eb09ebcbf0eccb +f1edcbf2e8cbede9cbeeeacbefe409e4 +cbeae5cbebe7cbece1cbe7e2cbe8e3cb +e90012ee20f40ff4cd11f5cd12f6cd13 +f7cd14f8cd15eecd0defcd0ef0cd0ff2 +b51ff3cd10e70fe7cd08e8cd09e9cd0a +ebcd0beccd0ce2cd01e32ce5cd06e6cd +0722032acd024d2e52325410d2cd0510 +c5cd0310cfcd040feb1af20cf2cd26f3 +cd27f5cd28f8cd29ebcd22eecd23efcd +24f1cd25e60ce6cd1ee7cd1fe8cd20ea +cd21e1cd1ae2cd1be3cd1ce5cd1d001d +70c17b784be90ce9c94aecc96af3c909 +f4c9e1785079547a7ae1012a2e411272 +61e2c7e2012ac7e15010cbc7e210edcb +0705f509f5cb0bf8cb0cf9cb0de5cb08 +edcb09eecb0a02e5cb0ee8cb0feecb10 +73af736474a24575a2637707ee0ceecb +03efcb04f2cb05f7cb06e1c9ffe2cb00 +e7cb01edcb020aee14f409f4c9def5c9 +dff7c9e0eec9dbf1c9dcf3c9dde1c9d6 +e5c9d7e8c9d8e9c9d9edc9da09f00ff0 +c9e7f2c9e8f4c9e9f5c9eaf6c9ebe1c9 +e2e8c9e3e9c9e4eec9e5efc9e60013ef +20f50ff5c9fbf7c9fcf8c9fdf9c9fefa +c9edefc9f6f0c9f7f1c9f8f2c9f9f4c9 +fae60fe6c9f1e7c9f2e9c9f3eac9f4ed +c9f5e1c9ece2c9ede3c9eee4c9efe5c9 +f070a24571a270720012ed20f40ff4c9 +d2f5c9d3f7c9d4f8c9d5f9c9d2edc9ce +efc9cff0b365f1c9d0f2c9d1e60fe6c9 +c9e7c9cae8c9cbe9c9ccebc9cde1c9c5 +e3c9c6e4c9c7e5c9c80cee17f10cf1c9 +c0f2bd12f3c9c1f4c9c2eec9bdefc9be +f0c9bfeb09ebc9baecc9bbedc9bce1a7 +76e5c9b8e9c9b901e1c9c3edc9c468c1 +f76cc14d6ca2426da27d6ea2c86f0010 +ee1df30ff3c9b3f4c9b4f6c9b5f7c9b6 +f9c9b7eec9afefc9b0f0c9b1f1c9b2e8 +0ce8c9abe9c9acebc9adedc9aee3c9a7 +e5c9a8e6c9a9e7c9aa0011ee1df40ff4 +bfb3f5b906f6c978f7c979fac97aeec9 +74efc975f2c976f3c977e50fe5c96fe7 +c970e8c971ebc972ecc973e1c96be2c9 +6ce3c96de4c96e0015ee25f414f809f8 +c98cf9c98dfac98ef4c98af5c945f7c9 +8beec985efc986f1c987f2c988f3c989 +e614ea09eac982ecc983edc984e6c97f +e8c980e9c981e1c97be2c97ce3b548e4 +c97de5c97e0016ed53f33df709f7c9a4 +f9c9a5fac9a6f3c99ff426f6c9a3022a +32435e4c126174eec9a2042ac9a03132 +523853345410d2c9a21137b2c9a110d5 +c9a1127972ecc9a1f009f0c99cf1c99d +f2c99eedc999eec99aefc99be714ea09 +eac996ebc997ecc998e7c993e8c994e9 +c995e1c98fe2bbe9e3c990e4c991e5c9 +92686a69a2506aa29b6b08ee0feec965 +efc966f0c967f2c968f5c969e1c961e2 +c962e7c963e8c9640cee17f40cf4c946 +f5c947f6c948f7c949eec943efc944f2 +c945eb09ebc940ecc941edc942e4c93d +e7c93ee8c93f0015ef25f514f809f8c9 +5df9c95efac95ff5c95af6c95bf7c95c +efc955f0c956f2c957f3c958f4c959e7 +14ec09ecc952edc953eec954e7c950e8 +c951eaad1fe1c94be2c94ce3c94de4c9 +4ee6c94f10f4c96064836468658e66a2 +726708eb0febc938ecc939eec93af3c9 +3bf5c93ce1c934e4c935e7c936e9c937 +05ef09efc91ef4c91ff5c920e1c91be3 +c91ceec91d0011ef1df30ff3b113f6c9 +2df8c92ef9c92ffac930efc92af0c92b +f1c92cf2b113e70fe7c925e9c926ebc9 +27ecc928edc929e1c921e2c922e4c923 +e5c92402e1c931e5c932ecc933619662 +a295630fe91aee0ceec918f0c919f2a3 +55f7c91ae9c914eac915ebc916edc917 +e50ce5c910e6c911e7c912e8c913e1c9 +0ce2c90de3c90ee4c90f0016ef2af514 +f809f8c7f7f9c7f8fac7f9f5c7f4f6c7 +f5f7c7f6f209f2c7f2f3c7f3f4bbabef +c7eff0c7f0f1c7f1e71eeb13ebc7ebec +26edc7ee012ac7ec5012686cf0c7ede7 +c7e8e8c7e9e9c7eae2c7e3e3c7e4e4c7 +e5e5c7e6e6c7e70011ee1df30ff3c907 +f4c908f5c909f6c90af9c90beec903ef +c904f0c905f2c906e70fe7c7fee8c7ff +e9c900ecc901edc902e2c7fae3c7fbe5 +c7fce6c7fd057839782a797cf5cb110b +f014f409f4cb42f5cb43f7cb44f0cb3f +f1cb40f2cb41ec09eccb3ceecb3defcb +3ee1cb39e3cb3ae8cb3b01e1cb45f0cb +46755276a25a7705ed09edcb36f3cb37 +f4cb38e1cb33e3cb34e8cb350013ee20 +f60ff6cb21f7cb22f8cb23f9cb24facb +11eecb1cf0cb1df1cb1ef2cb1ff3cb20 +e70fe7cb17e9cb18ebcb19eccb1aedcb +1be1cb12e2cb13e3cb14e4cb15e6cb16 +0ded17f00cf0cb2ff3cb30f7cb31facb +32edcb2ceecb2defcb2ee80ce8cb28e9 +cb29eacb2aeccb2be1cb25e3cb26e5cb +270019709f7820ee0ceecb9aefc16cf5 +cbb9f7cbc8782a7934edcb8401e4cbcf +f7cbd010f5cbd1745b745075667705ed +09edcbccefcbcdf2cbcee1cbc9ebcbca +eccbcb03e3cbb5e8cbb6edcbb7f7cbb8 +0eed1af40cf4cbc4f5cbc5f9cbc6facb +c7edc16cefcbc1f0cbc2f1cbc3e60ce6 +cbbde7cbbee9cbbfebcbc0e2cbbae3cb +bbe5cbbc7034723e7301ebcbb3f7cbb4 +01eecbadf4cbae03e9cbafedcbb0efcb +b1f4cbb268c0ea6bb76b8a6da24a6ea2 +9a6f0cec17f00cf0cba9f2cbaaf5cbab +f7cbaceccba7edcb98efcba8e509e5cb +a4e6cba5e7cba6e2cba1e3cba2e4cba3 +06e90ce9ab7dedcb81f4cb82f7cb83e1 +cb7ee2cb7fe8cb800016ed2af414f809 +f8bda3f9cb98facb99f4cb95f5cb96f7 +cb97f009f0cb93f1cb94f2afd7edcb90 +eecb91efcb92e614e909e9cb8debcb8e +eccb8fe6cb8ae7cb8be8cb8ce1cb85e2 +cb86e3cb87e4cb88e5cb8905ee09eecb +9ef2cb9ff7cba0e4cb9be7cb9ceccb9d +683a69446a02e7cb7be9cb7cf3cb7d01 +e7cb71f0cb7207ee0ceecb77f2cb78f4 +cb79f5cb7ae1cb73e6cb74eccb75edcb +7664446446654a6704e1cb6ceecb6df2 +cb6ef3cb6ff5cb7010e2cb5f0bec14f3 +09f3cb69f4cb6af9cb6beccb66edcb67 +eecb68e709e7cb63e9cb64eacb65e1cb +60e2cb61e5cb62613062a2496310e6cb +5e0013ed20f60ff6cb55f7cb56f8cb57 +f9cb58facb59edcb50eecb51efcb52f0 +cb53f2cb54e70fe7cb4ce8cb4de9cb4e +eac309ebcb4fe1cb47e2cb48e3cb49e4 +cb4ae6cb4b03e2cb5aebcb5beccb5cf0 +cb5d6da6596eb8666f001b70c0f27923 +ea0ceac769edb183f2c7acf3c7bb792a +7a3ae3c75502e4c7ddedc7def9c7df10 +edc7e07462743c75a24976a2567701e9 +c7dbecc7dc0011f11df50ff5c7d1f7c7 +d2f8c7d3f9c7d4fac7d5f1c7cdf2c7ce +f3c7cff4c7d0e90fe9c7c8ebc7c9ecc7 +caedc7cbeec7cce1c7c4e2c7c5e4c7c6 +e5c7c704e2c7d6e5c7d7e9c7d8edc7d9 +eeb1cc10e4c7da705c72827307f00cf0 +c7c0f4c7c1f5c7c2f8c7c3e1c7bce3c7 +bde9c7beefc7bf05ef09efc7a9f4c7aa +f9c7abe1b560ebc7a7edc7a80ef31af7 +0cf7c7b8f8c7b9f9c7acfac7baf3c7b4 +f4c7b5f5c7b6f6c7b7e70ce7c7b0eec7 +b1efc7b2f2c7b3e1c7ade3c7aee5c7af +69c0f06c926c406d786ea25a6f02e4c7 +a4eec7a5f2c7a608ed0fedc783efc784 +f2c785f4c786f5c787e1c77fe4c780e5 +c781ebc7820def17f40cf4c792f5c793 +f7c794f8c795efc78ff0c790f2c791e7 +0ce7c78be9c78cebc78decc78ee1c788 +e2c789e3c78a0def17f30cf3c7a0f4c7 +a1f5c7a2f8c7a3efc79df0c79ef2c79f +e90ce9c799eac79aebc79beec79ce1c7 +96e5c797e7c79869966aa2426b0fed1a +f50cf5c77bf6c77cf8c77dfac77eedc7 +77efc778f2c779f3c77ae50ce5c773e7 +c774e9c775ebc776e1c76fe2c770e3c7 +71e4c77202e1c766e5c767eec76805f3 +09f3c76cf6c76df7c76ee2c76ae3c76b +e7c76964326438664e67586801f4c764 +f5c76503e1c759ebc75af4c75bf5c75c +01f3c75df5c75e04e2c75fe3c760e7c7 +61efc762f5c763613a62506302e1c756 +efc757f5c75803e1c749e3c74af2c74b +f6c74c07ef0cefc751f2c752f4c753f5 +c754e9c74debc74eecc74fedc7500024 +73c2cae82aef0fefc16cf2c1b4f3b200 +f4c1e3f9a9d2e8bfcde9bf2febbf26ec +c128ee012ad833ed4d126f6ee7af5177 +c14c773878a26179a2bc7aa2fde7bfb3 +0017ed2af314f609f6c33af7c33bfac3 +3cf3c337f4c338f5c339f009f0c335f1 +c336f2addfedc332eec333efc334e714 +ea09eab1ccebc330ecc331e7c32de8c3 +2ee9c32fe409e4af29e5c32be6c32ce1 +c328e2c329e3c32a0019ee2df417f70c +f7c353f8c354f9c355fac356f4c350f5 +c351f6c352f109f1c34df2c34ef3c34f +eec34aefc34bf0c34ce717ea0ceac346 +ebc347ecc348edc349e7c343e8c344e9 +c345e409e4c340e5c341e6c342e1c33d +e2c33ee3c33f0013ed20f60ff6c364f7 +c365f8c366f9c367fac368edc360f0c3 +61f2c362f4c1cbf5c363e70fe7c35be8 +c35ceac35debc35eecc35fe2c357e3c3 +58e4a51de5c359e6c35a0013ef20f50f +f5c378f6c379f7c37af8c37bfac37cef +c373f0c374f1c375f2c376f4c377ea0f +eac36eebc36fecc370edc371eec372e1 +c369e4c36ae5c36be8c36ce9c36d73a2 +5074a2a075a2f8760014f025f514f809 +f8c325f9c326fac327f5c322f6c323f7 +c324f0c31df1c31ef2c31ff3c320f4c3 +21e80fe8c318ebc319ecc31aeec31bef +c31ce1c313e4c314e5c315e6c316e7c3 +170016ee2af514f809f8c1e0f9c1e1fa +c1e2f5c1ddf6c1def7c1dff109f1c1db +f3c1dcf4c1cbeec1d8efc1d9f0c1dae8 +14eb09ebc1d5ecc1d6edc1d7e8c1d2e9 +c1d3eac1d4e2c1cde3c1cee5c1cfe6c1 +d0e7c1d10018ed2df317f60cf6c1f9f7 +c1faf8c1fbf9c1fcf3c1f6f4c1f7f5c1 +f8f009f0c1f3f1c1f4f2c1f5edc1f0ee +c1f1efc1f2e714ea09eac1edebc1eeec +c1efe7c1eae8c1ebe9c1ece409e4c1e7 +e5c1e8e6c1e9e1c1e4e2c1e5e3c1e600 +15ef25f414f809f8c310f9c311fac312 +f4c30df5c30ef6c30fefc308f0c309f1 +c30af2c30bf3c30ce714ea09eac305eb +c306edc307e7c302e8c303e9c304e1c1 +fde2c1fee3c1ffe4c300e5c3016ac307 +6ec1c76ea2626fa2bb70a40b71a46372 +0017ef2af514f809f8c1caf9c1cbfac1 +ccf5c1c7f6c1c8f7c1c9f209f2c1c4f3 +c1c5f4c1c6efc1c1f0c1c2f1c1c3e814 +ec09ecc1beedc1bfeec1c0e8c1bbeac1 +bcebc1bde409e4c1b8e6c1b9e7c1bae1 +c1b5e2c1b6e3c1b70018ed2df417f70c +f7c168f8c169f9c16afac16bf4c165f5 +c166f6c167f109f1c162f2c163f3c164 +edc15feec160f0c161e715ea0aeac15d +ebd829caecc15ee7c15ae8c15be9c15c +e409e4c157e5c158e6c159e1c154e2c1 +55e3c1560016ef2af514f809f8c180f9 +c181fac182f5c17df6c17ef7c17ff209 +f2c17af3c17bf4c17cefc177f0c178f1 +c179e714ea09eac175ebc176edabd2e7 +c172e8c173e9c174e1c16de3c16ee4c1 +6fe5c170e6c1710018ee2df417f70cf7 +c198f8c199f9c19afac19bf4c195f5c1 +96f6c197f109f1c192f2c193f3c194ee +c18fefc190f0c191e814eb09ebc18cec +c18dedc18ee8c189e9c18aeac18be409 +e4c186e5c187e7c188e1c183e2c184e3 +c1850017ee2af514f809f8c1b1f9c1b2 +fac1b3f5c1aef6c1aff7c1b0f109f1c1 +abf2c1acf3c1adeec1a8efc1a9f0c1aa +e814eb09ebc1a5ecc1a6edc1a7e8c1a2 +e9c1a3eac1a4e509e5c19fe6c1a0e7c1 +a1e1c19ce2c19de3c19e6aa2556ba2a0 +6ca2eb6d0015ef25f514f809f8c151f9 +c152fac153f5c14ef6c14ff7c150efc1 +49f0c14af1c14bf2c14cf4c14de614e9 +09e9c146edc147eec148e6c143e7c144 +e8c145e1c13ee2c13fe3c140e4c141e5 +c1420015ee25f514f809f8c10ff9c110 +fac111f5c10cf6c10df7c10eeec107f1 +c108f2c109f3c10af4c10be814eb09eb +c104ecc105edc106e8c101e9c102eac1 +03e2bffce3bffde4bffee5bfffe7c100 +0015ef25f514f809f8c125f9c126fac1 +27f5c122f6c123f7c124efc11df0c11e +f2c11ff3c120f4c121e914ec09ecc11a +edc11beec11ce9c117eac118ebc119e1 +c112e2c113e3c114e5c115e6c1160014 +ee25f314f709f7c13bf8c13cfac13df3 +c138f5c139f6c13aeec133efc134f0c1 +35f1c136f2c137e80fe8c12ee9c12fea +c130ebc131ecc132e1c129e2c12ae3c1 +2be5c12ce6c12d65c1c465a26266a2b2 +67a40a68a465690017ed2af414f809f8 +bff9f9bffafabffbf4bff6f5bff7f7bf +f8f009f0bff3f1bff4f2bff5edbff0ee +bff1efbff2e714ea09eabfedebbfeeec +bfefe7bfeae8bfebe9bfece409e4bfe7 +e5bfe8e6bfe9e1bfe4e2bfe5e3bfe600 +16ee2af414f709f7bf97f9bf98fabf99 +f4bf94f5bf95f6bf96f109f1bf91f2bf +92f3bf93eebf8eefbf8ff0bf90e714eb +09ebbf8becbf8cedbf8de7abc6e8bf89 +eabf8ae1bf84e2bf85e3bf86e4bf87e5 +bf880018ed2df417f70cf7bfaff8bfb0 +f9bfb1fabfb2f4bfacf5bfadf6bfaef0 +09f0bfa9f1bfaaf2bfabedbfa6eebfa7 +efbfa8e714ea09eabfa3ebbfa4ecbfa5 +e7bfa0e8bfa1e9bfa2e409e4bf9de5bf +9ee6bf9fe1bf9ae2bf9be3bf9c0019ee +2df417f70cf7bfcaf8b711f9bfcbfabf +ccf4bfc7f5bfc8f6bfc9f109f1bfc4f2 +bfc5f3bfc6eebfc1efbfc2f0bfc3e717 +ea0ceabfbdebbfbeecbfbfedbfc0e7bf +bae8bfbbe9bfbce409e4bfb7e5bfb8e6 +bfb9e1bfb4e2bfb5e3bfb60016ee2af4 +14f809f8bfe1f9bfe2fabfe3f4bfdef5 +bfdff7bfe0f109f1bfdcf2abb3f3bfdd +eebfd9efbfdaf0bfdbe714eb09ebbfd6 +ecbfd7edbfd8e7bfd3e9bfd4eabfd5e2 +bfcee3bfcfe4bfd0e5bfd1e6bfd261a2 +5f62a2b463a409640017ee2af514f809 +f8bf81f9bf82fabf83f5bf7ef6bf7ff7 +bf80f209f2bf7bf3bf7cf4bf7deebf78 +f0bf79f1bf7ae714ea09eabf75ebbf76 +edbf77e7bf72e8bf73e9bf74e409e4bf +6fe5bf70e6bf71e1bf6ce2bf6de3bf6e +0015ee2ff51df812f8bf36f926fabf39 +22012abf374310c3bf38f5bf33f6bf34 +f7bf35eed82517efbf2ff1bf30f3bf31 +f4bf32e614ea09eabf2cebbf2dedbf2e +e6bf29e7bf2ae9bf2be1bf24e2bf25e3 +bf26e4bf27e5bf280017ef2af514f809 +f8bf4ff9bf50fabf51f5bf4cf6bf4df7 +bf4ef209f2bf49f3bf4af4bf4befbf46 +f0bf47f1bf48e914ec09ecbf43edbf44 +eebf45e9bf40eabf41ebbf42e409e4bf +3de6bf3ee8bf3fe1bf3ae2bf3be3bf3c +0019ee2df417f70cf7bf68f8bf69f9bf +6afabf6bf4bf65f5bf66f6bf67f109f1 +bf62f2bf63f3bf64eebf5fefbf60f0bf +61e717ea0ceabf5bebbf5cecbf5dedbf +5ee7bf58e8bf59e9bf5ae409e4bf55e5 +bf56e6bf57e1bf52e2bf53e3bf540024 +73c1dfe220ee0feec589efc5a1f2c5c8 +f6c70ff9c727e2c395e4c3bfe5c3d8e7 +c3f3ecaf8377c0d27736787479a2527a +a2a7e1c37d09ed0fedc717efc718f2c7 +19f7c71af8c71be2c712e3c713e5c714 +e7c715e9c7160bee14f209f2c725f5a9 +58f8c726eec722efc723f1c724e709e7 +c71fe9c720ecc721e1c71ce4c71de5c7 +1e0017ee2af414f709f7c73cf8c73df9 +c73ef4c739f5c73af6c73bf109f1c736 +f2c737f3c738eec733efc734f0c735e8 +14eb09ebc730ecc731edc732e8c72de9 +c72eeac72fe509e5c72ae6c72be7c72c +e2c728e3b364e4c72909ed0fedc744f2 +c745f5c746f9c747fac748e1c73fe2c7 +40e4c741e9c742ebc743734274a25775 +a2887602e8c710edc711efa7000014ee +25f514f809f8c5e7f9c5e8fac5e9f5c5 +e4f6c5e5f7c5e6eec5dfefc5e0f1c5e1 +f3c5e2f4c5e3e60fe6c5dae7c5dbe8c5 +dcebc5ddedc5dee1c5d5e2c5d6e3c5d7 +e4c5d8e5c5d90eef1af50cf5c5f4f8c5 +f5f9c5f6fac5f7efc5f1f0c5f2f2c5f3 +f3ad1fe90ce9c5edeac5eeebc5efedc5 +f0e4c5eae5c5ebe7c5ec0017ef2af514 +f809f8c70cf9c70dfac70ef5c709f6c7 +0af7c70bf209f2c706f3c707f4c708ef +c703f0c704f1c705e814eb09ebc701ed +c702eea5dce8c5fee9c5ffeac700e509 +e5c5fbe6c5fce7c5fde1c5f8e3c5f9e4 +c5fa6ac2596ec1256e966fa29370a2d9 +71a2fc720dec17f00cf0c5d2f5c39bf8 +c5d3fac5d4ecc5cfedc5d0eec5d1e60c +e6c5cce7c5cde9c5ceebc569e1c5c9e2 +c5cae5c5cb0018ed2df417f70cf7c59e +f8c506f9c59ffac5a0f4c59bf5c59cf6 +c59df109f1c599f2c59af3c3a5edc596 +eec597f0c598e714ea09eac593ebc594 +ecc595e7c590e8c591e9c592e409e4c5 +8de5c58ee6c58fe1c58ae2c58be3c58c +0014ed25f314f609f6c5b2f7c5b3f9c5 +b4f3c5aff4c5b0f5c5b1edab6ceec5ac +efaf64f0c5adf1c5aee70fe7c5a7e8c5 +a8e9c5a9eac5aaebc5abe1c5a2e3c5a3 +e4c5a4e5c5a5e6c5a60aee14f509f5c5 +bcf8c5bdf9c5beeec5b9efc5baf3c5bb +e2c5b5e7c5b6e8c5b7e9c3d8ecc5b808 +ee0feec5c3efc5c4f1c5c5f4c5c6f9c5 +c7e7c5bfebc5c0ecc5c1edc5c26aa262 +6ba29a6ca2ea6d0018ed2df317f60cf6 +c585f7c586f8c587fac588f3c582f4c5 +83f5c584f009f0c57ff1c580f2c581ed +c57ceec57defc57ee714ea09eac579eb +c57aecc57be7c576e8c577e9c578e409 +e4c573e5c574e6c575e1c570e2c571e3 +c5720010ee1df40ff4c544f5c545f8c5 +46f9c547faad93eec540efc541f2c542 +f3c543e90ce9c53ceac53decc53eedc5 +3fe1c538e2c539e4c53ae8c53b0016ed +2af414f709f7c55cf8c55dfac55ef4c5 +59f5c55af6c55bf109f1c556f2c557f3 +c558edc553eec554efc555e614e909e9 +c550eac551ebc552e6c54de7c54ee8c5 +4fe1c548e2c549e3c54ae4c54be5c54c +0011ef1df60ff6c56bf7c56cf8c56df9 +c56efac56fefc567f1c568f2c569f5c5 +6ae90fe9c563eac564ebc565edc566ee +a5e3e1c55fe3c560e5c561e7c56265c1 +5f65a25d66a2a367a2b068a405690016 +ee2af514f809f8c535f9c536fac537f5 +c532f6c533f7c534f209f2c52ff3c530 +f4c531eec52cefc52df1c52ee714ea09 +eac529ecc52aedc52be7c526e8c527e9 +c528e1c521e2c522e4c523e5c524e6c5 +250014ed25f414f809f8c3ebf9c3ecfa +c3edf4c3e8f5c3e9f7c3eaedc3e3eec3 +e4efc3e5f1c3e6f2c3e7e70fe7c3dee8 +c3dfe9c3e0eac3e1ebc3e2e1c3d9e2c3 +dae3c3dbe4c3dce5c3dd04e1c3eee4c3 +efecc3f0f2c3f1f5c3f20017ee2af514 +f809f8c508f9c509fac50af5c505f6c5 +06f7c507f209f2c503f3c504f4bd92ee +c500f0c501f1c502e814eb09ebc3fdec +c3feedc3ffe8c3fae9c3fbeac3fce409 +e4c3f7e5c3f8e7c3f9e1c3f4e2c3f5e3 +c3f60015ef25f514f809f8c51ef9c51f +fac520f5c51bf6c51cf7c51defc516f0 +c517f1c518f2c519f4c51ae614eb09eb +c513edc514eec515e6c510e7c511e9c5 +12e1c50be2c50ce3c50de4c50ee5c50f +61a25f62a2bc63a407640017ee2af514 +f809f8c3d5f9c3d6fac3d7f5c3d2f6c3 +d3f7c3d4f209f2c3cff3c3d0f4c3d1ee +c3ccf0c3cdf1c3cee814eb09ebc3c9ec +c3caedc3cbe8c3c6e9c3c7eac3c8e409 +e4c3c3e6c3c4e7c3c5e1c3c0e2c3c1e3 +c3c20015ee37f314f809f8c392f9c393 +fac394f3c38ff4c390f7c391ee38efc3 +8bf0c38cf1c38df2c38e012a2e481261 +6ef4c38a012ac3895410d7c38ae614eb +09ebc386ecc387edc388e6c383e7c384 +eac385e1c37ee2c37fe3c380e4c381e5 +c3820015ee25f414f709f7c3a9f8b307 +f9c3aaf4c3a6f5c3a7f6c3a8eec3a1ef +c3a2f0c3a3f1c3a4f2c3a5e614ea09ea +c39eebc39fedc3a0e6c39be8c39ce9c3 +9de1c396e2c397e3c398e4c399e5c39a +0015ec25f114f509f5c3bcf8c3bdfac3 +bef1b7fff2c3baf4c3bbecc3b6edc3b7 +eec3b8efc3b9f0b7cce614e909e9c3b3 +eac3b4ebc3b5e6c3b0e7c3b1e8c3b2e1 +c3abe2c3ace3c3ade4c3aee5c3af66db +f469d2ea69aade6ab05c6bb4406c0022 +72c13ee11dee0feebdaeefbdbdf4bdee +f5bdf7f6bf0de1bbe2e2bbf7e7bd3de9 +bd557667766e779478a25579a2567a03 +e8bf1fecbf20eebf21fa012a2e471265 +6ff2bf23012abf224710c5bf2305ec09 +ecbf11f3bf0df5bf12e1bf0ee9bf0feb +bf1008ec0fecbf17edbf18efbf19f4bf +1af7bf1be1bf13e5bf14e7bf15e8bf16 +10edbf1c01e1bf1deebf1e72a25573a2 +7d74a292750015ef25f414f709f7bf0b +f9ab12fabf0cf4bf08f5bf09f6bf0aef +bf03f0bf04f1bf05f2bf06f3bf07e914 +ec09ecbf00edbf01eebf02e9bdfdeabd +feebbdffe1bdf8e3bdf9e4bdfae5bdfb +e6bdfc0bed14f409f4bde4f6bde5fabd +e6edbde1eebde2efbde3e909e9bddeeb +bddfecbde0e1bddbe3bddce7bddd06e9 +0ce9bdeaedbdebf2bdecf3bdede1bde7 +e4bde8e5bde907ee0ceebdf3efbdf4f3 +bdf5f5bdf6e3bdefe7bdf0e8bdf1e9bd +f269c1ed6dc0f76d3c6ea25e6fa28c70 +a2dc7110f2bdda0016ec2af214f709f7 +bdabf8bdacf9bdadf2bda8f5bda9f6bd +aaef09efbda5f0bda6f1bda7ecbda2ed +bda3eebda4e614e909e9bd9feabda0eb +bda1e6bd9ce7bd9de8bd9ee1bd97e2bd +98e3bd99e4bd9ae5bd9b0dec17f30cf3 +bdb9f5bdbaf7bdbbfabdbcecbdb6edbd +b7eebdb8e70ce7bdb2e8bdb3e9bdb4ea +bdb5e1bdafe2bdb0e4bdb10016ee2af4 +14f809f8bdd2f9bdd3fabdd4f4bdcff5 +bdd0f7bdd1f109f1bdccf2bdcdf3bdce +eebdc9efbdcaf0bdcbe814eb09ebbdc6 +ecbdc7edbdc8e8bdc3e9bdc4eabdc5e1 +bdbee2bdbfe3bdc0e5bdc1e7bdc204e1 +bdd5e5bdd6eebdd7efbdd8f8bdd969a2 +456aa29a6ba2af6c0011eb1def0fefbd +92f0bd93f1bd94f5bd95f8bd96ebbd8e +ecbd8fedbd90eebd91e50fe5bd89e6bd +8ae7bd8be9bd8ceabd8de1bd85e2bd86 +e3bd87e4bd880015ef25f514f809f8bd +6af9bd6bfabd6cf5bd67f6bd68f7bd69 +efbd62f0bd63f1bd64f2bd65f3bd66e6 +1eea09eabd5febbd60ecbd61e62ce7bd +5de8bd5e012abd5b4c12696de2bd5ce1 +bd56e2bd57e3bd58e4bd59e5bd5a06ec +0cecbd70f0bd71f7bd72f8bd73e1bd6d +e5bd6ee9bd6f0010ec1df20ff2bd80f3 +bd81f4bd82f5bd83f9bd84ecbd7cedbd +7deebd7eefbd7fe50ce5bd78e8bd79e9 +bd7aeabd7be1bd74e2bd75e3bd76e4bd +7765bd656466a27d67a2816807ee0cee +bd51f3bd52f4bd53f5bd54e1bd4de8bd +4ee9bd4fedbd500019ee2df417f70cf7 +bd37f8bd38f9bd39fabd3af4bd34f5bd +35f6bd36f109f1bd31f2bd32f3bd33ee +bd2eefbd2ff0bd30e717ea0ceabd2aeb +bd2becbd2cedbd2de7afe1e8bd28e9bd +29e409e4bd25e5bd26e6bd27e1bd22e2 +bd23e3bd2401e1bd3beebd3c0eed1af2 +0cf2bd49f4bd4af5bd4bfabd4cedbd45 +eebd46efbd47f1bd48e80ce8bd41e9bd +42ebbd43ecbd44e1bd3ee2bd3fe7bd40 +619062a27e63a2bc640deb17ee0ceebd +1eefbd1ff0bd20f1bd21ebbd1becbd1c +edbd1de70ce7bd17e8bd18e9bd19eabd +1ae1bd14e2bd15e4bd160014ec25f214 +f709f7bbf4f8bbf5fabbf6f2bbf1f3bb +f2f5bbf3ecbbecedbbedeebbeef0bbef +f1bbf0e70fe7bbe8e8bbe9e9bbeaeabb +ebebbb33e1bbe3e2bbe4e3bbe5e4bbe6 +e5bbe70012ef20f60ff6bd05f7bd06f8 +bd07f9bd08fabd09efbd00f1bd01f2bd +02f4bd03f5bd04ea0feabbfceba921ec +bbfdedbbfeeebbffe2bbf8e5bbf9e6bb +fae9bbfb09ec0fecbd0fedbd10f0bd11 +f1bd12f3bd13e3bd0ae4bd0be5bd0ce6 +bd0de8bd0e002474a9e520ef0fefb5bc +f3b568f4b5d7f5b594f7b5ebe5b576e7 +b57fe9b58debaffbeeb5b3782d783479 +3e7a4ee1b557e4b56b01e3b5f0ecb5f1 +02e1b5f2efb5f3f8b5f404e8b5f5e9b1 +11edb5f6f2b5f7fab5f8744875a24876 +a2497703ebb5ecedb5edefb5eef3b5ef +0ff21af70cf7b5e4f8b5e5f9b5e6fab5 +e7f2b5e0f3b5e1f4b5e2f6b5e3eb0ceb +b5dcecb5ddedb5deefb5dfe2b5d8e4b5 +d9e5b5dae9b5db10edb5e801e2b5e9f6 +b5ea6bc0fc6f626f7a708a7194729e73 +0aeb14ef09efb5d4f4b5d5f5b5d6ebb5 +d1edb5d2eeb5d3e1b5cce3b5cde4b5ce +e8b5cfe9b5d002f2b5bdf5b5bef7b5bf +01e9b5c0efb5c101f5b5c2f7b5c307ee +0ceeb5c8f5b5c9f8b5caf9b5cbe5b5c4 +e8b5c5e9b5c6ebb5c76b646ca24d6da2 +756e07ee0ceeb5b8efb5b9f0b5baf4b5 +bbe2b5b4e7b5b5e8b5b6eab5b70cf017 +f60cf6b59df7b59ef8b59ffab5a0f0b5 +9af2b59bf4b59ceb09ebb597ecb598ef +b599e5b594e8b595e9b5960bed14f509 +f5b5a9f6b5aaf7b176edb5a6efb5a7f0 +b5a8e909e9b5a4ebb5a5ecb5a6e1b5a1 +e2b5a2e7b5a307f20cf2b5aff3b5b0f4 +b5b1f9b5b2e9b5abecb5aceeb5adefb5 +ae66656652678468a24d69a2576a04e3 +b58fe5b590eab591eeb592f3b59307eb +0cebb57bedb57cf5b57df9b57ee1b577 +e2b578e5b579e6b57a08ed0fedb584ee +b585efb586f3b587f7b588e2b580e5b5 +81e7b582ecb58303e2b589e9b58af0b5 +8bf7b58c10eeb58e616e627e63a25a64 +09e90fe9b571f2b572f3b573f4b574f5 +b575e1b56ce2b56de3b56ee4b56fe5b5 +7002e9b558eeb559f2b55a0ce917ee0c +eeb563f2b564f5b565f9b566e9b560ec +b561edb562e509e5b55de7b55ee8b55f +e1a7f3e2b55be4b55c03e1b567e5b568 +e8b569f2b56a00186eb07628e10ce1b5 +f9e9b72bf6b76df7b770763a77447902 +e1b772e5b773f9b77401e4b76eeeb76f +10e9b771715071947298750fee1af40c +f4b769f5b76af7b76bf9b76ceeb765ef +b766f0b767f2b768e90ce9b761ebb762 +ecb763edb764e1b75de2b75ee4b75fe8 +b76010f2b75804e1b759e2a3b6f2b75a +f4b75bf5b75c6e346f607001e1b756f2 +b75706e90ce9b74deab74eecb74ff3b7 +50e1b74ae4b74be7b74c04e2b751e4b7 +52e7b753f2b754f7b75568796b3c6b72 +6c886d0aec14f309f3b747f7b748f8b7 +49ecb744eeb745f2b746e1b73fe2b740 +e3b741e4b742e9b74303e1b73aedb73b +efb73cf5b73d10e5b73e683469386a01 +e5b738f2b73910e9b72a0bec14f509f5 +b735f6b736f9b737ecb732edb733f4b7 +34e409e4b72fe5b730e7b731e1b72ce2 +b72de3b72e643d644065506703e2b727 +e5b728ebb707efb72902e1b71ae7b71b +f4b71c09ec0fecb722eeb723f2b724f4 +b725f5b726e2b71de5b71ee8b71fe9b7 +20ebb721613062a24e6310f4b7190014 +ed25f314f809f8b70bf9b70cfab70df3 +b708f4b709f5b70aedb703eeb704efb7 +05f1b706f2b707e60fe6b5ffe8b700ea +b701ebb702ecb527e1b5fae2b5fbe3b5 +fce4b5fde5b5fe0aee14f409f4b716f5 +b717f7b718eeb713efb714f2b715e5b7 +0ee9b70feab710ebb711edb712002875 +c29feb74f23ff628f6b9eff7bb84f902 +2a32414c4c126174eebbb4022abbb243 +2a5410d2bbb410cebbb3127261e2bbb3 +f2b9b1f3bb24f5022aac7d41ac835912 +657ae9b9a5eb38ecb976edb991eeb9ae +efb9c7012a2e41127261e2b95a042ab9 +5841324336493a4d10ceb95c10c6b959 +10ceb95a10d2b95b7a667a38e1b1c3e7 +b7fce9b929eab9400017ee2af514f809 +f8bbdff9bbe0fabbe1f5bbdcf6bbddf7 +bbdef209f2bbdaf3bbdbf4af6aeebbd7 +efbbd8f0bbd9e814eb09ebaf56ecbbd5 +edbbd6e8add6e9bbd4eaaf6ae409e4bb +d1e5bbd2e6bbd3e1bbcee2bbcfe3bbd0 +75a26576a2ba77a40f78a467790018ed +2df417f70cf7bbcaf8bbcbf9bbccfabb +cdf4bbc7f5bbc8f6bbc9f109f1bbc4f2 +bbc5f3bbc6edbbc1eebbc2efbbc3e714 +ea09eabbbeebbbbfecbbc0e7bbbbe8bb +bce9bbbde409e4bbb8e5bbb9e6bbbae1 +bbb5e2bbb6e3bbb70017ee2af514f809 +f8bb6af9bb6bfabb6cf5bb67f6bb68f7 +bb69f109f1bb64f3bb65f4bb66eebb61 +efbb62f0bb63e814eb09ebbb5eecbb5f +edbb60e8bb5be9bb5ceabb5de509e5bb +58e6bb59e7bb5ae2bb55e3bb56e4bb57 +0017ee2af414f809f8bb81f9bb82fabb +83f4bb7ef6bb7ff7bb80f109f1bb7cf2 +bb7df3b1adeebb79efbb7af0bb7be714 +ea09eabb76ecbb77edbb78e7bb73e8bb +74e9bb75e409e4bb70e5bb71e6bb72e1 +bb6de2bb6ee3bb6f0018ed2df317f60c +f6b9d0f7bb9af9bb9bfabb9cf3bb97f4 +bb98f5bb99f009f0bb94f1bb95f2bb96 +edbb91eebb92efbb93e714ea09eabb8e +ebbb8fecbb90e7bb8be8bb8ce9bb8de4 +09e4bb88e5bb89e6bb8ae1bb85e2bb86 +e3bb870015ee25f414f809f8bbaff9bb +b0fabbb1f4bbacf6bbadf7bbaeeebba7 +efbba8f0bba9f1bbaaf2bbabe614eb09 +ebbba5ecbb1eedbba6e6bba2e9bba3ea +bba4e1bb9de2bb9ee3bb9fe4bba0e5bb +a16bc3b470c1cf70a26871a2c072a41b +73a46b740019ee2df417f70cf7bb52f8 +bb53f9bb54faa591f4bb4ff5bb50f6bb +51f109f1bb4df2af6af3bb4eeebb4aef +bb4bf0bb4ce717ea0ceabb46ebbb47ec +bb48edbb49e7bb43e8bb44e9bb45e409 +e4bb40e5bb41e6bb42e1bb3de2bb3ee3 +bb3f0018ee2df417f70cf7b9f0f8b9f1 +f9b9f2fab9f3f4b9edf5b9eef6b9eff1 +09f1b9eaf2b9ebf3b9eceeb9e8efb9e9 +f0b73be814eb09ebb9e5ecb9e6edb9e7 +e8b9e2e9b9e3eab9e4e509e5b9dfe6b9 +e0e7b9e1e1b9dce3b9dde4b9de0019ee +2df417f70cf7bb0af8bb0bf9bb0cfabb +0df4bb07f5bb08f6bb09f109f1bb04f2 +bb05f3bb06eebb01efbb02f0bb03e717 +ea0ceab9fdebb9feecb9ffedbb00e7b9 +fae8b9fbe9b9fce409e4b9f7e5b9f8e6 +b9f9e1b9f4e2b9f5e3b9f60016ed2af5 +14f809f8bb21f9bb22fabb23f5bb1ef6 +bb1ff7bb20f209f2bb1bf3bb1cf4bb1d +eda90beebb19f0bb1ae614ea09eabb16 +ebbb17ecbb18e6bb13e8bb14e9bb15e1 +bb0ee2bb0fe3bb10e4bb11e5bb120017 +ee2af414f709f7bb3af8bb3bfabb3cf4 +bb37f5bb38f6bb39f109f1bb34f2bb35 +f3bb36eebb31efbb32f0bb33e814eb09 +ebbb2eecbb2fedbb30e8bb2be9bb2cea +bb2de509e5bb28e6bb29e7bb2ae2bb25 +e3bb26e4bb276ba2536ca2ab6da4066e +a47b6f0014ec25f414f709f7b9d9f9b9 +dafab9dbf4b9d6f5b9d7f6b9d8ecb9d1 +efb9d2f0b9d3f1b9d4f3b9d5e70fe7b9 +cde8b9cee9b9cfeab9d0ebb33be1b9c8 +e3b9c9e4b9cae5b9cbe6b9cc0018ed2d +f417f70cf7b972f8b973f9b974fab975 +f4b96ff5b970f6b971f109f1b96cf2b9 +6df3b96eedb969efb96af0b96be714ea +09eab966ebb967ecb968e7b963e8b964 +e9b965e409e4b960e5b961e6b962e1b9 +5de2b95ee3b95f0019ee2df417f70cf7 +b98df8b98ef9b98ffab990f4b98af5b9 +8bf6b98cf109f1b987f2b988f3b989ee +b984efb985f0b986e717ea0ceab980eb +b981ecb982edb983e7b97de8b97ee9b9 +7fe409e4b97ae5b97be6b97ce1b977e2 +b978e3b9790019ee47f417f70cf7b9aa +f8b9abf9b9acfab9adf4b9a7f5b9a8f6 +b9a9f123f1b9a1f226f3b9a6022a3241 +405912657ae9b9a5012ab9a24c10c2b9 +a3127261e2b9a4eeb99eefb99ff0b9a0 +e717ea0ceab99bebb99cecb902edb99d +e7b998e8b999e9b99ae409e4b995e5b9 +96e6b997e1b992e2b993e3b9940018ee +2df417f70cf7b9c3f8b9c4f9b9c5fab9 +c6f4b9c0f5b9c1f6b9c2f109f1b9bdf2 +b9bef3b9bfeeb9baefb9bbf0b9bce714 +eb09ebb9b7ecb9b8edb9b9e7b7fce9b9 +b5eab9b6e409e4b9b2e5b9b3e6b9b4e1 +b9afe2b9b0e3b9b166c1a766a25d67a2 +b268a2f869a44d6a0016ed2af314f809 +f8b955f9b956fab957f3b952f4b953f5 +b954f009f0b94ff1b950f2b951edb94c +eeb94defb94ee714ea09eab949ebb94a +ecb94be7b946e8b947e9b948e1b941e2 +b942e3b943e4b944e5b9450017ee2af5 +14f809f8b7f9f9b7fafab7fbf5b7f6f6 +b7f7f7b7f8f109f1b7f3f2b7f4f3b7f5 +eeb7f0efb7f1f0b7f2e714eb09ebb7ed +ecb7eeedb7efe7b7eae8b7ebe9b7ece4 +09e4b7e7e5b7e8e6b7e9e1b7e4e2b7e5 +e3b7e60014ef25f414f709f7b90ff8b9 +10f9b911f4b90cf5b90df6b90eefb907 +f0b908f1b909f2b90af3b90be80fe8b9 +02eab903ebb904ecb905edb906e1b7fd +e2b7fee4b7ffe5b900e6b9010017ef2a +f514f809f8b926f9b927fab928f5b923 +f6b924f7b925f209f2b920f3b921f4b9 +22efb91df0b91ef1b91fe714eb09ebc8 +1aecb91beeb91ce7b918e8b919eab91a +e409e4b915e5b916e6b917e1b912e2b9 +13e3b9140015ef25f514f809f8b93df9 +b93efab93ff5b93af6b93bf7b93cefb9 +35f0b936f1b937f3b938f4b939e614ea +09eab932ecb933edb934e6b92fe7b930 +e8b931e1b92ae2b92be3b92ce4b92de5 +b92e61a25d62a29563a2ed64a4426500 +16ed2af514f809f8b7e1f9b7e2fab7e3 +f5b7def6b7dff7b7e0f209f2b7dbf3b7 +dcf4b7ddedb7d8eeb7d9efb7dae614e9 +09e9b7d5ebb7d6ecb7d7e6b7d2e7b7d3 +e8b7d4e1b7cde2b7cee3b7cfe4b7d0e5 +b7d10010eb1df10ff1b781f6b782f7b7 +83f8b784f9b785ebb77dedb77eefb77f +f0b780e70ce7b779e8b77ae9b77beab7 +7ce1b775e2b776e3b777e4b7780018ee +2df417f70cf7b79bf8b79cf9b79dfab7 +9ef4b798f5b799f6b79af109f1b795f2 +b796f3b797eeb792efb793f0b794e814 +eb09ebb78fecb790edb791e8b78ce9b7 +8deab78ee409e4b789e5b78ae7b78be1 +b786e2b787e3b7880017ed2af414f709 +f7b7b4f9b7b5fab7b6f4b7b1f5b7b2f6 +b7b3f009f0b7aef1b7aff3b7b0edb7ab +eeb7acefb7ade714ea09eab7a8ebb7a9 +ecb7aae7b7a5e8b7a6e9b7a7e409e4b7 +a2e5b7a3e6b7a4e1b79fe2b7a0e3b7a1 +0015ed25f414f809f8b7caf9b7cbfab7 +ccf4b7c7f6b7c8f7b7c9edb7c2eeb7c3 +f0b7c4f1b7c5f2b7c6e714ea09eab7bf +ebb7c0ecb7c1e7b7bce8b7bde9b7bee1 +b7b7e3b7b8e4b7b9e5b7bae6b7bb66a6 +c567aa3268001e72c0f8e51af40cf4b5 +30f5b536f9a554fab556e5b3cae9b3d6 +efb50cf2b51f763f765877747984e122 +032ab3a9372e43345310c4b3aa1133b6 +b3aa10cdb3ab04e3b54ce5b54debb54e +eeb54ff6b55002e1b551e3b552efb553 +01e1b554f7b55572a25073a27b74a282 +750014ed25f514f809f8b549f9b54afa +b54bf5b546f6b547f7b548edb541f0b5 +42f2b543f3b544f4b545e70fe7b53ce8 +b53de9b53eebb53fecb540e2b537e3b5 +38e4b539e5b53ae6b53b0cf017f50cf5 +b529f7b52af8b52bfab52cf0b526f2b5 +27f4b528eb09ebb523edb524efb525e1 +b520e3b521e5b52202e2b52deeb52ef3 +b52f04e9b531efb532f3b533f5b534f8 +b53569c1116dae6d366ea2436fa26b70 +10efb51e0010f11df50ff5b3fcf6b3fd +f7b3fef9b3fffab500f1b3f8f2b3f9f3 +b3faf4b3fbea0ceab3f5edb3f6eeb3cb +f0b3f7e1b3f1e2b3f2e4b3f3e6b3f409 +e919e9b506ea32eeb509efb50af3b50b +012ab50748126d6ee7b508e1b501e4b5 +02e5b503e7b504e8b5050010ec1df20f +f2b519f4b51af6b51bf7b51cf9b51dec +b515edb516efb517f0b518e50ce5b511 +e8b512e9b513eab514e1b50de2b50ee3 +b50fe4b510694e6aa24b6ba24c6c04e1 +b3ece2b3ede4b3eef4b3eff5b3f00feb +1af20cf2b3e3f4b3e4f7b3e5f8b3e6eb +b3dfecb3e0edb3e1efb3e2e70ce7b3db +e8b3dce9b3ddeab3dee1b3d7e2b3d8e4 +b3d9e6b3da10e9b3e703e1b3e8e5b3e9 +e8b3eaebb3eb6434643e6548676e6802 +e9b3d3f2b3d4f9b3d501eeb3b2f9b3c9 +05e809e8b3cee9b3cfedb3d0e1b3cbe4 +b3cce7b3cd01edb3d1f7b3d2613062a2 +656310e8b3c80015ee25f314f809f8b3 +c0f9b3c1fab3c2f3b3bdf6b3bef7b3bf +eeb3b8efb3b9f0b3baf1b3bbf2b3bce8 +26eb1beb2cecb3b6edb3b7012a2e4812 +616ef4b3b5012ab3b45410d7b3b5e8b3 +b1e9b3b2eab3b3e1b3ace3b3ade4b3ae +e5b3afe7b3b004e1b3c3e2b3c4eeb3c5 +efb3c6f5b3c700177199e614ef09efb1 +44f2b14df9b169e6a254e9b12ceab135 +7612762a772ee1b11310f2b16601e1b1 +67e5b16871a24272a243750eed1af40c +f4b162f5b163f6b164f9b165edb15eee +b15ff1b160f2b161e50ce5b15ae6b15b +e8b15ce9b15de2b158e326e4b159012a +b1274112646cedb12810f3b14c0aef14 +f209f2b155f3b156f4b157efb152f0b1 +53f1b154e3b14ee4b14fe5b14debb150 +edb1516b556e286e2e6f3e7010e5b14b +02e2b141e7b142e9b14305ee09eeb148 +f2b149f3b14ae4b145e9b146edb1476b +346c3e6d01f0b13ff5b14001ebb136f6 +b13706ec0cecb13beeb13cf2b13df9b1 +3ee1b138e8b139e9b13a662b665c6766 +6907f00cf0b131f2b132f4b133f7b134 +e1b12de5b12ee6b12fecb13001e9b129 +edb12a10f2b12b613062a2466510f2b1 +260012ec20f40ff4a3b9f5b122f8b123 +f9b124fab125ecb11dedb11eeeb11ff0 +b120f2b121e70fe7b118e8b119e9b11a +eab11bebb11ce1b114e2b115e4b116e6 +b11710eca799001f71c18a7953ec0cec +b300eeb31af5b365f6b37b79307a8ee1 +b16ae4b1a40dec17ef0cefb3a2f2b3a3 +f9b3a4fab3a5ecb39fedb3a0eeb3a1e5 +0ce5b39be6b39ce7b39de9b39ee1b184 +e2b399e4b39a02e1b3a6e9b3a7eeb3a8 +75c0c5753676a25b77a2867810f8b398 +0016ed2af414f709f7b378f8b379fab3 +7af4b376f5b377f6af89f009f0b373f1 +b374f2b375edb370eeb371efb372e614 +e909e9b36debb36eecb36fe6b36be7b3 +1ae8b36ce1b366e2b367e3b368e4b369 +e5b36a0ced17f00cf0b385f2b1d4f3b3 +86f9b387edb382eeb383efb384e609e6 +b37feab380ecb381e1b37ce3b37de5b3 +7e0fea1af40cf4b394f5b395f7b396f8 +b397eab390edb391eeb392f2b393e50c +e5b38ce6b38de7b38ee9b38fe1b388e2 +b389e3b38ae4b38b7140725073a25674 +02e1b363e9b364f5b1d502e1b34aeeb3 +4bf2b34c0012ed20f60ff6b359f7b35a +f8b35bf9b35cfab35dedb354f1b355f3 +b356f4b357f5b358e50fe5afc4e7b350 +e8b351e9b352eab353e1b34de2b192e3 +b34ee4b34f04ecb35eeeb35fefb360f0 +b361f7b36269c17f6dc0e26d406e9e6f +a2807002e1b347e5b348eeb3490dee17 +f60cf6b316f8b317f9b318fab319eeb3 +13f2b314f5b315e70ce7b30fe8b310ec +b311edb312e1b30ce2b30de4b30e0013 +ec20f20ff2b32af4b32bf5b32cf7b32d +fab32eecb325edb326eeb327efb328f1 +b329e70fe7b320e8b321e9b322eab323 +ebb324e1b31be2b31ce3b31de4b31ee5 +b31f0018ed2df317f60cf6b343f7b344 +f8b345f9b346f3b340f4b341f5b342f0 +09f0b33df1b33ef2b33fedb33beeb328 +efb33ce714ea09eab338ebb339ecb33a +e7b335e8b336e9b337e409e4b332e5b3 +33e6b334e1b32fe2b330e3b33169846a +a26d6ba27a6c0beb14f209f2b309f5b3 +0af7b30bebb306ecb307efb308e809e8 +b304e9af56eab305e2b301e3b302e4b3 +030011ee1df30ff3b1eff4b1f0f8b1f1 +f9b1f2fab1f3eeb1ebf0b1ecf1b1edf2 +b1eee50fe5b1e6e7b1e7e8b1e8ecb1e9 +edb1eae1b1e2e2b1e3e3b1e4e4b1e504 +ebb1f4edb1f5eeb1f6f2b1f7f5b1f806 +ee0ceeb1fcefb1fdf0b1fef5b1ffe1b1 +f9e4b1fae5b1fb65a0656a66a26667a2 +6a6808ee0feeb1ddefb1def2b1dff3b1 +e0f4b1e1e1b1d9e3b1dae5b1dbebb1dc +0013ec20f60ff6b1c6f7b1c7f8b1c8f9 +b1c9fab1caecb1c2efb1c3f1b1c4f2ad +bcf3b1c5e70fe7b1bde8b1bee9b1bfea +b1c0ebb1c1e1b1b8e2b1b9e3b1bae4b1 +bbe6b1bc01ebb1cbf8b1cc0cec17f20c +f2b1d5f4b1d6f5b1d7f7b1d8ecb1d3ee +b1d4efaff8e509e5b1d0e7b1d1ebb1d2 +e1b1cde2b1cee4b1cf61a24862a2a363 +a2fb640012eb20f10ff1b1b3f2b1b4f4 +b1b5f5b1b6f8b1b7ebb1aeecb1afedb1 +b0eeb1b1efb1b2e60fe6b1a9e7b1aae8 +b1abe9b1aceab1ade2b1a5e3b1a6e4b1 +a7e5b1a80019ee2df417f70cf7b180f8 +b181f9b182fab183f4b17ef5b17ff6ad +cbf109f1b17bf2b17cf3b17deeb178ef +b179f0b17ae717ea0ceab174ebb175ec +b176edb177e7b171e8b172e9b173e409 +e4b16ee5b16fe6b170e1b16be2b16ce3 +b16d0018ed2df317f70cf7b199f8b19a +f9b19bfab19cf3b196f5b197f6b198f0 +09f0b193f1b194f2b195edb190eeb191 +efb192e714ea09eab18debb18eecb18f +e7b18ae8b18be9b18ce409e4b187e5b1 +88e6b189e1b184e2b185e3b18606ec0c +ecb1a0eeb1a1f2b1a2f4b1a3e3b19de4 +b19ee6b19f63cb0463a4dc64aea76500 +1d73927a29ef0cefafeaf3aff6f4afbd +f5a5f87a44e5afabecafc4ee012aafd9 +53126861f7afda01e1b111e5b1127620 +76387748784c7901e1b10fefb11002e5 +b10ae8b10beeb10c10efb10d10f4b10e +732e74667510e4b10908eb0febaffbed +affcf3affdf5affef9afffe5aff7e7af +f8e8aff9e9affa08f30ff3b104f4b105 +f5b106f8b107fab108e2b100eeb101ef +b102f2b1036ac0e96e636e6a6fa25670 +a2577208eb0febaff1f2aff2f3aff3f4 +aff4f7aff5e1afede7afeee8afefe9af +f00eed1af20cf2afe6f6afe7f7afe8f8 +afe9edafe2eeafe3efafe4f1afe5e40c +e4afdee6afdfe8afe0ecafe1e1afdbe2 +afdce3afdd10f4afeb10e9afec6aa242 +6ba2436ca2666d0dee17f50cf5afd5f7 +afd6f8afd7faafd8eeafd2f0afd3f3af +d4e716e7afcde9afceeb26edafd1012a +afcf4e126b6fefafd0e1afcae2afcbe5 +afcc10e1afb80aec14f009f0afc1f2af +c2f9afc3ecafbeedafbfefafc0e1afb9 +e5afbae7afbbe9afbcebafbd05ef09ef +afc8f0a3f2f5afc9e5afc5ebafc6edaf +c7662f663e674e686a6902f0afb5f4af +b6f6afb702e1aface5afade9afae04e1 +afafecafb0edafb1efafb2f9afb310f5 +afb4613462386301f2afa9f9afaa10e1 +afa305ef09efafa6f2afa7f5afa8e3af +a4e7afa5eba7d5002272c161e127f219 +f2ad2df3ad44f52cf6ad74f9ad7d012a +ad6347126c61e7ad64e1ab49e5ab88e8 +ab98efad0c7643764e7758787e79827a +04e5ad44e8ad81ebad82eead83f4ad84 +01e7ad75eead7605e509e5ad79e7ad7a +f4ad7be1ad77e2ad78e4ad2d10e8ad7c +02e1ad7ee2ad7fefad80729673a28674 +a2b4750eec1af50cf5ad70f6ad71f8ad +72f9ad73ecad6cefad6df0ad6ef4ad6f +e80ce8ad68e9ad69eaad6aebad6be1ad +65e2ad66e3ad670015ed25f414f809f8 +ad41f9ad42faad43f4ad3ef6ad3ff7ad +40edad39eead3aefad3bf1ad3cf3ad3d +e714ea09eaad36ebad37ecad38e7ad33 +e8ad34e9ad35e1ad2ee2ad2fe3ad30e4 +ad31e6ad320df017f60cf6ad4ff7ad50 +f9ad51faad52f0ad4cf3ad4df4ad4eea +0ceaad48ebad49edad4aefad4be1ad45 +e2ad46e8ad470fee1af40cf4ad5ff5ad +60f9ad61faad62eead5befad5cf0ad5d +f3ad5ee70ce7ad57e8ad58ecad59edad +5ae1ad53e3ad54e4ad55e5ad5669c19b +6dc0d06d3a6e826fa25f70a2a07110e4 +ad2c0aec14f209f2abd6f3abfcf4abfd +ecabfaeea4b6efabfbe1abf5e5abf6e7 +abf7e9abf8ebabf90dec17f30cf3ad08 +f4ad09f7ad0af8ad0becad05f0ad06f1 +ad07e70ce7ad01e8ad02e9ad03ebad04 +e1abfee2abffe3ad000013ec20f40ff4 +ad1cf5ad1df8ad1ef9ad1ffaad20ecad +17edad18efad19f0ad1af1ad1be60fe6 +ad12e7ad13e8ad14eaad15ebad16e1ad +0de2ad0ee3ad0fe4ad10e5ad110aee14 +f509f5ad29f8ad2af9ad2beead26efad +27f3ad28e1ad21e2ad22e3ad23e7ad24 +e9ad25699c6aa2616ba28c6c0fec1af4 +0cf4abf1f5abf2f7abf3f9abf4ecabed +edabeeefabeff3abf0e80ce8abe9e9ab +eaeaabebebabece1abe5e3abe6e4abe7 +e5abe80aed14f209f2abc6f7abc7f9ab +c8edabc3eeabc4f0abc5e1abbee2abbf +e3abc0e5abc1e8abc20cee17f20cf2ab +d2f3abd3f6abd4f9abd5eeabcfefabd0 +f0abd1e909e9abccebabcdedabcee1ab +c9e5abcae8abcb0ef21af60cf6abe1f8 +abe2f9abe3faabe4f2abddf3abdef4ab +dff5abe0ed0cedabd9eeabdaefabdbf1 +abdce1abd6e2abd7ecabd865c0e465a2 +af66a2c467a2ce680013ee20f40ff4ab +b9f7abbaf8abbbf9abbcfaabbdeeabb4 +efabb5f0abb6f1abb7f2abb8e973e938 +eaabb0ebabb1ecabb2edabb3022a3c42 +a2594811616e01e2abaff4abaa0b4d2d +5417542e55385610c4abad01c8aba9d7 +abaa01cbababd3abac4dcc9d502a5310 +d2aba802c6aba5c8aba6daaba7470e47 +3048cc814910c4aba310c6aba12aab9e +412a4210ceaba010d5ab9f126f70efab +aee2ab99e4ab9ae6ab9be7ab9ce8ab9d +06eb0cebab8ceeab8df4ab8ef9ab8fe1 +ab89e2ab8ae7ab8b03e1ab90e4ab91e7 +ab92edab9303e1ab94e3ab95e7ab96eb +ab97616a62a27563a2b06408ea0feaab +83edab84efab85f2ab86faab87e5ab7f +e6ab80e8ab81e9ab820016ed2af314f8 +09f8ab5ef9ab5ffaab60f3ab5bf6ab5c +f7ab5df009f0ab58f1ab59f2ab5aedab +55eeab56efab57e614ea09eaab52ebab +53ecab54e6ab4fe7ab50e8ab51e1ab4a +e2ab4be3ab4ce4ab4de5ab4e0011ef1d +f40ff4ab6ef5ab6ff6ab70f7ab71f9ab +72efab6af1ab6bf2ab6cf3ab6de90fe9 +ab65eaab66ebab67ecab68eeab69e2ab +61e3ab62e4ab63e7ab640bec14f009f0 +ab7cf1ab7df2ab7eecab79edab7aefab +7be709e7ab76e8ab77eaab78e3ab73e4 +ab74e5ab75001a6fc1b2776ce10ce1ad +85e5adbcf6af8afaa34f775079887a05 +e709e7afa0ecafa1eeafa2e1af9ee4af +9fe5af0a08f30ff3af8ff5af79f7af90 +f9af91faaf92e1af8cebaf8decadaaf2 +af8e0aed14f209f2af9bf5af9cf9af9d +edaf98eeaf99efaf9ae1af93e2af94e4 +af95e7af96e9af9773b37334746075a2 +4e7610e1af8b06eb0cebaf5eeeaf5fef +af60f1af61e2af5be8af5ce9af5d0def +17f30cf3af6cf4af6df5af6ef9af6fef +af69f0af6af2af6be80ce8af65e9af66 +ebaf67edaf68e1af62e2af63e4af6400 +19ee2df417f70cf7af86f8af87f9af88 +faaf89f4af83f5af84f6af85f109f1af +80f2af81f3af82eeaf7defaf7ef0af7f +e717ea0ceaaf79ebaf7aecaf7bedaf7c +e7af76e8af77e9af78e409e4af73e5af +74e6af75e1af70e2af71e3af726fa247 +70a285720def17f30cf3af57f4af58f5 +af59f9af5aefaf54f1af55f2af56e81e +e832e9af52eca7beeeaf53012a2e4d12 +6f6ee7af51012aaf504310ceaf51e3af +4de5af4ee7af4f0012ee20f40ff4af47 +f6af48f7af49f8af4af9af4beeaf42ef +af43f0af44f2af45f3af46e60fe6af3e +e8af3fe9add8ebaf40ecaf41e1af3ae2 +af3be3af3ce5af3d10f0af4c68c15d6b +9d6b966ca2506da2576e0eee1af50cf5 +af36f6af37f7af38f9af39eeaf32efaf +33f2af34f4af35e70ce7af2fe9af30ea +ad8aebaf31e1af2ce4af2de5af2e06ec +0ceca540f2af14f3af15f8af16e1af11 +e7af12ebaf1302e7af17edaf18eeaf19 +0011ed1df50ff5af27f6af28f7af29f8 +af2af9af2bedaf23efaf24f2af25f3af +26e50fe5af1ee6af1fe7af20ebaf21ec +af22e1af1ae2af1be3af1ce4af1d6896 +69a2666a0feb1aef0cefaf0df2af0ef5 +af0ff7af10ebaf09ecaf0aedaf0beeaf +0ce50ce5af05e6af06e9af07eaaf08e1 +af01e2af02e3af03e4af040cef17f50c +f5ade8f6ade9f7adeaf8adebefade5f2 +ade6f3ade7ec09ecade2edade3eeade4 +e4addfe7ade0e9ade10016ee2af414f8 +09f8adfef9adfffaaf00f4adf0f5adfc +f7adfdf109f1adf9f2adfaf3adfbeead +f5efadf7f0adf8e714ea09eaadf4ebad +f5ecadf6e7adf1e8adf2e9adf3e1adec +e2adede3adeee4adefe6adf064a264a2 +4265a265670011ec1df30ff3addaf4ad +dbf7addcf8adddfaaddeecadd6eeadd7 +efadd8f2add9e50fe5add1e7add2e8ad +d3e9add4ebadd5e1adcde2adcee3adcf +e4add00aea14f209f2adb9f3adbaf7ad +bbeaadb6eeadb7efadb8e1adb1e4adb2 +e5adb3e7adb4e9adb50fec1af20cf2ad +c9f3adcaf6adcbfaadccecadc5edadc6 +eeadc7f1adc8e70ce7adc1e8adc2e9ad +c3ebadc4e3adbde4adbee5adbfe6adc0 +613662a2566301e3adaff2adb00015ed +25f314f709f7ad99f8ad9afaad9bf3ad +96f5ad97f6ad98edad91efad92f0ad93 +f1ad94f2ad95e714ea09eaad8eebad8f +ecad90e7ad8be8ad8ce9ad8de1ad86e3 +ad87e4ad88e5ad89e6ad8a0012ed20f4 +0ff4adaaf5adabf6adacf7adadf9adae +edada5eeada6efada7f0ada8f1ada9e6 +0fe6ada0e7ada1e9ada2eaada3ecada4 +e1ad9ce2ad9de4ad9ee5ad9f2ab40061 +ccef62002373c2d0e51ded0feda905ee +a91eefa936f2a979f3a993e5a74be7a7 +78e8a78ee9a7a777c14b773878a26179 +a2a77aa2e8e1a5ea0017ed2af414f809 +f8ab07f9ab08faab09f4ab04f5ab05f7 +ab06f109f1ab01f2ab02f3ab03eda9fe +efa9fff0ab00e714ea09eaa9fbeba9fc +eca9fde7a9f8e8a9f9e9a9fae409e4a9 +f5e5a9f6e6a9f7e1a9f2e2a9f3e3a9f4 +0014ed25f214f609f6ab1bf7ab1cfaab +1df2a9c2f3ab19f5ab1aedab14eeab15 +efab16f0ab17f1ab18e80fe8ab0fe9ab +10eaab11ebab12ecab13e1ab0ae2ab0b +e3ab0ce6ab0de7ab0e0013ec20f30ff3 +ab2df6ab2ef7ab2ff8ab30faab31ecab +28edab29eeab2af0ab2bf2ab2ce60fe6 +ab23e8ab24e9ab25eaab26ebab27e1ab +1ee2ab1fe3ab20e4ab21e5ab220017ee +2af514f809f8ab46f9ab47faab48f5ab +43f6ab44f7ab45f109f1ab40f2ab41f4 +ab42eeab3defab3ef0ab3fe814eb09eb +ab3aecab3bedab3ce8ab37e9ab38eaab +39e409e4ab34e5ab35e6ab36e1ab32e2 +ab33e3a7ca73a25a74a2aa75a2ff7600 +16ed2af514f809f8a9eff9a9f0faa9f1 +f5a9ecf6a9edf7a9eef109f1a9e9f2a9 +eaf4a9ebeda9e6eea9e7efa9e8e614e9 +09e9a9e3eaa9e4eba9e5e6a9e0e7a9e1 +e8a9e2e1a9dbe2a9dce3a9dde4a9dee5 +a9df0016ee2af414f709f7a9a8f8a9a9 +f9a9aaf4a9a5f5a9a6f6a9a7f109f1a9 +a2f2a9a3f3a9a4eea99fefa9a0f0a9a1 +e814eb09eba99ceca99deda99ee8a999 +e9a99aeaa99be1a994e2a995e3a996e5 +a997e6a9980017ef2af514f809f8a9bf +f9a9c0faa9c1f5a9bcf6a9bdf7a9bef2 +09f2a9b9f3a9baf4a9bbefa9b6f0a9b7 +f1a9b8e714ea09eaa9b3eda9b4eea9b5 +e7a9b0e8a9b1e9a9b2e409e4a9ade5a9 +aee6a9afe1a9abe2a74de3a9ac0018ee +2df417f70cf7a9d7f8a9d8f9a9d9faa9 +daf4a9d4f5a9d5f6a9d6f109f1a9d1f2 +a9d2f3a9d3eea9ceefa9cff0a9d0e714 +ea09eaa9cbeba9cceda9cde7a9c8e8a9 +c9e9a9cae409e4a9c5e5a9c6e6a9c7e1 +a9c2e2a9c3e3a9c46ac3186ec1a56ea2 +656fa2b570a2fb71a44b720018ee2df4 +17f70cf7a98ff8a990f9a991faa992f4 +a98cf5a98df6a98ef109f1a989f2a98a +f3a98beea986efa987f0a988e814eb09 +eba983eca984eda985e8a980e9a981ea +a982e409e4a97de6a97ee7a97fe1a97a +e2a97be3a97c0016ee2af514f809f8a9 +33f9a934faa935f5a930f6a931f7a932 +f109f1a92df2a92ef3a92feea92aefa9 +2bf0a92ce614ea09eaa927eba928eda9 +29e6a924e7a925e9a926e1a91fe2a920 +e3a921e4a922e5a9230014ef25f514f8 +09f8a949f9a94afaa94bf5a946f6a947 +f7a948efa941f0a942f1a943f2a944f4 +a945ea0feaa93ceba93deca93eeda93f +eea940e1a937e2a938e5a939e6a93ae8 +a93b0016ef2af514f809f8a960f9a961 +faa962f5a95df6a95ef7a95ff209f2a9 +5af3a95bf4a95cefa957f0a958f1a959 +e814eb09eba954eca955eda956e8a951 +e9a952eaa953e1a94ce3a94de4a94ee5 +a94fe7a9500015ef25f414f709f7a976 +f8a977faa978f4a973f5a974f6a975ef +a96ef0a96ff1a970f2a971f3a972e714 +eb09eba96beca96ceda96de7a968e9a9 +69eaa96ae1a963e2a964e3a965e4a966 +e6a9676aa25f6ba2b76ca40f6d0017ed +2af314f709f7a91bf8a91cfaa91df3a9 +18f5a919f6a91af009f0a915f1a916f2 +a917eda912eea913efa914e714ea09ea +a90feba910eca911e7a90ce8a90de9a9 +0ee409e4a909e5a90ae6a90be1a906e2 +a907e3a9080018ee2df417f70cf7a7d0 +f8a7d1f9a7d2faa7d3f4a7cdf5a7cef6 +a7cff109f1a7caf2a7cbf3a7cceea7c7 +efa7c8f0a7c9e814eb09eba7c4eca7c5 +eda7c6e8a7c1e9a7c2eaa7c3e409e4a7 +bee6a7bfe7a7c0e1a7bbe2a7bce3a7bd +0018ee2df417f70cf7a7e9f8a7eaf9a7 +ebfaa7ecf4a7e6f5a7e7f6a7e8f109f1 +a7e3f2a7e4f3a7e5eea7e0efa7e1f0a7 +e2e814eb09eba7ddeca7deeda7dfe8a7 +dae9a7dbeaa7dce409e4a7d7e6a7d8e7 +a7d9e1a7d4e2a7d5e3a7d60017ee2af4 +14f809f8a902f9a903faa904f4a7fff6 +a900f7a901f109f1a7fcf2a7fdf3a7fe +eea7f9efa7faf0a7fbe714ea09eaa7f6 +eba7f7eda7f8e7a7f3e8a7f4e9a7f5e4 +09e4a7f0e5a7f1e6a7f2e1a7ede2a7ee +e3a7ef65c19b65a25366a29e67a2e968 +a434690014ee25f414f709f7a7b8f9a7 +b9faa7baf4a7b5f5a7b6f6a7b7eea7b1 +efa7b2f0a7b3f1a7b4f2a7aae60fe6a7 +ade7a7aeeba723eca7afeda7b0e1a7a8 +e2a7a9e3a7aae4a7abe5a7ac0015ef25 +f514f809f8a75ff9a760faa761f5a75c +f6a75df7a75eefa757f0a758f1a759f3 +a75af4a75be614ea09eaa754eba755ed +a756e6a751e8a752e9a753e1a74ce2a7 +4de3a74ee4a74fe5a7500015ee25f414 +f809f8a775f9a776faa777f4a772f5a7 +73f7a774eea76defa76ef0a76ff1a770 +f3a771e614ea09eaa76aeca76beda76c +e6a767e7a768e8a769e1a762e2a763e3 +a764e4a765e5a7660015f025f514f809 +f8a78bf9a78cfaa78df5a788f6a789f7 +a78af0a783f1a784f2a785f3a786f4a7 +87e714ed09eda71eeea781efa782e7a7 +7ee9a77feaa780e1a779e2a77ae3a77b +e4a77ce6a77d0018ed2df317f60cf6a7 +a3f7a7a4f9a7a5faa7a6f3a7a0f4a7a1 +f5a7a2f009f0a79df1a79ef2a79feda7 +9beea79cefa78ee714ea09eaa798eba7 +99eca79ae7a795e8a796e9a797e409e4 +a792e5a793e6a794e1a78fe2a790e3a7 +9161a26562a2b563a40a640019ee2df4 +17f70cf7a747f8a748f9a749faa74af4 +a744f5a745f6a746f109f1a741f2a742 +f3a743eea73eefa73ff0a740e717ea0c +eaa73aeba73beca73ceda73de7a737e8 +a738e9a739e409e4a734e5a735e6a736 +e1a731e2a732e3a7330014ef2ff514f8 +09f8a5fef9a5fffaa700f5a5fbf6a5fc +f7a5fdefa5f5f032f1a5f8f2a5f9f3a5 +fa012aa5f64b127261e9a5f7e70fe7a5 +f0e8a5f1eaa5f2eca5f3eea5f4e1a5eb +e2a5ece3a5ede5a5eee6a5ef0017ee2a +f414f709f7a716f8a717f9a718f4a713 +f5a714f6a715f109f1a710f2a711f3a7 +12eea70defa70ef0a70fe714eb09eba7 +0aeca70beda70ce7a707e9a708eaa709 +e409e4a704e5a705e6a706e1a701e2a7 +02e3a7030018ed2df317f60cf6a72df7 +a72ef9a72ffaa730f3a72af4a72bf5a7 +2cf009f0a727f1a728f2a729eda724ee +a725efa726e714ea09eaa721eba722ec +a723e7a71ee8a71fe9a720e409e4a71b +e5a71ce6a71de1a719e2a71ae3a5f300 +184dc2af54c0f257375736584e59665a +12616ee2d5be01612c631168efc59811 +72e1d5bd01702c731175f8a3c21165ef +c92a01652c691169e9b58d117ae9b9a5 +544455a2ae5601612c691174e8d5bc11 +69e9d5bb08685e683c698c6ea2466fa2 +48751174e7d5ba106101e158e9042ad1 +2a43324b364c3a5410c8d12a10cebd11 +10c8d5b610c1d5b7012aaf8a4d10d6af +8a01622a7210e8d5b810f4012aa93642 +10d4a34f1173e1c5e301642a7410efd3 +6310f2d5b961346580668667116ce7d5 +b5056d116d2e6e327610f4a7ff10eccf +9e10e7d35e67346b386c01e5cfe4f5b9 +1310e2d5b210f2d5b3116cf5cff6116e +e7d5b4126761f2d39650c0c850a27652 +a2ad5306694769426f6a759079016c2a +7210e3abe710efd5b101643e6e01e4cd +19e8012acd6f4c10cbcd6f10e4d5ae02 +672e72387910efabf701e4cdecefd5af +10e1cf14106e01e4d5b0f5cf65613e67 +5e6801612a7210e4d5ad10f7afda026d +2e72327510f2cbe610f2cdc710e2d5ac +116ef7a565046138654c68526c787211 +74e9d5aa016c2a7510e3ad5510eda54c +1172edd5a802612e6c326e10f8c94310 +e7d5a901e9c7ecf0c7ed1172e4b3f302 +6a306f3675116ef2c5ac116ee7d5ab11 +68e7cb714d9a4ea2b34f057222723073 +44751167f2c7d8016b2a7910e1c7ac10 +e8c7c901672a6d10e1d5a710e5c7bc67 +306c366e1161efd5a61161edd5a51163 +ebcbe007722e725a7460756679116df2 +032aa9d2492e4d325410c8d59e10ceb9 +2210cda9d2116fefc1c11165e9d59c11 +6cf4d59d614265746c9a6f01642a6e10 +e7af5110e9d59b0368326b366e3a7210 +e3d59710ead59410e1d59501e4c368e9 +d5960264346e387201e3d599efd59a10 +e6af1f10e4d5981179edc12804613862 +58655e6b64731168f5d5a402672e6e32 +7210e2d5a110edd59f10e4d5a01161f4 +a54b1177e1d5a2116fef012aafd04d10 +ccd5a347c4644ac3704aa6f44ba80d4c +03614665a6d069a6d27901632a6410e9 +d59310e9d592026ea6ad6fa6ae7410ee +001d4ac16253a1571757ace758aceb59 +2a5a10d7cdd102c4d56bc5d56bd4d52d +534854a24555a2705603c1d528c5d52a +ced529d5a7a70ece1ad40cd4d51dd5bb +18d6d51ed9d58dced51acfcde6d2d51b +d3d58cc90cc9cdabcad518cbcd92cdd5 +19c3d517c4d56ac5cf660ccd17d20cd2 +d1e6d6d341d7d1fadacf6dcdd15cced5 +90cfd1b3c809c8d58fcbd164ccd523c4 +d58ec6d521c7d52204c1d591c7d525d3 +afd9d9d526dad5274d924d4e4ea25250 +a2675204c5d516cfc16cd3d58bd5bb18 +d7cbc80011cf1dd50fd5d504d6d588d8 +d505d9bf37dad506cfd586d1d502d2d5 +87d4c1e3c60fc6d501c7bfb3cbd585cc +a905cdb777c1d584c3d3ffc4d500c5cd +0306c90cc9d50accaf83cfc395d0d589 +c1d507c3d508c5d5090bcc14d409d4d5 +14d7c7f4d9b31accc96acdd511d2d512 +c7c5c1c7d1cfc8b130cbd58a4a564b5a +4c06d30cd3d3fbd4bdeed5d3fcd6bf0d +c2d582c9d3facbd58310cfd57f02c5d3 +f4cdd580dad58142c0ee465b46624772 +48a2444907d10cd1d57dd2d57ed3b568 +d4b5d7c3d3f1c4b56bccd57bced57c02 +c9b12ccfb144d2b14d0ace0cd2c62cd2 +d579d4d3eed7d3efc1d3e9c5d578c6d3 +eac8a3b9ccb97604cbd57aced3f0d2b5 +1fd4b530d5b536425e43a24544a27945 +06c70cc7d576d2d577d3aff6d4d569c1 +d3e5c3d3e6c5afbd0ecc0fd2c643d2c9 +e1d4d571d5b777d6d3d6c60cc6d3cfc7 +d570c9cb9acad3d1c1a993c4d56fc5d3 +ce0fce1ad60cd6d3e0d7c7f0d9d574da +ad44ced573cfd3ddd2d3ded5d3dfc80c +c8d3d9c9d3daccd3dbcdd3dcc3d572c4 +d3d7c6cd46c7d3d804c5adbccad3e2cb +ad85cfd3e3dad575343d34aea2377c38 +82410bd214d709d7d3ccd8d3cddaa5de +d2d3c9d3d3cad4d3cbcc09cca3cfcdd5 +6ecfd3c8c4d3c5c5d56cc6d56d1133b6 +d56a1138b6d56b2aafd9312c321133b0 +d5691137b2bb1810e1c5a410ef012abd +bd4c10c1bdbd1170e3bd30026d2e6e32 +7310f5bd6610e2bd5c01e1bbe4e2b318 +01613a701161ee012ab5f94a10d0b5f9 +016d2a7610e1d56410efd563066e256e +346f3a7254741168e9d5681164e1b9ae +1172e5012ab9c74b01d0d3f6d2b9c711 +61e9a5f761306850691174f3d567026c +2e6e327710e9d56610e9afc310e1d565 +02612e6d326f10eacd1810f2c9c510f2 +012ab9914b10c8b991473448a26a4912 +7461ecb105056f456f4a726475026a2e +6b327210f5c7e110f2b36510e8d55901 +6e2a7410e8b34101e7d557edaff80161 +506510eb032aafc4432e47325410d2a7 +8b10d9d3e110d2afc410eed558613065 +366c1161e7ad641172e1d556116ff201 +2ab1c34710c5b1c3056c186c306d3675 +116ee7d5621175f7b3f0106e01e7b508 +f0b507613265a247691172e1d561016e +2a7410f2a54a05ef2defd55cf35ef404 +2aabaa4332483c4d405410d7abaa01c1 +d55dced55e10cbaba210cfaba4012aab +9e4310ceab9ee2abafe7d55ae9d55b11 +62f2032ab3ca493453385501c1b72bd3 +d56010ccb3ca10c5d55f43c135437444 +a2ee450267446c4a741168e9012aa3e5 +4501d2d3e8d4a3e51179f0afb301622a +7910edd55510e1d5540461a28e68a29d +6fa2ac70a2ae791172ec0e4b48541d54 +32553c58465910d5cd0201cad113d2d5 +4c01c1d3a0dad54d10cbd54e4b324d3c +52525310cbd54b01c7bbb2dad3f803c4 +d548c5d549cbbf26ceaf5002cfd54ad3 +cd02d5cbb9421f4232434247464910d2 +d54702c1d545c7a778d9a74b10d3cd02 +01c551d2d5462acbb938364102c6d542 +ccd543dad5441139b0cd02026b2e6e32 +7210e9d53f10edab7c10f3b59402612e +65327210f3d54010edabce10f2abb811 +70f4ad1a016d2a7210f4afaa10eed541 +03653469866f8c751170ecd5531176e1 +06491749324d364e3a5010cba9bd10ce +b3d610d5d55010d0c3d82ab3d6422a46 +10cab3da10d4d54f1161ebd5511167f2 +d5522aa25441a8a342056f1f6f3e7244 +7501672a6810e4d53e10e9d53d1170ef +abae106101e8c961e9d53c6130655c68 +116bf3d53b036c326d36733a7410ebd5 +3a10e9d53910f5a5fe10f3a9a2116ee7 +012aa91e4210c4a91e00204ac1ba52c0 +cf5638563c5758586259665a01d2d3d7 +d7cdd104c1d528c4d529c5d52aced529 +d5a7a701c6d52bd3cdbc10cbd52c03c4 +d3c4c5d3c4d4d52dd5cd025246536c54 +a25a5503c1d3a0c7d525d9d526dad527 +05d309d3cd02d5cbb9d7cbc8c5d516c8 +cdd1cfc16c0fce1ad40cd4d51dd5cbb9 +d6d51ed9d51fced51acfcde6d2d51bd3 +d51cc90cc9cdabcad518cbcd92cdd519 +c1d50bc3d517c4d3c3c5cf660ecd1ad2 +0cd2d1e6d6d341d7abaadacf6dcdd15c +ced524cfd1b3d0d523c80cc8d12acad1 +13cbd164ccd523c4d520c6d521c7d522 +4e5b4e344fa80c50665110c1d51508c9 +0fc9d50accaf83cfc395d0c3d8d4d50b +c1d507c3d508c5d509c8a7a70dcd17d4 +0cd4d514d7c7f4d9b31adad50dcdd511 +d2d512d3d513c70cc7d1cfc8b130cbd5 +10ccc96ac1d50dc5d50ec6d50f4aa248 +4ba24c4ca2644d0012ce20d50fd5d504 +d6af8ad8d505d9bf37dad506ceaf50cf +aba4d1d502d2d503d4c1e3c60fc6d501 +c7bfb3cbbf26cca905cda9d2c1d3fec3 +d3ffc4d500c5cd0301cfd3f3d0b5f907 +d00cd0d3f6d2b9c7d7d3f7dad3f8c5d3 +f4c7bbb2c8b991cdd3f508d30fd3d3fb +d4bdeed5d3fcd6bf0dd9d3fdc1bdbdc2 +d3f9c9d3facbcd6f42c11f466b466247 +7848a24f4907d10cd1d3f2d2b113d3b5 +68d4b5d7c3d3f1c4b56bccb3caceb3d6 +03c9b12ccfb144d2b14dd8b14d0ace14 +d209d2afc4d4d3eed7d3efced3ebd0d3 +ecd1d3edc1d3e9c5b1c3c6d3eac8a3b9 +ccb97605d409d4b530d5b536d6d3cfcb +aba2ced3f0d2b51f426443a25a44a292 +4507c80cc8d3e7d2d3e8d3aff6d4a3e5 +c1d3e5c3d3e6c5afbdc7a5480010cc1d +d20fd2c9e1d4a34fd5a9d2d6d3d6d9a7 +4bccd3d2ced3d3cfd3d4d1d3d5c70cc7 +a778c8d3d0c9cb9acad3d1c1a993c4a9 +1ec5d3cec6d3cf0010ce1dd50fd5d3df +d6d3e0d7c7f0d9d3e1daad44ceab9ecf +d3ddd2d3ded3cd02c80cc8d3d9c9d3da +ccd3dbcdd3dcc3bf38c4d3d7c6cd46c7 +d3d806cb0ccbad85cfd3e3d9d3d1dad3 +e4c4adbcc5adbccad3e2354b3586378c +3892410ccf17d40cd4d3cbd7d3ccd8d3 +cddaa5decfd3c8d2d3c9d3d3cacc09cc +a3cfcda554cec7f0c4d3c5c5d3c6c6d3 +c71133b2c7f01133b6d3c301382a3910 +b0cd0210b6d3c42aafd9313032363411 +31b9d3c21137b2cbb902302e33323810 +b0adbc10b0ad4410b0a3e5046438673e +6844724a761173f4a358116cedb12811 +68e2d52e116feda39601613e6d01e9a5 +49ee012aa5544110cda55410e200134c +665135513c5340545655725901c5d3c4 +d4cf6e10c1d51503c1d50bc4d3c3d3d5 +1cd9d51f04c4d520c8bf9acad537ced5 +24d2d53810cbd5324c3c4d464e624f66 +5001cbd510d3d51301c2d3f9d9d3fd04 +c1d3fecdd531ceb95cd2d503d5d53510 +c7d53610cdd50c452f4542474c49504a +664b02c8abc9cdd3f5d7d3f701c7a548 +c8d3e710c2d53203c4d533ced534d1d3 +f2d2b11310cfd3f32aa5484132424243 +524410dad3e402c5d3c6c6d3c7dad52f +02c8d3d0ced530d5d53101c3bf38ced3 +93002574c1f5e534f223f2a548f3a560 +f6a5a3f9a5cafa012a2e41127261e2a5 +e0022aa5de49a2b55210d5a5e1e5a358 +e6a366eba3b9eda3e5eea3fc78a67832 +795e7aa260e125e25106eb0ceba5c6ec +a5c7eda5c8f8a5c9e2a5c3e5a5c4e7a5 +c50013ee20f30ff3a5d9f4a5daf5a5db +f8a5dcfaa5ddeea5d5efa5d6f0a5d7f1 +a5d8f2a5cae70fe7a5d0e8a5d1e9a5d2 +eba5d3eca5d4e1a5cbe2a5cce3a5cde4 +a5cee5a5cf08ed0feda5e5eea5e6efa5 +e7f4a5e8faa5e9e2a5e2e4a5e3e7a5e4 +ea012a2e41127261e2a5e0032aa5de31 +2e49345310d5a5e11137b2a5e101d1a5 +dfd2a5e074a24875a29d76a2e3770012 +ee20f50ff5a5bef6a5bff7a5c0f8a5c1 +f9a5c2eea5b9efa5baf2a5bbf3a5bcf4 +a5bde70fe7a5b4e8a5b5e9a5b6eba5b7 +eda5b8e1a5b0e2a5b1e3a5b2e5a5b300 +17ef2af514f809f8a58bf9a58cfaa58d +f5a588f6a589f7a58af209f2a585f3a5 +86f4a587efa582f0a583f1a584e914ec +09eca57feda580eea581e9a57ceaa57d +eba57ee409e4a579e5a57ae7a57be1a5 +76e2a577e3a5780014ed25f214f709f7 +a5a0f9a5a1faa5a2f2a59df4a59ef5a5 +9feda598eea599efa59af0a59bf1a59c +e80fe8a593e9a594eaa595eba596eca5 +97e1a58ee3a58fe4a590e5a591e7a592 +0bee14f409f4a5adf5a5aef6a5afeea5 +aaefa5abf3a5aceb09eba5a7eca5a8ed +a5a9e2a5a4e4a5a5e9a5a66ac2e86fc1 +6d6fa25370a28e71a2e372a2fe730014 +ec25f414f809f8a573f9a574faa575f4 +a570f5a571f6a572eca56beea56cefa5 +6df2a56ef3a56fe70fe7a566e8a567e9 +a568eaa569eba56ae1a561e2a562e3a5 +63e4a564e5a5650011eb1df20ff2a524 +f3a525f4a526f8a527faa528eba520ec +a521eda522eea523e50fe5a51be6a51c +e7a51de9a51eeaa51fe1a517e2a518e3 +a519e4a51a0017ee2af514f809f8a53c +f9a53dfaa53ef5a539f6a53af7a53bf2 +09f2a536f3a537f4a538eea533efa534 +f0a535e814eb09eba530eca531eda532 +e8a52de9a52eeaa52fe509e5a52be6a3 +82e7a52ce2a529e3a3b5e4a52a08ed0f +eda543eea544f2a545f4a546faa547e3 +a53fe4a540e7a541eba5420014ee25f3 +14f809f8a55df9a55efaa55ff3a55af5 +a55bf7a55ceea555efa556f0a557f1a5 +58f2a559e90fe9a550eaa551eba552ec +a553eda554e2a548e332e4a54de5a54e +e8a54f032aa54948324e3a5012616ced +a54c126174f2a54a126261f4a54b6aa2 +686ba2836ca2c46da4196e0019ee2df4 +17f70cf7a513f8a514f9a515faa516f4 +a510f5a511f6a512f109f1a50df2a50e +f3a50feea50aefa50bf0a50ce717ea0c +eaa506eba507eca508eda509e7a503e8 +a504e9a505e409e4a500e5a501e6a502 +e1a3fde2a3fee3a3ff08f00ff0a3b5f4 +a35af5a3b6f7a3b7faa3b8e1a3b1e7a3 +b2e9a3b3eea3b40013ef20f40ff4a3c9 +f5a3caf6a3cbf7a3ccfaa3cdefa3c4f0 +a3c5f1a3c6f2a3c7f3a3c8e70fe7a3bf +e8a3c0e9a3c1eba3c2eca3c3e2a3bae3 +a3bbe4a3bce5a3bde6a3be0017ee2af4 +14f809f8a3e2f9a3e3faa3e4f4a3dff5 +a3e0f7a3e1f109f1a3ddf2a3def3a3cf +eea3daefa3dbf0a3dce814eb09eba3d7 +eca3d8eda3d9e8a3d4e9a3d5eaa3d6e4 +09e4a3d1e5a3d2e6a3d3e1a3cee2a3cf +e3a3d00016ef2af514f809f8a3f9f9a3 +fafaa3fbf5a3f6f6a3f7f7a3f8f209f2 +a3f3f3a3f4f4a3f5efa3f0f0a3f1f1a3 +f2e714eb09eba3ededa3eeeea3efe7a3 +ebe9a3aceaa3ece1a3e6e2a3e7e3a3e8 +e5a3e9e6a3ea65c14365a25866a28367 +a2ab68a406690015ed25f214f709f7a3 +aef8a3aff9a3b0f2a3abf3a3acf4a3ad +eda3a6eea3a7efa3a8f0a3a9f1a3aae6 +14ea09eaa3a3eba3a4eca3a5e6a3a0e7 +a3a1e9a3a2e1a39be2a39ce3a39de4a3 +9ee5a39f0ced17f50cf5a362f7a363f9 +a364faa365eda35ff1a360f2a361e509 +e5a35ceba35deca35ee1a359e2a35ae3 +a35b0bee14f309f3a370f5a371faa372 +eea36defa36ef0a36fe809e8a36ae9a3 +6beba36ce2a367e4a368e5a3690019ee +2df417f70cf7a389f8a38af9a38bfaa3 +8cf4a386f5a387f6a388f109f1a383f2 +a384f3a385eea380efa381f0a382e717 +ea0ceaa37ceba37deca37eeda37fe7a3 +79e8a37ae9a37be409e4a376e5a377e6 +a378e1a373e2a374e3a3750ded17f00c +f0a397f2a398f3a399f4a39aeda394ee +a395efa396e80ce8a390e9a391eba392 +eca393e1a38de2a38ee7a38f61a25062 +a28563a2be640014ee25f414f809f8a3 +55f9a356faa357f4a352f5a353f7a354 +eea34defa34ef0a34ff1a350f2a351e7 +0fe7a348e8a349e9a34aeaa34beca34c +e1a343e2a344e4a345e5a346e6a34700 +15ed1af30ef706f74bf84dfa4ff33df4 +47f549ed3dee3fef41f043f145e60ee9 +06e937eb39ec3be631e733e835e127e2 +29e32be42de52f0016ee1ef50ef806f8 +7bf97dfa7ff575f677f779f206f26ff3 +71f473ee69ef6bf06de60ee906e963ec +65ed67e65de75fe861e153e255e357e4 +59e55b0012f118f60cf69df79ff8a1f9 +a341faa342f193f295f397f499f59be6 +0ae689e88bed8dee8ff091e181e283e4 +85e587 } } match{ diff --git a/icu4c/source/data/misc/supplementalData.txt b/icu4c/source/data/misc/supplementalData.txt index b0909b70d671..a95f79e8aaa5 100644 --- a/icu4c/source/data/misc/supplementalData.txt +++ b/icu4c/source/data/misc/supplementalData.txt @@ -29570,7 +29570,7 @@ supplementalData:table(nofallback){ populationShareF:int{49230000} } man_Nkoo{ - literacyShareF:int{49500000} + literacyShareF:int{49250000} populationShareF:int{49230000} } nqo{ @@ -32631,8 +32631,8 @@ supplementalData:table(nofallback){ officialStatus{"official_regional"} populationShareF:int{47320000} } - sr_Latn{ - populationShareF:int{45360000} + sr{ + populationShareF:int{45410000} } territoryF:intvector{ 62581600, diff --git a/icu4c/source/data/unit/da.txt b/icu4c/source/data/unit/da.txt index 80b1949bbe75..c02333fd0ede 100644 --- a/icu4c/source/data/unit/da.txt +++ b/icu4c/source/data/unit/da.txt @@ -2444,9 +2444,9 @@ da{ } pressure{ inch-ofhg{ - dnam{"# Hg"} - one{"{0} # Hg"} - other{"{0} # Hg"} + dnam{"″ Hg"} + one{"{0} ″ Hg"} + other{"{0} ″ Hg"} } millimeter-ofhg{ dnam{"mmHg"} diff --git a/icu4c/source/i18n/messageformat2.cpp b/icu4c/source/i18n/messageformat2.cpp index 50d87422b64c..a5ef68a2472f 100644 --- a/icu4c/source/i18n/messageformat2.cpp +++ b/icu4c/source/i18n/messageformat2.cpp @@ -18,6 +18,7 @@ #include "messageformat2_allocation.h" #include "messageformat2_checker.h" #include "messageformat2_evaluation.h" +#include "messageformat2_function_registry_internal.h" #include "messageformat2_macros.h" @@ -36,29 +37,62 @@ static Formattable evalLiteral(const Literal& lit) { } // Assumes that `var` is a message argument; returns the argument's value. -[[nodiscard]] FormattedPlaceholder MessageFormatter::evalArgument(const VariableName& var, MessageContext& context, UErrorCode& errorCode) const { +[[nodiscard]] FormattedPlaceholder MessageFormatter::evalArgument(const UnicodeString& fallback, + const VariableName& var, + MessageContext& context, + UErrorCode& errorCode) const { if (U_SUCCESS(errorCode)) { - // The fallback for a variable name is itself. - UnicodeString str(DOLLAR); - str += var; - const Formattable* val = context.getGlobal(*this, var, errorCode); + const Formattable* val = context.getGlobal(var, errorCode); if (U_SUCCESS(errorCode)) { - return (FormattedPlaceholder(*val, str)); + // Note: the fallback string has to be passed in because in a declaration like: + // .local $foo = {$bar :number} + // the fallback for $bar is "$foo". + UnicodeString fallbackToUse = fallback; + if (fallbackToUse.isEmpty()) { + fallbackToUse += DOLLAR; + fallbackToUse += var; + } + return (FormattedPlaceholder(*val, fallbackToUse)); } } return {}; } +// Helper function to re-escape any escaped-char characters +static UnicodeString reserialize(const UnicodeString& s) { + UnicodeString result(PIPE); + for (int32_t i = 0; i < s.length(); i++) { + switch(s[i]) { + case BACKSLASH: + case PIPE: + case LEFT_CURLY_BRACE: + case RIGHT_CURLY_BRACE: { + result += BACKSLASH; + break; + } + default: + break; + } + result += s[i]; + } + result += PIPE; + return result; +} + // Returns the contents of the literal -[[nodiscard]] FormattedPlaceholder MessageFormatter::formatLiteral(const Literal& lit) const { - // The fallback for a literal is itself. - return FormattedPlaceholder(evalLiteral(lit), lit.quoted()); +[[nodiscard]] FormattedPlaceholder MessageFormatter::formatLiteral(const UnicodeString& fallback, + const Literal& lit) const { + // The fallback for a literal is itself, unless another fallback is passed in + // (same reasoning as evalArgument()) + UnicodeString fallbackToUse = fallback.isEmpty() ? reserialize(lit.unquoted()) : fallback; + return FormattedPlaceholder(evalLiteral(lit), fallbackToUse); } -[[nodiscard]] InternalValue* MessageFormatter::formatOperand(const Environment& env, - const Operand& rand, - MessageContext& context, - UErrorCode &status) const { +[[nodiscard]] InternalValue* MessageFormatter::formatOperand(const UnicodeString& fallback, + const Environment& env, + const Operand& rand, + MessageContext& context, + UErrorCode &status) const { if (U_FAILURE(status)) { return {}; } @@ -77,17 +111,20 @@ static Formattable evalLiteral(const Literal& lit) { // NFC-normalize the variable name. See // https://github.com/unicode-org/message-format-wg/blob/main/spec/syntax.md#names-and-identifiers - const VariableName normalized = normalizeNFC(var); + const VariableName normalized = StandardFunctions::normalizeNFC(var); // Look up the variable in the environment if (env.has(normalized)) { // `var` is a local -- look it up const Closure& rhs = env.lookup(normalized); // Format the expression using the environment from the closure - return formatExpression(rhs.getEnv(), rhs.getExpr(), context, status); + // The name of this local variable is the fallback for its RHS. + UnicodeString newFallback(DOLLAR); + newFallback += var; + return formatExpression(newFallback, rhs.getEnv(), rhs.getExpr(), context, status); } // Variable wasn't found in locals -- check if it's global - FormattedPlaceholder result = evalArgument(normalized, context, status); + FormattedPlaceholder result = evalArgument(fallback, normalized, context, status); if (status == U_ILLEGAL_ARGUMENT_ERROR) { status = U_ZERO_ERROR; // Unbound variable -- set a resolution error @@ -101,7 +138,7 @@ static Formattable evalLiteral(const Literal& lit) { return create(InternalValue(std::move(result)), status); } else { U_ASSERT(rand.isLiteral()); - return create(InternalValue(formatLiteral(rand.asLiteral())), status); + return create(InternalValue(formatLiteral(fallback, rand.asLiteral())), status); } } @@ -122,7 +159,7 @@ FunctionOptions MessageFormatter::resolveOptions(const Environment& env, const O // Options are fully evaluated before calling the function // Format the operand - LocalPointer rhsVal(formatOperand(env, v, context, status)); + LocalPointer rhsVal(formatOperand({}, env, v, context, status)); if (U_FAILURE(status)) { return {}; } @@ -227,17 +264,18 @@ FunctionOptions MessageFormatter::resolveOptions(const Environment& env, const O } // Formats an expression using `globalEnv` for the values of variables -[[nodiscard]] InternalValue* MessageFormatter::formatExpression(const Environment& globalEnv, - const Expression& expr, - MessageContext& context, - UErrorCode &status) const { +[[nodiscard]] InternalValue* MessageFormatter::formatExpression(const UnicodeString& fallback, + const Environment& globalEnv, + const Expression& expr, + MessageContext& context, + UErrorCode &status) const { if (U_FAILURE(status)) { return {}; } const Operand& rand = expr.getOperand(); // Format the operand (formatOperand handles the case of a null operand) - LocalPointer randVal(formatOperand(globalEnv, rand, context, status)); + LocalPointer randVal(formatOperand(fallback, globalEnv, rand, context, status)); FormattedPlaceholder maybeRand = randVal->takeArgument(status); @@ -281,7 +319,7 @@ void MessageFormatter::formatPattern(MessageContext& context, const Environment& } else { // Format the expression LocalPointer partVal( - formatExpression(globalEnv, part.contents(), context, status)); + formatExpression({}, globalEnv, part.contents(), context, status)); FormattedPlaceholder partResult = partVal->forceFormatting(context.getErrors(), status); // Force full evaluation, e.g. applying default formatters to @@ -315,7 +353,7 @@ void MessageFormatter::resolveSelectors(MessageContext& context, const Environme // 2. For each expression exp of the message's selectors for (int32_t i = 0; i < dataModel.numSelectors(); i++) { // 2i. Let rv be the resolved value of exp. - LocalPointer rv(formatOperand(env, Operand(selectors[i]), context, status)); + LocalPointer rv(formatOperand({}, env, Operand(selectors[i]), context, status)); if (rv->canSelect()) { // 2ii. If selection is supported for rv: // (True if this code has been reached) @@ -444,7 +482,7 @@ void MessageFormatter::resolvePreferences(MessageContext& context, UVector& res, // 2ii(b)(a) Assert that key is a literal. // (Not needed) // 2ii(b)(b) Let `ks` be the resolved value of `key` in Unicode Normalization Form C. - ks = normalizeNFC(key.asLiteral().unquoted()); + ks = StandardFunctions::normalizeNFC(key.asLiteral().unquoted()); // 2ii(b)(c) Append `ks` as the last element of the list `keys`. ksP.adoptInstead(create(std::move(ks), status)); CHECK_ERROR(status); @@ -505,7 +543,7 @@ void MessageFormatter::filterVariants(const UVector& pref, UVector& vars, UError // 2i(c). Assert that `key` is a literal. // (Not needed) // 2i(d). Let `ks` be the resolved value of `key`. - UnicodeString ks = normalizeNFC(key.asLiteral().unquoted()); + UnicodeString ks = StandardFunctions::normalizeNFC(key.asLiteral().unquoted()); // 2i(e). Let `matches` be the list of strings at index `i` of `pref`. const UVector& matches = *(static_cast(pref[i])); // `matches` is a vector of strings // 2i(f). If `matches` includes `ks` @@ -567,7 +605,7 @@ void MessageFormatter::sortVariants(const UVector& pref, UVector& vars, UErrorCo // 5iii(c)(a). Assert that `key` is a literal. // (Not needed) // 5iii(c)(b). Let `ks` be the resolved value of `key`. - UnicodeString ks = normalizeNFC(key.asLiteral().unquoted()); + UnicodeString ks = StandardFunctions::normalizeNFC(key.asLiteral().unquoted()); // 5iii(c)(c) Let matchpref be the integer position of ks in `matches`. matchpref = vectorFind(matches, ks); U_ASSERT(matchpref >= 0); @@ -652,7 +690,7 @@ UnicodeString MessageFormatter::formatToString(const MessageArguments& arguments formatPattern(context, *globalEnv, dataModel.getPattern(), status, result); } else { // Check for errors/warnings -- if so, then the result of pattern selection is the fallback value - // See https://github.com/unicode-org/message-format-wg/blob/main/spec/formatting.md#pattern-selection + // See https://www.unicode.org/reports/tr35/tr35-messageFormat.html#pattern-selection const DynamicErrors& err = context.getErrors(); if (err.hasSyntaxError() || err.hasDataModelError()) { result += REPLACEMENT; @@ -692,14 +730,14 @@ void MessageFormatter::check(MessageContext& context, const Environment& localEn // Check that variable is in scope const VariableName& var = rand.asVariable(); - UnicodeString normalized = normalizeNFC(var); + UnicodeString normalized = StandardFunctions::normalizeNFC(var); // Check local scope if (localEnv.has(normalized)) { return; } // Check global scope - context.getGlobal(*this, normalized, status); + context.getGlobal(normalized, status); if (status == U_ILLEGAL_ARGUMENT_ERROR) { status = U_ZERO_ERROR; context.getErrors().setUnresolvedVariable(var, status); @@ -736,7 +774,7 @@ void MessageFormatter::checkDeclarations(MessageContext& context, Environment*& // memoizing the value of localEnv up to this point // Add the LHS to the environment for checking the next declaration - env = Environment::create(normalizeNFC(decl.getVariable()), + env = Environment::create(StandardFunctions::normalizeNFC(decl.getVariable()), Closure(rhs, *env), env, status); diff --git a/icu4c/source/i18n/messageformat2_arguments.cpp b/icu4c/source/i18n/messageformat2_arguments.cpp index c43c600a2f40..bf402fe6d5f0 100644 --- a/icu4c/source/i18n/messageformat2_arguments.cpp +++ b/icu4c/source/i18n/messageformat2_arguments.cpp @@ -13,6 +13,7 @@ #include "unicode/messageformat2_arguments.h" #include "unicode/messageformat2_data_model_names.h" #include "messageformat2_evaluation.h" +#include "messageformat2_function_registry_internal.h" #include "uvector.h" // U_ASSERT U_NAMESPACE_BEGIN @@ -26,13 +27,12 @@ namespace message2 { using Arguments = MessageArguments; - const Formattable* Arguments::getArgument(const MessageFormatter& context, - const VariableName& arg, + const Formattable* Arguments::getArgument(const VariableName& arg, UErrorCode& errorCode) const { if (U_SUCCESS(errorCode)) { U_ASSERT(argsLen == 0 || arguments.isValid()); for (int32_t i = 0; i < argsLen; i++) { - UnicodeString normalized = context.normalizeNFC(argumentNames[i]); + UnicodeString normalized = StandardFunctions::normalizeNFC(argumentNames[i]); // arg already assumed to be normalized if (normalized == arg) { return &arguments[i]; diff --git a/icu4c/source/i18n/messageformat2_checker.cpp b/icu4c/source/i18n/messageformat2_checker.cpp index 46b25ff389b5..1956d78aea61 100644 --- a/icu4c/source/i18n/messageformat2_checker.cpp +++ b/icu4c/source/i18n/messageformat2_checker.cpp @@ -13,6 +13,7 @@ #include "messageformat2_allocation.h" #include "messageformat2_checker.h" #include "messageformat2_evaluation.h" +#include "messageformat2_function_registry_internal.h" #include "messageformat2_macros.h" #include "uvector.h" // U_ASSERT @@ -113,7 +114,7 @@ Key Checker::normalizeNFC(const Key& k) const { return k; } return Key(Literal(k.asLiteral().isQuoted(), - context.normalizeNFC(k.asLiteral().unquoted()))); + StandardFunctions::normalizeNFC(k.asLiteral().unquoted()))); } static bool areDefaultKeys(const Key* keys, int32_t len) { diff --git a/icu4c/source/i18n/messageformat2_evaluation.cpp b/icu4c/source/i18n/messageformat2_evaluation.cpp index fcccbf5ae5e7..44796248dd39 100644 --- a/icu4c/source/i18n/messageformat2_evaluation.cpp +++ b/icu4c/source/i18n/messageformat2_evaluation.cpp @@ -46,7 +46,7 @@ FunctionOptions::FunctionOptions(UVector&& optionsVector, UErrorCode& status) { options = moveVectorToArray(optionsVector, status); } -UBool FunctionOptions::getFunctionOption(const UnicodeString& key, Formattable& option) const { +UBool FunctionOptions::getFunctionOption(std::u16string_view key, Formattable& option) const { if (options == nullptr) { U_ASSERT(functionOptionsLen == 0); } @@ -60,7 +60,7 @@ UBool FunctionOptions::getFunctionOption(const UnicodeString& key, Formattable& return false; } -UnicodeString FunctionOptions::getStringFunctionOption(const UnicodeString& key) const { +UnicodeString FunctionOptions::getStringFunctionOption(std::u16string_view key) const { Formattable option; if (getFunctionOption(key, option)) { if (option.getType() == UFMT_STRING) { @@ -211,10 +211,9 @@ PrioritizedVariant::~PrioritizedVariant() {} errors.checkErrors(status); } - const Formattable* MessageContext::getGlobal(const MessageFormatter& context, - const VariableName& v, + const Formattable* MessageContext::getGlobal(const VariableName& v, UErrorCode& errorCode) const { - return arguments.getArgument(context, v, errorCode); + return arguments.getArgument(v, errorCode); } MessageContext::MessageContext(const MessageArguments& args, @@ -356,6 +355,10 @@ PrioritizedVariant::~PrioritizedVariant() {} return {}; } + if (arg.isFallback()) { + return arg; + } + // The fallback for a nullary function call is the function name UnicodeString fallback; if (arg.isNullOperand()) { diff --git a/icu4c/source/i18n/messageformat2_evaluation.h b/icu4c/source/i18n/messageformat2_evaluation.h index fcb30bc3e638..9ef2d798b05d 100644 --- a/icu4c/source/i18n/messageformat2_evaluation.h +++ b/icu4c/source/i18n/messageformat2_evaluation.h @@ -149,9 +149,7 @@ namespace message2 { public: MessageContext(const MessageArguments&, const StaticErrors&, UErrorCode&); - const Formattable* getGlobal(const MessageFormatter&, - const VariableName&, - UErrorCode&) const; + const Formattable* getGlobal(const VariableName&, UErrorCode&) const; // If any errors were set, update `status` accordingly void checkErrors(UErrorCode& status) const; diff --git a/icu4c/source/i18n/messageformat2_formatter.cpp b/icu4c/source/i18n/messageformat2_formatter.cpp index ead6f62a7899..a1c5196a42b4 100644 --- a/icu4c/source/i18n/messageformat2_formatter.cpp +++ b/icu4c/source/i18n/messageformat2_formatter.cpp @@ -24,6 +24,18 @@ U_NAMESPACE_BEGIN namespace message2 { + namespace functions { + static constexpr std::u16string_view DATETIME = u"datetime"; + static constexpr std::u16string_view DATE = u"date"; + static constexpr std::u16string_view TIME = u"time"; + static constexpr std::u16string_view NUMBER = u"number"; + static constexpr std::u16string_view INTEGER = u"integer"; + static constexpr std::u16string_view TEST_FUNCTION = u"test:function"; + static constexpr std::u16string_view TEST_FORMAT = u"test:format"; + static constexpr std::u16string_view TEST_SELECT = u"test:select"; + static constexpr std::u16string_view STRING = u"string"; + } + // MessageFormatter::Builder // ------------------------------------- @@ -119,24 +131,6 @@ namespace message2 { // MessageFormatter - // Returns the NFC-normalized version of s, returning s itself - // if it's already normalized. - UnicodeString MessageFormatter::normalizeNFC(const UnicodeString& s) const { - UErrorCode status = U_ZERO_ERROR; - // Check if string is already normalized - UNormalizationCheckResult result = nfcNormalizer->quickCheck(s, status); - // If so, return it - if (U_SUCCESS(status) && result == UNORM_YES) { - return s; - } - // Otherwise, normalize it - UnicodeString normalized = nfcNormalizer->normalize(s, status); - if (U_FAILURE(status)) { - return {}; - } - return normalized; - } - MessageFormatter::MessageFormatter(const MessageFormatter::Builder& builder, UErrorCode &success) : locale(builder.locale), customMFFunctionRegistry(builder.customMFFunctionRegistry) { CHECK_ERROR(success); @@ -148,18 +142,18 @@ namespace message2 { FormatterFactory* time = StandardFunctions::DateTimeFactory::time(success); FormatterFactory* number = new StandardFunctions::NumberFactory(); FormatterFactory* integer = new StandardFunctions::IntegerFactory(); - standardFunctionsBuilder.adoptFormatter(FunctionName(UnicodeString("datetime")), dateTime, success) - .adoptFormatter(FunctionName(UnicodeString("date")), date, success) - .adoptFormatter(FunctionName(UnicodeString("time")), time, success) - .adoptFormatter(FunctionName(UnicodeString("number")), number, success) - .adoptFormatter(FunctionName(UnicodeString("integer")), integer, success) - .adoptFormatter(FunctionName(UnicodeString("test:function")), new StandardFunctions::TestFormatFactory(), success) - .adoptFormatter(FunctionName(UnicodeString("test:format")), new StandardFunctions::TestFormatFactory(), success) - .adoptSelector(FunctionName(UnicodeString("number")), new StandardFunctions::PluralFactory(UPLURAL_TYPE_CARDINAL), success) - .adoptSelector(FunctionName(UnicodeString("integer")), new StandardFunctions::PluralFactory(StandardFunctions::PluralFactory::integer()), success) - .adoptSelector(FunctionName(UnicodeString("string")), new StandardFunctions::TextFactory(), success) - .adoptSelector(FunctionName(UnicodeString("test:function")), new StandardFunctions::TestSelectFactory(), success) - .adoptSelector(FunctionName(UnicodeString("test:select")), new StandardFunctions::TestSelectFactory(), success); + standardFunctionsBuilder.adoptFormatter(FunctionName(functions::DATETIME), dateTime, success) + .adoptFormatter(FunctionName(functions::DATE), date, success) + .adoptFormatter(FunctionName(functions::TIME), time, success) + .adoptFormatter(FunctionName(functions::NUMBER), number, success) + .adoptFormatter(FunctionName(functions::INTEGER), integer, success) + .adoptFormatter(FunctionName(functions::TEST_FUNCTION), new StandardFunctions::TestFormatFactory(), success) + .adoptFormatter(FunctionName(functions::TEST_FORMAT), new StandardFunctions::TestFormatFactory(), success) + .adoptSelector(FunctionName(functions::NUMBER), new StandardFunctions::PluralFactory(UPLURAL_TYPE_CARDINAL), success) + .adoptSelector(FunctionName(functions::INTEGER), new StandardFunctions::PluralFactory(StandardFunctions::PluralFactory::integer()), success) + .adoptSelector(FunctionName(functions::STRING), new StandardFunctions::TextFactory(), success) + .adoptSelector(FunctionName(functions::TEST_FUNCTION), new StandardFunctions::TestSelectFactory(), success) + .adoptSelector(FunctionName(functions::TEST_SELECT), new StandardFunctions::TestSelectFactory(), success); CHECK_ERROR(success); standardMFFunctionRegistry = standardFunctionsBuilder.build(); CHECK_ERROR(success); @@ -188,8 +182,6 @@ namespace message2 { errors = errorsNew.orphan(); } - nfcNormalizer = Normalizer2::getNFCInstance(success); - // Note: we currently evaluate variables lazily, // without memoization. This call is still necessary // to check out-of-scope uses of local variables in @@ -218,7 +210,6 @@ namespace message2 { signalErrors = other.signalErrors; errors = other.errors; other.errors = nullptr; - nfcNormalizer = other.nfcNormalizer; return *this; } diff --git a/icu4c/source/i18n/messageformat2_function_registry.cpp b/icu4c/source/i18n/messageformat2_function_registry.cpp index e45fb3544ec5..668f0c4251d3 100644 --- a/icu4c/source/i18n/messageformat2_function_registry.cpp +++ b/icu4c/source/i18n/messageformat2_function_registry.cpp @@ -10,10 +10,13 @@ #if !UCONFIG_NO_MF2 #include +#include #include "unicode/dtptngen.h" +#include "unicode/messageformat2.h" #include "unicode/messageformat2_data_model_names.h" #include "unicode/messageformat2_function_registry.h" +#include "unicode/normalizer2.h" #include "unicode/smpdtfmt.h" #include "charstr.h" #include "double-conversion.h" @@ -38,6 +41,54 @@ U_NAMESPACE_BEGIN namespace message2 { +// Constants for option names +namespace options { +static constexpr std::u16string_view ALWAYS = u"always"; +static constexpr std::u16string_view COMPACT = u"compact"; +static constexpr std::u16string_view COMPACT_DISPLAY = u"compactDisplay"; +static constexpr std::u16string_view DATE_STYLE = u"dateStyle"; +static constexpr std::u16string_view DAY = u"day"; +static constexpr std::u16string_view DECIMAL_PLACES = u"decimalPlaces"; +static constexpr std::u16string_view DEFAULT_UPPER = u"DEFAULT"; +static constexpr std::u16string_view ENGINEERING = u"engineering"; +static constexpr std::u16string_view EXACT = u"exact"; +static constexpr std::u16string_view EXCEPT_ZERO = u"exceptZero"; +static constexpr std::u16string_view FAILS = u"fails"; +static constexpr std::u16string_view FULL_UPPER = u"FULL"; +static constexpr std::u16string_view HOUR = u"hour"; +static constexpr std::u16string_view LONG = u"long"; +static constexpr std::u16string_view LONG_UPPER = u"LONG"; +static constexpr std::u16string_view MAXIMUM_FRACTION_DIGITS = u"maximumFractionDigits"; +static constexpr std::u16string_view MAXIMUM_SIGNIFICANT_DIGITS = u"maximumSignificantDigits"; +static constexpr std::u16string_view MEDIUM_UPPER = u"MEDIUM"; +static constexpr std::u16string_view MIN2 = u"min2"; +static constexpr std::u16string_view MINIMUM_FRACTION_DIGITS = u"minimumFractionDigits"; +static constexpr std::u16string_view MINIMUM_INTEGER_DIGITS = u"minimumIntegerDigits"; +static constexpr std::u16string_view MINIMUM_SIGNIFICANT_DIGITS = u"minimumSignificantDigits"; +static constexpr std::u16string_view MINUTE = u"minute"; +static constexpr std::u16string_view MONTH = u"month"; +static constexpr std::u16string_view NARROW = u"narrow"; +static constexpr std::u16string_view NEGATIVE = u"negative"; +static constexpr std::u16string_view NEVER = u"never"; +static constexpr std::u16string_view NOTATION = u"notation"; +static constexpr std::u16string_view NUMBERING_SYSTEM = u"numberingSystem"; +static constexpr std::u16string_view NUMERIC = u"numeric"; +static constexpr std::u16string_view ORDINAL = u"ordinal"; +static constexpr std::u16string_view PERCENT_STRING = u"percent"; +static constexpr std::u16string_view SCIENTIFIC = u"scientific"; +static constexpr std::u16string_view SECOND = u"second"; +static constexpr std::u16string_view SELECT = u"select"; +static constexpr std::u16string_view SHORT = u"short"; +static constexpr std::u16string_view SHORT_UPPER = u"SHORT"; +static constexpr std::u16string_view SIGN_DISPLAY = u"signDisplay"; +static constexpr std::u16string_view STYLE = u"style"; +static constexpr std::u16string_view TIME_STYLE = u"timeStyle"; +static constexpr std::u16string_view TWO_DIGIT = u"2-digit"; +static constexpr std::u16string_view USE_GROUPING = u"useGrouping"; +static constexpr std::u16string_view WEEKDAY = u"weekday"; +static constexpr std::u16string_view YEAR = u"year"; +} // namespace options + // Function registry implementation Formatter::~Formatter() {} @@ -172,6 +223,28 @@ void MFFunctionRegistry::checkStandard() const { // Formatter/selector helpers +// Returns the NFC-normalized version of s, returning s itself +// if it's already normalized. +/* static */ UnicodeString StandardFunctions::normalizeNFC(const UnicodeString& s) { + UErrorCode status = U_ZERO_ERROR; + const Normalizer2* nfcNormalizer = Normalizer2::getNFCInstance(status); + if (U_FAILURE(status)) { + return s; + } + // Check if string is already normalized + UNormalizationCheckResult result = nfcNormalizer->quickCheck(s, status); + // If so, return it + if (U_SUCCESS(status) && result == UNORM_YES) { + return s; + } + // Otherwise, normalize it + UnicodeString normalized = nfcNormalizer->normalize(s, status); + if (U_FAILURE(status)) { + return {}; + } + return normalized; +} + // Converts `s` to a double, indicating failure via `errorCode` static void strToDouble(const UnicodeString& s, double& result, UErrorCode& errorCode) { CHECK_ERROR(errorCode); @@ -283,14 +356,14 @@ MFFunctionRegistry::~MFFunctionRegistry() { // Default notation is simple Notation notation = Notation::simple(); - UnicodeString notationOpt = opts.getStringFunctionOption(UnicodeString("notation")); - if (notationOpt == UnicodeString("scientific")) { + UnicodeString notationOpt = opts.getStringFunctionOption(options::NOTATION); + if (notationOpt == options::SCIENTIFIC) { notation = Notation::scientific(); - } else if (notationOpt == UnicodeString("engineering")) { + } else if (notationOpt == options::ENGINEERING) { notation = Notation::engineering(); - } else if (notationOpt == UnicodeString("compact")) { - UnicodeString displayOpt = opts.getStringFunctionOption(UnicodeString("compactDisplay")); - if (displayOpt == UnicodeString("long")) { + } else if (notationOpt == options::COMPACT) { + UnicodeString displayOpt = opts.getStringFunctionOption(options::COMPACT_DISPLAY); + if (displayOpt == options::LONG) { notation = Notation::compactLong(); } else { // Default is short @@ -354,15 +427,15 @@ MFFunctionRegistry::~MFFunctionRegistry() { nf = nf.integerWidth(IntegerWidth::zeroFillTo(minIntegerDigits)); // signDisplay - UnicodeString sd = opts.getStringFunctionOption(UnicodeString("signDisplay")); + UnicodeString sd = opts.getStringFunctionOption(options::SIGN_DISPLAY); UNumberSignDisplay signDisplay; - if (sd == UnicodeString("always")) { + if (sd == options::ALWAYS) { signDisplay = UNumberSignDisplay::UNUM_SIGN_ALWAYS; - } else if (sd == UnicodeString("exceptZero")) { + } else if (sd == options::EXCEPT_ZERO) { signDisplay = UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO; - } else if (sd == UnicodeString("negative")) { + } else if (sd == options::NEGATIVE) { signDisplay = UNumberSignDisplay::UNUM_SIGN_NEGATIVE; - } else if (sd == UnicodeString("never")) { + } else if (sd == options::NEVER) { signDisplay = UNumberSignDisplay::UNUM_SIGN_NEVER; } else { signDisplay = UNumberSignDisplay::UNUM_SIGN_AUTO; @@ -370,13 +443,13 @@ MFFunctionRegistry::~MFFunctionRegistry() { nf = nf.sign(signDisplay); // useGrouping - UnicodeString ug = opts.getStringFunctionOption(UnicodeString("useGrouping")); + UnicodeString ug = opts.getStringFunctionOption(options::USE_GROUPING); UNumberGroupingStrategy grp; - if (ug == UnicodeString("always")) { + if (ug == options::ALWAYS) { grp = UNumberGroupingStrategy::UNUM_GROUPING_ON_ALIGNED; - } else if (ug == UnicodeString("never")) { + } else if (ug == options::NEVER) { grp = UNumberGroupingStrategy::UNUM_GROUPING_OFF; - } else if (ug == UnicodeString("min2")) { + } else if (ug == options::MIN2) { grp = UNumberGroupingStrategy::UNUM_GROUPING_MIN2; } else { // Default is "auto" @@ -385,7 +458,7 @@ MFFunctionRegistry::~MFFunctionRegistry() { nf = nf.grouping(grp); // numberingSystem - UnicodeString ns = opts.getStringFunctionOption(UnicodeString("numberingSystem")); + UnicodeString ns = opts.getStringFunctionOption(options::NUMBERING_SYSTEM); if (ns.length() > 0) { ns = ns.toLower(Locale("en-US")); CharString buffer; @@ -504,21 +577,6 @@ static UChar32 digitToChar(int32_t val, UErrorCode errorCode) { } } -static FormattedPlaceholder tryParsingNumberLiteral(const number::LocalizedNumberFormatter& nf, const FormattedPlaceholder& input, UErrorCode& errorCode) { - double numberValue = parseNumberLiteral(input.asFormattable(), errorCode); - if (U_FAILURE(errorCode)) { - return notANumber(input); - } - - UErrorCode savedStatus = errorCode; - number::FormattedNumber result = nf.formatDouble(numberValue, errorCode); - // Ignore U_USING_DEFAULT_WARNING - if (errorCode == U_USING_DEFAULT_WARNING) { - errorCode = savedStatus; - } - return FormattedPlaceholder(input, FormattedValue(std::move(result))); -} - int32_t StandardFunctions::Number::maximumFractionDigits(const FunctionOptions& opts) const { Formattable opt; @@ -526,7 +584,7 @@ int32_t StandardFunctions::Number::maximumFractionDigits(const FunctionOptions& return 0; } - if (opts.getFunctionOption(UnicodeString("maximumFractionDigits"), opt)) { + if (opts.getFunctionOption(options::MAXIMUM_FRACTION_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -543,7 +601,7 @@ int32_t StandardFunctions::Number::minimumFractionDigits(const FunctionOptions& Formattable opt; if (!isInteger) { - if (opts.getFunctionOption(UnicodeString("minimumFractionDigits"), opt)) { + if (opts.getFunctionOption(options::MINIMUM_FRACTION_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -560,7 +618,7 @@ int32_t StandardFunctions::Number::minimumFractionDigits(const FunctionOptions& int32_t StandardFunctions::Number::minimumIntegerDigits(const FunctionOptions& opts) const { Formattable opt; - if (opts.getFunctionOption(UnicodeString("minimumIntegerDigits"), opt)) { + if (opts.getFunctionOption(options::MINIMUM_INTEGER_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -574,7 +632,7 @@ int32_t StandardFunctions::Number::minimumSignificantDigits(const FunctionOption Formattable opt; if (!isInteger) { - if (opts.getFunctionOption(UnicodeString("minimumSignificantDigits"), opt)) { + if (opts.getFunctionOption(options::MINIMUM_SIGNIFICANT_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -591,7 +649,7 @@ int32_t StandardFunctions::Number::minimumSignificantDigits(const FunctionOption int32_t StandardFunctions::Number::maximumSignificantDigits(const FunctionOptions& opts) const { Formattable opt; - if (opts.getFunctionOption(UnicodeString("maximumSignificantDigits"), opt)) { + if (opts.getFunctionOption(options::MAXIMUM_SIGNIFICANT_DIGITS, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; int64_t val = getInt64Value(locale, opt, localErrorCode); if (U_SUCCESS(localErrorCode)) { @@ -607,14 +665,14 @@ int32_t StandardFunctions::Number::maximumSignificantDigits(const FunctionOption bool StandardFunctions::Number::usePercent(const FunctionOptions& opts) const { Formattable opt; if (isInteger - || !opts.getFunctionOption(UnicodeString("style"), opt) + || !opts.getFunctionOption(options::STYLE, opt) || opt.getType() != UFMT_STRING) { return false; } UErrorCode localErrorCode = U_ZERO_ERROR; const UnicodeString& style = opt.getString(localErrorCode); U_ASSERT(U_SUCCESS(localErrorCode)); - return (style == UnicodeString("percent")); + return (style == options::PERCENT_STRING); } /* static */ StandardFunctions::Number StandardFunctions::Number::integer(const Locale& loc) { @@ -636,6 +694,8 @@ FormattedPlaceholder StandardFunctions::Number::format(FormattedPlaceholder&& ar realFormatter = formatterForOptions(*this, opts, errorCode); number::FormattedNumber numberResult; + int64_t integerValue = 0; + if (U_SUCCESS(errorCode)) { // Already checked that contents can be formatted const Formattable& toFormat = arg.asFormattable(); @@ -644,23 +704,31 @@ FormattedPlaceholder StandardFunctions::Number::format(FormattedPlaceholder&& ar double d = toFormat.getDouble(errorCode); U_ASSERT(U_SUCCESS(errorCode)); numberResult = realFormatter.formatDouble(d, errorCode); + integerValue = static_cast(std::round(d)); break; } case UFMT_LONG: { int32_t l = toFormat.getLong(errorCode); U_ASSERT(U_SUCCESS(errorCode)); numberResult = realFormatter.formatInt(l, errorCode); + integerValue = l; break; } case UFMT_INT64: { int64_t i = toFormat.getInt64(errorCode); U_ASSERT(U_SUCCESS(errorCode)); numberResult = realFormatter.formatInt(i, errorCode); + integerValue = i; break; } case UFMT_STRING: { // Try to parse the string as a number - return tryParsingNumberLiteral(realFormatter, arg, errorCode); + double d = parseNumberLiteral(toFormat, errorCode); + if (U_FAILURE(errorCode)) + return {}; + numberResult = realFormatter.formatDouble(d, errorCode); + integerValue = static_cast(std::round(d)); + break; } default: { // Other types can't be parsed as a number @@ -670,6 +738,11 @@ FormattedPlaceholder StandardFunctions::Number::format(FormattedPlaceholder&& ar } } + // Need to return the integer value if invoked as :integer + if (isInteger) { + return FormattedPlaceholder(FormattedPlaceholder(Formattable(integerValue), arg.getFallback()), + FormattedValue(std::move(numberResult))); + } return FormattedPlaceholder(arg, FormattedValue(std::move(numberResult))); } @@ -682,14 +755,14 @@ StandardFunctions::NumberFactory::~NumberFactory() {} StandardFunctions::Plural::PluralType StandardFunctions::Plural::pluralType(const FunctionOptions& opts) const { Formattable opt; - if (opts.getFunctionOption(UnicodeString("select"), opt)) { + if (opts.getFunctionOption(options::SELECT, opt)) { UErrorCode localErrorCode = U_ZERO_ERROR; UnicodeString val = opt.getString(localErrorCode); if (U_SUCCESS(localErrorCode)) { - if (val == UnicodeString("ordinal")) { + if (val == options::ORDINAL) { return PluralType::PLURAL_ORDINAL; } - if (val == UnicodeString("exact")) { + if (val == options::EXACT) { return PluralType::PLURAL_EXACT; } } @@ -842,7 +915,7 @@ StandardFunctions::PluralFactory::~PluralFactory() {} // --------- DateTimeFactory /* static */ UnicodeString StandardFunctions::getStringOption(const FunctionOptions& opts, - const UnicodeString& optionName, + std::u16string_view optionName, UErrorCode& errorCode) { if (U_SUCCESS(errorCode)) { Formattable opt; @@ -857,11 +930,11 @@ StandardFunctions::PluralFactory::~PluralFactory() {} } // Date/time options only -static UnicodeString defaultForOption(const UnicodeString& optionName) { - if (optionName == UnicodeString("dateStyle") - || optionName == UnicodeString("timeStyle") - || optionName == UnicodeString("style")) { - return UnicodeString("short"); +static UnicodeString defaultForOption(std::u16string_view optionName) { + if (optionName == options::DATE_STYLE + || optionName == options::TIME_STYLE + || optionName == options::STYLE) { + return UnicodeString(options::SHORT); } return {}; // Empty string is default } @@ -875,7 +948,7 @@ static UnicodeString defaultForOption(const UnicodeString& optionName) { // which works for datetime options but not necessarily in general. UnicodeString StandardFunctions::DateTime::getFunctionOption(const FormattedPlaceholder& toFormat, const FunctionOptions& opts, - const UnicodeString& optionName) const { + std::u16string_view optionName) const { // Options passed to the current function invocation take priority Formattable opt; UnicodeString s; @@ -897,7 +970,7 @@ UnicodeString StandardFunctions::DateTime::getFunctionOption(const FormattedPlac // Used for options that don't have defaults UnicodeString StandardFunctions::DateTime::getFunctionOption(const FormattedPlaceholder& toFormat, const FunctionOptions& opts, - const UnicodeString& optionName, + std::u16string_view optionName, UErrorCode& errorCode) const { if (U_SUCCESS(errorCode)) { // Options passed to the current function invocation take priority @@ -922,19 +995,19 @@ UnicodeString StandardFunctions::DateTime::getFunctionOption(const FormattedPlac static DateFormat::EStyle stringToStyle(UnicodeString option, UErrorCode& errorCode) { if (U_SUCCESS(errorCode)) { UnicodeString upper = option.toUpper(); - if (upper == UnicodeString("FULL")) { + if (upper == options::FULL_UPPER) { return DateFormat::EStyle::kFull; } - if (upper == UnicodeString("LONG")) { + if (upper == options::LONG_UPPER) { return DateFormat::EStyle::kLong; } - if (upper == UnicodeString("MEDIUM")) { + if (upper == options::MEDIUM_UPPER) { return DateFormat::EStyle::kMedium; } - if (upper == UnicodeString("SHORT")) { + if (upper == options::SHORT_UPPER) { return DateFormat::EStyle::kShort; } - if (upper.isEmpty() || upper == UnicodeString("DEFAULT")) { + if (upper.isEmpty() || upper == options::DEFAULT_UPPER) { return DateFormat::EStyle::kDefault; } errorCode = U_ILLEGAL_ARGUMENT_ERROR; @@ -1053,95 +1126,95 @@ FormattedPlaceholder StandardFunctions::DateTime::format(FormattedPlaceholder&& #define ADD_PATTERN(s) skeleton += UnicodeString(s) if (U_SUCCESS(errorCode)) { // Year - UnicodeString year = getFunctionOption(toFormat, opts, UnicodeString("year"), errorCode); + UnicodeString year = getFunctionOption(toFormat, opts, options::YEAR, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useDate = true; - if (year == UnicodeString("2-digit")) { + if (year == options::TWO_DIGIT) { ADD_PATTERN("YY"); - } else if (year == UnicodeString("numeric")) { + } else if (year == options::NUMERIC) { ADD_PATTERN("YYYY"); } } // Month - UnicodeString month = getFunctionOption(toFormat, opts, UnicodeString("month"), errorCode); + UnicodeString month = getFunctionOption(toFormat, opts, options::MONTH, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useDate = true; /* numeric, 2-digit, long, short, narrow */ - if (month == UnicodeString("long")) { + if (month == options::LONG) { ADD_PATTERN("MMMM"); - } else if (month == UnicodeString("short")) { + } else if (month == options::SHORT) { ADD_PATTERN("MMM"); - } else if (month == UnicodeString("narrow")) { + } else if (month == options::NARROW) { ADD_PATTERN("MMMMM"); - } else if (month == UnicodeString("numeric")) { + } else if (month == options::NUMERIC) { ADD_PATTERN("M"); - } else if (month == UnicodeString("2-digit")) { + } else if (month == options::TWO_DIGIT) { ADD_PATTERN("MM"); } } // Weekday - UnicodeString weekday = getFunctionOption(toFormat, opts, UnicodeString("weekday"), errorCode); + UnicodeString weekday = getFunctionOption(toFormat, opts, options::WEEKDAY, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useDate = true; - if (weekday == UnicodeString("long")) { + if (weekday == options::LONG) { ADD_PATTERN("EEEE"); - } else if (weekday == UnicodeString("short")) { + } else if (weekday == options::SHORT) { ADD_PATTERN("EEEEE"); - } else if (weekday == UnicodeString("narrow")) { + } else if (weekday == options::NARROW) { ADD_PATTERN("EEEEE"); } } // Day - UnicodeString day = getFunctionOption(toFormat, opts, UnicodeString("day"), errorCode); + UnicodeString day = getFunctionOption(toFormat, opts, options::DAY, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useDate = true; - if (day == UnicodeString("numeric")) { + if (day == options::NUMERIC) { ADD_PATTERN("d"); - } else if (day == UnicodeString("2-digit")) { + } else if (day == options::TWO_DIGIT) { ADD_PATTERN("dd"); } } // Hour - UnicodeString hour = getFunctionOption(toFormat, opts, UnicodeString("hour"), errorCode); + UnicodeString hour = getFunctionOption(toFormat, opts, options::HOUR, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useTime = true; - if (hour == UnicodeString("numeric")) { + if (hour == options::NUMERIC) { ADD_PATTERN("h"); - } else if (hour == UnicodeString("2-digit")) { + } else if (hour == options::TWO_DIGIT) { ADD_PATTERN("hh"); } } // Minute - UnicodeString minute = getFunctionOption(toFormat, opts, UnicodeString("minute"), errorCode); + UnicodeString minute = getFunctionOption(toFormat, opts, options::MINUTE, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useTime = true; - if (minute == UnicodeString("numeric")) { + if (minute == options::NUMERIC) { ADD_PATTERN("m"); - } else if (minute == UnicodeString("2-digit")) { + } else if (minute == options::TWO_DIGIT) { ADD_PATTERN("mm"); } } // Second - UnicodeString second = getFunctionOption(toFormat, opts, UnicodeString("second"), errorCode); + UnicodeString second = getFunctionOption(toFormat, opts, options::SECOND, errorCode); if (U_FAILURE(errorCode)) { errorCode = U_ZERO_ERROR; } else { useTime = true; - if (second == UnicodeString("numeric")) { + if (second == options::NUMERIC) { ADD_PATTERN("s"); - } else if (second == UnicodeString("2-digit")) { + } else if (second == options::TWO_DIGIT) { ADD_PATTERN("ss"); } } @@ -1263,9 +1336,11 @@ void StandardFunctions::TextSelector::selectKey(FormattedPlaceholder&& toFormat, if (U_FAILURE(errorCode)) { return; } + // Normalize result + UnicodeString normalized = normalizeNFC(formattedValue); for (int32_t i = 0; i < keysLen; i++) { - if (keys[i] == formattedValue) { + if (keys[i] == normalized) { prefs[0] = keys[i]; prefsLen = 1; break; @@ -1370,7 +1445,7 @@ double formattableToNumber(const Formattable& arg, UErrorCode& status) { } // 8. If the decimalPlaces option is set, then Formattable opt; - if (options.getFunctionOption(UnicodeString("decimalPlaces"), opt)) { + if (options.getFunctionOption(options::DECIMAL_PLACES, opt)) { // 8i. If its value resolves to a numerical integer value 0 or 1 // or their corresponding string representations '0' or '1', then double decimalPlacesInput = formattableToNumber(opt, status); @@ -1389,7 +1464,7 @@ double formattableToNumber(const Formattable& arg, UErrorCode& status) { } // 9. If the fails option is set, then Formattable failsOpt; - if (options.getFunctionOption(UnicodeString("fails"), failsOpt)) { + if (options.getFunctionOption(options::FAILS, failsOpt)) { UnicodeString failsString = failsOpt.getString(status); if (U_SUCCESS(status)) { // 9i. If its value resolves to the string 'always', then diff --git a/icu4c/source/i18n/messageformat2_function_registry_internal.h b/icu4c/source/i18n/messageformat2_function_registry_internal.h index 9599b67bb2ba..7e4744152707 100644 --- a/icu4c/source/i18n/messageformat2_function_registry_internal.h +++ b/icu4c/source/i18n/messageformat2_function_registry_internal.h @@ -33,8 +33,13 @@ namespace message2 { class StandardFunctions { friend class MessageFormatter; + public: + // Used for normalizing variable names and keys for comparison + static UnicodeString normalizeNFC(const UnicodeString&); + + private: static UnicodeString getStringOption(const FunctionOptions& opts, - const UnicodeString& optionName, + std::u16string_view optionName, UErrorCode& errorCode); class DateTime; @@ -81,12 +86,12 @@ namespace message2 { */ UnicodeString getFunctionOption(const FormattedPlaceholder& toFormat, const FunctionOptions& opts, - const UnicodeString& optionName) const; + std::u16string_view optionName) const; // Version for options that don't have defaults; sets the error // code instead of returning a default value UnicodeString getFunctionOption(const FormattedPlaceholder& toFormat, const FunctionOptions& opts, - const UnicodeString& optionName, + std::u16string_view optionName, UErrorCode& errorCode) const; }; diff --git a/icu4c/source/i18n/unicode/messageformat2.h b/icu4c/source/i18n/unicode/messageformat2.h index 926d14318d17..93614324788f 100644 --- a/icu4c/source/i18n/unicode/messageformat2.h +++ b/icu4c/source/i18n/unicode/messageformat2.h @@ -355,9 +355,7 @@ namespace message2 { // Formatting methods - // Used for normalizing variable names and keys for comparison - UnicodeString normalizeNFC(const UnicodeString&) const; - [[nodiscard]] FormattedPlaceholder formatLiteral(const data_model::Literal&) const; + [[nodiscard]] FormattedPlaceholder formatLiteral(const UnicodeString&, const data_model::Literal&) const; void formatPattern(MessageContext&, const Environment&, const data_model::Pattern&, UErrorCode&, UnicodeString&) const; // Evaluates a function call // Dispatches on argument type @@ -371,13 +369,21 @@ namespace message2 { MessageContext& context, UErrorCode& status) const; // Formats an expression that appears in a pattern or as the definition of a local variable - [[nodiscard]] InternalValue* formatExpression(const Environment&, - const data_model::Expression&, - MessageContext&, - UErrorCode&) const; + [[nodiscard]] InternalValue* formatExpression(const UnicodeString&, + const Environment&, + const data_model::Expression&, + MessageContext&, + UErrorCode&) const; [[nodiscard]] FunctionOptions resolveOptions(const Environment& env, const OptionMap&, MessageContext&, UErrorCode&) const; - [[nodiscard]] InternalValue* formatOperand(const Environment&, const data_model::Operand&, MessageContext&, UErrorCode&) const; - [[nodiscard]] FormattedPlaceholder evalArgument(const data_model::VariableName&, MessageContext&, UErrorCode&) const; + [[nodiscard]] InternalValue* formatOperand(const UnicodeString&, + const Environment&, + const data_model::Operand&, + MessageContext&, + UErrorCode&) const; + [[nodiscard]] FormattedPlaceholder evalArgument(const UnicodeString&, + const data_model::VariableName&, + MessageContext&, + UErrorCode&) const; void formatSelectors(MessageContext& context, const Environment& env, UErrorCode &status, UnicodeString& result) const; // Function registry methods @@ -452,9 +458,6 @@ namespace message2 { // The default is false. bool signalErrors = false; - // Used for implementing normalizeNFC() - const Normalizer2* nfcNormalizer = nullptr; - }; // class MessageFormatter } // namespace message2 diff --git a/icu4c/source/i18n/unicode/messageformat2_arguments.h b/icu4c/source/i18n/unicode/messageformat2_arguments.h index 07c96f892bca..2008b3345415 100644 --- a/icu4c/source/i18n/unicode/messageformat2_arguments.h +++ b/icu4c/source/i18n/unicode/messageformat2_arguments.h @@ -114,8 +114,7 @@ namespace message2 { private: friend class MessageContext; - const Formattable* getArgument(const MessageFormatter&, - const data_model::VariableName&, + const Formattable* getArgument(const data_model::VariableName&, UErrorCode&) const; // Avoids using Hashtable so that code constructing a Hashtable diff --git a/icu4c/source/i18n/unicode/messageformat2_formattable.h b/icu4c/source/i18n/unicode/messageformat2_formattable.h index d7f4130f493b..cd72bbd4a621 100644 --- a/icu4c/source/i18n/unicode/messageformat2_formattable.h +++ b/icu4c/source/i18n/unicode/messageformat2_formattable.h @@ -558,9 +558,9 @@ class U_I18N_API FunctionOptions : public UObject { explicit FunctionOptions(UVector&&, UErrorCode&); const ResolvedFunctionOption* getResolvedFunctionOptions(int32_t& len) const; - UBool getFunctionOption(const UnicodeString&, Formattable&) const; + UBool getFunctionOption(std::u16string_view, Formattable&) const; // Returns empty string if option doesn't exist - UnicodeString getStringFunctionOption(const UnicodeString&) const; + UnicodeString getStringFunctionOption(std::u16string_view) const; int32_t optionsCount() const { return functionOptionsLen; } // Named options passed to functions @@ -570,7 +570,10 @@ class U_I18N_API FunctionOptions : public UObject { ResolvedFunctionOption* options; int32_t functionOptionsLen = 0; - // Returns a new FunctionOptions + /** + * The original FunctionOptions isn't usable after this call. + * @returns A new, merged FunctionOptions. + */ FunctionOptions mergeOptions(FunctionOptions&& other, UErrorCode&); }; // class FunctionOptions diff --git a/icu4c/source/test/intltest/dtfmttst.cpp b/icu4c/source/test/intltest/dtfmttst.cpp index 72cb41835ca6..9cb0263ea617 100644 --- a/icu4c/source/test/intltest/dtfmttst.cpp +++ b/icu4c/source/test/intltest/dtfmttst.cpp @@ -5189,9 +5189,9 @@ void DateFormatTest::TestFlexibleDayPeriod() { sdf.applyPattern(UnicodeString("hh:mm:ss BBB")); // assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 at night", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBB | 00:00:30", "12:00:30 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm:ss BBB | 00:30:00", "12:30:00 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000, out.remove())); + assertEquals("hh:mm:ss BBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm:ss BBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000, out.remove())); assertEquals("hh:mm:ss BBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000, out.remove())); assertEquals("hh:mm:ss BBB | 12:00:00", "12:00:00 noon", sdf.format(k120000, out.remove())); assertEquals("hh:mm:ss BBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000, out.remove())); @@ -5199,27 +5199,27 @@ void DateFormatTest::TestFlexibleDayPeriod() { sdf.applyPattern(UnicodeString("hh:mm BBB")); // assertEquals("hh:mm BBB | 00:00:00", "12:00 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh:mm BBB | 00:00:00", "12:00 at night", sdf.format(k000000, out.remove())); + assertEquals("hh:mm BBB | 00:00:00", "12:00 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh:mm BBB | 00:00:30", "12:00 midnight", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBB | 00:00:00", "12:00 at night", sdf.format(k000000, out.remove())); - assertEquals("hh:mm BBB | 00:30:00", "12:30 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm BBB | 00:00:00", "12:00 in the morning", sdf.format(k000000, out.remove())); + assertEquals("hh:mm BBB | 00:30:00", "12:30 in the morning", sdf.format(k003000, out.remove())); sdf.applyPattern(UnicodeString("hh BBB")); // assertEquals("hh BBB | 00:00:00", "12 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh BBB | 00:00:30", "12 at night", sdf.format(k000030, out.remove())); + assertEquals("hh BBB | 00:00:30", "12 in the morning", sdf.format(k000030, out.remove())); // assertEquals("hh BBB | 00:00:30", "12 midnight", sdf.format(k000030, out.remove())); - assertEquals("hh BBB | 00:00:30", "12 at night", sdf.format(k000030, out.remove())); + assertEquals("hh BBB | 00:00:30", "12 in the morning", sdf.format(k000030, out.remove())); // assertEquals("hh BBB | 00:30:00", "12 midnight", sdf.format(k003000, out.remove())); - assertEquals("hh BBB | 00:30:00", "12 at night", sdf.format(k003000, out.remove())); + assertEquals("hh BBB | 00:30:00", "12 in the morning", sdf.format(k003000, out.remove())); // Wide. sdf.applyPattern(UnicodeString("hh:mm:ss BBBB")); // assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 at night", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBB | 00:00:30", "12:00:30 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm:ss BBBB | 00:30:00", "12:30:00 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000, out.remove())); + assertEquals("hh:mm:ss BBBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm:ss BBBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000, out.remove())); assertEquals("hh:mm:ss BBBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000, out.remove())); assertEquals("hh:mm:ss BBBB | 12:00:00", "12:00:00 noon", sdf.format(k120000, out.remove())); assertEquals("hh:mm:ss BBBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000, out.remove())); @@ -5227,27 +5227,27 @@ void DateFormatTest::TestFlexibleDayPeriod() { sdf.applyPattern(UnicodeString("hh:mm BBBB")); // assertEquals("hh:mm BBBB | 00:00:00", "12:00 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh:mm BBBB | 00:00:00", "12:00 at night", sdf.format(k000000, out.remove())); + assertEquals("hh:mm BBBB | 00:00:00", "12:00 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh:mm BBBB | 00:00:30", "12:00 midnight", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBBB | 00:00:30", "12:00 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBBB | 00:30:00", "12:30 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm BBBB | 00:00:30", "12:00 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm BBBB | 00:30:00", "12:30 in the morning", sdf.format(k003000, out.remove())); sdf.applyPattern(UnicodeString("hh BBBB")); // assertEquals("hh BBBB | 00:00:00", "12 midnight", sdf.format(k000000, out.remove())); - assertEquals("hh BBBB | 00:00:00", "12 at night", sdf.format(k000000, out.remove())); + assertEquals("hh BBBB | 00:00:00", "12 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh BBBB | 00:00:30", "12 midnight", sdf.format(k000030, out.remove())); - assertEquals("hh BBBB | 00:00:00", "12 at night", sdf.format(k000000, out.remove())); + assertEquals("hh BBBB | 00:00:00", "12 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh BBBB | 00:80:00", "12 midnight", sdf.format(k003000, out.remove())); - assertEquals("hh BBBB | 00:00:00", "12 at night", sdf.format(k000000, out.remove())); + assertEquals("hh BBBB | 00:00:00", "12 in the morning", sdf.format(k000000, out.remove())); // Narrow. sdf.applyPattern(UnicodeString("hh:mm:ss BBBBB")); // assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 mi", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 at night", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBBB | 00:00:30", "12:00:30 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm:ss BBBBB | 00:30:00", "12:30:00 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000, out.remove())); + assertEquals("hh:mm:ss BBBBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm:ss BBBBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000, out.remove())); assertEquals("hh:mm:ss BBBBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000, out.remove())); assertEquals("hh:mm:ss BBBBB | 12:00:00", "12:00:00 n", sdf.format(k120000, out.remove())); assertEquals("hh:mm:ss BBBBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000, out.remove())); @@ -5255,19 +5255,19 @@ void DateFormatTest::TestFlexibleDayPeriod() { sdf.applyPattern(UnicodeString("hh:mm BBBBB")); // assertEquals("hh:mm BBBBB | 00:00:00", "12:00 mi", sdf.format(k000000, out.remove())); - assertEquals("hh:mm BBBBB | 00:00:00", "12:00 at night", sdf.format(k000000, out.remove())); + assertEquals("hh:mm BBBBB | 00:00:00", "12:00 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh:mm BBBBB | 00:00:30", "12:00 mi", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBBBB | 00:00:30", "12:00 at night", sdf.format(k000030, out.remove())); - assertEquals("hh:mm BBBBB | 00:30:00", "12:30 at night", sdf.format(k003000, out.remove())); + assertEquals("hh:mm BBBBB | 00:00:30", "12:00 in the morning", sdf.format(k000030, out.remove())); + assertEquals("hh:mm BBBBB | 00:30:00", "12:30 in the morning", sdf.format(k003000, out.remove())); sdf.applyPattern(UnicodeString("hh BBBBB")); // assertEquals("hh BBBBB | 00:00:00", "12 mi", sdf.format(k000000, out.remove())); - assertEquals("hh BBBBB | 00:00:00", "12 at night", sdf.format(k000000, out.remove())); + assertEquals("hh BBBBB | 00:00:00", "12 in the morning", sdf.format(k000000, out.remove())); // assertEquals("hh BBBBB | 00:00:30", "12 mi", sdf.format(k000030, out.remove())); - assertEquals("hh BBBBB | 00:00:30", "12 at night", sdf.format(k000030, out.remove())); + assertEquals("hh BBBBB | 00:00:30", "12 in the morning", sdf.format(k000030, out.remove())); // assertEquals("hh BBBBB | 00:30:00", "12 mi", sdf.format(k003000, out.remove())); - assertEquals("hh BBBBB | 00:30:00", "12 at night", sdf.format(k003000, out.remove())); + assertEquals("hh BBBBB | 00:30:00", "12 in the morning", sdf.format(k003000, out.remove())); } void DateFormatTest::TestDayPeriodWithLocales() { @@ -5344,9 +5344,9 @@ void DateFormatTest::TestDayPeriodWithLocales() { // assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 midnight", // sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 at night", + assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 in the morning", sdf.format(k000000, out.remove())); - assertEquals("hh:mm:ss BBBB | 01:00:00 | en_US", "01:00:00 at night", + assertEquals("hh:mm:ss BBBB | 01:00:00 | en_US", "01:00:00 in the morning", sdf.format(k010000, out.remove())); assertEquals("hh:mm:ss BBBB | 12:00:00 | en_US", "12:00:00 noon", sdf.format(k120000, out.remove())); @@ -5374,7 +5374,7 @@ void DateFormatTest::TestDayPeriodWithLocales() { sdf.setTimeZone(*tz); sdf.applyPattern(UnicodeString("hh:mm:ss BBBB")); - assertEquals("hh:mm:ss BBBB | 01:00:00 | en@calendar=buddhist", "01:00:00 at night", + assertEquals("hh:mm:ss BBBB | 01:00:00 | en@calendar=buddhist", "01:00:00 in the morning", sdf.format(k010000, out.remove())); } @@ -5414,7 +5414,7 @@ void DateFormatTest::TestMinuteSecondFieldsInOddPlaces() { // assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss midnight", // sdf.format(k000030, out.remove())); - assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss at night", + assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss in the morning", sdf.format(k000030, out.remove())); assertEquals("hh:mm 'ss' BBBB | 06:00:30", "06:00 ss in the morning", sdf.format(k060030, out.remove())); @@ -5433,7 +5433,7 @@ void DateFormatTest::TestMinuteSecondFieldsInOddPlaces() { // assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss midnight", // sdf.format(k003000, out.remove())); - assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss at night", + assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss in the morning", sdf.format(k003000, out.remove())); assertEquals("hh 'mm ss' BBBB | 06:30:00", "06 mm ss in the morning", sdf.format(k063000, out.remove())); @@ -5454,28 +5454,28 @@ void DateFormatTest::TestMinuteSecondFieldsInOddPlaces() { // assertEquals("BBBB hh:mm:ss | 00:00:00", "midnight 12:00:00", // sdf.format(k000000, out.remove())); - assertEquals("BBBB hh:mm:ss | 00:00:00", "at night 12:00:00", + assertEquals("BBBB hh:mm:ss | 00:00:00", "in the morning 12:00:00", sdf.format(k000000, out.remove())); - assertEquals("BBBB hh:mm:ss | 00:00:30", "at night 12:00:30", + assertEquals("BBBB hh:mm:ss | 00:00:30", "in the morning 12:00:30", sdf.format(k000030, out.remove())); - assertEquals("BBBB hh:mm:ss | 00:30:00", "at night 12:30:00", + assertEquals("BBBB hh:mm:ss | 00:30:00", "in the morning 12:30:00", sdf.format(k003000, out.remove())); // Confirm applyPattern() reparses the pattern string. sdf.applyPattern(UnicodeString("BBBB hh")); // assertEquals("BBBB hh | 00:00:30", "midnight 12", // sdf.format(k000030, out.remove())); - assertEquals("BBBB hh | 00:00:30", "at night 12", + assertEquals("BBBB hh | 00:00:30", "in the morning 12", sdf.format(k000030, out.remove())); sdf.applyPattern(UnicodeString("BBBB hh:mm:'ss'")); // assertEquals("BBBB hh:mm:'ss' | 00:00:30", "midnight 12:00:ss", // sdf.format(k000030, out.remove())); - assertEquals("BBBB hh | 00:00:30", "at night 12:00:ss", + assertEquals("BBBB hh | 00:00:30", "in the morning 12:00:ss", sdf.format(k000030, out.remove())); sdf.applyPattern(UnicodeString("BBBB hh:mm:ss")); - assertEquals("BBBB hh:mm:ss | 00:00:30", "at night 12:00:30", + assertEquals("BBBB hh:mm:ss | 00:00:30", "in the morning 12:00:30", sdf.format(k000030, out.remove())); } @@ -5484,7 +5484,6 @@ void DateFormatTest::TestDayPeriodParsing() { UDate k000000 = 1447372800000.0; UDate k003700 = 1447375020000.0; UDate k010000 = 1447376400000.0; - UDate k013000 = 1447378200000.0; UDate k030000 = 1447383600000.0; UDate k090000 = 1447405200000.0; UDate k120000 = 1447416000000.0; @@ -5495,6 +5494,7 @@ void DateFormatTest::TestDayPeriodParsing() { UDate k193000 = 1447443000000.0; UDate k200000 = 1447444800000.0; UDate k210000 = 1447448400000.0; + UDate k223000 = 1447453800000.0; UErrorCode errorCode = U_ZERO_ERROR; SimpleDateFormat sdf(UnicodeString(), errorCode); @@ -5518,7 +5518,7 @@ void DateFormatTest::TestDayPeriodParsing() { assertEquals("yyyy-MM-dd B | 2015-11-13 in the evening", k193000, sdf.parse(UnicodeString("2015-11-13 in the evening"), errorCode)); assertEquals("yyyy-MM-dd B | 2015-11-13 at night", - k013000, sdf.parse(UnicodeString("2015-11-13 at night"), errorCode)); + k223000, sdf.parse(UnicodeString("2015-11-13 at night"), errorCode)); // If time and day period are consistent with each other then time is parsed accordingly. sdf.applyPattern(UnicodeString("yyyy-MM-dd hh:mm B")); @@ -5526,8 +5526,8 @@ void DateFormatTest::TestDayPeriodParsing() { k000000, sdf.parse(UnicodeString("2015-11-13 12:00 midnight"), errorCode)); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 12:00 noon", k120000, sdf.parse(UnicodeString("2015-11-13 12:00 noon"), errorCode)); - assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 at night", - k010000, sdf.parse(UnicodeString("2015-11-13 01:00 at night"), errorCode)); + assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 in the morning", + k010000, sdf.parse(UnicodeString("2015-11-13 01:00 in the morning"), errorCode)); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 in the afternoon", k130000, sdf.parse(UnicodeString("2015-11-13 01:00 in the afternoon"), errorCode)); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 09:00 in the morning", @@ -5581,8 +5581,8 @@ void DateFormatTest::TestDayPeriodParsing() { k000000, sdf.parse(UnicodeString("2015-11-13 12:00 midnight"), errorCode)); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 12:00 noon", k120000, sdf.parse(UnicodeString("2015-11-13 12:00 noon"), errorCode)); - assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 at night", - k010000, sdf.parse(UnicodeString("2015-11-13 01:00 at night"), errorCode)); + assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 in the morning", + k010000, sdf.parse(UnicodeString("2015-11-13 01:00 in the morning"), errorCode)); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 in the afternoon", k130000, sdf.parse(UnicodeString("2015-11-13 01:00 in the afternoon"), errorCode)); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 09:00 in the morning", diff --git a/icu4c/source/test/intltest/dtifmtts.cpp b/icu4c/source/test/intltest/dtifmtts.cpp index 8f08d4e72781..15dede67f512 100644 --- a/icu4c/source/test/intltest/dtifmtts.cpp +++ b/icu4c/source/test/intltest/dtifmtts.cpp @@ -1149,7 +1149,7 @@ void DateIntervalFormatTest::testHourMetacharacters() { "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 12:00:00", "hbbbbb", "10\\u202Fa\\u2009\\u2013\\u200912\\u202Fn", "en", "CE 2010 09 27 13:00:00", "CE 2010 09 27 14:00:00", "hb", "1\\u2009\\u2013\\u20092\\u202FPM", "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "10 in the morning\\u2009\\u2013\\u20091 in the afternoon", - "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "12\\u2009\\u2013\\u20091 at night", + "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "12\\u2009\\u2013\\u20091 in the morning", // J "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "J", "10\\u2009\\u2013\\u20091", diff --git a/icu4c/source/test/intltest/loctest.cpp b/icu4c/source/test/intltest/loctest.cpp index 73f0bcb64887..18887ed4fb14 100644 --- a/icu4c/source/test/intltest/loctest.cpp +++ b/icu4c/source/test/intltest/loctest.cpp @@ -5923,11 +5923,6 @@ testLikelySubtagsLineFn(void *context, return; } - if ((uprv_strcmp(source.c_str(), "und-Latn-RS") == 0 ) - && THIS->logKnownIssue("ICU-22976", "unexpected likely subtags for und-Latn-RS")) { - return; - } - Locale actualMax(l); actualMax.addLikelySubtags(*pErrorCode); if (addLikely == "FAIL") { diff --git a/icu4c/source/test/intltest/messageformat2test_read_json.cpp b/icu4c/source/test/intltest/messageformat2test_read_json.cpp index 3e378d6b905f..c4bdc4cc2f57 100644 --- a/icu4c/source/test/intltest/messageformat2test_read_json.cpp +++ b/icu4c/source/test/intltest/messageformat2test_read_json.cpp @@ -112,10 +112,11 @@ static bool setArguments(TestMessageFormat2& t, return false; // For now, boolean and null arguments are unsupported } } else { - schemaError = true; - break; + // Null argument -- not supported + return false; } } else { + t.logln("name is null"); schemaError = true; break; } @@ -138,6 +139,7 @@ static bool setArguments(TestMessageFormat2& t, static void runValidTest(TestMessageFormat2& icuTest, const std::string& testName, const std::string& defaultError, + bool anyError, const json& j, IcuTestErrorCode& errorCode) { auto j_object = j.template get(); @@ -205,6 +207,9 @@ static void runValidTest(TestMessageFormat2& icuTest, } else if (defaultError.length() > 0) { test.setExpectedError(getExpectedRuntimeErrorFromString(defaultError)); expectedError = true; + } else if (anyError) { + test.setExpectedAnyError(); + expectedError = true; } // If no expected result and no error, then set the test builder to expect success @@ -250,9 +255,13 @@ static void runTestsFromJsonFile(TestMessageFormat2& t, // Some files have an expected error std::string defaultError; + bool anyError = false; if (!j_object["defaultTestProperties"].is_null() && !j_object["defaultTestProperties"]["expErrors"].is_null()) { auto expErrors = j_object["defaultTestProperties"]["expErrors"]; + // If expErrors is a boolean "true", that means we expect all tests + // to emit errors but we don't care which ones. + anyError = expErrors.is_boolean() && expErrors.template get(); // expErrors might also be a boolean, in which case we ignore it -- // so we have to check if it's an array if (expErrors.is_array()) { @@ -273,7 +282,7 @@ static void runTestsFromJsonFile(TestMessageFormat2& t, t.logln(u_str(iter->dump())); - runValidTest(t, testName, defaultError, *iter, errorCode); + runValidTest(t, testName, defaultError, anyError, *iter, errorCode); } } else { // Test doesn't follow schema -- probably an error @@ -301,6 +310,7 @@ void TestMessageFormat2::jsonTestsFromFiles(IcuTestErrorCode& errorCode) { // Do valid spec tests runTestsFromJsonFile(*this, "spec/syntax.json", errorCode); + runTestsFromJsonFile(*this, "spec/fallback.json", errorCode); // Uncomment when test functions are implemented in the registry // See https://unicode-org.atlassian.net/browse/ICU-22907 @@ -315,9 +325,6 @@ void TestMessageFormat2::jsonTestsFromFiles(IcuTestErrorCode& errorCode) { runTestsFromJsonFile(*this, "spec/functions/time.json", errorCode); // Other tests (non-spec) - // TODO: Delete this file after https://github.com/unicode-org/message-format-wg/pull/904 - // lands and the tests here are updated from the spec repo - runTestsFromJsonFile(*this, "normalization.json", errorCode); // TODO: https://github.com/unicode-org/message-format-wg/pull/902 will // move the bidi tests into the spec runTestsFromJsonFile(*this, "bidi.json", errorCode); diff --git a/icu4c/source/test/intltest/messageformat2test_utils.h b/icu4c/source/test/intltest/messageformat2test_utils.h index 7eacab9998de..7d6f813ff59d 100644 --- a/icu4c/source/test/intltest/messageformat2test_utils.h +++ b/icu4c/source/test/intltest/messageformat2test_utils.h @@ -28,6 +28,7 @@ class TestCase : public UMemory { /* const */ Locale locale; /* const */ std::map arguments; /* const */ UErrorCode expectedError; + /* const */ bool arbitraryError = false; /* const */ bool expectedNoSyntaxError; /* const */ bool hasExpectedOutput; /* const */ UnicodeString expected; @@ -45,11 +46,14 @@ class TestCase : public UMemory { std::map getArguments() const { return std::move(arguments); } const UnicodeString& getTestName() const { return testName; } bool expectSuccess() const { - return (!ignoreError && U_SUCCESS(expectedError)); + return (!ignoreError && U_SUCCESS(expectedError) && !arbitraryError); } bool expectFailure() const { return (!ignoreError && U_FAILURE(expectedError)); } + bool expectArbitraryError() const { + return arbitraryError; + } bool expectNoSyntaxError() const { return expectedNoSyntaxError; } @@ -139,6 +143,10 @@ class TestCase : public UMemory { expectedError = U_SUCCESS(errorCode) ? U_ZERO_ERROR : errorCode; return *this; } + Builder& setExpectedAnyError() { + arbitraryError = true; + return *this; + } Builder& setNoSyntaxError() { expectNoSyntaxError = true; return *this; @@ -182,6 +190,7 @@ class TestCase : public UMemory { bool hasExpectedOutput; UnicodeString expected; UErrorCode expectedError; + bool arbitraryError; bool expectNoSyntaxError; bool hasLineNumberAndOffset; uint32_t lineNumber; @@ -190,7 +199,7 @@ class TestCase : public UMemory { const MFFunctionRegistry* functionRegistry = nullptr; // Not owned public: - Builder() : pattern(""), locale(Locale::getDefault()), hasExpectedOutput(false), expected(""), expectedError(U_ZERO_ERROR), expectNoSyntaxError(false), hasLineNumberAndOffset(false), ignoreError(false) {} + Builder() : pattern(""), locale(Locale::getDefault()), hasExpectedOutput(false), expected(""), expectedError(U_ZERO_ERROR), arbitraryError(false), expectNoSyntaxError(false), hasLineNumberAndOffset(false), ignoreError(false) {} }; private: @@ -200,6 +209,7 @@ class TestCase : public UMemory { locale(builder.locale), arguments(builder.arguments), expectedError(builder.expectedError), + arbitraryError(builder.arbitraryError), expectedNoSyntaxError(builder.expectNoSyntaxError), hasExpectedOutput(builder.hasExpectedOutput), expected(builder.expected), @@ -270,6 +280,9 @@ class TestUtils { failExpectedSuccess(tmsg, testCase, errorCode, parseError.line, parseError.offset); return; } + if (testCase.expectArbitraryError() && U_SUCCESS(errorCode)) { + failExpectedArbitraryError(tmsg, testCase); + } if (testCase.expectFailure() && errorCode != testCase.expectedErrorCode()) { failExpectedFailure(tmsg, testCase, errorCode); return; @@ -323,6 +336,10 @@ class TestUtils { tmsg.errln(testCase.getTestName() + " failed test with wrong error code; pattern: " + testCase.getPattern() + " and error code " + UnicodeString(u_errorName(errorCode)) + " and expected error code: " + UnicodeString(u_errorName(testCase.expectedErrorCode()))); errorCode.reset(); } + static void failExpectedArbitraryError(IntlTest& tmsg, const TestCase& testCase) { + tmsg.dataerrln(testCase.getTestName()); + tmsg.errln(testCase.getTestName() + " succeeded although any error was expected; pattern: " + testCase.getPattern()); + } static void failWrongOutput(IntlTest& tmsg, const TestCase& testCase, const UnicodeString& result) { tmsg.dataerrln(testCase.getTestName()); tmsg.logln(testCase.getTestName() + " failed test with wrong output; pattern: " + testCase.getPattern() + " and expected output = " + testCase.expectedOutput() + " and actual output = " + result); diff --git a/icu4c/source/test/intltest/tztest.cpp b/icu4c/source/test/intltest/tztest.cpp index db88a2e4ba2d..968f2473135f 100644 --- a/icu4c/source/test/intltest/tztest.cpp +++ b/icu4c/source/test/intltest/tztest.cpp @@ -152,18 +152,21 @@ TimeZoneTest::TestGenericAPI() if (hostZoneRawOffset != tzoffset * (-1000)) { UnicodeString id; hostZone->getID(id); - // Known issues in ICU-22274 we have issues in time zone - // Africa/Casablanca Europe/Dublin America/Godthab America/Nuuk - if (id == u"Africa/Casablanca" || id == u"Europe/Dublin" || - id == u"America/Godthab" || id == u"America/Nuuk" || - id == u"Africa/El_Aaiun" || - id == u"Asia/Qostanay" || // Due to changes in tz2024a - id == u"Asia/Almaty" || // Due to changes in tz2024a - id == u"America/Scoresbysund" // break after the update of tz2023d - ) { - logKnownIssue( "ICU-22274", "detectHostTimeZone()'s raw offset != host timezone's offset in TimeZone " + id); + + const char* ignoreRuntimeTZSensitiveTests = getProperty("IgnoreRuntimeTimeZoneSensitiveTests"); + UBool bWarnOnly = (ignoreRuntimeTZSensitiveTests && uprv_strcmp(ignoreRuntimeTZSensitiveTests, "true") == 0); + // TODO - enforce warning only until we update the CI env test + bWarnOnly = true; + + // Africa/Casablanca Europe/Dublin Africa/El_Aaiun uses negative DST offset on some runtime env + if (id == u"Africa/Casablanca" || id == u"Europe/Dublin" || id == u"Africa/El_Aaiun" || bWarnOnly) { + infoln("WARN: detectHostTimeZone()'s raw offset != host timezone's offset. Time zone version used by OS might be different from ICU.\n" + "hostZone->getRawOffset()=%d\n" + "but uprv_timezone() return %d and " + "uprv_timezone() * -1000=%d", + hostZoneRawOffset, tzoffset, tzoffset * -1000); } else { - errln("FAIL: detectHostTimeZone()'s raw offset != host timezone's offset.\n" + errln("FAIL: detectHostTimeZone()'s raw offset != host timezone's offset.\n" "hostZone->getRawOffset()=%d\n" "but uprv_timezone() return %d and " "uprv_timezone() * -1000=%d", diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp index 5df9d8e1fd44..f0466982cff2 100644 --- a/icu4c/source/test/intltest/ustrtest.cpp +++ b/icu4c/source/test/intltest/ustrtest.cpp @@ -77,6 +77,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* & TESTCASE_AUTO(TestNullPointers); TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf); TESTCASE_AUTO(TestLargeAppend); + TESTCASE_AUTO(TestLargeMemory); TESTCASE_AUTO(TestU16StringView); TESTCASE_AUTO(TestWStringView); TESTCASE_AUTO_END; @@ -2351,6 +2352,18 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() { assertEquals("", u"abbcdcde", str); } +void UnicodeStringTest::TestLargeMemory() { +#if U_PLATFORM_IS_LINUX_BASED || U_PLATFORM_IS_DARWIN_BASED + if(quick) { return; } + IcuTestErrorCode status(*this, "TestLargeMemory"); + constexpr uint32_t len = 2147483643; + char16_t *buf = new char16_t[len]; + if (buf == nullptr) { return; } + uprv_memset(buf, 0x4e, len * 2); + icu::UnicodeString test(buf, len); + delete [] buf; +#endif +} void UnicodeStringTest::TestLargeAppend() { if(quick) return; @@ -2379,15 +2392,17 @@ void UnicodeStringTest::TestLargeAppend() { } dest.remove(); total = 0; + // Copy kMaxCapacity from common/unistr.cpp + const int32_t kMaxCapacity = 0x7ffffff5; for (int32_t i = 0; i < 16; i++) { dest.append(str); total += len; - if (total + len <= INT32_MAX) { + if (total + len <= kMaxCapacity) { assertFalse("dest is not bogus", dest.isBogus()); - } else if (total <= INT32_MAX) { + } else if (total <= kMaxCapacity) { // Check that a string of exactly the maximum size works UnicodeString str2; - int32_t remain = static_cast(INT32_MAX - total); + int32_t remain = static_cast(kMaxCapacity - total); char16_t *buf2 = str2.getBuffer(remain); if (buf2 == nullptr) { // if somehow memory allocation fail, return the test @@ -2397,14 +2412,19 @@ void UnicodeStringTest::TestLargeAppend() { str2.releaseBuffer(remain); dest.append(str2); total += remain; - assertEquals("When a string of exactly the maximum size works", static_cast(INT32_MAX), total); - assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length()); + assertEquals("When a string of exactly the maximum size works", static_cast(kMaxCapacity), total); + assertEquals("When a string of exactly the maximum size works", kMaxCapacity, dest.length()); assertFalse("dest is not bogus", dest.isBogus()); - // Check that a string size+1 goes bogus + // Check that a string size+1 does not go bogus (one more byte reserved for NUL) str2.truncate(1); dest.append(str2); total++; + assertFalse("dest should be not bogus", dest.isBogus()); + // Check that a string size+2 goes bogus (beyond the byte reserved + // for NUL) + dest.append(str2); + total++; assertTrue("dest should be bogus", dest.isBogus()); } else { assertTrue("dest should be bogus", dest.isBogus()); diff --git a/icu4c/source/test/intltest/ustrtest.h b/icu4c/source/test/intltest/ustrtest.h index 47d4a8acc825..074d4b8bc06e 100644 --- a/icu4c/source/test/intltest/ustrtest.h +++ b/icu4c/source/test/intltest/ustrtest.h @@ -92,6 +92,7 @@ class UnicodeStringTest: public IntlTest { void TestUnicodeStringImplementsAppendable(); void TestSizeofUnicodeString(); void TestMoveSwap(); + void TestLargeMemory(); void TestUInt16Pointers(); void TestWCharPointers(); diff --git a/icu4c/source/test/testdata/cldr/localeIdentifiers/likelySubtags.txt b/icu4c/source/test/testdata/cldr/localeIdentifiers/likelySubtags.txt index 4b9d59049bbe..f9f149d3cc87 100644 --- a/icu4c/source/test/testdata/cldr/localeIdentifiers/likelySubtags.txt +++ b/icu4c/source/test/testdata/cldr/localeIdentifiers/likelySubtags.txt @@ -235,16 +235,19 @@ en-CK ; en-Latn-CK ; en-CK ; en-CM ; en-Latn-CM ; en-CM ; en-CX ; en-Latn-CX ; en-CX ; en-CY ; en-Latn-CY ; en-CY ; +en-CZ ; en-Latn-CZ ; en-CZ ; en-DE ; en-Latn-DE ; en-DE ; en-DG ; en-Latn-DG ; en-DG ; en-DK ; en-Latn-DK ; en-DK ; en-DM ; en-Latn-DM ; en-DM ; en-ER ; en-Latn-ER ; en-ER ; +en-ES ; en-Latn-ES ; en-ES ; en-Egyp ; en-Egyp-US ; en-Egyp ; en-FI ; en-Latn-FI ; en-FI ; en-FJ ; en-Latn-FJ ; en-FJ ; en-FK ; en-Latn-FK ; en-FK ; en-FM ; en-Latn-FM ; en-FM ; +en-FR ; en-Latn-FR ; en-FR ; en-GB ; en-Latn-GB ; en-GB ; en-GD ; en-Latn-GD ; en-GD ; en-GG ; en-Latn-GG ; en-GG ; @@ -255,12 +258,14 @@ en-GS ; en-Latn-GS ; en-GS ; en-GU ; en-Latn-GU ; en-GU ; en-GY ; en-Latn-GY ; en-GY ; en-HK ; en-Latn-HK ; en-HK ; +en-HU ; en-Latn-HU ; en-HU ; en-ID ; en-Latn-ID ; en-ID ; en-IE ; en-Latn-IE ; en-IE ; en-IL ; en-Latn-IL ; en-IL ; en-IM ; en-Latn-IM ; en-IM ; en-IN ; en-Latn-IN ; en-IN ; en-IO ; en-Latn-IO ; en-IO ; +en-IT ; en-Latn-IT ; en-IT ; en-JE ; en-Latn-JE ; en-JE ; en-JM ; en-Latn-JM ; en-JM ; en-KE ; en-Latn-KE ; en-KE ; @@ -285,15 +290,19 @@ en-NA ; en-Latn-NA ; en-NA ; en-NF ; en-Latn-NF ; en-NF ; en-NG ; en-Latn-NG ; en-NG ; en-NL ; en-Latn-NL ; en-NL ; +en-NO ; en-Latn-NO ; en-NO ; en-NR ; en-Latn-NR ; en-NR ; en-NU ; en-Latn-NU ; en-NU ; en-NZ ; en-Latn-NZ ; en-NZ ; en-PG ; en-Latn-PG ; en-PG ; en-PH ; en-Latn-PH ; en-PH ; en-PK ; en-Latn-PK ; en-PK ; +en-PL ; en-Latn-PL ; en-PL ; en-PN ; en-Latn-PN ; en-PN ; en-PR ; en-Latn-PR ; en-PR ; +en-PT ; en-Latn-PT ; en-PT ; en-PW ; en-Latn-PW ; en-PW ; +en-RO ; en-Latn-RO ; en-RO ; en-RW ; en-Latn-RW ; en-RW ; en-SB ; en-Latn-SB ; en-SB ; en-SC ; en-Latn-SC ; en-SC ; @@ -302,6 +311,7 @@ en-SE ; en-Latn-SE ; en-SE ; en-SG ; en-Latn-SG ; en-SG ; en-SH ; en-Latn-SH ; en-SH ; en-SI ; en-Latn-SI ; en-SI ; +en-SK ; en-Latn-SK ; en-SK ; en-SL ; en-Latn-SL ; en-SL ; en-SS ; en-Latn-SS ; en-SS ; en-SX ; en-Latn-SX ; en-SX ; @@ -802,11 +812,6 @@ pl-AQ ; pl-Latn-AQ ; pl-AQ ; pl-Egyp ; pl-Egyp-PL ; pl-Egyp ; pl-Latn ; pl-Latn-PL ; pl ; pl-PL ; pl-Latn-PL ; pl ; -prg ; prg-Latn-PL ; prg ; -prg-AQ ; prg-Latn-AQ ; prg-AQ ; -prg-Egyp ; prg-Egyp-PL ; prg-Egyp ; -prg-Latn ; prg-Latn-PL ; prg ; -prg-PL ; prg-Latn-PL ; prg ; ps ; ps-Arab-AF ; ps ; ps-AF ; ps-Arab-AF ; ps ; ps-AQ ; ps-Arab-AQ ; ps-AQ ; @@ -1575,9 +1580,9 @@ und-NP ; ne-Deva-NP ; ne ; und-NR ; en-Latn-NR ; en-NR ; und-NU ; en-Latn-NU ; en-NU ; und-NZ ; en-Latn-NZ ; en-NZ ; -und-Nkoo ; man-Nkoo-GN ; man-Nkoo ; man-GN +und-Nkoo ; man-Nkoo-GN ; man-Nkoo ; und-Nkoo-AQ ; man-Nkoo-AQ ; ; -und-Nkoo-GN ; man-Nkoo-GN ; man-Nkoo ; man-GN +und-Nkoo-GN ; man-Nkoo-GN ; man-Nkoo ; und-OM ; ar-Arab-OM ; ar-OM ; und-Olck ; sat-Olck-IN ; sat ; und-Olck-AQ ; sat-Olck-AQ ; sat-AQ ; diff --git a/icu4c/source/test/testdata/cldr/localeIdentifiers/localeCanonicalization.txt b/icu4c/source/test/testdata/cldr/localeIdentifiers/localeCanonicalization.txt index 30fc66445aa1..18ae4443dbff 100644 --- a/icu4c/source/test/testdata/cldr/localeIdentifiers/localeCanonicalization.txt +++ b/icu4c/source/test/testdata/cldr/localeIdentifiers/localeCanonicalization.txt @@ -1,3 +1,4 @@ +# DO NOT EDIT THIS FILE, instead regenerate it using GenerateLocaleIDTestData.java # Test data for locale identifier canonicalization # Copyright © 1991-2025 Unicode, Inc. # For terms of use, see http://www.unicode.org/copyright.html diff --git a/icu4c/source/test/testdata/cldr/localeIdentifiers/localeDisplayName.txt b/icu4c/source/test/testdata/cldr/localeIdentifiers/localeDisplayName.txt index 0f919bd35074..54563a0f2663 100644 --- a/icu4c/source/test/testdata/cldr/localeIdentifiers/localeDisplayName.txt +++ b/icu4c/source/test/testdata/cldr/localeIdentifiers/localeDisplayName.txt @@ -1,3 +1,4 @@ +# DO NOT EDIT THIS FILE, instead regenerate it using GenerateLocaleIDTestData.java # Test data for locale display name generation # Copyright © 1991-2025 Unicode, Inc. # For terms of use, see http://www.unicode.org/copyright.html @@ -356,7 +357,7 @@ es-Cyrl-MX; Spaans (Cyrillies, Meksiko) hi-Latn; Hindi (Latyn) nl-BE; Nederlands (België) nl-Latn-BE; Nederlands (Latyn, België) -zh-Hans-fonipa; Chinees (Vereenvoudig, FONIPA) +zh-Hans-fonipa; Chinees (Vereenvoudig, fonipa) @locale=af @@ -369,7 +370,7 @@ es-Cyrl-MX; Spaans (Cyrillies, Meksiko) hi-Latn; Hindi (Latyn) nl-BE; Vlaams nl-Latn-BE; Vlaams (Latyn) -zh-Hans-fonipa; Chinees (Vereenvoudig, FONIPA) +zh-Hans-fonipa; Chinees (Vereenvoudig, fonipa) @locale=am @@ -382,7 +383,7 @@ es-Cyrl-MX; ስፓኒሽ (ሲይሪልክ፣ ሜክሲኮ) hi-Latn; ሕንድኛ (ላቲን) nl-BE; ደች (ቤልጄም) nl-Latn-BE; ደች (ላቲን፣ ቤልጄም) -zh-Hans-fonipa; ቻይንኛ (ቀለል ያለ፣ FONIPA) +zh-Hans-fonipa; ቻይንኛ (ቀለል ያለ፣ fonipa) @locale=am @@ -395,7 +396,7 @@ es-Cyrl-MX; የሜክሲኮ ስፓኒሽ (ሲይሪልክ) hi-Latn; ሕንድኛ [ላቲን] nl-BE; ፍሌሚሽ nl-Latn-BE; ፍሌሚሽ (ላቲን) -zh-Hans-fonipa; ቀለል ያለ ቻይንኛ (FONIPA) +zh-Hans-fonipa; ቀለል ያለ ቻይንኛ (fonipa) @locale=ar @@ -408,7 +409,7 @@ es-Cyrl-MX; الإسبانية (السيريلية، المكسيك) hi-Latn; الهندية (اللاتينية) nl-BE; الهولندية (بلجيكا) nl-Latn-BE; الهولندية (اللاتينية، بلجيكا) -zh-Hans-fonipa; الصينية (المبسطة، FONIPA) +zh-Hans-fonipa; الصينية (المبسطة، fonipa) @locale=ar @@ -421,7 +422,7 @@ es-Cyrl-MX; الإسبانية المكسيكية (السيريلية) hi-Latn; الهندية (اللاتينية) nl-BE; الهولندية (بلجيكا) nl-Latn-BE; الهولندية (اللاتينية، بلجيكا) -zh-Hans-fonipa; الصينية المبسطة (FONIPA) +zh-Hans-fonipa; الصينية المبسطة (fonipa) @locale=as @@ -434,7 +435,7 @@ es-Cyrl-MX; স্পেনিচ (চিৰিলিক, মেক্সিক hi-Latn; হিন্দী (লেটিন) nl-BE; ডাচ (বেলজিয়াম) nl-Latn-BE; ডাচ (লেটিন, বেলজিয়াম) -zh-Hans-fonipa; চীনা (সৰলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সৰলীকৃত, fonipa) @locale=as @@ -447,7 +448,7 @@ es-Cyrl-MX; মেক্সিকান স্পেনিচ (চিৰিল hi-Latn; হিন্দী (লেটিন) nl-BE; ফ্লেমিচ nl-Latn-BE; ফ্লেমিচ (লেটিন) -zh-Hans-fonipa; সৰলীকৃত চীনা (FONIPA) +zh-Hans-fonipa; সৰলীকৃত চীনা (fonipa) @locale=az @@ -460,7 +461,7 @@ es-Cyrl-MX; ispan (kiril, Meksika) hi-Latn; hind (latın) nl-BE; holland (Belçika) nl-Latn-BE; holland (latın, Belçika) -zh-Hans-fonipa; çin (sadələşmiş, FONIPA) +zh-Hans-fonipa; çin (sadələşmiş, fonipa) @locale=az @@ -473,7 +474,7 @@ es-Cyrl-MX; Meksika ispancası (kiril) hi-Latn; Hindi [latın] nl-BE; flamand nl-Latn-BE; flamand (latın) -zh-Hans-fonipa; sadələşmiş çin (FONIPA) +zh-Hans-fonipa; sadələşmiş çin (fonipa) @locale=az_Latn @@ -486,7 +487,7 @@ es-Cyrl-MX; ispan (kiril, Meksika) hi-Latn; hind (latın) nl-BE; holland (Belçika) nl-Latn-BE; holland (latın, Belçika) -zh-Hans-fonipa; çin (sadələşmiş, FONIPA) +zh-Hans-fonipa; çin (sadələşmiş, fonipa) @locale=az_Latn @@ -499,7 +500,7 @@ es-Cyrl-MX; Meksika ispancası (kiril) hi-Latn; Hindi [latın] nl-BE; flamand nl-Latn-BE; flamand (latın) -zh-Hans-fonipa; sadələşmiş çin (FONIPA) +zh-Hans-fonipa; sadələşmiş çin (fonipa) @locale=be @@ -512,7 +513,7 @@ es-Cyrl-MX; іспанская (кірыліца, Мексіка) hi-Latn; хіндзі (лацініца) nl-BE; нідэрландская (Бельгія) nl-Latn-BE; нідэрландская (лацініца, Бельгія) -zh-Hans-fonipa; кітайская (спрошчанае кітайскае, FONIPA) +zh-Hans-fonipa; кітайская (спрошчанае кітайскае, fonipa) @locale=be @@ -525,7 +526,7 @@ es-Cyrl-MX; мексіканская іспанская (кірыліца) hi-Latn; хіндзі (лацініца) nl-BE; фламандская nl-Latn-BE; фламандская (лацініца) -zh-Hans-fonipa; кітайская [спрошчаныя іерогліфы] (FONIPA) +zh-Hans-fonipa; кітайская [спрошчаныя іерогліфы] (fonipa) @locale=bg @@ -564,7 +565,7 @@ es-Cyrl-MX; স্প্যানিশ (সিরিলিক, মেক্স hi-Latn; হিন্দি (ল্যাটিন) nl-BE; ওলন্দাজ (বেলজিয়াম) nl-Latn-BE; ওলন্দাজ (ল্যাটিন, বেলজিয়াম) -zh-Hans-fonipa; চীনা (সরলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সরলীকৃত, fonipa) @locale=bn @@ -577,7 +578,7 @@ es-Cyrl-MX; স্প্যানিশ (সিরিলিক, মেক্স hi-Latn; হিন্দি (ল্যাটিন) nl-BE; ফ্লেমিশ nl-Latn-BE; ফ্লেমিশ (ল্যাটিন) -zh-Hans-fonipa; চীনা (সরলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সরলীকৃত, fonipa) @locale=bs @@ -668,7 +669,7 @@ es-Cyrl-MX; ᏍᏆᏂ (ᏲᏂᎢ ᏗᎪᏪᎵ, ᎠᏂᏍᏆᏂ) hi-Latn; ᎯᏂᏗ (ᎳᏘᏂ) nl-BE; ᏛᏥ (ᏇᎵᏥᎥᎻ) nl-Latn-BE; ᏛᏥ (ᎳᏘᏂ, ᏇᎵᏥᎥᎻ) -zh-Hans-fonipa; ᏓᎶᏂᎨ (ᎠᎯᏗᎨ, FONIPA) +zh-Hans-fonipa; ᏓᎶᏂᎨ (ᎠᎯᏗᎨ, fonipa) @locale=chr @@ -681,7 +682,7 @@ es-Cyrl-MX; ᏍᏆᏂᏱ ᏍᏆᏂ (ᏲᏂᎢ ᏗᎪᏪᎵ) hi-Latn; ᎯᏂᏗ (ᎳᏘᏂ) nl-BE; ᏊᎵᏥᎥᎻ ᏛᏥ nl-Latn-BE; ᏊᎵᏥᎥᎻ ᏛᏥ (ᎳᏘᏂ) -zh-Hans-fonipa; ᎠᎯᏗᎨ ᏓᎶᏂᎨ (FONIPA) +zh-Hans-fonipa; ᎠᎯᏗᎨ ᏓᎶᏂᎨ (fonipa) @locale=cs @@ -694,7 +695,7 @@ es-Cyrl-MX; španělština (cyrilice, Mexiko) hi-Latn; hindština (latinka) nl-BE; nizozemština (Belgie) nl-Latn-BE; nizozemština (latinka, Belgie) -zh-Hans-fonipa; čínština (zjednodušené, FONIPA) +zh-Hans-fonipa; čínština (zjednodušené, fonipa) @locale=cs @@ -707,7 +708,7 @@ es-Cyrl-MX; španělština (cyrilice, Mexiko) hi-Latn; hindština (latinka) nl-BE; vlámština nl-Latn-BE; vlámština (latinka) -zh-Hans-fonipa; čínština [zjednodušená] (FONIPA) +zh-Hans-fonipa; čínština [zjednodušená] (fonipa) @locale=cy @@ -798,7 +799,7 @@ es-Cyrl-MX; špańšćina (kyriliski, Mexiko) hi-Latn; hindišćina (łatyński) nl-BE; nižozemšćina (Belgiska) nl-Latn-BE; nižozemšćina (łatyński, Belgiska) -zh-Hans-fonipa; chinšćina (zjadnorjone, FONIPA) +zh-Hans-fonipa; chinšćina (zjadnorjone, fonipa) @locale=dsb @@ -811,7 +812,7 @@ es-Cyrl-MX; mexikańska špańšćina (kyriliski) hi-Latn; hindišćina (łatyński) nl-BE; flamšćina nl-Latn-BE; flamšćina (łatyński) -zh-Hans-fonipa; chinšćina [zjadnorjona] (FONIPA) +zh-Hans-fonipa; chinšćina [zjadnorjona] (fonipa) @locale=el @@ -1006,7 +1007,7 @@ es-Cyrl-MX; Spanish (Cyrillic, Mexico) hi-Latn; Hindi (Latin) nl-BE; Dutch (Belgium) nl-Latn-BE; Dutch (Latin, Belgium) -zh-Hans-fonipa; Chinese (Pinasimple, FONIPA) +zh-Hans-fonipa; Chinese (Pinasimple, fonipa) @locale=fil @@ -1019,7 +1020,7 @@ es-Cyrl-MX; Mexican na Espanyol (Cyrillic) hi-Latn; Hindi (Latin) nl-BE; Flemish nl-Latn-BE; Flemish (Latin) -zh-Hans-fonipa; Pinasimpleng Chinese (FONIPA) +zh-Hans-fonipa; Pinasimpleng Chinese (fonipa) @locale=fr @@ -1110,7 +1111,7 @@ es-Cyrl-MX; español (cirílico, México) hi-Latn; hindi (latino) nl-BE; neerlandés (Bélxica) nl-Latn-BE; neerlandés (latino, Bélxica) -zh-Hans-fonipa; chinés (simplificado, FONIPA) +zh-Hans-fonipa; chinés (simplificado, fonipa) @locale=gl @@ -1123,7 +1124,7 @@ es-Cyrl-MX; español de México (cirílico) hi-Latn; hindi [alfabeto latino] nl-BE; flamengo nl-Latn-BE; flamengo (latino) -zh-Hans-fonipa; chinés simplificado (FONIPA) +zh-Hans-fonipa; chinés simplificado (fonipa) @locale=gu @@ -1136,7 +1137,7 @@ es-Cyrl-MX; સ્પેનિશ (સિરિલિક, મેક્સિક hi-Latn; હિન્દી (લેટિન) nl-BE; ડચ (બેલ્જીયમ) nl-Latn-BE; ડચ (લેટિન, બેલ્જીયમ) -zh-Hans-fonipa; ચાઇનીઝ (સરળીકૃત, FONIPA) +zh-Hans-fonipa; ચાઇનીઝ (સરળીકૃત, fonipa) @locale=gu @@ -1149,7 +1150,7 @@ es-Cyrl-MX; મેક્સિકન સ્પેનિશ (સિરિલિ hi-Latn; હિન્દી (લેટિન) nl-BE; ફ્લેમિશ nl-Latn-BE; ફ્લેમિશ (લેટિન) -zh-Hans-fonipa; સરળીકૃત ચાઇનીઝ (FONIPA) +zh-Hans-fonipa; સરળીકૃત ચાઇનીઝ (fonipa) @locale=ha @@ -1162,7 +1163,7 @@ es-Cyrl-MX; Sifaniyanci (Cyrillic, Mesiko) hi-Latn; Harshen Hindi (Latin) nl-BE; Holanci (Belgiyom) nl-Latn-BE; Holanci (Latin, Belgiyom) -zh-Hans-fonipa; Harshen Sinanci (Sauƙaƙaƙƙe, FONIPA) +zh-Hans-fonipa; Harshen Sinanci (Sauƙaƙaƙƙe, fonipa) @locale=ha @@ -1175,7 +1176,7 @@ es-Cyrl-MX; Sifaniyanci Mesiko (Cyrillic) hi-Latn; Harshen Hindi (Latin) nl-BE; Holanci (Belgiyom) nl-Latn-BE; Holanci (Latin, Belgiyom) -zh-Hans-fonipa; Sauƙaƙaƙƙen Sinanci (FONIPA) +zh-Hans-fonipa; Sauƙaƙaƙƙen Sinanci (fonipa) @locale=he @@ -1214,7 +1215,7 @@ es-Cyrl-MX; स्पेनिश (सिरिलिक, मैक्सिक hi-Latn; हिन्दी (लैटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लैटिन, बेल्जियम) -zh-Hans-fonipa; चीनी (सरलीकृत, FONIPA) +zh-Hans-fonipa; चीनी (सरलीकृत, fonipa) @locale=hi @@ -1227,7 +1228,7 @@ es-Cyrl-MX; मैक्सिकन स्पेनिश (सिरिलि hi-Latn; हिन्दी (लैटिन) nl-BE; फ़्लेमिश nl-Latn-BE; फ़्लेमिश (लैटिन) -zh-Hans-fonipa; सरलीकृत चीनी (FONIPA) +zh-Hans-fonipa; सरलीकृत चीनी (fonipa) @locale=hi_Latn @@ -1292,7 +1293,7 @@ es-Cyrl-MX; španišćina (kyrilisce, Mexiko) hi-Latn; hindišćina (łaćonsce) nl-BE; nižozemšćina (Belgiska) nl-Latn-BE; nižozemšćina (łaćonsce, Belgiska) -zh-Hans-fonipa; chinšćina (zjednorjene, FONIPA) +zh-Hans-fonipa; chinšćina (zjednorjene, fonipa) @locale=hsb @@ -1305,7 +1306,7 @@ es-Cyrl-MX; mexiska španišćina (kyrilisce) hi-Latn; hindišćina (łaćonsce) nl-BE; flamšćina nl-Latn-BE; flamšćina (łaćonsce) -zh-Hans-fonipa; chinšćina [zjednorjena] (FONIPA) +zh-Hans-fonipa; chinšćina [zjednorjena] (fonipa) @locale=ht @@ -1370,7 +1371,7 @@ es-Cyrl-MX; իսպաներեն (կյուրեղագիր, Մեքսիկա) hi-Latn; հինդի (լատինական) nl-BE; հոլանդերեն (Բելգիա) nl-Latn-BE; հոլանդերեն (լատինական, Բելգիա) -zh-Hans-fonipa; չինարեն (պարզեցված, FONIPA) +zh-Hans-fonipa; չինարեն (պարզեցված, fonipa) @locale=hy @@ -1383,7 +1384,7 @@ es-Cyrl-MX; մեքսիկական իսպաներեն (կյուրեղագիր) hi-Latn; հինդի [լատինատառ] nl-BE; ֆլամանդերեն nl-Latn-BE; ֆլամանդերեն (լատինական) -zh-Hans-fonipa; պարզեցված չինարեն (FONIPA) +zh-Hans-fonipa; պարզեցված չինարեն (fonipa) @locale=id @@ -1422,7 +1423,7 @@ es-Cyrl-MX; Spanish (Cyrillic, Mexico) hi-Latn; Hindi (Latin) nl-BE; Dutch (Belgium) nl-Latn-BE; Dutch (Latin, Belgium) -zh-Hans-fonipa; Chaịniiz (Nke dị mfe, FONIPA) +zh-Hans-fonipa; Chaịniiz (Nke dị mfe, fonipa) @locale=ig @@ -1435,7 +1436,7 @@ es-Cyrl-MX; Spanish ndị Mexico (Cyrillic) hi-Latn; Hindi (Latin) nl-BE; Flemish nl-Latn-BE; Flemish (Latin) -zh-Hans-fonipa; Asụsụ Chaịniiz dị mfe (FONIPA) +zh-Hans-fonipa; Asụsụ Chaịniiz dị mfe (fonipa) @locale=is @@ -1448,7 +1449,7 @@ es-Cyrl-MX; spænska (kyrillískt, Mexíkó) hi-Latn; hindí (latneskt) nl-BE; hollenska (Belgía) nl-Latn-BE; hollenska (latneskt, Belgía) -zh-Hans-fonipa; kínverska (einfaldað, FONIPA) +zh-Hans-fonipa; kínverska (einfaldað, fonipa) @locale=is @@ -1461,7 +1462,7 @@ es-Cyrl-MX; mexíkósk spænska (kyrillískt) hi-Latn; hindí (latneskt) nl-BE; flæmska nl-Latn-BE; flæmska (latneskt) -zh-Hans-fonipa; kínverska [einfölduð] (FONIPA) +zh-Hans-fonipa; kínverska [einfölduð] (fonipa) @locale=it @@ -1526,7 +1527,7 @@ es-Cyrl-MX; Spanyol (Sirilik, Mèksiko) hi-Latn; India (Latin) nl-BE; Walanda (Bèlgi) nl-Latn-BE; Walanda (Latin, Bèlgi) -zh-Hans-fonipa; Tyonghwa (Prasaja, FONIPA) +zh-Hans-fonipa; Tyonghwa (Prasaja, fonipa) @locale=jv @@ -1539,7 +1540,7 @@ es-Cyrl-MX; Spanyol [Meksiko] (Sirilik) hi-Latn; India (Latin) nl-BE; Flemis nl-Latn-BE; Flemis (Latin) -zh-Hans-fonipa; Tyonghwa [Ringkes] (FONIPA) +zh-Hans-fonipa; Tyonghwa [Ringkes] (fonipa) @locale=ka @@ -1552,7 +1553,7 @@ es-Cyrl-MX; ესპანური (კირილიცა, მექსი hi-Latn; ჰინდი (ლათინური) nl-BE; ნიდერლანდური (ბელგია) nl-Latn-BE; ნიდერლანდური (ლათინური, ბელგია) -zh-Hans-fonipa; ჩინური (გამარტივებული, FONIPA) +zh-Hans-fonipa; ჩინური (გამარტივებული, fonipa) @locale=ka @@ -1565,7 +1566,7 @@ es-Cyrl-MX; მექსიკური ესპანური (კირი hi-Latn; ჰინდი (ლათინური) nl-BE; ფლამანდიური nl-Latn-BE; ფლამანდიური (ლათინური) -zh-Hans-fonipa; გამარტივებული ჩინური (FONIPA) +zh-Hans-fonipa; გამარტივებული ჩინური (fonipa) @locale=kk @@ -1630,7 +1631,7 @@ es-Cyrl-MX; អេស្ប៉ាញ (ស៊ីរីលីក, ម៉ិកស hi-Latn; ហិណ្ឌី (ឡាតាំង) nl-BE; ហូឡង់ (បែលហ្ស៊ិក) nl-Latn-BE; ហូឡង់ (ឡាតាំង, បែលហ្ស៊ិក) -zh-Hans-fonipa; ចិន (អក្សរ​ចិន​កាត់, FONIPA) +zh-Hans-fonipa; ចិន (អក្សរ​ចិន​កាត់, fonipa) @locale=km @@ -1643,7 +1644,7 @@ es-Cyrl-MX; អេស្ប៉ាញ (ស៊ីរីលីក, ម៉ិកស hi-Latn; ហិណ្ឌី (ឡាតាំង) nl-BE; ផ្លាមីស nl-Latn-BE; ផ្លាមីស (ឡាតាំង) -zh-Hans-fonipa; ចិន​អក្សរ​កាត់ (FONIPA) +zh-Hans-fonipa; ចិន​អក្សរ​កាត់ (fonipa) @locale=kn @@ -1656,7 +1657,7 @@ es-Cyrl-MX; ಸ್ಪ್ಯಾನಿಷ್ (ಸಿರಿಲಿಕ್, ಮೆಕ hi-Latn; ಹಿಂದಿ (ಲ್ಯಾಟಿನ್) nl-BE; ಡಚ್ (ಬೆಲ್ಜಿಯಮ್) nl-Latn-BE; ಡಚ್ (ಲ್ಯಾಟಿನ್, ಬೆಲ್ಜಿಯಮ್) -zh-Hans-fonipa; ಚೈನೀಸ್ (ಸರಳೀಕೃತ, FONIPA) +zh-Hans-fonipa; ಚೈನೀಸ್ (ಸರಳೀಕೃತ, fonipa) @locale=kn @@ -1669,7 +1670,7 @@ es-Cyrl-MX; ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್ (ಸಿ hi-Latn; ಹಿಂದಿ (ಲ್ಯಾಟಿನ್) nl-BE; ಫ್ಲೆಮಿಷ್ nl-Latn-BE; ಫ್ಲೆಮಿಷ್ (ಲ್ಯಾಟಿನ್) -zh-Hans-fonipa; ಸರಳೀಕೃತ ಚೈನೀಸ್ (FONIPA) +zh-Hans-fonipa; ಸರಳೀಕೃತ ಚೈನೀಸ್ (fonipa) @locale=ko @@ -1682,7 +1683,7 @@ es-Cyrl-MX; 스페인어(키릴 문자, 멕시코) hi-Latn; 힌디어(로마자) nl-BE; 네덜란드어(벨기에) nl-Latn-BE; 네덜란드어(로마자, 벨기에) -zh-Hans-fonipa; 중국어(간체, FONIPA) +zh-Hans-fonipa; 중국어(간체, fonipa) @locale=ko @@ -1695,7 +1696,7 @@ es-Cyrl-MX; 스페인어(키릴 문자, 멕시코) hi-Latn; 힌디어(로마자) nl-BE; 플라망어 nl-Latn-BE; 플라망어(로마자) -zh-Hans-fonipa; 중국어(간체, FONIPA) +zh-Hans-fonipa; 중국어(간체, fonipa) @locale=kok @@ -1708,7 +1709,7 @@ es-Cyrl-MX; स्पॅनीश (सिरिलिक, मेक्सिक hi-Latn; हिन्दी (लॅटीन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटीन, बेल्जियम) -zh-Hans-fonipa; चिनी (सोंपी, FONIPA) +zh-Hans-fonipa; चिनी (सोंपी, fonipa) @locale=kok @@ -1721,7 +1722,7 @@ es-Cyrl-MX; मॅक्सिकन स्पॅनीश (सिरिलि hi-Latn; हिन्दी (लॅटीन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटीन) -zh-Hans-fonipa; सोंपी चिनी (FONIPA) +zh-Hans-fonipa; सोंपी चिनी (fonipa) @locale=kok_Deva @@ -1734,7 +1735,7 @@ es-Cyrl-MX; स्पॅनीश (सिरिलिक, मेक्सिक hi-Latn; हिन्दी (लॅटीन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटीन, बेल्जियम) -zh-Hans-fonipa; चिनी (सोंपी, FONIPA) +zh-Hans-fonipa; चिनी (सोंपी, fonipa) @locale=kok_Deva @@ -1747,7 +1748,7 @@ es-Cyrl-MX; मॅक्सिकन स्पॅनीश (सिरिलि hi-Latn; हिन्दी (लॅटीन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटीन) -zh-Hans-fonipa; सोंपी चिनी (FONIPA) +zh-Hans-fonipa; सोंपी चिनी (fonipa) @locale=ky @@ -1760,7 +1761,7 @@ es-Cyrl-MX; испанча (Кирилл, Мексика) hi-Latn; хиндиче (Латын) nl-BE; голландча (Бельгия) nl-Latn-BE; голландча (Латын, Бельгия) -zh-Hans-fonipa; кытайча (Жөнөкөйлөштүрүлгөн, FONIPA) +zh-Hans-fonipa; кытайча (Жөнөкөйлөштүрүлгөн, fonipa) @locale=ky @@ -1773,7 +1774,7 @@ es-Cyrl-MX; испанча (Кирилл, Мексика) hi-Latn; хиндиче (Латын) nl-BE; фламандча nl-Latn-BE; фламандча (Латын) -zh-Hans-fonipa; кытайча [жөнөкөйлөштүрүлгөн] (FONIPA) +zh-Hans-fonipa; кытайча [жөнөкөйлөштүрүлгөн] (fonipa) @locale=lo @@ -1864,7 +1865,7 @@ es-Cyrl-MX; шпански (кирилско писмо, Мексико) hi-Latn; хинди (латинично писмо) nl-BE; холандски (Белгија) nl-Latn-BE; холандски (латинично писмо, Белгија) -zh-Hans-fonipa; кинески (поедноставено, FONIPA) +zh-Hans-fonipa; кинески (поедноставено, fonipa) @locale=mk @@ -1877,7 +1878,7 @@ es-Cyrl-MX; мексикански шпански (кирилско писмо) hi-Latn; хинди (латинично писмо) nl-BE; фламански nl-Latn-BE; фламански (латинично писмо) -zh-Hans-fonipa; поедноставен кинески (FONIPA) +zh-Hans-fonipa; поедноставен кинески (fonipa) @locale=ml @@ -1916,7 +1917,7 @@ es-Cyrl-MX; испани (кирилл, Мексик) hi-Latn; хинди (латин) nl-BE; нидерланд (Бельги) nl-Latn-BE; нидерланд (латин, Бельги) -zh-Hans-fonipa; хятад (хялбаршуулсан, FONIPA) +zh-Hans-fonipa; хятад (хялбаршуулсан, fonipa) @locale=mn @@ -1929,7 +1930,7 @@ es-Cyrl-MX; испани хэл [Мексик] (кирилл) hi-Latn; хинди (латин) nl-BE; фламанд nl-Latn-BE; фламанд (латин) -zh-Hans-fonipa; хялбаршуулсан хятад (FONIPA) +zh-Hans-fonipa; хялбаршуулсан хятад (fonipa) @locale=mr @@ -1942,7 +1943,7 @@ es-Cyrl-MX; स्पॅनिश (सीरिलिक, मेक्सिक hi-Latn; हिंदी (लॅटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटिन, बेल्जियम) -zh-Hans-fonipa; चीनी (सरलीकृत, FONIPA) +zh-Hans-fonipa; चीनी (सरलीकृत, fonipa) @locale=mr @@ -1955,7 +1956,7 @@ es-Cyrl-MX; मेक्सिकन स्पॅनिश (सीरिलि hi-Latn; हिंदी (लॅटिन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटिन) -zh-Hans-fonipa; सरलीकृत चीनी (FONIPA) +zh-Hans-fonipa; सरलीकृत चीनी (fonipa) @locale=ms @@ -2046,7 +2047,7 @@ es-Cyrl-MX; स्पेनी (सिरिलिक, मेक्सिको) hi-Latn; हिन्दी (ल्याटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (ल्याटिन, बेल्जियम) -zh-Hans-fonipa; चिनियाँ (सरलिकृत चिनियाँ, FONIPA) +zh-Hans-fonipa; चिनियाँ (सरलिकृत चिनियाँ, fonipa) @locale=ne @@ -2059,7 +2060,7 @@ es-Cyrl-MX; मेक्सिकन स्पेनी (सिरिलिक) hi-Latn; हिन्दी (ल्याटिन) nl-BE; फ्लेमिस nl-Latn-BE; फ्लेमिस (ल्याटिन) -zh-Hans-fonipa; सरलिकृत चिनियाँ (FONIPA) +zh-Hans-fonipa; सरलिकृत चिनियाँ (fonipa) @locale=nl @@ -2150,7 +2151,7 @@ es-Cyrl-MX; ସ୍ପାନିସ୍‌ (ସିରିଲିକ୍, ମେକ୍ hi-Latn; ହିନ୍ଦୀ (ଲାଟିନ୍) nl-BE; ଡଚ୍ (ବେଲଜିୟମ୍) nl-Latn-BE; ଡଚ୍ (ଲାଟିନ୍, ବେଲଜିୟମ୍) -zh-Hans-fonipa; ଚାଇନିଜ୍‌ (ସରଳୀକୃତ, FONIPA) +zh-Hans-fonipa; ଚାଇନିଜ୍‌ (ସରଳୀକୃତ, fonipa) @locale=or @@ -2163,7 +2164,7 @@ es-Cyrl-MX; ମେକ୍ସିକାନ ସ୍ପାନିସ୍‌ (ସିର hi-Latn; ହିନ୍ଦୀ (ଲାଟିନ୍) nl-BE; ଫ୍ଲେମିଶ୍ nl-Latn-BE; ଫ୍ଲେମିଶ୍ (ଲାଟିନ୍) -zh-Hans-fonipa; ସରଳୀକୃତ ଚାଇନିଜ (FONIPA) +zh-Hans-fonipa; ସରଳୀକୃତ ଚାଇନିଜ (fonipa) @locale=pa @@ -2176,7 +2177,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਡੱਚ (ਬੈਲਜੀਅਮ) nl-Latn-BE; ਡੱਚ (ਲਾਤੀਨੀ, ਬੈਲਜੀਅਮ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa @@ -2189,7 +2190,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਫਲੈਮਿਸ਼ nl-Latn-BE; ਫਲੈਮਿਸ਼ (ਲਾਤੀਨੀ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa_Guru @@ -2202,7 +2203,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਡੱਚ (ਬੈਲਜੀਅਮ) nl-Latn-BE; ਡੱਚ (ਲਾਤੀਨੀ, ਬੈਲਜੀਅਮ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa_Guru @@ -2215,7 +2216,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਫਲੈਮਿਸ਼ nl-Latn-BE; ਫਲੈਮਿਸ਼ (ਲਾਤੀਨੀ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pcm @@ -2228,7 +2229,7 @@ es-Cyrl-MX; Spánish Lángwej (Sírílik, Mẹ́ksíko) hi-Latn; Híndi Lángwej (Látin) nl-BE; Dọch Lángwej (Bẹ́ljọm) nl-Latn-BE; Dọch Lángwej (Látin, Bẹ́ljọm) -zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, FONIPA) +zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, fonipa) @locale=pcm @@ -2241,7 +2242,7 @@ es-Cyrl-MX; Mẹ́ksiko Spánish (Sírílik) hi-Latn; Híndi [Látin] nl-BE; Flẹ́mish Lángwej nl-Latn-BE; Flẹ́mish Lángwej (Látin) -zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, FONIPA) +zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, fonipa) @locale=pl @@ -2280,7 +2281,7 @@ es-Cyrl-MX; هسپانوي (سیریلیک, میکسیکو) hi-Latn; هندي (لاتين/لاتيني) nl-BE; هالېنډي (بیلجیم) nl-Latn-BE; هالېنډي (لاتين/لاتيني, بیلجیم) -zh-Hans-fonipa; چیني (ساده شوی, FONIPA) +zh-Hans-fonipa; چیني (ساده شوی, fonipa) @locale=ps @@ -2293,7 +2294,7 @@ es-Cyrl-MX; ميکسيکي هسپانوي (سیریلیک) hi-Latn; هندي [لاتيني] nl-BE; فلېمېشي nl-Latn-BE; فلېمېشي (لاتين/لاتيني) -zh-Hans-fonipa; چیني (ساده شوی, FONIPA) +zh-Hans-fonipa; چیني (ساده شوی, fonipa) @locale=pt @@ -2358,7 +2359,7 @@ es-Cyrl-MX; es (Cyrl, MX) hi-Latn; hi (Latn) nl-BE; nl (BE) nl-Latn-BE; nl (Latn, BE) -zh-Hans-fonipa; zh (Hans, FONIPA) +zh-Hans-fonipa; zh (Hans, fonipa) @locale=root @@ -2371,7 +2372,7 @@ es-Cyrl-MX; es (Cyrl, MX) hi-Latn; hi (Latn) nl-BE; nl (BE) nl-Latn-BE; nl (Latn, BE) -zh-Hans-fonipa; zh (Hans, FONIPA) +zh-Hans-fonipa; zh (Hans, fonipa) @locale=ru @@ -2410,7 +2411,7 @@ es-Cyrl-MX; هسپانوي (سيريلي, ميڪسيڪو) hi-Latn; هندي (لاطيني) nl-BE; ڊچ (بيلجيم) nl-Latn-BE; ڊچ (لاطيني, بيلجيم) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd @@ -2423,7 +2424,7 @@ es-Cyrl-MX; ميڪسيڪين اسپيني (سيريلي) hi-Latn; هندي (لاطيني) nl-BE; فليمش nl-Latn-BE; فليمش (لاطيني) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd_Arab @@ -2436,7 +2437,7 @@ es-Cyrl-MX; هسپانوي (سيريلي, ميڪسيڪو) hi-Latn; هندي (لاطيني) nl-BE; ڊچ (بيلجيم) nl-Latn-BE; ڊچ (لاطيني, بيلجيم) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd_Arab @@ -2449,7 +2450,7 @@ es-Cyrl-MX; ميڪسيڪين اسپيني (سيريلي) hi-Latn; هندي (لاطيني) nl-BE; فليمش nl-Latn-BE; فليمش (لاطيني) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=si @@ -2462,7 +2463,7 @@ es-Cyrl-MX; ස්පාඤ්ඤ (සිරිලික්, මෙක්සි hi-Latn; හින්දි (ලතින්) nl-BE; ලන්දේසි (බෙල්ජියම) nl-Latn-BE; ලන්දේසි (ලතින්, බෙල්ජියම) -zh-Hans-fonipa; චීන (සුළුකළ, FONIPA) +zh-Hans-fonipa; චීන (සුළුකළ, fonipa) @locale=si @@ -2475,7 +2476,7 @@ es-Cyrl-MX; මෙක්සිකානු ස්පාඤ්ඤ (සිරි hi-Latn; හින්දි (ලතින්) nl-BE; ෆ්ලෙමිශ් nl-Latn-BE; ෆ්ලෙමිශ් (ලතින්) -zh-Hans-fonipa; සරල චීන (FONIPA) +zh-Hans-fonipa; සරල චීන (fonipa) @locale=sk @@ -2488,7 +2489,7 @@ es-Cyrl-MX; španielčina (cyrilika, Mexiko) hi-Latn; hindčina (latinka) nl-BE; holandčina (Belgicko) nl-Latn-BE; holandčina (latinka, Belgicko) -zh-Hans-fonipa; čínština (zjednodušené, FONIPA) +zh-Hans-fonipa; čínština (zjednodušené, fonipa) @locale=sk @@ -2501,7 +2502,7 @@ es-Cyrl-MX; španielčina [mexická] (cyrilika) hi-Latn; hindčina (latinka) nl-BE; flámčina nl-Latn-BE; flámčina (latinka) -zh-Hans-fonipa; čínština [zjednodušená] (FONIPA) +zh-Hans-fonipa; čínština [zjednodušená] (fonipa) @locale=sl @@ -2540,7 +2541,7 @@ es-Cyrl-MX; Isbaanish (Siriylik, Meksiko) hi-Latn; Hindi (Laatiin) nl-BE; Holandays (Biljam) nl-Latn-BE; Holandays (Laatiin, Biljam) -zh-Hans-fonipa; Shinees (La fududeeyay, FONIPA) +zh-Hans-fonipa; Shinees (La fududeeyay, fonipa) @locale=so @@ -2553,7 +2554,7 @@ es-Cyrl-MX; Isbaanishka Mexico (Siriylik) hi-Latn; Hindi [Latin] nl-BE; Af faleemi nl-Latn-BE; Af faleemi (Laatiin) -zh-Hans-fonipa; Shiinaha Rasmiga ah (FONIPA) +zh-Hans-fonipa; Shiinaha Rasmiga ah (fonipa) @locale=sq @@ -2566,7 +2567,7 @@ es-Cyrl-MX; spanjisht (cirilik, Meksikë) hi-Latn; indisht (latin) nl-BE; holandisht (Belgjikë) nl-Latn-BE; holandisht (latin, Belgjikë) -zh-Hans-fonipa; kinezisht (i thjeshtuar, FONIPA) +zh-Hans-fonipa; kinezisht (i thjeshtuar, fonipa) @locale=sq @@ -2579,7 +2580,7 @@ es-Cyrl-MX; spanjishte meksikane (cirilik) hi-Latn; hindisht [latine] nl-BE; flamandisht nl-Latn-BE; flamandisht (latin) -zh-Hans-fonipa; kinezishte e thjeshtuar (FONIPA) +zh-Hans-fonipa; kinezishte e thjeshtuar (fonipa) @locale=sr @@ -2696,7 +2697,7 @@ es-Cyrl-MX; Kihispania (Kisiriliki, Meksiko) hi-Latn; Kihindi (Kilatini) nl-BE; Kiholanzi (Ubelgiji) nl-Latn-BE; Kiholanzi (Kilatini, Ubelgiji) -zh-Hans-fonipa; Kichina (Rahisi, FONIPA) +zh-Hans-fonipa; Kichina (Rahisi, fonipa) @locale=sw @@ -2709,7 +2710,7 @@ es-Cyrl-MX; Kihispania (Kisiriliki, Meksiko) hi-Latn; Kihindi (Kilatini) nl-BE; Kiflemi nl-Latn-BE; Kiflemi (Kilatini) -zh-Hans-fonipa; Kichina [Kilichorahisishwa] (FONIPA) +zh-Hans-fonipa; Kichina [Kilichorahisishwa] (fonipa) @locale=ta @@ -2722,7 +2723,7 @@ es-Cyrl-MX; ஸ்பானிஷ் (சிரிலிக், மெக்ச hi-Latn; இந்தி (லத்தின்) nl-BE; டச்சு (பெல்ஜியம்) nl-Latn-BE; டச்சு (லத்தின், பெல்ஜியம்) -zh-Hans-fonipa; சீனம் (எளிதாக்கப்பட்டது, FONIPA) +zh-Hans-fonipa; சீனம் (எளிதாக்கப்பட்டது, fonipa) @locale=ta @@ -2735,7 +2736,7 @@ es-Cyrl-MX; மெக்ஸிகன் ஸ்பானிஷ் (சிரி hi-Latn; இந்தி (லத்தின்) nl-BE; ஃப்லெமிஷ் nl-Latn-BE; ஃப்லெமிஷ் (லத்தின்) -zh-Hans-fonipa; எளிதாக்கப்பட்ட சீனம் (FONIPA) +zh-Hans-fonipa; எளிதாக்கப்பட்ட சீனம் (fonipa) @locale=te @@ -2748,7 +2749,7 @@ es-Cyrl-MX; స్పానిష్ (సిరిలిక్, మెక్స hi-Latn; హిందీ (లాటిన్) nl-BE; డచ్ (బెల్జియం) nl-Latn-BE; డచ్ (లాటిన్, బెల్జియం) -zh-Hans-fonipa; చైనీస్ (సరళీకృతం, FONIPA) +zh-Hans-fonipa; చైనీస్ (సరళీకృతం, fonipa) @locale=te @@ -2761,7 +2762,7 @@ es-Cyrl-MX; మెక్సికన్ స్పానిష్ (సిరి hi-Latn; హిందీ (లాటిన్) nl-BE; ఫ్లెమిష్ nl-Latn-BE; ఫ్లెమిష్ (లాటిన్) -zh-Hans-fonipa; సరళీకృత చైనీస్ (FONIPA) +zh-Hans-fonipa; సరళీకృత చైనీస్ (fonipa) @locale=th @@ -2800,7 +2801,7 @@ es-Cyrl-MX; ስጳንኛ (ቋንቋ ሲሪል፣ ሜክሲኮ) hi-Latn; ሂንዲ (ላቲን) nl-BE; ዳች (ቤልጅዩም) nl-Latn-BE; ዳች (ላቲን፣ ቤልጅዩም) -zh-Hans-fonipa; ቻይንኛ (ዝተቐለለ፣ FONIPA) +zh-Hans-fonipa; ቻይንኛ (ዝተቐለለ፣ fonipa) @locale=ti @@ -2813,7 +2814,7 @@ es-Cyrl-MX; ስጳንኛ (ቋንቋ ሲሪል፣ ሜክሲኮ) hi-Latn; ሂንዲ (ላቲን) nl-BE; ፍላሚሽ nl-Latn-BE; ፍላሚሽ (ላቲን) -zh-Hans-fonipa; ቀሊል ቻይንኛ (FONIPA) +zh-Hans-fonipa; ቀሊል ቻይንኛ (fonipa) @locale=tk @@ -2826,7 +2827,7 @@ es-Cyrl-MX; ispan dili (Kiril elipbiýi, Meksika) hi-Latn; hindi dili (Latyn elipbiýi) nl-BE; niderland dili (Belgiýa) nl-Latn-BE; niderland dili (Latyn elipbiýi, Belgiýa) -zh-Hans-fonipa; hytaý dili (Ýönekeýleşdirilen, FONIPA) +zh-Hans-fonipa; hytaý dili (Ýönekeýleşdirilen, fonipa) @locale=tk @@ -2839,7 +2840,7 @@ es-Cyrl-MX; ispan dili (Kiril elipbiýi, Meksika) hi-Latn; hindi dili (Latyn elipbiýi) nl-BE; flamand dili nl-Latn-BE; flamand dili (Latyn elipbiýi) -zh-Hans-fonipa; ýönekeýleşdirilen hytaý dili (FONIPA) +zh-Hans-fonipa; ýönekeýleşdirilen hytaý dili (fonipa) @locale=tr @@ -2904,7 +2905,7 @@ es-Cyrl-MX; ہسپانوی (سیریلک،میکسیکو) hi-Latn; ہندی (لاطینی) nl-BE; ڈچ (بیلجیم) nl-Latn-BE; ڈچ (لاطینی،بیلجیم) -zh-Hans-fonipa; چینی (آسان،FONIPA) +zh-Hans-fonipa; چینی (آسان،fonipa) @locale=ur @@ -2917,7 +2918,7 @@ es-Cyrl-MX; میکسیکن ہسپانوی (سیریلک) hi-Latn; ہندی (لاطینی) nl-BE; فلیمِش nl-Latn-BE; فلیمِش (لاطینی) -zh-Hans-fonipa; چینی [آسان کردہ] (FONIPA) +zh-Hans-fonipa; چینی [آسان کردہ] (fonipa) @locale=uz @@ -2930,7 +2931,7 @@ es-Cyrl-MX; ispancha (kirill, Meksika) hi-Latn; hind (lotin) nl-BE; niderland (Belgiya) nl-Latn-BE; niderland (lotin, Belgiya) -zh-Hans-fonipa; xitoy (soddalashgan, FONIPA) +zh-Hans-fonipa; xitoy (soddalashgan, fonipa) @locale=uz @@ -2943,7 +2944,7 @@ es-Cyrl-MX; ispan [Meksika] (kirill) hi-Latn; hind (lotin) nl-BE; flamand nl-Latn-BE; flamand (lotin) -zh-Hans-fonipa; xitoy [soddalashgan] (FONIPA) +zh-Hans-fonipa; xitoy [soddalashgan] (fonipa) @locale=uz_Latn @@ -2956,7 +2957,7 @@ es-Cyrl-MX; ispancha (kirill, Meksika) hi-Latn; hind (lotin) nl-BE; niderland (Belgiya) nl-Latn-BE; niderland (lotin, Belgiya) -zh-Hans-fonipa; xitoy (soddalashgan, FONIPA) +zh-Hans-fonipa; xitoy (soddalashgan, fonipa) @locale=uz_Latn @@ -2969,7 +2970,7 @@ es-Cyrl-MX; ispan [Meksika] (kirill) hi-Latn; hind (lotin) nl-BE; flamand nl-Latn-BE; flamand (lotin) -zh-Hans-fonipa; xitoy [soddalashgan] (FONIPA) +zh-Hans-fonipa; xitoy [soddalashgan] (fonipa) @locale=vi @@ -3008,7 +3009,7 @@ es-Cyrl-MX; Èdè Sípáníìṣì (èdè ilẹ̀ Rọ́ṣíà, Mesiko) hi-Latn; Èdè Híńdì (Èdè Látìn) nl-BE; Èdè Dọ́ọ̀ṣì (Bégíọ́mù) nl-Latn-BE; Èdè Dọ́ọ̀ṣì (Èdè Látìn, Bégíọ́mù) -zh-Hans-fonipa; Edè Ṣáínà (tí wọ́n mú rọrùn., FONIPA) +zh-Hans-fonipa; Edè Ṣáínà (tí wọ́n mú rọrùn., fonipa) @locale=yo @@ -3021,7 +3022,7 @@ es-Cyrl-MX; Èdè Sípáníìṣì [orílẹ̀-èdè Mẹ́síkò] (èdè ilẹ hi-Latn; Èdè Híndì [Látìnì] nl-BE; Èdè Flemiṣi nl-Latn-BE; Èdè Flemiṣi (Èdè Látìn) -zh-Hans-fonipa; Ẹdè Ṣáínà Onírọ̀rùn (FONIPA) +zh-Hans-fonipa; Ẹdè Ṣáínà Onírọ̀rùn (fonipa) @locale=yue diff --git a/icu4c/source/tools/genrb/parse.cpp b/icu4c/source/tools/genrb/parse.cpp index eb85d5157a6f..3a53e999ff15 100644 --- a/icu4c/source/tools/genrb/parse.cpp +++ b/icu4c/source/tools/genrb/parse.cpp @@ -297,7 +297,7 @@ static char *getInvariantString(ParseState* state, uint32_t *line, struct UStrin if(!uprv_isInvariantUString(tokenValue->fChars, tokenValue->fLength)) { *status = U_INVALID_FORMAT_ERROR; - error(*line, "invariant characters required for table keys, binary data, etc."); + error((line == nullptr) ? 0 : *line, "invariant characters required for table keys, binary data, etc."); return nullptr; } diff --git a/icu4j/demos/pom.xml b/icu4j/demos/pom.xml index 74b8a1b82be8..eb3883db7ba9 100644 --- a/icu4j/demos/pom.xml +++ b/icu4j/demos/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 demos diff --git a/icu4j/main/charset/pom.xml b/icu4j/main/charset/pom.xml index 73d8ad1fdc41..e06a3a1a580f 100644 --- a/icu4j/main/charset/pom.xml +++ b/icu4j/main/charset/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/cns-11643-1992.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/cns-11643-1992.cnv index f4c47c3b3ae5..424a3b044936 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/cns-11643-1992.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/cns-11643-1992.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ebcdic-xml-us.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ebcdic-xml-us.cnv index bc063323f355..ac024acd7386 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ebcdic-xml-us.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ebcdic-xml-us.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-jp-2007.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-jp-2007.cnv index 5afc0b88bd49..4a25cd015e66 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-jp-2007.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-jp-2007.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-tw-2014.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-tw-2014.cnv index 5527e31e2cff..30a18a4d4247 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-tw-2014.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/euc-tw-2014.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/gb18030-2022.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/gb18030-2022.cnv index 6f71ee6cbf2f..faba6433d21f 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/gb18030-2022.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/gb18030-2022.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/gsm-03.38-2009.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/gsm-03.38-2009.cnv index ca441fe28677..08da74cf4459 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/gsm-03.38-2009.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/gsm-03.38-2009.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1006_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1006_P100-1995.cnv index dbc737a1baaf..5c66e625ca15 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1006_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1006_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1025_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1025_P100-1995.cnv index 4ead46052457..7e8b7238e000 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1025_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1025_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1026_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1026_P100-1995.cnv index 68b37d8fbd6f..34b5f8558fdf 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1026_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1026_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1047_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1047_P100-1995.cnv index c3ab23f2c1c6..6e9bf88dc6f0 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1047_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1047_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1051_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1051_P100-1995.cnv index 229b64471e58..0d9ad4cd0a5f 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1051_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1051_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1089_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1089_P100-1995.cnv index c7548a70b459..8fbbada01c74 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1089_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1089_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1097_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1097_P100-1995.cnv index d5a67a7ad611..bd6294004e24 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1097_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1097_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1098_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1098_P100-1995.cnv index d0fa91b3e4fe..7b4cb7a7c7c3 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1098_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1098_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1112_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1112_P100-1995.cnv index 26592c2817d8..b4d96eded64f 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1112_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1112_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1122_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1122_P100-1999.cnv index aea871480fc1..8f81dfc7d4d7 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1122_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1122_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1123_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1123_P100-1995.cnv index bc8420340d45..e99c6ba9a50f 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1123_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1123_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1124_P100-1996.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1124_P100-1996.cnv index c17d2b8d6c1d..c2ab1d2f7734 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1124_P100-1996.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1124_P100-1996.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1125_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1125_P100-1997.cnv index b9acf6b00846..c69a691e277d 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1125_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1125_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1129_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1129_P100-1997.cnv index 69401da429f3..9fa0a083a0d7 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1129_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1129_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1130_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1130_P100-1997.cnv index 04b60d8f4457..ab5ecd9d9c03 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1130_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1130_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1131_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1131_P100-1997.cnv index 26a80854233f..36c9aca3e2e0 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1131_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1131_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1132_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1132_P100-1998.cnv index 335d3763513d..f5812b9dcdcc 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1132_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1132_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1133_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1133_P100-1997.cnv index e0630dd75cc6..603052897965 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1133_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1133_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1137_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1137_P100-1999.cnv index e7a1b5085a8d..332668ab5d60 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1137_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1137_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1140_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1140_P100-1997.cnv index f86e0f1e177a..7cbde7556b46 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1140_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1140_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1141_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1141_P100-1997.cnv index b0097daf9ef5..696b7fd44ff9 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1141_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1141_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1142_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1142_P100-1997.cnv index eb5aec50bb0c..44902a4b654e 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1142_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1142_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1143_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1143_P100-1997.cnv index af10e378b624..05c3f19413f5 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1143_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1143_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1144_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1144_P100-1997.cnv index 9890ec2cd060..e74419cf4c96 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1144_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1144_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1145_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1145_P100-1997.cnv index afd6545f8d7a..680ec22d08e4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1145_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1145_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1146_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1146_P100-1997.cnv index cb8a9b59e06c..6e555a36e684 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1146_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1146_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1147_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1147_P100-1997.cnv index f637303b3f3e..b87d0e6e7809 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1147_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1147_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1148_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1148_P100-1997.cnv index a7089a1ab2d8..6952fae1ce48 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1148_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1148_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1149_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1149_P100-1997.cnv index ae3bab3915f0..a8b9f96cad5e 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1149_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1149_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1153_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1153_P100-1999.cnv index 9a48077a8ac5..b8d3dafc76ad 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1153_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1153_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1154_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1154_P100-1999.cnv index bf5325228699..67ffccaa1a10 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1154_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1154_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1155_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1155_P100-1999.cnv index c858e6583d24..67d8cf53881d 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1155_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1155_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1156_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1156_P100-1999.cnv index a7eeccb3ee67..01e833ed11f4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1156_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1156_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1157_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1157_P100-1999.cnv index 57378dc6cffd..698afcc99fda 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1157_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1157_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1158_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1158_P100-1999.cnv index 97ede9f05cfc..38d116743c85 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1158_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1158_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1160_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1160_P100-1999.cnv index 27ba704c4b4f..5f77196fce85 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1160_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1160_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1162_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1162_P100-1999.cnv index 08822e2a819a..943fd7440d06 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1162_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1162_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1164_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1164_P100-1999.cnv index 70abf9c982bc..8d6f5c2546fa 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1164_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1164_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1168_P100-2002.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1168_P100-2002.cnv index f96d6edfe1e8..2f2da14b28f8 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1168_P100-2002.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1168_P100-2002.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1250_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1250_P100-1995.cnv index d0dcf09af39f..e55267d75b2f 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1250_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1250_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1251_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1251_P100-1995.cnv index 3635418f75a7..b4ccd3b62163 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1251_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1251_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1252_P100-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1252_P100-2000.cnv index 8c3506f2d12c..ffc7c098b4dc 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1252_P100-2000.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1252_P100-2000.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1253_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1253_P100-1995.cnv index 4a85d1f94278..d98efbf93629 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1253_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1253_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1254_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1254_P100-1995.cnv index 4be20ccb288e..c8ade9b26422 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1254_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1254_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1255_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1255_P100-1995.cnv index 379ee3b71774..09ca769ef81e 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1255_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1255_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1256_P110-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1256_P110-1997.cnv index 1c4be38155c0..590060503f16 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1256_P110-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1256_P110-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1257_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1257_P100-1995.cnv index fb9efa19b3a4..b48f7125a94e 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1257_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1257_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1258_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1258_P100-1997.cnv index b331cf0cb021..b0a9ffcb6386 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1258_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1258_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-12712_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-12712_P100-1998.cnv index 1e3880038a61..8135e74021a3 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-12712_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-12712_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1276_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1276_P100-1995.cnv index a0c3fc92c1eb..f8b01d88ccf0 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1276_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1276_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P110-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P110-1997.cnv index cbcac05ee391..a12003a8fb10 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P110-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P110-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P11B-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P11B-1998.cnv index 4351818b7ee5..a75798f29b3c 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P11B-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1363_P11B-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1364_P110-2007.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1364_P110-2007.cnv index a53f8f6b82fc..c338736e8ab2 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1364_P110-2007.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1364_P110-2007.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1371_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1371_P100-1999.cnv index dadfee065402..ff7c43c8f476 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1371_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1371_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1373_P100-2002.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1373_P100-2002.cnv index 8bed5ef9a511..40e5cc8e7fe0 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1373_P100-2002.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1373_P100-2002.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1375_P100-2008.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1375_P100-2008.cnv index e5a078ef6356..b5e5c7958b47 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1375_P100-2008.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1375_P100-2008.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1383_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1383_P110-1999.cnv index c45057e8a4c5..900728edb1be 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1383_P110-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1383_P110-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1386_P100-2001.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1386_P100-2001.cnv index 58391b9d8c48..ac5a7bfe9071 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1386_P100-2001.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1386_P100-2001.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1388_P100-2024.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1388_P100-2024.cnv index cf31aa6990b1..3e25a2bf8183 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1388_P100-2024.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1388_P100-2024.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1390_P110-2003.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1390_P110-2003.cnv index c68aa22a72a7..5af44f1788f9 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1390_P110-2003.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1390_P110-2003.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1399_P110-2003.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1399_P110-2003.cnv index bf6772a6af1a..09281dd94040 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1399_P110-2003.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-1399_P110-2003.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16684_P110-2003.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16684_P110-2003.cnv index 11729a313aba..af37e7e8b0ee 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16684_P110-2003.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16684_P110-2003.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16804_X110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16804_X110-1999.cnv index a76b9e1593cc..3fe84bbd79bf 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16804_X110-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-16804_X110-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-273_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-273_P100-1995.cnv index 13bcb30eae40..10adeb02bebd 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-273_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-273_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-277_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-277_P100-1995.cnv index d073d9395ef3..f096bd1efa20 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-277_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-277_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-278_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-278_P100-1995.cnv index ce1db690e82f..672db8cf94c2 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-278_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-278_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-280_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-280_P100-1995.cnv index 4196cee3c0e1..3121458e0dac 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-280_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-280_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-284_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-284_P100-1995.cnv index 93e009254c83..f2b8878ed680 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-284_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-284_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-285_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-285_P100-1995.cnv index 915235ab6b9f..751098e553a4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-285_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-285_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-290_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-290_P100-1995.cnv index 07a0624fc156..ff6ec79026da 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-290_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-290_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-297_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-297_P100-1995.cnv index 029ef2c2dbca..ff577afa9052 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-297_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-297_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P120-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P120-1999.cnv index a1d44a08b14d..081a293c0e66 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P120-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P120-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2004_U2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2004_U2.cnv index db9bfdf9b123..c2c82e6d6e5a 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2004_U2.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2004_U2.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2009_U2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2009_U2.cnv index 767c817d8cca..3af93f46e636 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2009_U2.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-33722_P12A_P12A-2009_U2.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-37_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-37_P100-1995.cnv index 8d0ea24fbec5..5fa43db5f602 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-37_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-37_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-420_X120-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-420_X120-1999.cnv index 227973775d7f..16e80464b458 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-420_X120-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-420_X120-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-424_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-424_P100-1995.cnv index ef8aae263b20..5213e5a861ec 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-424_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-424_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-437_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-437_P100-1995.cnv index a4cd190288d9..4e08e3f354b9 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-437_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-437_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4517_P100-2005.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4517_P100-2005.cnv index 1ac81424fceb..37b805a49e27 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4517_P100-2005.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4517_P100-2005.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4899_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4899_P100-1998.cnv index c475367440c6..8608c3356b56 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4899_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4899_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4909_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4909_P100-1999.cnv index ee19acbd92a6..c100de238730 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4909_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4909_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4971_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4971_P100-1999.cnv index 67a6b8f7115d..0e7c3879b74d 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4971_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-4971_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-500_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-500_P100-1995.cnv index 1991b3ff3689..01816aed3246 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-500_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-500_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5012_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5012_P100-1999.cnv index 26a2cc751b25..0899909a0e04 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5012_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5012_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5123_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5123_P100-1999.cnv index 1864f0808b9c..8ca5e3c5c035 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5123_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5123_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5346_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5346_P100-1998.cnv index 33fb87850d60..8b754282e1d4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5346_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5346_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5347_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5347_P100-1998.cnv index 19d35c0f2b2f..790de2aa33d5 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5347_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5347_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5348_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5348_P100-1997.cnv index 9064c38597ed..ecfc14bdc83d 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5348_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5348_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5349_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5349_P100-1998.cnv index 96f893221c83..ff8c2fcdd204 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5349_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5349_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5350_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5350_P100-1998.cnv index 1b34ca162948..87f820c2e2fd 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5350_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5350_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5351_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5351_P100-1998.cnv index 8c03344c8bd4..a6b6b2754097 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5351_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5351_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5352_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5352_P100-1998.cnv index 012d0e8bd339..87683cd6c824 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5352_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5352_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5353_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5353_P100-1998.cnv index 5b492d15a5b3..3b285ce485f4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5353_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5353_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5354_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5354_P100-1998.cnv index 353092e322ae..8ee6efc9a6b4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5354_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5354_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5471_P100-2006.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5471_P100-2006.cnv index e4d6f7b47c71..28020db54f8d 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5471_P100-2006.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5471_P100-2006.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5478_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5478_P100-1995.cnv index 88cdbc78a829..218068ca19c1 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5478_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-5478_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-720_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-720_P100-1997.cnv index f658b2e48d8e..852c40986a09 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-720_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-720_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-737_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-737_P100-1997.cnv index 40152fb268ee..5678b20df4fb 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-737_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-737_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-775_P100-1996.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-775_P100-1996.cnv index 316920f09bac..52377a051779 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-775_P100-1996.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-775_P100-1996.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-803_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-803_P100-1999.cnv index a9faab4b1ddf..e267835cd041 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-803_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-803_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-813_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-813_P100-1995.cnv index 223b95c34abe..7666743ab541 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-813_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-813_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-838_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-838_P100-1995.cnv index 8f70ea407048..4459174e5f3c 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-838_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-838_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-8482_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-8482_P100-1999.cnv index edcb569df726..7dcd65a77d4e 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-8482_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-8482_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-850_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-850_P100-1995.cnv index 7751b1dc91e2..fd7461c6ae92 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-850_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-850_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-851_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-851_P100-1995.cnv index ca4532a9837a..5b682b105499 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-851_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-851_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-852_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-852_P100-1995.cnv index 72b833562004..5992c0c21924 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-852_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-852_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-855_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-855_P100-1995.cnv index 5bbaf750e568..c8aa336faf98 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-855_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-855_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-856_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-856_P100-1995.cnv index 85f41b2ef24f..7475193e9b4c 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-856_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-856_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-857_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-857_P100-1995.cnv index 57e9aa4132fe..f25297cf925c 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-857_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-857_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-858_P100-1997.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-858_P100-1997.cnv index 8c50f64845fd..ef1384cd8ab1 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-858_P100-1997.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-858_P100-1997.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-860_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-860_P100-1995.cnv index 21cc8d77251f..8c0e9ad815b8 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-860_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-860_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-861_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-861_P100-1995.cnv index d1943e77aa24..ecc1e276ffe3 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-861_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-861_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-862_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-862_P100-1995.cnv index e7e1092cf23a..21914f8417ac 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-862_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-862_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-863_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-863_P100-1995.cnv index 02a65f1f9aea..864c238c7ec5 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-863_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-863_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-864_X110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-864_X110-1999.cnv index 66ec4b1e7b2e..e51a9089d10c 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-864_X110-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-864_X110-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-865_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-865_P100-1995.cnv index 1b2eea282699..5dd4a1e2f99f 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-865_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-865_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-866_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-866_P100-1995.cnv index f2a46e513cab..dd100e4dcb75 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-866_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-866_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-867_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-867_P100-1998.cnv index 765fc2b95cdb..b2572f902f08 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-867_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-867_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-868_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-868_P100-1995.cnv index fdb7f2bc8662..fb6a6ef65c2f 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-868_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-868_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-869_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-869_P100-1995.cnv index 98f4e1b0cb79..40bbc5afc3eb 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-869_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-869_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-870_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-870_P100-1995.cnv index 691bde170cf6..f83b7d30ca0a 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-870_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-870_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-871_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-871_P100-1995.cnv index d848a34ea34c..f61f49c1f5bf 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-871_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-871_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-874_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-874_P100-1995.cnv index cc2f525e06f4..56435eeff424 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-874_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-874_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-875_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-875_P100-1995.cnv index 5acd42941b62..2f69cbc6f1e4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-875_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-875_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-878_P100-1996.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-878_P100-1996.cnv index 5451f07f58be..ff516633b608 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-878_P100-1996.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-878_P100-1996.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9005_X110-2007.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9005_X110-2007.cnv index 83bc1e2cd656..aeefe0c046b6 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9005_X110-2007.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9005_X110-2007.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-901_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-901_P100-1999.cnv index d649de43f3ac..5f7c266f1a9b 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-901_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-901_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-902_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-902_P100-1999.cnv index 363fbf3e6376..0a73d0a0a174 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-902_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-902_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9067_X100-2005.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9067_X100-2005.cnv index 50b742dea135..a44c8d6e9137 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9067_X100-2005.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9067_X100-2005.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-912_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-912_P100-1995.cnv index 2dc215a46c05..65150ee04be7 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-912_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-912_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-913_P100-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-913_P100-2000.cnv index db5cb3d74514..5f1e363a06a0 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-913_P100-2000.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-913_P100-2000.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-914_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-914_P100-1995.cnv index 5efbe2b9e21e..f15726589fc0 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-914_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-914_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-915_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-915_P100-1995.cnv index 58d52403e4fb..4235ff9a0361 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-915_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-915_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-916_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-916_P100-1995.cnv index 2e51ae8ee6da..89599314c706 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-916_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-916_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-918_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-918_P100-1995.cnv index afbe07cc5234..c34e1090de21 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-918_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-918_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-920_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-920_P100-1995.cnv index d82b4fda4042..0fa2d890fca0 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-920_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-920_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-921_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-921_P100-1995.cnv index 6333bf9a5e1d..84a9025fffe6 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-921_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-921_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-922_P100-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-922_P100-1999.cnv index 0d4cbb3beccc..cf5025c7a3fd 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-922_P100-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-922_P100-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-923_P100-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-923_P100-1998.cnv index 952a892d2a04..48b78178aead 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-923_P100-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-923_P100-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-930_P120-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-930_P120-1999.cnv index 9b10315011df..a93193e07681 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-930_P120-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-930_P120-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-933_P110-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-933_P110-1995.cnv index 64089b41f63e..996f9b6e4b5d 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-933_P110-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-933_P110-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-935_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-935_P110-1999.cnv index 674b0d550e6a..5229a4b65466 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-935_P110-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-935_P110-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-937_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-937_P110-1999.cnv index 7ee50622a967..e42fd9c5d594 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-937_P110-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-937_P110-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-939_P120-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-939_P120-1999.cnv index 519f0cd560d7..469dfeaa51e9 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-939_P120-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-939_P120-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-942_P12A-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-942_P12A-1999.cnv index 8803fdfa2c60..7dc2dfe1e22c 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-942_P12A-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-942_P12A-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-943_P130-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-943_P130-1999.cnv index 3d1607da5a09..6105ec4bc441 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-943_P130-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-943_P130-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-943_P15A-2003.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-943_P15A-2003.cnv index a5a3b5a66156..b3ac7fd56eb2 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-943_P15A-2003.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-943_P15A-2003.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9447_P100-2002.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9447_P100-2002.cnv index 411395ef94b6..40938ce1c1ad 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9447_P100-2002.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9447_P100-2002.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9448_X100-2005.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9448_X100-2005.cnv index 6e2497643d55..75b85df8982d 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9448_X100-2005.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9448_X100-2005.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9449_P100-2002.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9449_P100-2002.cnv index 35355ff002dd..9e1ab129d672 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9449_P100-2002.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-9449_P100-2002.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P110-1999.cnv index 37003d386cb8..00431f63f624 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P110-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P110-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P11A-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P11A-1999.cnv index 0f9af8891f6e..26a97093d17a 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P11A-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-949_P11A-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-950_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-950_P110-1999.cnv index fad9d63b9812..ca7a06e6d477 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-950_P110-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-950_P110-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-954_P101-2007.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-954_P101-2007.cnv index 463d0ba8d6d7..73d4cd70f0aa 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-954_P101-2007.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-954_P101-2007.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-964_P110-1999.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-964_P110-1999.cnv index 815d8046314b..8935c7e8bb66 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-964_P110-1999.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-964_P110-1999.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-970_P110_P110-2006_U2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-970_P110_P110-2006_U2.cnv index 33d6a3f5055f..85b401900bd4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-970_P110_P110-2006_U2.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-970_P110_P110-2006_U2.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-971_P100-1995.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-971_P100-1995.cnv index 73c04f147556..668ac26cd5c0 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-971_P100-1995.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/ibm-971_P100-1995.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-25546.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-25546.cnv index 9aefaf6607ba..26af0d69fbf4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-25546.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-25546.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d1.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d1.cnv index 11e634e2d4d2..e7dfb3c0c74b 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d1.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d1.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d2.cnv index b342861d211a..929ab9fce442 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d2.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d2.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d3.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d3.cnv index eac627b9ebf3..aaa0cda2ab79 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d3.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d3.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d4.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d4.cnv index d930e94d87e6..0b4931467097 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d4.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d4.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d5.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d5.cnv index 5bc74f58855d..a7e9e2df936b 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d5.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d5.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d6.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d6.cnv index 699ef48f3d55..7ab09886ef67 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d6.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d6.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d7.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d7.cnv index 3dc70aebdda7..ebf3cf867a69 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d7.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-d7.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s1.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s1.cnv index 2cdbae481f12..39346c95d2ab 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s1.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s1.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s2.cnv index 7d5e4881fcfb..d454c155cb2e 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s2.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s2.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s3.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s3.cnv index 8c49147922ac..c8883c85b6c4 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s3.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-s3.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-t.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-t.cnv index 68cad946591b..b5677714cdee 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-t.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/icu-internal-compound-t.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_10-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_10-1998.cnv index b6667d5317b9..511bfba673ff 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_10-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_10-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_11-2001.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_11-2001.cnv index 66a61da25c95..fae5c1b3da22 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_11-2001.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_11-2001.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_14-1998.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_14-1998.cnv index 93df15f7e299..5571019a6b70 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_14-1998.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-8859_14-1998.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-ir-165.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-ir-165.cnv index 4c15dbc54aef..5046681f68ee 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-ir-165.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/iso-ir-165.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/jisx-212.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/jisx-212.cnv index f536f233fb75..0d000b3b7b91 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/jisx-212.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/jisx-212.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/lmb-excp.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/lmb-excp.cnv index 5062956ae610..8303291adea0 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/lmb-excp.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/lmb-excp.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-0_2-10.2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-0_2-10.2.cnv index f34f1524793b..0b67c8f447cf 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-0_2-10.2.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-0_2-10.2.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-29-10.2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-29-10.2.cnv index 076333774ae5..88a5c578b81b 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-29-10.2.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-29-10.2.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-35-10.2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-35-10.2.cnv index 92d40ea7a29a..6dc067ab005e 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-35-10.2.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-35-10.2.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-6_2-10.4.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-6_2-10.4.cnv index 217cac431c2d..e85dbf670819 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-6_2-10.4.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-6_2-10.4.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-7_3-10.2.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-7_3-10.2.cnv index a467758ff114..6d1773ac410c 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-7_3-10.2.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/macos-7_3-10.2.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-874-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-874-2000.cnv index 2023838d10ee..c580c5a0bf57 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-874-2000.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-874-2000.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-936-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-936-2000.cnv index 3970d5c1f0c1..344ed957ef78 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-936-2000.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-936-2000.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-949-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-949-2000.cnv index 9983a6bc44c7..66801f13ce6f 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-949-2000.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-949-2000.cnv differ diff --git a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-950-2000.cnv b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-950-2000.cnv index 92be0baf5468..de11db17c708 100644 Binary files a/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-950-2000.cnv and b/icu4j/main/charset/src/main/resources/com/ibm/icu/impl/data/icudata/windows-950-2000.cnv differ diff --git a/icu4j/main/collate/pom.xml b/icu4j/main/collate/pom.xml index 63db7aee865f..56abb848fbe7 100644 --- a/icu4j/main/collate/pom.xml +++ b/icu4j/main/collate/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/common_tests/pom.xml b/icu4j/main/common_tests/pom.xml index 6aa7fc5b6c5b..f005ec3684f1 100644 --- a/icu4j/main/common_tests/pom.xml +++ b/icu4j/main/common_tests/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java index b0cd3e47d934..8efa15187154 100644 --- a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java +++ b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/DateFormatTest.java @@ -5168,9 +5168,9 @@ public void TestFlexibleDayPeriod() { // For ICU 57 output of "midnight" is temporarily suppressed. // assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 at night", sdf.format(k000000)); - assertEquals("hh:mm:ss BBB | 00:00:30", "12:00:30 at night", sdf.format(k000030)); - assertEquals("hh:mm:ss BBB | 00:30:00", "12:30:00 at night", sdf.format(k003000)); + assertEquals("hh:mm:ss BBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000)); + assertEquals("hh:mm:ss BBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030)); + assertEquals("hh:mm:ss BBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000)); assertEquals("hh:mm:ss BBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000)); assertEquals("hh:mm:ss BBB | 12:00:00", "12:00:00 noon", sdf.format(k120000)); assertEquals("hh:mm:ss BBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000)); @@ -5178,27 +5178,27 @@ public void TestFlexibleDayPeriod() { sdf.applyPattern("hh:mm BBB"); // assertEquals("hh:mm BBB | 00:00:00", "12:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm BBB | 00:00:00", "12:00 at night", sdf.format(k000000)); + assertEquals("hh:mm BBB | 00:00:00", "12:00 in the morning", sdf.format(k000000)); // assertEquals("hh:mm BBB | 00:00:30", "12:00 midnight", sdf.format(k000030)); - assertEquals("hh:mm BBB | 00:00:30", "12:00 at night", sdf.format(k000030)); - assertEquals("hh:mm BBB | 00:30:00", "12:30 at night", sdf.format(k003000)); + assertEquals("hh:mm BBB | 00:00:30", "12:00 in the morning", sdf.format(k000030)); + assertEquals("hh:mm BBB | 00:30:00", "12:30 in the morning", sdf.format(k003000)); sdf.applyPattern("hh BBB"); // assertEquals("hh BBB | 00:00:00", "12 midnight", sdf.format(k000000)); - assertEquals("hh BBB | 00:00:00", "12 at night", sdf.format(k000000)); + assertEquals("hh BBB | 00:00:00", "12 in the morning", sdf.format(k000000)); // assertEquals("hh BBB | 00:00:30", "12 midnight", sdf.format(k000030)); - assertEquals("hh BBB | 00:00:30", "12 at night", sdf.format(k000030)); + assertEquals("hh BBB | 00:00:30", "12 in the morning", sdf.format(k000030)); // assertEquals("hh BBB | 00:30:00", "12 midnight", sdf.format(k003000)); - assertEquals("hh BBB | 00:30:00", "12 at night", sdf.format(k003000)); + assertEquals("hh BBB | 00:30:00", "12 in the morning", sdf.format(k003000)); // Wide sdf.applyPattern("hh:mm:ss BBBB"); // assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 at night", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBB | 00:00:30", "12:00:30 at night", sdf.format(k000030)); - assertEquals("hh:mm:ss BBBB | 00:30:00", "12:30:00 at night", sdf.format(k003000)); + assertEquals("hh:mm:ss BBBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000)); + assertEquals("hh:mm:ss BBBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030)); + assertEquals("hh:mm:ss BBBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000)); assertEquals("hh:mm:ss BBBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000)); assertEquals("hh:mm:ss BBBB | 12:00:00", "12:00:00 noon", sdf.format(k120000)); assertEquals("hh:mm:ss BBBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000)); @@ -5206,27 +5206,27 @@ public void TestFlexibleDayPeriod() { sdf.applyPattern("hh:mm BBBB"); // assertEquals("hh:mm BBBB | 00:00:00", "12:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm BBBB | 00:00:00", "12:00 at night", sdf.format(k000000)); + assertEquals("hh:mm BBBB | 00:00:00", "12:00 in the morning", sdf.format(k000000)); // assertEquals("hh:mm BBBB | 00:00:30", "12:00 midnight", sdf.format(k000030)); - assertEquals("hh:mm BBBB | 00:00:30", "12:00 at night", sdf.format(k000030)); - assertEquals("hh:mm BBBB | 00:30:00", "12:30 at night", sdf.format(k003000)); + assertEquals("hh:mm BBBB | 00:00:30", "12:00 in the morning", sdf.format(k000030)); + assertEquals("hh:mm BBBB | 00:30:00", "12:30 in the morning", sdf.format(k003000)); sdf.applyPattern("hh BBBB"); // assertEquals("hh BBBB | 00:00:00", "12 midnight", sdf.format(k000000)); - assertEquals("hh BBBB | 00:00:00", "12 at night", sdf.format(k000000)); + assertEquals("hh BBBB | 00:00:00", "12 in the morning", sdf.format(k000000)); // assertEquals("hh BBBB | 00:00:30", "12 midnight", sdf.format(k000030)); - assertEquals("hh BBBB | 00:00:30", "12 at night", sdf.format(k000030)); + assertEquals("hh BBBB | 00:00:30", "12 in the morning", sdf.format(k000030)); // assertEquals("hh BBBB | 00:30:00", "12 midnight", sdf.format(k003000)); - assertEquals("hh BBBB | 00:30:00", "12 at night", sdf.format(k003000)); + assertEquals("hh BBBB | 00:30:00", "12 in the morning", sdf.format(k003000)); // Narrow sdf.applyPattern("hh:mm:ss BBBBB"); // assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 mi", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 at night", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBBB | 00:00:30", "12:00:30 at night", sdf.format(k000030)); - assertEquals("hh:mm:ss BBBBB | 00:30:00", "12:30:00 at night", sdf.format(k003000)); + assertEquals("hh:mm:ss BBBBB | 00:00:00", "12:00:00 in the morning", sdf.format(k000000)); + assertEquals("hh:mm:ss BBBBB | 00:00:30", "12:00:30 in the morning", sdf.format(k000030)); + assertEquals("hh:mm:ss BBBBB | 00:30:00", "12:30:00 in the morning", sdf.format(k003000)); assertEquals("hh:mm:ss BBBBB | 06:00:00", "06:00:00 in the morning", sdf.format(k060000)); assertEquals("hh:mm:ss BBBBB | 12:00:00", "12:00:00 n", sdf.format(k120000)); assertEquals("hh:mm:ss BBBBB | 18:00:00", "06:00:00 in the evening", sdf.format(k180000)); @@ -5234,19 +5234,19 @@ public void TestFlexibleDayPeriod() { sdf.applyPattern("hh:mm BBBBB"); // assertEquals("hh:mm BBBBB | 00:00:00", "12:00 mi", sdf.format(k000000)); - assertEquals("hh:mm BBBBB | 00:00:00", "12:00 at night", sdf.format(k000000)); + assertEquals("hh:mm BBBBB | 00:00:00", "12:00 in the morning", sdf.format(k000000)); // assertEquals("hh:mm BBBBB | 00:00:30", "12:00 mi", sdf.format(k000030)); - assertEquals("hh:mm BBBBB | 00:00:30", "12:00 at night", sdf.format(k000030)); - assertEquals("hh:mm BBBBB | 00:30:00", "12:30 at night", sdf.format(k003000)); + assertEquals("hh:mm BBBBB | 00:00:30", "12:00 in the morning", sdf.format(k000030)); + assertEquals("hh:mm BBBBB | 00:30:00", "12:30 in the morning", sdf.format(k003000)); sdf.applyPattern("hh BBBBB"); // assertEquals("hh BBBBB | 00:00:00", "12 mi", sdf.format(k000000)); - assertEquals("hh BBBBB | 00:00:00", "12 at night", sdf.format(k000000)); + assertEquals("hh BBBBB | 00:00:00", "12 in the morning", sdf.format(k000000)); // assertEquals("hh BBBBB | 00:00:30", "12 mi", sdf.format(k000030)); - assertEquals("hh BBBBB | 00:00:30", "12 at night", sdf.format(k000030)); + assertEquals("hh BBBBB | 00:00:30", "12 in the morning", sdf.format(k000030)); // assertEquals("hh BBBBB | 00:30:00", "12 mi", sdf.format(k003000)); - assertEquals("hh BBBBB | 00:30:00", "12 at night", sdf.format(k003000)); + assertEquals("hh BBBBB | 00:30:00", "12 in the morning", sdf.format(k003000)); } @Test @@ -5305,8 +5305,8 @@ public void TestDayPeriodWithLocales() { sdf.applyPattern("hh:mm:ss BBBB"); // assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 midnight", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 at night", sdf.format(k000000)); - assertEquals("hh:mm:ss BBBB | 01:00:00 | en_US", "01:00:00 at night", sdf.format(k010000)); + assertEquals("hh:mm:ss BBBB | 00:00:00 | en_US", "12:00:00 in the morning", sdf.format(k000000)); + assertEquals("hh:mm:ss BBBB | 01:00:00 | en_US", "01:00:00 in the morning", sdf.format(k010000)); assertEquals("hh:mm:ss BBBB | 12:00:00 | en_US", "12:00:00 noon", sdf.format(k120000)); // Locale es_CO should not fall back to es and should have a @@ -5330,7 +5330,7 @@ public void TestDayPeriodWithLocales() { sdf.setTimeZone(TimeZone.GMT_ZONE); sdf.applyPattern("hh:mm:ss BBBB"); - assertEquals("hh:mm:ss BBBB | 01:00:00 | en@calendar=buddhist", "01:00:00 at night", sdf.format(k010000)); + assertEquals("hh:mm:ss BBBB | 01:00:00 | en@calendar=buddhist", "01:00:00 in the morning", sdf.format(k010000)); } @Test @@ -5357,7 +5357,7 @@ public void TestMinuteSecondFieldsInOddPlaces() { sdf.applyPattern("hh:mm 'ss' BBBB"); // assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss midnight", sdf.format(k000030)); - assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss at night", sdf.format(k000030)); + assertEquals("hh:mm 'ss' BBBB | 00:00:30", "12:00 ss in the morning", sdf.format(k000030)); assertEquals("hh:mm 'ss' BBBB | 06:00:30", "06:00 ss in the morning", sdf.format(k060030)); // Minutes field is not present. @@ -5370,7 +5370,7 @@ public void TestMinuteSecondFieldsInOddPlaces() { sdf.applyPattern("hh 'mm ss' BBBB"); // assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss midnight", sdf.format(k003000)); - assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss at night", sdf.format(k003000)); + assertEquals("hh 'mm ss' BBBB | 00:30:00", "12 mm ss in the morning", sdf.format(k003000)); assertEquals("hh 'mm ss' BBBB | 06:30:00", "06 mm ss in the morning", sdf.format(k063000)); // Minutes and seconds fields appear after day periods. @@ -5384,21 +5384,21 @@ public void TestMinuteSecondFieldsInOddPlaces() { sdf.applyPattern("BBBB hh:mm:ss"); // assertEquals("BBBB hh:mm:ss | 00:00:00", "midnight 12:00:00", sdf.format(k000000)); - assertEquals("BBBB hh:mm:ss | 00:00:00", "at night 12:00:00", sdf.format(k000000)); - assertEquals("BBBB hh:mm:ss | 00:00:30", "at night 12:00:30", sdf.format(k000030)); - assertEquals("BBBB hh:mm:ss | 00:30:00", "at night 12:30:00", sdf.format(k003000)); + assertEquals("BBBB hh:mm:ss | 00:00:00", "in the morning 12:00:00", sdf.format(k000000)); + assertEquals("BBBB hh:mm:ss | 00:00:30", "in the morning 12:00:30", sdf.format(k000030)); + assertEquals("BBBB hh:mm:ss | 00:30:00", "in the morning 12:30:00", sdf.format(k003000)); // Confirm applyPattern() reparses the pattern string. sdf.applyPattern("BBBB hh"); // assertEquals("BBBB hh | 00:00:30", "midnight 12", sdf.format(k000030)); - assertEquals("BBBB hh | 00:00:30", "at night 12", sdf.format(k000030)); + assertEquals("BBBB hh | 00:00:30", "in the morning 12", sdf.format(k000030)); sdf.applyPattern("BBBB hh:mm:'ss'"); // assertEquals("BBBB hh:mm:'ss' | 00:00:30", "midnight 12:00:ss", sdf.format(k000030)); - assertEquals("BBBB hh:mm:'ss' | 00:00:30", "at night 12:00:ss", sdf.format(k000030)); + assertEquals("BBBB hh:mm:'ss' | 00:00:30", "in the morning 12:00:ss", sdf.format(k000030)); sdf.applyPattern("BBBB hh:mm:ss"); - assertEquals("BBBB hh:mm:ss | 00:00:30", "at night 12:00:30", sdf.format(k000030)); + assertEquals("BBBB hh:mm:ss | 00:00:30", "in the morning 12:00:30", sdf.format(k000030)); } @Test @@ -5407,7 +5407,6 @@ public void TestDayPeriodParsing() throws ParseException { Date k000000 = new Date(1447372800000L); Date k003700 = new Date(1447375020000L); Date k010000 = new Date(1447376400000L); - Date k013000 = new Date(1447378200000L); Date k030000 = new Date(1447383600000L); Date k090000 = new Date(1447405200000L); Date k120000 = new Date(1447416000000L); @@ -5418,6 +5417,7 @@ public void TestDayPeriodParsing() throws ParseException { Date k193000 = new Date(1447443000000L); Date k200000 = new Date(1447444800000L); Date k210000 = new Date(1447448400000L); + Date k223000 = new Date(1447453800000L); SimpleDateFormat sdf = new SimpleDateFormat(""); sdf.setTimeZone(TimeZone.GMT_ZONE); @@ -5429,13 +5429,13 @@ public void TestDayPeriodParsing() throws ParseException { assertEquals("yyyy-MM-dd B | 2015-11-13 noon", k120000, sdf.parse("2015-11-13 noon")); assertEquals("yyyy-MM-dd B | 2015-11-13 in the afternoon", k150000, sdf.parse("2015-11-13 in the afternoon")); assertEquals("yyyy-MM-dd B | 2015-11-13 in the evening", k193000, sdf.parse("2015-11-13 in the evening")); - assertEquals("yyyy-MM-dd B | 2015-11-13 at night", k013000, sdf.parse("2015-11-13 at night")); + assertEquals("yyyy-MM-dd B | 2015-11-13 at night", k223000, sdf.parse("2015-11-13 at night")); // If time and day period are consistent with each other then time is parsed accordingly. sdf.applyPattern("yyyy-MM-dd hh:mm B"); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 12:00 midnight", k000000, sdf.parse("2015-11-13 12:00 midnight")); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 12:00 noon", k120000, sdf.parse("2015-11-13 12:00 noon")); - assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 at night", k010000, sdf.parse("2015-11-13 01:00 at night")); + assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 in the morning", k010000, sdf.parse("2015-11-13 01:00 in the morning")); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 01:00 in the afternoon", k130000, sdf.parse("2015-11-13 01:00 in the afternoon")); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 09:00 in the morning", k090000, sdf.parse("2015-11-13 09:00 in the morning")); assertEquals("yyyy-MM-dd hh:mm B | 2015-11-13 09:00 at night", k210000, sdf.parse("2015-11-13 09:00 at night")); @@ -5471,7 +5471,7 @@ public void TestDayPeriodParsing() throws ParseException { sdf.applyPattern("yyyy-MM-dd HH:mm B"); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 12:00 midnight", k000000, sdf.parse("2015-11-13 12:00 midnight")); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 12:00 noon", k120000, sdf.parse("2015-11-13 12:00 noon")); - assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 at night", k010000, sdf.parse("2015-11-13 01:00 at night")); + assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 in the morning", k010000, sdf.parse("2015-11-13 01:00 in the morning")); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 01:00 in the afternoon", k130000, sdf.parse("2015-11-13 01:00 in the afternoon")); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 09:00 in the morning", k090000, sdf.parse("2015-11-13 09:00 in the morning")); assertEquals("yyyy-MM-dd HH:mm B | 2015-11-13 09:00 at night", k210000, sdf.parse("2015-11-13 09:00 at night")); diff --git a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java index 91b1e3174606..3bdcb86a1318 100644 --- a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java +++ b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/util/ULocaleTest.java @@ -1824,8 +1824,8 @@ public void TestMinimize() { {"en_Cyrl-RU", "en-Cyrl-RU", "en-Cyrl-RU"}, {"en_Latn-RU", "en-RU", "en-RU"}, {"sr_Cyrl-US", "sr-US", "sr-US"}, - {"sr_Cyrl-RU", "sr-Cyrl-RU", "sr-Cyrl-RU"}, - {"sr_Latn-RU", "sr-RU", "sr-RU"}, + {"sr_Cyrl-RU", "sr-RU", "sr-RU"}, + {"sr_Latn-RU", "sr_Latn-RU", "sr_Latn-RU"}, }; for (String[] test : data) { ULocale source = new ULocale(test[0]); @@ -5723,13 +5723,9 @@ public void likelySubtagsDataDriven(TestCase test) { assertEquals("addLikelySubtags(" + test.source + ") should be unchanged", l, ULocale.addLikelySubtags(l)); } else { - if (test.source.equals("und-Latn-RS") - && logKnownIssue("ICU-23052", "addLikelySubtags(und-Latn-RS) bug") ) { - return; - } - assertEquals("addLikelySubtags(" + test.source + ")", - test.addLikely, ULocale.addLikelySubtags(l).toLanguageTag()); - } + assertEquals("addLikelySubtags(" + test.source + ")", + test.addLikely, ULocale.addLikelySubtags(l).toLanguageTag()); + } if (test.removeFavorRegion.equals("FAIL")) { assertEquals("minimizeSubtags(" + test.source + ") should be unchanged", l, ULocale.minimizeSubtags(l)); diff --git a/icu4j/main/core/pom.xml b/icu4j/main/core/pom.xml index d90e68dfffc3..70cfc138a6e4 100644 --- a/icu4j/main/core/pom.xml +++ b/icu4j/main/core/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/core/src/main/java/com/ibm/icu/impl/LocaleFallbackData.java b/icu4j/main/core/src/main/java/com/ibm/icu/impl/LocaleFallbackData.java index 95d79cbeb3fe..9fde7d32ac90 100644 --- a/icu4j/main/core/src/main/java/com/ibm/icu/impl/LocaleFallbackData.java +++ b/icu4j/main/core/src/main/java/com/ibm/icu/impl/LocaleFallbackData.java @@ -557,7 +557,6 @@ private static Map buildDefaultScriptTable() { t.put("lzz_GE", "Geor"); t.put("mag", "Deva"); t.put("mai", "Deva"); - t.put("man_GN", "Nkoo"); t.put("mby", "Arab"); t.put("mde", "Arab"); t.put("mdf", "Cyrl"); diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/dayPeriods.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/dayPeriods.res index c70d61b0426e..14057532652c 100644 Binary files a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/dayPeriods.res and b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/dayPeriods.res differ diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/icuver.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/icuver.res index a6775fff29dc..24ba3b23e35a 100644 Binary files a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/icuver.res and b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/icuver.res differ diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/langInfo.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/langInfo.res index 610fa3a8b1d4..746ae5354e1b 100644 Binary files a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/langInfo.res and b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/langInfo.res differ diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/gu.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/gu.res new file mode 100644 index 000000000000..3b2177da89be Binary files /dev/null and b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/gu.res differ diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/res_index.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/res_index.res index 7c86fbbea1f0..a4a41f428b43 100644 Binary files a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/res_index.res and b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/rbnf/res_index.res differ diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/supplementalData.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/supplementalData.res index c50dd22e26f0..7b816b91cea9 100644 Binary files a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/supplementalData.res and b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/supplementalData.res differ diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/unit/da.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/unit/da.res index eea67c939082..ebbb0e642459 100644 Binary files a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/unit/da.res and b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/unit/da.res differ diff --git a/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java b/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java index 1a0ad786498b..106916f8e2e7 100644 --- a/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java +++ b/icu4j/main/core/src/test/java/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java @@ -794,7 +794,7 @@ public void TestHourMetacharacters() { "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 12:00:00", "hbbbbb", "10\\u202Fa\\u2009\\u2013\\u200912\\u202Fn", "en", "CE 2010 09 27 13:00:00", "CE 2010 09 27 14:00:00", "hb", "1\\u2009\\u2013\\u20092\\u202FPM", "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "10 in the morning\\u2009\\u2013\\u20091 in the afternoon", - "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "12\\u2009\\u2013\\u20091 at night", + "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "12\\u2009\\u2013\\u20091 in the morning", // J "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "J", "10\\u2009\\u2013\\u20091", diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/likelySubtags.txt b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/likelySubtags.txt index 4b9d59049bbe..f9f149d3cc87 100644 --- a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/likelySubtags.txt +++ b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/likelySubtags.txt @@ -235,16 +235,19 @@ en-CK ; en-Latn-CK ; en-CK ; en-CM ; en-Latn-CM ; en-CM ; en-CX ; en-Latn-CX ; en-CX ; en-CY ; en-Latn-CY ; en-CY ; +en-CZ ; en-Latn-CZ ; en-CZ ; en-DE ; en-Latn-DE ; en-DE ; en-DG ; en-Latn-DG ; en-DG ; en-DK ; en-Latn-DK ; en-DK ; en-DM ; en-Latn-DM ; en-DM ; en-ER ; en-Latn-ER ; en-ER ; +en-ES ; en-Latn-ES ; en-ES ; en-Egyp ; en-Egyp-US ; en-Egyp ; en-FI ; en-Latn-FI ; en-FI ; en-FJ ; en-Latn-FJ ; en-FJ ; en-FK ; en-Latn-FK ; en-FK ; en-FM ; en-Latn-FM ; en-FM ; +en-FR ; en-Latn-FR ; en-FR ; en-GB ; en-Latn-GB ; en-GB ; en-GD ; en-Latn-GD ; en-GD ; en-GG ; en-Latn-GG ; en-GG ; @@ -255,12 +258,14 @@ en-GS ; en-Latn-GS ; en-GS ; en-GU ; en-Latn-GU ; en-GU ; en-GY ; en-Latn-GY ; en-GY ; en-HK ; en-Latn-HK ; en-HK ; +en-HU ; en-Latn-HU ; en-HU ; en-ID ; en-Latn-ID ; en-ID ; en-IE ; en-Latn-IE ; en-IE ; en-IL ; en-Latn-IL ; en-IL ; en-IM ; en-Latn-IM ; en-IM ; en-IN ; en-Latn-IN ; en-IN ; en-IO ; en-Latn-IO ; en-IO ; +en-IT ; en-Latn-IT ; en-IT ; en-JE ; en-Latn-JE ; en-JE ; en-JM ; en-Latn-JM ; en-JM ; en-KE ; en-Latn-KE ; en-KE ; @@ -285,15 +290,19 @@ en-NA ; en-Latn-NA ; en-NA ; en-NF ; en-Latn-NF ; en-NF ; en-NG ; en-Latn-NG ; en-NG ; en-NL ; en-Latn-NL ; en-NL ; +en-NO ; en-Latn-NO ; en-NO ; en-NR ; en-Latn-NR ; en-NR ; en-NU ; en-Latn-NU ; en-NU ; en-NZ ; en-Latn-NZ ; en-NZ ; en-PG ; en-Latn-PG ; en-PG ; en-PH ; en-Latn-PH ; en-PH ; en-PK ; en-Latn-PK ; en-PK ; +en-PL ; en-Latn-PL ; en-PL ; en-PN ; en-Latn-PN ; en-PN ; en-PR ; en-Latn-PR ; en-PR ; +en-PT ; en-Latn-PT ; en-PT ; en-PW ; en-Latn-PW ; en-PW ; +en-RO ; en-Latn-RO ; en-RO ; en-RW ; en-Latn-RW ; en-RW ; en-SB ; en-Latn-SB ; en-SB ; en-SC ; en-Latn-SC ; en-SC ; @@ -302,6 +311,7 @@ en-SE ; en-Latn-SE ; en-SE ; en-SG ; en-Latn-SG ; en-SG ; en-SH ; en-Latn-SH ; en-SH ; en-SI ; en-Latn-SI ; en-SI ; +en-SK ; en-Latn-SK ; en-SK ; en-SL ; en-Latn-SL ; en-SL ; en-SS ; en-Latn-SS ; en-SS ; en-SX ; en-Latn-SX ; en-SX ; @@ -802,11 +812,6 @@ pl-AQ ; pl-Latn-AQ ; pl-AQ ; pl-Egyp ; pl-Egyp-PL ; pl-Egyp ; pl-Latn ; pl-Latn-PL ; pl ; pl-PL ; pl-Latn-PL ; pl ; -prg ; prg-Latn-PL ; prg ; -prg-AQ ; prg-Latn-AQ ; prg-AQ ; -prg-Egyp ; prg-Egyp-PL ; prg-Egyp ; -prg-Latn ; prg-Latn-PL ; prg ; -prg-PL ; prg-Latn-PL ; prg ; ps ; ps-Arab-AF ; ps ; ps-AF ; ps-Arab-AF ; ps ; ps-AQ ; ps-Arab-AQ ; ps-AQ ; @@ -1575,9 +1580,9 @@ und-NP ; ne-Deva-NP ; ne ; und-NR ; en-Latn-NR ; en-NR ; und-NU ; en-Latn-NU ; en-NU ; und-NZ ; en-Latn-NZ ; en-NZ ; -und-Nkoo ; man-Nkoo-GN ; man-Nkoo ; man-GN +und-Nkoo ; man-Nkoo-GN ; man-Nkoo ; und-Nkoo-AQ ; man-Nkoo-AQ ; ; -und-Nkoo-GN ; man-Nkoo-GN ; man-Nkoo ; man-GN +und-Nkoo-GN ; man-Nkoo-GN ; man-Nkoo ; und-OM ; ar-Arab-OM ; ar-OM ; und-Olck ; sat-Olck-IN ; sat ; und-Olck-AQ ; sat-Olck-AQ ; sat-AQ ; diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeCanonicalization.txt b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeCanonicalization.txt index 30fc66445aa1..18ae4443dbff 100644 --- a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeCanonicalization.txt +++ b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeCanonicalization.txt @@ -1,3 +1,4 @@ +# DO NOT EDIT THIS FILE, instead regenerate it using GenerateLocaleIDTestData.java # Test data for locale identifier canonicalization # Copyright © 1991-2025 Unicode, Inc. # For terms of use, see http://www.unicode.org/copyright.html diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeDisplayName.txt b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeDisplayName.txt index 0f919bd35074..54563a0f2663 100644 --- a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeDisplayName.txt +++ b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/cldr/localeIdentifiers/localeDisplayName.txt @@ -1,3 +1,4 @@ +# DO NOT EDIT THIS FILE, instead regenerate it using GenerateLocaleIDTestData.java # Test data for locale display name generation # Copyright © 1991-2025 Unicode, Inc. # For terms of use, see http://www.unicode.org/copyright.html @@ -356,7 +357,7 @@ es-Cyrl-MX; Spaans (Cyrillies, Meksiko) hi-Latn; Hindi (Latyn) nl-BE; Nederlands (België) nl-Latn-BE; Nederlands (Latyn, België) -zh-Hans-fonipa; Chinees (Vereenvoudig, FONIPA) +zh-Hans-fonipa; Chinees (Vereenvoudig, fonipa) @locale=af @@ -369,7 +370,7 @@ es-Cyrl-MX; Spaans (Cyrillies, Meksiko) hi-Latn; Hindi (Latyn) nl-BE; Vlaams nl-Latn-BE; Vlaams (Latyn) -zh-Hans-fonipa; Chinees (Vereenvoudig, FONIPA) +zh-Hans-fonipa; Chinees (Vereenvoudig, fonipa) @locale=am @@ -382,7 +383,7 @@ es-Cyrl-MX; ስፓኒሽ (ሲይሪልክ፣ ሜክሲኮ) hi-Latn; ሕንድኛ (ላቲን) nl-BE; ደች (ቤልጄም) nl-Latn-BE; ደች (ላቲን፣ ቤልጄም) -zh-Hans-fonipa; ቻይንኛ (ቀለል ያለ፣ FONIPA) +zh-Hans-fonipa; ቻይንኛ (ቀለል ያለ፣ fonipa) @locale=am @@ -395,7 +396,7 @@ es-Cyrl-MX; የሜክሲኮ ስፓኒሽ (ሲይሪልክ) hi-Latn; ሕንድኛ [ላቲን] nl-BE; ፍሌሚሽ nl-Latn-BE; ፍሌሚሽ (ላቲን) -zh-Hans-fonipa; ቀለል ያለ ቻይንኛ (FONIPA) +zh-Hans-fonipa; ቀለል ያለ ቻይንኛ (fonipa) @locale=ar @@ -408,7 +409,7 @@ es-Cyrl-MX; الإسبانية (السيريلية، المكسيك) hi-Latn; الهندية (اللاتينية) nl-BE; الهولندية (بلجيكا) nl-Latn-BE; الهولندية (اللاتينية، بلجيكا) -zh-Hans-fonipa; الصينية (المبسطة، FONIPA) +zh-Hans-fonipa; الصينية (المبسطة، fonipa) @locale=ar @@ -421,7 +422,7 @@ es-Cyrl-MX; الإسبانية المكسيكية (السيريلية) hi-Latn; الهندية (اللاتينية) nl-BE; الهولندية (بلجيكا) nl-Latn-BE; الهولندية (اللاتينية، بلجيكا) -zh-Hans-fonipa; الصينية المبسطة (FONIPA) +zh-Hans-fonipa; الصينية المبسطة (fonipa) @locale=as @@ -434,7 +435,7 @@ es-Cyrl-MX; স্পেনিচ (চিৰিলিক, মেক্সিক hi-Latn; হিন্দী (লেটিন) nl-BE; ডাচ (বেলজিয়াম) nl-Latn-BE; ডাচ (লেটিন, বেলজিয়াম) -zh-Hans-fonipa; চীনা (সৰলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সৰলীকৃত, fonipa) @locale=as @@ -447,7 +448,7 @@ es-Cyrl-MX; মেক্সিকান স্পেনিচ (চিৰিল hi-Latn; হিন্দী (লেটিন) nl-BE; ফ্লেমিচ nl-Latn-BE; ফ্লেমিচ (লেটিন) -zh-Hans-fonipa; সৰলীকৃত চীনা (FONIPA) +zh-Hans-fonipa; সৰলীকৃত চীনা (fonipa) @locale=az @@ -460,7 +461,7 @@ es-Cyrl-MX; ispan (kiril, Meksika) hi-Latn; hind (latın) nl-BE; holland (Belçika) nl-Latn-BE; holland (latın, Belçika) -zh-Hans-fonipa; çin (sadələşmiş, FONIPA) +zh-Hans-fonipa; çin (sadələşmiş, fonipa) @locale=az @@ -473,7 +474,7 @@ es-Cyrl-MX; Meksika ispancası (kiril) hi-Latn; Hindi [latın] nl-BE; flamand nl-Latn-BE; flamand (latın) -zh-Hans-fonipa; sadələşmiş çin (FONIPA) +zh-Hans-fonipa; sadələşmiş çin (fonipa) @locale=az_Latn @@ -486,7 +487,7 @@ es-Cyrl-MX; ispan (kiril, Meksika) hi-Latn; hind (latın) nl-BE; holland (Belçika) nl-Latn-BE; holland (latın, Belçika) -zh-Hans-fonipa; çin (sadələşmiş, FONIPA) +zh-Hans-fonipa; çin (sadələşmiş, fonipa) @locale=az_Latn @@ -499,7 +500,7 @@ es-Cyrl-MX; Meksika ispancası (kiril) hi-Latn; Hindi [latın] nl-BE; flamand nl-Latn-BE; flamand (latın) -zh-Hans-fonipa; sadələşmiş çin (FONIPA) +zh-Hans-fonipa; sadələşmiş çin (fonipa) @locale=be @@ -512,7 +513,7 @@ es-Cyrl-MX; іспанская (кірыліца, Мексіка) hi-Latn; хіндзі (лацініца) nl-BE; нідэрландская (Бельгія) nl-Latn-BE; нідэрландская (лацініца, Бельгія) -zh-Hans-fonipa; кітайская (спрошчанае кітайскае, FONIPA) +zh-Hans-fonipa; кітайская (спрошчанае кітайскае, fonipa) @locale=be @@ -525,7 +526,7 @@ es-Cyrl-MX; мексіканская іспанская (кірыліца) hi-Latn; хіндзі (лацініца) nl-BE; фламандская nl-Latn-BE; фламандская (лацініца) -zh-Hans-fonipa; кітайская [спрошчаныя іерогліфы] (FONIPA) +zh-Hans-fonipa; кітайская [спрошчаныя іерогліфы] (fonipa) @locale=bg @@ -564,7 +565,7 @@ es-Cyrl-MX; স্প্যানিশ (সিরিলিক, মেক্স hi-Latn; হিন্দি (ল্যাটিন) nl-BE; ওলন্দাজ (বেলজিয়াম) nl-Latn-BE; ওলন্দাজ (ল্যাটিন, বেলজিয়াম) -zh-Hans-fonipa; চীনা (সরলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সরলীকৃত, fonipa) @locale=bn @@ -577,7 +578,7 @@ es-Cyrl-MX; স্প্যানিশ (সিরিলিক, মেক্স hi-Latn; হিন্দি (ল্যাটিন) nl-BE; ফ্লেমিশ nl-Latn-BE; ফ্লেমিশ (ল্যাটিন) -zh-Hans-fonipa; চীনা (সরলীকৃত, FONIPA) +zh-Hans-fonipa; চীনা (সরলীকৃত, fonipa) @locale=bs @@ -668,7 +669,7 @@ es-Cyrl-MX; ᏍᏆᏂ (ᏲᏂᎢ ᏗᎪᏪᎵ, ᎠᏂᏍᏆᏂ) hi-Latn; ᎯᏂᏗ (ᎳᏘᏂ) nl-BE; ᏛᏥ (ᏇᎵᏥᎥᎻ) nl-Latn-BE; ᏛᏥ (ᎳᏘᏂ, ᏇᎵᏥᎥᎻ) -zh-Hans-fonipa; ᏓᎶᏂᎨ (ᎠᎯᏗᎨ, FONIPA) +zh-Hans-fonipa; ᏓᎶᏂᎨ (ᎠᎯᏗᎨ, fonipa) @locale=chr @@ -681,7 +682,7 @@ es-Cyrl-MX; ᏍᏆᏂᏱ ᏍᏆᏂ (ᏲᏂᎢ ᏗᎪᏪᎵ) hi-Latn; ᎯᏂᏗ (ᎳᏘᏂ) nl-BE; ᏊᎵᏥᎥᎻ ᏛᏥ nl-Latn-BE; ᏊᎵᏥᎥᎻ ᏛᏥ (ᎳᏘᏂ) -zh-Hans-fonipa; ᎠᎯᏗᎨ ᏓᎶᏂᎨ (FONIPA) +zh-Hans-fonipa; ᎠᎯᏗᎨ ᏓᎶᏂᎨ (fonipa) @locale=cs @@ -694,7 +695,7 @@ es-Cyrl-MX; španělština (cyrilice, Mexiko) hi-Latn; hindština (latinka) nl-BE; nizozemština (Belgie) nl-Latn-BE; nizozemština (latinka, Belgie) -zh-Hans-fonipa; čínština (zjednodušené, FONIPA) +zh-Hans-fonipa; čínština (zjednodušené, fonipa) @locale=cs @@ -707,7 +708,7 @@ es-Cyrl-MX; španělština (cyrilice, Mexiko) hi-Latn; hindština (latinka) nl-BE; vlámština nl-Latn-BE; vlámština (latinka) -zh-Hans-fonipa; čínština [zjednodušená] (FONIPA) +zh-Hans-fonipa; čínština [zjednodušená] (fonipa) @locale=cy @@ -798,7 +799,7 @@ es-Cyrl-MX; špańšćina (kyriliski, Mexiko) hi-Latn; hindišćina (łatyński) nl-BE; nižozemšćina (Belgiska) nl-Latn-BE; nižozemšćina (łatyński, Belgiska) -zh-Hans-fonipa; chinšćina (zjadnorjone, FONIPA) +zh-Hans-fonipa; chinšćina (zjadnorjone, fonipa) @locale=dsb @@ -811,7 +812,7 @@ es-Cyrl-MX; mexikańska špańšćina (kyriliski) hi-Latn; hindišćina (łatyński) nl-BE; flamšćina nl-Latn-BE; flamšćina (łatyński) -zh-Hans-fonipa; chinšćina [zjadnorjona] (FONIPA) +zh-Hans-fonipa; chinšćina [zjadnorjona] (fonipa) @locale=el @@ -1006,7 +1007,7 @@ es-Cyrl-MX; Spanish (Cyrillic, Mexico) hi-Latn; Hindi (Latin) nl-BE; Dutch (Belgium) nl-Latn-BE; Dutch (Latin, Belgium) -zh-Hans-fonipa; Chinese (Pinasimple, FONIPA) +zh-Hans-fonipa; Chinese (Pinasimple, fonipa) @locale=fil @@ -1019,7 +1020,7 @@ es-Cyrl-MX; Mexican na Espanyol (Cyrillic) hi-Latn; Hindi (Latin) nl-BE; Flemish nl-Latn-BE; Flemish (Latin) -zh-Hans-fonipa; Pinasimpleng Chinese (FONIPA) +zh-Hans-fonipa; Pinasimpleng Chinese (fonipa) @locale=fr @@ -1110,7 +1111,7 @@ es-Cyrl-MX; español (cirílico, México) hi-Latn; hindi (latino) nl-BE; neerlandés (Bélxica) nl-Latn-BE; neerlandés (latino, Bélxica) -zh-Hans-fonipa; chinés (simplificado, FONIPA) +zh-Hans-fonipa; chinés (simplificado, fonipa) @locale=gl @@ -1123,7 +1124,7 @@ es-Cyrl-MX; español de México (cirílico) hi-Latn; hindi [alfabeto latino] nl-BE; flamengo nl-Latn-BE; flamengo (latino) -zh-Hans-fonipa; chinés simplificado (FONIPA) +zh-Hans-fonipa; chinés simplificado (fonipa) @locale=gu @@ -1136,7 +1137,7 @@ es-Cyrl-MX; સ્પેનિશ (સિરિલિક, મેક્સિક hi-Latn; હિન્દી (લેટિન) nl-BE; ડચ (બેલ્જીયમ) nl-Latn-BE; ડચ (લેટિન, બેલ્જીયમ) -zh-Hans-fonipa; ચાઇનીઝ (સરળીકૃત, FONIPA) +zh-Hans-fonipa; ચાઇનીઝ (સરળીકૃત, fonipa) @locale=gu @@ -1149,7 +1150,7 @@ es-Cyrl-MX; મેક્સિકન સ્પેનિશ (સિરિલિ hi-Latn; હિન્દી (લેટિન) nl-BE; ફ્લેમિશ nl-Latn-BE; ફ્લેમિશ (લેટિન) -zh-Hans-fonipa; સરળીકૃત ચાઇનીઝ (FONIPA) +zh-Hans-fonipa; સરળીકૃત ચાઇનીઝ (fonipa) @locale=ha @@ -1162,7 +1163,7 @@ es-Cyrl-MX; Sifaniyanci (Cyrillic, Mesiko) hi-Latn; Harshen Hindi (Latin) nl-BE; Holanci (Belgiyom) nl-Latn-BE; Holanci (Latin, Belgiyom) -zh-Hans-fonipa; Harshen Sinanci (Sauƙaƙaƙƙe, FONIPA) +zh-Hans-fonipa; Harshen Sinanci (Sauƙaƙaƙƙe, fonipa) @locale=ha @@ -1175,7 +1176,7 @@ es-Cyrl-MX; Sifaniyanci Mesiko (Cyrillic) hi-Latn; Harshen Hindi (Latin) nl-BE; Holanci (Belgiyom) nl-Latn-BE; Holanci (Latin, Belgiyom) -zh-Hans-fonipa; Sauƙaƙaƙƙen Sinanci (FONIPA) +zh-Hans-fonipa; Sauƙaƙaƙƙen Sinanci (fonipa) @locale=he @@ -1214,7 +1215,7 @@ es-Cyrl-MX; स्पेनिश (सिरिलिक, मैक्सिक hi-Latn; हिन्दी (लैटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लैटिन, बेल्जियम) -zh-Hans-fonipa; चीनी (सरलीकृत, FONIPA) +zh-Hans-fonipa; चीनी (सरलीकृत, fonipa) @locale=hi @@ -1227,7 +1228,7 @@ es-Cyrl-MX; मैक्सिकन स्पेनिश (सिरिलि hi-Latn; हिन्दी (लैटिन) nl-BE; फ़्लेमिश nl-Latn-BE; फ़्लेमिश (लैटिन) -zh-Hans-fonipa; सरलीकृत चीनी (FONIPA) +zh-Hans-fonipa; सरलीकृत चीनी (fonipa) @locale=hi_Latn @@ -1292,7 +1293,7 @@ es-Cyrl-MX; španišćina (kyrilisce, Mexiko) hi-Latn; hindišćina (łaćonsce) nl-BE; nižozemšćina (Belgiska) nl-Latn-BE; nižozemšćina (łaćonsce, Belgiska) -zh-Hans-fonipa; chinšćina (zjednorjene, FONIPA) +zh-Hans-fonipa; chinšćina (zjednorjene, fonipa) @locale=hsb @@ -1305,7 +1306,7 @@ es-Cyrl-MX; mexiska španišćina (kyrilisce) hi-Latn; hindišćina (łaćonsce) nl-BE; flamšćina nl-Latn-BE; flamšćina (łaćonsce) -zh-Hans-fonipa; chinšćina [zjednorjena] (FONIPA) +zh-Hans-fonipa; chinšćina [zjednorjena] (fonipa) @locale=ht @@ -1370,7 +1371,7 @@ es-Cyrl-MX; իսպաներեն (կյուրեղագիր, Մեքսիկա) hi-Latn; հինդի (լատինական) nl-BE; հոլանդերեն (Բելգիա) nl-Latn-BE; հոլանդերեն (լատինական, Բելգիա) -zh-Hans-fonipa; չինարեն (պարզեցված, FONIPA) +zh-Hans-fonipa; չինարեն (պարզեցված, fonipa) @locale=hy @@ -1383,7 +1384,7 @@ es-Cyrl-MX; մեքսիկական իսպաներեն (կյուրեղագիր) hi-Latn; հինդի [լատինատառ] nl-BE; ֆլամանդերեն nl-Latn-BE; ֆլամանդերեն (լատինական) -zh-Hans-fonipa; պարզեցված չինարեն (FONIPA) +zh-Hans-fonipa; պարզեցված չինարեն (fonipa) @locale=id @@ -1422,7 +1423,7 @@ es-Cyrl-MX; Spanish (Cyrillic, Mexico) hi-Latn; Hindi (Latin) nl-BE; Dutch (Belgium) nl-Latn-BE; Dutch (Latin, Belgium) -zh-Hans-fonipa; Chaịniiz (Nke dị mfe, FONIPA) +zh-Hans-fonipa; Chaịniiz (Nke dị mfe, fonipa) @locale=ig @@ -1435,7 +1436,7 @@ es-Cyrl-MX; Spanish ndị Mexico (Cyrillic) hi-Latn; Hindi (Latin) nl-BE; Flemish nl-Latn-BE; Flemish (Latin) -zh-Hans-fonipa; Asụsụ Chaịniiz dị mfe (FONIPA) +zh-Hans-fonipa; Asụsụ Chaịniiz dị mfe (fonipa) @locale=is @@ -1448,7 +1449,7 @@ es-Cyrl-MX; spænska (kyrillískt, Mexíkó) hi-Latn; hindí (latneskt) nl-BE; hollenska (Belgía) nl-Latn-BE; hollenska (latneskt, Belgía) -zh-Hans-fonipa; kínverska (einfaldað, FONIPA) +zh-Hans-fonipa; kínverska (einfaldað, fonipa) @locale=is @@ -1461,7 +1462,7 @@ es-Cyrl-MX; mexíkósk spænska (kyrillískt) hi-Latn; hindí (latneskt) nl-BE; flæmska nl-Latn-BE; flæmska (latneskt) -zh-Hans-fonipa; kínverska [einfölduð] (FONIPA) +zh-Hans-fonipa; kínverska [einfölduð] (fonipa) @locale=it @@ -1526,7 +1527,7 @@ es-Cyrl-MX; Spanyol (Sirilik, Mèksiko) hi-Latn; India (Latin) nl-BE; Walanda (Bèlgi) nl-Latn-BE; Walanda (Latin, Bèlgi) -zh-Hans-fonipa; Tyonghwa (Prasaja, FONIPA) +zh-Hans-fonipa; Tyonghwa (Prasaja, fonipa) @locale=jv @@ -1539,7 +1540,7 @@ es-Cyrl-MX; Spanyol [Meksiko] (Sirilik) hi-Latn; India (Latin) nl-BE; Flemis nl-Latn-BE; Flemis (Latin) -zh-Hans-fonipa; Tyonghwa [Ringkes] (FONIPA) +zh-Hans-fonipa; Tyonghwa [Ringkes] (fonipa) @locale=ka @@ -1552,7 +1553,7 @@ es-Cyrl-MX; ესპანური (კირილიცა, მექსი hi-Latn; ჰინდი (ლათინური) nl-BE; ნიდერლანდური (ბელგია) nl-Latn-BE; ნიდერლანდური (ლათინური, ბელგია) -zh-Hans-fonipa; ჩინური (გამარტივებული, FONIPA) +zh-Hans-fonipa; ჩინური (გამარტივებული, fonipa) @locale=ka @@ -1565,7 +1566,7 @@ es-Cyrl-MX; მექსიკური ესპანური (კირი hi-Latn; ჰინდი (ლათინური) nl-BE; ფლამანდიური nl-Latn-BE; ფლამანდიური (ლათინური) -zh-Hans-fonipa; გამარტივებული ჩინური (FONIPA) +zh-Hans-fonipa; გამარტივებული ჩინური (fonipa) @locale=kk @@ -1630,7 +1631,7 @@ es-Cyrl-MX; អេស្ប៉ាញ (ស៊ីរីលីក, ម៉ិកស hi-Latn; ហិណ្ឌី (ឡាតាំង) nl-BE; ហូឡង់ (បែលហ្ស៊ិក) nl-Latn-BE; ហូឡង់ (ឡាតាំង, បែលហ្ស៊ិក) -zh-Hans-fonipa; ចិន (អក្សរ​ចិន​កាត់, FONIPA) +zh-Hans-fonipa; ចិន (អក្សរ​ចិន​កាត់, fonipa) @locale=km @@ -1643,7 +1644,7 @@ es-Cyrl-MX; អេស្ប៉ាញ (ស៊ីរីលីក, ម៉ិកស hi-Latn; ហិណ្ឌី (ឡាតាំង) nl-BE; ផ្លាមីស nl-Latn-BE; ផ្លាមីស (ឡាតាំង) -zh-Hans-fonipa; ចិន​អក្សរ​កាត់ (FONIPA) +zh-Hans-fonipa; ចិន​អក្សរ​កាត់ (fonipa) @locale=kn @@ -1656,7 +1657,7 @@ es-Cyrl-MX; ಸ್ಪ್ಯಾನಿಷ್ (ಸಿರಿಲಿಕ್, ಮೆಕ hi-Latn; ಹಿಂದಿ (ಲ್ಯಾಟಿನ್) nl-BE; ಡಚ್ (ಬೆಲ್ಜಿಯಮ್) nl-Latn-BE; ಡಚ್ (ಲ್ಯಾಟಿನ್, ಬೆಲ್ಜಿಯಮ್) -zh-Hans-fonipa; ಚೈನೀಸ್ (ಸರಳೀಕೃತ, FONIPA) +zh-Hans-fonipa; ಚೈನೀಸ್ (ಸರಳೀಕೃತ, fonipa) @locale=kn @@ -1669,7 +1670,7 @@ es-Cyrl-MX; ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್ (ಸಿ hi-Latn; ಹಿಂದಿ (ಲ್ಯಾಟಿನ್) nl-BE; ಫ್ಲೆಮಿಷ್ nl-Latn-BE; ಫ್ಲೆಮಿಷ್ (ಲ್ಯಾಟಿನ್) -zh-Hans-fonipa; ಸರಳೀಕೃತ ಚೈನೀಸ್ (FONIPA) +zh-Hans-fonipa; ಸರಳೀಕೃತ ಚೈನೀಸ್ (fonipa) @locale=ko @@ -1682,7 +1683,7 @@ es-Cyrl-MX; 스페인어(키릴 문자, 멕시코) hi-Latn; 힌디어(로마자) nl-BE; 네덜란드어(벨기에) nl-Latn-BE; 네덜란드어(로마자, 벨기에) -zh-Hans-fonipa; 중국어(간체, FONIPA) +zh-Hans-fonipa; 중국어(간체, fonipa) @locale=ko @@ -1695,7 +1696,7 @@ es-Cyrl-MX; 스페인어(키릴 문자, 멕시코) hi-Latn; 힌디어(로마자) nl-BE; 플라망어 nl-Latn-BE; 플라망어(로마자) -zh-Hans-fonipa; 중국어(간체, FONIPA) +zh-Hans-fonipa; 중국어(간체, fonipa) @locale=kok @@ -1708,7 +1709,7 @@ es-Cyrl-MX; स्पॅनीश (सिरिलिक, मेक्सिक hi-Latn; हिन्दी (लॅटीन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटीन, बेल्जियम) -zh-Hans-fonipa; चिनी (सोंपी, FONIPA) +zh-Hans-fonipa; चिनी (सोंपी, fonipa) @locale=kok @@ -1721,7 +1722,7 @@ es-Cyrl-MX; मॅक्सिकन स्पॅनीश (सिरिलि hi-Latn; हिन्दी (लॅटीन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटीन) -zh-Hans-fonipa; सोंपी चिनी (FONIPA) +zh-Hans-fonipa; सोंपी चिनी (fonipa) @locale=kok_Deva @@ -1734,7 +1735,7 @@ es-Cyrl-MX; स्पॅनीश (सिरिलिक, मेक्सिक hi-Latn; हिन्दी (लॅटीन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटीन, बेल्जियम) -zh-Hans-fonipa; चिनी (सोंपी, FONIPA) +zh-Hans-fonipa; चिनी (सोंपी, fonipa) @locale=kok_Deva @@ -1747,7 +1748,7 @@ es-Cyrl-MX; मॅक्सिकन स्पॅनीश (सिरिलि hi-Latn; हिन्दी (लॅटीन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटीन) -zh-Hans-fonipa; सोंपी चिनी (FONIPA) +zh-Hans-fonipa; सोंपी चिनी (fonipa) @locale=ky @@ -1760,7 +1761,7 @@ es-Cyrl-MX; испанча (Кирилл, Мексика) hi-Latn; хиндиче (Латын) nl-BE; голландча (Бельгия) nl-Latn-BE; голландча (Латын, Бельгия) -zh-Hans-fonipa; кытайча (Жөнөкөйлөштүрүлгөн, FONIPA) +zh-Hans-fonipa; кытайча (Жөнөкөйлөштүрүлгөн, fonipa) @locale=ky @@ -1773,7 +1774,7 @@ es-Cyrl-MX; испанча (Кирилл, Мексика) hi-Latn; хиндиче (Латын) nl-BE; фламандча nl-Latn-BE; фламандча (Латын) -zh-Hans-fonipa; кытайча [жөнөкөйлөштүрүлгөн] (FONIPA) +zh-Hans-fonipa; кытайча [жөнөкөйлөштүрүлгөн] (fonipa) @locale=lo @@ -1864,7 +1865,7 @@ es-Cyrl-MX; шпански (кирилско писмо, Мексико) hi-Latn; хинди (латинично писмо) nl-BE; холандски (Белгија) nl-Latn-BE; холандски (латинично писмо, Белгија) -zh-Hans-fonipa; кинески (поедноставено, FONIPA) +zh-Hans-fonipa; кинески (поедноставено, fonipa) @locale=mk @@ -1877,7 +1878,7 @@ es-Cyrl-MX; мексикански шпански (кирилско писмо) hi-Latn; хинди (латинично писмо) nl-BE; фламански nl-Latn-BE; фламански (латинично писмо) -zh-Hans-fonipa; поедноставен кинески (FONIPA) +zh-Hans-fonipa; поедноставен кинески (fonipa) @locale=ml @@ -1916,7 +1917,7 @@ es-Cyrl-MX; испани (кирилл, Мексик) hi-Latn; хинди (латин) nl-BE; нидерланд (Бельги) nl-Latn-BE; нидерланд (латин, Бельги) -zh-Hans-fonipa; хятад (хялбаршуулсан, FONIPA) +zh-Hans-fonipa; хятад (хялбаршуулсан, fonipa) @locale=mn @@ -1929,7 +1930,7 @@ es-Cyrl-MX; испани хэл [Мексик] (кирилл) hi-Latn; хинди (латин) nl-BE; фламанд nl-Latn-BE; фламанд (латин) -zh-Hans-fonipa; хялбаршуулсан хятад (FONIPA) +zh-Hans-fonipa; хялбаршуулсан хятад (fonipa) @locale=mr @@ -1942,7 +1943,7 @@ es-Cyrl-MX; स्पॅनिश (सीरिलिक, मेक्सिक hi-Latn; हिंदी (लॅटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (लॅटिन, बेल्जियम) -zh-Hans-fonipa; चीनी (सरलीकृत, FONIPA) +zh-Hans-fonipa; चीनी (सरलीकृत, fonipa) @locale=mr @@ -1955,7 +1956,7 @@ es-Cyrl-MX; मेक्सिकन स्पॅनिश (सीरिलि hi-Latn; हिंदी (लॅटिन) nl-BE; फ्लेमिश nl-Latn-BE; फ्लेमिश (लॅटिन) -zh-Hans-fonipa; सरलीकृत चीनी (FONIPA) +zh-Hans-fonipa; सरलीकृत चीनी (fonipa) @locale=ms @@ -2046,7 +2047,7 @@ es-Cyrl-MX; स्पेनी (सिरिलिक, मेक्सिको) hi-Latn; हिन्दी (ल्याटिन) nl-BE; डच (बेल्जियम) nl-Latn-BE; डच (ल्याटिन, बेल्जियम) -zh-Hans-fonipa; चिनियाँ (सरलिकृत चिनियाँ, FONIPA) +zh-Hans-fonipa; चिनियाँ (सरलिकृत चिनियाँ, fonipa) @locale=ne @@ -2059,7 +2060,7 @@ es-Cyrl-MX; मेक्सिकन स्पेनी (सिरिलिक) hi-Latn; हिन्दी (ल्याटिन) nl-BE; फ्लेमिस nl-Latn-BE; फ्लेमिस (ल्याटिन) -zh-Hans-fonipa; सरलिकृत चिनियाँ (FONIPA) +zh-Hans-fonipa; सरलिकृत चिनियाँ (fonipa) @locale=nl @@ -2150,7 +2151,7 @@ es-Cyrl-MX; ସ୍ପାନିସ୍‌ (ସିରିଲିକ୍, ମେକ୍ hi-Latn; ହିନ୍ଦୀ (ଲାଟିନ୍) nl-BE; ଡଚ୍ (ବେଲଜିୟମ୍) nl-Latn-BE; ଡଚ୍ (ଲାଟିନ୍, ବେଲଜିୟମ୍) -zh-Hans-fonipa; ଚାଇନିଜ୍‌ (ସରଳୀକୃତ, FONIPA) +zh-Hans-fonipa; ଚାଇନିଜ୍‌ (ସରଳୀକୃତ, fonipa) @locale=or @@ -2163,7 +2164,7 @@ es-Cyrl-MX; ମେକ୍ସିକାନ ସ୍ପାନିସ୍‌ (ସିର hi-Latn; ହିନ୍ଦୀ (ଲାଟିନ୍) nl-BE; ଫ୍ଲେମିଶ୍ nl-Latn-BE; ଫ୍ଲେମିଶ୍ (ଲାଟିନ୍) -zh-Hans-fonipa; ସରଳୀକୃତ ଚାଇନିଜ (FONIPA) +zh-Hans-fonipa; ସରଳୀକୃତ ଚାଇନିଜ (fonipa) @locale=pa @@ -2176,7 +2177,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਡੱਚ (ਬੈਲਜੀਅਮ) nl-Latn-BE; ਡੱਚ (ਲਾਤੀਨੀ, ਬੈਲਜੀਅਮ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa @@ -2189,7 +2190,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਫਲੈਮਿਸ਼ nl-Latn-BE; ਫਲੈਮਿਸ਼ (ਲਾਤੀਨੀ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa_Guru @@ -2202,7 +2203,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਡੱਚ (ਬੈਲਜੀਅਮ) nl-Latn-BE; ਡੱਚ (ਲਾਤੀਨੀ, ਬੈਲਜੀਅਮ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pa_Guru @@ -2215,7 +2216,7 @@ es-Cyrl-MX; ਸਪੇਨੀ (ਸਿਰਿਲਿਕ, ਮੈਕਸੀਕੋ) hi-Latn; ਹਿੰਦੀ (ਲਾਤੀਨੀ) nl-BE; ਫਲੈਮਿਸ਼ nl-Latn-BE; ਫਲੈਮਿਸ਼ (ਲਾਤੀਨੀ) -zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, FONIPA) +zh-Hans-fonipa; ਚੀਨੀ (ਸਰਲ, fonipa) @locale=pcm @@ -2228,7 +2229,7 @@ es-Cyrl-MX; Spánish Lángwej (Sírílik, Mẹ́ksíko) hi-Latn; Híndi Lángwej (Látin) nl-BE; Dọch Lángwej (Bẹ́ljọm) nl-Latn-BE; Dọch Lángwej (Látin, Bẹ́ljọm) -zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, FONIPA) +zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, fonipa) @locale=pcm @@ -2241,7 +2242,7 @@ es-Cyrl-MX; Mẹ́ksiko Spánish (Sírílik) hi-Latn; Híndi [Látin] nl-BE; Flẹ́mish Lángwej nl-Latn-BE; Flẹ́mish Lángwej (Látin) -zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, FONIPA) +zh-Hans-fonipa; Mandarín Chainíz Lángwej (Ízí Chainíz Lángwej, fonipa) @locale=pl @@ -2280,7 +2281,7 @@ es-Cyrl-MX; هسپانوي (سیریلیک, میکسیکو) hi-Latn; هندي (لاتين/لاتيني) nl-BE; هالېنډي (بیلجیم) nl-Latn-BE; هالېنډي (لاتين/لاتيني, بیلجیم) -zh-Hans-fonipa; چیني (ساده شوی, FONIPA) +zh-Hans-fonipa; چیني (ساده شوی, fonipa) @locale=ps @@ -2293,7 +2294,7 @@ es-Cyrl-MX; ميکسيکي هسپانوي (سیریلیک) hi-Latn; هندي [لاتيني] nl-BE; فلېمېشي nl-Latn-BE; فلېمېشي (لاتين/لاتيني) -zh-Hans-fonipa; چیني (ساده شوی, FONIPA) +zh-Hans-fonipa; چیني (ساده شوی, fonipa) @locale=pt @@ -2358,7 +2359,7 @@ es-Cyrl-MX; es (Cyrl, MX) hi-Latn; hi (Latn) nl-BE; nl (BE) nl-Latn-BE; nl (Latn, BE) -zh-Hans-fonipa; zh (Hans, FONIPA) +zh-Hans-fonipa; zh (Hans, fonipa) @locale=root @@ -2371,7 +2372,7 @@ es-Cyrl-MX; es (Cyrl, MX) hi-Latn; hi (Latn) nl-BE; nl (BE) nl-Latn-BE; nl (Latn, BE) -zh-Hans-fonipa; zh (Hans, FONIPA) +zh-Hans-fonipa; zh (Hans, fonipa) @locale=ru @@ -2410,7 +2411,7 @@ es-Cyrl-MX; هسپانوي (سيريلي, ميڪسيڪو) hi-Latn; هندي (لاطيني) nl-BE; ڊچ (بيلجيم) nl-Latn-BE; ڊچ (لاطيني, بيلجيم) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd @@ -2423,7 +2424,7 @@ es-Cyrl-MX; ميڪسيڪين اسپيني (سيريلي) hi-Latn; هندي (لاطيني) nl-BE; فليمش nl-Latn-BE; فليمش (لاطيني) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd_Arab @@ -2436,7 +2437,7 @@ es-Cyrl-MX; هسپانوي (سيريلي, ميڪسيڪو) hi-Latn; هندي (لاطيني) nl-BE; ڊچ (بيلجيم) nl-Latn-BE; ڊچ (لاطيني, بيلجيم) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=sd_Arab @@ -2449,7 +2450,7 @@ es-Cyrl-MX; ميڪسيڪين اسپيني (سيريلي) hi-Latn; هندي (لاطيني) nl-BE; فليمش nl-Latn-BE; فليمش (لاطيني) -zh-Hans-fonipa; چيني (سادي, FONIPA) +zh-Hans-fonipa; چيني (سادي, fonipa) @locale=si @@ -2462,7 +2463,7 @@ es-Cyrl-MX; ස්පාඤ්ඤ (සිරිලික්, මෙක්සි hi-Latn; හින්දි (ලතින්) nl-BE; ලන්දේසි (බෙල්ජියම) nl-Latn-BE; ලන්දේසි (ලතින්, බෙල්ජියම) -zh-Hans-fonipa; චීන (සුළුකළ, FONIPA) +zh-Hans-fonipa; චීන (සුළුකළ, fonipa) @locale=si @@ -2475,7 +2476,7 @@ es-Cyrl-MX; මෙක්සිකානු ස්පාඤ්ඤ (සිරි hi-Latn; හින්දි (ලතින්) nl-BE; ෆ්ලෙමිශ් nl-Latn-BE; ෆ්ලෙමිශ් (ලතින්) -zh-Hans-fonipa; සරල චීන (FONIPA) +zh-Hans-fonipa; සරල චීන (fonipa) @locale=sk @@ -2488,7 +2489,7 @@ es-Cyrl-MX; španielčina (cyrilika, Mexiko) hi-Latn; hindčina (latinka) nl-BE; holandčina (Belgicko) nl-Latn-BE; holandčina (latinka, Belgicko) -zh-Hans-fonipa; čínština (zjednodušené, FONIPA) +zh-Hans-fonipa; čínština (zjednodušené, fonipa) @locale=sk @@ -2501,7 +2502,7 @@ es-Cyrl-MX; španielčina [mexická] (cyrilika) hi-Latn; hindčina (latinka) nl-BE; flámčina nl-Latn-BE; flámčina (latinka) -zh-Hans-fonipa; čínština [zjednodušená] (FONIPA) +zh-Hans-fonipa; čínština [zjednodušená] (fonipa) @locale=sl @@ -2540,7 +2541,7 @@ es-Cyrl-MX; Isbaanish (Siriylik, Meksiko) hi-Latn; Hindi (Laatiin) nl-BE; Holandays (Biljam) nl-Latn-BE; Holandays (Laatiin, Biljam) -zh-Hans-fonipa; Shinees (La fududeeyay, FONIPA) +zh-Hans-fonipa; Shinees (La fududeeyay, fonipa) @locale=so @@ -2553,7 +2554,7 @@ es-Cyrl-MX; Isbaanishka Mexico (Siriylik) hi-Latn; Hindi [Latin] nl-BE; Af faleemi nl-Latn-BE; Af faleemi (Laatiin) -zh-Hans-fonipa; Shiinaha Rasmiga ah (FONIPA) +zh-Hans-fonipa; Shiinaha Rasmiga ah (fonipa) @locale=sq @@ -2566,7 +2567,7 @@ es-Cyrl-MX; spanjisht (cirilik, Meksikë) hi-Latn; indisht (latin) nl-BE; holandisht (Belgjikë) nl-Latn-BE; holandisht (latin, Belgjikë) -zh-Hans-fonipa; kinezisht (i thjeshtuar, FONIPA) +zh-Hans-fonipa; kinezisht (i thjeshtuar, fonipa) @locale=sq @@ -2579,7 +2580,7 @@ es-Cyrl-MX; spanjishte meksikane (cirilik) hi-Latn; hindisht [latine] nl-BE; flamandisht nl-Latn-BE; flamandisht (latin) -zh-Hans-fonipa; kinezishte e thjeshtuar (FONIPA) +zh-Hans-fonipa; kinezishte e thjeshtuar (fonipa) @locale=sr @@ -2696,7 +2697,7 @@ es-Cyrl-MX; Kihispania (Kisiriliki, Meksiko) hi-Latn; Kihindi (Kilatini) nl-BE; Kiholanzi (Ubelgiji) nl-Latn-BE; Kiholanzi (Kilatini, Ubelgiji) -zh-Hans-fonipa; Kichina (Rahisi, FONIPA) +zh-Hans-fonipa; Kichina (Rahisi, fonipa) @locale=sw @@ -2709,7 +2710,7 @@ es-Cyrl-MX; Kihispania (Kisiriliki, Meksiko) hi-Latn; Kihindi (Kilatini) nl-BE; Kiflemi nl-Latn-BE; Kiflemi (Kilatini) -zh-Hans-fonipa; Kichina [Kilichorahisishwa] (FONIPA) +zh-Hans-fonipa; Kichina [Kilichorahisishwa] (fonipa) @locale=ta @@ -2722,7 +2723,7 @@ es-Cyrl-MX; ஸ்பானிஷ் (சிரிலிக், மெக்ச hi-Latn; இந்தி (லத்தின்) nl-BE; டச்சு (பெல்ஜியம்) nl-Latn-BE; டச்சு (லத்தின், பெல்ஜியம்) -zh-Hans-fonipa; சீனம் (எளிதாக்கப்பட்டது, FONIPA) +zh-Hans-fonipa; சீனம் (எளிதாக்கப்பட்டது, fonipa) @locale=ta @@ -2735,7 +2736,7 @@ es-Cyrl-MX; மெக்ஸிகன் ஸ்பானிஷ் (சிரி hi-Latn; இந்தி (லத்தின்) nl-BE; ஃப்லெமிஷ் nl-Latn-BE; ஃப்லெமிஷ் (லத்தின்) -zh-Hans-fonipa; எளிதாக்கப்பட்ட சீனம் (FONIPA) +zh-Hans-fonipa; எளிதாக்கப்பட்ட சீனம் (fonipa) @locale=te @@ -2748,7 +2749,7 @@ es-Cyrl-MX; స్పానిష్ (సిరిలిక్, మెక్స hi-Latn; హిందీ (లాటిన్) nl-BE; డచ్ (బెల్జియం) nl-Latn-BE; డచ్ (లాటిన్, బెల్జియం) -zh-Hans-fonipa; చైనీస్ (సరళీకృతం, FONIPA) +zh-Hans-fonipa; చైనీస్ (సరళీకృతం, fonipa) @locale=te @@ -2761,7 +2762,7 @@ es-Cyrl-MX; మెక్సికన్ స్పానిష్ (సిరి hi-Latn; హిందీ (లాటిన్) nl-BE; ఫ్లెమిష్ nl-Latn-BE; ఫ్లెమిష్ (లాటిన్) -zh-Hans-fonipa; సరళీకృత చైనీస్ (FONIPA) +zh-Hans-fonipa; సరళీకృత చైనీస్ (fonipa) @locale=th @@ -2800,7 +2801,7 @@ es-Cyrl-MX; ስጳንኛ (ቋንቋ ሲሪል፣ ሜክሲኮ) hi-Latn; ሂንዲ (ላቲን) nl-BE; ዳች (ቤልጅዩም) nl-Latn-BE; ዳች (ላቲን፣ ቤልጅዩም) -zh-Hans-fonipa; ቻይንኛ (ዝተቐለለ፣ FONIPA) +zh-Hans-fonipa; ቻይንኛ (ዝተቐለለ፣ fonipa) @locale=ti @@ -2813,7 +2814,7 @@ es-Cyrl-MX; ስጳንኛ (ቋንቋ ሲሪል፣ ሜክሲኮ) hi-Latn; ሂንዲ (ላቲን) nl-BE; ፍላሚሽ nl-Latn-BE; ፍላሚሽ (ላቲን) -zh-Hans-fonipa; ቀሊል ቻይንኛ (FONIPA) +zh-Hans-fonipa; ቀሊል ቻይንኛ (fonipa) @locale=tk @@ -2826,7 +2827,7 @@ es-Cyrl-MX; ispan dili (Kiril elipbiýi, Meksika) hi-Latn; hindi dili (Latyn elipbiýi) nl-BE; niderland dili (Belgiýa) nl-Latn-BE; niderland dili (Latyn elipbiýi, Belgiýa) -zh-Hans-fonipa; hytaý dili (Ýönekeýleşdirilen, FONIPA) +zh-Hans-fonipa; hytaý dili (Ýönekeýleşdirilen, fonipa) @locale=tk @@ -2839,7 +2840,7 @@ es-Cyrl-MX; ispan dili (Kiril elipbiýi, Meksika) hi-Latn; hindi dili (Latyn elipbiýi) nl-BE; flamand dili nl-Latn-BE; flamand dili (Latyn elipbiýi) -zh-Hans-fonipa; ýönekeýleşdirilen hytaý dili (FONIPA) +zh-Hans-fonipa; ýönekeýleşdirilen hytaý dili (fonipa) @locale=tr @@ -2904,7 +2905,7 @@ es-Cyrl-MX; ہسپانوی (سیریلک،میکسیکو) hi-Latn; ہندی (لاطینی) nl-BE; ڈچ (بیلجیم) nl-Latn-BE; ڈچ (لاطینی،بیلجیم) -zh-Hans-fonipa; چینی (آسان،FONIPA) +zh-Hans-fonipa; چینی (آسان،fonipa) @locale=ur @@ -2917,7 +2918,7 @@ es-Cyrl-MX; میکسیکن ہسپانوی (سیریلک) hi-Latn; ہندی (لاطینی) nl-BE; فلیمِش nl-Latn-BE; فلیمِش (لاطینی) -zh-Hans-fonipa; چینی [آسان کردہ] (FONIPA) +zh-Hans-fonipa; چینی [آسان کردہ] (fonipa) @locale=uz @@ -2930,7 +2931,7 @@ es-Cyrl-MX; ispancha (kirill, Meksika) hi-Latn; hind (lotin) nl-BE; niderland (Belgiya) nl-Latn-BE; niderland (lotin, Belgiya) -zh-Hans-fonipa; xitoy (soddalashgan, FONIPA) +zh-Hans-fonipa; xitoy (soddalashgan, fonipa) @locale=uz @@ -2943,7 +2944,7 @@ es-Cyrl-MX; ispan [Meksika] (kirill) hi-Latn; hind (lotin) nl-BE; flamand nl-Latn-BE; flamand (lotin) -zh-Hans-fonipa; xitoy [soddalashgan] (FONIPA) +zh-Hans-fonipa; xitoy [soddalashgan] (fonipa) @locale=uz_Latn @@ -2956,7 +2957,7 @@ es-Cyrl-MX; ispancha (kirill, Meksika) hi-Latn; hind (lotin) nl-BE; niderland (Belgiya) nl-Latn-BE; niderland (lotin, Belgiya) -zh-Hans-fonipa; xitoy (soddalashgan, FONIPA) +zh-Hans-fonipa; xitoy (soddalashgan, fonipa) @locale=uz_Latn @@ -2969,7 +2970,7 @@ es-Cyrl-MX; ispan [Meksika] (kirill) hi-Latn; hind (lotin) nl-BE; flamand nl-Latn-BE; flamand (lotin) -zh-Hans-fonipa; xitoy [soddalashgan] (FONIPA) +zh-Hans-fonipa; xitoy [soddalashgan] (fonipa) @locale=vi @@ -3008,7 +3009,7 @@ es-Cyrl-MX; Èdè Sípáníìṣì (èdè ilẹ̀ Rọ́ṣíà, Mesiko) hi-Latn; Èdè Híńdì (Èdè Látìn) nl-BE; Èdè Dọ́ọ̀ṣì (Bégíọ́mù) nl-Latn-BE; Èdè Dọ́ọ̀ṣì (Èdè Látìn, Bégíọ́mù) -zh-Hans-fonipa; Edè Ṣáínà (tí wọ́n mú rọrùn., FONIPA) +zh-Hans-fonipa; Edè Ṣáínà (tí wọ́n mú rọrùn., fonipa) @locale=yo @@ -3021,7 +3022,7 @@ es-Cyrl-MX; Èdè Sípáníìṣì [orílẹ̀-èdè Mẹ́síkò] (èdè ilẹ hi-Latn; Èdè Híndì [Látìnì] nl-BE; Èdè Flemiṣi nl-Latn-BE; Èdè Flemiṣi (Èdè Látìn) -zh-Hans-fonipa; Ẹdè Ṣáínà Onírọ̀rùn (FONIPA) +zh-Hans-fonipa; Ẹdè Ṣáínà Onírọ̀rùn (fonipa) @locale=yue diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/ibm9027.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/ibm9027.cnv index ae1daaa0bcb1..0e4eae6a2968 100644 Binary files a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/ibm9027.cnv and b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/ibm9027.cnv differ diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1.cnv index 8912192cef97..71f18a9a4248 100644 Binary files a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1.cnv and b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1.cnv differ diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1bmp.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1bmp.cnv index 34bb8aa8dca9..532f57d93098 100644 Binary files a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1bmp.cnv and b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test1bmp.cnv differ diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test2.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test2.cnv index 211d2218ccde..75e8ca507650 100644 Binary files a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test2.cnv and b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test2.cnv differ diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test3.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test3.cnv index 7f36ad999a3c..cf8a1aeb5f5a 100644 Binary files a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test3.cnv and b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test3.cnv differ diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4.cnv index f4665f66bd07..0698f4349d4d 100644 Binary files a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4.cnv and b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4.cnv differ diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4x.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4x.cnv index 361eb47d7913..f95393bb32a6 100644 Binary files a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4x.cnv and b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test4x.cnv differ diff --git a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test5.cnv b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test5.cnv index f4ce7679664a..478772b9f089 100644 Binary files a/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test5.cnv and b/icu4j/main/core/src/test/resources/com/ibm/icu/dev/data/testdata/test5.cnv differ diff --git a/icu4j/main/currdata/pom.xml b/icu4j/main/currdata/pom.xml index 8c28128ab5e2..23612a798820 100644 --- a/icu4j/main/currdata/pom.xml +++ b/icu4j/main/currdata/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/framework/pom.xml b/icu4j/main/framework/pom.xml index ca769566d5b1..01e88658973d 100644 --- a/icu4j/main/framework/pom.xml +++ b/icu4j/main/framework/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/icu4j/pom.xml b/icu4j/main/icu4j/pom.xml index f99e73cc4d30..a99d4960138c 100644 --- a/icu4j/main/icu4j/pom.xml +++ b/icu4j/main/icu4j/pom.xml @@ -9,7 +9,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/langdata/pom.xml b/icu4j/main/langdata/pom.xml index ab9dadf9837d..bfe912bff8ec 100644 --- a/icu4j/main/langdata/pom.xml +++ b/icu4j/main/langdata/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/localespi/pom.xml b/icu4j/main/localespi/pom.xml index 93e1b580297e..55f173067677 100644 --- a/icu4j/main/localespi/pom.xml +++ b/icu4j/main/localespi/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/regiondata/pom.xml b/icu4j/main/regiondata/pom.xml index 700e3510b398..8e5e51fec9d1 100644 --- a/icu4j/main/regiondata/pom.xml +++ b/icu4j/main/regiondata/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/translit/pom.xml b/icu4j/main/translit/pom.xml index 663a8243f0bd..f040bce8c6ed 100644 --- a/icu4j/main/translit/pom.xml +++ b/icu4j/main/translit/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/main/translit/src/main/java/com/ibm/icu/text/LowercaseTransliterator.java b/icu4j/main/translit/src/main/java/com/ibm/icu/text/LowercaseTransliterator.java index d75cb2ab21a5..6cdfa5670f6f 100644 --- a/icu4j/main/translit/src/main/java/com/ibm/icu/text/LowercaseTransliterator.java +++ b/icu4j/main/translit/src/main/java/com/ibm/icu/text/LowercaseTransliterator.java @@ -42,8 +42,6 @@ public Transliterator getInstance(String ID) { private final ULocale locale; private final UCaseProps csp; - private ReplaceableContextIterator iter; - private StringBuilder result; private int caseLocale; /** @@ -54,8 +52,6 @@ public LowercaseTransliterator(ULocale loc) { super(_ID, null); locale = loc; csp=UCaseProps.INSTANCE; - iter=new ReplaceableContextIterator(); - result = new StringBuilder(); caseLocale = UCaseProps.getCaseLocale(locale); } @@ -63,7 +59,7 @@ public LowercaseTransliterator(ULocale loc) { * Implements {@link Transliterator#handleTransliterate}. */ @Override - protected synchronized void handleTransliterate(Replaceable text, + protected void handleTransliterate(Replaceable text, Position offsets, boolean isIncremental) { if(csp==null) { return; @@ -73,8 +69,10 @@ protected synchronized void handleTransliterate(Replaceable text, return; } + ReplaceableContextIterator iter = new ReplaceableContextIterator(); + StringBuilder result = new StringBuilder(); + iter.setText(text); - result.setLength(0); int c, delta; // Walk through original string diff --git a/icu4j/perf-tests/README.txt b/icu4j/perf-tests/README.txt index d26f3fdafa54..7e96f9f87e3c 100644 --- a/icu4j/perf-tests/README.txt +++ b/icu4j/perf-tests/README.txt @@ -43,6 +43,9 @@ COLLATION TESTS The collation tests run only on the command line with tabular output: perl collationperf.pl |& tee collation_output.txt +JMH +Some performance tests run using OpenJDK JMH. These may be launched with: + java -jar perf-tests/target/jmh-benchmarks.jar OTHER COMMAND LINE TESTS Additional tests are run from the command line, each producing an HTML diff --git a/icu4j/perf-tests/pom.xml b/icu4j/perf-tests/pom.xml index f47e93729c2b..63981dda57bb 100644 --- a/icu4j/perf-tests/pom.xml +++ b/icu4j/perf-tests/pom.xml @@ -8,13 +8,14 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 perf-tests perf_tests + 1.37 @@ -43,12 +44,23 @@ commons-cli ${commons-cli.version} + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + provided + - @@ -63,6 +75,49 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + org.openjdk.jmh.generators.BenchmarkProcessor + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + jmh-benchmarks + + + org.openjdk.jmh.Main + + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + diff --git a/icu4j/perf-tests/src/main/java/com/ibm/icu/dev/test/perf/LowercaseTransliteratorPerf.java b/icu4j/perf-tests/src/main/java/com/ibm/icu/dev/test/perf/LowercaseTransliteratorPerf.java new file mode 100644 index 000000000000..26baea593f0c --- /dev/null +++ b/icu4j/perf-tests/src/main/java/com/ibm/icu/dev/test/perf/LowercaseTransliteratorPerf.java @@ -0,0 +1,35 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* + ********************************************************************** + * Copyright (c) 2002-2008, International Business Machines * + * Corporation and others. All Rights Reserved. * + ********************************************************************** + */ +package com.ibm.icu.dev.test.perf; + +import java.util.concurrent.TimeUnit; + +import com.ibm.icu.text.Transliterator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; + +@BenchmarkMode(Mode.Throughput) +@OutputTimeUnit(TimeUnit.MILLISECONDS) +public class LowercaseTransliteratorPerf { + + static final Transliterator LOWER = Transliterator.getInstance("Lower"); + + @Benchmark + public String testShort() { + return LOWER.transliterate("Cat"); + } + + @Benchmark + public String testSentence() { + return LOWER.transliterate("The Quick Brown Fox Jumped Over The Lazy Dog"); + } + +} diff --git a/icu4j/pom.xml b/icu4j/pom.xml index d31686a55b68..ffdcb995b194 100644 --- a/icu4j/pom.xml +++ b/icu4j/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 pom ${proj-title} (${project.artifactId}) diff --git a/icu4j/releases_tools/shared.sh b/icu4j/releases_tools/shared.sh index ca1cd90bddbc..abb320ec49fd 100755 --- a/icu4j/releases_tools/shared.sh +++ b/icu4j/releases_tools/shared.sh @@ -5,8 +5,8 @@ export MAVEN_ARGS='--no-transfer-progress' # Version update! -export artifact_version='77.1-SNAPSHOT' -export github_rel_version='77rc' +export artifact_version='77.1' +export github_rel_version='77_1' export api_report_version='77' export api_report_prev_version='76' export out_dir=target diff --git a/icu4j/samples/pom.xml b/icu4j/samples/pom.xml index 0d9d5877454d..6dee77371024 100644 --- a/icu4j/samples/pom.xml +++ b/icu4j/samples/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 samples diff --git a/icu4j/tools/build/pom.xml b/icu4j/tools/build/pom.xml index 4af9bec234ab..57a078e61ff9 100644 --- a/icu4j/tools/build/pom.xml +++ b/icu4j/tools/build/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/icu4j/tools/misc/pom.xml b/icu4j/tools/misc/pom.xml index f0adec43568f..b4ee188eae75 100644 --- a/icu4j/tools/misc/pom.xml +++ b/icu4j/tools/misc/pom.xml @@ -8,7 +8,7 @@ com.ibm.icu icu4j-root - 77.1-SNAPSHOT + 77.1 ../../pom.xml diff --git a/testdata/message2/more-functions.json b/testdata/message2/more-functions.json index b34803635ce9..6d074f8b2d80 100644 --- a/testdata/message2/more-functions.json +++ b/testdata/message2/more-functions.json @@ -63,7 +63,7 @@ { "src": [".local $num = {|42| :number}\n", "{{Testing date formatting: {$num :datetime}}}"], - "exp": "Testing date formatting: {|42|}", + "exp": "Testing date formatting: {$num}", "expErrors": [{"type": "bad-operand"}] }, { diff --git a/testdata/message2/normalization.json b/testdata/message2/normalization.json deleted file mode 100644 index da3bdca87eb3..000000000000 --- a/testdata/message2/normalization.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/unicode-org/message-format-wg/main/test/schemas/v0/tests.schema.json", - "scenario": "Syntax", - "description": "Test cases that do not depend on any registry definitions.", - "defaultTestProperties": { - "locale": "en-US" - }, - "tests": [ - { - "description": "NFC: text is not normalized", - "src": "\u1E0A\u0323", - "exp": "\u1E0A\u0323" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is", - "src": ".local $\u0044\u0323\u0307 = {foo} {{{$\u1E0c\u0307}}}", - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is normalized, use isn't", - "src": ".local $\u1E0c\u0307 = {foo} {{{$\u0044\u0323\u0307}}}", - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is normalized, use isn't", - "src": ".input {$\u1E0c\u0307} {{{$\u0044\u0323\u0307}}}", - "params": [{"name": "\u1E0c\u0307", "value": "foo"}], - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is", - "src": ".input {$\u0044\u0323\u0307} {{{$\u1E0c\u0307}}}", - "params": [{"name": "\u0044\u0323\u0307", "value": "foo"}], - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is; reordering", - "src": ".local $\u0044\u0307\u0323 = {foo} {{{$\u1E0c\u0307}}}", - "exp": "foo" - }, - { - "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is; special case mapping", - "src": ".local $\u0041\u030A\u0301 = {foo} {{{$\u01FA}}}", - "exp": "foo" - }, - { - "description": "NFC: keys are normalized", - "src": ".local $x = {\u1E0C\u0307 :string} .match $x \u1E0A\u0323 {{Right}} * {{Wrong}}", - "exp": "Right" - }, - { - "description": "NFC: keys are normalized (unquoted)", - "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0A\u0323 {{Not normalized}} \u1E0C\u0307 {{Normalized}} * {{Wrong}}", - "expErrors": [{"type": "duplicate-variant"}] - }, - { - "description": "NFC: keys are normalized (quoted)", - "src": ".local $x = {\u1E0A\u0323 :string} .match $x |\u1E0A\u0323| {{Not normalized}} |\u1E0C\u0307| {{Normalized}} * {{Wrong}}", - "expErrors": [{"type": "duplicate-variant"}] - }, - { - "description": "NFC: keys are normalized (mixed)", - "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0A\u0323 {{Not normalized}} |\u1E0C\u0307| {{Normalized}} * {{Wrong}}", - "expErrors": [{"type": "duplicate-variant"}] - } -] -} diff --git a/testdata/message2/spec/bidi.json b/testdata/message2/spec/bidi.json new file mode 100644 index 000000000000..2d650a3e34d6 --- /dev/null +++ b/testdata/message2/spec/bidi.json @@ -0,0 +1,146 @@ +{ + "scenario": "Bidi support", + "description": "Tests for correct parsing of messages with bidirectional marks and isolates", + "defaultTestProperties": { + "bidiIsolation": "default", + "locale": "en-US" + }, + "tests": [ + { + "description": "simple-message = o [simple-start pattern]", + "src": " \u061C Hello world!", + "exp": " \u061C Hello world!" + }, + { + "description": "complex-message = o *(declaration o) complex-body o", + "src": "\u200E .local $x = {1} {{ {$x}}}", + "exp": " \u20681\u2069" + }, + { + "description": "complex-message = o *(declaration o) complex-body o", + "src": ".local $x = {1} \u200F {{ {$x}}}", + "exp": " \u20681\u2069" + }, + { + "description": "complex-message = o *(declaration o) complex-body o", + "src": ".local $x = {1} {{ {$x}}} \u2066", + "exp": " \u20681\u2069" + }, + { + "description": "input-declaration = input o variable-expression", + "src": ".input \u2067 {$x :number} {{hello}}", + "params": [{"name": "x", "value": "1"}], + "exp": "hello" + }, + { + "description": "local s variable o \"=\" o expression", + "src": ".local $x \u2068 = \u2069 {1} {{hello}}", + "exp": "hello" + }, + { + "description": "local s variable o \"=\" o expression", + "src": ".local \u2067 $x = {1} {{hello}}", + "exp": "hello" + }, + { + "description": "local s variable o \"=\" o expression", + "src": ".local\u2067 $x = {1} {{hello}}", + "exp": "hello" + }, + { + "description": "o \"{{\" pattern \"}}\"", + "src": "\u2067 {{hello}}", + "exp": "hello" + }, + { + "description": "match-statement s variant *(o variant)", + "src": ".local $x = {1 :number}\n.match $x\n1 {{one}}\n\u061C * {{other}}", + "exp": "one" + }, + { + "description": "match-statement s variant *(o variant)", + "src": ".local $x = {1 :number}.match $x \u061c1 {{one}}* {{other}}", + "exp": "one" + }, + { + "description": "match-statement s variant *(o variant)", + "src": ".local $x = {1 :number}.match $x\u061c1 {{one}}* {{other}}", + "expErrors": [{"type": "syntax-error"}] + }, + { + "description": "variant = key *(s key) quoted-pattern", + "src": ".local $x = {1 :number} .local $y = {$x :number}.match $x $y\n1 \u200E 1 {{one}}* * {{other}}", + "exp": "one" + }, + { + "description": "variant = key *(s key) quoted-pattern", + "src": ".local $x = {1 :number} .local $y = {$x :number}.match $x $y\n1\u200E 1 {{one}}* * {{other}}", + "exp": "one" + }, + { + "description": "literal-expression = \"{\" o literal [s function] *(s attribute) o \"}\"", + "src": "{\u200E hello \u200F}", + "exp": "\u2068hello\u2069" + }, + { + "description": "variable-expression = \"{\" o variable [s function] *(s attribute) o \"}\"", + "src": ".local $x = {1} {{ {\u200E $x \u200F} }}", + "exp": " \u20681\u2069 " + }, + { + "description": "function-expression = \"{\" o function *(s attribute) o \"}\"", + "src": "{1 \u200E :number \u200F}", + "exp": "1" + }, + { + "description": "markup = \"{\" o \"#\" identifier *(s option) *(s attribute) o [\"/\"] \"}\"", + "src": "{\u200F #b \u200E }", + "exp": "" + }, + { + "description": "markup = \"{\" o \"/\" identifier *(s option) *(s attribute) o \"}\"", + "src": "{\u200F /b \u200E }", + "exp": "" + }, + { + "description": "option = identifier o \"=\" o (literal / variable)", + "src": "{1 :number minimumFractionDigits\u200F=\u200E1 }", + "exp": "1.0" + }, + { + "description": "attribute = \"@\" identifier [o \"=\" o (literal / variable)]", + "src": "{1 :number @locale\u200F=\u200Een }", + "exp": "1" + }, + { + "description": " name... excludes U+FFFD and U+061C -- this pases as name -> [bidi] name-start *name-char", + "src": ".local $\u061Cfoo = {1} {{ {$\u061Cfoo} }}", + "exp": " \u20681\u2069 " + }, + { + "description": " name matches https://www.w3.org/TR/REC-xml-names/#NT-NCName but excludes U+FFFD and U+061C", + "src": ".local $foo\u061Cbar = {2} {{ }}", + "expErrors": [{"type": "syntax-error"}] + }, + { + "description": "name = [bidi] name-start *name-char [bidi]", + "src": ".local $\u200Efoo\u200F = {3} {{{$\u200Efoo\u200F}}}", + "exp": "\u20683\u2069" + }, + { + "description": "name = [bidi] name-start *name-char [bidi]", + "src": ".local $foo = {4} {{{$\u200Efoo\u200F}}}", + "exp": "\u20684\u2069" + }, + { + "description": "name = [bidi] name-start *name-char [bidi]", + "src": ".local $\u200Efoo\u200F = {5} {{{$foo}}}", + "exp": "\u20685\u2069" + }, + { + "description": "name = [bidi] name-start *name-char [bidi]", + "src": ".local $foo\u200Ebar = {5} {{{$foo\u200Ebar}}}", + "expErrors": [{"type": "syntax-error"}] + } + ] +} diff --git a/testdata/message2/spec/fallback.json b/testdata/message2/spec/fallback.json new file mode 100644 index 000000000000..fd1429c9b664 --- /dev/null +++ b/testdata/message2/spec/fallback.json @@ -0,0 +1,52 @@ +{ + "$schema": "https://raw.githubusercontent.com/unicode-org/message-format-wg/main/test/schemas/v0/tests.schema.json", + "scenario": "Fallback", + "description": "Test cases for fallback behaviour.", + "defaultTestProperties": { + "bidiIsolation": "none", + "locale": "en-US", + "expErrors": true + }, + "tests": [ + { + "description": "function with unquoted literal operand", + "src": "{42 :test:function fails=format}", + "exp": "{|42|}" + }, + { + "description": "function with quoted literal operand", + "src": "{|C:\\\\| :test:function fails=format}", + "exp": "{|C:\\\\|}" + }, + { + "description": "unannotated implicit input variable", + "src": "{$var}", + "exp": "{$var}" + }, + { + "description": "annotated implicit input variable", + "src": "{$var :number}", + "exp": "{$var}" + }, + { + "description": "local variable with unknown function in declaration", + "src": ".local $var = {|val| :test:undefined} {{{$var}}}", + "exp": "{$var}" + }, + { + "description": "function with local variable operand with unknown function in declaration", + "src": ".local $var = {|val| :test:undefined} {{{$var :test:function}}}", + "exp": "{$var}" + }, + { + "description": "local variable with unknown function in placeholder", + "src": ".local $var = {|val|} {{{$var :test:undefined}}}", + "exp": "{$var}" + }, + { + "description": "function with no operand", + "src": "{:test:undefined}", + "exp": "{:test:undefined}" + } + ] +} diff --git a/testdata/message2/spec/functions/date.json b/testdata/message2/spec/functions/date.json index 494ca8d23458..625eb9712e46 100644 --- a/testdata/message2/spec/functions/date.json +++ b/testdata/message2/spec/functions/date.json @@ -3,6 +3,7 @@ "scenario": "Date function", "description": "The built-in formatter for dates.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US", "expErrors": false }, @@ -35,10 +36,10 @@ "src": "{|2006-01-02| :date style=long}" }, { - "src": ".local $d = {|2006-01-02| :date style=long} {{{$d :date}}}" + "src": ".local $d = {|2006-01-02| :date style=long} {{{$d}}}" }, { - "src": ".local $t = {|2006-01-02T15:04:06| :time} {{{$t :date}}}" + "src": ".local $d = {|2006-01-02| :datetime dateStyle=long timeStyle=long} {{{$d :date}}}" } ] } diff --git a/testdata/message2/spec/functions/datetime.json b/testdata/message2/spec/functions/datetime.json index 758a8bbaa004..a5f3bd00bc9d 100644 --- a/testdata/message2/spec/functions/datetime.json +++ b/testdata/message2/spec/functions/datetime.json @@ -3,6 +3,7 @@ "scenario": "Datetime function", "description": "The built-in formatter for datetimes.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US", "expErrors": false }, diff --git a/testdata/message2/spec/functions/integer.json b/testdata/message2/spec/functions/integer.json index 4ea96941e179..f249cb27e500 100644 --- a/testdata/message2/spec/functions/integer.json +++ b/testdata/message2/spec/functions/integer.json @@ -3,6 +3,7 @@ "scenario": "Integer function", "description": "The built-in formatter for integers.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US" }, "tests": [ @@ -19,14 +20,18 @@ "exp": "hello 4" }, { - "src": ".input {$foo :integer} .match $foo 1 {{one}} * {{other}}", - "params": [ - { - "name": "foo", - "value": 1.2 - } - ], - "exp": "one" + "src": ".input {$foo :integer} .match $foo 1 {{=1}} * {{other}}", + "params": [{ "name": "foo", "value": 1.2 }], + "exp": "=1" + }, + { + "src": ".input {$foo :integer} .match $foo 1 {{=1}} one {{one}} * {{other}}", + "params": [{ "name": "foo", "value": 1.2 }], + "exp": "=1" + }, + { + "src": ".local $x = {1.25 :integer} .local $y = {$x :number} {{{$y}}}", + "exp": "1" } ] } diff --git a/testdata/message2/spec/functions/number.json b/testdata/message2/spec/functions/number.json index 2b00d83e4957..dee7b9c01376 100644 --- a/testdata/message2/spec/functions/number.json +++ b/testdata/message2/spec/functions/number.json @@ -3,6 +3,7 @@ "scenario": "Number function", "description": "The built-in formatter for numbers.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US" }, "tests": [ @@ -131,33 +132,14 @@ }, { "src": ".local $foo = {$bar :number minimumFractionDigits=foo} {{bar {$foo}}}", - "params": [ - { - "name": "bar", - "value": 4.2 - } - ], - "exp": "bar {$bar}", - "expErrors": [ - { - "type": "bad-option" - } - ] + "params": [{ "name": "bar", "value": 4.2 }], + "expErrors": [{ "type": "bad-option" }] }, { "src": ".local $foo = {$bar :number} {{bar {$foo}}}", - "params": [ - { - "name": "bar", - "value": "foo" - } - ], - "exp": "bar {$bar}", - "expErrors": [ - { - "type": "bad-operand" - } - ] + "params": [{ "name": "bar", "value": "foo" }], + "exp": "bar {$foo}", + "expErrors": [{ "type": "bad-operand" }] }, { "src": ".input {$foo :number} {{bar {$foo}}}", @@ -181,18 +163,8 @@ }, { "src": ".input {$foo :number minimumFractionDigits=foo} {{bar {$foo}}}", - "params": [ - { - "name": "foo", - "value": 4.2 - } - ], - "exp": "bar {$foo}", - "expErrors": [ - { - "type": "bad-option" - } - ] + "params": [{ "name": "foo", "value": 4.2 }], + "expErrors": [{ "type": "bad-option" }] }, { "src": ".input {$foo :number} {{bar {$foo}}}", diff --git a/testdata/message2/spec/functions/string.json b/testdata/message2/spec/functions/string.json index 1deb2ec66ce7..82f17380e585 100644 --- a/testdata/message2/spec/functions/string.json +++ b/testdata/message2/spec/functions/string.json @@ -3,6 +3,7 @@ "scenario": "String function", "description": "The built-in formatter for strings.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US" }, "tests": [ @@ -34,8 +35,7 @@ "value": null } ], - "exp": "other", - "ignoreCpp": "Explicit null doesn't work" + "exp": "other" }, { "src": ".input {$foo :string} .match $foo 1 {{one}} * {{other}}", @@ -45,6 +45,31 @@ "type": "unresolved-variable" } ] + }, + { + "description": "NFC: keys are normalized (unquoted)", + "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0A\u0323 {{Not normalized}} \u1E0C\u0307 {{Normalized}} * {{Wrong}}", + "expErrors": [{"type": "duplicate-variant"}] + }, + { + "description": "NFC: keys are normalized (quoted)", + "src": ".local $x = {\u1E0A\u0323 :string} .match $x |\u1E0A\u0323| {{Not normalized}} |\u1E0C\u0307| {{Normalized}} * {{Wrong}}", + "expErrors": [{"type": "duplicate-variant"}] + }, + { + "description": "NFC: keys are normalized (mixed)", + "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0A\u0323 {{Not normalized}} |\u1E0C\u0307| {{Normalized}} * {{Wrong}}", + "expErrors": [{"type": "duplicate-variant"}] + }, + { + "description": "NFC: :string normalizes the comparison value (un-normalized selector, normalized key)", + "src": ".local $x = {\u1E0A\u0323 :string} .match $x \u1E0C\u0307 {{Right}} * {{Wrong}}", + "exp": "Right" + }, + { + "description": "NFC: keys are normalized (normalized selector, un-normalized key)", + "src": ".local $x = {\u1E0C\u0307 :string} .match $x \u1E0A\u0323 {{Right}} * {{Wrong}}", + "exp": "Right" } ] } diff --git a/testdata/message2/spec/functions/time.json b/testdata/message2/spec/functions/time.json index 416d18a3efef..1f6cf2293132 100644 --- a/testdata/message2/spec/functions/time.json +++ b/testdata/message2/spec/functions/time.json @@ -3,6 +3,7 @@ "scenario": "Time function", "description": "The built-in formatter for times.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US", "expErrors": false }, @@ -32,10 +33,10 @@ "src": "{|2006-01-02T15:04:06| :time style=medium}" }, { - "src": ".local $t = {|2006-01-02T15:04:06| :time style=medium} {{{$t :time}}}" + "src": ".local $t = {|2006-01-02T15:04:06| :time style=medium} {{{$t}}}" }, { - "src": ".local $d = {|2006-01-02T15:04:06| :date} {{{$d :time}}}" + "src": ".local $t = {|2006-01-02T15:04:06| :datetime dateStyle=long timeStyle=long} {{{$t :time}}}" } ] } diff --git a/testdata/message2/spec/syntax.json b/testdata/message2/spec/syntax.json index 27b74b2f302c..d03024bc81a6 100644 --- a/testdata/message2/spec/syntax.json +++ b/testdata/message2/spec/syntax.json @@ -3,6 +3,7 @@ "scenario": "Syntax", "description": "Test cases that do not depend on any registry definitions.", "defaultTestProperties": { + "bidiIsolation": "none", "locale": "en-US" }, "tests": [ @@ -697,6 +698,43 @@ { "src": "{{trailing whitespace}} \n", "exp": "trailing whitespace" + }, + { + "description": "NFC: text is not normalized", + "src": "\u1E0A\u0323", + "exp": "\u1E0A\u0323" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is", + "src": ".local $\u0044\u0323\u0307 = {foo} {{{$\u1E0c\u0307}}}", + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is normalized, use isn't", + "src": ".local $\u1E0c\u0307 = {foo} {{{$\u0044\u0323\u0307}}}", + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is normalized, use isn't", + "src": ".input {$\u1E0c\u0307} {{{$\u0044\u0323\u0307}}}", + "params": [{"name": "\u1E0c\u0307", "value": "foo"}], + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is", + "src": ".input {$\u0044\u0323\u0307} {{{$\u1E0c\u0307}}}", + "params": [{"name": "\u0044\u0323\u0307", "value": "foo"}], + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is; reordering", + "src": ".local $\u0044\u0307\u0323 = {foo} {{{$\u1E0c\u0307}}}", + "exp": "foo" + }, + { + "description": "NFC: variables are compared to each other as-if normalized; decl is non-normalized, use is; special case mapping", + "src": ".local $\u0041\u030A\u0301 = {foo} {{{$\u01FA}}}", + "exp": "foo" } ] } diff --git a/tools/cldr/cldr-to-icu/pom.xml b/tools/cldr/cldr-to-icu/pom.xml index 0e77ed0c8b4a..93accd02f32f 100644 --- a/tools/cldr/cldr-to-icu/pom.xml +++ b/tools/cldr/cldr-to-icu/pom.xml @@ -20,7 +20,7 @@ 11 11 - 77.1-SNAPSHOT + 77.1 47.0-SNAPSHOT 32.1.1-jre 1.4.4 diff --git a/tools/cldr/cldr-to-icu/src/main/java/org/unicode/icu/tool/cldrtoicu/localedistance/LikelySubtagsBuilder.java b/tools/cldr/cldr-to-icu/src/main/java/org/unicode/icu/tool/cldrtoicu/localedistance/LikelySubtagsBuilder.java index edce6b06e90b..5e5fe7ca42b4 100644 --- a/tools/cldr/cldr-to-icu/src/main/java/org/unicode/icu/tool/cldrtoicu/localedistance/LikelySubtagsBuilder.java +++ b/tools/cldr/cldr-to-icu/src/main/java/org/unicode/icu/tool/cldrtoicu/localedistance/LikelySubtagsBuilder.java @@ -270,8 +270,10 @@ private static Map>> makeTable( // Add the special case for "und-Latn" => "en-Latn-US" (which is a bit of a // hack for language matching). - // TODO: Find out the history of this line and document it better. + // Temporary patch. Needs an update of the ICU algorithm to match CLDR. + // See https://unicode-org.atlassian.net/browse/ICU-23052 set(lsrTable, "und", "Latn", "", lsr("en", "Latn", "US")); + set(lsrTable, "und", "Latn", "RS", lsr("sr", "Latn", "RS")); logger.fine(lsrTable::toString); // Ensure that if "und-RR" => "ll-Ssss-RR", then we also add "Ssss" => "RR".