# 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: 2014-03-14 18:20:13 +0100 (Fri, 14 Mar 2014) $
#  number=$Revision: 9967 $
#  type=lv
AED = Apvienoto Arābu Emirātu dirhēms
AFN = Afganistānas afgāns||0
ALL = Albānijas leks||0
AMD = Armēnijas drams||0
ANG = Nīderlandes Antiļu guldenis
AOA = Angolas kvanza
ARS = Argentīnas peso
ATS = Austrijas šiliņš|||1
AUD = Austrālijas dolārs|$
AWG = Arubas guldenis
AZM = Azerbaidžānas manats (1993–2006)|||1
AZN = Azerbaidžānas manats
BAM = Bosnijas un Hercogovinas marka
BBD = Barbadosas dolārs
BDT = Bangladešas taka|৳
BEF = Beļģijas franks|||1
BGN = Bulgārijas leva
BHD = Bahreinas dinārs||3
BIF = Burundi franks||0
BMD = Bermudu dolārs|$
BND = Brunejas dolārs
BOB = Bolīvijas boliviano
BRL = Brazīlijas reāls|R$
BSD = Bahamu dolārs|$
BTN = Butānas ngultrums
BWP = Botsvānas pula
BYR = Baltkrievijas rubelis||0
BZD = Belizas dolārs|$
CAD = Kanādas dolārs|CA$
CDF = KDR franks
CHF = Šveices franks
CLP = Čīles peso|$|0
CNY = Ķīnas juaņs|¥
COP = Kolumbijas peso||0
COU = Kolumbijas reāls|||1
CRC = Kostarikas kolons||0
CUC = Kubas konvertējamais peso
CUP = Kubas peso|$
CVE = Kaboverdes eskudo
CYP = Kipras mārciņa|||1
CZK = Čehijas krona
DEM = Vācijas marka|||1
DJF = Džibutijas franks||0
DKK = Dānijas krona
DOP = Dominikānas peso|$
DZD = Alžīrijas dinārs
EEK = Igaunijas krona|||1
EGP = Ēģiptes mārciņa
ERN = Eritrejas nakfa
ESP = Spānijas peseta|₧|0|1
ETB = Etiopijas birs
EUR = eiro|€
FIM = Somijas marka|||1
FJD = Fidži dolārs
FKP = Folklenda salu mārciņa
FRF = Francijas franks|||1
GBP = Lielbritānijas sterliņu mārciņa|£
GEL = Gruzijas lari
GHS = Ganas sedi
GIP = Gibraltāra mārciņa|£
GMD = Gambijas dalasi
GNF = Gvinejas franks||0
GRD = Grieķijas drahma|||1
GTQ = Gvatemalas ketsals
GYD = Gajānas dolārs||0
HKD = Honkongas dolārs|$
HNL = Hondurasas lempīra
HRK = Horvātijas kuna
HTG = Haiti gurds
HUF = Ungārijas forints||0
IDR = Indonēzijas rūpija||0
IEP = Īrijas mārciņa|||1
ILS = Izraēlas šekelis|₪
INR = Indijas rūpija|₹
IQD = Irākas dinārs||0
IRR = Irānas riāls||0
ISK = Īslandes krona||0
ITL = Itālijas lira||0|1
JMD = Jamaikas dolārs
JOD = Jordānas dinārs||3
JPY = Japānas jena|¥|0
KES = Kenijas šiliņš
KGS = Kirgizstānas soms
KHR = Kambodžas riels
KMF = Komoru franks||0
KPW = Ziemeļkorejas vona||0
KRW = Dienvidkorejas vona|₩|0
KWD = Kuveitas dinārs||3
KYD = Kaimanu salu dolārs|$
KZT = Kazahstānas tenge|₸
LAK = Laosas kips||0
LBP = Libānas mārciņa||0
LKR = Šrilankas rūpija
LRD = Libērijas dolārs
LSL = Lesoto loti
LTL = Lietuvas lits
LUF = Luksemburgas franks||0|1
LVL = Latvijas lats|Ls||1
LVR = Latvijas rublis|||1
LYD = Lībijas dinārs||3
MAD = Marokas dirhēms
MDL = Moldovas leja
MGA = Madagaskaras ariari||0
MKD = Maķedonijas denārs
MLF = CFA (Āfrikas) franks|||1
MMK = Mjanmas kjats||0
MNT = Mongolijas tugriks||0
MOP = Makao pataka
MRO = Mauritānijas ugija||0
MTL = Maltas lira|||1
MTP = Maltas mārciņa|||1
MUR = Maurīcijas rūpija||0
MVR = Maldīvijas rūfija
MWK = Malāvijas kvača
MXN = Meksikas peso|$
MYR = Malaizijas ringits
MZE = Mozambikas eskudo|||1
MZM = Mozambikas vecais metikals|||1
MZN = Mozambikas metikals
NAD = Namībijas dolārs|$
NGN = Nigērijas naira
NIO = Nikaragvas kordoba
NLG = Nīderlandes guldenis|||1
NOK = Norvēģijas krona
NPR = Nepālas rūpija
NZD = Jaunzēlandes dolārs|$
OMR = Omānas riāls||3
PAB = Panamas balboa
PEN = Peru jaunais sols
PGK = Papua-Jaungvinejas kina
PHP = Filipīnu peso
PKR = Pakistānas rūpija||0
PLN = Polijas zlots
PTE = Portugāles eskudo|||1
PYG = Paragvajas guarani|₲|0
QAR = Kataras riāls
ROL = Rumānijas vecā leja|||1
RON = Rumānijas leja
RSD = Serbijas dinārs||0
RUB = Krievijas rublis
RWF = Ruandas franks||0
SAR = Saūda riāls
SBD = Zālamana Salu dolārs|$
SCR = Seišelu salu rūpija
SDG = Sudānas mārciņa
SEK = Zviedrijas krona
SGD = Singapūras dolārs|$
SHP = Sv.Helēnas salas mārciņa
SIT = Slovēnijas tolars|||1
SKK = Slovakijas krona|||1
SLL = Sjerraleones leone||0
SOS = Somālijas šiliņš||0
SRD = Surinamas dolārs
SRG = Surinamas guldenis|||1
SSP = Dienvidsudānas mārciņa|£
STD = Santome un Prinsipi dobra||0
SVC = Salvadoras kolons|||1
SYP = Sīrijas mārciņa||0
SZL = Svazilendas lilangeni
THB = Taizemes bāts|฿
TJS = Tadžikistānas somons
TMM = Turkmenistānas manats||0|1
TMT = Turkmenistānas jaunais manats
TND = Tunisijas dinārs||3
TOP = Tongas paanga
TRL = Turcijas lira||0|1
TRY = Turcijas jaunā lira
TTD = Trinidādas un Tobāgo dolārs|$
TWD = Taivānas jaunais dolārs|NT$
TZS = Tanzānijas šiliņš||0
UAH = Ukrainas grivna|₴
UGX = Ugandas šiliņš||0
USD = ASV dolārs|$
UYU = Urugvajas peso
UZS = Uzbekistānas sums||0
VEB = Venecuēlas bolivārs (1871–2008)|||1
VEF = Venecuēlas bolivārs
VND = Vjetnamas dongi|₫|0
VUV = Vanuatu vatu||0
WST = Samoa tala
XAF = Centrālāfrikas CFA franks|FCFA|0
XAG = sudrabs|||1
XAU = zelts|||1
XBA = Eiropas norēķinu vienība EURCO|||1
XBB = Eiropas naudas vienība|||1
XBC = Eiropas norēķinu vienība (XBC)|||1
XBD = Eiropas norēķinu vienība (XBD)|||1
XCD = Austrumkarību dolārs|EC$
XDR = Speciālās aizņēmuma tiesības|||1
XEU = Eiropas norēķinu vienība|||1
XFO = Francijas zelta franks|||1
XFU = Francijas UIC franks|||1
XOF = Rietumāfrikas CFA franks|CFA|0
XPD = pallādijs|||1
XPF = CFP franks|CFPF|0
XPT = platīns|||1
XTS = Testa valūtas kods|||1
XXX = Nezināma valūta|||1
YER = Jemenas riāls||0
ZAR = Dienvidāfrikas rands
ZMK = Zambijas kvača (1968–2012)||0|1
ZMW = Zambijas kvača
ZWD = Zimbabves dolārs||0|1
ZWL = Zimbabves dolārs (2009)|||1
