# 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 = Dirhàm èmìrâ
AOA = Kwànza àŋgolà
AUD = Dɔ̀lâr òstralìà|A$
BHD = Dinâr Bàraìn||3
BIF = Frǎŋ bùrundì||0
BWP = Pùla Bòtswanà
CAD = Dɔ̀lâr kànadà|CA$
CDF = Frǎŋ kòŋgo
CHF = Frǎŋ sùwîs
CNY = Yùan kinà|CN¥
CVE = Èskudò kabwe᷆r
DJF = Frǎŋ jìbutì||0
DZD = Dìnâr àlgerìà
EGP = Paùnd ègîptò
ERN = Nafkà èrìtrěà
ETB = Bîr ètìopìà
EUR = Èrô|€
GBP = Stɛrlìŋ ŋgìsì|£
GHC = Sèdi gānà|||1
GMD = Dalasì gambìà
GNS = Frǎŋ gìnê|||1
INR = Rùpi īndìà|₹
JPY = Yɛ̂n yàpân|JP¥|0
KES = Silîŋ kenìà
KMF = Frǎŋ kòmorà||0
LRD = Dɔ̀lâr lìberìà
LSL = Lotì lèsòtò
LYD = Dìnâr libìà||3
MAD = Dìrham màrôk
MGA = Frǎŋ màlàgasì||0
MRO = Ùgwiya mòrìtanìa||0
MUR = Rupìɛ̀ mòrîs||0
MWK = Kwaca màlawì
MZM = Mètìkal mòsàmbîk|||1
NAD = Dɔ̀lâr nàmibìà
NGN = Nayrà nìgerìà
RWF = Frǎŋ Rùandà||0
SAR = Rìal sàudì
SCR = Rùpiɛ̀ sèsɛ̂l
SDG = Dìnâr sùdân
SDP = Paùnd sùdân|||1
SHP = Paùnd hèlenà
SLL = Lèonɛ̀||0
SOS = Silîŋ sòmàli||0
STD = Dobrà sàotòme||0|1
SZL = Lìlàŋgeni swàzì
TND = Dìnâr tùnîs||3
TZS = Silîŋ tànzànià||0
UGX = Silîŋ ùgàndà||0
USD = Dɔla àmerkà|US$
XAF = Frǎŋ CFA (BEAC)|FCFA|0
XOF = Frǎŋ CFA (BCEAO)|CFA|0
ZAR = Rân àfrǐkàsɔ̀
ZMK = Kwàca sàmbià (1968–2012)||0|1
ZMW = Kwàca sàmbià
ZWD = Dɔ̀lâr sìmbàbwê||0|1
