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