root/src/locale_to_unicode_flag.rs

// locale-to-unicode-flag.rs
//
// Copyright 2022 nee <nee-git@patchouli.garden>
// SPDX-License-Identifier: AGPL-3.0-or-later
use anyhow::{bail, Result};

const START_UNICODE: u32 = 0x1f1e6;
const START_ASCII: u32 = 65; // A
const END_ASCII: u32 = 91; // Z+1

// converts a locale string to a flag sequence
// Example: es_CL.UTF-8 -> ๐Ÿ‡จ๐Ÿ‡ฑ
// C.UTF-8 returns a c locale Error
// Locales that aren't formatted in LA_RE format returns an error
// case does not matter
pub fn locale_str_to_flag_sequence(locale_str: String) -> Result<String> {
    let locale_str = locale_str.to_uppercase();
    if locale_str.len() >= 5 && locale_str.get(2..3) == Some("_") {
        let location = &locale_str[3..5];
        region_str_to_flag_sequence(location.to_string())
    } else if locale_str.starts_with("C.") || locale_str == "C" {
        bail!("C locale")
    } else {
        bail!("invalid locale format, no region")
    }
}
// converts a 2char long region string to unicode flag sequence
// Example VN -> ๐Ÿ‡ป๐Ÿ‡ณ
pub fn region_str_to_flag_sequence(location: String) -> Result<String> {
    let upper = location.to_uppercase();
    let chars = upper.chars();
    if upper.len() < 2 {
        bail!("not a valid region, must be 2 characters long")
    }
    let mut failure: bool = false;
    let result = Ok(chars
        .into_iter()
        .map(|c| {
            let ascii = c as u32;
            if !(START_ASCII..END_ASCII).contains(&ascii) {
                // return Err("not a valid region, must only contain A-Z")
                failure = true;
                return '1';
            }
            std::char::from_u32(START_UNICODE + (ascii - START_ASCII)).unwrap_or_else(|| {
                failure = true;
                '2'
            })
        })
        .collect());
    if failure {
        bail!("failed to convert ascii to unicode")
    } else {
        result
    }
}

#[cfg(test)]
mod test {
    use super::*;

    fn check(a: &str, b: &str) {
        assert_eq!(
            locale_str_to_flag_sequence(a.to_string()).unwrap(),
            b.to_string()
        )
    }

    fn check_r(a: &str, b: &str) {
        assert_eq!(
            region_str_to_flag_sequence(a.to_string()).unwrap(),
            b.to_string()
        )
    }

    #[test]
    fn it_works() {
        assert_eq!(
            locale_str_to_flag_sequence("C.UTF-8".to_string()).ok(),
            None
        );

        check("cs_CZ", "๐Ÿ‡จ๐Ÿ‡ฟ");
        check("de_DE", "๐Ÿ‡ฉ๐Ÿ‡ช");
        check("de_DE.UTF-8", "๐Ÿ‡ฉ๐Ÿ‡ช");
        check("en_AU", "๐Ÿ‡ฆ๐Ÿ‡บ");
        check("en_AU.UTF-8", "๐Ÿ‡ฆ๐Ÿ‡บ");
        check("en_CA", "๐Ÿ‡จ๐Ÿ‡ฆ");
        check("en_GB", "๐Ÿ‡ฌ๐Ÿ‡ง");
        check("en_GB.UTF-8", "๐Ÿ‡ฌ๐Ÿ‡ง");
        check("en_IE", "๐Ÿ‡ฎ๐Ÿ‡ช");
        check("en_US", "๐Ÿ‡บ๐Ÿ‡ธ");
        check("en_US.UTF-8", "๐Ÿ‡บ๐Ÿ‡ธ");
        check("es_CL.UTF-8", "๐Ÿ‡จ๐Ÿ‡ฑ");
        check("es_ES.UTF-8", "๐Ÿ‡ช๐Ÿ‡ธ");
        check("fr_FR", "๐Ÿ‡ซ๐Ÿ‡ท");
        check("fr_FR.UTF-8", "๐Ÿ‡ซ๐Ÿ‡ท");
        check("it_IT.UTF-8", "๐Ÿ‡ฎ๐Ÿ‡น");
        check("pl_PL", "๐Ÿ‡ต๐Ÿ‡ฑ");
        check("pl_PL.UTF-8", "๐Ÿ‡ต๐Ÿ‡ฑ");
        check("pt_BR", "๐Ÿ‡ง๐Ÿ‡ท");
        check("pt_BR.UTF-8", "๐Ÿ‡ง๐Ÿ‡ท");

        check_r("AC", "๐Ÿ‡ฆ๐Ÿ‡จ"); //   Ascension Island
        check_r("AD", "๐Ÿ‡ฆ๐Ÿ‡ฉ"); //   Andorra
        check_r("AE", "๐Ÿ‡ฆ๐Ÿ‡ช"); //   United Arab Emirates
        check_r("AF", "๐Ÿ‡ฆ๐Ÿ‡ซ"); //   Afghanistan
        check_r("AG", "๐Ÿ‡ฆ๐Ÿ‡ฌ"); //   Antigua & Barbuda
        check_r("AI", "๐Ÿ‡ฆ๐Ÿ‡ฎ"); //   Anguilla
        check_r("AL", "๐Ÿ‡ฆ๐Ÿ‡ฑ"); //   Albania
        check_r("AM", "๐Ÿ‡ฆ๐Ÿ‡ฒ"); //   Armenia
        check_r("AO", "๐Ÿ‡ฆ๐Ÿ‡ด"); //   Angola
        check_r("AQ", "๐Ÿ‡ฆ๐Ÿ‡ถ"); //   Antarctica
        check_r("AR", "๐Ÿ‡ฆ๐Ÿ‡ท"); //   Argentina
        check_r("AS", "๐Ÿ‡ฆ๐Ÿ‡ธ"); //   American Samoa
        check_r("AT", "๐Ÿ‡ฆ๐Ÿ‡น"); //   Austria
        check_r("AU", "๐Ÿ‡ฆ๐Ÿ‡บ"); //   Australia
        check_r("AW", "๐Ÿ‡ฆ๐Ÿ‡ผ"); //   Aruba
        check_r("AX", "๐Ÿ‡ฆ๐Ÿ‡ฝ"); //   ร…land Islands
        check_r("AZ", "๐Ÿ‡ฆ๐Ÿ‡ฟ"); //   Azerbaijan
        check_r("BA", "๐Ÿ‡ง๐Ÿ‡ฆ"); //   Bosnia & Herzegovina
        check_r("BB", "๐Ÿ‡ง๐Ÿ‡ง"); //   Barbados
        check_r("BD", "๐Ÿ‡ง๐Ÿ‡ฉ"); //   Bangladesh
        check_r("BE", "๐Ÿ‡ง๐Ÿ‡ช"); //   Belgium
        check_r("BF", "๐Ÿ‡ง๐Ÿ‡ซ"); //   Burkina Faso
        check_r("BG", "๐Ÿ‡ง๐Ÿ‡ฌ"); //   Bulgaria
        check_r("BH", "๐Ÿ‡ง๐Ÿ‡ญ"); //   Bahrain
        check_r("BI", "๐Ÿ‡ง๐Ÿ‡ฎ"); //   Burundi
        check_r("BJ", "๐Ÿ‡ง๐Ÿ‡ฏ"); //   Benin
        check_r("BL", "๐Ÿ‡ง๐Ÿ‡ฑ"); //   St. Barthรฉlemy
        check_r("BM", "๐Ÿ‡ง๐Ÿ‡ฒ"); //   Bermuda
        check_r("BN", "๐Ÿ‡ง๐Ÿ‡ณ"); //   Brunei
        check_r("BO", "๐Ÿ‡ง๐Ÿ‡ด"); //   Bolivia
        check_r("BQ", "๐Ÿ‡ง๐Ÿ‡ถ"); //   Caribbean Netherlands
        check_r("BR", "๐Ÿ‡ง๐Ÿ‡ท"); //   Brazil
        check_r("BS", "๐Ÿ‡ง๐Ÿ‡ธ"); //   Bahamas
        check_r("BT", "๐Ÿ‡ง๐Ÿ‡น"); //   Bhutan
        check_r("BV", "๐Ÿ‡ง๐Ÿ‡ป"); //   Bouvet Island
        check_r("BW", "๐Ÿ‡ง๐Ÿ‡ผ"); //   Botswana
        check_r("BY", "๐Ÿ‡ง๐Ÿ‡พ"); //   Belarus
        check_r("BZ", "๐Ÿ‡ง๐Ÿ‡ฟ"); //   Belize
        check_r("CA", "๐Ÿ‡จ๐Ÿ‡ฆ"); //   Canada
        check_r("CC", "๐Ÿ‡จ๐Ÿ‡จ"); //   Cocos (Keeling) Islands
        check_r("CD", "๐Ÿ‡จ๐Ÿ‡ฉ"); //   Congo - Kinshasa
        check_r("CF", "๐Ÿ‡จ๐Ÿ‡ซ"); //   Central African Republic
        check_r("CG", "๐Ÿ‡จ๐Ÿ‡ฌ"); //   Congo - Brazzaville
        check_r("CH", "๐Ÿ‡จ๐Ÿ‡ญ"); //   Switzerland
        check_r("CI", "๐Ÿ‡จ๐Ÿ‡ฎ"); //   Cรดte d'Ivoire
        check_r("CK", "๐Ÿ‡จ๐Ÿ‡ฐ"); //   Cook Islands
        check_r("CL", "๐Ÿ‡จ๐Ÿ‡ฑ"); //   Chile
        check_r("CM", "๐Ÿ‡จ๐Ÿ‡ฒ"); //   Cameroon
        check_r("CN", "๐Ÿ‡จ๐Ÿ‡ณ"); //   China
        check_r("CO", "๐Ÿ‡จ๐Ÿ‡ด"); //   Colombia
        check_r("CP", "๐Ÿ‡จ๐Ÿ‡ต"); //   Clipperton Island
        check_r("CR", "๐Ÿ‡จ๐Ÿ‡ท"); //   Costa Rica
        check_r("CU", "๐Ÿ‡จ๐Ÿ‡บ"); //   Cuba
        check_r("CV", "๐Ÿ‡จ๐Ÿ‡ป"); //   Cape Verde
        check_r("CW", "๐Ÿ‡จ๐Ÿ‡ผ"); //   Curaรงao
        check_r("CX", "๐Ÿ‡จ๐Ÿ‡ฝ"); //   Christmas Island
        check_r("CY", "๐Ÿ‡จ๐Ÿ‡พ"); //   Cyprus
        check_r("CZ", "๐Ÿ‡จ๐Ÿ‡ฟ"); //   Czechia
        check_r("DE", "๐Ÿ‡ฉ๐Ÿ‡ช"); //   Germany
        check_r("DG", "๐Ÿ‡ฉ๐Ÿ‡ฌ"); //   Diego Garcia
        check_r("DJ", "๐Ÿ‡ฉ๐Ÿ‡ฏ"); //   Djibouti
        check_r("DK", "๐Ÿ‡ฉ๐Ÿ‡ฐ"); //   Denmark
        check_r("DM", "๐Ÿ‡ฉ๐Ÿ‡ฒ"); //   Dominica
        check_r("DO", "๐Ÿ‡ฉ๐Ÿ‡ด"); //   Dominican Republic
        check_r("DZ", "๐Ÿ‡ฉ๐Ÿ‡ฟ"); //   Algeria
        check_r("EA", "๐Ÿ‡ช๐Ÿ‡ฆ"); //   Ceuta & Melilla
        check_r("EC", "๐Ÿ‡ช๐Ÿ‡จ"); //   Ecuador
        check_r("EE", "๐Ÿ‡ช๐Ÿ‡ช"); //   Estonia
        check_r("EG", "๐Ÿ‡ช๐Ÿ‡ฌ"); //   Egypt
        check_r("EH", "๐Ÿ‡ช๐Ÿ‡ญ"); //   Western Sahara
        check_r("ER", "๐Ÿ‡ช๐Ÿ‡ท"); //   Eritrea
        check_r("ES", "๐Ÿ‡ช๐Ÿ‡ธ"); //   Spain
        check_r("ET", "๐Ÿ‡ช๐Ÿ‡น"); //   Ethiopia
        check_r("EU", "๐Ÿ‡ช๐Ÿ‡บ"); //   European Union
        check_r("FI", "๐Ÿ‡ซ๐Ÿ‡ฎ"); //   Finland
        check_r("FJ", "๐Ÿ‡ซ๐Ÿ‡ฏ"); //   Fiji
        check_r("FK", "๐Ÿ‡ซ๐Ÿ‡ฐ"); //   Falkland Islands
        check_r("FM", "๐Ÿ‡ซ๐Ÿ‡ฒ"); //   Micronesia
        check_r("FO", "๐Ÿ‡ซ๐Ÿ‡ด"); //   Faroe Islands
        check_r("FR", "๐Ÿ‡ซ๐Ÿ‡ท"); //   France
        check_r("GA", "๐Ÿ‡ฌ๐Ÿ‡ฆ"); //   Gabon
        check_r("GB", "๐Ÿ‡ฌ๐Ÿ‡ง"); //   United Kingdom
        check_r("GD", "๐Ÿ‡ฌ๐Ÿ‡ฉ"); //   Grenada
        check_r("GE", "๐Ÿ‡ฌ๐Ÿ‡ช"); //   Georgia
        check_r("GF", "๐Ÿ‡ฌ๐Ÿ‡ซ"); //   French Guiana
        check_r("GG", "๐Ÿ‡ฌ๐Ÿ‡ฌ"); //   Guernsey
        check_r("GH", "๐Ÿ‡ฌ๐Ÿ‡ญ"); //   Ghana
        check_r("GI", "๐Ÿ‡ฌ๐Ÿ‡ฎ"); //   Gibraltar
        check_r("GL", "๐Ÿ‡ฌ๐Ÿ‡ฑ"); //   Greenland
        check_r("GM", "๐Ÿ‡ฌ๐Ÿ‡ฒ"); //   Gambia
        check_r("GN", "๐Ÿ‡ฌ๐Ÿ‡ณ"); //   Guinea
        check_r("GP", "๐Ÿ‡ฌ๐Ÿ‡ต"); //   Guadeloupe
        check_r("GQ", "๐Ÿ‡ฌ๐Ÿ‡ถ"); //   Equatorial Guinea
        check_r("GR", "๐Ÿ‡ฌ๐Ÿ‡ท"); //   Greece
        check_r("GS", "๐Ÿ‡ฌ๐Ÿ‡ธ"); //   South Georgia & South Sandwich Islands
        check_r("GT", "๐Ÿ‡ฌ๐Ÿ‡น"); //   Guatemala
        check_r("GU", "๐Ÿ‡ฌ๐Ÿ‡บ"); //   Guam
        check_r("GW", "๐Ÿ‡ฌ๐Ÿ‡ผ"); //   Guinea-Bissau
        check_r("GY", "๐Ÿ‡ฌ๐Ÿ‡พ"); //   Guyana
        check_r("HK", "๐Ÿ‡ญ๐Ÿ‡ฐ"); //   Hong Kong SAR China
        check_r("HM", "๐Ÿ‡ญ๐Ÿ‡ฒ"); //   Heard & McDonald Islands
        check_r("HN", "๐Ÿ‡ญ๐Ÿ‡ณ"); //   Honduras
        check_r("HR", "๐Ÿ‡ญ๐Ÿ‡ท"); //   Croatia
        check_r("HT", "๐Ÿ‡ญ๐Ÿ‡น"); //   Haiti
        check_r("HU", "๐Ÿ‡ญ๐Ÿ‡บ"); //   Hungary
        check_r("IC", "๐Ÿ‡ฎ๐Ÿ‡จ"); //   Canary Islands
        check_r("ID", "๐Ÿ‡ฎ๐Ÿ‡ฉ"); //   Indonesia
        check_r("IE", "๐Ÿ‡ฎ๐Ÿ‡ช"); //   Ireland
        check_r("IL", "๐Ÿ‡ฎ๐Ÿ‡ฑ"); //   Israel
        check_r("IM", "๐Ÿ‡ฎ๐Ÿ‡ฒ"); //   Isle of Man
        check_r("IN", "๐Ÿ‡ฎ๐Ÿ‡ณ"); //   India
        check_r("IO", "๐Ÿ‡ฎ๐Ÿ‡ด"); //   British Indian Ocean Territory
        check_r("IQ", "๐Ÿ‡ฎ๐Ÿ‡ถ"); //   Iraq
        check_r("IR", "๐Ÿ‡ฎ๐Ÿ‡ท"); //   Iran
        check_r("IS", "๐Ÿ‡ฎ๐Ÿ‡ธ"); //   Iceland
        check_r("IT", "๐Ÿ‡ฎ๐Ÿ‡น"); //   Italy
        check_r("JE", "๐Ÿ‡ฏ๐Ÿ‡ช"); //   Jersey
        check_r("JM", "๐Ÿ‡ฏ๐Ÿ‡ฒ"); //   Jamaica
        check_r("JO", "๐Ÿ‡ฏ๐Ÿ‡ด"); //   Jordan
        check_r("JP", "๐Ÿ‡ฏ๐Ÿ‡ต"); //   Japan
        check_r("KE", "๐Ÿ‡ฐ๐Ÿ‡ช"); //   Kenya
        check_r("KG", "๐Ÿ‡ฐ๐Ÿ‡ฌ"); //   Kyrgyzstan
        check_r("KH", "๐Ÿ‡ฐ๐Ÿ‡ญ"); //   Cambodia
        check_r("KI", "๐Ÿ‡ฐ๐Ÿ‡ฎ"); //   Kiribati
        check_r("KM", "๐Ÿ‡ฐ๐Ÿ‡ฒ"); //   Comoros
        check_r("KN", "๐Ÿ‡ฐ๐Ÿ‡ณ"); //   St. Kitts & Nevis
        check_r("KP", "๐Ÿ‡ฐ๐Ÿ‡ต"); //   North Korea
        check_r("KR", "๐Ÿ‡ฐ๐Ÿ‡ท"); //   South Korea
        check_r("KW", "๐Ÿ‡ฐ๐Ÿ‡ผ"); //   Kuwait
        check_r("KY", "๐Ÿ‡ฐ๐Ÿ‡พ"); //   Cayman Islands
        check_r("KZ", "๐Ÿ‡ฐ๐Ÿ‡ฟ"); //   Kazakhstan
        check_r("LA", "๐Ÿ‡ฑ๐Ÿ‡ฆ"); //   Laos
        check_r("LB", "๐Ÿ‡ฑ๐Ÿ‡ง"); //   Lebanon
        check_r("LC", "๐Ÿ‡ฑ๐Ÿ‡จ"); //   St. Lucia
        check_r("LI", "๐Ÿ‡ฑ๐Ÿ‡ฎ"); //   Liechtenstein
        check_r("LK", "๐Ÿ‡ฑ๐Ÿ‡ฐ"); //   Sri Lanka
        check_r("LR", "๐Ÿ‡ฑ๐Ÿ‡ท"); //   Liberia
        check_r("LS", "๐Ÿ‡ฑ๐Ÿ‡ธ"); //   Lesotho
        check_r("LT", "๐Ÿ‡ฑ๐Ÿ‡น"); //   Lithuania
        check_r("LU", "๐Ÿ‡ฑ๐Ÿ‡บ"); //   Luxembourg
        check_r("LV", "๐Ÿ‡ฑ๐Ÿ‡ป"); //   Latvia
        check_r("LY", "๐Ÿ‡ฑ๐Ÿ‡พ"); //   Libya
        check_r("MA", "๐Ÿ‡ฒ๐Ÿ‡ฆ"); //   Morocco
        check_r("MC", "๐Ÿ‡ฒ๐Ÿ‡จ"); //   Monaco
        check_r("MD", "๐Ÿ‡ฒ๐Ÿ‡ฉ"); //   Moldova
        check_r("ME", "๐Ÿ‡ฒ๐Ÿ‡ช"); //   Montenegro
        check_r("MF", "๐Ÿ‡ฒ๐Ÿ‡ซ"); //   St. Martin
        check_r("MG", "๐Ÿ‡ฒ๐Ÿ‡ฌ"); //   Madagascar
        check_r("MH", "๐Ÿ‡ฒ๐Ÿ‡ญ"); //   Marshall Islands
        check_r("MK", "๐Ÿ‡ฒ๐Ÿ‡ฐ"); //   North Macedonia
        check_r("ML", "๐Ÿ‡ฒ๐Ÿ‡ฑ"); //   Mali
        check_r("MM", "๐Ÿ‡ฒ๐Ÿ‡ฒ"); //   Myanmar (Burma)
        check_r("MN", "๐Ÿ‡ฒ๐Ÿ‡ณ"); //   Mongolia
        check_r("MO", "๐Ÿ‡ฒ๐Ÿ‡ด"); //   Macao SAR China
        check_r("MP", "๐Ÿ‡ฒ๐Ÿ‡ต"); //   Northern Mariana Islands
        check_r("MQ", "๐Ÿ‡ฒ๐Ÿ‡ถ"); //   Martinique
        check_r("MR", "๐Ÿ‡ฒ๐Ÿ‡ท"); //   Mauritania
        check_r("MS", "๐Ÿ‡ฒ๐Ÿ‡ธ"); //   Montserrat
        check_r("MT", "๐Ÿ‡ฒ๐Ÿ‡น"); //   Malta
        check_r("MU", "๐Ÿ‡ฒ๐Ÿ‡บ"); //   Mauritius
        check_r("MV", "๐Ÿ‡ฒ๐Ÿ‡ป"); //   Maldives
        check_r("MW", "๐Ÿ‡ฒ๐Ÿ‡ผ"); //   Malawi
        check_r("MX", "๐Ÿ‡ฒ๐Ÿ‡ฝ"); //   Mexico
        check_r("MY", "๐Ÿ‡ฒ๐Ÿ‡พ"); //   Malaysia
        check_r("MZ", "๐Ÿ‡ฒ๐Ÿ‡ฟ"); //   Mozambique
        check_r("NA", "๐Ÿ‡ณ๐Ÿ‡ฆ"); //   Namibia
        check_r("NC", "๐Ÿ‡ณ๐Ÿ‡จ"); //   New Caledonia
        check_r("NE", "๐Ÿ‡ณ๐Ÿ‡ช"); //   Niger
        check_r("NF", "๐Ÿ‡ณ๐Ÿ‡ซ"); //   Norfolk Island
        check_r("NG", "๐Ÿ‡ณ๐Ÿ‡ฌ"); //   Nigeria
        check_r("NI", "๐Ÿ‡ณ๐Ÿ‡ฎ"); //   Nicaragua
        check_r("NL", "๐Ÿ‡ณ๐Ÿ‡ฑ"); //   Netherlands
        check_r("NO", "๐Ÿ‡ณ๐Ÿ‡ด"); //   Norway
        check_r("NP", "๐Ÿ‡ณ๐Ÿ‡ต"); //   Nepal
        check_r("NR", "๐Ÿ‡ณ๐Ÿ‡ท"); //   Nauru
        check_r("NU", "๐Ÿ‡ณ๐Ÿ‡บ"); //   Niue
        check_r("NZ", "๐Ÿ‡ณ๐Ÿ‡ฟ"); //   New Zealand
        check_r("OM", "๐Ÿ‡ด๐Ÿ‡ฒ"); //   Oman
        check_r("PA", "๐Ÿ‡ต๐Ÿ‡ฆ"); //   Panama
        check_r("PE", "๐Ÿ‡ต๐Ÿ‡ช"); //   Peru
        check_r("PF", "๐Ÿ‡ต๐Ÿ‡ซ"); //   French Polynesia
        check_r("PG", "๐Ÿ‡ต๐Ÿ‡ฌ"); //   Papua New Guinea
        check_r("PH", "๐Ÿ‡ต๐Ÿ‡ญ"); //   Philippines
        check_r("PK", "๐Ÿ‡ต๐Ÿ‡ฐ"); //   Pakistan
        check_r("PL", "๐Ÿ‡ต๐Ÿ‡ฑ"); //   Poland
        check_r("PM", "๐Ÿ‡ต๐Ÿ‡ฒ"); //   St. Pierre & Miquelon
        check_r("PN", "๐Ÿ‡ต๐Ÿ‡ณ"); //   Pitcairn Islands
        check_r("PR", "๐Ÿ‡ต๐Ÿ‡ท"); //   Puerto Rico
        check_r("PS", "๐Ÿ‡ต๐Ÿ‡ธ"); //   Palestinian Territories
        check_r("PT", "๐Ÿ‡ต๐Ÿ‡น"); //   Portugal
        check_r("PW", "๐Ÿ‡ต๐Ÿ‡ผ"); //   Palau
        check_r("PY", "๐Ÿ‡ต๐Ÿ‡พ"); //   Paraguay
        check_r("QA", "๐Ÿ‡ถ๐Ÿ‡ฆ"); //   Qatar
        check_r("RE", "๐Ÿ‡ท๐Ÿ‡ช"); //   Rรฉunion
        check_r("RO", "๐Ÿ‡ท๐Ÿ‡ด"); //   Romania
        check_r("RS", "๐Ÿ‡ท๐Ÿ‡ธ"); //   Serbia
        check_r("RU", "๐Ÿ‡ท๐Ÿ‡บ"); //   Russia
        check_r("RW", "๐Ÿ‡ท๐Ÿ‡ผ"); //   Rwanda
        check_r("SA", "๐Ÿ‡ธ๐Ÿ‡ฆ"); //   Saudi Arabia
        check_r("SB", "๐Ÿ‡ธ๐Ÿ‡ง"); //   Solomon Islands
        check_r("SC", "๐Ÿ‡ธ๐Ÿ‡จ"); //   Seychelles
        check_r("SD", "๐Ÿ‡ธ๐Ÿ‡ฉ"); //   Sudan
        check_r("SE", "๐Ÿ‡ธ๐Ÿ‡ช"); //   Sweden
        check_r("SG", "๐Ÿ‡ธ๐Ÿ‡ฌ"); //   Singapore
        check_r("SH", "๐Ÿ‡ธ๐Ÿ‡ญ"); //   St. Helena
        check_r("SI", "๐Ÿ‡ธ๐Ÿ‡ฎ"); //   Slovenia
        check_r("SJ", "๐Ÿ‡ธ๐Ÿ‡ฏ"); //   Svalbard & Jan Mayen
        check_r("SK", "๐Ÿ‡ธ๐Ÿ‡ฐ"); //   Slovakia
        check_r("SL", "๐Ÿ‡ธ๐Ÿ‡ฑ"); //   Sierra Leone
        check_r("SM", "๐Ÿ‡ธ๐Ÿ‡ฒ"); //   San Marino
        check_r("SN", "๐Ÿ‡ธ๐Ÿ‡ณ"); //   Senegal
        check_r("SO", "๐Ÿ‡ธ๐Ÿ‡ด"); //   Somalia
        check_r("SR", "๐Ÿ‡ธ๐Ÿ‡ท"); //   Suriname
        check_r("SS", "๐Ÿ‡ธ๐Ÿ‡ธ"); //   South Sudan
        check_r("ST", "๐Ÿ‡ธ๐Ÿ‡น"); //   Sรฃo Tomรฉ & Prรญncipe
        check_r("SV", "๐Ÿ‡ธ๐Ÿ‡ป"); //   El Salvador
        check_r("SX", "๐Ÿ‡ธ๐Ÿ‡ฝ"); //   Sint Maarten
        check_r("SY", "๐Ÿ‡ธ๐Ÿ‡พ"); //   Syria
        check_r("SZ", "๐Ÿ‡ธ๐Ÿ‡ฟ"); //   Eswatini
        check_r("TA", "๐Ÿ‡น๐Ÿ‡ฆ"); //   Tristan da Cunha
        check_r("TC", "๐Ÿ‡น๐Ÿ‡จ"); //   Turks & Caicos Islands
        check_r("TD", "๐Ÿ‡น๐Ÿ‡ฉ"); //   Chad
        check_r("TF", "๐Ÿ‡น๐Ÿ‡ซ"); //   French Southern Territories
        check_r("TG", "๐Ÿ‡น๐Ÿ‡ฌ"); //   Togo
        check_r("TH", "๐Ÿ‡น๐Ÿ‡ญ"); //   Thailand
        check_r("TJ", "๐Ÿ‡น๐Ÿ‡ฏ"); //   Tajikistan
        check_r("TK", "๐Ÿ‡น๐Ÿ‡ฐ"); //   Tokelau
        check_r("TL", "๐Ÿ‡น๐Ÿ‡ฑ"); //   Timor-Leste
        check_r("TM", "๐Ÿ‡น๐Ÿ‡ฒ"); //   Turkmenistan
        check_r("TN", "๐Ÿ‡น๐Ÿ‡ณ"); //   Tunisia
        check_r("TO", "๐Ÿ‡น๐Ÿ‡ด"); //   Tonga
        check_r("TR", "๐Ÿ‡น๐Ÿ‡ท"); //   Turkey
        check_r("TT", "๐Ÿ‡น๐Ÿ‡น"); //   Trinidad & Tobago
        check_r("TV", "๐Ÿ‡น๐Ÿ‡ป"); //   Tuvalu
        check_r("TW", "๐Ÿ‡น๐Ÿ‡ผ"); //   Taiwan
        check_r("TZ", "๐Ÿ‡น๐Ÿ‡ฟ"); //   Tanzania
        check_r("UA", "๐Ÿ‡บ๐Ÿ‡ฆ"); //   Ukraine
        check_r("UG", "๐Ÿ‡บ๐Ÿ‡ฌ"); //   Uganda
        check_r("UM", "๐Ÿ‡บ๐Ÿ‡ฒ"); //   U.S. Outlying Islands
        check_r("UN", "๐Ÿ‡บ๐Ÿ‡ณ"); //   United Nations
        check_r("US", "๐Ÿ‡บ๐Ÿ‡ธ"); //   United States
        check_r("UY", "๐Ÿ‡บ๐Ÿ‡พ"); //   Uruguay
        check_r("UZ", "๐Ÿ‡บ๐Ÿ‡ฟ"); //   Uzbekistan
        check_r("VA", "๐Ÿ‡ป๐Ÿ‡ฆ"); //   Vatican City
        check_r("VC", "๐Ÿ‡ป๐Ÿ‡จ"); //   St. Vincent & Grenadines
        check_r("VE", "๐Ÿ‡ป๐Ÿ‡ช"); //   Venezuela
        check_r("VG", "๐Ÿ‡ป๐Ÿ‡ฌ"); //   British Virgin Islands
        check_r("VI", "๐Ÿ‡ป๐Ÿ‡ฎ"); //   U.S. Virgin Islands
        check_r("VN", "๐Ÿ‡ป๐Ÿ‡ณ"); //   Vietnam
        check_r("VU", "๐Ÿ‡ป๐Ÿ‡บ"); //   Vanuatu
        check_r("WF", "๐Ÿ‡ผ๐Ÿ‡ซ"); //   Wallis & Futuna
        check_r("WS", "๐Ÿ‡ผ๐Ÿ‡ธ"); //   Samoa
        check_r("XK", "๐Ÿ‡ฝ๐Ÿ‡ฐ"); //   Kosovo
        check_r("YE", "๐Ÿ‡พ๐Ÿ‡ช"); //   Yemen
        check_r("YT", "๐Ÿ‡พ๐Ÿ‡น"); //   Mayotte
        check_r("ZA", "๐Ÿ‡ฟ๐Ÿ‡ฆ"); //   South Africa
        check_r("ZM", "๐Ÿ‡ฟ๐Ÿ‡ฒ"); //   Zambia
        check_r("ZW", "๐Ÿ‡ฟ๐Ÿ‡ผ"); //   Zimbabwe
    }
}