# Copyright 2012 Google Inc.
# 
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

#
# The key is an ISO4217 currency code, and the value is of the form:
#   display name|symbol|decimal digits|not-used-flag|rounding
# If a symbol is not supplied, the currency code will be used
# If # of decimal digits is omitted, 2 is used
# If a currency is not generally used, not-used-flag=1
# If a currency should be rounded to a multiple of of the least significant
#   digit, rounding will be present
# Trailing empty fields can be omitted

# DO NOT EDIT - GENERATED FROM CLDR DATA:
#  cldrVersion=21.0
#  number=$Revision: 6546 $
#  type=root
#  date=$Date: 2012-02-07 13:32:35 -0500 (Tue, 07 Feb 2012) $

AED = i-Dirham yase-United Arab Emirates
AFN = i-Afghan Afghani||0
ALL = i-Albanian Lek||0
AMD = i-Armenian Dram||0
ANG = i-Netherlands Antillean Guilder
AOA = i-Angolan Kwanza
ARS = i-Argentina Peso
AUD = i-Austrilian Dollar|AU$
AWG = i-Aruban Florin
AZN = i-Azerbaijani Manat
BAM = i-Bosnia-Herzegovina Convertible Mark
BBD = i-Barbadian Dollar
BDT = i-Bangladeshi Taka
BGN = i-Bulgarian Lev
BHD = i-Bahraini Dinar||3
BIF = i-Burundian Franc||0
BMD = i-Bermudan Dollar
BND = i-Brunei Dollar
BOB = i-Bolivian Boliviano
BRL = i-Brazilian Real|R$
BSD = i-Bahamian Dollar
BTN = i-Bhutanese Ngultrum
BWP = i-Botswana Pula
BYR = i-Belarusian Ruble||0
BZD = i-Belize Dollar
CAD = i-Candian Dollar|CA$
CDF = i-Congolese Franc
CHF = i-Swiss Franc||||5
CLP = i-Chilean Peso||0
CNY = i-Chinese Yuan|CN¥
COP = i-Colombian Peso||0
CRC = i-Costa Rican Colón||0
CUC = i-Cuban Convertable Peso
CUP = I-Cuban Peso
CVE = i-Cape Verdean Escudo
CZK = i-Czech Republic Koruna
DJF = i-Djiboutian Franc||0
DKK = i-Danish Krone
DOP = i-Dominican Peso
DZD = i-Algerian Dinar
EGP = i-Egyptian Pound
ERN = i-Eritrean Nakfa
ETB = i-Ethopian Birr
EUR = i-Euro|€
FJD = i-Fijian Dollar
FKP = i-Falkland Islands Pound
GBP = i-British Pound Sterling|UK£
GEL = i-Georgian Lari
GHS = i-Ghanaian Cedi
GIP = i-Gibraltar Pound
GMD = i-Gambian Dalasi
GNF = i-Gunean Franc||0
GTQ = i-Guatemalan Quetzal
GYD = i-Guyanaese Dollar||0
HKD = i-Hong Kong Dollar|HK$
HNL = i-Honduran Lempira
HRK = i-Croatian Kuna
HTG = i-Haitian Gourde
HUF = i-Hungarian Forint||0
IDR = i-Indonesian Rupiah||0
ILS = i-Israeli New Sheqel|₪
INR = i-Indian Rupee|Rs.
IQD = i-Iraqi Dinar||0
IRR = i-Iranian Rial||0
ISK = i-Icelandic Króna||0
JMD = i-Jamaican Dollar
JOD = i-Jordanian Dinar||3
JPY = i-Japanese Yen|JP¥|0
KES = i-Kenyan Shilling
KGS = i-Kyrgystani Som
KHR = i-Cambodian Riel
KMF = i-Comorian Franc||0
KPW = i-North Korean Won||0
KRW = i-South Korean Won|₩|0
KWD = i-Kuwaiti Dinar||3
KYD = i-Cayman Islands Dollar
KZT = i-Kazakhstani Tenge
LAK = i-Laotian Kip||0
LBP = i-Lebanese Pound||0
LKR = i-Sri Lankan Rupee
LRD = i-Liberian Dollar
LSL = i-Lesotho Loti
LTL = i-Lithuanian Litas
LVL = i-Latvian Lats
LYD = i-Libyan Dinar||3
MAD = i-Moroccan Dirham
MDL = i-Moldovan Leu
MGA = i-Malagasy Ariary||0
MKD = i-Macedonian Denar
MMK = i-Myanma Kyat||0
MNT = i-Mongolian Tugrik||0
MOP = i-Macanese Pataca
MRO = i-Mauritanian Ouguiya||0
MUR = i-Mauritian Rupee||0
MVR = i-Maldivian Rufiyana
MWK = i-Malawian Kwacha
MXN = i-Mexican Peso|MX$
MYR = i-Malaysian Ringgit
NAD = i-Namibian Dollar
NGN = i-Nigerian Naira
NIO = i-Nicaraguan Córdoba
NOK = i-Norwegian Krone
NPR = i-Nepalese Rupee
NZD = i-New Zealand Dollar|NZ$
OMR = i-Omani Rial||3
PAB = i-Panamanian Balboa
PEN = i-Peruvian Nuevo Sol
PGK = i-Papua New Guinean Kina
PHP = i-Philippine Peso
PKR = i-Pakistani Rupee||0
PLN = i-Polish Zloty
PYG = i-Paraguayan Guarani||0
QAR = i-Qatari Rial
RSD = i-Serbian Dinar||0
RUB = i-Russian Ruble
RWF = i-Rwandan Franc||0
SAR = i-Saudi Riyal
SBD = i-Solomon Islands Dollar
SCR = i-Seychellois Rupee
SDG = i-Sudanese Pound
SEK = i-Swedish Krona
SGD = i-Singapore Dollar
SHP = i-Saint Helena Pound
SLL = i-Sierra Leonean Leone||0
SOS = i-Somali Shilling||0
SRD = i-Surinamese Dollar
STD = i-São Tomé kanye ne-Príncipe Dobra||0
SYP = i-Syrian Pound||0
SZL = i-Swazi Lilangeni
THB = i-Thai Baht|฿
TJS = i-Tajikistani Somoni
TMT = i-Turkmenistani Manat
TND = i-Tunisian Dinar||3
TOP = i-Tongan Paʻanga
TRY = i-Turkish Lira
TTD = Idola lase-Trinidad nase-Tobago
TWD = i-New Taiwan Dollar|NT$
TZS = i-Tanzanian Shilling||0
UAH = i-Ukrainian Hryvnia
UGX = i-Ugandan Shilling||0
USD = i-US Dollar|US$
UYU = i-Uruguayan Peso
UZS = i-Uzbekistan Som||0
VEF = i-Venezuelan Bolívar
VND = i-Vietnamese Dong|₫|0
VUV = i-Vanuatu Vatu||0
WST = i-Samoan Tala
XAF = i-CFA Franc BCEA|FCFA|0
XCD = i-East Caribbean Dollar|EC$
XOF = i-CFA Franc BCEAO|CFA|0
XPF = i-CFP Franc|CFPF|0
XXX = Ikharensi engaziwa|||1
YER = i-Yemeni Rial||0
ZAR = i-South African Rand|R
ZMK = i-Zambian Kwacha||0
