# 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
AED = Dirém dos Emirados Árabes Unidos
AOA = Cuanza angolano
AUD = Dólar australiano|A$
BHD = Dinar bareinita||3
BIF = Franco do Burundi||0
BWP = Pula botsuanesa
CAD = Dólar canadense|CA$
CDF = Franco congolês
CHF = Franco suíço
CNY = Yuan Renminbi chinês|CN¥
CVE = Escudo cabo-verdiano
DJF = Franco do Djibuti||0
DZD = Dinar argelino
EGP = Libra egípcia
ERN = Nakfa da Eritréia
ETB = Birr etíope
EUR = Euro|€
GBP = Libra britânica|£
GHC = Cedi de Gana (1979–2007)|||1
GMD = Dalasi de Gâmbia
GNS = Syli da Guiné|||1
INR = Rúpia indiana|₹
JPY = Iene japonês|JP¥|0
KES = Xelim queniano
KMF = Franco de Comores||0
LRD = Dólar liberiano
LSL = Loti do Lesoto
LYD = Dinar líbio||3
MAD = Dirém marroquino
MGA = Franco de Madagascar||0
MRO = Ouguiya da Mauritânia||0
MUR = Rupia de Maurício||0
MWK = Cuacha do Maláui
MZM = Metical antigo de Moçambique|||1
MZN = Metical de Moçambique|MTn
NAD = Dólar da Namíbia
NGN = Naira nigeriana
RWF = Franco ruandês||0
SAR = Rial saudita
SCR = Rupia das Seychelles
SDG = Dinar sudanês
SDP = Libra sudanesa antiga|||1
SHP = Libra de Santa Helena
SLL = Leone de Serra Leoa||0
SOS = Xelim somali||0
STD = Dobra de São Tomé e Príncipe||0|1
SZL = Lilangeni da Suazilândia
TND = Dinar tunisiano||3
TZS = Xelim da Tanzânia||0
UGX = Xelim ugandense (1966–1987)||0
USD = Dólar norte-americano|US$
XAF = Franco CFA BEAC|FCFA|0
XOF = Franco CFA BCEAO|CFA|0
ZAR = Rand sul-africano
ZMK = Cuacha zambiano (1968–2012)||0|1
ZMW = Cuacha zambiano
ZWD = Dólar do Zimbábue||0|1
