# 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
ANG = Голланд Антил гульдени
ARS = Аргентина песоси
AUD = AUD|A$
AWG = Аруба флорини
BBD = Барбадос доллари
BMD = Бермуда доллари
BOB = Боливия болвиани
BRL = Бразил реали|R$
BSD = Багама доллари
BZD = Белиз доллари
CAD = Канада доллари|CA$
CHF = CHF
CLP = Чили песоси||0
CNY = Хитой юани|CN¥
COP = Колумбия песоси||0
CRC = Коста-Рика колони||0
CUC = Куба Айирбошлаш песоси
CUP = Куба песоси
DKK = DKK
DOP = Доминикан песоси
DZD = Жазоир динори
EGP = Миср фунти
EUR = Евро|€
FKP = Фолькленд ороли фунти
GBP = Инглиз фунт стерлинги|£
GTQ = Гватемала кветзали
GYD = Гаяна доллари||0
HKD = HKD|HK$
HNL = Гондурас лемпираси
HTG = Гаити гурдаси
IDR = IDR||0
INR = Ҳинд рупияси|₹
JMD = Ямайка доллари
JPY = Япон йенаси|JP¥|0
KRW = KRW|₩|0
KYD = Кайман ороли Доллари
LYD = Ливия динори||3
MAD = Марокаш дирҳами
MXN = Мексика песоси|MX$
NIO = Никарагуа кордобаси
NOK = NOK
PAB = Панама бальбоаси
PEN = Перу нуево сол
PLN = PLN
PYG = Парагвай гуарани||0
RUB = Рус рубли
SAR = SAR
SEK = SEK
SRD = Суринам доллари
THB = THB|฿
TRY = TRY|TL
TTD = Тринидад ва Тобаго доллари
TWD = TWD|NT$
USD = АҚШ доллари|US$
UYU = Уругвай песоси
UZS = Ўзбекистон сўм|сўм|0
VEF = Венесуэла боливари
XCD = Шарқий Кариб доллари|EC$
XXX = XXX|||1
ZAR = ZAR
