# *   Copyright (C) 1998-2016, International Business Machines
# *   Corporation and others.  All Rights Reserved.
CURR_CLDR_VERSION = %version%
# A list of txt's to build
# Note:
#
#   If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a '%local%' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example '%local%' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  CURR_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  CURR_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.

# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
CURR_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\
 en_NH.txt en_RH.txt fil_PH.txt he_IL.txt id_ID.txt\
 in.txt in_ID.txt iw.txt iw_IL.txt ja_JP.txt\
 ja_JP_TRADITIONAL.txt mo.txt nb_NO.txt nn_NO.txt no.txt\
 no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt pa_IN.txt\
 pa_PK.txt sh.txt sh_BA.txt sh_CS.txt sh_YU.txt\
 shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt sr_Cyrl_BA.txt\
 sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Cyrl_YU.txt sr_Latn_BA.txt\
 sr_Latn_CS.txt sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_YU.txt sr_ME.txt\
 sr_RS.txt sr_XK.txt sr_YU.txt th_TH.txt th_TH_TRADITIONAL.txt\
 tl.txt tl_PH.txt uz_AF.txt uz_Arab_AF.txt uz_Latn_UZ.txt\
 uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt zh_CN.txt zh_HK.txt\
 zh_Hans_CN.txt zh_Hant_TW.txt zh_MO.txt zh_SG.txt zh_TW.txt


# All aliases (to not be included under 'installed'), but not including root.
CURR_ALIAS_SOURCE = $(CURR_SYNTHETIC_ALIAS)


# Ordinary resources
CURR_SOURCE = af.txt af_NA.txt agq.txt ak.txt\
 am.txt ar.txt ar_AE.txt ar_DJ.txt ar_ER.txt\
 ar_LB.txt ar_SO.txt ar_SS.txt as.txt asa.txt\
 ast.txt az.txt az_Cyrl.txt az_Latn.txt bas.txt\
 be.txt bem.txt bez.txt bg.txt bm.txt\
 bn.txt bo.txt bo_IN.txt br.txt brx.txt\
 bs.txt bs_Cyrl.txt bs_Latn.txt ca.txt ca_FR.txt\
 ce.txt cgg.txt chr.txt cs.txt cy.txt\
 da.txt dav.txt de.txt de_CH.txt de_LI.txt\
 de_LU.txt dje.txt dsb.txt dua.txt dyo.txt\
 dz.txt ebu.txt ee.txt el.txt en.txt\
 en_001.txt en_150.txt en_AG.txt en_AI.txt en_AT.txt\
 en_AU.txt en_BB.txt en_BE.txt en_BI.txt en_BM.txt\
 en_BS.txt en_BW.txt en_BZ.txt en_CA.txt en_CC.txt\
 en_CH.txt en_CK.txt en_CM.txt en_CX.txt en_CY.txt\
 en_DE.txt en_DG.txt en_DK.txt en_DM.txt en_ER.txt\
 en_FI.txt en_FJ.txt en_FK.txt en_FM.txt en_GB.txt\
 en_GD.txt en_GG.txt en_GH.txt en_GI.txt en_GM.txt\
 en_GY.txt en_HK.txt en_IE.txt en_IL.txt en_IM.txt\
 en_IN.txt en_IO.txt en_JE.txt en_JM.txt en_KE.txt\
 en_KI.txt en_KN.txt en_KY.txt en_LC.txt en_LR.txt\
 en_LS.txt en_MG.txt en_MO.txt en_MS.txt en_MT.txt\
 en_MU.txt en_MW.txt en_MY.txt en_NA.txt en_NF.txt\
 en_NG.txt en_NL.txt en_NR.txt en_NU.txt en_NZ.txt\
 en_PG.txt en_PH.txt en_PK.txt en_PN.txt en_PW.txt\
 en_RW.txt en_SB.txt en_SC.txt en_SD.txt en_SE.txt\
 en_SG.txt en_SH.txt en_SI.txt en_SL.txt en_SS.txt\
 en_SX.txt en_SZ.txt en_TC.txt en_TK.txt en_TO.txt\
 en_TT.txt en_TV.txt en_TZ.txt en_UG.txt en_VC.txt\
 en_VG.txt en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt\
 en_ZW.txt eo.txt es.txt es_419.txt es_AR.txt\
 es_BO.txt es_CL.txt es_CO.txt es_CR.txt es_CU.txt\
 es_DO.txt es_EC.txt es_GQ.txt es_GT.txt es_HN.txt\
 es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PH.txt\
 es_PR.txt es_PY.txt es_SV.txt es_US.txt es_UY.txt\
 es_VE.txt et.txt eu.txt ewo.txt fa.txt\
 fa_AF.txt ff.txt ff_GN.txt ff_MR.txt fi.txt\
 fil.txt fo.txt fo_DK.txt fr.txt fr_BI.txt\
 fr_CA.txt fr_CD.txt fr_DJ.txt fr_DZ.txt fr_GN.txt\
 fr_HT.txt fr_KM.txt fr_LU.txt fr_MG.txt fr_MR.txt\
 fr_MU.txt fr_RW.txt fr_SC.txt fr_SY.txt fr_TN.txt\
 fr_VU.txt fur.txt fy.txt ga.txt gd.txt\
 gl.txt gsw.txt gu.txt guz.txt gv.txt\
 ha.txt ha_GH.txt haw.txt he.txt hi.txt\
 hr.txt hr_BA.txt hsb.txt hu.txt hy.txt\
 id.txt ig.txt ii.txt is.txt it.txt\
 ja.txt jgo.txt jmc.txt ka.txt kab.txt\
 kam.txt kde.txt kea.txt khq.txt ki.txt\
 kk.txt kkj.txt kl.txt kln.txt km.txt\
 kn.txt ko.txt kok.txt ks.txt ksb.txt\
 ksf.txt ksh.txt kw.txt ky.txt lag.txt\
 lb.txt lg.txt lkt.txt ln.txt ln_AO.txt\
 lo.txt lrc.txt lt.txt lu.txt luo.txt\
 luy.txt lv.txt mas.txt mas_TZ.txt mer.txt\
 mfe.txt mg.txt mgh.txt mgo.txt mk.txt\
 ml.txt mn.txt mr.txt ms.txt ms_BN.txt\
 ms_SG.txt mt.txt mua.txt my.txt mzn.txt\
 naq.txt nb.txt nd.txt ne.txt nl.txt\
 nl_AW.txt nl_BQ.txt nl_CW.txt nl_SR.txt nl_SX.txt\
 nmg.txt nn.txt nnh.txt nus.txt nyn.txt\
 om.txt om_KE.txt or.txt os.txt os_RU.txt\
 pa.txt pa_Arab.txt pa_Guru.txt pl.txt ps.txt\
 pt.txt pt_AO.txt pt_CV.txt pt_GW.txt pt_MO.txt\
 pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt qu.txt\
 qu_BO.txt qu_EC.txt rm.txt rn.txt ro.txt\
 ro_MD.txt rof.txt ru.txt ru_BY.txt ru_KG.txt\
 ru_KZ.txt ru_MD.txt rw.txt rwk.txt sah.txt\
 saq.txt sbp.txt se.txt se_SE.txt seh.txt\
 ses.txt sg.txt shi.txt shi_Latn.txt shi_Tfng.txt\
 si.txt sk.txt sl.txt smn.txt sn.txt\
 so.txt so_DJ.txt so_ET.txt so_KE.txt sq.txt\
 sq_MK.txt sr.txt sr_Cyrl.txt sr_Latn.txt sv.txt\
 sw.txt sw_CD.txt sw_UG.txt ta.txt ta_LK.txt\
 ta_MY.txt ta_SG.txt te.txt teo.txt teo_KE.txt\
 th.txt ti.txt ti_ER.txt to.txt tr.txt\
 twq.txt tzm.txt ug.txt uk.txt ur.txt\
 ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt\
 vai.txt vai_Latn.txt vai_Vaii.txt vi.txt vun.txt\
 wae.txt xog.txt yav.txt yi.txt yo.txt\
 yo_BJ.txt yue.txt zgh.txt zh.txt zh_Hans.txt\
 zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt\
 zh_Hant_MO.txt zu.txt

