--
-- to enable us to replicate the current functioning of CountryAbbr and CountryAbbr2
-- We need to deal with 
-- 1 alternative names ISO 3166 should do that
-- 2 
-- 3 [ [] ]
-- 4 [ [] ]
-- 5 [ [image:flag of .[svg|gif|png|jpg]|\d+px] ]
--

function p.extractCountry(frame)
 local string= mw.ustring.toNFC (frame.args[1])
 local match=nil;
 match = mw.ustring.match(string, "Flag of ([^\.]*)")
 if (match) then 
 return match
 end 
-- for Cocos (Keeling) Islands
-- ' For People's 
-- . for U.S. etc.
 match = mw.ustring.match(string, "(%u[%a\(\)\.' -]+)")
 if (match == "Image") then
 string = mw.ustring.gsub
 match = mw.ustring.match(string, "[\|\[](%u[%a\(\)\.' -]+)")
 end
 if (match == "20px") then
 string = mw.ustring.gsub
 match = mw.ustring.match(string, "\[(%u[%a\(\)\.' -]+)")
 end 
 if (match) then 
 return match
 end
 return string
end

-- 



function p.extractSubdivision(frame)
 local string= mw.ustring.toNFC (frame.args[1])
 local match=nil;
-- Needed for ,
 match = mw.ustring.match(string, "Flag of ([^\.]*)")
 if (match) then 
 return match
 end 
-- . needed for Washington D.C. 
-- ' for cote d'azur
-- leading ' for 'Aden
-- ‘ and trailing ' for Şan‘ā'
 match = mw.ustring.match(string, "")
 if (match) then 
 return match
 end
 return string
end

local countries = {
	["Andorra"] = "AD",
	["United Arab Emirates"] = "AE",
	["UAE"] = "AE",
	["Afghanistan"] = "AF",
	["Antigua and Barbuda"] = "AG",
	["Anguilla"] = "AI",
	["Albania"] = "AL",
	["Armenia"] = "AM",
	["Angola"] = "AO",
	["Antarctica"] = "AQ",
	["Argentina"] = "AR",
	["American Samoa"] = "AS",
	["Austria"] = "AT",
	["Australia"] = "AU",
	["Aruba"] = "AW",
	["Åland Islands"] = "AX",
	["Aland Islands"] = "AX",
	["Azerbaijan"] = "AZ",
	["Nagorno-Karabakh"] = "AZ", -- disputed
	["Nagorno-Karabakh Republic"] = "AZ", -- disputed
	["Bosnia and Herzegovina"] = "BA",
	["Bosnia"] = "BA",
	["Barbados"] = "BB",
	["Bangladesh"] = "BD",
	["Belgium"] = "BE",
	["Burkina Faso"] = "BF",
	["Bulgaria"] = "BG",
	["Bahrain"] = "BH",
	["Burundi"] = "BI",
	["Benin"] = "BJ",
	["Saint Barthélemy"] = "BL",
	["Saint Barthelemy"] = "BL",
	["St. Barthélemy"] = "BL",
	["St. Barthelemy"] = "BL",
	["St Barthélemy"] = "BL",
	["St Barthelemy"] = "BL",
	["Bermuda"] = "BM",
	["Brunei"] = "BN",
	["Brunei Darussalam"] = "BN",
	["Bolivia"] = "BO",
	["Bolivia, Plurinational State of"] = "BO",
	["Bonaire, Sint Eustatius and Saba"] = "BQ",
	["Brazil"] = "BR",
	["Bahamas"] = "BS",
	["The Bahamas"] = "BS",
	["the Bahamas"] = "BS",
	["Bhutan"] = "BT",
	["Bouvet Island"] = "BV",
	["Botswana"] = "BW",
	["Belarus"] = "BY",
	["Belize"] = "BZ",
	["Canada"] = "CA",
	["Cocos (Keeling) Islands"] = "CC",
	["Cocos Islands"] = "CC",
	["Keeling Islands"] = "CC",
	["Congo, the Democratic Republic of the"] = "CD",
	["Democratic Republic of the Congo"] = "CD",
	["DR Congo"] = "CD",
	["Congo-Kinshasa"] = "CD",
	["DROC"] = "CD",
	["DRC"] = "CD",
	["Central African Republic"] = "CF",
	["CAR"] = "CF",
	["Congo"] = "CG",
	["Republic of the Congo"] = "CG",
	["Congo Republic"] = "CG",
	["Congo-Brazzaville"] = "CG",
	["West Congo"] = "CG",
	["Switzerland"] = "CH",
	["Côte d'Ivoire"] = "CI",
	["Ivory Coast"] = "CI",
	["Cook Islands"] = "CK",
	["Chile"] = "CL",
	["Cameroon"] = "CM",
	["China"] = "CN",
	["PRC"] = "CN",
	["People's Republic of China"] = "CN",
	["Colombia"] = "CO",
	["Costa Rica"] = "CR",
	["Cuba"] = "CU",
	["Cape Verde"] = "CV",
	["Curaçao"] = "CW",
	["Curacao"] = "CW",
	["Christmas Island"] = "CX",
	["Cyprus"] = "CY",
	["Republic of Cyprus"] = "CY",
	["Northern Cyprus"] = "CY", -- disputed
	["Turkish Republic of Northern Cyprus"] = "CY", -- disputed
	["Czech Republic"] = "CZ",
	["Germany"] = "DE",
	["Djibouti"] = "DJ",
	["Denmark"] = "DK",
	["Dominica"] = "DM",
	["Dominican Republic"] = "DO",
	["Algeria"] = "DZ",
	["Ecuador"] = "EC",
	["Estonia"] = "EE",
	["Egypt"] = "EG",
	["Western Sahara"] = "EH",
	["Eritrea"] = "ER",
	["Spain"] = "ES",
	["Ethiopia"] = "ET",
	["Finland"] = "FI",
	["Fiji"] = "FJ",
	["Falkland Islands (Malvinas)"] = "FK",
	["Falklands"] = "FK",
	["Falkland Islands"] = "FK",
	["Malvinas"] = "FK",
	["Malvinas Islands"] = "FK",
	["Micronesia, Federated States of"] = "FM",
	["Micronesia"] = "FM",
	["Faroe Islands"] = "FO",
	["France"] = "FR",
	["Gabon"] = "GA",
	["United Kingdom"] = "GB",
	["the United Kingdom"] = "GB",
	["U. K."] = "GB",
	["U.K."] = "GB",
	["the U.K."] = "GB",
	["UK"] = "GB",
	["the UK"] = "GB",
	["Great Britain"] = "GB",
	["England"] = "GB-ENG",
	["Scotland"] = "GB-SCT",
	["Wales"] = "GB-WLS",
	["Northern Ireland"] = "GB-NIR",
	["England and Wales"] = "GB-EAW",
	["Grenada"] = "GD",
	["Georgia"] = "GE",
	["South Ossetia"] = "GE", -- disputed
	["Tskhinvali Region"] = "GE", -- disputed
	["Abkhazia"] = "GE-AB", -- disputed
	["Republic of Abkhazia"] = "GE-AB", -- disputed
	["French Guiana"] = "GF",
	["Guernsey"] = "GG",
	["Ghana"] = "GH",
	["Gibraltar"] = "GI",
	["Greenland"] = "GL",
	["Gambia"] = "GM",
	["Guinea"] = "GN",
	["Guadeloupe"] = "GP",
	["Equatorial Guinea"] = "GQ",
	["Greece"] = "GR",
	["South Georgia and the South Sandwich Islands"] = "GS",
	["Guatemala"] = "GT",
	["Guam"] = "GU",
	["Guinea-Bissau"] = "GW",
	["Guyana"] = "GY",
	["Hong Kong"] = "HK",
	["Heard Island and McDonald Islands"] = "HM",
	["Heard and McDonald Islands"] = "HM",
	["Honduras"] = "HN",
	["Croatia"] = "HR",
	["Haiti"] = "HT",
	["Hungary"] = "HU",
	["Indonesia"] = "ID",
	["Ireland"] = "IE",
	["Israel"] = "IL",
	["Isle of Man"] = "IM",
	["India"] = "IN",
	["British Indian Ocean Territory"] = "IO",
	["Iraq"] = "IQ",
	["Iran, Islamic Republic of"] = "IR",
	["Iran"] = "IR",
	["Iceland"] = "IS",
	["Italy"] = "IT",
	["Jersey"] = "JE",
	["Jamaica"] = "JM",
	["Jordan"] = "JO",
	["Japan"] = "JP",
	["Kenya"] = "KE",
	["Kyrgyzstan"] = "KG",
	["Cambodia"] = "KH",
	["Kiribati"] = "KI",
	["Comoros"] = "KM",
	["The Comoros"] = "KM",
	["the Comoros"] = "KM",
	["Saint Kitts and Nevis"] = "KN",
	["St. Kitts and Nevis"] = "KN",
	["St Kitts and Nevis"] = "KN",
	["Korea, Democratic People's Republic of"] = "KP",
	["Democratic People's Republic of Korea"] = "KP",
	["North Korea"] = "KP",
	["Korea, Republic of"] = "KR",
	["Republic of Korea"] = "KR",
	["South Korea"] = "KR",
	["Kuwait"] = "KW",
	["Cayman Islands"] = "KY",
	["The Cayman Islands"] = "KY",
	["the Cayman Islands"] = "KY",
	["Kazakhstan"] = "KZ",
	["Lao People's Democratic Republic"] = "LA",
	["Laos"] = "LA",
	["Lao"] = "LA",
	["Lebanon"] = "LB",
	["Saint Lucia"] = "LC",
	["St. Lucia"] = "LC",
	["St Lucia"] = "LC",
	["Liechtenstein"] = "LI",
	["Sri Lanka"] = "LK",
	["Liberia"] = "LR",
	["Lesotho"] = "LS",
	["Lithuania"] = "LT",
	["Luxembourg"] = "LU",
	["Latvia"] = "LV",
	["Libyan Arab Jamahiriya"] = "LY",
	["Libya"] = "LY",
	["Morocco"] = "MA",
	["Monaco"] = "MC",
	["Moldova, Republic of"] = "MD",
	["Moldova"] = "MD",
	["Transnistria"] = "MD", -- disputed
	["Montenegro"] = "ME",
	["Saint Martin (French part)"] = "MF",
	["Saint Martin (France)"] = "MF",
	["Collectivity of Saint Martin"] = "MF",
	["Collectivity of St. Martin"] = "MF",
	["Collectivity of St Martin"] = "MF",
	["Saint-Martin"] = "MF",
	["Madagascar"] = "MG",
	["Marshall Islands"] = "MH",
	["Macedonia"] = "MK",
	["Mali"] = "ML",
	["Myanmar"] = "MM",
	["Burma"] = "MM",
	["Mongolia"] = "MN",
	["Macau"] = "MO",
	["Macao"] = "MO",
	["Northern Mariana Islands"] = "MP",
	["Martinique"] = "MQ",
	["Mauritania"] = "MR",
	["Montserrat"] = "MS",
	["Malta"] = "MT",
	["Mauritius"] = "MU",
	["Maldives"] = "MV",
	["Malawi"] = "MW",
	["Mexico"] = "MX",
	["Malaysia"] = "MY",
	["Mozambique"] = "MZ",
	["Namibia"] = "NA",
	["New Caledonia"] = "NC",
	["Niger"] = "NE",
	["Norfolk Island"] = "NF",
	["Nigeria"] = "NG",
	["Nicaragua"] = "NI",
	["Netherlands"] = "NL",
	["The Netherlands"] = "NL",
	["the Netherlands"] = "NL",
	["Norway"] = "NO",
	["Nepal"] = "NP",
	["Nauru"] = "NR",
	["Niue"] = "NU",
	["New Zealand"] = "NZ",
	["Aotearoa"] = "NZ",
	["Oman"] = "OM",
	["Panama"] = "PA",
	["Peru"] = "PE",
	["French Polynesia"] = "PF",
	["Papua New Guinea"] = "PG",
	["Philippines"] = "PH",
	["The Philippines"] = "PH",
	["the Philippines"] = "PH",
	["Pakistan"] = "PK",
	["Poland"] = "PL",
	["Saint Pierre and Miquelon"] = "PM",
	["St. Pierre and Miquelon"] = "PM",
	["St Pierre and Miquelon"] = "PM",
	["Pitcairn"] = "PN",
	["Puerto Rico"] = "PR",
	["State of Palestine"] = "PS",
	["Palestine"] = "PS",
	["Portugal"] = "PT",
	["Palau"] = "PW",
	["Paraguay"] = "PY",
	["Qatar"] = "QA",
	["Réunion"] = "RE",
	["Reunion"] = "RE",
	["Romania"] = "RO",
	["Serbia"] = "RS",
	["Kosovo"] = "RS", -- disputed
	["Russian Federation"] = "RU",
	["Russia"] = "RU",
	["Rwanda"] = "RW",
	["Saudi Arabia"] = "SA",
	["Solomon Islands"] = "SB",
	["Seychelles"] = "SC",
	["Sudan"] = "SD",
	["Sweden"] = "SE",
	["Singapore"] = "SG",
	["Saint Helena, Ascension and Tristan da Cunha"] = "SH",
	["Slovenia"] = "SI",
	["Svalbard and Jan Mayen"] = "SJ",
	["Slovakia"] = "SK",
	["Sierra Leone"] = "SL",
	["San Marino"] = "SM",
	["Senegal"] = "SN",
	["Somalia"] = "SO",
	["Somaliland"] = "SO", -- disputed
	["Suriname"] = "SR",
	["South Sudan"] = "SS",
	["São Tomé and Príncipe"] = "ST",
	["Sao Tome and Principe"] = "ST",
	["El Salvador"] = "SV",
	["Sint Maarten"] = "SX",
	["Saint Martin (Dutch part)"] = "SX",
	["Saint Martin (Netherlands)"] = "SX",
	["Syrian Arab Republic"] = "SY",
	["Syria"] = "SY",
	["Swaziland"] = "SZ",
	["Turks and Caicos Islands"] = "TC",
	["Chad"] = "TD",
	["French Southern Territories"] = "TF",
	["Togo"] = "TG",
	["Thailand"] = "TH",
	["Tajikistan"] = "TJ",
	["Tokelau"] = "TK",
	["Timor-Leste"] = "TL",
	["East Timor"] = "TL",
	["Turkmenistan"] = "TM",
	["Tunisia"] = "TN",
	["Tonga"] = "TO",
	["Turkey"] = "TR",
	["Trinidad and Tobago"] = "TT",
	["Tuvalu"] = "TV",
	["Taiwan"] = "TW",
	["Republic of China"] = "TW",
	["Tanzania, United Republic of"] = "TZ",
	["Tanzania"] = "TZ",
	["Ukraine"] = "UA",
	["The Ukraine"] = "UA",
	["the Ukraine"] = "UA",
	["Uganda"] = "UG",
	["United States Minor Outlying Islands"] = "UM",
	["United States"] = "US",
	["the United States"] = "US",
	["United States of America"] = "US",
	["the United States of America"] = "US",
	["U. S."] = "US",
	["U.S."] = "US",
	["the U.S."] = "US",
	["US"] = "US",
	["the US"] = "US",
	["Uruguay"] = "UY",
	["Uzbekistan"] = "UZ",
	["Holy See (Vatican City State)"] = "VA",
	["Holy See"] = "VA",
	["Vatican City State"] = "VA",
	["Vatican City"] = "VA",
	["Saint Vincent and the Grenadines"] = "VC",
	["St. Vincent and the Grenadines"] = "VC",
	["St Vincent and the Grenadines"] = "VC",
	["Venezuela, Bolivarian Republic of"] = "VE",
	["Venezuela"] = "VE",
	["Virgin Islands, British"] = "VG",
	["British Virgin Islands"] = "VG",
	["UK Virgin Islands"] = "VG",
	["Virgin Islands of the United Kingdom"] = "VG",
	["Virgin Islands of the UK"] = "VG",
	["Virgin Islands, U. S."] = "VI",
	["Virgin Islands, U.S."] = "VI",
	["Virgin Islands, US"] = "VI",
	["United States Virgin Islands"] = "VI",
	["American Virgin Islands"] = "VI",
	["U. S. Virgin Islands"] = "VI",
	["U.S. Virgin Islands"] = "VI",
	["US Virgin Islands"] = "VI",
	["Virgin Islands of the United States"] = "VI",
	["Virgin Islands of the U.S."] = "VI",
	["Virgin Islands of the US"] = "VI",
	["Vietnam"] = "VN",
	["Viet Nam"] = "VN",
	["Vanuatu"] = "VU",
	["Wallis and Futuna"] = "WF",
	["Samoa"] = "WS",
	["Yemen"] = "YE",
	["Mayotte"] = "YT",
	["South Africa"] = "ZA",
	["Zambia"] = "ZM",
	["Zimbabwe"] = "ZW",
	["ABW"] = "AW",
 	["AFG"] = "AF",
 	["AGO"] = "AO",
 	["AIA"] = "AI",
 	["ALA"] = "AX",
 	["ALB"] = "AL",
 	["AND"] = "AD",
 	["ARE"] = "AE",
 	["ARG"] = "AR",
 	["ARM"] = "AM",
 	["ASM"] = "AS",
 	["ATA"] = "AQ",
 	["ATF"] = "TF",
 	["ATG"] = "AG",
 	["AUS"] = "AU",
 	["AUT"] = "AT",
 	["AZE"] = "AZ",
 	["BDI"] = "BI",
 	["BEL"] = "BE",
 	["BEN"] = "BJ",
 	["BFA"] = "BF",
 	["BGD"] = "BD",
 	["BGR"] = "BG",
 	["BHR"] = "BH",
 	["BHS"] = "BS",
 	["BIH"] = "BA",
 	["BLM"] = "BL",
 	["BLR"] = "BY",
 	["BLZ"] = "BZ",
 	["BMU"] = "BM",
 	["BOL"] = "BO",
 	["BRA"] = "BR",
 	["BRB"] = "BB",
 	["BRN"] = "BN",
 	["BTN"] = "BT",
 	["BVT"] = "BV",
 	["BWA"] = "BW",
 	["CAF"] = "CF",
 	["CAN"] = "CA",
 	["CCK"] = "CC",
 	["CHE"] = "CH",
 	["CHL"] = "CL",
 	["CHN"] = "CN",
 	["CIV"] = "CI",
 	["CMR"] = "CM",
 	["COD"] = "CG",
 	["COG"] = "CG",
 	["COK"] = "CK",
 	["COL"] = "CO",
 	["COM"] = "KM",
 	["CRI"] = "CR",
 	["CUB"] = "CU",
 	["CUW"] = "CW",
 	["CXR"] = "CX",
 	["CYM"] = "KY",
 	["CYP"] = "CY",
 	["CZE"] = "CZ",
 	["DEU"] = "DE",
 	["DJI"] = "DJ",
 	["DMA"] = "DM",
 	["DNK"] = "DK",
 	["DOM"] = "DO",
 	["DZA"] = "DZ",
 	["ECU"] = "EC",
 	["EGY"] = "EG",
 	["ERI"] = "ER",
 	["ESH"] = "EH",
 	["ESP"] = "ES",
 	["EST"] = "EE",
 	["ETH"] = "ET",
 	["FIN"] = "FI",
 	["FJI"] = "FJ",
 	["FLK"] = "FK",
 	["FRA"] = "FR",
 	["FRO"] = "FO",
 	["FSM"] = "FM",
 	["GAB"] = "GA",
 	["GBR"] = "GB",
 	["GEO"] = "GE",
 	["GGY"] = "GG",
 	["GHA"] = "GH",
 	["GIB"] = "GI",
 	["GIN"] = "GN",
 	["GLP"] = "GP",
 	["GMB"] = "GM",
 	["GNB"] = "GW",
 	["GNQ"] = "GQ",
 	["GRC"] = "GR",
 	["GRD"] = "GD",
 	["GRL"] = "GL",
 	["GTM"] = "GT",
 	["GUF"] = "GF",
 	["GUM"] = "GU",
 	["GUY"] = "GY",
 	["HKG"] = "HK",
 	["HMD"] = "HM",
 	["HND"] = "HN",
 	["HRV"] = "HR",
 	["HTI"] = "HT",
 	["HUN"] = "HU",
 	["IDN"] = "ID",
 	["IMN"] = "IM",
 	["IND"] = "IN",
 	["IOT"] = "IO",
 	["IRL"] = "IE",
 	["IRN"] = "IR",
 	["IRQ"] = "IQ",
 	["ISL"] = "IS",
 	["ISR"] = "IL",
 	["ITA"] = "IT",
 	["JAM"] = "JM",
 	["JEY"] = "JE",
 	["JOR"] = "JO",
 	["JPN"] = "JP",
 	["KAZ"] = "KZ",
 	["KEN"] = "KE",
 	["KGZ"] = "KG",
 	["KHM"] = "KH",
 	["KIR"] = "KI",
 	["KNA"] = "KN",
 	["KWT"] = "KW",
 	["LAO"] = "LA",
 	["LBN"] = "LB",
 	["LBR"] = "LR",
 	["LBY"] = "LY",
 	["LCA"] = "LC",
 	["LIE"] = "LI",
 	["LKA"] = "LK",
 	["LSO"] = "LS",
 	["LTU"] = "LT",
 	["LUX"] = "LU",
 	["LVA"] = "LV",
 	["MAC"] = "MO",
 	["MAF"] = "MF",
 	["MAR"] = "MA",
 	["MCO"] = "MC",
 	["MDA"] = "MD",
 	["MDG"] = "MG",
 	["MDV"] = "MV",
 	["MEX"] = "MX",
 	["MHL"] = "MH",
 	["MKD"] = "MK",
 	["MLI"] = "ML",
 	["MLT"] = "MT",
 	["MMR"] = "MM",
 	["MNE"] = "ME",
 	["MNG"] = "MN",
 	["MNP"] = "MP",
 	["MOZ"] = "MZ",
 	["MRT"] = "MR",
 	["MSR"] = "MS",
 	["MTQ"] = "MQ",
 	["MUS"] = "MU",
 	["MWI"] = "MW",
 	["MYS"] = "MY",
 	["MYT"] = "YT",
 	["NAM"] = "NA",
 	["NCL"] = "NC",
 	["NER"] = "NE",
 	["NFK"] = "NF",
 	["NGA"] = "NG",
 	["NIC"] = "NI",
 	["NIU"] = "NU",
 	["NLD"] = "NL",
 	["NOR"] = "NO",
 	["NPL"] = "NP",
 	["NRU"] = "NR",
 	["NZL"] = "NZ",
 	["OMN"] = "OM",
 	["PAK"] = "PK",
 	["PAN"] = "PA",
 	["PCN"] = "PN",
 	["PER"] = "PE",
 	["PHL"] = "PH",
 	["PLW"] = "PW",
 	["PNG"] = "PG",
 	["POL"] = "PL",
 	["PRI"] = "PR",
 	["PRT"] = "PT",
 	["PRY"] = "PY",
 	["PSE"] = "PS",
 	["PYF"] = "PF",
 	["QAT"] = "QA",
 	["REU"] = "RE",
 	["ROU"] = "RO",
 	["RUS"] = "RU",
 	["RWA"] = "RW",
 	["SAU"] = "SA",
 	["SDN"] = "SD",
 	["SEN"] = "SN",
 	["SGP"] = "SG",
 	["SGS"] = "GS",
 	["SJM"] = "SJ",
 	["SLB"] = "SB",
 	["SLE"] = "SL",
 	["SLV"] = "SV",
 	["SMR"] = "SM",
 	["SOM"] = "SO",
 	["SPM"] = "PM",
 	["SRB"] = "RS",
 	["SSD"] = "SS",
 	["STP"] = "ST",
 	["SUR"] = "SR",
 	["SVK"] = "SK",
 	["SVN"] = "SI",
 	["SWE"] = "SE",
 	["SWZ"] = "SZ",
 	["SXM"] = "SX",
 	["SYC"] = "SC",
 	["SYR"] = "SY",
 	["TCA"] = "TC",
 	["TCD"] = "TD",
 	["TGO"] = "TG",
 	["THA"] = "TH",
 	["TJK"] = "TJ",
 	["TKL"] = "TK",
 	["TKM"] = "TM",
 	["TLS"] = "TL",
 	["TON"] = "TO",
 	["TTO"] = "TT",
 	["TUN"] = "TN",
 	["TUR"] = "TR",
 	["TUV"] = "TV",
 	["TWN"] = "TW",
 	["TZA"] = "TZ",
 	["UGA"] = "UG",
 	["UKR"] = "UA",
 	["UMI"] = "UM",
 	["URY"] = "UY",
 	["USA"] = "US",
 	["UZB"] = "UZ",
 	["VAT"] = "VA",
 	["VCT"] = "VC",
 	["VEN"] = "VE",
 	["VNM"] = "VN",
 	["VUT"] = "VU",
 	["WLF"] = "WF",
 	["WSM"] = "WS",
 	["YEM"] = "YE",
 	["ZAF"] = "ZA",
 	["ZMB"] = "ZM",
 	["ZWE"] = "ZW"

function p.main(frame)
	local country = mw.ustring.gsub(mw.ustring.toNFC(frame.args[1] or ''), '^%s*(.-)%s*$', '%1')
	local match1 = ''
	if country and country ~= '' then
		match1 = mw.ustring.match(country, "Flag of the ([^\.]*)") or mw.ustring.match(country, "Flag of ([^\.]*)") or mw.ustring.match(country, "^[Tt]he %A*(%u[%a%(%)%.' %-]+)") or mw.ustring.match(country, "(%u[%a%(%)%.' %-]+)") or ""
		if (match1 == "Image") or (match1 == "File") then
			country = mw.ustring.gsub
			match1 = mw.ustring.match(country, "[%|%[](%u[%a%(%)%.' %-]+)") or ""
		end
		if mw.ustring.match then
			country = mw.ustring.gsub
			match1 = mw.ustring.match(country, "%[(%u[%a%(%)%.' %-]+)") or ""
		end
	end
	local code = countries[match1] or countries[mw.ustring.gsub(match1, " %(.*%)$", "")] or countries[mw.ustring.gsub] or countries[mw.ustring.gsub(match1, " %]
	if not code then
		if match1 ~= '' and mw.title.new('Template:ISO 3166 code ' .. match1).exists then
			code = frame:expandTemplate{ title = 'Template:ISO 3166 code ' .. match1 }
		else
			if frame.args.nocat and frame.args.nocat == 'true' then
				return ''
			end
			local ns = mw.title.getCurrentTitle.namespace
			if ns == 0 then
				return '분류:모호한 국가가 포함된 위키백과 문서'
			else
				return ''.. frame:expandTemplate{ title = 'Namespace Greek' } ..''
			end
		end
	end
	local subdivision = mw.ustring.gsub(mw.ustring.toNFC(frame.args[2] or ''), '^%s*(.-)%s*$', '%1')
	if not subdivision or subdivision == '' then return code end
	local countrytables = {
		["AD"] = true,
		["AE"] = true,
		["AF"] = true,
		["AG"] = true,
		["AL"] = true,
		["AM"] = true,
		["AO"] = true,
		["AR"] = true,
		["AT"] = true,
		["AU"] = true,
		["AZ"] = true,
		["BA"] = true,
		["BB"] = true,
		["BD"] = true,
		["BE"] = true,
		["BF"] = true,
		["BG"] = true,
		["BH"] = true,
		["BI"] = true,
		["BJ"] = true,
		["BN"] = true,
		["BO"] = true,
		["BQ"] = true,
		["BR"] = true,
		["BS"] = true,
		["BT"] = true,
		["BW"] = true,
		["BY"] = true,
		["BZ"] = true,
		["CA"] = true,
		["CD"] = true,
		["CF"] = true,
		["CG"] = true,
		["CH"] = true,
		["CI"] = true,
		["CL"] = true,
		["CM"] = true,
		["CN"] = true,
		["CO"] = true,
		["CR"] = true,
		["CU"] = true,
		["CV"] = true,
		["CY"] = true,
		["CZ"] = true,
		["DE"] = true,
		["DJ"] = true,
		["DK"] = true,
		["DM"] = true,
		["DO"] = true,
		["DZ"] = true,
		["EC"] = true,
		["EE"] = true,
		["EG"] = true,
		["ER"] = true,
		["ES"] = true,
		["ET"] = true,
		["FI"] = true,
		["FJ"] = true,
		["FM"] = true,
		["FR"] = true,
		["GA"] = true,
		["GB"] = true,
		["GD"] = true,
		["GE"] = true,
		["GH"] = true,
		["GL"] = true,
		["GM"] = true,
		["GN"] = true,
		["GQ"] = true,
		["GR"] = true,
		["GT"] = true,
		["GW"] = true,
		["GY"] = true,
		["HN"] = true,
		["HR"] = true,
		["HT"] = true,
		["HU"] = true,
		["ID"] = true,
		["IE"] = true,
		["IL"] = true,
		["IN"] = true,
		["IQ"] = true,
		["IR"] = true,
		["IS"] = true,
		["IT"] = true,
		["JM"] = true,
		["JO"] = true,
		["JP"] = true,
		["KE"] = true,
		["KG"] = true,
		["KH"] = true,
		["KI"] = true,
		["KM"] = true,
		["KN"] = true,
		["KP"] = true,
		["KR"] = true,
		["KW"] = true,
		["KZ"] = true,
		["LA"] = true,
		["LB"] = true,
		["LC"] = true,
		["LI"] = true,
		["LK"] = true,
		["LR"] = true,
		["LS"] = true,
		["LT"] = true,
		["LU"] = true,
		["LV"] = true,
		["LY"] = true,
		["MA"] = true,
		["MC"] = true,
		["MD"] = true,
		["ME"] = true,
		["MG"] = true,
		["MH"] = true,
		["MK"] = true,
		["ML"] = true,
		["MM"] = true,
		["MN"] = true,
		["MR"] = true,
		["MT"] = true,
		["MU"] = true,
		["MV"] = true,
		["MW"] = true,
		["MX"] = true,
		["MY"] = true,
		["MZ"] = true,
		["NA"] = true,
		["NE"] = true,
		["NG"] = true,
		["NI"] = true,
		["NL"] = true,
		["NO"] = true,
		["NP"] = true,
		["NR"] = true,
		["NZ"] = true,
		["OM"] = true,
		["PA"] = true,
		["PE"] = true,
		["PG"] = true,
		["PH"] = true,
		["PK"] = true,
		["PL"] = true,
		["PS"] = true,
		["PT"] = true,
		["PW"] = true,
		["PY"] = true,
		["QA"] = true,
		["RO"] = true,
		["RS"] = true,
		["RU"] = true,
		["RW"] = true,
		["SA"] = true,
		["SB"] = true,
		["SC"] = true,
		["SD"] = true,
		["SE"] = true,
		["SG"] = true,
		["SH"] = true,
		["SI"] = true,
		["SK"] = true,
		["SL"] = true,
		["SM"] = true,
		["SN"] = true,
		["SO"] = true,
		["SR"] = true,
		["SS"] = true,
		["ST"] = true,
		["SV"] = true,
		["SY"] = true,
		["SZ"] = true,
		["TD"] = true,
		["TG"] = true,
		["TH"] = true,
		["TJ"] = true,
		["TL"] = true,
		["TM"] = true,
		["TN"] = true,
		["TO"] = true,
		["TR"] = true,
		["TT"] = true,
		["TV"] = true,
		["TW"] = true,
		["TZ"] = true,
		["UA"] = true,
		["UG"] = true,
		["UM"] = true,
		["US"] = true,
		["UY"] = true,
		["UZ"] = true,
		["VC"] = true,
		["VE"] = true,
		["VN"] = true,
		["VU"] = true,
		["WF"] = true,
		["WS"] = true,
		["YE"] = true,
		["ZA"] = true,
		["ZM"] = true,
		["ZW"] = true,
	local match2 = mw.ustring.match(subdivision, "Flag of the ([^\.]*)") or mw.ustring.match(subdivision, "Flag of ([^\.]*)") or mw.ustring.match(subdivision, "[Tt]he %A*") or mw.ustring.match(subdivision, "") or ""
	if (match2 == "Image") or (match2 == "File") then
		subdivision = mw.ustring.gsub
		match2 = mw.ustring.match(subdivision, "[\|\[]") or ""
	end
	if mw.ustring.match then
		subdivision = mw.ustring.gsub
		match2 = mw.ustring.match2(subdivision, "%[") or ""
	end
	local code1 = mw.ustring.sub
	if countrytables[code1] then
		local tmp = mw.loadData('Module:Country extract/' .. code1)
		local code2 = tmp[match2] or tmp[mw.ustring.gsub(match2, " %(.*%)$", "")] or tmp[mw.ustring.gsub] or tmp[mw.ustring.gsub(match2, " %]
		if code2 then return code2 end
		
		local legacytemplate = 'Template:ISO 3166 code ' .. match1
		if mw.title.new(legacytemplate).exists then
			tmp = nil
			for k, v in ipairs({
				frame:expandTemplate{ title = legacytemplate, args = { mw.ustring.gsub(match2, " %(.*%)$", "") } },
				frame:expandTemplate{ title = legacytemplate, args = { mw.ustring.gsub } },
				frame:expandTemplate{ title = legacytemplate, args = { mw.ustring.gsub(match2, " % } },
				frame:expandTemplate{ title = legacytemplate, args = { match2 } }
				if v ~= code and v ~= '' then
					tmp = v
					break
				end
			end
			if tmp then return tmp end
		end
		if frame.args.nocat and frame.args.nocat == 'true' then
			return code
		end
		local ns = mw.title.getCurrentTitle.namespace
		if ns == 0 then
			return code .. '분류:모호한 국가나 구역이 포함된 위키백과 문서'
		else
			return code .. ''.. frame:expandTemplate{ title = 'Namespace Greek' } ..''
		end
	end
	return code
end